MESSING WITH LEVELS: CHARACTER BALANCE

Ever want to have a character in the party who's level is based on the level another character?

  • Marrend
  • 08/22/2010 03:12 PM
  • 4929 views
Messing with Levels: Character Balance

Ever want to have a character in the party who's level is based on the level another character? The methods described in this tutorial will employ a few methods that can be used in just about any RM engine that I'm aware of, with a few methods than can be employed with RMXP or RMVX.

The most basic method is to alter the character's starting level with the database. With this method, it is presumed that the player can only get into a certain number of encounters, or perform a certain number or quests, before getting the character. Example: The main character starts at level one, but his/her first ally starts at level 3 or 4. The player is "supposed" to fight critters/go questing before getting the ally. If it's a case of leveling purely by completing tasks, it's manageable. However, throwing random encounters into the mix makes it something of a gamble. Add in a fully customizable party, and it's a problem that cannot be solved via the database alone.

For characters who are "supposed" to join at a certain level, the best, most sure-fire method of having them join at the same level as the main character is to have the character start out at Level 1 in the database. When the character joins the party, store the main character's Level into a variable, subtract 1 from that variable, then use "Change Level" to add levels to the new character. Since the game still thinks the new character is still level 1, it would be optimal to use "All Recover" on the new character. Why this works: The database does not allow for characters to start at Level 0. Level 1 is the minimum Level any character can be. If you simply add in the Levels the main character is currently at, the end result would be a character who's one level higher than the main character. By subtracting 1 from the stored variable, this problem is solved.

But what about games with fully customizable parties? If that is the case of your game, then the best way to add a character at relatively the same level as the rest of the team is to get an average level. That means adding all the Levels of the currently available party members into a variable, then dividing that variable by the number of currently available party members. After that mess, you still have to subtract 1, since outright adding the "average" level can still, in theory, end up with a character one Level higher than the rest of the team.

Here's an interesting situation: You want to add a super-character into the party for a short period of time. The character is twenty levels higher than where everyone else should be at. However, how do you define this level in the database? Sure, you can just make the character Level 99, and be done with it, but you want to be a bit more dynamic that that. So you make the character Level 20. Hold on! The character supposed to be twenty levels higher than everybody else! How does this work? Well, if the game has a main character, this works amazingly well. All you do in this scenario is store the main character's Level into a variable, then add that variable outright to the new character's Level. Why this works: The super-character is supposed to be 20 levels higher than anybody else. Since the main character would have the highest concentration of EXP, and therefore Levels, you'd be adding however many levels the main character has onto a character that's already Level 20.

But what if you're adding a super-character in a game with fully customizable parties? It's pretty much the same sequence as before with customizable parties, with a few minor changes. The super-character is going to start out as Level 20 in the database, but you're still going to be adding in the average level of your currently available party members.

The process is much simpler in RMXP and RMVX. For games with a main character, the only thing you have to do is use the "Script" button and type in something like:
$game_actors[n].change_level($game_actors[1].level, FALSE)


Wait, what's all this? First off, altering "level" directly from "$game_actors" causes an error. Hence, we use the more public "change_level" method, which requires two variables to be passed to it. The first is what level the character is set to (or becomes). The next variable, a Boolean, determines whither or not the level-up message box shows.

Using that method, the super character example would be equally as simple:
$game_actors[n].change_level($game_actors[1].level + 20, FALSE)


Where the average level is more appropriate, it would look something akin to:
lvl = 0

for i in 1..(n-1)
lvl += $game_actors[i].level
end
lvl = lvl / (n-1)
$game_actors[n].change_level(lvl, FALSE)


The super character example where an average level is appropriate would be a bit different. You'd add in the extra twenty levels after the averaging happens. So it should look something like:
lvl = 0

for i in 1..(n-1)
lvl += $game_actors[i].level
end
lvl = (lvl / (n-1)) + 20
$game_actors[n].change_level(lvl, FALSE)


What method you end up using, if at all, is mostly based on what engine you're using (as you can't use the "Script" method in 2K/2K3) or your own personal comfort level. This tutorial does not exist to tell you what to do. It exists to relay what can be done. If I've missed a method, or have any questions, feel free to make commentary.

Posts

Pages: 1
All I did in rm2k3 was save the hero's level to a variable (then reduce it by 1 so the new guy is 1 level below the hero), reduce the new chara's level by 99 then increase it by the hero level variable. Done and done.
@Aten - Funnily enough, I thought about that idea before reading this. ;P
All I do Is Make a Variable, add All the Party Member levels, then Average it.
Marrend
Guardian of the Description Thread
21781
Updated! I actually messed up on some of the "code" lines, as it turns out. Thought the title was rather unwieldy...
Pages: 1