- Pokémon Essentials Version
- v20.1 ➖
Here we are in part 2 of the trainer modifier tutorial. If you don’t understand something and missed part 1, check it. This tutorial will be focused on making your own level scaling script.
As it’s using a script taken from the Automatic level scaling script, please credit them if you are using it (credits are at the bottom of the post). Examples are in the download link, as a plugin (unzip the file in the plugin folder). Remove the =begin and =end of the one you need. You can open the scripts with a text editor like Notepad++.
When do I need level scaling?
If your game allows you to make things in any order, or if you want some specific trainers to be stronger depending on the player’s progress, level scaling is required.
And who wants to make 3 million variants for every trainer?
With this method, you only need to make the weakest version of the trainer.
If you want to have an idea of the level the trainers should have, I recommend you to playtest your game with the Automatic level scaling script.
You can even keep it for your game, as it scales the level of trainers depending on the level of the player’s team. It’s not something I would advise as you lose the feeling of progress but do what you want. And what if you want your player to be able to be over leveled at some points?
Simple level scaling
Open the .rb file, here is the explanation of the simpler script:
If your adventure approximately gives the same amount of experience between each gym you can scale the level depending on a multiplicator like this one:
Mult=[0,5,8,12,15,17,20]
Here I have 6 gyms, and every gym beaten will add the corresponding number of levels to trainer’s pokémon.
Please note that you can do the same thing with wild pokemon, an example is already there in Base Essentials (look for level_depends_on_party in the scripts).
After adding those levels, the code evolves the Pokémons if they meet the criteria, change their moves to the 4 lasts they could learn and apply those changes.
You can add restrictions or customize trainers as it was done in part 1 of this tutorial.
Complex level scaling
But what if some paths give less experience than others? Then you are going to experience true pain.
You will need to define a multiplier for every path possible, for every gym (or main plot thing) order.
Here is an example with only 3 gyms.
GymList=[[1,5],[2,6],[3,7],[1,2,10],[2,1,11],[1,3,13],[3,1,12],[2,3,15],[3,2,15]]
You can read it as, if you beat only gym 1, get a +5 level. Beating gym1 then 2 gives a +10 level, but gym 2 then gym 1 gives +11 levels.
You also need to use a global variable to store which gyms you have defeated.
So, imagine you chose variable 40. You need to add this script to the intro event:
$game_variables[40]=[]
Then after you defeat a gym, you need to add it to the variable:
$game_variables[40].push(gymnumber)
Then you can use the complex_script.rb thing. Don’t forget to put the right parameters at the beginning of the script.
But what is this script doing?
The path function just removes the level multiplier from your gymlist.
Then, it compares your path to this new pathlist, and applies the same things as in the previous script.
If you want to make scaling after major events and not only after gyms, you simply need to check if that variable is not [] instead of checking if the player has badges.
If you have things like islands with 3 gyms on each one, you can make several gymlists and duplicate this code (you need to change the names and conditions).
Evolution script
You need to setup 2 parameters in the evolution script.
Firstevo and Secondevo are the levels where Pokémon NOT evolving by level can evolve.
For example, if you set Firstevo to 30, that’s the level where you can encounter Steelix or Starmie.
Secondevo is the level where you can encounter Alakazam or Machamp.
Please don’t forget to credit Benitex, Joltik, Umbreon for this script.
As always, if you have any question feel free to ask them in the thread. You can cumulate those script with those in part 1.
As it’s using a script taken from the Automatic level scaling script, please credit them if you are using it (credits are at the bottom of the post). Examples are in the download link, as a plugin (unzip the file in the plugin folder). Remove the =begin and =end of the one you need. You can open the scripts with a text editor like Notepad++.
When do I need level scaling?
If your game allows you to make things in any order, or if you want some specific trainers to be stronger depending on the player’s progress, level scaling is required.
And who wants to make 3 million variants for every trainer?
With this method, you only need to make the weakest version of the trainer.
If you want to have an idea of the level the trainers should have, I recommend you to playtest your game with the Automatic level scaling script.
You can even keep it for your game, as it scales the level of trainers depending on the level of the player’s team. It’s not something I would advise as you lose the feeling of progress but do what you want. And what if you want your player to be able to be over leveled at some points?
Simple level scaling
Open the .rb file, here is the explanation of the simpler script:
If your adventure approximately gives the same amount of experience between each gym you can scale the level depending on a multiplicator like this one:
Mult=[0,5,8,12,15,17,20]
Here I have 6 gyms, and every gym beaten will add the corresponding number of levels to trainer’s pokémon.
Please note that you can do the same thing with wild pokemon, an example is already there in Base Essentials (look for level_depends_on_party in the scripts).
After adding those levels, the code evolves the Pokémons if they meet the criteria, change their moves to the 4 lasts they could learn and apply those changes.
You can add restrictions or customize trainers as it was done in part 1 of this tutorial.
Complex level scaling
But what if some paths give less experience than others? Then you are going to experience true pain.
You will need to define a multiplier for every path possible, for every gym (or main plot thing) order.
Here is an example with only 3 gyms.
GymList=[[1,5],[2,6],[3,7],[1,2,10],[2,1,11],[1,3,13],[3,1,12],[2,3,15],[3,2,15]]
You can read it as, if you beat only gym 1, get a +5 level. Beating gym1 then 2 gives a +10 level, but gym 2 then gym 1 gives +11 levels.
You also need to use a global variable to store which gyms you have defeated.
So, imagine you chose variable 40. You need to add this script to the intro event:
$game_variables[40]=[]
Then after you defeat a gym, you need to add it to the variable:
$game_variables[40].push(gymnumber)
Then you can use the complex_script.rb thing. Don’t forget to put the right parameters at the beginning of the script.
But what is this script doing?
The path function just removes the level multiplier from your gymlist.
Then, it compares your path to this new pathlist, and applies the same things as in the previous script.
If you want to make scaling after major events and not only after gyms, you simply need to check if that variable is not [] instead of checking if the player has badges.
If you have things like islands with 3 gyms on each one, you can make several gymlists and duplicate this code (you need to change the names and conditions).
Evolution script
You need to setup 2 parameters in the evolution script.
Firstevo and Secondevo are the levels where Pokémon NOT evolving by level can evolve.
For example, if you set Firstevo to 30, that’s the level where you can encounter Steelix or Starmie.
Secondevo is the level where you can encounter Alakazam or Machamp.
Please don’t forget to credit Benitex, Joltik, Umbreon for this script.
As always, if you have any question feel free to ask them in the thread. You can cumulate those script with those in part 1.
- Credits
- Grogro (tutorial)
Benitex, Joltik, Umbreon (evolution script)
Arcky (tester)