• 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!
Pokémon Factory

v21.1 Pokémon Factory 2.1.0

This resource pertains to version 21.1 of Pokémon Essentials.
Pokémon Factory has been updated to version 2.1.0

Additions and Fixes:

  • A new file has been added outside the existing folders: 000_Settings. This is where the values for the added features will be entered; or, if desired, they can be activated or deactivated.
  • The ability for trainers' Pokémon to also have variations in their Hue and stats has been added. These have their own toggle and variable for greater customization flexibility. Both these settings and those for wild Pokémon will be in the new 000_Settings file.
  • The function to view the different Hues a Pokémon can have in the FORMS tab of the Pokédex has been added, as well as the ability to view Shiny Hues. A small graphic is included, located in:
    Graphics\Plugins\Pokemon Factory\Pokedex\
  • The BULBASAUR_DRY.png file (now simply called DRY.png) has been modified to include the palettes for Ivisaur and Venusaur, and ows characters. New comments have been added to the example method (Palette_Swap), located in the 003_Events folder.
  • The ability has been added to ensure that if a Pokémon already has a name set in a WildBattle.start, it will not need to be named when captured.
  • The example methods have been added to the DEBUG MENU. This is located in the Pokémon Options section and is named: Pokémon Factory Events. An =begin with an English version is included.
  • The ability to change the Hue of SuperShiny Pokémon without requiring the DBK Animated Pokémon System to be installed has been added.
  • Compatibility has been added for the Following Pokémon EX plugin. This plugin will accept Hue changes, PaletteSwap, and Sprite Override. NOTE: PaletteSwap may take a while to apply the first time, but once it loads, there will be no further problems, as it will generate a copy of the ow file in Graphics\Characters\PaletteSwap.
  • Compatibility with the Voltseon's Overworld Encounters plugin has been added. This plugin accepts HUE changes for wild Pokémon, as well as correct application when they are super shiny.
  • Compatibility with the Visible Overworld Wild Encounters plugin has been added. This plugin accepts HUE changes for wild Pokémon, as well as correct application when they are super shiny.
  • Now, if the DBK Animated Pokemon System plugin is installed, its method for applying HUE to super shiny Pokémon will be replaced by the Factory method; however, it will still accept the value assigned in the metrics PBS. This was done due to a certain inconsistency between their way of applying it and that of the Factory, and also to solve the small visual “bug” that it presented with the FollowingEx, VOE and VOWE Plugins; where the ow of the supershiny pokémon did not correspond to that of the sprite.
  • Corrections have been made to the code.

That's all. See you in the next update. Remember that you'll need to change the Optional fields in your meta.txt file to Requires depending on which plugins you have installed.
Pokémon Factory is being updated to version 2.0.0.

This update is skipping directly to 2.0.0 because I feel I've already implemented what I had planned. Only the HTML is missing, but with everything I've added, it will take even longer.

Let's move on to the new stuff:
  • Small corrections were made that I had overlooked. I'm always grateful for any errors you might find.
  • The code is reorganized.
  • Two more options have been added to “custom moves:”. These are “target:” and “status_effect:
  • In turn, “status_effect:” contains the following configurable options:
stat_changes:
stat_changes_target:
apply_status_to_user:
apply_status_to_target:
change_weather:
change_terrain:
add_hazards_to_target_side:
add_side_effect_to_user:
heal_user:
heal_target:
fixed_damage_target:
recoil_user:
  • The "paletteswap:" functionality has been added. This new feature allows you to selectively change a Pokémon's palette using an image as a color map. NOTE: This is not recommended if you have the DBK animation system, as the swap will take longer, depending on the spritesheet size, and may crash the game during the process due to the file size.
  • The “add_stats:” is added. The difference between “add_stats:” and “base_stats:” is that the former will add or subtract the assigned value, while the latter overwrites the existing stats. Therefore, “add_stats:” will maintain the stats even if the Pokémon evolves or changes form, while “base_stats:” will not change regardless.
  • The functionalities “type_chart_mods” and “type_chart_adds” have been added. The “type_chart_mods” function completely replaces the effectiveness or resistances of the Pokémon's original types with the configured ones without needing to change its types. The “type_chart_adds” function, on the other hand, adds these to the Pokémon's existing type resistances. NOTE: Be careful with “type_chart_adds”, because if you add a multiplier to a type that already has a multiplier, they will be multiplied together. So, if a Pokémon is already x4 weak to Ice, and you add “ICE: 2,” these will be multiplied, resulting in an x8 weakness to the Ice type.
