Lay Zee Boy Custom Experience and Character Statistics System written and created by: chibi evil Disclaimer: If using this fscks up your hard drive, your rpg, your copy of rm2k... You did it wrong and it's not my fault. Okay, let me first start by saying that the FFT Battle Mechanics Handbook, written by Aerostar, has once again inspired me for this extremely easy and effective level up system, with the QValues and Character stats section of the BMG. Bless you, Aerostar. Link here: http://www.gamefaqs.com/console/psx/game/20051.html Thanks also go to TK from the rpg2knet.com forums for some helpful comments and criticism about this system which helped make it much better. (For those wondering, the simple ATB in the CBS FAQ me and Zhek wrote is one of the other things inspired by the BMG. It's good. Read it. NOW!) Anyways, on to the five line CXPS, written by me! First, is the coding. Those who understand won't have to go through my garbled writing, and those who don't will have an understanding of what it should look LIKE, if not how it works. The Coding Anyways, this should be a common event which is set to call, one per character. First, you need to set aside three variables for the character: -Earned XP <--This is the XP you get from a battle, this changes every battle. -Total XP <-----This is the XP you have in total, also changes every battle. -Required XP <-This is the XP you need to go up a level. >Change Variable: Total XP Add Earned XP _>Fork Condition Total XP > Required XP __>Change Level: Party Member X add 1 __>Change Variable: Total XP subtract Required XP __>Change Variable: Required XP mult 2 And that's it. From there, you leave the coding and character XP alone, simply calling the event every time your character gets into battle. How this works Okay, let's look at the coding for those of you who didn't understand. The XP Required is automatically changed every time your character goes up a level, and every time you go up a level, the value needed is utomatically increased. This is a totally self-sustaining XP system that can theoretically work untill the character is level 999999. Spiffy, ain't it? But then again, doubling XP values won't work too well, now will it? I mean, the value could get out of hand! It could take years for a character to go from level 30 to level 31 when it gets out of hand. How to make the XP not double every time There is one feature that can be taken advantage of in Rm2k, and that's the fact that dividing destroys remainders. Here's some coding which only advances the character's XP required by 20% every time. >Change Variable: Total XP Add Earned XP _>Fork Condition Total XP > Required XP __>Change Level: Party Member X add 1 __>Change Variable: Total XP subtract Required XP __>Change Variable: Required XP mult 12 (or 15 for 50%, etc) __>Change Variable: Required XP div 10 Now, the XP total is multiplied by 12 and divided by 10. So, your XP needed of 100 would jump to 1200 and then back down to 120. Neat, ain't it? The thing I like about this system is that it's very easy to keep progression at a proper pace, as well as giving you a good idea of exactly how much XP an enemy should be worth. I don't know about everyone else, but 25 standard enemies should be enough to level up a standard level character. How This Helps Your CBS Anyways, what you need to do is be able to gather up all the Earned XP. One way of doing this is to take all the enemy XP and set it yourself in the battle. Much too hard, though, since it requires that you to do the XP for every battle. You want to cut corners, not make extra ones. Anyways, first things first. Every enemy, no matter when they are introduced, should add to the Experience pool, or the variable Earned XP. From there, all you have to do is either call the CXPS at the end of combat for the characters, or divide it up by the # of party members. The Custom Stats The custom stats also reflect heavily on the way the FFT system works, but it should be noted that the FFT system (for those who haven't played the game) relies heavily on job switching for character stats to be balanced, so I'll be taking that into account with the system below. Step 1: QValues Simply speaking, QValues (The name taken from the way Aerostar has designated the raw stat values in FFT) will be the reason your character's Stats will remain somewhat balanced throughout the course of your game. They will be the reason this slacker's XP system will work well for your game. Simply put, the QValues are what you will actually retain the stats in. The stats you use in your game, these will be derivatives of their QValue counterparts, and you will not modify them directly during the course of the XP system. Allow me to elucidate. The QValues are four digit or more numbers which will tell your XP system exactly what the character has. These values will be divided by 100 and you will get your character's stats from THEM. Let me show you an example, perhaps that will clear up this mess. In this example, I am using 3 character stats. Strength, Speed, and Mental. No others will be used. That means I have to have six variables, listed below: Bill the Jiku Mage QStrength 1256 QSpeed 1431 QMental 1597 Strength 12 Speed 14 Mental 15 The initial stats are above. Notice anything? All the QValues are rounded down. This is to keep the coding simple. The tens and ones digits are actually the tenths and hundreths digits, but since Rm2k merely deletes any remainders instead of rounding, those are effectively deleted. >Change Variable: Total XP Add Earned XP _>Fork Condition Total XP > Required XP __>Change Level: Party Member X + 1 __>Change Variable: Total XP subtract Required XP __>Change Variable: Required XP mult 12 __>Change Variable: Required XP div 10 __>Change Variable: QStrength add rand 39-53 __>Change Variable: QSpeed add rand 67-72 __>Change Variable: QMental add rand 79-104 __>Change Variable: Strength set QStrength __>Change Variable: Strength div 100 __>Change Variable: Speed set QSpeed __>Change Variable: Speed div 100 __>Change Variable: Mental set QMental __>Change Variable: Mental div 100 So, what does this mean? Bill the Jiku Mage gains around a third to a half a point of Strength every time he levels up, around three quarters of a point of Speed every time he levels up, and nearly a point to a bit over a point of Mental evert time he levels up. This makes him advance all of the time, but means that he doesn't always SEE the advances. Also, another point of note. The QValues are the values which should be modified, if stats are increased outside of battle. Unless, of course, you want a temporary stat gain which will only LAST untill the player goes up a level, because the only changes to the actual values (as opposed to the QValues) are during the level up sequence. Step 2: Variety Okay, this is where I earn my keep. The CXPS is useful for those of you who want to have Custom Stats, since it both increases and tracks them automatically for you. At any point in the game, all you have to do to make sure it is used is insure that the Call Event is placed for the characters. It makes it incredibly easy for you to focus on the other aspects of the game. But what if you want more fine control over the progression of your characters? Less perhaps? It's easy. Just change the QValues. If you want more fine control, perhaps a base of five digits (18000=18) or even six (180000=18) would be more suited to your needs. If you want less control, you can easily go with three (180=18). I don't suggest you use 2 (18=18) since that gives you too little control over your characters. How about more or less stats? That's simple as well. All you need for the characters is the proper amount of variables and lines of coding, specifically you'd need two variables and three lines of coding: Variable: QStat Variable: NStat And a line of coding increasing the QStat, setting the NStat to the QStat, and dividing the NStat by the appropriate number. Beyond that, it's anything goes, but keep in mind that all Rm2k variables have a six digit limit (Thanks Zhek!), so you should start XP low and keep the multiplier low as well. EXP can be increased if you use special coding, but that is a real hassle. Step 3: Increasing of Stat Increases The first thing you need to do to make increasing stat increases, at least the way I've developed it, is to change the QStat coding in your CXPS. Start by modifying the QStat to increase by an amount set by variable, let's call it the QQStat. >Change Variable: Total XP Add Earned XP _>Fork Condition Total XP > Required XP __>Change Level: Party Member X + 1 __>Change Variable: Total XP subtract Required XP __>Change Variable: Required XP mult 12 __>Change Variable: Required XP div 10 __>Change Variable: QQStrength add rand 3-7 __>Change Variable: QQSpeed add rand 9-15 __>Change Variable: QQMental add rand 21-32 __>Change Variable: QStrength add Variable: QQStrength __>Change Variable: QSpeed add Variable: QQSpeed __>Change Variable: QMental add Variable: QQMental __>Change Variable: Strength set QStrength __>Change Variable: Strength div 100 __>Change Variable: Speed set QSpeed __>Change Variable: Speed div 100 __>Change Variable: Mental set QMental __>Change Variable: Mental div 100 Now, do you see what is happening? The QStat values (now increased by their respective QQStat values) increase at an ever increasing rate. The values used here are merely sequential (ie 230 increases to 250, then 274, then 293, etc) although this can also be increased exponentially by adding a multiplier instead of adding random number. The exponentially increasing stats coding is below: >Change Variable: Total XP Add Earned XP _>Fork Condition Total XP > Required XP __>Change Level: Party Member X + 1 __>Change Variable: Total XP subtract Required XP __>Change Variable: Required XP mult 12 __>Change Variable: Required XP div 10 __>Change Variable: QQStrength mult 105 __>Change Variable: QQStrength div 100 __>Change Variable: QQSpeed mult 109 __>Change Variable: QQSpeed div 100 __>Change Variable: QQMental mult 115 __>Change Variable: QQMental div 100 __>Change Variable: QStrength add Variable: QQStrength __>Change Variable: QSpeed add Variable: QQSpeed __>Change Variable: QMental add Variable: QQMental __>Change Variable: Strength set QStrength __>Change Variable: Strength div 100 __>Change Variable: Speed set QSpeed __>Change Variable: Speed div 100 __>Change Variable: Mental set QMental __>Change Variable: Mental div 100 The thing you have to watch for, though, is that this will increase the character's stats dramatically, especially later on when the character's QQValues get higher. You should be careful to watch for things like that, and try to keep the QQValues low, even if you want powerful characters. Just run the stats through for a few levels when you're making the QQValues and make sure you increase the enemy power level accordingly. Step 4: Taking Care of Proper XP Distribution (Thanks to TK for this) The coding is still flawed, though this is about to be changed. As the coding is right now, regardless of the amount of XP gained, the characters can only advance one level per battle, even if their EXP is maxed out. This can be changed quite simply. (Note: For the sake of keeping the file short, I'm going back to using the DBS Stats coding, since the following code insert is uneffected by the type of Stats, custom or default, that are used.) >Change Variable: Total XP Add Earned XP Cycle _>Fork Condition Total XP > Required XP __>Change Level: Party Member X add 1 __>Change Variable: Total XP subtract Required XP __>Change Variable: Required XP mult 2 _>Fork Condition Total XP < Required XP __>Break Cycle >End Cycle With the above coding, there will always be at least two runthroughs of the coding when the player has enough XP to level up. The first runthrough is obviously the Level Up coding. After that, the coding will loop back. If the player has enough XP to level up again, he will, but if not, the cycle will break. [Side Note: TK suggested using Labels for this, but since I have no idea how Labels are used whatsoever (it'd probably be helpful, but I'm doing fine without, so it can wait) I'm not going to use them for my examples, since I don't use functions which I don't know good usage of.]