Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


kyonides last won the day on March 31

kyonides had the most liked content!

Community Reputation


About kyonides

  • Rank
    Advanced Member

Profile Information

  • Interests
    Scripting, Writing, Prophecies

RPG Maker Information

  • RM Skill -

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Klass Change & Skills XP + VX + ACE by Kyonides Introduction Perhaps you have NEVER EVER noticed that there is a missing feature (bug?) in all of the RPG Maker editions regarding the class change and its corresponding skills. Pick either XP or VX ACE or even MV and you will get the same result, your hero could change his or her class indeed... at a cost of not learning anything already listed in his or her new skillset!😮 NOTHING! Here comes my scriptlet to let you solve this issue in a couple of creative ways! Do Nothing! - Default (Still Able to Learn Skills in the Future) Replace Old Skills with New Skills. Add New Skills while Keeping the Old Skills. Keep Some of the Old Skills while Learning the New Skills. Skill Learning Modes: nil :replace :add Number, actually an Integer Actor's Notes for VX ACE Code: _class skills mode: replace_ _class skills mode: add_ _class skills mode: 5_ DOWNLOAD DEMO Terms & Conditions Free for use in any kind of game Include my nickname in your game credits! If you can adopt any creature, just don't do it! That's it!
  2. If there's a guy that sells his soundtrack PACK for something around $10.00 and there's another one that only offers you like a couple of them, guess who will get preferred over the other by the patrons?
  3. KBlockStates XP + ACE by Kyonides Introduction This script prevents your heroes or your enemies from choosing a target that is still afflicted by a Blocked Target alias Untargetable State. Set the value of the TARGET_STATE Constant found in the KBlockStates module to your Untargetable State ID. Available States: Traditional Block Target or Untargetable State No Attack State - Simple Attacks Get Blocked! No Healing State - Healing Skills Get Blocked! Don't forget to ask Sylvia about the "Bad States" whenever you see her! Other Notes This scriptlet seems to work with the default battle system so feel free to try it in your game project. I have not tested it while using any other battle system. The only reason why I came up with this idea was because Hime's script had a weird bug that has remained untouched ever since 2015... DOWNLOAD DEMO Terms & Conditions Free for use in your game. Include my nickname in your game credits. That's it.
  4. I am not offering my services but just telling you that you might need to make a better offer than the current one to entice advanced scripters to join your project. (Unless that's not really what you want to do here.) And please don't rush to conclusions just because you don't know how to do something as you were told. Asking questions is not bad, feel free to inquire of anything for any good reason. Nonetheless, declaring that something is useless because it's not what you expected or you simply are a newcomer that doesn't know how to use it, is sort of offensive. This is especially true when a veteran scripter is trying to help you somehow. Just don't do it again.
  5. Guys, my solution consists of not using a game variable at all, allowing you to save your game variables for other more important uses than just some very specific enemy's speed. For instance, you could use that variable for storing your party's gold or steps or anything else. To implement it, you'd simply copy the original script posted on the first post and then change the parts that share the same module or class name and method name. The script call would be TH.Enemy_Reposition.move_speed = +number. I don't think number 0 would ever help you there. I would also like to inform people that since this seems to be used in battle, the move speed has no real limit. Well, it never had a true limit on the map anyway. It just happens that the GUI doesn't allow you to go above 6, still, you can do that via a script call or a combo of a new script and changing the value of a game variable. Depending on your goals going over 6 might be too fast for your taste or your players' so be careful about setting a high value to it. Of course, if it is supposed to move like a ghost or a speedster by design, it might look "natural" so to say. And as a friendly reminder, don't rush to radical conclusions like some other forumer did here that can make a scripter feel like he or she is wasting his or her time by trying to offer some assistance to the OP because the poster simply refuses to accept any piece of advice for not getting the type of answer the poster had expected.
  6. Go to the method I mentioned and replace its contents with your favorite game variable ONLY, just like you did it on your first post. And don't expect me to answer any more questions. If you can follow the instructions without questioning, fine. I'll ignore future inquiries on this topic, anyway.
  7. That's the problem of dealing with a newcomer that thinks he already knows how the code works... First of all, I wanna tell you I'm not forced to tell you anything, yet, I'll do it only because my teacher's side has emerged. Even so I'll make sure I won't repeat myself. Thus you better pay close attention to this issue. NO GLOBAL VARIABLES exist at the moment the game is loading. This means that it will fail all checks at the moment it reads the global variable's contents expecting to get an array that has NEVER been created at that point. Never forget that! Never! I said NEVER! Fail to remember that and it will keep throwing weird error messages at your face. WARNING: If you're thinking that it doesn't matter and you'll directly create the variable by setting it to an Array for any reason, it will still fail because it'll be reset when the game starts a new game session. Since you only care about using your favorite game variable, you have 2 options. Using the updated version of my proposed changes, stop using that game variable and start setting the value of TH::Enemy_Reposition.move_speed = 2 manually. This means, you'll be using that script call as many times as needed. Anyway, keep in mind it changes the speed of ALL ENEMIES. The other way is to simply forget about the starting value and make your favorite game variable the return value of the update_move_speed method. End of the Scripting Class
  8. Simply replace these parts of the code, and it should work normally. There's a caveat, you can't use a global variable that has not been initialized at that point. Thus you gotta pick any valid number instead. CODE UPDATED module TH module Enemy_Reposition @move_speed = 2 # $game_variables[4819] extend self attr_accessor :move_speed end end ... def update_move_speed TH::Enemy_Reposition.move_speed end The update_move_speed method can be found inside the Sprite_Battler class. Just go replace it at once.
  9. That's the problem here, the first condition sounds discouraging to say the least. :S
  10. kyonides

    Understanding RGSS

    Assignment != Equality && Assignment != Identity && Equality != Identity Let us review what an assignment actually is. It simply means that you pick either a Constant or a variable and set a value to that object and not any other around it. (Well, you could still do it but you got to have a valid reason for it or else do not even try to do that!) The assignment operator is an = equal sign. variable = actual_value That means that whenever you use that variable or Constant, it will always return the last value you have assigned to that particular object. You should not alter a Constant's value, though. :S Equality stands for something that has the save value as another object, be it a Constant or a variable. Use two == equal signs to make the comparison between two objects that might be different or not. CONSTANT = 1 @variable = 1 CONSTANT == @variable #=> Returns true The === identity operator! And finally, we got the identity operator === to help us define if an object has been placed on both sides of a given comparison. Here you got to be careful because it is excesively strict when looking for any identical value or object. range = 1..8 range === 5 #=> Returns true range === range #=> Returns... false! range == range #=> Returns... true! Object.new === Object.new #=> Returns false, they are two different Objects with their own IDs. Whenever you are using the case when statement to double check if a give variable is equal to another, it will use the === identity operator by default. As we could see in the first example of the identity checks, the first test returned a true-ish value because it used the === operator with EVERY SINGLE VALUE of that Range object until it hit number 5. Honestly, you should use the == equality operator for if and unless statements mainly because there is no specific reason to do otherwise. When using the case when statement, make sure you will be comparing the same kind of objects like numbers or classes. It will fail if you made a mistake and tested the value of a variable, like number 5, against a class like Integer, even if number 5 is an Integer object on its own right. Other Operators By the way, the != operator simply means Not Equal. The !=== Not Identical operator does exist as well, but it would be quite weird for you to find a good use for it anywhere. The && double et symbol you could find on the title of this very same post simply means and. A Terrible But Good Looking Error That Can Make You Break Your Head You will not be able to tell why it is not working as intended because it will make you think everything is fine. variable == 100 || 50 Yeah, everything looks terrific and it NEVER throws any error at your face at all. Really guys, it never will. 100% guaranteed! Still, it is a huge mistake under most circumstances. The reasoning behind it is QUITE SIMPLE indeed. How do you know if the test is always working as intended if it never fails? Keep in mind that any object other than nil and false are treated as true by default. So tell me why is that a problem for any novice scripter? It is a huge problem because you wound up defining a conditional statement you never needed. I mean, if you always get a true-ish value back, why bother at all? You could simply remove it and the script would work as usually does. But I need it to reject certain requests because it did not hit the 100% accuracy I need in my skill, item consumption, etc. If that is true, then you better delete the "|| number" part at once. I cannot. I need it to also work if it hits the 50% mark... You get a yellow card for making such a noob mistake then. Actually, the only way that would work is to define the condition like I do it right below this very same line. variable == 100 || variable == 50 I would suspect you come from a different programming language that allow you to do that or you simply watched some video tutorial that was not Ruby specific at all. Stop mixing language syntaxes right there! Don't do it ever again! It is for your own benefit, anyway.
  11. kyonides

    Understanding RGSS

    When to Use the Module Class' include Feature I have seen many times that people kind of abuse of the :: scope operator when they are fiddling with modules. That inspired me to revisit the modules to make sure they stop repeating themselves like crazy. Basic Setup Modules module SomeUser module Config DEFAULT_FONT_SIZE = 20 DEFAULT_TITLE = "Some Label" end end So far there is nothing new to see here but everything changes Shocked once we start dealing with a specific Window class. Detective Let us take a look at some fake Window_TitleCommand Add-on. class Window_TitleCommand alias :some_user_config_win_ttl_comm_draw_item :draw_item def default_font_size SomeUser::Config::DEFAULT_FONT_SIZE end def draw_item(index) some_user_config_win_ttl_comm_draw_item(index) contents.font.size = self.default_font_size text = SomeUser::Config::DEFAULT_TITLE contents.draw_text(4, 26, contents_width, 24, text, 1) end end As you can see above, we had to use the :: scope operator several times in our scriptlet. Happy with a sweat Honestly, I got to tell you that it is not elegant at all. Confused The more Constants you include the worse it will look like. Let's make some modifications to the original code. class Window_TitleCommand include SomeUser::Config alias :some_user_config_win_ttl_comm_draw_item :draw_item def draw_item(index) some_user_config_win_ttl_comm_draw_item(index) contents.font.size = DEFAULT_FONT_SIZE contents.draw_text(4, 26, contents_width, 24, DEFAULT_TITLE, 1) end end Wunderbar! Shocked Wonderful! Now it looks quite neat! And we can even skip the creation of needless methods only to call the same long line of code we could find inside the default_font_size over and over again. There is a caveat, though. You should NOT do that if you are working on a class that inherits the methods you have altered there. This is especially true if at least one of its child classes does not need such modifications at all. I seriously Serious recommend you to only include the modules in Baby child classes and nowhere else unless you know what you are doing.
  12. KDualWield & Accessory Skills XP + VX + ACE by Kyonides Introduction Do you want to force your heroes to equip two weapons and probably even an accessory before they can use that super cool skill you have come up with? :think: Now you can do it! 😀 XP handles it in an entirely different way, so I prefer not to post the code here. XP users will feel more comfortable by testing the demo. You will need to use 1 out of 2 Note Tags to that Skill Notes to make it happen! 😉 VX Script # * KDualWield & Accessory Skills VX * # # Scripter : Kyonides Arkanthes # 2023-02-09 # * Free as in beer * # # Force your heroes to equip specific weapons or even an accessory as well # in order to be enabled to cast a specific skill. # NOTE: The Weapons Order does NOT matter here! # * Note Tags * # # - For Dual Weapons: _dual 1 2_ # - For Weapons & Accesory: _dual 1 2 acc 1_ module KDualWield REGEX_WEAPONS = /_dual (\d+) (\d+)_/i REGEX_WEAPONS_ACCESSORY = /_dual (\d+) (\d+) acc (\d+)_/i end class Game_Battler alias :kyon_dual_wpn_skill_can_use? :skill_can_use? def skill_can_use?(skill) result = kyon_dual_wpn_skill_can_use?(skill) return result if self.class == Game_Enemy or !two_swords_style if skill.note[KDualWield::REGEX_WEAPONS] return both_weapons?($1.to_i, $2.to_i) elsif skill.note[KDualWield::REGEX_WEAPONS_ACCESSORY] return weapons_acessory?($1.to_i, $2.to_i, $3.to_i) end result end end class Game_Actor def weapon_ids [@weapon_id, @armor1_id] end def both_weapons?(w1, w2) weapon_ids.sort == [w1, w2].sort end def weapons_acessory?(w1, w2, a1) both_weapons?(w1, w2) and @armor4_id == a1 end end VX ACE Script # * KDualWield & Accessory Skills ACE * # # Scripter : Kyonides Arkanthes # 2023-02-08 # * Free as in beer * # # Force your heroes to equip specific weapons or even an accessory as well # in order to be enabled to cast a specific skill. # NOTE: The Weapons Order does NOT matter here! # * Note Tags * # # - For Dual Weapons: _dual 1 2_ # - For Weapons & Accesory: _dual 1 2 acc 1_ module KDualWield REGEX_WEAPONS = /_dual (\d+) (\d+)_/i REGEX_WEAPONS_ACCESSORY = /_dual (\d+) (\d+) acc (\d+)_/i end class Game_Battler alias :kyon_dual_wpn_skill_cond_met? :skill_conditions_met? def skill_conditions_met?(skill) result = kyon_dual_wpn_skill_cond_met?(skill) return result if self.class == Game_Enemy or !dual_wield? if skill.note[KDualWield::REGEX_WEAPONS] return both_weapons?($1.to_i, $2.to_i) elsif skill.note[KDualWield::REGEX_WEAPONS_ACCESSORY] return weapons_acessory?($1.to_i, $2.to_i, $3.to_i) end result end end class Game_Actor def equip_weapons @equips[0..1].map{|w| w.object ? w.object.id : -1 } end def both_weapons?(w1, w2) equip_weapons.sort == [w1, w2].sort end def weapons_acessory?(w1, w2, w3) both_weapons?(w1, w2) and @equips[4].object.id == w3 end end Download Now! Terms & Conditions Free as in beer. Include me in your game credits! Do not repost it anywhere!
  13. kyonides

    Help with Yanfly's Victory Aftermath

    On a new project just add that Aftermath script. Then add 1 of the other scripts and go test the game again. If everything works as intended, add another script. Keep repeating this process. Pay attention to the exact moment when it stops showing the stats. Stop adding more scripts to the new project. Come back with the results.
  14. kyonides

    KyoAlert XP-MV

    The Kitten Ordeal Minisodes Have Arrived! They explain the situation that lead me to rebrand this family of scripts. Sort of. XD
  15. kyonides

    Need help managing generator assets

    If they share a common filename that needs to be converted to a predefined one... perhaps it could be done with a script or plugin but...
Top ArrowTop Arrow Highlighted