I'm calling version 2.x the "InGame" update, as I'll be focusing more on adding my Factory to the game with options that you can enable or disable. Starting with these two options:
  • Wild Pokémon now have a configurable HUE value within a certain range (-30 to 30 by default). This value will remain even if the Pokémon evolves or changes form.
  • Wild Pokémon now have the ability to experience both positive and negative stat changes (from -15 to 15 by default). These values will remain even after evolution or form change.
That's all for now. As always, you can find examples in the new 003_Events folder with explanations of the options to use. I'm also open to any suggestions you might have. See you in the next update.
This update brings two new features.
hue_change:
An option that allows you to change the sprite's hue to a value ranging from -360 to 360.

sprite_override:
An option that allows you to change the sprites your Pokémon loads. This doesn't require creating a variant in the PBS, and it still maintains the original species. Just make sure to add the corresponding sprites to the subfolders of your Pokémon folder.

Both options can be used together.


Ruby:
Expand Collapse Copy
def self.give_eevee_override
      eevee_impostor = {
        species: :EEVEE,
        level: 10,
        nickname: "Impostor",
        shiny: true,
        nature: :TIMID,
        poke_ball: :PREMIERBALL,
        ivs: { hp: 31, attack: 31, defense: 31, spatk: 31, spdef: 31, speed: 31 },
        moves: [:SWIFT, :CHARM, :BITE],
        hue_change: 340, # The value to shift the tone can be any number between -360 and 360.
        sprite_override: "PIKACHU" # It is responsible for searching for sprites with this name.
      }

      pkmn = PokemonFactory.create(eevee_impostor)
      pbAddPokemonWithNickname(pkmn)
    end

Added support for the [DBK] Animated Pokémon System. If you have the plugins listed as "Optional" in the meta.txt, you should change them to "Requires" for maximum compatibility.
You'll find an example in 002_Events to test the functionality.
Pokémon Factory has been updated to 1.2.0.
This update brings "custom_moves:", which allows you to customize Pokémon moves without having to add a new one to the PBS. You can modify:
-Name
-Description
-Power
-Accuracy
-PP
-Priority
-Type

The effect and animation will not be added for modification, as the purpose of this is to create "stronger" or "special" move variants without the need for a new one.

Here's an example:
Ruby:
Expand Collapse Copy
pikachu_data = {
        species: :PIKACHU,
        level: 88,
        item: :LIGHTBALL,
        poke_ball: :POKEBALL,
        ivs: :perfect,
        evs: :sweeper_special,
        happiness: 255,
        owner_name: "Ash",
        
        # The moveset is defined without the custom move.
        moves: [:QUICKATTACK, :IRONTAIL, :ELECTROWEB],
        
        # --- Custom Move ---
        custom_moves: [
          {
            move: :THUNDERSHOCK, # The base move being modified.
            name: "Gigathunder",
            description: "The most powerful Thundershock in the world.",
            power: 110,
            accuracy: 0,        # 0 means it never misses.
            total_pp: 15,
         # priority: -1,     # Would make the move attack almost last.
         # type: :FIRE,      # Would turn the move into a Fire-type.
          }
        ]
      }

