A reimagining of Gen 1/Gen 2 Pokemon written entirely in Python
At this stage of development, Pykemon is just a battle screen with a basic fight sequence. What I have accomplished so far includes:
- A Pokemon object can be created like "var = Pokemon('Pokemon Name')"
- The Pokemon class then checks the provided name against the PokemonDB.json file for all relevant data used within rest of the class
- Gender is assigned based on Gen 2 gender ratio
- Pokedex number refers to the National number
- All base stats are taken from PokemonDB.json and are pulled from Gen 1/Gen 2
- IVs are HP, Attack, Defense, Speed, Special Attack, Special Defense
- IVs (excluding HP) are generated by randomly assigning value between 0 - 15
- HP IV is calculated by formula used in Gen 1
- Shiny status is determined by Gen 2 formula. IVs must match specific criteria
- EVs were not introduced in Gen 1, instead Gen 1 used a format called Stat Exp. Each time a pokemon won in a battle, the base stats of the loser were added to the winner's stat exp. The stat exp determines the various levels of Pokemon stats
- Pokemon gain levels based on 6 different rates: erratic, fast, medium fast, medium slow, slow, and fluctuating. I used the official Gen 1 formulas to determine a Pokemon's level rather than a rainbow table in order to remove level 100 cap limit
- Pokemon current stats are calculated by following the official Gen 1 formula, which takes into account the current Pokemon's base stats, current level, and stat exp
- Pokemon current max HP is calculated with a slightly different formula, but otherwise uses the same data
- The appropriate sprites used in a battle (front and back, shiny and normal)
- If a Pokemon is wild, it's move list will contain the 4 most recent moves it is able to learn.
- A pokemon can level up which is then manually recalculate all current stats by taking into account the new level
- A Pokemon can evolve by calling the evolve function. This will check the 'Evolves-Into' key within the PokemonDB.json file. Using this value, it changes the name of the Pokemon, then recalculates all base stats and current stats.
- Status effects
- Held items
- Move will check types and return a modifier to be used in damage calculation
- STAB (Same Type Attack Bonus) is determined if Pokemon uses a move that matches it's type
- Damage is calculated by first determining if a move is special or physical. This will determine which Pokemon stats to reference. Then it follows the standard formula for damage calculation
- Use a move - Pokemon uses move which then applies damage (if applicable)
- Accuracy check - Pokemon has chance to miss if move accuracy is below 100
- Critical hit chance - Pokemon has chance to land critical hit based on Gen 1 formula
- Status effects (poisoned, flinch, badly poisoned, burned, paralyzed, frozen, confusion, sleep)
- Any other features not mentioned
- Everything
- Proper sprites are used for front and back
- Pokemon names, level, current HP and max HP properly display
- HP bars display proper colour and size based on remaining HP
- XP bar works correctly and displays how far into current level a Pokemon is
- HP and XP bars animate properly
- Gender is shown with proper gender symbol
- Player can either run or fight
- Fight menu shows all moves known by Pokemon
- Moves can be used, and pp will be reduced accurately
- Status effect indicator (poisoned = PSN, burned = BRN, paralyzed = PAR, frozen = FRZ, sleep = SLP)
- pkmn menu option
- pack menu option