- Pokémon Essentials Version
- v21.1 ✅
First and foremost: This plugin uses DemIce's All Abilities Mutation plugin as a base. My plugin just updates it a bit and adds some new values in the PBS to make this version work. All credits please go towards him, since I basically just made a copy-paste of what was already on essentials and changed some text, hence why it might be buggy at some places.
Needless to say that if DemIce wants me to take down this plugin I will so without hesitation. It is his plugin afterall.
Also being honest, this plugin might be a bit out of league of my current knowledge of Ruby, so expect bugs or some bad optimization. Please report any bugs and suggestions and I will try to adjust them as soon as I can.
If you have played games like Pokemon Elite Redux and Pokemon Exceed you know what this is, if not, then let me introduce you to the concept of Innate Abilities
Innate Abilities are a set of 1 to 3 abilities that a pokemon can have alongside their regular/hidden ability, making pokemon have up to 4 abilities active at the same time!
Basically there are 2 ability pools. Regular abilities and Innate abilities:
The Regular abilities behave like we all know:
Pokemon have 2 abilities + 1 Hidden at most, and they can only have 1 of those 3 active at the same time. They can be changed with the ability patch/capsule, passed by breeding, etc etc.
The Innate abilities behave in a more simple way: Each pokemon can have from 0 to 3 of them, and they will be always active at the same time alongside their regular ability (Thecnically they can have more than 3, but for balance sake I recommend 3, and because 3 it's the ammount the optional "Innate in Summary" file supports)
How does it work?
This script comes with a new text file for your PBS folder called "innate_sets". Tu use it, give the ID of a Pokemon and a set of 1 to (I recommend) 3 abilities of your liking. And thats it!
(In this example, no matter what regular/hidden ability Blaziken might have, all Blaziken will have Blaze, Flame Body and Strong Legs to be worried about. For balance I recommend using your stronger abilites to be either regular or hidden, and more utility or thematic ones for Innates.)
It should be self explanatory. Treat it like it was just another section for abilities. I recommend no less than 1 and no more than 3 for balance sake, but you can do with it whatever you want. If a pokemon doesn't have anything defined for it's innates, the game behaves as normal.
For cases where a pokemon has multiple forms and you want to define a set of innates for each form, simply do it like this:
(Use the pokemon's ID, alongside a _ and the number of the pokemon's form. If you don't give a form it's own set of innates, it will load the set of the base form.)
To install simply drag the "Innate Abilities" folder into your plugins folder, and the "innate_sets.txt" to your PBS folder, and that's pretty much it!
If you for any reason want to have a pokemon that has 0 abilities, innates and regular, you'll need to make a new ability with the id :NOABILITY, or simply put the abilities_innateabilities.txt that comes with the rar in your PBS folder to automatically load it.
To unistall, simply remove the innate_sets file of your PBS folder and remove the Innate Abilities from your plugins. Be sure to recompile and start a new game for this.
As of v1.3, you can now make the Innate abilities be "Locked" and "Unlocked" during gameplay! So now the ammount of Innate abilities each pokemon has can be dynamic!
If you have played Elite Redux you'll be familiar with this concept. If not, let me introduce you to the Progression System of Innates
Instead of all pokemon have all of their possible innates active from the get go, you can now set conditions to "Lock" them, making them have no effect in battle and not be shown in the Innate Summary Page until they are "Unlocked".
There's 2 Possible ways of setting this conditions:
Lock the Innates of all pokemon via a variable (Which I called Progress with Variable)
or
Lock the Innates of each pokemon via their level (Which I called Progress with Level)
It's important to mention that both methods are mutually incompatible. Meaning that, if you are using one method, the other has to be set to false. Otherwise the game might not work as intended.
Each of this corresponding to new Settings in the AAM Settings file:
Here's how each progress works:
Progress with Variable:
Progress with Level:
As of v.1.4, you can now have randomized innates! That way each pokemon can have a different set of innates from each other! RNG fest ahead!
There's a couple of new settings in the AAM SETTINGS file:
It works like this: While the setting it's true, all pokemon can have a maximum of X innates regardless of how many they are in it's "Innates" section of the pbs, with X being the number defined in INNATE_MAX_AMOUNT.
Then, if a pokemon has more Innates in their pbs than the maxium, the game will randomly pick them from it's innate pool and assing them to it!
This will be differently assigned per pokemon!
As of v.1.5, you can give each given pokemon a set of innates to be picked at random.
To set up, simply give each pokemon another instance of "Innates" with a number at the end. Like this:
Doing this makes that, when a pokemon has it's innates assigned, it can pick either of the possible defined sets as it active innate sets. It will pick at random with equal odds among them, for example,
if you have 2 sets, each one has a 50% chance to bein choosen. If you have 4, a 25% chance. This is defined before the randomizer and any of the progress settings, so yes, you can give multiple
Innates per set and they can be randomized.
Other things added in this update are that:
- If you are using the randomizer, even if a pokemon has less innates than the maximum, they will always be shuffled around, which can cause different innates be locked if using any of the progress systems.
This is no longer the case. If you have less innates than the maximum possible, they will remain their order so you can control any progress with the settings.
Of course, if you want them always be shuffled around no matter how many innates are given, you can turn the
- You can give custom innates to a trainer NPC or a Object pokemon created.
For a trainer, simply add the Innates (Case sensitive) property among the properties of its pokemon, like this:
Doing this will take priority over it's innate sets.
For a pokemon object, do it like this:
Use the property "Innates" (It's case sensitive) and then an array of what Innates you want that pokemon to have.
If you want to modify a pokemon's innates after it has them assigned (You either checked it's summary or send it to battle), use
IMPORTANT: A pokemon will thecnically have no innates untill it's either sent to battle or you see it's summary, whatever happens first.
This is because of the way I've implemented the new arrays. Theoretically it has always been this way it's just never shown. So don't be surprised if one innate has no out-of-combat use like Flame body with eggs or Compound eyes for wild items... then again, it's easily solved by just using or checking the pokemon. Still, i wanted to mention it.
This is true even if you are not using the randomized setting. Keep that in mind.
Also, the INNATE_MAX_AMOUNT will only be used if the INNATE_RAMDOMIZER IT'S ON. Keep that in mind. Even if you have a max set, if you are not using the randomizer a pokemon will have all of it's innates active... minus the Progress settings of course. Those are still in priority.
In fact, they would be a true surprise considering the randomizer sets the positions randomly as well lol. Have fun!
Optional files:
In the .rar of the file I've also added a couple of folders. "Innate Summary Page" and "(Optional) Pokedex Data Page".
As the name implies, "Innate Summary Page" adds another page in your Pokemon's summary screen to display its current innates. This requires Lucidou's Modular UI Scenes plugin to work.
To install, place the folder inside of your Plugins folder.Then, open the "Innate Summary Page" folder, there are 2 images: "bg_innates" and "page_innates". Simply move this 2 images to your Graphics > UI > Summary folder and you're good to go.
Disclaimer: The summary image is made with the base essentials style. I just forgot to change it for the screenshot
If a pokemon doesn't have enough (Or any for that matter) Innates for the summary, it will show :---No Innate---.
This Overwrites any restriction, so you'll never be dissapointed with working towards unlocking an Innate just to discover the "No Innate" text below it.
The 2nd optional file is a modification of Lucidou's In-depth Pokedex Data Page. What it does is display the Innate abilities of a pokemon in the "Abilities" section of the data page in the pokedex, and if the player filters by abilities, pokemon that have said ability as an Innate will be recognized as well.
F A S T F R O G
To install the mod, simply open the "(Optional) Pokedex Data Page" folder, then grab the "002 Main Page", "003 Sub Menu" and "005 Data Messages", and place them inside of "MUI_002 Pokedex Data Page" in your plugin's folder. Replace the original files.
IMPORTANT: As of v1.5 the pokemon's innates are no loger defined in the Pokemon.txt file, BUT, if you want to use this mod for the Data page, you still need to use the property in the Pokemon.txt file as it doesn't read them from the innate_sets. This is to avoid problems with a pokemon having multiple sets or multiple abilities defined in various sets. No matter how much of them they have, the Innates displayed here will only be the ones in the "Innates =" section of the Pokemon.txt file.
Basically treat it like it was just another Pokedex property, purely flavor and utility. If you don't want to use the Data Page plugin or you are using it but dont' want to display the Innates, skip this entirely.
An important note: If you are using either of the Innate Progress methods, the Pokedex Data Page WILL show all Innates of the pokemon. It takes the values straight from the PBS so it's not affected by any restriction. Keep this in mind, so that way the player can see what Innate they might unlock in the future.
This remains true if you use the v1.4 update to give them a lot of innates. This could be usefull so players can know what innate they might get if they're lucky.
If you wan't to know exactly what each file modifies:
The Gen 9 pack is thecnically supported, althought I haven't tested all interactions, so please report any problems.
Known Bugs:
Changelog:
Needless to say that if DemIce wants me to take down this plugin I will so without hesitation. It is his plugin afterall.
Also being honest, this plugin might be a bit out of league of my current knowledge of Ruby, so expect bugs or some bad optimization. Please report any bugs and suggestions and I will try to adjust them as soon as I can.
If you have played games like Pokemon Elite Redux and Pokemon Exceed you know what this is, if not, then let me introduce you to the concept of Innate Abilities
Innate Abilities are a set of 1 to 3 abilities that a pokemon can have alongside their regular/hidden ability, making pokemon have up to 4 abilities active at the same time!
Basically there are 2 ability pools. Regular abilities and Innate abilities:
The Regular abilities behave like we all know:
Pokemon have 2 abilities + 1 Hidden at most, and they can only have 1 of those 3 active at the same time. They can be changed with the ability patch/capsule, passed by breeding, etc etc.
The Innate abilities behave in a more simple way: Each pokemon can have from 0 to 3 of them, and they will be always active at the same time alongside their regular ability (Thecnically they can have more than 3, but for balance sake I recommend 3, and because 3 it's the ammount the optional "Innate in Summary" file supports)
How does it work?
This script comes with a new text file for your PBS folder called "innate_sets". Tu use it, give the ID of a Pokemon and a set of 1 to (I recommend) 3 abilities of your liking. And thats it!
Innate_sets.txt:
#----------------------------------------
[BLAZIKEN]
Innates = BLAZE,FLAMEBODY,STRONGLENGS
#----------------------------------------
(In this example, no matter what regular/hidden ability Blaziken might have, all Blaziken will have Blaze, Flame Body and Strong Legs to be worried about. For balance I recommend using your stronger abilites to be either regular or hidden, and more utility or thematic ones for Innates.)
It should be self explanatory. Treat it like it was just another section for abilities. I recommend no less than 1 and no more than 3 for balance sake, but you can do with it whatever you want. If a pokemon doesn't have anything defined for it's innates, the game behaves as normal.
For cases where a pokemon has multiple forms and you want to define a set of innates for each form, simply do it like this:
Innate_sets.txt:
#----------------------------------------
[AGGRON]
Innates = FILTER,STURDY,TITAN
#----------------------------------------
[AGGRON_1] #<- Mega Aggron. Use POKEMON_X, with X that form's number
Innates = STURDY,HEAVYMETAL,PUREARMOR
#----------------------------------------
(Use the pokemon's ID, alongside a _ and the number of the pokemon's form. If you don't give a form it's own set of innates, it will load the set of the base form.)
To install simply drag the "Innate Abilities" folder into your plugins folder, and the "innate_sets.txt" to your PBS folder, and that's pretty much it!
If you for any reason want to have a pokemon that has 0 abilities, innates and regular, you'll need to make a new ability with the id :NOABILITY, or simply put the abilities_innateabilities.txt that comes with the rar in your PBS folder to automatically load it.
To unistall, simply remove the innate_sets file of your PBS folder and remove the Innate Abilities from your plugins. Be sure to recompile and start a new game for this.
As of v1.3, you can now make the Innate abilities be "Locked" and "Unlocked" during gameplay! So now the ammount of Innate abilities each pokemon has can be dynamic!
If you have played Elite Redux you'll be familiar with this concept. If not, let me introduce you to the Progression System of Innates
Instead of all pokemon have all of their possible innates active from the get go, you can now set conditions to "Lock" them, making them have no effect in battle and not be shown in the Innate Summary Page until they are "Unlocked".
There's 2 Possible ways of setting this conditions:
Lock the Innates of all pokemon via a variable (Which I called Progress with Variable)
or
Lock the Innates of each pokemon via their level (Which I called Progress with Level)
It's important to mention that both methods are mutually incompatible. Meaning that, if you are using one method, the other has to be set to false. Otherwise the game might not work as intended.
Each of this corresponding to new Settings in the AAM Settings file:
Here's how each progress works:
Progress with Variable:
In the AAM Settings file you can find these 2 settings:
If the Progress with Variable is on, all pokemon in the game will have their ammount of available Innates limited to the amount given in a variable.
So for example, if the variable it's set to 1, all pokemon will have only the first innate available, in order from Left to Right in the Innates = section of the PBS.
So in this particular case, if a pokemon has 3 Innates, only the first one will be Active in battle and displayed in the summary, with the message "This Innate it's currently Locked".
Since it's depending on a Variable, it's up to the user to let the player know when they'll get their next Innate unlocked.
In order to set it up for your project:
Go to AAM Settings and look for these 2 settings.
In order to enable the Progress with Variable, set the setting to true, and change the Innate_Progress_Variable to be a game_variable of your liking. Defult being 32. Now, the value of this variable defines the ammount of available Innates. With 0 being No Innates (So you can thecnically disable them if needed)
1 being only the first one
2 being the first 2
and 3 being ALL innates, so if you are using more than 3, this unlocks all of them.
Don't use a value greater than 3.
If the Progress with Variable is on, all pokemon in the game will have their ammount of available Innates limited to the amount given in a variable.
So for example, if the variable it's set to 1, all pokemon will have only the first innate available, in order from Left to Right in the Innates = section of the PBS.
So in this particular case, if a pokemon has 3 Innates, only the first one will be Active in battle and displayed in the summary, with the message "This Innate it's currently Locked".
Since it's depending on a Variable, it's up to the user to let the player know when they'll get their next Innate unlocked.
In order to set it up for your project:
Go to AAM Settings and look for these 2 settings.
Ruby:
INNATE_PROGRESS_WITH_VARIABLE = false
INNATE_PROGRESS_VARIABLE = 32
In order to enable the Progress with Variable, set the setting to true, and change the Innate_Progress_Variable to be a game_variable of your liking. Defult being 32. Now, the value of this variable defines the ammount of available Innates. With 0 being No Innates (So you can thecnically disable them if needed)
1 being only the first one
2 being the first 2
and 3 being ALL innates, so if you are using more than 3, this unlocks all of them.
Don't use a value greater than 3.
Progress with Level:
If the progress with Level it's on, all pokemon will have their Innates decided by their level.
I'll have to start with the settings for this one since it's a bit more complex:
In the AAM Settings you'll find these 2 settings:
By setting the Innate Progress with Level to true, each pokemon will unlock their respective Innate if they are the level given in the Levels_to_unlock array.
For example with the default array: Each pokemon will unlock their first innate at level equal or greather than 1, their 2nd innate at level equal or greather than 15, and their third innate at level equal or greather than 45
I should mention that the Innate doesn't remember if the Pokemon previously unlocked the Innate or not, so if for example your 2nd innate unlocks at level 15, your pokemon is level 15 so it has it unlocked, and somehow returns to level 14, the Innate WILL be locked once again.
If a pokemon doesn't have the current level to unlock an Innate, alongside the "Locked" name change, the "Description" will specify at what level does the pokemon "Unlock" their Innate
It's important to mention that the values in the array don't NEED to be in ascending order, from lowest level to highest, they are asociated with an Innate regardless. For example: An array of [90, 15, 45], in a level 30 pokemon, will have their first Innate Locked, the 2nd Active, and the 3rd locked.
It works... I just don't recommend it.
As of v1.3.1, you can also give a specific pokemon it's own custom Innate levels to unlock.
The way you do this it's simply adding a new array prior to the general one for every other pokemon, and putting the :ID of the pokemon before the required level numbers, like this:
So in this example, all pokemon but Mewtwo, Arceus and Butterfree unlock their innates at levels 1, 15 and 45. In Mewtwo's case, it unlocks it's first innate much later than everyone else, and as for Butterfree, much earlier. You can use this to give each pokemon an indirect buff or nerf in their power scale compared to all of the other options.
Mewtwo in this case unlocks it's innates WAY later than everyone else.
Keep in mind that this is true for all of each pokemon Forms. So in Mewtwo's case, both of it's megas will have all of their Innates locked at 50, 80 and 95, just like base mewtwo. This is true for regional forms, cosmetic forms, etc etc. Keep it in mind while editing other forms of a species.
I'll have to start with the settings for this one since it's a bit more complex:
In the AAM Settings you'll find these 2 settings:
Ruby:
INNATE_PROGRESS_WITH_LEVEL = false
LEVELS_TO_UNLOCK = [
[1, 15, 45]
]
By setting the Innate Progress with Level to true, each pokemon will unlock their respective Innate if they are the level given in the Levels_to_unlock array.
For example with the default array: Each pokemon will unlock their first innate at level equal or greather than 1, their 2nd innate at level equal or greather than 15, and their third innate at level equal or greather than 45
I should mention that the Innate doesn't remember if the Pokemon previously unlocked the Innate or not, so if for example your 2nd innate unlocks at level 15, your pokemon is level 15 so it has it unlocked, and somehow returns to level 14, the Innate WILL be locked once again.
If a pokemon doesn't have the current level to unlock an Innate, alongside the "Locked" name change, the "Description" will specify at what level does the pokemon "Unlock" their Innate
It's important to mention that the values in the array don't NEED to be in ascending order, from lowest level to highest, they are asociated with an Innate regardless. For example: An array of [90, 15, 45], in a level 30 pokemon, will have their first Innate Locked, the 2nd Active, and the 3rd locked.
It works... I just don't recommend it.
As of v1.3.1, you can also give a specific pokemon it's own custom Innate levels to unlock.
The way you do this it's simply adding a new array prior to the general one for every other pokemon, and putting the :ID of the pokemon before the required level numbers, like this:
Ruby:
LEVELS_TO_UNLOCK = [
[:MEWTWO, 45, 70, 90],
[:ARCEUS, 80, 90, 100],
[:BUTTERFREE, 10, 14, 30], #<- Always remember to end with a "," in arrays prior to the "nameless" one.
[1, 15, 45]
]
So in this example, all pokemon but Mewtwo, Arceus and Butterfree unlock their innates at levels 1, 15 and 45. In Mewtwo's case, it unlocks it's first innate much later than everyone else, and as for Butterfree, much earlier. You can use this to give each pokemon an indirect buff or nerf in their power scale compared to all of the other options.
Mewtwo in this case unlocks it's innates WAY later than everyone else.
Keep in mind that this is true for all of each pokemon Forms. So in Mewtwo's case, both of it's megas will have all of their Innates locked at 50, 80 and 95, just like base mewtwo. This is true for regional forms, cosmetic forms, etc etc. Keep it in mind while editing other forms of a species.
As of v.1.4, you can now have randomized innates! That way each pokemon can have a different set of innates from each other! RNG fest ahead!
There's a couple of new settings in the AAM SETTINGS file:
Ruby:
INNATE_RANDOMIZER = false
INNATE_MAX_AMOUNT = 3
It works like this: While the setting it's true, all pokemon can have a maximum of X innates regardless of how many they are in it's "Innates" section of the pbs, with X being the number defined in INNATE_MAX_AMOUNT.
Then, if a pokemon has more Innates in their pbs than the maxium, the game will randomly pick them from it's innate pool and assing them to it!
This will be differently assigned per pokemon!
For example:
Lets say I have Zubat defined in the pbs with:
Innates = TERASHELL,INTREPIDSWORD,PROTEAN,GRASSYSURGE,SPEEDBOOST,SHEERFORCE,ANGERSHELL,ANGERPOINT,SOUNDPROOF
And my INNATE_MAX_AMMOUNT it's set to 3
Then when I get a Zubat and go to it's summary: It could have: Anger Shell, Intrepid Sword, Tera Shell
Then I capture another one. Go to it's summary and it has: Sound Proof, Sheer Force, Tera Shell
Each instance is randomized and permament per pokemon, so once the dice rolled, they will remain like this.
I however added an optional item called Innate Shuffler.
On use on a pokemon, it'll shuffle it's current innate abilities, so if you didnt' like what you got, you have another chance! May the luck be on your side!
Demonstration of how the 2 zubats have different innate abilities despite being the same species. And also the simple but effective functionality of the Innate Shuffler item. Feel free to change it's name and icon, I made them in a rush lol.
As of v.1.4.1, the randomizer also checks for the current ID of the Regular Ability and each ability about to be assigned, so it will never randomly repeat an Inante!
In this example, Aggron has Sturdy as both a possible Regular ability and a possible Innate. If it's not it's regular ability, it has a chance to appear as an Innate (Asuming there's more than 3 defined and the Max Amount it's 3). However, after using an Ability Capsule, it's Regular ability rolls to be Sturdy. Therefore, it's no longer elegible to be an Innate since it already has it. And so, Aggron it's left with 2 Innates since it only had those 3. It goes back once it looses Sturdy as a regular.
As of v.1.5.3, you can use the MAX innate randomizer to go full random on your pokemon!
As the name implies, you can enable this setting on to make all pokemon have a chance to have any existing ability as their set of innates!
In AAM Settings there are 2 new parameters.
The first is the setting for enabling the MAX randomizer. Doing this REQUIRES to have the previous INNATE_RANDOMIZER setting to true, otherwise it does nothing.
The way it works is simple. Once both settings are set to true, on assingning the innates of the pokemon it will pick abilities up to the number given in INNATE_MAX_AMOUNT, ignoring any previously chosen abilities and any ability the pokemon has. This can grab ANY existing ability.
If you want any ability to not be grabed by the max randomizer, ever, simply add it's ID to the BLACKLIST array below it.
Pokemon that were given custom innates by an event or by the trainer's pbs will skip this. Basically, customly given innates are a priority, then it checks for the randomizer, and then loads the innates in the pbs.
Lets say I have Zubat defined in the pbs with:
Innates = TERASHELL,INTREPIDSWORD,PROTEAN,GRASSYSURGE,SPEEDBOOST,SHEERFORCE,ANGERSHELL,ANGERPOINT,SOUNDPROOF
And my INNATE_MAX_AMMOUNT it's set to 3
Then when I get a Zubat and go to it's summary: It could have: Anger Shell, Intrepid Sword, Tera Shell
Then I capture another one. Go to it's summary and it has: Sound Proof, Sheer Force, Tera Shell
Each instance is randomized and permament per pokemon, so once the dice rolled, they will remain like this.
I however added an optional item called Innate Shuffler.
On use on a pokemon, it'll shuffle it's current innate abilities, so if you didnt' like what you got, you have another chance! May the luck be on your side!
Demonstration of how the 2 zubats have different innate abilities despite being the same species. And also the simple but effective functionality of the Innate Shuffler item. Feel free to change it's name and icon, I made them in a rush lol.
As of v.1.4.1, the randomizer also checks for the current ID of the Regular Ability and each ability about to be assigned, so it will never randomly repeat an Inante!
In this example, Aggron has Sturdy as both a possible Regular ability and a possible Innate. If it's not it's regular ability, it has a chance to appear as an Innate (Asuming there's more than 3 defined and the Max Amount it's 3). However, after using an Ability Capsule, it's Regular ability rolls to be Sturdy. Therefore, it's no longer elegible to be an Innate since it already has it. And so, Aggron it's left with 2 Innates since it only had those 3. It goes back once it looses Sturdy as a regular.
For example, Let's say you have a Pokemon with 2 abilities and SHEERFORCE as it's hidden one.
Then, for that same pokemon you have the following set of Innates:
If the ability of your pokemon is anything but Sheer Force, Sheer Force has a chance to appear as one of it's Innates since its defined in the Innates = part of the PBS. This is nothing new.
HOWEVER, if your pokemon DOES have Sheer Force as it's ability, Sheer Force will NEVER be given to it by the randomizer. This is to make sure that each ID give it's unique amongst both the
regulars and the Innates.
In that same example if your pokemon has
with a --- No Innate --- for the last one.
Another new feature is that you can multiply the amount of times an ID it's present in the Innates = to increase it's chances to being choosen, since the randomizer distributes the chances
equally amongst all of the ID. So for example, if my max amount of innates = 3, having a Innates = be
And also yes, if you have a bunch of "SHARPNESS" defined and a "truant", it will pick 1 sharpness and 1 truant, and leave you with an empty spot last.
Tldr: The randomizer will never pick an Ability who's ID's matches with the current regular ability, nor will it repeat it in the Innates. It will continuosly search in the list untill either reaches the Max Amount of Innates or no other unique ID remains for that pokemon.
Needles to say, this also affects both Ability capsule and Ability patch, whos code has been modified and it's inside AAM Item if you want to modify it or copy it.
Then, for that same pokemon you have the following set of Innates:
SHARPNESS,SPEEDBOOST,TORRENT,SHEERFORCE
If the ability of your pokemon is anything but Sheer Force, Sheer Force has a chance to appear as one of it's Innates since its defined in the Innates = part of the PBS. This is nothing new.
HOWEVER, if your pokemon DOES have Sheer Force as it's ability, Sheer Force will NEVER be given to it by the randomizer. This is to make sure that each ID give it's unique amongst both the
regulars and the Innates.
In that same example if your pokemon has
SPEEDBOOST,TORRENT and SHEERFORCE
as possible Inantes and ends up having Sheer Force as the ability, the ranfomizer will leave you only with Torrent and Speedboost,with a --- No Innate --- for the last one.
Another new feature is that you can multiply the amount of times an ID it's present in the Innates = to increase it's chances to being choosen, since the randomizer distributes the chances
equally amongst all of the ID. So for example, if my max amount of innates = 3, having a Innates = be
SHARPNESS,SHARPNESS,SHARPNESS,SHARPNESS,TORRENT,SHEERFORCE,SHARPNESS,SHARPNESS,TRUANT
Can result in eitherSharpness, Torrent and Truant
, or also Torrent, Sheer Force and Truant
if you are really unlucky. Desspite being defined multiple times Sharpness will never be grabed more than once.And also yes, if you have a bunch of "SHARPNESS" defined and a "truant", it will pick 1 sharpness and 1 truant, and leave you with an empty spot last.
Tldr: The randomizer will never pick an Ability who's ID's matches with the current regular ability, nor will it repeat it in the Innates. It will continuosly search in the list untill either reaches the Max Amount of Innates or no other unique ID remains for that pokemon.
Needles to say, this also affects both Ability capsule and Ability patch, whos code has been modified and it's inside AAM Item if you want to modify it or copy it.
As of v.1.5.3, you can use the MAX innate randomizer to go full random on your pokemon!
As the name implies, you can enable this setting on to make all pokemon have a chance to have any existing ability as their set of innates!
In AAM Settings there are 2 new parameters.
Ruby:
MAX_INNATE_RANDOMIZER = false
BLACKLIST = [:NOABILITY]
The first is the setting for enabling the MAX randomizer. Doing this REQUIRES to have the previous INNATE_RANDOMIZER setting to true, otherwise it does nothing.
The way it works is simple. Once both settings are set to true, on assingning the innates of the pokemon it will pick abilities up to the number given in INNATE_MAX_AMOUNT, ignoring any previously chosen abilities and any ability the pokemon has. This can grab ANY existing ability.
If you want any ability to not be grabed by the max randomizer, ever, simply add it's ID to the BLACKLIST array below it.
Pokemon that were given custom innates by an event or by the trainer's pbs will skip this. Basically, customly given innates are a priority, then it checks for the randomizer, and then loads the innates in the pbs.
As of v.1.5, you can give each given pokemon a set of innates to be picked at random.
To set up, simply give each pokemon another instance of "Innates" with a number at the end. Like this:
Innate_sets.txt:
#----------------------------------------
[METAGROSS]
Innates1 = SANDVEIL,STURDY,CLEARBODY
Innates2 = FILTER,CLEARBODY
Innates3 = PLUS,MINUS,ELECTRICSURGE
#----------------------------------------
Doing this makes that, when a pokemon has it's innates assigned, it can pick either of the possible defined sets as it active innate sets. It will pick at random with equal odds among them, for example,
if you have 2 sets, each one has a 50% chance to bein choosen. If you have 4, a 25% chance. This is defined before the randomizer and any of the progress settings, so yes, you can give multiple
Innates per set and they can be randomized.
Other things added in this update are that:
- If you are using the randomizer, even if a pokemon has less innates than the maximum, they will always be shuffled around, which can cause different innates be locked if using any of the progress systems.
This is no longer the case. If you have less innates than the maximum possible, they will remain their order so you can control any progress with the settings.
Of course, if you want them always be shuffled around no matter how many innates are given, you can turn the
ALWAYS_SHUFFLE_RANDOMS
setting ON in the AAM settings.- You can give custom innates to a trainer NPC or a Object pokemon created.
For a trainer, simply add the Innates (Case sensitive) property among the properties of its pokemon, like this:
trainers.txt:
#-------------------------------
[AROMALADY,Petunia]
LoseText = Oh man...
Pokemon = CHIKORITA,6
Innates = GRASSYSURGE,CHLOROPHYLL
#-------------------------------
Doing this will take priority over it's innate sets.
For a pokemon object, do it like this:
Script while creating a pokemon:
pkmn = Pokemon.new(:ZUBAT, 45)
pkmn.Innates =
[:DAMP,:KLUTZ,:SPEEDBOOST]
pbAddPokemon(pkmn)
Use the property "Innates" (It's case sensitive) and then an array of what Innates you want that pokemon to have.
If you want to modify a pokemon's innates after it has them assigned (You either checked it's summary or send it to battle), use
assign_innate_abilities
to make the re-roll.IMPORTANT: A pokemon will thecnically have no innates untill it's either sent to battle or you see it's summary, whatever happens first.
This is because of the way I've implemented the new arrays. Theoretically it has always been this way it's just never shown. So don't be surprised if one innate has no out-of-combat use like Flame body with eggs or Compound eyes for wild items... then again, it's easily solved by just using or checking the pokemon. Still, i wanted to mention it.
This is true even if you are not using the randomized setting. Keep that in mind.
Also, the INNATE_MAX_AMOUNT will only be used if the INNATE_RAMDOMIZER IT'S ON. Keep that in mind. Even if you have a max set, if you are not using the randomizer a pokemon will have all of it's innates active... minus the Progress settings of course. Those are still in priority.
In fact, they would be a true surprise considering the randomizer sets the positions randomly as well lol. Have fun!
Optional files:
In the .rar of the file I've also added a couple of folders. "Innate Summary Page" and "(Optional) Pokedex Data Page".
As the name implies, "Innate Summary Page" adds another page in your Pokemon's summary screen to display its current innates. This requires Lucidou's Modular UI Scenes plugin to work.
To install, place the folder inside of your Plugins folder.Then, open the "Innate Summary Page" folder, there are 2 images: "bg_innates" and "page_innates". Simply move this 2 images to your Graphics > UI > Summary folder and you're good to go.
Disclaimer: The summary image is made with the base essentials style. I just forgot to change it for the screenshot
If a pokemon doesn't have enough (Or any for that matter) Innates for the summary, it will show :---No Innate---.
This Overwrites any restriction, so you'll never be dissapointed with working towards unlocking an Innate just to discover the "No Innate" text below it.
The 2nd optional file is a modification of Lucidou's In-depth Pokedex Data Page. What it does is display the Innate abilities of a pokemon in the "Abilities" section of the data page in the pokedex, and if the player filters by abilities, pokemon that have said ability as an Innate will be recognized as well.
F A S T F R O G
To install the mod, simply open the "(Optional) Pokedex Data Page" folder, then grab the "002 Main Page", "003 Sub Menu" and "005 Data Messages", and place them inside of "MUI_002 Pokedex Data Page" in your plugin's folder. Replace the original files.
IMPORTANT: As of v1.5 the pokemon's innates are no loger defined in the Pokemon.txt file, BUT, if you want to use this mod for the Data page, you still need to use the property in the Pokemon.txt file as it doesn't read them from the innate_sets. This is to avoid problems with a pokemon having multiple sets or multiple abilities defined in various sets. No matter how much of them they have, the Innates displayed here will only be the ones in the "Innates =" section of the Pokemon.txt file.
Basically treat it like it was just another Pokedex property, purely flavor and utility. If you don't want to use the Data Page plugin or you are using it but dont' want to display the Innates, skip this entirely.
An important note: If you are using either of the Innate Progress methods, the Pokedex Data Page WILL show all Innates of the pokemon. It takes the values straight from the PBS so it's not affected by any restriction. Keep this in mind, so that way the player can see what Innate they might unlock in the future.
This remains true if you use the v1.4 update to give them a lot of innates. This could be usefull so players can know what innate they might get if they're lucky.
If you wan't to know exactly what each file modifies:
In line 247 adds these code:
Quite simply adds the Innates as a recognizable feature.
002 Main Page mod, line 247:
#Innate abilities add-on
species.innates.each do |a|
next if @data_hash[:ability][3].include?(a)
@data_hash[:ability][3] << a
end
This one changes quite a bit.
In line 387:
In line 629:
And finally in line 639:
This just adds the innates to the list of abilities
In line 387:
003 Sub Menu, line 387:
sp.innates == base_form.innates
if sp.abilities.include?(cursor) || sp.hidden_abilities.include?(cursor) || sp.innates.include?(cursor)
In line 629:
003 Sub Menu, line 629:
when 3 then note = "Innate" #Innate ability add-on
And finally in line 639:
003 Sub Menu, line 639:
when 3 then imagepos.push([path + "submenu", 50, 104 + 42 * i, 0, 472, 412, 40]) #Innate ability add-on
This just adds the innates to the list of abilities
This one is short:
Just modifies line 545
It just shows that the pokemon can have the Innate ability
Just modifies line 545
005 Data Messages, 545:
elsif species.innates.include?(ability)
text << "a " + t[1] + "innate"
I should also mention about the last setting in the AAM Settings file.
If set to true:
Simply makes the text for the description of the Innates smaller. I personally preffer that since in my project I use longer descriptions and I made my summary images match it.
The setting only exist because I was tired of constantly changing it back to default font size for making an update, so you can leave it to False to keep using the default Essentials Font size.
You are free to use it tho.
If set to true:
Simply makes the text for the description of the Innates smaller. I personally preffer that since in my project I use longer descriptions and I made my summary images match it.
The setting only exist because I was tired of constantly changing it back to default font size for making an update, so you can leave it to False to keep using the default Essentials Font size.
You are free to use it tho.
Known Bugs:
* Opportunist doesn't work neither as a Regular nor an Innate ability.
* Guard Dog only blocks the drop of attack by Intimidate, but doesn't raise it after it
*Some abilities that don't use an ability handler have their names show incorrectly in the ability splash bar.
-While I automate a solution, you can hard-code the name of the ability with the use of
*A section of abilities that trigger only if the "pokemon.ability ==" id dont work since the code doesn't check for innates. This includes Guard Dog.
*It can be solved by changint it to hasActiveAbility?, but since those are all around the code I don't think I'll mess around with them yet.
*In a future update I'll try to cover them all in an alias, but you can try and modify the codes yourself. For now, having them as the regular ability should work.
* Guard Dog only blocks the drop of attack by Intimidate, but doesn't raise it after it
*Some abilities that don't use an ability handler have their names show incorrectly in the ability splash bar.
-While I automate a solution, you can hard-code the name of the ability with the use of
$aamName = GameData::Ability.get(:X).name
right before the @battle.pbShowAbilitySplash
in those instances (Sturdy for example), with X being the ID of the ability. As an example:
Sturdy's temporal fix for the splash:
elsif target.damageState.sturdy
$aamName = GameData::Ability.get(:STURDY).name
@battle.pbShowAbilitySplash(target)
if Battle::Scene::USE_ABILITY_SPLASH
@battle.pbDisplay(_INTL("{1} endured the hit!", target.pbThis))
else
@battle.pbDisplay(_INTL("{1} hung on with Sturdy!", target.pbThis))
end
@battle.pbHideAbilitySplash(target)
*It can be solved by changint it to hasActiveAbility?, but since those are all around the code I don't think I'll mess around with them yet.
*In a future update I'll try to cover them all in an alias, but you can try and modify the codes yourself. For now, having them as the regular ability should work.
Changelog:
=================v1.5.3=============
YOU HAVE TO RE-COMPILE AND START A NEW GAME AFTER THIS UPDATE, AS IT CHANGES A CHUNK OF CODE
*Fixed a problem that made form changes outside of battle not properly update their innates.
*Added a new setting: MAX randomizer. Instead of randomly choosing innates from the pokemon's innate list, it instead picks a random selection of abilities from the entire ability list in the game.
*There's of course a blackist for you to add abilities that shouldn't be randomly picked.
*Added the MAX randomizer to the debug menu.
*Modified the Innate Shuffler item to consider the MAX randomizer as well.
*Updated the codes for the ability capsule/patch for this.
=================v1.5.1=============
*Fixed an error that would occur if your innate_sets.txt had an empty space. Still, I recommend not leaving one just for consistency
*Fixed an error for an alias to an unexisting method, it was a custom code for my own game. This was fixed in the previous hotfix but I'm oficially adding it to the changelog now
=================v1.5.2=============
YOU HAVE TO RE-COMPILE AND START A NEW GAME AFTER THIS UPDATE, AS IT CHANGES IT'S BEHAVIOR A BIT
*Fixed an error when you tried to run the game without the PBS folder, so publishing your project or releasing a beta was impossible.
*Added the dependency of Moduler UI scenes in the meta file for the Innate Summary page so it always loads after it.
*Btw, always be sure that the innate summary page is the same version as the main plugin. So, I've added "versions" in it's meta file.
*The latest update broke the innate filter if it would match the regular ability of the pokemon. Fixed back again.
=================v1.5.1=============
*Fixed an error that would occur if your innate_sets.txt had an empty space. Still, I recommend not leaving one just for consistency
*Fixed an error for an alias to an unexisting method, it was a custom code for my own game. This was fixed in the previous hotfix but I'm oficially adding it to the changelog now
=================v1.5=============
BE SURE TO RECOMPILE AND START A NEW SAVE FILE!
*The "Rework" Update. The biggest update to date.
*The innates for each pokemon are no longer defined in Pokemon.txt PBS or their derivates, instead, the are defined in a new file called "innate_sets.txt", this is for ease of uninstalling, to allow the new Innate Sets function, and to avoid any overwrittes of other plugins that modify the Pokemon.txt file directly.
-As such, the usage of the Innates parameter in Pokemon.txt no loger does anything but to be loaded by the Data Page modification. If you are not using it, or are using it but don't care to show off the Innates in it, you can remove it no problems. It's basically for utility and flavor for that plugin.
*Fixed the entirity of the DEBUG menu for Innate abilities. Now the option to set any ability as the pokemon's innate works as intended.
*Added the option to give custom innates to a created pokemon or to a trainer. This customly given innates bypass randomization. They reset on shuffle by the item or DEBUG menu.
*Fixed the Mega Evolution/Primal reversion code to allow to have different innates than their baase forms and properly load them in battle. And revert back once the Form change ends.
*This is also true for temporal form changes that might have a different set of innates. For example if you give Darmanitan's Zen mode innates unique to it, they will revert back once the battle ends.
*Keep that in mind in case a pokemon was supposed to remain it's new innates gained in combat.
*While using the randomizer, if your total amount of Innates is less than the maximum, the randomizer wont ever shuffle them. So at least you can keep some consitency.
*This can be turned off with a setting.
*Pokemon can have more than 1 innate set at the time, picked at random if more than 1 are defined.
*Basically moved the whole process to Pokemon class.
*Fixed pokemon mantaining it's pre-evolution's innates after evolving. Now they always get re-asssigned after evolving.
=================v1.4.1=============
BE SURE TO RECOMPILE AND START A NEW SAVE FILE!
*Added a uniqueness filter for the Randomized setting:
*Now the randomly selected Innates will never have the same ID of the regular ability of the pokemon, nor in between them if you set them multiple times in the "Innates =", this ensures that in between the possible innates and the regular ability, no ID appears more than once. This is only true for the randomizer as the user has full control of the pokemon's innates if they don't use it, so it's not needed.
*As such, the option for that has been update it in the Innate Shuffler, the Ability Capsule and the Ability Patch.
*Also updated the Debug Menu, specially the randomizer option. Don't use the first option of the debug Innates menu because it provoques a crash. Still WIP.
*Fixed (Hopefully) an error that caused crashes with Poison Puppeteer's code if the Gen 9 pack not being installed
=================v1.4=============
BE SURE TO RECOMPILE AND START A NEW SAVE FILE!
*The Randomized Update!
*Added a pair of new settings in the AAM Settings file to choose if you want to limit the amount of innates a pokemon can have from the entire "Innates =" section of the PBS. And randomly choose abilities from that same pool. So now 2 pokemon from the samespecies can have different innates! I recommend to expand the amount of innates in the section if you want to use it.
*Sligtly reworked the "Innate Page Summary" add-on to now reflect these changes.
=================v1.3.2=============
*Reworked the file "Innate Abilities - Species" to modify only stuff added by the Innate abilities and nothing else
-Therefore, solved compatibilities with the DBK/Animated Pokemon System plugin and the Dynamax plugin.
BE SURE TO RECOMPILE AND START A NEW SAVE FILE!
*Added support for pokemon with no abilities/innates. Simply make a new ability with the id "NOABILITY" with a similar name and description, or add the "abilities_innateabilities.txt" to your pbs folder.
=================v1.3.1=============
*Updated the way the "INNATE_PROGRESS_WITH_LEVEL" works, so now you can give specific pokemon' species custom levels to which they can unlock their innates
*Updated the "Innates in summary" page to reflect this change
=================v1.3=============
*The Progress update!
*Added two ways of make the Innate system progress, either by a variable and make it affect all pokemon,
*or via each pokemon level, and make them affect each one individually
*Added text in case of a pokemon doesn't have an Innate to show in the summary.
*I haven't managed to find a solution for Guard Dog nor Opportunist. I belive those will require to
*mod the Gen 9 plugin itself or add them to the Scripts directly. I need more testing but I wanted
*to release this feature first
=================v1.2=============
*Hopefully solved the problem with the "hasActiveAbility?" definition (Credits to Penelope)
*Protean and Libero now work as Innates
*Fixed the handler "ModifyMoveBaseType" so abilities that use it(Like Galvanize or Pixilate) now properly work as Innates
*Solved Poison Puppeteer working as an Innate now (Credits to Penelope for the code)
*Fixed an small typo in the Pokedex Data Page mod, so now reads "An Innate" and not "A Innate"
=================v1.1.2=============
*Fixed Tera Shell's ability splash not showing up while being a Regular/Non-innate ability
*Fixed Poison Puppeteer not working while being a regular ability
=================v1.1=============
*Fixed the problem with the gen 9 pack having moves learned at -1 level. Now -1 levels are an accepted value
*Fixed damage altering abilities that use the DamageCalcFromTarget and DamageCalcFromTargetNonIgnorable flag not working properly
YOU HAVE TO RE-COMPILE AND START A NEW GAME AFTER THIS UPDATE, AS IT CHANGES A CHUNK OF CODE
*Fixed a problem that made form changes outside of battle not properly update their innates.
*Added a new setting: MAX randomizer. Instead of randomly choosing innates from the pokemon's innate list, it instead picks a random selection of abilities from the entire ability list in the game.
*There's of course a blackist for you to add abilities that shouldn't be randomly picked.
*Added the MAX randomizer to the debug menu.
*Modified the Innate Shuffler item to consider the MAX randomizer as well.
*Updated the codes for the ability capsule/patch for this.
=================v1.5.1=============
*Fixed an error that would occur if your innate_sets.txt had an empty space. Still, I recommend not leaving one just for consistency
*Fixed an error for an alias to an unexisting method, it was a custom code for my own game. This was fixed in the previous hotfix but I'm oficially adding it to the changelog now
=================v1.5.2=============
YOU HAVE TO RE-COMPILE AND START A NEW GAME AFTER THIS UPDATE, AS IT CHANGES IT'S BEHAVIOR A BIT
*Fixed an error when you tried to run the game without the PBS folder, so publishing your project or releasing a beta was impossible.
*Added the dependency of Moduler UI scenes in the meta file for the Innate Summary page so it always loads after it.
*Btw, always be sure that the innate summary page is the same version as the main plugin. So, I've added "versions" in it's meta file.
*The latest update broke the innate filter if it would match the regular ability of the pokemon. Fixed back again.
=================v1.5.1=============
*Fixed an error that would occur if your innate_sets.txt had an empty space. Still, I recommend not leaving one just for consistency
*Fixed an error for an alias to an unexisting method, it was a custom code for my own game. This was fixed in the previous hotfix but I'm oficially adding it to the changelog now
=================v1.5=============
BE SURE TO RECOMPILE AND START A NEW SAVE FILE!
*The "Rework" Update. The biggest update to date.
*The innates for each pokemon are no longer defined in Pokemon.txt PBS or their derivates, instead, the are defined in a new file called "innate_sets.txt", this is for ease of uninstalling, to allow the new Innate Sets function, and to avoid any overwrittes of other plugins that modify the Pokemon.txt file directly.
-As such, the usage of the Innates parameter in Pokemon.txt no loger does anything but to be loaded by the Data Page modification. If you are not using it, or are using it but don't care to show off the Innates in it, you can remove it no problems. It's basically for utility and flavor for that plugin.
*Fixed the entirity of the DEBUG menu for Innate abilities. Now the option to set any ability as the pokemon's innate works as intended.
*Added the option to give custom innates to a created pokemon or to a trainer. This customly given innates bypass randomization. They reset on shuffle by the item or DEBUG menu.
*Fixed the Mega Evolution/Primal reversion code to allow to have different innates than their baase forms and properly load them in battle. And revert back once the Form change ends.
*This is also true for temporal form changes that might have a different set of innates. For example if you give Darmanitan's Zen mode innates unique to it, they will revert back once the battle ends.
*Keep that in mind in case a pokemon was supposed to remain it's new innates gained in combat.
*While using the randomizer, if your total amount of Innates is less than the maximum, the randomizer wont ever shuffle them. So at least you can keep some consitency.
*This can be turned off with a setting.
*Pokemon can have more than 1 innate set at the time, picked at random if more than 1 are defined.
*Basically moved the whole process to Pokemon class.
*Fixed pokemon mantaining it's pre-evolution's innates after evolving. Now they always get re-asssigned after evolving.
=================v1.4.1=============
BE SURE TO RECOMPILE AND START A NEW SAVE FILE!
*Added a uniqueness filter for the Randomized setting:
*Now the randomly selected Innates will never have the same ID of the regular ability of the pokemon, nor in between them if you set them multiple times in the "Innates =", this ensures that in between the possible innates and the regular ability, no ID appears more than once. This is only true for the randomizer as the user has full control of the pokemon's innates if they don't use it, so it's not needed.
*As such, the option for that has been update it in the Innate Shuffler, the Ability Capsule and the Ability Patch.
*Also updated the Debug Menu, specially the randomizer option. Don't use the first option of the debug Innates menu because it provoques a crash. Still WIP.
*Fixed (Hopefully) an error that caused crashes with Poison Puppeteer's code if the Gen 9 pack not being installed
=================v1.4=============
BE SURE TO RECOMPILE AND START A NEW SAVE FILE!
*The Randomized Update!
*Added a pair of new settings in the AAM Settings file to choose if you want to limit the amount of innates a pokemon can have from the entire "Innates =" section of the PBS. And randomly choose abilities from that same pool. So now 2 pokemon from the samespecies can have different innates! I recommend to expand the amount of innates in the section if you want to use it.
*Sligtly reworked the "Innate Page Summary" add-on to now reflect these changes.
=================v1.3.2=============
*Reworked the file "Innate Abilities - Species" to modify only stuff added by the Innate abilities and nothing else
-Therefore, solved compatibilities with the DBK/Animated Pokemon System plugin and the Dynamax plugin.
BE SURE TO RECOMPILE AND START A NEW SAVE FILE!
*Added support for pokemon with no abilities/innates. Simply make a new ability with the id "NOABILITY" with a similar name and description, or add the "abilities_innateabilities.txt" to your pbs folder.
=================v1.3.1=============
*Updated the way the "INNATE_PROGRESS_WITH_LEVEL" works, so now you can give specific pokemon' species custom levels to which they can unlock their innates
*Updated the "Innates in summary" page to reflect this change
=================v1.3=============
*The Progress update!
*Added two ways of make the Innate system progress, either by a variable and make it affect all pokemon,
*or via each pokemon level, and make them affect each one individually
*Added text in case of a pokemon doesn't have an Innate to show in the summary.
*I haven't managed to find a solution for Guard Dog nor Opportunist. I belive those will require to
*mod the Gen 9 plugin itself or add them to the Scripts directly. I need more testing but I wanted
*to release this feature first
=================v1.2=============
*Hopefully solved the problem with the "hasActiveAbility?" definition (Credits to Penelope)
*Protean and Libero now work as Innates
*Fixed the handler "ModifyMoveBaseType" so abilities that use it(Like Galvanize or Pixilate) now properly work as Innates
*Solved Poison Puppeteer working as an Innate now (Credits to Penelope for the code)
*Fixed an small typo in the Pokedex Data Page mod, so now reads "An Innate" and not "A Innate"
=================v1.1.2=============
*Fixed Tera Shell's ability splash not showing up while being a Regular/Non-innate ability
*Fixed Poison Puppeteer not working while being a regular ability
=================v1.1=============
*Fixed the problem with the gen 9 pack having moves learned at -1 level. Now -1 levels are an accepted value
*Fixed damage altering abilities that use the DamageCalcFromTarget and DamageCalcFromTargetNonIgnorable flag not working properly
- Credits
- DemIce - For the base plugin.
Lucidous89 - For the Enhanced UI and Pokedex Data Page plugin.
Penelope - For providing code for update the base plugin and a couple of handlers.
Bguy7 - For the suggestion of a case where a pokemon has neither an ability nor any innates defined.
Tsoukinator - F the suggestion of an option to let pokemon with bigger innate pools have randomized, picked innates.