Tuesday, February 6, 2024

Custom Pokemon for Rom Hacks

I have an idea for custom Pokemon feature in a pokemon Rom hack, were I to make one. Let's face it, I won't. Note that I know nothing about coding. I assume that if you have a rom-hack making tool, there is probably a wysiwyg (what you see is what you get) user-interface like RPG Maker with an option for writing code. Either way, I expect this to be laborious, possibly too laborious for something that players might dismiss as a gimmick that would also likely be incompatible with the games trading mechanic if the players somehow find a way to work that. I can also see players boxing the custom starter.

Here's the in-game premise for your custom pokemon: Your pokemon professor / researcher mentor character is studying genetic engineering of pokemon. Assume some deep lore that this pokemon researcher used to work with the guys on Cinnabar Island who attempted to clone mew and who made mewtwo. He wants a young pokemon trainers (like the plyer character) to gather data for his genetically created pokemon for him by training it. At the beginning of the game, he gives you a starter pokemon with specifications that the player chooses. The options are: Type, sprite, cry, a stat to be good at, and a stat to be poor at.

"What type is it?"
A1. Fire
A2. Water
A3. Grass

"What should it look like?" The game gives the player a list of options related to appearance. A custom sprite or re-purposed sprite applicable for the description chosen by the player will be applied to the custom pokemon at the end. By default, there could be 3-8 choices. Samples descriptions for choices are below which I'm basing on the 8 or 9 menu sprites that Gen 1 made for pokemon. Player choice affects back sprite, front sprite, menu sprite. 
B1. Plant
B2. Beast
B3. Serpent
B4. Bug
B5. Winged / Bird
B6. Cute
B7. Cool
B8. Aquatic / Marine
B9. Fissile or Egg
B10. Odd shape (pokeball shape like Electrode)

"What should it sound like?" This is the choice for its cry. For the in-game descriptions for the players to choose, I'm basing these on the descriptions the games used to give to moves from the beauty contests.
C1. Tough
C2. Cool
C3. Beautiful
C4. Smart

Next the game is going to ask you two questions to generate what kind of stats and move sets the pokemon has. For reference, this idea comes from Kingdom Hearts 1. 

"What should it be good at?" If the player chooses a pokemon good at attack, their starter will get a slightly higher Atk and Speed. If they choose to be good a Special, they get a slightly higher Special. If they choose to be good at Defense, they get a slightly higher Def and HP. 
D1. Attack
D2. Special
D3. Defense

"What should it give up in exchange?" This will offer the player two options for the stats they did not pick in the previous question. If they choose Attack, their pokemon's Attack and Speed go down slightly. If they choose Defense, their defense and HP go down slightly. If they choose special, their Special goes down slightly.
If Player chose D1, offer choices E2 and E3 now. If player chose D2, offer E1 and E3 now. If player chose D3, offer E1 and E2 now.
E1. Attack
E2. Special
E3. Defense

For it's stats, if you want to add a fourth option for speed, you could, but the more options you make available to the player, the more complicated this becomes for the designer. 

One possible way this all comes together is in your games pokemon database / index is this; You'll have a number of spaces reserved for the different combinations of your player's choices based on the type they chose, the stat they want it to excel at, and the stat they want to give up. Each combination gets its own list for moves learned by level up and moves learned by TM / HM / tutor. For each type (Fire, Water, Grass), 18 spaces will need to be revered for a total of 54 spaces. I hope you copy paste efficiently. The combination of choices will look like this for just one type:

Pokemon Index Numbers
152
153 Combination D1, E1
154
*NOTE: in the Combination above D1 is to be good at Attack, E2 is to give up being good at defense.

155
156 Combination D1, E2
157

158
159 Combination D2, E1
160

161
162 Combination D2, E3
163

164
165 Combination D3, E1
166

167
168 Combination D3, E2
169

For each combination, the first index number is for the first form, the second index number is for the intermediate / second form, the third index number is for its third / final form. The second and third index numbers have a higher base stat total, the move learn levels are delayed, etc. If breeding is an option in your generation, then the combinations would also have an egg group associated and breeding compatibility.

Next the game will apply the sprite and cry to that pokemon based on the players other two options. For the sprite's colors, the color pallet will depend on the type. If all pokemon in gen 1 games have 4 colors, [white, black, color 1 (or light grey) and color 2 (or dark grey)], color 1 could be blue for water, and color 2 would be a color that suits being paired with blue.

Finally, the game will ask the player to name their pokemons species and then offer the player to offer it a nickname. The game will apply the player's input to the index numbers for the combination the player chose. All indexes will have a generic description that based on the choices the player made for its stats, something like "A genetically created pokemon! It is strong but does not appear to be that smart / bulky." The player's custom pokemon is complete.

When the pokemon is added to the players pokemon roster/team, Stat IV's will be generated as per normal.

Now, for the Rival's pokemon! If the player chooses pokemon number 152, have the game give the rival pokemon 1xx. Work that out however you feel it's appropriate. If the player chooses to have high attack, maybe the rival should get a pokemon who sacrifices either attack or special but keeps defense. If the player chooses to have high special, maybe the rival chooses to sacrifice defense and keep special. Etc. Give the rival's pokemon a species name from a database of 10 to 20 pokemon names (Cait Sith, Balrog, Titanoboa, or good names, whatever). Choose a sprite and cry that the player did not choose and apply that to the index number. Call it a day.