Jump to content

kyonides

Member
  • Content Count

    37
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by kyonides

  1. It took me a couple of hours to figure out what the RM devs had changed in the source code when developing MV's default plugins by defining functions with names that were never used in the RGSS based engines. Even so, that didn't prevent me from publishing KItemAlert MV! XD

  2. kyonides

    KItemAlert

    KItemAlert XP + VX + ACE + MV by Kyonides Introduction It simply displays a small notification alert somewhere on the screen depending upon the configuration of its KItemAlert module. The script will show it whenever you gained or lost any item, weapon, armor, or gold coins. It is possible to change the position of the icon and the item's name. Screenshots Download Now! Terms & Conditions It's free as in beer. Include me in your game credits. Do Not Repost It!
  3. kyonides

    KItemAlert

    A New Port Has Arrived! Now MV can also enjoy the benefits of using the KItemAlert plugin!
  4. Busy reporting an insignificant Ruby "bug" that nobody would ever trigger if they do learn how to program in Ruby correctly...
    Yet, it's some real bug-like stuff, guys!

    1. Kayzee

      Kayzee

      what's the bug?

  5. kyonides

    Understanding RGSS

    This thread will be one of those basic tutorials that will start by telling you the basics of crafting scripts on your own. In the worst case scenario, you will be able to make minor edits without much help from actual scripters. Basic Concepts object - pretty much anything in Ruby and RGSS, including numbers to some degree. It is the basic building lego block. value - almost identical to object but it refers to what is actually returned by some script call, a method, etc. It is or might be contained by a variable. variable - x or y or z are common examples of variables used frequently in Ruby or RGSS scripts. They are the containers of any specific value / object. They can easily be treated as methods depending on how you have defined your custom class or module. method - sometimes also known as attribute, a basic component of a class or module. They are attached to its class or module. 1.to_s calls the convert to string method, turning it into "1" at once. Now you can use it on any window! class - a Class that can be initialized or constructed via the new method. module - a Module that is used as a container. It is not supposed to be used as a class for you cannot make any copies of it. It will always keep all of its internal variables intact till you close your game. Not even loading a different saved game will alter it by default. NOTE: Module itself is a class but one that cannot be initialized nor constructed by using new. All attempts to do such things will certainly fail. When Should You Use a Class or a Module? Pick a class if you need to make copies of tha object like Actors or Enemies or Items. Use or call a module if you want to use system wide functions that might alter your game somehow. The best example would be the Graphics module. Call Graphics.resize_screen(W, H) on RGSS3 (ACE) and you will be able to increase or decrease the window size a little bit. NOTE: $game_temp or Game_Temp class could have been easily be defined as a Game_Temp module for all of its methods and internal values are temporary by nature and you don't need multiple copies of it. When NOT to Use a Class You don't need to create a new class if an Array or Hash object can easily help you with storing its values. Module's Special Feature It is definitely true that you cannot initialize a Module, meaning that you will ever get a copy of it. Yet, you can easily mix it into a Class. From that moment all most of its variables and methods become the new methods of that specific Class. Let us take a look at the following example of how you are supposed to define a module and also a brand new class. module Test def running? true end end class Maker include Test end Did you see that include Test statement over there? It means that Test has become an integral part of Maker class. Now you can call it like this: klass = Maker.new klass.running? And it will return true as it current value. What is true? Anything that has been confirmed or exists, a truthy value. Am I getting philosophical here? Well, kind of. true represents what is really there, what can be found as many times as needed. What happens if it is a lie or is incorrect or does not exist at all? Then it would be false. Obviously false is the opposite of true just as much as a lie is the opposite of the truth. A Caveat Has Been Found! Ruby and RGSS have a weird but not so unusual feature in programming languages, namely the nil value. Basically, nil is its official non existing value, even if its a value on its own right. XD Curiously, it also works as a substitute for a false value in many cases. Whenever an object does not exist because it has never been called or defined as a variable or class or module, it is certainly equal to nil. Now comes the most intriguing feature that has been bugging you ever since you began reading this tutorial... What the hell is that stupid dot . doing there? Nope, it is not just a punctuation mark. It is a connection! It connects the method to its own class or method or variable or even to its number value. OK... What does def stand for? Short answer: definition. It allows you to define a class or module's method. And before you even ask it, know that the term end means, well, end! XD It marks the end of the century! OK, nope. It is the end of a method or class or module definition. That's all, folks!
  6. kyonides

    Understanding RGSS

    The Other Bad Practices Found in RGSS Scripts We all should know by now how to declare an if or unless conditional statement. Happy with a sweat Yet, there are people out there that do weird stuff while doing so. In some cases the culprit was the RMXP's default code. For those guys that entered the scene after RMVX or RMVX Ace came out, I have no excuse. Confused if variable == true print "It's true!" end if variable == false print "It isn't true..." end This is one of the most extreme cases seen so far. For some reason, the guy checks the same variable twice, once for a truthy value and another for its opposite value. It is terrible! Angry Just like in many other languages, there are other ways to check the same value appropiately, without repeating oneself. if variable == true print "It's true!" elsif variable == false print "It isn't true..." end There we can see how to define a second condition using elsif instead. It certainly means "else if" there. If we were checking for totally different values, that solution would be fine. Even so, we are only checking what is its actual boolean value and under such circumstance, there is an easier way to deal with it. if variable == true print "It's true!" else print "It isn't true..." end Yes guys! That is all you needed to do from the very beginning! Laughing Shocked But wait! There is more you need to learn here about those statements! if is_variable print "It's true!" else print "It isn't true..." end Grinning It is quite interesting how the code still works, don't you think? Thinking But why does it work here? Who Knows? There is an easy explanation. In Ruby, unlike C or C++, all objects return a truthy value if they are not equal to nil of the NilClass or false for obvious reasons. In C it would be quite common to see something like the following code: if (result) { return "You were successful!"; } else { return "You failed!"; } The negative way to declare that kind of statement would be: if (!state) { return "LoadError: Failed to load script."; } A ! bang, yes, a ! bang there means negative value or opposite value or simply false. And guess what? That does exist in Ruby as well! if !is_done print "In the works!" else print "Done!" end Of course, newcomers might need to include the equality operator and the true value like this == true but in the professional world that is not used at all. The only reason why you would ever, if ever, use it would be to test if an object is equal to true or false or nil in a threefold check. And this is extremely uncommon, guys! Happy with a sweat Toggling Switches So how can we apply that knowledge to changing the boolean value of a Game Switch? Thinking Just use the following code: $game_switches[1] = !$game_switches[1] A Curious But Nonsensical Idea Some time ago somebody wrote me a message telling me how dangerous it would be to do the following while using modules and classes. module Some ONEISTHERE = "Someone is there!" class Thing include Some end end OK, I got to say that it is idiotic per se, still, this person wanted me to warn you about it. The reasoning behind it was that it would create a terrible loop that should be avoided at all costs. Interesting conclusion. Thinking [Mad Scientist Mode ON] Let us test this theory, guys! Nope, as we can see in the picture above, that is CERTAINLY NOT the case there! What has happened was that we simply created a "new link" to the Constants already declared in the module above. The only thing we have achieved was to come up with a redundant way to get to the same old Constant. XD It was totally unnecessary for sure. =_=¡ [Mad Scientist Mode OFF]
  7. KMessageTarget MV 2 Versions by Kyonides Arkanthes Introduction By default the Battle Log doesn't expect you to add a target's name to a skill action message. This plugin changes that to make sure you can certainly read who's the hero's current target. Simple Version //=========================================== // * KMessageTargetMV.js - Simple Version //=========================================== /*: * @plugindesc This plugin will let you add the enemy's name to a skill's * action message by using a tag or wildcard. * @author Kyonides Arkanthes * @help Date: 2023-01-30 * # * Free as in beer. * # * The regular expression or regex is %e by default. */ function KMessageTarget() { throw new Error('This is a static class'); } KMessageTarget.regex = /%e/i; Window_BattleLog.prototype.displaySkillTargets = function(subject, item, targets) { let target = 0; let msg = ""; for (var i = 0; i < targets.length; i++) { target = targets[i]; if (item.message1) { msg = subject.name() + item.message1.format(item.name); msg = msg.replace(KMessageTarget.regex, target.name()); this.push('addText', msg); } if (item.message2) { this.push('addText', item.message2.format(item.name)); } } } const KMessageTarget_win_btl_log_displayAction = Window_BattleLog.prototype.displayAction; Window_BattleLog.prototype.displayAction = function(subject, item, targets) { if (DataManager.isSkill(item)) { this.displaySkillTargets(subject, item, targets); } else { KMessageTarget_win_btl_log_displayAction.call(subject, item); } }; Window_BattleLog.prototype.startAction = function(subject, action, targets) { let item = action.item(); this.push('performActionStart', subject, action); this.push('waitForMovement'); this.push('performAction', subject, action); this.push('showAnimation', subject, targets.clone(), item.animationId); this.displayAction(subject, item, targets); }; Full Version //=========================================== // * KMessageTargetMV.js - Full Version //=========================================== /*: * @plugindesc This plugin will let you add the enemy's name to a skill's * action message by using a tag or wildcard. * @author Kyonides Arkanthes * @help Date: 2023-01-30 * # * Free as in beer. * # * * The regular expressions or regex are * %a for an Actor or Ally * %e for an Enemy * * Note Tag: _party item_ * It allows your hero uses an item on all of his or her allies while preventing * the Battle Log from repeating itself over and over again. * * You can customize the KMessageTarget.party_as_target string if necessary. */ function KMessageTarget() { throw new Error('This is a static class'); } KMessageTarget.item_list = [1, 6]; KMessageTarget.actor_regex = /%a/i; KMessageTarget.enemy_regex = /%e/i; KMessageTarget.no_target_item = / on %a/i; KMessageTarget.party_item = /_party item_/i; KMessageTarget.party_as_target = "the party"; Window_BattleLog.prototype.displaySkillTargets = function(s_name, item, targets) { let target = 0; let msg = ""; for (var i = 0; i < targets.length; i++) { target = targets[i]; if (item.message1) { msg = s_name + item.message1.format(item.name); msg = msg.replace(KMessageTarget.actor_regex, target.name()); msg = msg.replace(KMessageTarget.enemy_regex, target.name()); this.push('addText', msg); } if (item.message2) { this.push('addText', item.message2.format(item.name)); } } } Window_BattleLog.prototype.processNames = function(s_name, item, t_name) { let msg = TextManager.useItem.format(s_name, item.name); if (!KMessageTarget.item_list.includes(item.id)) { msg = msg.replace(KMessageTarget.no_target_item, ""); } msg = msg.replace(KMessageTarget.actor_regex, t_name); this.push('addText', msg); } Window_BattleLog.prototype.displayItemTargets = function(s_name, item, targets) { if ( KMessageTarget.party_item.exec(item.note) ) { this.processNames(s_name, item, KMessageTarget.party_as_target); return; } let target = 0; for (var i = 0; i < targets.length; i++) { target = targets[i]; this.processNames(s_name, item, target.name()); } } Window_BattleLog.prototype.displayAction = function(subject, item, targets) { let numMethods = this._methods.length; if (DataManager.isSkill(item)) { this.displaySkillTargets(subject.name(), item, targets); } else { this.displayItemTargets(subject.name(), item, targets); } if (this._methods.length === numMethods) { this.push('wait'); } }; Window_BattleLog.prototype.startAction = function(subject, action, targets) { let item = action.item(); this.push('performActionStart', subject, action); this.push('waitForMovement'); this.push('performAction', subject, action); this.push('showAnimation', subject, targets.clone(), item.animationId); this.displayAction(subject, item, targets); }; Side Note: There should be another regex that I could have used there, yet, I preferred to use a very specific one that people could quickly interpret as an enemy's name if they ever find it in the message box. We could say it's a very friendly reminder of what it actually stands for. Terms & Conditions Free as in beer. Include my nickname in your game credits. Read the instructions. Do not repost it.
  8. KTouchNewMapEvent XP + VX + ACE + MV by Kyonides Arkanthes Introduction Did you ever want that the engine would autorun events right after being touched by the player or another event? Especially once it finishes transferring the player to a new map... Now you can do that! Just copy and past the following snippet on your script editor! Download the Scripts! XP Version # * KTouchNewMapEvent XP # Scripter : Kyonides Arkanthes # 2022-09-29 # * Plug & Play Script * # # This scriptlet allows you to run an event after being transferred to another # map. It will run even if the trigger were the Player Touch or Event Touch one. # * Aliased Method: Game_Event#initialize class Game_Event alias :kyon_touch_new_map_event_init :initialize def initialize(map_id, event) kyon_touch_new_map_event_init(map_id, event) check_shared_location end def touch_trigger?() [1, 2].include?(@trigger) end def player_new_x?() $game_temp.player_new_x == @x end def player_new_y?() $game_temp.player_new_y == @y end def check_shared_location start if touch_trigger? and player_new_x? and player_new_y? end end VX Version # * KTouchNewMapEvent VX # Scripter : Kyonides Arkanthes # 2022-09-29 # * Plug & Play Script * # # This scriptlet allows you to run an event after being transferred to another # map. It will run even if the trigger were the Player Touch or Event Touch one. # * Aliased Method: Game_Event#initialize class Game_Player attr_reader :new_x, :new_y end class Game_Event alias :kyon_touch_new_map_event_init :initialize def initialize(map_id, event) kyon_touch_new_map_event_init(map_id, event) check_shared_location end def touch_trigger?() [1, 2].include?(@trigger) end def player_new_x?() $game_player.new_x == @x end def player_new_y?() $game_player.new_y == @y end def check_shared_location start if touch_trigger? and player_new_x? and player_new_y? end end VX ACE Version # * KTouchNewMapEvent ACE # Scripter : Kyonides Arkanthes # 2022-09-29 # * Plug & Play Script * # # This scriptlet allows you to run an event after being transferred to another # map. It will run even if the trigger were the Player Touch or Event Touch one. # * Aliased Method: Game_Event#setup_page class Game_Player attr_reader :new_x, :new_y end class Game_Event alias :kyon_touch_new_map_event_setup_page :setup_page def touch_trigger?() [1, 2].include?(@trigger) end def player_new_x?() $game_player.new_x == @x end def player_new_y?() $game_player.new_y == @y end def check_shared_location start if touch_trigger? and player_new_x? and player_new_y? end def setup_page(new_page) kyon_touch_new_map_event_setup_page(new_page) check_shared_location end end MV Version //================================== // * KTouchNewMapEventMV.js //================================== /*: * @plugindesc This plugin will be triggered if any given event's coordinates * match the player's and its trigger is either a Player or Event Touch. * @author Kyonides Arkanthes * @help Date: 2023-01-29 * */ const KTouchNewMap_event_setupPage = Game_Event.prototype.setupPage; Game_Player.prototype.newMapX = function() { return this._newX; } Game_Player.prototype.newMapY = function() { return this._newY; } Game_Event.prototype.setupPage = function() { KTouchNewMap_event_setupPage.call(this); this.checkEventTriggerNewMapTouch(); }; Game_Event.prototype.checkEventTriggerNewMapTouch = function() { if (this._trigger == 1 || this._trigger == 2) { if ($gamePlayer.newMapX() == this.x && $gamePlayer.newMapY() == this.y) { this.start(); } } }; Notes Honestly, there are other ways to trigger events without using scripts. Yet, you can still use my scriptlet to make it possible by setting its trigger as Player Touch or Event Touch. Terms & Conditions Free as in beer and as in speech. Please include my nickname in your game credits.
  9. KSkillNeedsState XP + VX + ACE by Kyonides Arkanthes Introduction Do you need to restrict the usage of a skill by forcing the hero to get a specific state first? Now you can do that! In XP's case Adjust the Constants you can see below as deemed necessary. module KSkillNeedsState SKILL_IDS = [57] STATE_ID = 17 end In VX & VX ACE The only thing you need to do is leaving a very specific note in the skill's note box. _need state ID_ Replace ID with a number. Download the Demos! XP Version # * KSkillNeedsState XP * # # Scripter : Kyonides Arkanthes # 2023-01-29 # * Free as in Beer * # # Adjust the values of the SKILL_ID and STATE_ID Constants at will. module KSkillNeedsState SKILL_IDS = [57] STATE_ID = 17 end class Game_Battler alias :kyon_gm_btlr_skill_can_use? :skill_can_use? def skill_need_state?(skill_id) KSkillNeedsState::SKILL_IDS.include?(skill_id) end def has_state_dependent_skill? state?(KSkillNeedsState::STATE_ID) end def skill_can_use?(skill_id) result = kyon_gm_btlr_skill_can_use?(skill_id) if result and skill_need_state?(skill_id) result = has_state_dependent_skill? end result end end VX Version # * KSkillNeedsState VX * # # Scripter : Kyonides Arkanthes # 2023-01-29 # * Free as in Beer * # # Leave this note _need state ID_ in the Skill's Note box. # There ID stands for any existing State ID. module KSkillNeedsState SKILL_REGEX = /_need state (\d+)_/i end class Game_Battler alias :kyon_gm_btlr_skill_can_use? :skill_can_use? def skill_need_state?(skill) return true if skill.note[KSkillNeedsState::SKILL_REGEX] == nil state?($1.to_i) end def skill_can_use?(skill) result = kyon_gm_btlr_skill_can_use?(skill) result = skill_need_state?(skill) if result result end end VX ACE Version # * KSkillNeedsState ACE * # # Scripter : Kyonides Arkanthes # 2023-01-29 # * Free as in Beer * # # Leave this note _need state ID_ in the Skill's Note box. # There ID stands for any existing State ID. module KSkillNeedsState SKILL_REGEX = /_need state (\d+)_/i end class Game_Battler alias :kyon_gm_btlr_skill_cond_met? :skill_conditions_met? def skill_need_state?(skill) return true if skill.note[KSkillNeedsState::SKILL_REGEX] == nil state?($1.to_i) end def skill_conditions_met?(skill) result = kyon_gm_btlr_skill_cond_met?(skill) result = skill_need_state?(skill) if result result end end Terms & Conditions Free as in beer. Include my nickname in your game credits.
  10. kyonides

    alternate battle drop treasure screen

    I don't pretend to give you hope on getting a direct answer, but I felt the need to ask you this: are you using a frontview or sideview battle system? Or some action BS? Every single one of them would require a different approach depending on the BS and their custom functions.
  11. kyonides

    Hello everyone.

    And from your experience, is Unity suited for RPG's? Or it'd be better to use it to develop other game genres?
  12. kyonides

    eventing Detect Distance Between Player and Object

    OK, here's another explanation on why he had to multiply by -1 while calculating the distance via event commands. It's because the engine developers didn't think it was necessary to add the absolute value concept in the Change Game Variable event command. The same calculation could have been done by adding distance_x.abs + distance_y.abs in Ruby and RGSS. Giving thumbs up to Vectra for coming up with this way to event it. So let's go back to 7th grade stuff here. |a - b| = |b - a| # Example 1 |5 - 2| = |3| = 3 # Example 2 |-2 - 5| = |-7| = 7 # Example 3 |3 -(-2)| = |3 + 2| = |5| = 5 In Ruby and RGSS it would be coded like this: dx = (x1 - x2).abs #=> Integer dy = (y1 - y2).abs #=> Integer d = (dx + dy).abs #=> Integer The pipes there are a symbol for the absolute value, which will end up being used as distance. In Ruby we use the abs method instead. Integer there is a placeholder for any positive number, in this case there are no decimals nor fractions involved. #=> is just a Rubyist's way to tell you what might be its return value from a human perspective without executing that part of the code. # marks the beginning of an inline comment. The equation tells us that no matter which one you subtract from the other value, the absolute value remains the same and will always be positive. So if you get as a result -7 or 7, the real distance will always be 7. You only use the negative value as a way to tell the player or game dev if the direction is negative. How does that translate to RGSS or even JS in the RM series? It's quite simple. -X means to the left hand side while -Y will always be to the upper border of the game window. If you just need either the distance on the X or Y axis, you gotta skip the third line of code then. Well, I'm leaving here some interesting read for geeks just in case they care about weird programming stuff.
  13. kyonides

    VX Ace F12 Fix: Not Fully Functional

    module SceneManager def self.run begin DataManager.init Audio.setup_midi if use_midi? and !@skip_midi @scene = first_scene_class.new @scene.main while @scene rescue RGSSReset @scene.terminate if @scene @skip_midi = true clear retry end end end That would be my modified version of Kayzee's code, but you could still alias SceneManager.run if you like but it's not really necessary in this case.
  14. kyonides

    Hello everyone.

    So tell us about your game projects or ideas. What's your favorite engine?
  15. kyonides

    Understanding RGSS

    The Lack of Interest into Fully Understanding a Programming Language Many but many scripters around even to this day tend to misuse a feature of Ruby just because they found something similar in the default scripts. This has been true ever since RMXP came out as the first engine with some scripting capabilities and still returns every so often in VX Ace. Defining a Class or Module As I told you before, there is a simple way to create a class. module MyModule end class MyClass include MyModule end And you can even include modules, not just one but many in a row! Just separate them by using commas. So what's wrong with it? Nothing. It has been correctly executed there. What I would like to criticize now is the lack of knowledge those scripters have shown over the years. It all begins with stuff like this. class MyCommandWindow < Window_Selectable end Here many people fall in a trap that won't normally cause any issues except when they do it once again! Yes, they repeat the same declaration over and over again every single time they define what we call the Parent Class or Super Class. What it means is that MyCommandWindow is the Child Class of Window_Selectable, making it a window with menu features preincluded by default, even if they had been created in Window_Selectable only. And guess what? Window_Selectable class is a Child Class of Window_Base and the latter is the Child Class of Window! As you can see the list can go way beyond your imagination, really it does. But why do they keep repeating the same mistake over and over again? That's because they lack some insight of Ruby inner workings like the C side of Ruby code. Yeah, Ruby is run on C functions. Every single Ruby Object is a special C struct. The way I'll explain this issue is the following: declaring the class or module serves 2 main purposes. Define the class or module and its parent class or module (as in a module nested inside another module). Do this once if they do have a parent class. Reopen the class or module. That's it! Ruby isn't like Java. The latter made it overly complicated to extend certain basic features like printing stuff on a shell or console. Ruby just has OPEN CLASSES! That's a nice feature that lets us add as much stuff as deemed necessary and alias (keep a reference to a preexisting method) a given method at will. Downside: It might allow many people to rely on monkeypatching default classes as a way not to create child classes or delegate them to custom classes. In CRuby you would use a function called rb_define_class("MyClass", rb_cObject) instead. Modules don't need a second parameter: rb_define_module("MyModule"). Internally it's used to determine if a class exists. Otherwise, it'll look for functions like rb_obj_alloc and stuff like rb_class_new and even an initializer., which can be your very own custom function or call your Ruby initialize method. A Ruby side initialize definition will certainly overwrite a C side one. So whenever you repeat the whole statement, you keep telling the Ruby system that it should now check the parent class once again! Why on earth!? It kept it in memory and won't forget it as long as the program is running. Thus, it makes no sense to insist on declaring that there. And what comes next is especially directed at newcomers and slightly experienced scripters: stop doing it or you might end up making a mistake like declaring the wrong parent class! This issue is similar to another one that keeps showing up in newcomers' codes, the excess of checks by calling too many if or unless or case statements to get to a single point where they simply need to change a variable's value, especially common whenever they need to toggle switches. But this topic might be something that should be handled in a separate post...
  16. As a matter of fact I asked them to be kicked. Not joining that discord channel as a full member ever again. it's not worth my time. There was a recent case on RMW that made me wonder if the forumers there are really worried about some real troll or they were just uncomfortable to see that some unknown user was trying to make him or her slightly known there. They don't even mention that guy by nickname at all. It sounds like they could kick that forumer out of "valid concerns" on the forum's so called friendly environment. Yeah, probably the scripters and coders still available on the official forums are still there because of some $pecific motivation or because they're noob enough as to think that there's room for them there. It's not a toxic environment but I can't say it's really welcoming for it isn't. Being ignored seems to be the norm for not few of the forumers. And don't forget you've been banned on RMW not once but probably a couple of times already. Just get over it and behave like normal people do. People that don't wanna pick fights over non sensical stuff like you have been doing for quite some time. Why should you care about other people's mindset? What if they make an attempt to look foolish or smart or mysterious or anything else? It's up to them, it's not your life. Let them be.
  17. kyonides

    VX Ace F12 Fix: Not Fully Functional

    Well, Ron, it's hiddenchest indeed. All of the internal variables and constants prove it. I didn't notice the typo, but it's easy to fix it. They said somewhere else that mkxp-z was supposed to handle many but not all of the Win32API calls. I'm surprised to hear it doesn't. The only real advantage that mkxp-z seems to have is the scaling factor. Yet, that would only help if you plan to release pokemon like kind of games that use resources that are simply too small for XP or VX Ace. The only non pokemonic example I know about would be Drekirokr, a fellow countryman's pet project.
  18. We barely know what other things Celianna has done so far. This thread and perhaps another one as well have been the only places where something like this has shown up. Well, it seems like they don't want to deal with you anymore. Good for them. XD You can be toxic for sure. Not saying you're ALWAYS toxic. Sometimes you behave like reasonable people but there were days where you exploded for reasons that were partially explained or not that much. I don't know what else happened between Celianna and you or some other people, yet, it seems like there's chance they've founded a cult there. That sounds quite unhealthy even for her own followers. Will RMW fall any time soon? I don't think so. Old sites keep disappearing so new people or some guys that had been absent for ages would eventually return to that forum. What I have seen is that even people like Avery can be a bit cold and ignore certain things that people tell her. Not as close as Celianna, but she's kind of undergoing the same cultish process... at her own pace I might say. It would be sad it the full fledged transformation truly takes place in the (near?) future. Stop getting bothered by the necrothing. I'm just trying to make things look a little bit... alive to so say. Of course, if some mod finds it bothersome to keep posting a few things here and there, fine, I won't mind leaving things as they are. This doesn't mean I wanna revive even a 10% of all threads. Nah, very few could ever catch my attention. Another reason why I posted some of my stuff was that I know some of the fellow forumers and decided to let them know something about a certain topic, etc. There were times where I had to stay away from a few users because they kept bugging me concerning some coding stuff and hell, I couldn't even take a break! So I had to be snobbish and treated them like nobodies for a while till I could feel relaxed and were able to focus on some other things that were important to me.
  19. I do recall a time when dunno who was, Wulfo perhaps, who mentioned that Victor Sant had been trolled by some guys upto a point where he changed his nickname and his website, etc. Why would a scripter or coder become so "selfish" or proud? You already mentioned one of the reasons in your post, but the other one is the survival strategy. They start believing that being real asses will help them survive the number of harassers, people demanding him to do CUSTOM changes on his or her code, plus all those commissioning him or her for crafting new scripts and improving some old code. Honestly, it kind of works in several virtual life scenarios to keep most of them at bay. Were some of them real crybabies? Probably yes, and yes, their personalities still play a large role there as well. I still do recall when I interacted with SephirothSpawn and he never stopped thinking I could become an actual scripter but I've been one for quite some time.
  20. kyonides

    Editing HP Bars (thickness)

    It's good to leave actual answers to their coding problems. Since a necropost here isn't harmful at all, I don't mind leaving some piece of advice behind for those future visitors that want to improve their coding knowledge.
  21. KSafePoint XP by Kyonides Arkanthes Introduction I was bored and decided that I should make a Save Point Tent script of my own. It will handle the items, the terrain tag, the charset, the music and the timer! Download Now! Terms & Conditions Free as in beer! Include my nickname in your game credits. Please send me a copy of your finished game. Do Not Repost IT! XD
  22. kyonides

    rpg maker xp KSafePoint

    For some people, especially newcomers, it might come handy to use the script for it takes care of all the settings, including the Save Point and the Map BGMs. It also has a feature that no RGSS based engine has: to restrict the use of a sleeping bag or tent to a specific tile or in XP's case a terrain tag.
  23. KOpenWeb XP + VX + ACE by Kyonides Arkanthes Introduction Did you ever want to let your gamers open your official website? Now you can do it! Just read the instructions embedded in the script and you are good to go! XP Script VX Script VX ACE Script kopenweb_ace.rb kopenweb_vx.rb kopenweb_xp.rb
  24. kyonides

    Just arriving...

    I wanted to say hi. By the way, I find it curious that I had not been registered before. Perhaps I was just being lazy for a change. XD Yeah, I'm a scripter. I rarely make my custom sprites for stuff like buttons, but I'm no pro. Actually I can't even be considered an amateur spriter IMHO. =_=¡
  25. Can a scripter or plugin maker be criticized for erecting a paywall to keep his or her products under his or her control? Of course they do! People can do that at any point. Yet, in those cases where the average folk managed to grab a script before there was a need to pay for that code, there is no need to go back to the scripter and pay him or her for that. That does not allow anyone to redistribute that piece of code. It meant that it was free for YOU to download it back then but not anymore. Whenever you need to go through a trial to expose somebody for committing plagiarism, you need to either prove that they obtained the code illegally, like by being distributed underground without the creator's or owner's consent, or that it includes LARGE portions of code that were produced or published by the original author or publisher before anybody else could do so. Under such conditions, Enterbrainless could have accused many people of plagiarizing several lines of their code over the years. Nonetheless, the license was permissive enough to let us do so on a daily basis if we owned the product, meaning nobody would be persecuted for doing so. In fact, EB even "stole" some code from fellow scripters when they mimicked the concept of the Scene_Base class. Why could they do so freely? Because the terms of the SDK project were permissive. Yes, those poor users or forumers that never got a chance to check them out for free have to pay the price for those that recklessly distributed those scripts. Vices and bad habits have nasty consequences for other people, like it or not. Plus, what is wrong for asking for some money for a product you have created / developed on your own? It is like saying that Celianna cannot demand money from people for using her tilesets. I am not defending her or the like, but we all got to admit that she is a talented tileset maker. This does not mean that she particularly produces tilesets fit for immediate use in VX Ace or later installments of the Maker. I have bought one of hers that certainly need some editing. That does not allow us to say that she scammed anybody, I still got several tilesets after all. Even so I would support anybody's claim that she can or needs to improve her product's QA process. After all, leaving a good impression on customers always matter in the business world.
×
Top ArrowTop Arrow Highlighted