A new file (003_PluginsPatchs) has also been added to add support for Enhanced Battle UI, as without it, custom moves don't display correctly in Move Info. If the changes aren't displayed with this plugin installed, change the "Optional" in the meta.txt to "Requires".

As always, you can find the examples with explanations in 002_Events so you can try them out.
This update adds a new feature: variants:.
Its purpose is to provide an easy way to create variations when generating Pokémon, giving each its own weight to be delivered randomly. It can also accept switches and variables as activation conditions. As long as these conditions are not met, the variant will not be considered during creation.

Giving Various Pokémon:
Ruby:
Expand Collapse Copy
bird_data = {
  level: 15,
  variants: [
    {
      weight: 40,
      config: { species: :PIDGEY, nature: :JOLLY }
    },
    {
      weight: 50,          
      condition: proc { $game_variables[40] >= 1 },
      config: {
        species: :TAILLOW,
        ability_index: 1,
        moves: [:WINGATTACK, :QUICKATTACK, :FOCUSENERGY, :AERIALACE]
      }
    },
    {
      weight: 50,
      condition: proc { $game_variables[40] == 2 },
      config: {
        species: :STARLY,
        ability_index: 1,
        moves: [:WINGATTACK, :QUICKATTACK, :ENDEAVOR, :AERIALACE]
      }
    },
    {
      weight: 20,
      condition: proc { $game_switches[12] },
      config: {
        species: :FLETCHLING,
        shiny: true,
        ability_index: 1,
        moves: [:PECK, :QUICKATTACK, :FLAIL, :ACROBATICS]
      }
    }
  ]
}
   
pkmn = PokemonFactory.create(bird_data)
pbAddPokemon(pkmn)

Giving the Same Pokémon with Different Sets:
Ruby:
Expand Collapse Copy
arcanine_data = {
  species: :ARCANINE,
  level: 50,
  shiny: true,
  poke_ball: :FASTBALL,
  ivs: :perfect,
     
  variants: [
    {
      weight: 40,
      config: {
        nickname: "Blaze",
        nature: :ADAMANT,
        ability: :INTIMIDATE,
        item: :LIFEORB,
        evs: :sweeper_physical,
        moves: [:FLAREBLITZ, :EXTREMESPEED, :WILDCHARGE, :CLOSECOMBAT]
      }
    },
    {
      weight: 40,
      config: {
        nickname: "Inferno",
        nature: :TIMID,
        ability: :FLASHFIRE,
        item: :CHOICESPECS,
        evs: :sweeper_special,
        moves: [:FLAMETHROWER, :DRAGONPULSE, :SCORCHINGSANDS, :EXTREMESPEED]
      }
    },
    {
      weight: 20,
      config: {
        nickname: "Guardian",
        nature: :IMPISH,
        ability: :INTIMIDATE,
        item: :HEAVYDUTYBOOTS,
        evs: :tank_physical,
        moves: [:FLAREBLITZ, :WILLOWISP, :MORNINGSUN, :TELEPORT]
      }
    }
  ]
}
   
pkmn = PokemonFactory.create(arcanine_data)
pbAddPokemonWithNickname(pkmn)

It is not necessary for the weight: values to sum up to 100. The script is responsible for assigning the probability based on the total sum of all weights.

It is worth mentioning that this also works for generating eggs, although due to this addition, the way they are created changes slightly:

Ruby:
Expand Collapse Copy
eevee_egg_config = {
  species: :EEVEE, # Now you must add the species:
  steps_to_hatch: 1,
  shiny: true,
  nature: :TIMID,
  ability_index: 2,
  ivs: :perfect,
  obtain_text: "Day-Care Couple"
}
   
# if EggFactory.create(:EEVEE, eevee_egg_config) # Before
if EggFactory.create(eevee_egg_config) # Now
  pbMessage(_INTL("Take good care of it!"))
else
  pbMessage(_INTL("Oh, you don't have any room in your party!"))
end

You can also find the examples with explanations in the 002_Events file.
Back
Top