• Do not use Discord to host any images you post, these links expire quickly! You can learn how to add images to your posts here.
  • Reminder: AI-generated content is not allowed on the forums per the Rules and Regulations. Please contact us if you have any questions!
Innate Abilities (Yet Another "All Abilities Mutation" mod)

v21.1 Innate Abilities (Yet Another "All Abilities Mutation" mod) 1.6.1

This resource pertains to version 21.1 of Pokémon Essentials.
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 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.

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 (in Elite Redux at least) 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. Primary abilities and Innate abilities:

The Primary 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 (Technically they can have more than 3 but you get the idea, I feel 3 is a fair number)

How does it work?

The plugin comes with a new pbs file called "Innate_sets". Tu give a Pokemon species some innate abilities, simply define it's species (And form with an under score if you want), their "set" of innates, and thats it!

Innate_sets.txt:
Expand Collapse Copy
[BLAZIKEN]
Innates = BLAZE,FLAMEBODY,STRONGLENGS

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 give them as many as you want. If a Species is not defined in the Innate_sets file, it'll simply have no innates.

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:
Expand Collapse Copy
[AGGRON]
Innates = FILTER,STURDY,TITAN

[AGGRON_1] #<- Mega Aggron. Use POKEMON_X, with X that form's number
Innates = STURDY,HEAVYMETAL,PUREARMOR

A pokemon's innates will be ALL of their innates defined in their PBS, unless you are using the Randomizer settings (explained below).

To install simply drag the files inside of the Innate_abilities folder in the rar in your game's root folder, and that's pretty much it. Remember to start a new save file for it to function properly, as the "innates" is a property that must be created on new Pokemon.

The plugin also comes along with a fair share of settings for you to customize your game even further:

|=|=|=| Innate Lock System |=|=|=|

If you have played Elite Redux you'll be familiar with this concept. If not, let me introduce you to Unlock-able Innates

Instead of all pokemon having 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".

To turn this mechanic on, in the file AAM Settings you can find the following settings:

INNATE_LOCKED_SYSTEM = false
INNATE_LOCKED_SYSTEM_SWITCH = -1

Setting the INNATE_LOCKED_SYSTEM to true will activate the lock logic.
If you have it activate, you can then set the INNATE_LOCKED_SYSTEM_SWITCH to a value that will correspond to that game switch in your project. This will allow you to control the locking system being either on or off, depending on the switch stat. Usefull if you want it to be toogable mid game, like in a difficulty selection or whatnot.

As a note: The switch will only do something if the INNATE_LOCKED_SYSTEM setting is set to true, otherwise it activates nothing
Having the INNATE_LOCKED_SYSTEM_SWITCH set to -1 will make so the game's locking system will be entirely dependent on the previous setting.

The plugin comes with 3 different ways of "locking" your Pokemon's innates, each one corresponding to a value in the
INNATE_LOCKED_METHOD setting:
  • Globally, via a variable
  • Individually, via level
  • Or without any "automatic" method
Aditionally, the INNATE_LOCKED_METHOD_VARIABLE allows you to define a game variable that you can later set to 0, 1 or 2 to toogle in between the lock methods.
0 is the :none method, 1 is the :level method and 2 is the :variable method

If a INNATE_LOCKED_METHOD_VARIABLE is set, that one will take priority over what the INNATE_LOCKED_METHOD is set to. Leaving it at -1 will make so the method is entirely dependant on the original setting. Again, just if you want to be able to switch mid game in a difficulty or a setting.


Here's how each method works:

Progress with Variable: (Activated by setting INNATE_LOCKED_METHOD to :variable or the game variable to 2)
This method will make so all of the Pokemon's available innates are dependant on a game variable, wich itself can be specified in the setting INNATE_PROGRESS_VARIABLE. The number given in this setting will be that game variable's number and will control the max innates available. Having it to -1 or simply not setting the variable to anything greathern than 1... will simply have all innates locked.

For example, if the variable it's set to 1, all pokemon will have only their first innate available.

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. Every other innate will simply be "skiped" for all checks, and on the summary it'll display "This Innate it's currently Locked". It's up to you to inform the player when the next innates will be unlocked... if you want, of course.

W60V1C2.png

Progress with Level: (Activated by setting INNATE_LOCKED_METHOD to :level or the game variable to 1)
This method will make so all of the Pokemon's available innates are dependent on it's own level.

