
Hakuen Studio Class Curve for RPG Maker MZ
A downloadable RPG Maker Plugin
Introduction
Balancing your game battles can be a difficult challenge! It is a fact that RPG Maker MZ already makes some resources available in the class database.
Although you have some ways to change the way your status increases when you level up, you still don't have full control.
Well, with this plugin, you will be able to choose how you want each of your normal parameters to increase at each level up, in each class!
Features
- Add a status curve for battle parameters, fully customizable and independent of the editor by using plugin parameters.
- Support normal parameters: Hp, Mp, Attack, Defense etc…
- Support extra parameters: Hit Rate, Evasion Rate, Hp Regeneration Rate etc…
- Support special parameters: Target rate, Guard Effect Rate, Recovery Effect Rate, Experience Rate etc…
- Support Custom parameters: need EliMZ_CustomParameters
- They are all optional. You can decide to not create custom curves according to the parameter types.
- Can set up a minimum value for all parameters.
- Each parameter has a Growth chance value, which allows you to control when a parameter will increase or not on level up. Similar to the Fire Emblem/ Shining Force series.
- Change growth chance rate based on items, equipment, skills, or state!
- Can use formulas for a dynamic parameter growth rate, random values or just regular numbers, whatever you want!
- Works for enemies, if you are using EliMZ_EnemyClass.js
- Decide if an actor will always join in the party with initial stats, regarding its level.
How to Use
First you need to go into the plugin parameters of the plugin and set up the Minimum stats value for all parameters. After that you need to start creating your Custom Curves on the Preset Class Curve.
You MUST have at least one Preset Class Curve made on the plugin parameters.
Note Tags
Applying the Custom Curves
Now you only need to use the following on the Class notes field.
<CustomCurve:Name>
Replace Name with the name you set on the preset curve settings on the parameter.
If you do not set a custom curve to a class note field, it will take the first one in the plugin parameters as default.
Changing Growth Chance In-Game
Optionally, you can change the Growth Chance rate in-game through the use of items, skills, states, and equipment.
You just need to use the note tag below, following this pattern:
Replace "param" with a parameter ID or short name. Examples:
<GrowthChanceParam: 2:10, def:5>
- Affects normal parameters.
<GrowthChanceXParam: hit:5, cri:10>
- Affects extra parameters.
<GrowthChanceSParam: tgr:10, pdr:-5>
- Affects special parameters.
<GrowthChanceCParam: customShortName:10>
- Affects custom parameters.
Items and Skills:
- The note tag creates an item/skill effect. When the item or skill is used, the target receives the Growth Chance bonus directly.
Weapons, Armors and States:
- The note tag works as a passive bonus. The bonus is applied while the equipment is worn or while the state is active.
Hold Curve
By default, if an actor joins the party at a level higher than 1, the plugin will calculate the level-ups automatically.
But you can also prevent this from happening, and let the actor join in the party always with initial stats, regardless of their level.
Just use the note tag on the Actor note field:
<HoldCurve: Level>
Replace Level with the level you want for the plugin to hold the initial stats.
Even if you use EliMZ_EnemyClass, this feature will not work for enemies.
Plugin Parameters
Minimum stats
This is the minimum parameters value for all classes at level zero. You can leave it the way it is, but you can also change.
If you are using Eli Custom Parameters, you also need to set up minimum values for them. It works the same as the normal ones. But you need to make sure that you have the same amount of custom parameters here and on the Eli Custom Parameter plugin.
Preset Class Curves
Here is where you will build your Custom Curves. You will define a name for the curve. Then, you will set these five configurations below, for each parameter.
- Name → The name of the curve to be referenced in the Class note field.
- Initial → The initial value of the parameter for level 1 of this class.
- Final → The maximum value that a parameter can reach in this class.
- Growth Chance → The chance rate % for the parameter increases when leveling up.
- Minimum Growth Value → The minimum amount of a parameter an actor can gain when leveling up.
- Maximum Growth Value → The maximum amount of a parameter an actor can gain when leveling up.
- Promotion Bonus → Optionally, when an actor changes class to a new class for the first time, you can apply a bonus of parameters for him. It will only be applied once when he changes to a new class for the first time. That bonus will be added to the level 1 parameter values.
All values for each curve data type are javascript formulas. And they all need to return a number. Example of formulas:
- return 10
- return this.level * 2
- return $gameVariables.value(5)
- return this.isActor() ? 10 : 5
- return Math.randomInt(6)
- return Infinity
- (Use Infinity when you do not want to set up a limit)
They are all in the battler context. So using the keyword “this” will reference the current battler.
So let’s say, that your Attack parameter, has a configuration like that:
- Initial → return 10
- Final → return 20
- Growth Chance → return 80
- Minimum Growth Value → return 2
- Maximum Growth Value → return 5
- Promotion Bonus → return 3
When on Level 1, the battler will start with 10 Attack, from the Initial field.
When the battler level up, it will have 80% of chance to change this parameter value. If they don’t hit the chance, the parameter will not change.
But if they do, now your parameter will grow a random number, between and including, the Minimum Growth Value(2) and Maximum Growth Value(5).
Although, they will never get higher than the value specified on the Final field.
If you want for the battler to always have a chance, leave the growth chance to 100.
If you do not want a random number, set the Minimum Growth Value and Maximum Growth Value to be equal values.
If you change class to a new class for the first time, it will increase + 3 on the attack, from the promotion bonus.
You can build as many custom curves as you want.
If a parameter group is disabled in a preset, this plugin will not control that parameter type for that class. Normal/custom parameters will use their original base behavior, from the Editor, and extra/special parameters will use the native RPG Maker result.
Normal Parameters
Their values use integer numbers only.
Extra and Special Parameters
You can also create a curve for these parameters. But their values work differently from the Normal and Custom parameters. They work as a percentage %. As so, you need to use decimal numbers for them. Here are some practical examples:
Extra Parameter Example
Extra parameters are added to the default RPG Maker value. For example, Hit Rate starts at 95% by default in RPG Maker, which is 0.95. If the class curve gives +0.05 Hit Rate at the current level, the final Hit Rate becomes:
- 0.95 + 0.05 = 1.00
So the battler will have 100% Hit Rate before any other modifiers that may also affect the final value.
Special Parameter Example
Special parameters are also added to the default RPG Maker value.
For example, Physical Damage Rate starts at 100% by default in RPG Maker, which is 1.00. If the class curve gives -0.10 Physical Damage Rate at the current level, the final Physical Damage Rate becomes:
- 1.00 + (-0.10) = 0.90
So the battler will receive 90% physical damage before any other modifiers that may also affect the final value.
Eli Custom Parameters
In case you are using Eli Custom Parameters, they work just like the normal parameters. Their values use integer numbers only.
As so, you need to create the same amount of entries here that you have on the Custom Parameter plugin.
Level Down Behavior
You can decide when a battler levels down, if you want to keep it’s parameter values in case they level up again or if you want to delete their parameters, and when they level up these parameters will be calculated again.
Example:
Keep:
- If the actor levels down from 10 to 9 and later returns to 10, the old level 10 values are reused.
Delete:
- If the actor levels down from 10 to 9, the level 10 values are deleted. When the actor reaches level 10 again, the level 10 gains are recalculated.
Plugin Commands
Store Last Parameter Gains
This command will let you store in variables the last parameter gains a battler had when leveling up, down or receiving a class promotion. You can store any parameter id, of any parameter type.
- Actor Id / member Index → Using one of these two, you can find the actor you want to get the last parameter gains from. Actor Id has priority over Member Index. As so, if you set the Actor Id to a value higher than 0, the plugin will not even bother to take a look at the Member Index. If you want to use an index, leave the actor id equal to 0. Both arguments accept \v[id].
- Normal Param ids → Here you will list all the normal parameters you want to store the last gains. You can list them by using their ID or shortName. Separate each one by comma.
- Normal Param Variables → Here you will list all variable ids that will store each parameter gain. The thing is, you need to have the same amount of variable ids here that you have on the Normal Param Ids. So each parameter can have a variable to represent their last parameter gain.
Both arguments accepts multiple operators
The other arguments work the same as the above, for Extra, Special and Custom Parameters.
Script calls
Parameter type values
- "normal" = Normal parameters: mhp, mmp, atk, def, mat, mdf, agi, luk
- "extra" = Extra parameters: hit, eva, cri, cev, mev, mrf, cnt, hrg, mrg, trg
- "special" = Special parameters: tgr, grd, rec, pha, mcr, tcr, pdr, mdr, fdr, exr
- "custom" = Custom parameters from EliMZ_CustomParameters
Get an battler
- Actor by Id → $gameActors.actor(actorId)
- Party member → $gameParty.members()[memberIndex]
- Enemy by member index → $gameTroop.members()[memberIndex]
- Enemy by enemy ID → $gameTroop.members().find(member => member.enemyId() === ID)
Get the last gain of a normal parameter
- battler.lastParamGains[paramType][paramId]
Example:
$gameActors.actor(1).lastParamGains.normal[2]
The normal parameter id or shortName.
- 0 = mhp, 1 = mmp, 2 = atk, 3 = def, 4 = mat, 5 = mdf, 6 = agi, 7 = luk.
The extra parameter id or shortName
- 0 = hit, 1 = eva, 2 = cri, 3 = cev, 4 = mev, 5 = mrf, 6 = cnt, 7 = hrg, 8 = mrg, 9 = trg.
The special parameter id or shortName
- 0 = tgr, 1 = grd, 2 = rec, 3 = pha, 4 = mcr, 5 = tcr, 6 = pdr, 7 = mdr, 8 = fdr, 9 = exr.
Custom parameters id or shortName:
- The custom parameter id from EliMZ_CustomParameters.
Get the level 0 minimum value of a parameter
- Eli.ClassCurves.getLevelZeroParamValue(paramType, paramId)
Example:
Eli.ClassCurves.getLevelZeroParamValue("normal", 2)
Get a parameter value from the class history
- $gameActors.actor(actorId).getParamValueOnHistory(classId, paramType, paramId, level)
Example:
$gameActors.actor(1).getParamValueOnHistory(1, "normal", 2, 10)
Returns the stored value of one parameter at a specific level for the selected class history.
Get the current value stored in the class history
- $gameActors.actor(actorId).getCurrentParamValueOnHistory(paramType, paramId)
Example:
$gameActors.actor(1).getCurrentParamValueOnHistory("normal", 2)
Returns the stored class curve value for the actor's current class and current level.
Check the total growth chance bonus for one parameter
- $gameActors.actor(actorId).getGrowthChancePlusByParamType(paramType, paramId)
Example:
$gameActors.actor(1).getGrowthChancePlusByParamType("normal", 2)
Returns the total growth chance bonus for the selected parameter.
Check if a class is the battler's main class
- $gameActors.actor(actorId).isMainClass(classId)
Example:
$gameActors.actor(1).isMainClass(1)
Returns true if the class id is the first class registered for this battler.
Check if a class is considered promoted
- $gameActors.actor(actorId).isPromoted(classId)
Example:
$gameActors.actor(1).isPromoted(2)
Returns true if the class id is different from the battler's first registered class.
Parameter Full Names, Ids and shortNames for reference
Normal Parameters
0 or mhp | Max HP |
1 or mmp | Max MP |
2 or atk | Attack |
3 or def | Defense |
4 or mat | Magic Attack |
5 or mdf | Magic Defense |
6 or agi | Agility |
7 or luk | Luck |
X Parameters
0 or hit | Hit Rate |
1 or eva | Evasion Rate |
2 or cri | Critical Rate |
3 or cev | Critical Evasion Rate |
4 or mev | Magic Evasion Rate |
5 or mrf | Magic Reflection Rate |
6 or cnt | Counter Attack Rate |
7 or hrg | HP Regeneration Rate |
8 or mrg | MP Regeneration Rate |
9 or trg | TP Regeneration Rate |
S Parameters
0 or tgr | Target Rate |
1 or grd | Guard Effect Rate |
2 or rec | Recovery Effect Rate |
3 or pha | Pharmacology |
4 or mcr | MP Cost Rate |
5 or tcr | TP Charge Rate |
6 or pdr | Physical Damage Rate |
7 or mdr | Magic Damage Rate |
8 or fdr | Floor Damage Rate |
9 or exr | Experience Rate |
Help File | Terms of use | Sample Project
| Updated | 26 days ago |
| Status | Released |
| Category | Tool |
| Rating | Rated 5.0 out of 5 stars (9 total ratings) |
| Author | Hakuen Studio |
| Made with | RPG Maker |
| Tags | class-curve, Classes, custom-classes, fire-emblem, hakuenstudio, rmmv, rmmz, RPG Maker, rpgmakerplugin, shining-force |
| Average session | A few seconds |
| Languages | English |
| Content | No generative AI was used |
Download
Click download now to get access to the following files:
Development log
- Class Curves 3.0.1 - Bug fix!26 days ago
- Class Curves 3.0.0 - New features and huge improvements!Jun 02, 2026
- Version 2.4.3 - Bug fixes!Jul 28, 2024
- Bug Fix!Feb 17, 2022
- 02/08/2022 - Version 5.0.0Feb 08, 2022
- 12/05/2021 - New feature!Dec 05, 2021
- 08/24/2021 - Bug Fixes, updates!Aug 24, 2021
- 04/25/2021 - Small updateApr 26, 2021