In the AAM Settings file you'll find the setting LEVELS_TO_UNLOCK with a pre-defined array:
Ruby:
Expand Collapse Copy
LEVELS_TO_UNLOCK = [
[1, 15, 45]
]

Each pokemon will unlock their innates, in order, once they are at the same level or greater than those defined in the LEVELS_TO_UNLOCK array. Each number in the array corresponds to an innate. The first innate of the pokemon will be unlocked once at the first number, the 2nd at the 2nd number, etc etc.

It's important to mention that the check happens at the moment and it's not stored, meaning, if the Pokemon gets to a level in wich they unlock an Innate, and for whatever reason it levels down, the innate will be locked once more.

Any innate locked by this method, in it's description, will specify the level at wich it's unlocked for ease of the player.

OwbNP7r.png


As a note, the values in the array don't NEED to be in any order. since they are associated 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.

You can also give a specific pokemon it's own custom levels to unlock their innates.

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:
Expand Collapse Copy
LEVELS_TO_UNLOCK = [
   [:MEWTWO, 45, 70, 90],
   [:ARCEUS, 80, 90, 100],
   [:BUTTERFREE, 10, 14, 30],
   [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.
7tQkEbj.png


Keep in mind that this is true for all of that species 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.

No automated progress: (Activated by setting INNATE_LOCKED_METHOD to :none or the game variable to 0)
The third method is not really a method per say.
Having the :none method will plain and simply lock all Innates of all Pokemon. That's it.

Meaning no variable or level will automatically unlock them for you. If you want to get any innate in a specific Pokemon, you'll have to manually unlock them.

You can use this method if you don't really want to have innates as a progression or global thing. but rather an "unlockable" reward for a Pokemon.

Regardless of your "lock" method, all pokemon can have their innates manually unlocked.
Each pokemon has a new property, called "unlocked_innate_count". What this property does is unlocking the pokemon's innates up to the amount given in that property, regardless of locking method.

The amount of innates unlocked in total is added after the unlocked_innate_count value.

What this means is, if your Pokemon has unlocked only 1 innate by level for example, setting it's unlocked_innate_count to 1 will make so it's 2 first innates are unlocked. With an unlocked_innate_count of 2, it will have its first 3 innates unlocked, even if the current "locking" method soudln't give it those innates yet.

By default, a pokemon's unlocked_innate_count is set to 0.
Setting a pokemon's unlocked_innate_count to -1 will unlock ALL of it's innates.

If you are using the :none method, this is the only way to make so a Pokemon can unlock it's innates.

How you increase this property depends on you. By default, I've included both the PBS data and handler of an item called Innate Unlocker that allows you to do just that, increase a pokemon's unlocked_innate_count +1.

You want a bigger challenge?

The setting ONLY_LOCK_PLAYER can prove interesting. What it will do when on is make so ONLY the player's pokemon are affected by the lock system.
Both Trainer NPCs and Wild pokemon will have all of their innates unlocked as if the system was turned off.

For wild pokemon even, the moment the player caughts them their innates will go back to respect the lock once again. Perfect for higher difficulties!

|=|=|=| Randomizer settings |=|=|=|

If you want to spice up each Pokemon's available innates to add some variety, you can play around with the randomizer settings.

Just like the lock system, the randomizer can be activated by setting the setting INNATE_RANDOMIZER to true. Aditionally, similar to the lock system, you can define a game switch in
INNATE_RANDOMIZER_SWITCH to make it toogable mid game. Similarly, if the INNATE_RANDOMIZER is false, the switch won't do anything.

It works like this:

As stated previously, normally, a Pokemon's innates will be ALL of the IDs defined in it's PBS. Either 1, 2, 5, 10, every single one will load.

While the randomizer is on, all pokemon will pick a randomly pick Innates from the ones defined in it's PBS, and set them as it's innates, with the amount picked being defined by the INNATE_MAX_AMOUNT setting

Every single ability has equal odds to be selected as that pokemon's innate. What this means if, if the pokemon has 5 different innates, each one has a 1/5 chance to be selected. If it has 10, each one has 1/10 chance.

If a pokemon has less or equal possible innates than the maximum amount defined, it will simply load them straight, without even shuffling their order around.

If the setting ALWAYS_SHUFFLE_RANDOMS is true, even if the amount of innates the Pokemon has is lesser than the max amount, the pokemon will have them in a random order.

This pairs well with the locked system to have different pokemons have the same innates but some unlocked at different times due to them being shuffled around.

Note: In order for the shuffle to take place, the Randomizer has to be on.

The innates a pokemon gains due to the randomizer are saved per- pokemon and not per species, allowing you to have variety in between the same species.

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!

zpnCgwv.gif


As a note: The randomizer has "Ability sanity", meaning not only it will never pick the same ability twice for it's innates, but it will also never give you the ability the pokemon has as it's main ability.

oPOLNkK.gif


Since each ability has equal odds to be chosen as a Pokemon's innate, and it has Ability sanity, it's totally possible to define the same ID multiple times to increase the odds to be chosen.

For example:

Innates = DAMP,DAMP,DAMP,SPEEDBOOST,HUGEPOWER,SHARPNESS,SHARPNESS,INTIMIDATE

In this case, since there are 8 abilities defined, each one has 1/8 chance to be choosen as that pokemon's innate.

However, since Damp appears 3 times, it as a 3/8 to be chosen, and Sharpness, a 2/8 chance.

Once an ability has been choosen, the randomizer will delete any copies of it in the "available" pool so to skip them and don't pick the same ability again. So, if Damp was choosen, Sharpness is the one with the greater chance now.

If this is too much control for a randomizer for you, I got you covered.

If the randomizer is on, by setting the MAX_INNATE_RANDOMIZER to true, any pokemon will have a chance to be given ANY ability defined in your game.

The amount of picked abilities will be up to the Max Innate amount defined. This method also contains the Ability Sanity, meaning among the random abilities, it should never pick the regular ability that your pokemon already has. (And even so, what are the odds) nor it can pick the same ability 2+ times.

If you want a specific ability to not be able to be chosen by the max randomizer, ever, simply add it's ID to the BLACKLIST array near the bottom of the settings.

Pokemon that were given custom innates, either by an event, or are a trainer's NPC pokemon with custom innates, will skip any setting of the randomizer completely.

|=|=|=| Innate Sets |=|=|=|

If the randomizer is too chaotic for your taste but you still want to let pokemon have different innates, but in a much more controlled manner, you can use the function of innate sets.

To set up, simply give each pokemon another instance of "Innates" with a number at the end. Like this:

Innate_sets.txt:
Expand Collapse Copy
[AEGISLASH]
Innates1 = STANCEGHANCE,STURDY,CLEARBODY
Innates2 = STANCEGHANCE,CLEARBODY
Innates3 = STANCEGHANCE,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 being choosen. If you have 4, a 25% chance.

This is very useful if you want Pokemon to be able to have different innates but making sure a core ability remains among them. or in a specific position.

After a set has been picked, it's "number index" will be stored in the Pokemon. If that pokemon evolves or changes forms, it will look for the innate sets of the pokemon it's turning into and will always try to match the set index.

So if a Pokemon got the Innates2 set, when evolving, it will always try to pick the Innates2 set of it's evolution.

Why try? Because if that new pokemon doesnt have the stored set (ergo, Innates2 in this case), it will simply pick a new set at random and store that one as it's "number index".

If the Max Randomizer is on, it will take place before choosing any set. If just the randomizer is on, it will try to pick randomly among the selected set.

|=|=|=| Custom Innates |=|=|=|

Want to make a Pokemon extra special? You can give each one a special set of innates for them to play.

This can be applied to both Pokemon objects and trainer pokemon.

For trainers: Simply add a new property on it's Pokemon: "Innates" (Case sensitive). Doing so will make so that pokemon's innates are exactly the ones defined in the Innates property, having priority over everything else. Doing so, naturally, skips the sanity check with it's main ability, so keep it in mind

trainers.txt:
Expand Collapse Copy
[AROMALADY,Petunia]
LoseText = Oh man...
Pokemon = CHIKORITA,6
        Innates = GRASSYSURGE,CHLOROPHYLL

For a pokemon object, do it like this:

Script while creating a pokemon:
Expand Collapse Copy
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.

Similar to trainers, this ignores ability sanity and has priority over everything else.
Evolving a Pokemon who's innates were customly given will make it have them re-rolled for it's evolution.

|=|=|=| Custom Interactions |=|=|=|

Due to the Multi-ability nature of the plugin, some moves/abilities that interact with them by switching them around, removing them or what not, have to be hard-coded to make them behave properly.

The modified abilities are: Mummy, Lingering Aroma, Trace, Power of Alchemy, Receiver and Wandering Sprit
The modified moves (function codes) are: Simple Beam, Worry Seed, Role Play, Entrainment, Skill Swap and Doodle.

All of them can be found in the file Innate Abilities - Abilities and Moves re-made for compatibility.

Additionally, the method pbEndureKOMessage was re-defined in the plugin (in the Innate Abilities - Non handler ability checks file)to properly display Sturdy's ability splash.

For clarity, heres how some I've made some interactions play around in case you have doubts:
Transform / Imposter
Copies target’s Ability and Innate sets exactly.

Neutralizing Gas
Deactivates all other Abilities on the field, including the user’s other Innates.

Ability Suppression (e.g., Gastro Acid)
Disables all Abilities except "untouchable" ones (e.g., Stance Change).

Simple Beam / Worry Seed
Overrides target's Primary Ability. Fails if target already has Simple/Insomnia as a Primary or Innate.

Role Play
User copies target's Primary Ability into its Primary slot. Fails if user already has that Ability as a Primary or Innate.

Entrainment
Copies user's Primary Ability onto target's Primary slot. Fails if target already has it as a Primary or Innate.

Skill Swap
Swaps Primary Abilities. Fails if either Pokémon would receive an Ability they already possess (Primary or Innate).

Doodle
User and allies copy target's Primary Ability into their Primary slots. Skips any Pokémon that already has that Ability; fails if all allies are skipped.

Mummy / Lingering Aroma
Overrides the afflicted Pokémon’s Primary Ability. Fails if the target already has either Mummy or Lingering Aroma (as Primary or Innate).

Power of Alchemy / Receiver
Replaces the specific slot (Primary or Innate) containing this Ability with the fallen ally's Primary. Fails if the user already has that Ability.

Trace
Replaces the specific slot containing Trace with the target's Primary. Fails if the user already has that Ability as a Primary or Innate.

Wandering Spirit
Swaps the user's Wandering Spirit slot with the target's Primary. Fails if either would receive an Ability they already have.

|=|=|=| Compatibility |=|=|=|

The plugin already includes a Summary page and grahics for the Pokemon to display up to 3 innates at the same time. In case you don't want it for any reason, simply delete the Innate Summary Page folder of the Plugin's folder.

This requires Modular UI Scenes to work.

u2DgLB4.png

Disclaimer: The summary image is made with the base essentials style. I just forgot to change it for the screenshot

In-depth Pokedex Data Page: In the Data page, the information about a Pokemon's Innates and searching for Innate data are alredy supported and don't require to overwritte any file on his plugin (Other than the graphic, of course)

KqG5eBs.png

rIgNSzA.png

F A S T F R O G

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.


[SV] Summary Screen: Not only is the summary page compatible with the SV summary plugin, I HIGHLY recommend it.
hFcB9om.png

Disclaimer: The summary graphic given is made in the SV summary plugin style. I just forgot to change it for the screenshot.
rPenXlI.png


In case you want to use them together, in the Graphics / UI / Summary folder of the plugin I've included the necessary files. Simply remove or rename the bg_innates folder that came originally and rename the bg_innates - SV to just bg_innates.

Decoupled Abilities: Thanks to some changes maded in how the abilities and innates can be compared, it should work great no problem.

Advanded AI System: Due to those same changes, the AI should properly recognize all of the pokemon's abilities and innates. I haven't tested it thoroughly so take it with a grain of salt.

Known Bugs:
* Finished projects require to have a "Data" folder that solely contains the innates data file.
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 - For the suggestion of an option to let pokemon with bigger innate pools have randomized, picked innates.
Wetchip - Testing before the 1.6 update
Author
Sonicover
Downloads
4,618
Views
11,675
First release
Last update

Ratings

5.00 star(s) 3 ratings

More resources from Sonicover

Latest updates

  1. Small pack of fixes

    Fixed an issue with the triggerSpeedCalc and triggerWeightCalc handlers for the innates (Thanks...
  2. I told you it was still alive

    YOU HAVE TO RE-COMPILE AND START A NEW GAME AFTER THIS UPDATE, AS IT CHANGES A LOT OF STUFF...
  3. Another bunch of fixes

    YOU HAVE TO RE-COMPILE AND START A NEW GAME AFTER THIS UPDATE, AS IT CHANGES ANOTHER CHUNK OF...

Latest reviews

Great addition and constant support, adjusting to the needs of the community. the resource is complete and expands the number of possibilities that we can develop in our games, adding a layer of complexity and surprise
Although it increases my workload much, it's still a fantastic plugin that can may make players enjoy the game.
Great port, developer actively working to add improvements and adjustments to further enhance the experience.
Back
Top