From 0f8236575a5d391d8caa94711338e6aac9af315c Mon Sep 17 00:00:00 2001 From: Philippe Symons Date: Thu, 27 Nov 2025 20:27:35 +0100 Subject: [PATCH 1/2] Fix a couple of compile errors on latest-release branch - Fix make clean by adding -f flag when removing output.json - Fix broken compress_lz10.sh script: it had a check to avoid compressing when the input bin file hasn't changed. But the -nt operator also returns false if the output file doesn't exist. - Fix compilation error on conflicting u32 typedef: libtonc defines one and so does data-generator. We shouldn't redefine it if the one from libtonc exists. The one in data-generator exists for compiling the tool for pc. - Fix Dockerfile. For some reason the Dockerfile was now failing because Ubuntu manages the python pip packages. I fixed it with the --break-system-packages shortcut. It should be fine. --- Dockerfile | 2 +- Makefile | 2 +- compress_lz10.sh | 2 +- tools/data-generator/include/extern_pokemon_data.h | 2 ++ 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1d15c84..3f7e23b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,4 +9,4 @@ ARG GROUP_ID ENV DEBIAN_FRONTEND="noninteractive" -RUN apt update && apt install -y build-essential python3-pip && pip install pandas requests openpyxl +RUN apt update && apt install -y build-essential python3-pip && pip install pandas requests openpyxl --break-system-packages diff --git a/Makefile b/Makefile index 22047ab..ce096d0 100644 --- a/Makefile +++ b/Makefile @@ -175,7 +175,7 @@ clean: @$(MAKE) -C tools/data-generator clean @$(MAKE) -C loader clean @rm -fr $(BUILD) $(TARGET).elf $(TARGET).gba data/ to_compress/ - @rm text_helper/output.json + @rm -f text_helper/output.json diff --git a/compress_lz10.sh b/compress_lz10.sh index 79ca64f..6ca2ffc 100755 --- a/compress_lz10.sh +++ b/compress_lz10.sh @@ -1,7 +1,7 @@ #!/bin/sh infile="$1" outfile="data/$(basename "$infile" .bin)_lz10.bin" -if [ "$infile" -nt "$outfile" ]; then +if [ ! -f "$outfile" ] || [ "$infile" -nt "$outfile" ]; then gbalzss e "$infile" "$outfile" echo -n "C" else diff --git a/tools/data-generator/include/extern_pokemon_data.h b/tools/data-generator/include/extern_pokemon_data.h index 356d520..f958bf5 100644 --- a/tools/data-generator/include/extern_pokemon_data.h +++ b/tools/data-generator/include/extern_pokemon_data.h @@ -7,10 +7,12 @@ #define NUM_POKEMON 252 #define POKEMON_ARRAY_SIZE NUM_POKEMON + 1 +#ifndef TONC_TYPES typedef uint8_t u8; typedef uint8_t byte; typedef uint16_t u16; typedef uint32_t u32; +#endif void generate_pokemon_data(const char *output_path); From a7b2703bf80c4ab3753d2ea44c4083bf171d5611 Mon Sep 17 00:00:00 2001 From: Philippe Symons Date: Thu, 27 Nov 2025 23:14:29 +0100 Subject: [PATCH 2/2] Replace the PCCS code with a git submodule This eliminates duplicate code. - Only maintain the code in one place! To make sure the submodule is getting cloned too after cloning Poke_Transporter_GB, execute: git submodule update --init --recursive To update the submodule to a newer commit/different branch: cd PCCS git pull git checkout cd .. git add PCCS git commit git push The way it works is that a specific commit is tied to your Poke_Transporter_GB repository's PCCS folder. --- .gitmodules | 3 + Makefile | 4 +- PCCS | 1 + include/pccs/GBPokemon.h | 152 -- include/pccs/Gen1Pokemon.h | 39 - include/pccs/Gen2Pokemon.h | 47 - include/pccs/Gen3Pokemon.h | 295 --- include/pccs/PokeBox.h | 49 - include/pccs/Pokemon.h | 105 - include/pccs/pccs_settings.h | 9 - include/pccs/pokemon_data.h | 1703 ---------------- include/pccs/typeDefs.h | 671 ------- include/pokemon_party.h | 2 +- source/box_menu.cpp | 2 +- source/pccs/GBPokemon.cpp | 818 -------- source/pccs/Gen1Pokemon.cpp | 60 - source/pccs/Gen2Pokemon.cpp | 44 - source/pccs/Gen3Pokemon.cpp | 743 ------- source/pccs/PokeBox.cpp | 165 -- source/pccs/Pokemon.cpp | 99 - source/pccs/pokemon_data.cpp | 3573 ---------------------------------- 21 files changed, 8 insertions(+), 8576 deletions(-) create mode 100644 .gitmodules create mode 160000 PCCS delete mode 100644 include/pccs/GBPokemon.h delete mode 100644 include/pccs/Gen1Pokemon.h delete mode 100644 include/pccs/Gen2Pokemon.h delete mode 100644 include/pccs/Gen3Pokemon.h delete mode 100644 include/pccs/PokeBox.h delete mode 100644 include/pccs/Pokemon.h delete mode 100644 include/pccs/pccs_settings.h delete mode 100644 include/pccs/pokemon_data.h delete mode 100644 include/pccs/typeDefs.h delete mode 100644 source/pccs/GBPokemon.cpp delete mode 100644 source/pccs/Gen1Pokemon.cpp delete mode 100644 source/pccs/Gen2Pokemon.cpp delete mode 100644 source/pccs/Gen3Pokemon.cpp delete mode 100644 source/pccs/PokeBox.cpp delete mode 100644 source/pccs/Pokemon.cpp delete mode 100644 source/pccs/pokemon_data.cpp diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..ad74c33 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "PCCS"] + path = PCCS + url = git@github.com:GearsProgress/Pokemon-Community-Conversion-Standard.git diff --git a/Makefile b/Makefile index ce096d0..bc49bc8 100644 --- a/Makefile +++ b/Makefile @@ -30,8 +30,8 @@ LIBTONC := $(DEVKITPRO)/libtonc #--------------------------------------------------------------------------------- TARGET := $(notdir $(CURDIR))_mb BUILD := build -SOURCES := source source/pccs -INCLUDES := include include/pccs +SOURCES := source PCCS/lib/source +INCLUDES := include PCCS/lib/include DATA := data MUSIC := audio GRAPHICS := graphics diff --git a/PCCS b/PCCS new file mode 160000 index 0000000..289ded8 --- /dev/null +++ b/PCCS @@ -0,0 +1 @@ +Subproject commit 289ded81568b847da1702c565ef6296e7d5e1abf diff --git a/include/pccs/GBPokemon.h b/include/pccs/GBPokemon.h deleted file mode 100644 index 4b1d627..0000000 --- a/include/pccs/GBPokemon.h +++ /dev/null @@ -1,152 +0,0 @@ -#ifndef GBPOKEMON_H -#define GBPOKEMON_H - -#include "Pokemon.h" -#include "Gen3Pokemon.h" - -class GBPokemon : public Pokemon // The class for gen 1 and 2 Pokemon, since they share some conversion functions -{ -protected: - GBPokemon(); - void updateValidity(); - // These store the data bytes - byte nicknameArray[11]; - byte OTArray[11]; - byte externalIndexNumber; - Language lang = (Language)0; - - static const DataVarInfo - // All of the data info variables - speciesIndexNumber[2], - level[2], - moveOne[2], moveTwo[2], moveThree[2], moveFour[2], - trainerID[2], - expPoints[2], - hpStatExp[2], atkStatExp[2], defStatExp[2], speStatExp[2], spcStatExp[2], - atkDV[2], defDV[2], speDV[2], spcDV[2], - ppUpNumMoveOne[2], ppUpNumMoveTwo[2], ppUpNumMoveThree[2], ppUpNumMoveFour[2], - ppNumTotalMoveOne[2], ppNumTotalMoveTwo[2], ppNumTotalMoveThree[2], ppNumTotalMoveFour[2]; - - static const DataVarInfo - // and the convenient arrays of some of the variable groups: - *moves[4], - *statExps[5], - *DVs[5], - *PPUpNums[4], - *PPUpTotals[4]; - -// This is used to easily print out a Pokemon, when using a standard C++ terminal -#if ON_GBA -#else - std::string parentPrint(); -#endif - -public: - virtual void loadData(Language nLang, byte nDataArray[], byte nNicknameArray[], byte nOTArray[], byte nExternalIndexNum); - - // All of the simple getters and setters are defined here - u32 getLevel() { return getVar(level[generation - 1]); } - u32 getTrainerID() { return getVar(trainerID[generation - 1]); } - u32 getExpPoints() { return getVar(expPoints[generation - 1]); } - - bool setLevel(byte newVal) { return setVar(level[generation - 1], newVal); } - bool setOriginalTrainerID(byte newVal) { return setVar(trainerID[generation - 1], newVal); } - bool setExpPoints(u32 newVal) { return setVar(expPoints[generation - 1], newVal); } - - // The ones that access arrays are defined here: - u32 getMove(int moveIndex) { return getVar(moves[moveIndex][generation - 1]); } - u32 getStatExp(Stat currStat) { return getVar(statExps[currStat][generation - 1]); } - u32 getPPUpNum(int moveIndex) { return getVar(PPUpNums[moveIndex][generation - 1]); } - u32 getPPTotal(int moveIndex) { return getVar(PPUpTotals[moveIndex][generation - 1]); } - - bool setMove(int moveIndex, byte newVal) { return setVar(moves[moveIndex][generation - 1], newVal); } - bool setStatExp(Stat currStat, byte newVal) { return setVar(statExps[currStat][generation - 1], newVal); } - bool setPPUpNum(int moveIndex, byte newVal) { return setVar(PPUpNums[moveIndex][generation - 1], newVal); } - bool setPPTotal(int moveIndex, byte newVal) { return setVar(PPUpTotals[moveIndex][generation - 1], newVal); } - - // These are all replaced in the child classes, but give a default value or do nothing here - - // ---- Gen 1 - virtual u32 getSpeciesIndexNumber() { return getVar(*speciesIndexNumber); } - virtual u32 getCurrentHP() { return 0; } - virtual u32 getStatusCondition() { return 0; } - virtual u32 getCatchRate() { return 0; } - virtual u32 getType(int typeIndex) { return NORMAL; } - - virtual bool setSpeciesIndexNumber(byte newVal) { return setVar(*speciesIndexNumber, newVal); } - virtual bool setCurrentHP(byte newVal) { return false; } - virtual bool setStatusCondition(byte newVal) { return false; } - virtual bool setCatchRate(byte newVal) { return false; } - virtual bool setType(int typeIndex, Gen1Types newVal) { return false; } - - // ---- Gen 2 - virtual u32 getHeldItem() { return 0; } // no item - virtual u32 getFriendship() { return 70; } // default friendship - make this different for Pikachu in Yellow??? - virtual u32 getPokerusStrain() { return 0; } - virtual u32 getPokerusDaysRemaining() { return 0; } - virtual u32 getCaughtDataTime() { return 0; } - virtual u32 getCaughtDataLevel() { return 0; } - virtual u32 getCaughtDataGender() { return 0; } - virtual u32 getCaughtDataLocation() { return 0; } - - virtual bool setHeldItem(byte newVal) { return false; } // This could *technically* be seen as setting the catch rate but... - virtual bool setFriendship(byte newVal) { return false; } - virtual bool setPokerusStrain(byte newVal) { return false; } - virtual bool setPokerusDaysRemaining(byte newVal) { return false; } - virtual bool setCaughtDataTime(byte newVal) { return false; } - virtual bool setCaughtDataLevel(byte newVal) { return false; } - virtual bool setCaughtDataGender(byte newVal) { return false; } - virtual bool setCaughtDataLocation(byte newVal) { return false; } - - // These all have special implementations - u32 getDV(Stat currStat); - bool setDV(Stat currStat, byte newVal); - - // These is virtual so it can be overwitten in Gen 1 - - // These aren't direct variables, but they're useful to have - Language getLanguage() { return lang; }; - byte getUnownLetter(); - Gender getGender(); - Nature getVirtualConsoleNature(); - bool getIsShiny(); - bool externalConvertNickname(byte outputArray[]); - - // And this is for all the conversion stuff - bool convertToGen3(Gen3Pokemon *newPkmn, bool sanitizeMythicals); - bool loadEvent(Gen3Pokemon *newPkmn); - - bool generatePersonalityValue(Gen3Pokemon *newPkmn, RNGMethod rng); - bool convertTrainerID(Gen3Pokemon *newPkmn); - bool convertNickname(Gen3Pokemon *newPkmn); - bool convertLanguage(Gen3Pokemon *newPkmn); - bool convertMiscFlags(Gen3Pokemon *newPkmn); - bool convertTrainerNickname(Gen3Pokemon *newPkmn); - bool convertMarkings(Gen3Pokemon *newPkmn); - // Data - bool convertSpeciesIndexNumber(Gen3Pokemon *newPkmn); - bool convertItem(Gen3Pokemon *newPkmn); - bool convertEXP(Gen3Pokemon *newPkmn); - bool convertFriendship(Gen3Pokemon *newPkmn); - bool convertMoves(Gen3Pokemon *newPkmn); - bool convertEVs(Gen3Pokemon *newPkmn); - bool convertContestConditions(Gen3Pokemon *newPkmn); - bool convertPokerus(Gen3Pokemon *newPkmn); - bool convertMetLocation(Gen3Pokemon *newPkmn); - bool convertMetLevel(Gen3Pokemon *newPkmn); - bool convertGameOfOrigin(Gen3Pokemon *newPkmn); - bool convertPokeball(Gen3Pokemon *newPkmn); - bool convertTrainerGender(Gen3Pokemon *newPkmn); - bool convertIVs(Gen3Pokemon *newPkmn); - bool convertAbilityFlag(Gen3Pokemon *newPkmn); - bool convertRibbonsAndObedience(Gen3Pokemon *newPkmn); - bool convertShininess(Gen3Pokemon *newPkmn); - // Extra - bool setRequestedLetter(Gen3Pokemon *newPkmn); - bool setRequestedNature(Gen3Pokemon *newPkmn); - bool setRequestedGender(Gen3Pokemon *newPkmn); - bool setRequestedAbility(Gen3Pokemon *newPkmn); - bool setRequestedSize(Gen3Pokemon *newPkmn); -}; - -#endif \ No newline at end of file diff --git a/include/pccs/Gen1Pokemon.h b/include/pccs/Gen1Pokemon.h deleted file mode 100644 index aed7556..0000000 --- a/include/pccs/Gen1Pokemon.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef GEN1POKEMON_H -#define GEN1POKEMON_H - -#include "GBPokemon.h" - -class Gen1Pokemon : public GBPokemon // The class for gen 1 Pokemon -{ -public: - Gen1Pokemon(PokemonTables *table); - byte dataArray[33]; - - u32 getSpeciesIndexNumber(); - u32 getCurrentHP() { return getVar(g1_currentHP); } - u32 getStatusCondition() { return getVar(g1_statusCondition); } - u32 getCatchRate() { return getVar(g1_catchRate); } - u32 getType(int typeIndex) { return getVar(*g1_types[typeIndex]); } - - bool setSpeciesIndexNumber(byte newVal); - bool setCurrentHP(byte newVal) { return setVar(g1_currentHP, newVal); } - bool setStatusCondition(byte newVal) { return setVar(g1_statusCondition, newVal); } - bool setCatchRate(byte newVal) { return setVar(g1_catchRate, newVal); } - bool setType(int typeIndex, Gen1Types newVal) { return setVar(*g1_types[typeIndex], newVal); } - -protected: - static const DataVarInfo - // Gen 1 specific data - g1_currentHP, - g1_statusCondition, - g1_typeOne, g1_typeTwo, - g1_catchRate, - *g1_types[2]; - -#if ON_GBA -#else - void print(std::ostream &os); -#endif -}; - -#endif \ No newline at end of file diff --git a/include/pccs/Gen2Pokemon.h b/include/pccs/Gen2Pokemon.h deleted file mode 100644 index 1e35405..0000000 --- a/include/pccs/Gen2Pokemon.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef GEN2POKEMON_H -#define GEN2POKEMON_H - -#include "GBPokemon.h" - -class Gen2Pokemon : public GBPokemon // The class for gen 2 Pokemon -{ -public: - Gen2Pokemon(PokemonTables *table); - byte dataArray[32]; - - u32 getHeldItem() { return getVar(g2_heldItem); } - u32 getFriendship() { return getVar(g2_friendship); } - u32 getPokerusStrain() { return getVar(g2_pokerusStrain); } - u32 getPokerusDaysRemaining() { return getVar(g2_pokerusDaysRemaining); } - u32 getCaughtDataTime() { return getVar(g2_caughtDataTime); } - u32 getCaughtDataLevel() { return getVar(g2_caughtDataLevel); } - u32 getCaughtDataGender() { return getVar(g2_caughtDataGender); } - u32 getCaughtDataLocation() { return getVar(g2_caughtDataLocation); } - - bool setHeldItem(byte newVal) { return setVar(g2_heldItem, newVal); } - bool setFriendship(byte newVal) { return setVar(g2_friendship, newVal); } - bool setPokerusStrain(byte newVal) { return setVar(g2_pokerusStrain, newVal); } - bool setPokerusDaysRemaining(byte newVal) { return setVar(g2_pokerusDaysRemaining, newVal); } - bool setCaughtDataTime(byte newVal) { return setVar(g2_caughtDataTime, newVal); } - bool setCaughtDataLevel(byte newVal) { return setVar(g2_caughtDataLevel, newVal); } - bool setCaughtDataGender(byte newVal) { return setVar(g2_caughtDataGender, newVal); } - bool setCaughtDataLocation(byte newVal) { return setVar(g2_caughtDataLocation, newVal); } - -protected: - static const DataVarInfo - g2_heldItem, - g2_friendship, - g2_pokerusStrain, - g2_pokerusDaysRemaining, - g2_caughtDataTime, - g2_caughtDataLevel, - g2_caughtDataGender, - g2_caughtDataLocation; - -#if ON_GBA -#else - void print(std::ostream &os); -#endif -}; - -#endif \ No newline at end of file diff --git a/include/pccs/Gen3Pokemon.h b/include/pccs/Gen3Pokemon.h deleted file mode 100644 index 63910d3..0000000 --- a/include/pccs/Gen3Pokemon.h +++ /dev/null @@ -1,295 +0,0 @@ -#ifndef GEN3POKEMON_H -#define GEN3POKEMON_H - -#include "Pokemon.h" - -class Gen3Pokemon : public Pokemon // The class for gen 3 Pokemon - -{ -public: - Gen3Pokemon(PokemonTables *table); - - bool convertToGen3(Gen3Pokemon *g3p); - - u32 currRand; - u32 getNextRand_u32(); - u32 getPrevRand_u32(); - u16 getNextRand_u16(); - u16 getPrevRand_u16(); - - // These are stored internally so that they can be set by different functions - byte internalUnownLetter; - Nature internalNature; - Gender internalGender; - int internalSize; - int internalAbility; - -protected: - // These store the data bytes - byte dataArray[80] = {0}; - - // This stores if the data is current encrypted or not - bool isEncrypted; - - // These store the offsets of the various data substructures: - int substructOffsets[4] = {0, 12, 24, 36}; - int currSubstructureShift = 0; - - void swapSubstructures(int indexOne, int indexTwo); - -#pragma region - // Since there is only the Pokemon parent class, we can directly define these directly - static const DataVarInfo - // All of the data info variables - personalityValue, - trainerID, - secretID, - nicknameLetterOne, // This is silly. Change this. - nicknameLetterTwo, - nicknameLetterThree, - nicknameLetterFour, - nicknameLetterFive, - nicknameLetterSix, - nicknameLetterSeven, - nicknameLetterEight, - nicknameLetterNine, - nicknameLetterTen, - language, - isBadEgg, - hasSpecies, - useEggName, - blockBoxRS, - // unusedFlags, - originalTrainerNameLetterOne, // This is also silly. Change this. - originalTrainerNameLetterTwo, - originalTrainerNameLetterThree, - originalTrainerNameLetterFour, - originalTrainerNameLetterFive, - originalTrainerNameLetterSix, - originalTrainerNameLetterSeven, - markings, - checksum; - // unknown; - - static const DataVarInfo - *nickname[10], - *originalTrainerName[7]; - - // data section G - static const DataVarInfo - speciesIndexNumber, - heldItem, - expPoints, - ppUpNumMoveOne, - ppUpNumMoveTwo, - ppUpNumMoveThree, - ppUpNumMoveFour, - friendship; - // unused; - - static const DataVarInfo - *ppUpNums[4]; - - // data section A - static const DataVarInfo - moveOne, - moveTwo, - moveThree, - moveFour, - moveOnePP, - moveTwoPP, - moveThreePP, - moveFourPP; - static const DataVarInfo - *moves[4], - *ppUpTotals[4]; - - // data section E - static const DataVarInfo - hpEVs, - attackEVs, - defenseEVs, - speedEVs, - specialAttackEVs, - specialDefenseEVs, - coolnessCondition, - beautyCondition, - cutenessCondition, - smartnessCondition, - toughnessCondition, - sheen; - - static const DataVarInfo - *EVs[6], - *contestConditions[5]; - - static const DataVarInfo - - // data section M - pokerusStrain, - pokerusDaysRemaining, - metLocation, - levelMet, - gameOfOrigin, - pokeballCaughtIn, - originalTrainerGender, - hpIVs, - attackIVs, - defenseIVs, - speedIVs, - specialAttackIVs, - specialDefenseIVs, - isEgg, - ability, - coolNormalContestRibbon, // This is also very silly. Change it. - coolSuperContestRibbon, - coolHyperContestRibbon, - coolMasterContestRibbon, - beautyNormalContestRibbon, - beautySuperContestRibbon, - beautyHyperContestRibbon, - beautyMasterContestRibbon, - cuteNormalContestRibbon, - cuteSuperContestRibbon, - cuteHyperContestRibbon, - cuteMasterContestRibbon, - smartNormalContestRibbon, - smartSuperContestRibbon, - smartHyperContestRibbon, - smartMasterContestRibbon, - toughNormalContestRibbon, - toughSuperContestRibbon, - toughHyperContestRibbon, - toughMasterContestRibbon, - championRibbon, - winningRibbon, - victoryRibbon, - artistRibbon, - effortRibbon, - battleChampionRibbon, - regionalChampionRibbon, - nationalChampionRibbon, - countryRibbon, - nationalRibbon, - earthRibbon, - unusedRibbons, - fatefulEncounterObedience; - - static const DataVarInfo - *IVs[6], - *ribbons[31]; -#pragma endregion - - // This is used to easily print out a Pokemon, when using a standard C++ terminal -#if ON_GBA -#else -public: - void print(std::ostream &os); - std::string printDataArray(bool encrypedData); -#endif - -public: - // All of the simple getters and setters are defined here - u32 getPersonalityValue() { return getVar(personalityValue); } - u32 getTrainerID() { return getVar(trainerID); } - u32 getSecretID() { return getVar(secretID); } - u32 getLanguage() { return getVar(language); } - u32 getIsBadEgg() { return getVar(isBadEgg); } - u32 getHasSpecies() { return getVar(hasSpecies); } - u32 getUseEggName() { return getVar(useEggName); } - u32 getBlockBoxRS() { return getVar(blockBoxRS); } - u32 getMarkings() { return getVar(markings); } - u32 getChecksum() { return getVar(checksum); } - u32 getSpeciesIndexNumber() { return getVar(speciesIndexNumber, substructOffsets[SUB_G]); } - u32 getHeldItem() { return getVar(heldItem, substructOffsets[SUB_G]); } - u32 getExpPoints() { return getVar(expPoints, substructOffsets[SUB_G]); } - u32 getFriendship() { return getVar(friendship, substructOffsets[SUB_G]); } - u32 getSheen() { return getVar(sheen, substructOffsets[SUB_E]); } - u32 getPokerusStrain() { return getVar(pokerusStrain, substructOffsets[SUB_M]); } - u32 getPokerusDaysRemaining() { return getVar(pokerusDaysRemaining, substructOffsets[SUB_M]); } - u32 getMetLocation() { return getVar(metLocation, substructOffsets[SUB_M]); } - u32 getLevelMet() { return getVar(levelMet, substructOffsets[SUB_M]); } - u32 getGameOfOrigin() { return getVar(gameOfOrigin, substructOffsets[SUB_M]); } - u32 getPokeballCaughtIn() { return getVar(pokeballCaughtIn, substructOffsets[SUB_M]); } - u32 getOriginalTrainerGender() { return getVar(originalTrainerGender, substructOffsets[SUB_M]); } - u32 getIsEgg() { return getVar(isEgg, substructOffsets[SUB_M]); } - u32 getAbility() { return getVar(ability, substructOffsets[SUB_M]); } - u32 getFatefulEncounterObedience() { return getVar(fatefulEncounterObedience, substructOffsets[SUB_M]); } - - bool setTrainerID(u32 newVal) { return setVar(trainerID, newVal); } - bool setSecretID(u32 newVal) { return setVar(secretID, newVal); } - bool setLanguage(u32 newVal) { return setVar(language, newVal); } - bool setIsBadEgg(u32 newVal) { return setVar(isBadEgg, newVal); } - bool setHasSpecies(u32 newVal) { return setVar(hasSpecies, newVal); } - bool setUseEggName(u32 newVal) { return setVar(useEggName, newVal); } - bool setBlockBoxRS(u32 newVal) { return setVar(blockBoxRS, newVal); } - bool setMarkings(u32 newVal) { return setVar(markings, newVal); } - bool setChecksum(u32 newVal) { return setVar(checksum, newVal); } - bool setSpeciesIndexNumber(u32 newVal) { return setVar(speciesIndexNumber, substructOffsets[SUB_G], newVal); } - bool setHeldItem(Item newVal) { return setVar(heldItem, substructOffsets[SUB_G], newVal); } - bool setExpPoints(u32 newVal) { return setVar(expPoints, substructOffsets[SUB_G], newVal); } - bool setFriendship(u32 newVal) { return setVar(friendship, substructOffsets[SUB_G], newVal); } - bool setSheen(u32 newVal) { return setVar(sheen, substructOffsets[SUB_E], newVal); } - bool setPokerusStrain(u32 newVal) { return setVar(pokerusStrain, substructOffsets[SUB_M], newVal); } - bool setPokerusDaysRemaining(u32 newVal) { return setVar(pokerusDaysRemaining, substructOffsets[SUB_M], newVal); } - bool setMetLocation(u32 newVal) { return setVar(metLocation, substructOffsets[SUB_M], newVal); } - bool setLevelMet(u32 newVal) { return setVar(levelMet, substructOffsets[SUB_M], newVal); } - bool setGameOfOrigin(Game newVal) { return setVar(gameOfOrigin, substructOffsets[SUB_M], newVal); } - bool setPokeballCaughtIn(u32 newVal) { return setVar(pokeballCaughtIn, substructOffsets[SUB_M], newVal); } - bool setOriginalTrainerGender(u32 newVal) { return setVar(originalTrainerGender, substructOffsets[SUB_M], newVal); } - bool setIsEgg(u32 newVal) { return setVar(isEgg, substructOffsets[SUB_M], newVal); } - bool setFatefulEncounterObedience(u32 newVal) { return setVar(fatefulEncounterObedience, substructOffsets[SUB_M], newVal); } - - // The ones that access arrays are defined here: - u32 getPPUpNum(int moveIndex) { return getVar(*ppUpNums[moveIndex], substructOffsets[SUB_G]); } - u32 getMove(int moveIndex) { return getVar(*moves[moveIndex], substructOffsets[SUB_A]); } - u32 getPPTotal(int moveIndex) { return getVar(*ppUpTotals[moveIndex], substructOffsets[SUB_A]); } - u32 getEV(Stat currStat) { return getVar(*EVs[currStat], substructOffsets[SUB_E]); } - u32 getContestCondition(Condition currCondition) { return getVar(*contestConditions[currCondition], substructOffsets[SUB_E]); } - u32 getIV(Stat currStat) { return getVar(*IVs[currStat], substructOffsets[SUB_M]); } - u32 getRibbons(Ribbon currRibbon) { return getVar(*ribbons[currRibbon], substructOffsets[SUB_M]); } - u32 getNicknameLetter(int index) { return getVar(*nickname[index]); }; - u32 getOTLetter(int index) { return getVar(*originalTrainerName[index]); }; - - bool setPPUpNum(int moveIndex, u32 newVal) { return setVar(*ppUpNums[moveIndex], substructOffsets[SUB_G], newVal); } - bool setMove(int moveIndex, u32 newVal) { return setVar(*moves[moveIndex], substructOffsets[SUB_A], newVal); } - bool setPPTotal(int moveIndex, u32 newVal) { return setVar(*ppUpTotals[moveIndex], substructOffsets[SUB_A], newVal); } - bool setEV(Stat currStat, u32 newVal) { return setVar(*EVs[currStat], substructOffsets[SUB_E], newVal); } - bool setContestCondition(Condition currCondition, u32 newVal) { return setVar(*contestConditions[currCondition], substructOffsets[SUB_E], newVal); } - bool setIV(Stat currStat, u32 newVal) { return setVar(*IVs[currStat], substructOffsets[SUB_M], newVal); } - bool setRibbons(Ribbon currRibbon, u32 newVal) { return setVar(*ribbons[currRibbon], substructOffsets[SUB_M], newVal); } - bool setNicknameLetter(int index, u32 newVal) { return setVar(*nickname[index], newVal); }; - bool setOTLetter(int index, u32 newVal) { return setVar(*originalTrainerName[index], newVal); }; - - bool setPersonalityValue(u32 newVal); - bool setAbility(u32 newVal); - - // This is used to load our data in from an array and decrypt it - void loadData(byte incomingArray[]); - - // And then some general functions - void decryptSubstructures(); - - void encryptSubstructures(); - - void updateChecksum(); - - void updateSubstructureShift(); - - void resetSubstructureShift(); - - void updateSecurityData(); - - byte getUnownLetter(); - Nature getNature(); - Gender getGender(); - int getAbilityFromPersonalityValue(); - int getSize(); - - bool getIsShiny(); - - bool setNicknameArray(byte nameArr[], int nameArrSize); - bool setOTArray(byte nameArr[], int nameArrSize); -}; - -#endif \ No newline at end of file diff --git a/include/pccs/PokeBox.h b/include/pccs/PokeBox.h deleted file mode 100644 index 74dce4a..0000000 --- a/include/pccs/PokeBox.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef POKEBOX_H -#define POKEBOX_H - -#include "Gen1Pokemon.h" -#include "Gen2Pokemon.h" -#include "Gen3Pokemon.h" - -class PokeBox // Stores up to 30 Pokemon in a box -{ -private: - void convertPkmn(int index); - PokemonTables *table; - Pokemon *boxStorage[30]; - Pokemon *nullMon; - int currIndex = 0; - -public: - PokeBox(); - PokeBox(PokemonTables *nTable); - void setTable(PokemonTables *nTable); - bool addPokemon(Pokemon *currPkmn); - Pokemon *getPokemon(int index); - GBPokemon *getGBPokemon(int index); - Gen3Pokemon *getGen3Pokemon(int index); - bool removePokemon(int index); - void loadData(int generation, Language nLang, byte nDataArray[]); - void convertAll(); - int getNumInBox(); - int getNumValid(); - bool stabilize_mythical = false; - -#if ON_GBA -#else - friend std::ostream &operator<<(std::ostream &os, PokeBox &pc) - { - for (int i = 0; i < pc.currIndex; i++) - { - os << "\n" - << "---------------- " << "POKEMON #" << i << " ----------------" << "\n" - << *pc.boxStorage[i] << "\n"; - } - - return os; - } - std::string printDataArray(); -#endif -}; - -#endif \ No newline at end of file diff --git a/include/pccs/Pokemon.h b/include/pccs/Pokemon.h deleted file mode 100644 index a86309f..0000000 --- a/include/pccs/Pokemon.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef POKEMON_H -#define POKEMON_H - -#include "pokemon_data.h" - -#if ON_GBA -#else -#include -#include -#include -#endif - -#if !USE_EXTERNALDATA -// #include "pokemonData.h" -#endif - -#if USE_CPP_RAND -#else -#include "random.h" -#endif - -// Avoid having to import math -inline u32 sizeToMask(int len) -{ - u32 out = 1; - for (int i = 0; i < len; i++) - { - out *= 2; - } - return (out - 1); -} - -inline u32 getPureRand() // Gets a random number from the device itself -{ -#if USE_CPP_RAND - srand(time(0)); - return rand() << 16 | rand(); -#else - return get_rand_u32(); -#endif -} - -// FNV-1a 32-bit hash function for byte arrays -inline u32 fnv1a_hash(unsigned char *data, size_t length) -{ - const uint32_t fnv_prime = 0x01000193; - const uint32_t fnv_offset_basis = 0x811C9DC5; - uint32_t hash = fnv_offset_basis; - - for (size_t i = 0; i < length; ++i) - { - hash ^= data[i]; - hash *= fnv_prime; - } - return hash; -} - -class Pokemon // The base Pokemon class -{ -public: - Pokemon(); - virtual ~Pokemon() {}; - virtual u32 getSpeciesIndexNumber(); - -#if ON_GBA -#else - virtual void print(std::ostream &os) - { - os << "This is a base Pokemon, it has no info!"; - }; - - friend std::ostream &operator<<(std::ostream &os, Pokemon &p) - { - p.print(os); - return os; - } -#endif - - int dataArraySize; - int nicknameArraySize; - int OTArraySize; - - // Will be set by child classes - byte *dataArrayPtr; - byte *nicknameArrayPtr; - byte *OTArrayPtr; - byte *externalIndexNumberPtr; - - // This is extra information that's nice to hold on to - int generation = 0; - bool isValid; - -protected: - PokemonTables *pokeTable; - - bool isBigEndian; - - u32 getVar(DataVarInfo dataVar); - u32 getVar(DataVarInfo dataVar, int extraByteOffset); - - bool setVar(DataVarInfo dataVar, u32 newValue); - bool setVar(DataVarInfo dataVar, int extraByteOffset, u32 newValue); -}; - -#endif diff --git a/include/pccs/pccs_settings.h b/include/pccs/pccs_settings.h deleted file mode 100644 index 5248e63..0000000 --- a/include/pccs/pccs_settings.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PCCS_SETTINGS_H -#define PCCS_SETTINGS_H - -#define ON_GBA true -#define USE_COMPRESSED_DATA true -#define USE_CPP_RAND false -#define ACCESS_POKEDEX true - -#endif \ No newline at end of file diff --git a/include/pccs/pokemon_data.h b/include/pccs/pokemon_data.h deleted file mode 100644 index 337bb96..0000000 --- a/include/pccs/pokemon_data.h +++ /dev/null @@ -1,1703 +0,0 @@ -#ifndef POKEMON_DATA_H -#define POKEMON_DATA_H - -#include "typeDefs.h" -#include "pccs_settings.h" - -#define med_fast_max (u32)1000000 -// Slightly Fast goes unused -// Slightly Slow goes unused -#define med_slow_max (u32)1059860 -#define fast_max (u32)800000 -#define slow_max (u32)1250000 -// Erractic is Gen 3+ -// Fluctuating is Gen 3+ - -#define EXP_MED_FAST 0 -// Slightly Fast goes unused -// Slightly Slow goes unused -#define EXP_MED_SLOW 3 -#define EXP_FAST 4 -#define EXP_SLOW 5 -// Erractic is Gen 3+ -// Fluctuating is Gen 3+ - -/* -#define JPN_ID 1 -#define ENG_ID 2 -#define FRE_ID 3 -#define ITA_ID 4 -#define GER_ID 5 -#define SPA_ID 7 -#define KOR_ID 8 - -#define GREEN_ID 0 -#define RED_ID 1 -#define BLUE_ID 2 -#define YELLOW_ID 3 -#define GOLD_ID 4 -#define SILVER_ID 5 -#define CRYSTAL_ID 6 - -#define EVENT_MEW_JPN 0 -#define EVENT_MEW_ENG 1 -#define EVENT_MEW_FRE 2 -#define EVENT_MEW_ITA 3 -#define EVENT_MEW_GER 4 -#define EVENT_MEW_SPA 5 -#define EVENT_CELEBI 6 -*/ - -#define MAX_PKMN_IN_BOX 30 -#define NUM_POKEMON 252 -#define POKEMON_ARRAY_SIZE NUM_POKEMON + 1 -#define POKEMON_SIZE 80 - -// these arrays are too small to compress -extern const u32 EXP_MAXIMUMS[6]; -extern const int GENDER_THRESHOLDS[2][8]; -// the next arrays don't compress well at all. Not worth the decompression overhead. -extern const byte gen_1_index_array[191]; -extern const u8 EVOLUTIONS[POKEMON_ARRAY_SIZE]; - -// Unfortunately we can't compress this 8 KB MOVESETS array. -// I mean, we physically can, but decompressing it means storing it in IWRAM, -// at a moment (during convert_to_gen_three()) at which we are using a LOT of IWRAM already. -// By keeping it uncompressed, it gets stored in EWRAM, where it won't hinder us. -// But it does mean that it still takes up 8 KB in the rom. -// Just for reference: when compressing it with ZX0 AND only storing the "changed" bits for PKMN -// evolutions in relation to their base forms, we could bring the size down to 4641 bytes. -// But alas, the IWRAM consumption at a critical point in time made this approach unviable. -// TODO: we might be able to load similar data from the game cartridges. -// However, it turns out the data is different between the R/S/E and FR/LG games. -// So we would have to store "patches"/differences if we go this route. -// It also means we'd have to figure out rom offsets for every single gen III game variant/localization. -extern const byte MOVESETS[POKEMON_ARRAY_SIZE][32]; - -/** - * Okay, here's the thing: to reduce the rom size, we compressed a bunch of data with ZX0 - * Among this data are various data tables that were previously just stored as const arrays. - * - * But, during the mystery_gift_builder/mystery_gift_injector execution, - * these data tables are used intensely, because you're not using them for single pokémon, but rather for boxes of pokémon. - * - * Decompression is not cheap, so we can't afford to decompress the tables again and again for every pokémon we deal with - * during this flow. - * - * This is where this class comes in. It is basically a holder of these tables. The idea is to pass it along with the mystery_gift_builder - * and have it lazy decompress the tables AND charsets it needs. This way when we are dealing with multiple pokémon, we are not decompressing - * the same data every time and thereby make performance suffer. - * - * It DOES have a significant IWRAM cost though. The intention is to just allocate this struct on the stack. - * As far as I can tell, our stack is not really restricted at all. It just fills up the IWRAM as needed. So we need to be careful not to - * overwrite/corrupt any code or data we specifically tagged to be stored in IWRAM. - */ -class PokemonTables -{ -public: - bool exp_groups_loaded; - bool gender_ratios_loaded; - bool num_abilities_loaded; - bool first_moves_loaded; - bool power_points_loaded; - bool event_pkmn_loaded; - bool types_loaded; - // a number representing the unique combination of gen 1/2 and the specific language - // 0 means not loaded - u8 input_charset_type; - // 0 means not loaded, 1=JPN, 2=Intern - u8 gen3_charset_type; - -#if USE_COMPRESSED_DATA - u8 EXP_GROUPS[POKEMON_ARRAY_SIZE]; - u8 GENDER_RATIO[POKEMON_ARRAY_SIZE]; - bool NUM_ABILITIES[POKEMON_ARRAY_SIZE]; - byte FIRST_MOVES[POKEMON_ARRAY_SIZE]; - u8 POWER_POINTS[252]; - byte EVENT_PKMN[8][80]; - u8 TYPES[POKEMON_ARRAY_SIZE][2]; -#else - - const u8 EXP_GROUPS[POKEMON_ARRAY_SIZE] = { - 0, // Offset the list to remove "off by one" errors - 3, // Bulbasaur - 3, // Ivysaur - 3, // Venusaur - 3, // Charmander - 3, // Charmeleon - 3, // Charizard - 3, // Squirtle - 3, // Wartortle - 3, // Blastoise - 0, // Caterpie - 0, // Metapod - 0, // Butterfree - 0, // Weedle - 0, // Kakuna - 0, // Beedrill - 3, // Pidgey - 3, // Pidgeotto - 3, // Pidgeot - 0, // Rattata - 0, // Raticate - 0, // Spearow - 0, // Fearow - 0, // Ekans - 0, // Arbok - 0, // Pikachu - 0, // Raichu - 0, // Sandshrew - 0, // Sandslash - 3, // Nidoran♀ - 3, // Nidorina - 3, // Nidoqueen - 3, // Nidoran♂ - 3, // Nidorino - 3, // Nidoking - 4, // Clefairy - 4, // Clefable - 0, // Vulpix - 0, // Ninetales - 4, // Jigglypuff - 4, // Wigglytuff - 0, // Zubat - 0, // Golbat - 3, // Oddish - 3, // Gloom - 3, // Vileplume - 0, // Paras - 0, // Parasect - 0, // Venonat - 0, // Venomoth - 0, // Diglett - 0, // Dugtrio - 0, // Meowth - 0, // Persian - 0, // Psyduck - 0, // Golduck - 0, // Mankey - 0, // Primeape - 5, // Growlithe - 5, // Arcanine - 3, // Poliwag - 3, // Poliwhirl - 3, // Poliwrath - 3, // Abra - 3, // Kadabra - 3, // Alakazam - 3, // Machop - 3, // Machoke - 3, // Machamp - 3, // Bellsprout - 3, // Weepinbell - 3, // Victreebel - 5, // Tentacool - 5, // Tentacruel - 3, // Geodude - 3, // Graveler - 3, // Golem - 0, // Ponyta - 0, // Rapidash - 0, // Slowpoke - 0, // Slowbro - 0, // Magnemite - 0, // Magneton - 0, // Farfetch'd - 0, // Doduo - 0, // Dodrio - 0, // Seel - 0, // Dewgong - 0, // Grimer - 0, // Muk - 5, // Shellder - 5, // Cloyster - 3, // Gastly - 3, // Haunter - 3, // Gengar - 0, // Onix - 0, // Drowzee - 0, // Hypno - 0, // Krabby - 0, // Kingler - 0, // Voltorb - 0, // Electrode - 5, // Exeggcute - 5, // Exeggutor - 0, // Cubone - 0, // Marowak - 0, // Hitmonlee - 0, // Hitmonchan - 0, // Lickitung - 0, // Koffing - 0, // Weezing - 5, // Rhyhorn - 5, // Rhydon - 4, // Chansey - 0, // Tangela - 0, // Kangaskhan - 0, // Horsea - 0, // Seadra - 0, // Goldeen - 0, // Seaking - 5, // Staryu - 5, // Starmie - 0, // Mr. Mime - 0, // Scyther - 0, // Jynx - 0, // Electabuzz - 0, // Magmar - 5, // Pinsir - 5, // Tauros - 5, // Magikarp - 5, // Gyarados - 5, // Lapras - 0, // Ditto - 0, // Eevee - 0, // Vaporeon - 0, // Jolteon - 0, // Flareon - 0, // Porygon - 0, // Omanyte - 0, // Omastar - 0, // Kabuto - 0, // Kabutops - 5, // Aerodactyl - 5, // Snorlax - 5, // Articuno - 5, // Zapdos - 5, // Moltres - 5, // Dratini - 5, // Dragonair - 5, // Dragonite - 5, // Mewtwo - 3, // Mew - 3, // Chikorita - 3, // Bayleef - 3, // Meganium - 3, // Cyndaquil - 3, // Quilava - 3, // Typhlosion - 3, // Totodile - 3, // Croconaw - 3, // Feraligatr - 0, // Sentret - 0, // Furret - 0, // Hoothoot - 0, // Noctowl - 4, // Ledyba - 4, // Ledian - 4, // Spinarak - 4, // Ariados - 0, // Crobat - 5, // Chinchou - 5, // Lanturn - 0, // Pichu - 4, // Cleffa - 4, // Igglybuff - 4, // Togepi - 4, // Togetic - 0, // Natu - 0, // Xatu - 3, // Mareep - 3, // Flaaffy - 3, // Ampharos - 3, // Bellossom - 4, // Marill - 4, // Azumarill - 0, // Sudowoodo - 3, // Politoed - 3, // Hoppip - 3, // Skiploom - 3, // Jumpluff - 4, // Aipom - 3, // Sunkern - 3, // Sunflora - 0, // Yanma - 0, // Wooper - 0, // Quagsire - 0, // Espeon - 0, // Umbreon - 3, // Murkrow - 0, // Slowking - 4, // Misdreavus - 0, // Unown - 0, // Wobbuffet - 0, // Girafarig - 0, // Pineco - 0, // Forretress - 0, // Dunsparce - 3, // Gligar - 0, // Steelix - 4, // Snubbull - 4, // Granbull - 0, // Qwilfish - 0, // Scizor - 3, // Shuckle - 5, // Heracross - 3, // Sneasel - 0, // Teddiursa - 0, // Ursaring - 0, // Slugma - 0, // Magcargo - 5, // Swinub - 5, // Piloswine - 4, // Corsola - 0, // Remoraid - 0, // Octillery - 4, // Delibird - 5, // Mantine - 5, // Skarmory - 5, // Houndour - 5, // Houndoom - 0, // Kingdra - 0, // Phanpy - 0, // Donphan - 0, // Porygon2 - 5, // Stantler - 4, // Smeargle - 0, // Tyrogue - 0, // Hitmontop - 0, // Smoochum - 0, // Elekid - 0, // Magby - 5, // Miltank - 4, // Blissey - 5, // Raikou - 5, // Entei - 5, // Suicune - 5, // Larvitar - 5, // Pupitar - 5, // Tyranitar - 5, // Lugia - 5, // Ho-Oh - 3, // Celebi - 3, // Treecko - }; - const u8 GENDER_RATIO[POKEMON_ARRAY_SIZE] = { - 0, // Offset the list to remove "off by one" errors - 1, // Bulbasaur [1♀:7♂] - 1, // Ivysaur [1♀:7♂] - 1, // Venusaur [1♀:7♂] - 1, // Charmander [1♀:7♂] - 1, // Charmeleon [1♀:7♂] - 1, // Charizard [1♀:7♂] - 1, // Squirtle [1♀:7♂] - 1, // Wartortle [1♀:7♂] - 1, // Blastoise [1♀:7♂] - 3, // Caterpie [1♀:1♂] - 3, // Metapod [1♀:1♂] - 3, // Butterfree [1♀:1♂] - 3, // Weedle [1♀:1♂] - 3, // Kakuna [1♀:1♂] - 3, // Beedrill [1♀:1♂] - 3, // Pidgey [1♀:1♂] - 3, // Pidgeotto [1♀:1♂] - 3, // Pidgeot [1♀:1♂] - 3, // Rattata [1♀:1♂] - 3, // Raticate [1♀:1♂] - 3, // Spearow [1♀:1♂] - 3, // Fearow [1♀:1♂] - 3, // Ekans [1♀:1♂] - 3, // Arbok [1♀:1♂] - 3, // Pikachu [1♀:1♂] - 3, // Raichu [1♀:1♂] - 3, // Sandshrew [1♀:1♂] - 3, // Sandslash [1♀:1♂] - 6, // Nidoran♀ [Female Only] - 6, // Nidorina [Female Only] - 6, // Nidoqueen [Female Only] - 0, // Nidoran♂ [Male Only] - 0, // Nidorino [Male Only] - 0, // Nidoking [Male Only] - 4, // Clefairy [3♀:1♂] - 4, // Clefable [3♀:1♂] - 4, // Vulpix [3♀:1♂] - 4, // Ninetales [3♀:1♂] - 4, // Jigglypuff [3♀:1♂] - 4, // Wigglytuff [3♀:1♂] - 3, // Zubat [1♀:1♂] - 3, // Golbat [1♀:1♂] - 3, // Oddish [1♀:1♂] - 3, // Gloom [1♀:1♂] - 3, // Vileplume [1♀:1♂] - 3, // Paras [1♀:1♂] - 3, // Parasect [1♀:1♂] - 3, // Venonat [1♀:1♂] - 3, // Venomoth [1♀:1♂] - 3, // Diglett [1♀:1♂] - 3, // Dugtrio [1♀:1♂] - 3, // Meowth [1♀:1♂] - 3, // Persian [1♀:1♂] - 3, // Psyduck [1♀:1♂] - 3, // Golduck [1♀:1♂] - 3, // Mankey [1♀:1♂] - 3, // Primeape [1♀:1♂] - 2, // Growlithe [1♀:3♂] - 2, // Arcanine [1♀:3♂] - 3, // Poliwag [1♀:1♂] - 3, // Poliwhirl [1♀:1♂] - 3, // Poliwrath [1♀:1♂] - 2, // Abra [1♀:3♂] - 2, // Kadabra [1♀:3♂] - 2, // Alakazam [1♀:3♂] - 2, // Machop [1♀:3♂] - 2, // Machoke [1♀:3♂] - 2, // Machamp [1♀:3♂] - 3, // Bellsprout [1♀:1♂] - 3, // Weepinbell [1♀:1♂] - 3, // Victreebel [1♀:1♂] - 3, // Tentacool [1♀:1♂] - 3, // Tentacruel [1♀:1♂] - 3, // Geodude [1♀:1♂] - 3, // Graveler [1♀:1♂] - 3, // Golem [1♀:1♂] - 3, // Ponyta [1♀:1♂] - 3, // Rapidash [1♀:1♂] - 3, // Slowpoke [1♀:1♂] - 3, // Slowbro [1♀:1♂] - 7, // Magnemite [Gender Unknown] - 7, // Magneton [Gender Unknown] - 3, // Farfetch'd [1♀:1♂] - 3, // Doduo [1♀:1♂] - 3, // Dodrio [1♀:1♂] - 3, // Seel [1♀:1♂] - 3, // Dewgong [1♀:1♂] - 3, // Grimer [1♀:1♂] - 3, // Muk [1♀:1♂] - 3, // Shellder [1♀:1♂] - 3, // Cloyster [1♀:1♂] - 3, // Gastly [1♀:1♂] - 3, // Haunter [1♀:1♂] - 3, // Gengar [1♀:1♂] - 3, // Onix [1♀:1♂] - 3, // Drowzee [1♀:1♂] - 3, // Hypno [1♀:1♂] - 3, // Krabby [1♀:1♂] - 3, // Kingler [1♀:1♂] - 7, // Voltorb [Gender Unknown] - 7, // Electrode [Gender Unknown] - 3, // Exeggcute [1♀:1♂] - 3, // Exeggutor [1♀:1♂] - 3, // Cubone [1♀:1♂] - 3, // Marowak [1♀:1♂] - 0, // Hitmonlee [Male Only] - 0, // Hitmonchan [Male Only] - 3, // Lickitung [1♀:1♂] - 3, // Koffing [1♀:1♂] - 3, // Weezing [1♀:1♂] - 3, // Rhyhorn [1♀:1♂] - 3, // Rhydon [1♀:1♂] - 6, // Chansey [Female Only] - 3, // Tangela [1♀:1♂] - 6, // Kangaskhan [Female Only] - 3, // Horsea [1♀:1♂] - 3, // Seadra [1♀:1♂] - 3, // Goldeen [1♀:1♂] - 3, // Seaking [1♀:1♂] - 7, // Staryu [Gender Unknown] - 7, // Starmie [Gender Unknown] - 3, // Mr. Mime [1♀:1♂] - 3, // Scyther [1♀:1♂] - 6, // Jynx [Female Only] - 2, // Electabuzz [1♀:3♂] - 2, // Magmar [1♀:3♂] - 3, // Pinsir [1♀:1♂] - 0, // Tauros [Male Only] - 3, // Magikarp [1♀:1♂] - 3, // Gyarados [1♀:1♂] - 3, // Lapras [1♀:1♂] - 7, // Ditto [Gender Unknown] - 1, // Eevee [1♀:7♂] - 1, // Vaporeon [1♀:7♂] - 1, // Jolteon [1♀:7♂] - 1, // Flareon [1♀:7♂] - 7, // Porygon [Gender Unknown] - 1, // Omanyte [1♀:7♂] - 1, // Omastar [1♀:7♂] - 1, // Kabuto [1♀:7♂] - 1, // Kabutops [1♀:7♂] - 1, // Aerodactyl [1♀:7♂] - 1, // Snorlax [1♀:7♂] - 7, // Articuno [Gender Unknown] - 7, // Zapdos [Gender Unknown] - 7, // Moltres [Gender Unknown] - 3, // Dratini [1♀:1♂] - 3, // Dragonair [1♀:1♂] - 3, // Dragonite [1♀:1♂] - 7, // Mewtwo [Gender Unknown] - 7, // Mew [Gender Unknown] - 1, // Chikorita [1♀:7♂] - 1, // Bayleef [1♀:7♂] - 1, // Meganium [1♀:7♂] - 1, // Cyndaquil [1♀:7♂] - 1, // Quilava [1♀:7♂] - 1, // Typhlosion [1♀:7♂] - 1, // Totodile [1♀:7♂] - 1, // Croconaw [1♀:7♂] - 1, // Feraligatr [1♀:7♂] - 3, // Sentret [1♀:1♂] - 3, // Furret [1♀:1♂] - 3, // Hoothoot [1♀:1♂] - 3, // Noctowl [1♀:1♂] - 3, // Ledyba [1♀:1♂] - 3, // Ledian [1♀:1♂] - 3, // Spinarak [1♀:1♂] - 3, // Ariados [1♀:1♂] - 3, // Crobat [1♀:1♂] - 3, // Chinchou [1♀:1♂] - 3, // Lanturn [1♀:1♂] - 3, // Pichu [1♀:1♂] - 4, // Cleffa [3♀:1♂] - 4, // Igglybuff [3♀:1♂] - 1, // Togepi [1♀:7♂] - 1, // Togetic [1♀:7♂] - 3, // Natu [1♀:1♂] - 3, // Xatu [1♀:1♂] - 3, // Mareep [1♀:1♂] - 3, // Flaaffy [1♀:1♂] - 3, // Ampharos [1♀:1♂] - 3, // Bellossom [1♀:1♂] - 3, // Marill [1♀:1♂] - 3, // Azumarill [1♀:1♂] - 3, // Sudowoodo [1♀:1♂] - 3, // Politoed [1♀:1♂] - 3, // Hoppip [1♀:1♂] - 3, // Skiploom [1♀:1♂] - 3, // Jumpluff [1♀:1♂] - 3, // Aipom [1♀:1♂] - 3, // Sunkern [1♀:1♂] - 3, // Sunflora [1♀:1♂] - 3, // Yanma [1♀:1♂] - 3, // Wooper [1♀:1♂] - 3, // Quagsire [1♀:1♂] - 1, // Espeon [1♀:7♂] - 1, // Umbreon [1♀:7♂] - 3, // Murkrow [1♀:1♂] - 3, // Slowking [1♀:1♂] - 3, // Misdreavus [1♀:1♂] - 7, // Unown [Gender Unknown] - 3, // Wobbuffet [1♀:1♂] - 3, // Girafarig [1♀:1♂] - 3, // Pineco [1♀:1♂] - 3, // Forretress [1♀:1♂] - 3, // Dunsparce [1♀:1♂] - 3, // Gligar [1♀:1♂] - 3, // Steelix [1♀:1♂] - 4, // Snubbull [3♀:1♂] - 4, // Granbull [3♀:1♂] - 3, // Qwilfish [1♀:1♂] - 3, // Scizor [1♀:1♂] - 3, // Shuckle [1♀:1♂] - 3, // Heracross [1♀:1♂] - 3, // Sneasel [1♀:1♂] - 3, // Teddiursa [1♀:1♂] - 3, // Ursaring [1♀:1♂] - 3, // Slugma [1♀:1♂] - 3, // Magcargo [1♀:1♂] - 3, // Swinub [1♀:1♂] - 3, // Piloswine [1♀:1♂] - 4, // Corsola [3♀:1♂] - 3, // Remoraid [1♀:1♂] - 3, // Octillery [1♀:1♂] - 3, // Delibird [1♀:1♂] - 3, // Mantine [1♀:1♂] - 3, // Skarmory [1♀:1♂] - 3, // Houndour [1♀:1♂] - 3, // Houndoom [1♀:1♂] - 3, // Kingdra [1♀:1♂] - 3, // Phanpy [1♀:1♂] - 3, // Donphan [1♀:1♂] - 7, // Porygon2 [Gender Unknown] - 3, // Stantler [1♀:1♂] - 3, // Smeargle [1♀:1♂] - 0, // Tyrogue [Male Only] - 0, // Hitmontop [Male Only] - 6, // Smoochum [Female Only] - 2, // Elekid [1♀:3♂] - 2, // Magby [1♀:3♂] - 6, // Miltank [Female Only] - 6, // Blissey [Female Only] - 7, // Raikou [Gender Unknown] - 7, // Entei [Gender Unknown] - 7, // Suicune [Gender Unknown] - 3, // Larvitar [1♀:1♂] - 3, // Pupitar [1♀:1♂] - 3, // Tyranitar [1♀:1♂] - 7, // Lugia [Gender Unknown] - 7, // Ho-Oh [Gender Unknown] - 7, // Celebi [Gender Unknown] - 1, // Treecko [1♀:7♂] - - }; - const bool NUM_ABILITIES[POKEMON_ARRAY_SIZE] = { - 0, // Offset the list to remove "off by one" errors - 0, // Bulbasaur Overgrow - 0, // Ivysaur Overgrow - 0, // Venusaur Overgrow - 0, // Charmander Blaze - 0, // Charmeleon Blaze - 0, // Charizard Blaze - 0, // Squirtle Torrent - 0, // Wartortle Torrent - 0, // Blastoise Torrent - 0, // Caterpie Shield Dust - 0, // Metapod Shed Skin - 0, // Butterfree Compound Eyes - 0, // Weedle Shield Dust - 0, // Kakuna Shed Skin - 0, // Beedrill Swarm - 0, // Pidgey Keen Eye - 0, // Pidgeotto Keen Eye - 0, // Pidgeot Keen Eye - 1, // Rattata Run Away/Guts - 1, // Raticate Run Away/Guts - 0, // Spearow Keen Eye - 0, // Fearow Keen Eye - 1, // Ekans Intimidate/Shed Skin - 1, // Arbok Intimidate/Shed Skin - 0, // Pikachu Static - 0, // Raichu Static - 0, // Sandshrew Sand Veil - 0, // Sandslash Sand Veil - 0, // Nidoran♀ Poison Point - 0, // Nidorina Poison Point - 0, // Nidoqueen Poison Point - 0, // Nidoran♂ Poison Point - 0, // Nidorino Poison Point - 0, // Nidoking Poison Point - 0, // Clefairy Cute Charm - 0, // Clefable Cute Charm - 0, // Vulpix Flash Fire - 0, // Ninetales Flash Fire - 0, // Jigglypuff Cute Charm - 0, // Wigglytuff Cute Charm - 0, // Zubat Inner Focus - 0, // Golbat Inner Focus - 0, // Oddish Chlorophyll - 0, // Gloom Chlorophyll - 0, // Vileplume Chlorophyll - 0, // Paras Effect Spore - 0, // Parasect Effect Spore - 0, // Venonat Compound Eyes - 0, // Venomoth Shield Dust - 1, // Diglett Sand Veil/Arena Trap - 1, // Dugtrio Sand Veil/Arena Trap - 0, // Meowth Pickup - 0, // Persian Limber - 1, // Psyduck Damp/Cloud Nine - 1, // Golduck Damp/Cloud Nine - 0, // Mankey Vital Spirit - 0, // Primeape Vital Spirit - 1, // Growlithe Intimidate/Flash Fire - 1, // Arcanine Intimidate/Flash Fire - 1, // Poliwag Water Absorb/Damp - 1, // Poliwhirl Water Absorb/Damp - 1, // Poliwrath Water Absorb/Damp - 1, // Abra Synchronize/Inner Focus - 1, // Kadabra Synchronize/Inner Focus - 1, // Alakazam Synchronize/Inner Focus - 0, // Machop Guts - 0, // Machoke Guts - 0, // Machamp Guts - 0, // Bellsprout Chlorophyll - 0, // Weepinbell Chlorophyll - 0, // Victreebel Chlorophyll - 1, // Tentacool Clear Body/Liquid Ooze - 1, // Tentacruel Clear Body/Liquid Ooze - 1, // Geodude Rock Head/Sturdy - 1, // Graveler Rock Head/Sturdy - 1, // Golem Rock Head/Sturdy - 1, // Ponyta Run Away/Flash Fire - 1, // Rapidash Run Away/Flash Fire - 1, // Slowpoke Oblivious/Own Tempo - 1, // Slowbro Oblivious/Own Tempo - 1, // Magnemite Magnet Pull/Sturdy - 1, // Magneton Magnet Pull/Sturdy - 1, // Farfetch'd Keen Eye/Inner Focus - 1, // Doduo Run Away/Early Bird - 1, // Dodrio Run Away/Early Bird - 0, // Seel Thick Fat - 0, // Dewgong Thick Fat - 1, // Grimer Stench/Sticky Hold - 1, // Muk Stench/Sticky Hold - 0, // Shellder Shell Armor - 0, // Cloyster Shell Armor - 0, // Gastly Levitate - 0, // Haunter Levitate - 0, // Gengar Cursed Body - 1, // Onix Rock Head/Sturdy - 0, // Drowzee Insomnia - 0, // Hypno Insomnia - 1, // Krabby Hyper Cutter/Shell Armor - 1, // Kingler Hyper Cutter/Shell Armor - 1, // Voltorb Soundproof/Static - 1, // Electrode Soundproof/Static - 0, // Exeggcute Chlorophyll - 0, // Exeggutor Chlorophyll - 1, // Cubone Rock Head/Lightning Rod - 1, // Marowak Rock Head/Lightning Rod - 0, // Hitmonlee Limber - 0, // Hitmonchan Keen Eye - 1, // Lickitung Own Tempo/Oblivious - 0, // Koffing Levitate - 0, // Weezing Levitate - 1, // Rhyhorn Lightning Rod/Rock Head - 1, // Rhydon Lightning Rod/Rock Head - 1, // Chansey Natural Cure/Serene Grace - 0, // Tangela Chlorophyll - 0, // Kangaskhan Early Bird - 0, // Horsea Swift Swim - 0, // Seadra Poison Point - 1, // Goldeen Swift Swim/Water Veil - 1, // Seaking Swift Swim/Water Veil - 1, // Staryu Illuminate/Natural Cure - 1, // Starmie Illuminate/Natural Cure - 0, // Mr. Mime Soundproof - 0, // Scyther Swarm - 0, // Jynx Oblivious - 0, // Electabuzz Static - 0, // Magmar Flame Body - 0, // Pinsir Hyper Cutter - 0, // Tauros Intimidate - 0, // Magikarp Swift Swim - 0, // Gyarados Intimidate - 1, // Lapras Water Absorb/Shell Armor - 0, // Ditto Limber - 0, // Eevee Run Away - 0, // Vaporeon Water Absorb - 0, // Jolteon Volt Absorb - 0, // Flareon Flash Fire - 0, // Porygon Trace - 1, // Omanyte Swift Swim/Shell Armor - 1, // Omastar Swift Swim/Shell Armor - 1, // Kabuto Swift Swim/Battle Armor - 1, // Kabutops Swift Swim/Battle Armor - 1, // Aerodactyl Rock Head/Pressure - 1, // Snorlax Immunity/Thick Fat - 0, // Articuno Pressure - 0, // Zapdos Pressure - 0, // Moltres Pressure - 0, // Dratini Shed Skin - 0, // Dragonair Shed Skin - 0, // Dragonite Inner Focus - 0, // Mewtwo Pressure - 0, // Mew Synchronize - 0, // Chikorita Overgrow - 0, // Bayleef Overgrow - 0, // Meganium Overgrow - 0, // Cyndaquil Blaze - 0, // Quilava Blaze - 0, // Typhlosion Blaze - 0, // Totodile Torrent - 0, // Croconaw Torrent - 0, // Feraligatr Torrent - 1, // Sentret Run Away/Keen Eye - 1, // Furret Run Away/Keen Eye - 1, // Hoothoot Insomnia/Keen Eye - 1, // Noctowl Insomnia/Keen Eye - 1, // Ledyba Swarm/Early Bird - 1, // Ledian Swarm/Early Bird - 1, // Spinarak Swarm/Insomnia - 1, // Ariados Swarm/Insomnia - 0, // Crobat Inner Focus - 1, // Chinchou Volt Absorb/Illuminate - 1, // Lanturn Volt Absorb/Illuminate - 0, // Pichu Static - 0, // Cleffa Cute Charm - 0, // Igglybuff Cute Charm - 1, // Togepi Hustle/Serene Grace - 1, // Togetic Hustle/Serene Grace - 1, // Natu Synchronize/Early Bird - 1, // Xatu Synchronize/Early Bird - 0, // Mareep Static - 0, // Flaaffy Static - 0, // Ampharos Static - 0, // Bellossom Chlorophyll - 1, // Marill Thick Fat/Huge Power - 1, // Azumarill Thick Fat/Huge Power - 1, // Sudowoodo Sturdy/Rock Head - 1, // Politoed Water Absorb/Damp - 0, // Hoppip Chlorophyll - 0, // Skiploom Chlorophyll - 0, // Jumpluff Chlorophyll - 1, // Aipom Run Away/Pickup - 0, // Sunkern Chlorophyll - 0, // Sunflora Chlorophyll - 1, // Yanma Speed Boost/Compound Eyes - 1, // Wooper Damp/Water Absorb - 1, // Quagsire Damp/Water Absorb - 0, // Espeon Synchronize - 0, // Umbreon Synchronize - 0, // Murkrow Insomnia - 1, // Slowking Oblivious/Own Tempo - 0, // Misdreavus Levitate - 0, // Unown Levitate - 0, // Wobbuffet Shadow Tag - 1, // Girafarig Inner Focus/Early Bird - 0, // Pineco Sturdy - 0, // Forretress Sturdy - 1, // Dunsparce Serene Grace/Run Away - 1, // Gligar Hyper Cutter/Sand Veil - 1, // Steelix Rock Head/Sturdy - 1, // Snubbull Intimidate/Run Away - 0, // Granbull Intimidate - 1, // Qwilfish Poison Point/Swift Swim - 0, // Scizor Swarm - 0, // Shuckle Sturdy - 1, // Heracross Swarm/Guts - 1, // Sneasel Inner Focus/Keen Eye - 0, // Teddiursa Pickup - 0, // Ursaring Guts - 1, // Slugma Magma Armor/Flame Body - 1, // Magcargo Magma Armor/Flame Body - 0, // Swinub Oblivious - 0, // Piloswine Oblivious - 1, // Corsola Hustle/Natural Cure - 0, // Remoraid Hustle - 0, // Octillery Suction Cups - 1, // Delibird Vital Spirit/Hustle - 1, // Mantine Swift Swim/Water Absorb - 1, // Skarmory Keen Eye/Sturdy - 1, // Houndour Early Bird/Flash Fire - 1, // Houndoom Early Bird/Flash Fire - 0, // Kingdra Swift Swim - 0, // Phanpy Pickup - 0, // Donphan Sturdy - 0, // Porygon2 Trace - 0, // Stantler Intimidate - 0, // Smeargle Own Tempo - 0, // Tyrogue Guts - 0, // Hitmontop Intimidate - 0, // Smoochum Oblivious - 0, // Elekid Static - 0, // Magby Flame Body - 0, // Miltank Thick Fat - 1, // Blissey Natural Cure/Serene Grace - 0, // Raikou Pressure - 0, // Entei Pressure - 0, // Suicune Pressure - 0, // Larvitar Guts - 0, // Pupitar Shed Skin - 0, // Tyranitar Sand Stream - 0, // Lugia Pressure - 0, // Ho-Oh Pressure - 0, // Celebi Natural Cure - 0, // Treecko Overgrow - }; - const byte FIRST_MOVES[POKEMON_ARRAY_SIZE] = { - // Data obtained through PokeAPI - 0, // Offset the list to remove "off by one" errors - 0x21, // Bulbasaur (tackle) - 0x21, // Ivysaur (tackle) - 0x16, // Venusaur (vine-whip) - 0x0a, // Charmander (scratch) - 0x0a, // Charmeleon (scratch) - 0x0a, // Charizard (scratch) - 0x21, // Squirtle (tackle) - 0x21, // Wartortle (tackle) - 0x21, // Blastoise (tackle) - 0x21, // Caterpie (tackle) - 0x6a, // Metapod (harden) - 0x5d, // Butterfree (confusion) - 0x28, // Weedle (poison-sting) - 0x6a, // Kakuna (harden) - 0x1f, // Beedrill (fury-attack) - 0x21, // Pidgey (tackle) - 0x10, // Pidgeotto (gust) - 0x10, // Pidgeot (gust) - 0x21, // Rattata (tackle) - 0x21, // Raticate (tackle) - 0x2d, // Spearow (growl) - 0x1f, // Fearow (fury-attack) - 0x23, // Ekans (wrap) - 0x23, // Arbok (wrap) - 0x2d, // Pikachu (growl) - 0x27, // Raichu (tail-whip) - 0x0a, // Sandshrew (scratch) - 0x0a, // Sandslash (scratch) - 0x0a, // Nidoran-f (scratch) - 0x0a, // Nidorina (scratch) - 0x0a, // Nidoqueen (scratch) - 0x2b, // Nidoran-m (leer) - 0x2b, // Nidorino (leer) - 0x18, // Nidoking (double-kick) - 0x01, // Clefairy (pound) - 0x03, // Clefable (double-slap) - 0x34, // Vulpix (ember) - 0x34, // Ninetales (ember) - 0x2f, // Jigglypuff (sing) - 0x03, // Wigglytuff (double-slap) - 0x8d, // Zubat (leech-life) - 0x30, // Golbat (supersonic) - 0x47, // Oddish (absorb) - 0x47, // Gloom (absorb) - 0x47, // Vileplume (absorb) - 0x0a, // Paras (scratch) - 0x0a, // Parasect (scratch) - 0x21, // Venonat (tackle) - 0x21, // Venomoth (tackle) - 0x0a, // Diglett (scratch) - 0x0a, // Dugtrio (scratch) - 0x0a, // Meowth (scratch) - 0x0a, // Persian (scratch) - 0x0a, // Psyduck (scratch) - 0x0a, // Golduck (scratch) - 0x0a, // Mankey (scratch) - 0x0a, // Primeape (scratch) - 0x2c, // Growlithe (bite) - 0x2c, // Arcanine (bite) - 0x91, // Poliwag (bubble) - 0x37, // Poliwhirl (water-gun) - 0x03, // Poliwrath (double-slap) - 0x64, // Abra (teleport) - 0x5d, // Kadabra (confusion) - 0x5d, // Alakazam (confusion) - 0x2b, // Machop (leer) - 0x2b, // Machoke (leer) - 0x2b, // Machamp (leer) - 0x16, // Bellsprout (vine-whip) - 0x16, // Weepinbell (vine-whip) - 0x16, // Victreebel (vine-whip) - 0x28, // Tentacool (poison-sting) - 0x28, // Tentacruel (poison-sting) - 0x21, // Geodude (tackle) - 0x21, // Graveler (tackle) - 0x21, // Golem (tackle) - 0x21, // Ponyta (tackle) - 0x21, // Rapidash (tackle) - 0x21, // Slowpoke (tackle) - 0x21, // Slowbro (tackle) - 0x21, // Magnemite (tackle) - 0x21, // Magneton (tackle) - 0x40, // Farfetchd (peck) - 0x2d, // Doduo (growl) - 0x1f, // Dodrio (fury-attack) - 0x1d, // Seel (headbutt) - 0x1d, // Dewgong (headbutt) - 0x01, // Grimer (pound) - 0x01, // Muk (pound) - 0x21, // Shellder (tackle) - 0x30, // Cloyster (supersonic) - 0x5f, // Gastly (hypnosis) - 0x5f, // Haunter (hypnosis) - 0x5f, // Gengar (hypnosis) - 0x21, // Onix (tackle) - 0x01, // Drowzee (pound) - 0x01, // Hypno (pound) - 0x91, // Krabby (bubble) - 0x0b, // Kingler (vice-grip) - 0x21, // Voltorb (tackle) - 0x21, // Electrode (tackle) - 0x5f, // Exeggcute (hypnosis) - 0x5d, // Exeggutor (confusion) - 0x2d, // Cubone (growl) - 0x1d, // Marowak (headbutt) - 0x18, // Hitmonlee (double-kick) - 0x04, // Hitmonchan (comet-punch) - 0x7a, // Lickitung (lick) - 0x21, // Koffing (tackle) - 0x21, // Weezing (tackle) - 0x1e, // Rhyhorn (horn-attack) - 0x17, // Rhydon (stomp) - 0x01, // Chansey (pound) - 0x84, // Tangela (constrict) - 0x04, // Kangaskhan (comet-punch) - 0x91, // Horsea (bubble) - 0x2b, // Seadra (leer) - 0x27, // Goldeen (tail-whip) - 0x27, // Seaking (tail-whip) - 0x21, // Staryu (tackle) - 0x37, // Starmie (water-gun) - 0x70, // Mr-mime (barrier) - 0x2b, // Scyther (leer) - 0x01, // Jynx (pound) - 0x09, // Electabuzz (thunder-punch) - 0x07, // Magmar (fire-punch) - 0x0b, // Pinsir (vice-grip) - 0x21, // Tauros (tackle) - 0x96, // Magikarp (splash) - 0x25, // Gyarados (thrash) - 0x2d, // Lapras (growl) - 0x90, // Ditto (transform) - 0x21, // Eevee (tackle) - 0x21, // Vaporeon (tackle) - 0x21, // Jolteon (tackle) - 0x21, // Flareon (tackle) - 0x21, // Porygon (tackle) - 0x6e, // Omanyte (withdraw) - 0x2c, // Omastar (bite) - 0x0a, // Kabuto (scratch) - 0x0a, // Kabutops (scratch) - 0x11, // Aerodactyl (wing-attack) - 0x21, // Snorlax (tackle) - 0x10, // Articuno (gust) - 0x40, // Zapdos (peck) - 0x11, // Moltres (wing-attack) - 0x23, // Dratini (wrap) - 0x23, // Dragonair (wrap) - 0x23, // Dragonite (wrap) - 0x32, // Mewtwo (disable) - 0x01, // Mew (pound) - 0x21, // Chikorita (tackle) - 0x21, // Bayleef (tackle) - 0x21, // Meganium (tackle) - 0x21, // Cyndaquil (tackle) - 0x21, // Quilava (tackle) - 0x21, // Typhlosion (tackle) - 0x0a, // Totodile (scratch) - 0x0a, // Croconaw (scratch) - 0x0a, // Feraligatr (scratch) - 0x0a, // Sentret (scratch) - 0x0a, // Furret (scratch) - 0x21, // Hoothoot (tackle) - 0x21, // Noctowl (tackle) - 0x21, // Ledyba (tackle) - 0x21, // Ledian (tackle) - 0x28, // Spinarak (poison-sting) - 0x28, // Ariados (poison-sting) - 0x30, // Crobat (supersonic) - 0x56, // Chinchou (thunder-wave) - 0x30, // Lanturn (supersonic) - 0x54, // Pichu (thunder-shock) - 0x01, // Cleffa (pound) - 0x2f, // Igglybuff (sing) - 0x2d, // Togepi (growl) - 0x2d, // Togetic (growl) - 0x2b, // Natu (leer) - 0x2b, // Xatu (leer) - 0x21, // Mareep (tackle) - 0x21, // Flaaffy (tackle) - 0x21, // Ampharos (tackle) - 0x47, // Bellossom (absorb) - 0x21, // Marill (tackle) - 0x21, // Azumarill (tackle) - 0x58, // Sudowoodo (rock-throw) - 0x03, // Politoed (double-slap) - 0x96, // Hoppip (splash) - 0x21, // Skiploom (tackle) - 0x21, // Jumpluff (tackle) - 0x0a, // Aipom (scratch) - 0x47, // Sunkern (absorb) - 0x01, // Sunflora (pound) - 0x21, // Yanma (tackle) - 0x27, // Wooper (tail-whip) - 0x27, // Quagsire (tail-whip) - 0x21, // Espeon (tackle) - 0x21, // Umbreon (tackle) - 0x40, // Murkrow (peck) - 0x21, // Slowking (tackle) - 0x2d, // Misdreavus (growl) - 0xed, // Unown (hidden-power) - 0x44, // Wobbuffet (counter) - 0x21, // Girafarig (tackle) - 0x21, // Pineco (tackle) - 0x21, // Forretress (tackle) - 0x63, // Dunsparce (rage) - 0x28, // Gligar (poison-sting) - 0x21, // Steelix (tackle) - 0x21, // Snubbull (tackle) - 0x21, // Granbull (tackle) - 0x21, // Qwilfish (tackle) - 0x2b, // Scizor (leer) - 0x6e, // Shuckle (withdraw) - 0x21, // Heracross (tackle) - 0x0a, // Sneasel (scratch) - 0x0a, // Teddiursa (scratch) - 0x0a, // Ursaring (scratch) - 0x7b, // Slugma (smog) - 0x34, // Magcargo (ember) - 0x21, // Swinub (tackle) - 0x1e, // Piloswine (horn-attack) - 0x21, // Corsola (tackle) - 0x37, // Remoraid (water-gun) - 0x37, // Octillery (water-gun) - 0xd9, // Delibird (present) - 0x21, // Mantine (tackle) - 0x2b, // Skarmory (leer) - 0x2b, // Houndour (leer) - 0x2b, // Houndoom (leer) - 0x2b, // Kingdra (leer) - 0x21, // Phanpy (tackle) - 0x1e, // Donphan (horn-attack) - 0x21, // Porygon2 (tackle) - 0x21, // Stantler (tackle) - 0xa6, // Smeargle (sketch) - 0x21, // Tyrogue (tackle) - 0x1b, // Hitmontop (rolling-kick) - 0x01, // Smoochum (pound) - 0x2b, // Elekid (leer) - 0x34, // Magby (ember) - 0x21, // Miltank (tackle) - 0x01, // Blissey (pound) - 0x2b, // Raikou (leer) - 0x2b, // Entei (leer) - 0x2b, // Suicune (leer) - 0x2b, // Larvitar (leer) - 0x2b, // Pupitar (leer) - 0x2b, // Tyranitar (leer) - 0x12, // Lugia (whirlwind) - 0x12, // Ho-oh (whirlwind) - 0x49, // Celebi (leech-seed) - 0x01, // Treecko (pound) - }; - const u8 POWER_POINTS[252]{ - 0, // Offset the list to remove "off by one" errors - 35, // Pound - 25, // Karate-chop - 10, // Double-slap - 15, // Comet-punch - 20, // Mega-punch - 20, // Pay-day - 15, // Fire-punch - 15, // Ice-punch - 15, // Thunder-punch - 35, // Scratch - 30, // Vice-grip - 5, // Guillotine - 10, // Razor-wind - 20, // Swords-dance - 30, // Cut - 35, // Gust - 35, // Wing-attack - 20, // Whirlwind - 15, // Fly - 20, // Bind - 20, // Slam - 25, // Vine-whip - 20, // Stomp - 30, // Double-kick - 5, // Mega-kick - 10, // Jump-kick - 15, // Rolling-kick - 15, // Sand-attack - 15, // Headbutt - 25, // Horn-attack - 20, // Fury-attack - 5, // Horn-drill - 35, // Tackle - 15, // Body-slam - 20, // Wrap - 20, // Take-down - 10, // Thrash - 15, // Double-edge - 30, // Tail-whip - 35, // Poison-sting - 20, // Twineedle - 20, // Pin-missile - 30, // Leer - 25, // Bite - 40, // Growl - 20, // Roar - 15, // Sing - 20, // Supersonic - 20, // Sonic-boom - 20, // Disable - 30, // Acid - 25, // Ember - 15, // Flamethrower - 30, // Mist - 25, // Water-gun - 5, // Hydro-pump - 15, // Surf - 10, // Ice-beam - 5, // Blizzard - 20, // Psybeam - 20, // Bubble-beam - 20, // Aurora-beam - 5, // Hyper-beam - 35, // Peck - 20, // Drill-peck - 20, // Submission - 20, // Low-kick - 20, // Counter - 20, // Seismic-toss - 15, // Strength - 25, // Absorb - 15, // Mega-drain - 10, // Leech-seed - 20, // Growth - 25, // Razor-leaf - 10, // Solar-beam - 35, // Poison-powder - 30, // Stun-spore - 15, // Sleep-powder - 10, // Petal-dance - 40, // String-shot - 10, // Dragon-rage - 15, // Fire-spin - 30, // Thunder-shock - 15, // Thunderbolt - 20, // Thunder-wave - 10, // Thunder - 15, // Rock-throw - 10, // Earthquake - 5, // Fissure - 10, // Dig - 10, // Toxic - 25, // Confusion - 10, // Psychic - 20, // Hypnosis - 40, // Meditate - 30, // Agility - 30, // Quick-attack - 20, // Rage - 20, // Teleport - 15, // Night-shade - 10, // Mimic - 40, // Screech - 15, // Double-team - 10, // Recover - 30, // Harden - 10, // Minimize - 20, // Smokescreen - 10, // Confuse-ray - 40, // Withdraw - 40, // Defense-curl - 20, // Barrier - 30, // Light-screen - 30, // Haze - 20, // Reflect - 30, // Focus-energy - 10, // Bide - 10, // Metronome - 20, // Mirror-move - 5, // Self-destruct - 10, // Egg-bomb - 30, // Lick - 20, // Smog - 20, // Sludge - 20, // Bone-club - 5, // Fire-blast - 15, // Waterfall - 15, // Clamp - 20, // Swift - 10, // Skull-bash - 15, // Spike-cannon - 35, // Constrict - 20, // Amnesia - 15, // Kinesis - 10, // Soft-boiled - 10, // High-jump-kick - 30, // Glare - 15, // Dream-eater - 40, // Poison-gas - 20, // Barrage - 10, // Leech-life - 10, // Lovely-kiss - 5, // Sky-attack - 10, // Transform - 30, // Bubble - 10, // Dizzy-punch - 15, // Spore - 20, // Flash - 15, // Psywave - 40, // Splash - 20, // Acid-armor - 10, // Crabhammer - 5, // Explosion - 15, // Fury-swipes - 10, // Bonemerang - 10, // Rest - 10, // Rock-slide - 15, // Hyper-fang - 30, // Sharpen - 30, // Conversion - 10, // Tri-attack - 10, // Super-fang - 20, // Slash - 10, // Substitute - 1, // Struggle - 1, // Sketch - 10, // Triple-kick - 25, // Thief - 10, // Spider-web - 5, // Mind-reader - 15, // Nightmare - 25, // Flame-wheel - 15, // Snore - 10, // Curse - 15, // Flail - 30, // Conversion-2 - 5, // Aeroblast - 40, // Cotton-spore - 15, // Reversal - 10, // Spite - 25, // Powder-snow - 10, // Protect - 30, // Mach-punch - 10, // Scary-face - 20, // Feint-attack - 10, // Sweet-kiss - 10, // Belly-drum - 10, // Sludge-bomb - 10, // Mud-slap - 10, // Octazooka - 20, // Spikes - 5, // Zap-cannon - 40, // Foresight - 5, // Destiny-bond - 5, // Perish-song - 15, // Icy-wind - 5, // Detect - 10, // Bone-rush - 5, // Lock-on - 10, // Outrage - 10, // Sandstorm - 10, // Giga-drain - 10, // Endure - 20, // Charm - 20, // Rollout - 40, // False-swipe - 15, // Swagger - 10, // Milk-drink - 20, // Spark - 20, // Fury-cutter - 25, // Steel-wing - 5, // Mean-look - 15, // Attract - 10, // Sleep-talk - 5, // Heal-bell - 20, // Return - 15, // Present - 20, // Frustration - 25, // Safeguard - 20, // Pain-split - 5, // Sacred-fire - 30, // Magnitude - 5, // Dynamic-punch - 10, // Megahorn - 20, // Dragon-breath - 40, // Baton-pass - 5, // Encore - 20, // Pursuit - 40, // Rapid-spin - 20, // Sweet-scent - 15, // Iron-tail - 35, // Metal-claw - 10, // Vital-throw - 5, // Morning-sun - 5, // Synthesis - 5, // Moonlight - 15, // Hidden-power - 5, // Cross-chop - 20, // Twister - 5, // Rain-dance - 5, // Sunny-day - 15, // Crunch - 20, // Mirror-coat - 10, // Psych-up - 5, // Extreme-speed - 5, // Ancient-power - 15, // Shadow-ball - 10, // Future-sight - 15, // Rock-smash - 15, // Whirlpool - 10, // Beat-up - }; - const byte EVENT_PKMN[8][80]{ - // Events taken from the PKHeX Event Database. - // Sanitize 4 bytes at 0x00, 2 bytes at 0x1C, the highest bit at 0x46 and 4 bytes at 0x48 - - // Japanese Hadō (Aura) Mew - {0x00, 0x00, 0x00, 0x00, 0x1C, 0xC6, 0x00, 0x00, 0x70, 0x85, 0x53, 0xFF, 0x08, 0x70, 0x01, 0x34, 0x01, 0x31, 0x01, 0x02, 0x6A, 0x95, 0x53, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x01, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0A, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, - // English Aura Mew - {0x00, 0x00, 0x00, 0x00, 0x6E, 0x4E, 0x00, 0x00, 0xC7, 0xBF, 0xD1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0xBB, 0xE9, 0xE6, 0xD5, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x01, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0A, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, - // French Aura Mew - {0x00, 0x00, 0x00, 0x00, 0x6E, 0x4E, 0x00, 0x00, 0xC7, 0xBF, 0xD1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0xBB, 0xE9, 0xE6, 0xD5, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x01, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0A, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, - // Italian Aura Mew - {0x00, 0x00, 0x00, 0x00, 0x6E, 0x4E, 0x00, 0x00, 0xC7, 0xBF, 0xD1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0xBB, 0xE9, 0xE6, 0xD5, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x01, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0A, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, - // German Aura Mew - {0x00, 0x00, 0x00, 0x00, 0x6E, 0x4E, 0x00, 0x00, 0xC7, 0xBF, 0xD1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0xBB, 0xE9, 0xE6, 0xD5, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x01, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0A, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, - // Spanish Aura Mew - {0x00, 0x00, 0x00, 0x00, 0x6E, 0x4E, 0x00, 0x00, 0xC7, 0xBF, 0xD1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0xBB, 0xE9, 0xE6, 0xD5, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x01, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0A, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, - // Mitsurin Celebi - {0x00, 0x00, 0x00, 0x00, 0x30, 0xED, 0x00, 0x00, 0x5E, 0x7A, 0x97, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x70, 0x62, 0x78, 0x7E, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x49, 0x00, 0x69, 0x00, 0xD7, 0x00, 0xDB, 0x00, 0x0A, 0x14, 0x05, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0A, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - // 10th Anniversary Celebi - {0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xBD, 0xBF, 0xC6, 0xBF, 0xBC, 0xC3, 0xFF, 0x34, 0x01, 0x31, 0x02, 0x02, 0xA2, 0xA1, 0x00, 0xBB, 0xC8, 0xC3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x00, 0x00, 0x80, 0x43, 0x05, 0x00, 0x00, 0x64, 0x00, 0x00, 0xF6, 0x00, 0xF8, 0x00, 0xE2, 0x00, 0xC3, 0x00, 0x05, 0x0F, 0x28, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x46, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - }; - const u8 TYPES[POKEMON_ARRAY_SIZE][2]{ - {0x0, 0x0}, // Missingno is ???/??? - {0xc, 0x3}, // Bulbasaur is grass/poison - {0xc, 0x3}, // Ivysaur is grass/poison - {0xc, 0x3}, // Venusaur is grass/poison - {0xa, 0xa}, // Charmander is fire/fire - {0xa, 0xa}, // Charmeleon is fire/fire - {0xa, 0x2}, // Charizard is fire/flying - {0xb, 0xb}, // Squirtle is water/water - {0xb, 0xb}, // Wartortle is water/water - {0xb, 0xb}, // Blastoise is water/water - {0x6, 0x6}, // Caterpie is bug/bug - {0x6, 0x6}, // Metapod is bug/bug - {0x6, 0x2}, // Butterfree is bug/flying - {0x6, 0x3}, // Weedle is bug/poison - {0x6, 0x3}, // Kakuna is bug/poison - {0x6, 0x3}, // Beedrill is bug/poison - {0x0, 0x2}, // Pidgey is normal/flying - {0x0, 0x2}, // Pidgeotto is normal/flying - {0x0, 0x2}, // Pidgeot is normal/flying - {0x0, 0x0}, // Rattata is normal/normal - {0x0, 0x0}, // Raticate is normal/normal - {0x0, 0x2}, // Spearow is normal/flying - {0x0, 0x2}, // Fearow is normal/flying - {0x3, 0x3}, // Ekans is poison/poison - {0x3, 0x3}, // Arbok is poison/poison - {0xd, 0xd}, // Pikachu is electric/electric - {0xd, 0xd}, // Raichu is electric/electric - {0x4, 0x4}, // Sandshrew is ground/ground - {0x4, 0x4}, // Sandslash is ground/ground - {0x3, 0x3}, // Nidoran-f is poison/poison - {0x3, 0x3}, // Nidorina is poison/poison - {0x3, 0x4}, // Nidoqueen is poison/ground - {0x3, 0x3}, // Nidoran-m is poison/poison - {0x3, 0x3}, // Nidorino is poison/poison - {0x3, 0x4}, // Nidoking is poison/ground - {0x0, 0x0}, // Clefairy is normal/normal - {0x0, 0x0}, // Clefable is normal/normal - {0xa, 0xa}, // Vulpix is fire/fire - {0xa, 0xa}, // Ninetales is fire/fire - {0x0, 0x0}, // Jigglypuff is normal/normal - {0x0, 0x0}, // Wigglytuff is normal/normal - {0x3, 0x2}, // Zubat is poison/flying - {0x3, 0x2}, // Golbat is poison/flying - {0xc, 0x3}, // Oddish is grass/poison - {0xc, 0x3}, // Gloom is grass/poison - {0xc, 0x3}, // Vileplume is grass/poison - {0x6, 0xc}, // Paras is bug/grass - {0x6, 0xc}, // Parasect is bug/grass - {0x6, 0x3}, // Venonat is bug/poison - {0x6, 0x3}, // Venomoth is bug/poison - {0x4, 0x4}, // Diglett is ground/ground - {0x4, 0x4}, // Dugtrio is ground/ground - {0x0, 0x0}, // Meowth is normal/normal - {0x0, 0x0}, // Persian is normal/normal - {0xb, 0xb}, // Psyduck is water/water - {0xb, 0xb}, // Golduck is water/water - {0x1, 0x1}, // Mankey is fighting/fighting - {0x1, 0x1}, // Primeape is fighting/fighting - {0xa, 0xa}, // Growlithe is fire/fire - {0xa, 0xa}, // Arcanine is fire/fire - {0xb, 0xb}, // Poliwag is water/water - {0xb, 0xb}, // Poliwhirl is water/water - {0xb, 0x1}, // Poliwrath is water/fighting - {0xe, 0xe}, // Abra is psychic/psychic - {0xe, 0xe}, // Kadabra is psychic/psychic - {0xe, 0xe}, // Alakazam is psychic/psychic - {0x1, 0x1}, // Machop is fighting/fighting - {0x1, 0x1}, // Machoke is fighting/fighting - {0x1, 0x1}, // Machamp is fighting/fighting - {0xc, 0x3}, // Bellsprout is grass/poison - {0xc, 0x3}, // Weepinbell is grass/poison - {0xc, 0x3}, // Victreebel is grass/poison - {0xb, 0x3}, // Tentacool is water/poison - {0xb, 0x3}, // Tentacruel is water/poison - {0x5, 0x4}, // Geodude is rock/ground - {0x5, 0x4}, // Graveler is rock/ground - {0x5, 0x4}, // Golem is rock/ground - {0xa, 0xa}, // Ponyta is fire/fire - {0xa, 0xa}, // Rapidash is fire/fire - {0xb, 0xe}, // Slowpoke is water/psychic - {0xb, 0xe}, // Slowbro is water/psychic - {0xd, 0x8}, // Magnemite is electric/steel - {0xd, 0x8}, // Magneton is electric/steel - {0x0, 0x2}, // Farfetchd is normal/flying - {0x0, 0x2}, // Doduo is normal/flying - {0x0, 0x2}, // Dodrio is normal/flying - {0xb, 0xb}, // Seel is water/water - {0xb, 0xf}, // Dewgong is water/ice - {0x3, 0x3}, // Grimer is poison/poison - {0x3, 0x3}, // Muk is poison/poison - {0xb, 0xb}, // Shellder is water/water - {0xb, 0xf}, // Cloyster is water/ice - {0x7, 0x3}, // Gastly is ghost/poison - {0x7, 0x3}, // Haunter is ghost/poison - {0x7, 0x3}, // Gengar is ghost/poison - {0x5, 0x4}, // Onix is rock/ground - {0xe, 0xe}, // Drowzee is psychic/psychic - {0xe, 0xe}, // Hypno is psychic/psychic - {0xb, 0xb}, // Krabby is water/water - {0xb, 0xb}, // Kingler is water/water - {0xd, 0xd}, // Voltorb is electric/electric - {0xd, 0xd}, // Electrode is electric/electric - {0xc, 0xe}, // Exeggcute is grass/psychic - {0xc, 0xe}, // Exeggutor is grass/psychic - {0x4, 0x4}, // Cubone is ground/ground - {0x4, 0x4}, // Marowak is ground/ground - {0x1, 0x1}, // Hitmonlee is fighting/fighting - {0x1, 0x1}, // Hitmonchan is fighting/fighting - {0x0, 0x0}, // Lickitung is normal/normal - {0x3, 0x3}, // Koffing is poison/poison - {0x3, 0x3}, // Weezing is poison/poison - {0x4, 0x5}, // Rhyhorn is ground/rock - {0x4, 0x5}, // Rhydon is ground/rock - {0x0, 0x0}, // Chansey is normal/normal - {0xc, 0xc}, // Tangela is grass/grass - {0x0, 0x0}, // Kangaskhan is normal/normal - {0xb, 0xb}, // Horsea is water/water - {0xb, 0xb}, // Seadra is water/water - {0xb, 0xb}, // Goldeen is water/water - {0xb, 0xb}, // Seaking is water/water - {0xb, 0xb}, // Staryu is water/water - {0xb, 0xe}, // Starmie is water/psychic - {0xe, 0xe}, // Mr-mime is psychic/psychic - {0x6, 0x2}, // Scyther is bug/flying - {0xf, 0xe}, // Jynx is ice/psychic - {0xd, 0xd}, // Electabuzz is electric/electric - {0xa, 0xa}, // Magmar is fire/fire - {0x6, 0x6}, // Pinsir is bug/bug - {0x0, 0x0}, // Tauros is normal/normal - {0xb, 0xb}, // Magikarp is water/water - {0xb, 0x2}, // Gyarados is water/flying - {0xb, 0xf}, // Lapras is water/ice - {0x0, 0x0}, // Ditto is normal/normal - {0x0, 0x0}, // Eevee is normal/normal - {0xb, 0xb}, // Vaporeon is water/water - {0xd, 0xd}, // Jolteon is electric/electric - {0xa, 0xa}, // Flareon is fire/fire - {0x0, 0x0}, // Porygon is normal/normal - {0x5, 0xb}, // Omanyte is rock/water - {0x5, 0xb}, // Omastar is rock/water - {0x5, 0xb}, // Kabuto is rock/water - {0x5, 0xb}, // Kabutops is rock/water - {0x5, 0x2}, // Aerodactyl is rock/flying - {0x0, 0x0}, // Snorlax is normal/normal - {0xf, 0x2}, // Articuno is ice/flying - {0xd, 0x2}, // Zapdos is electric/flying - {0xa, 0x2}, // Moltres is fire/flying - {0x10, 0x10}, // Dratini is dragon/dragon - {0x10, 0x10}, // Dragonair is dragon/dragon - {0x10, 0x2}, // Dragonite is dragon/flying - {0xe, 0xe}, // Mewtwo is psychic/psychic - {0xe, 0xe}, // Mew is psychic/psychic - {0xc, 0xc}, // Chikorita is grass/grass - {0xc, 0xc}, // Bayleef is grass/grass - {0xc, 0xc}, // Meganium is grass/grass - {0xa, 0xa}, // Cyndaquil is fire/fire - {0xa, 0xa}, // Quilava is fire/fire - {0xa, 0xa}, // Typhlosion is fire/fire - {0xb, 0xb}, // Totodile is water/water - {0xb, 0xb}, // Croconaw is water/water - {0xb, 0xb}, // Feraligatr is water/water - {0x0, 0x0}, // Sentret is normal/normal - {0x0, 0x0}, // Furret is normal/normal - {0x0, 0x2}, // Hoothoot is normal/flying - {0x0, 0x2}, // Noctowl is normal/flying - {0x6, 0x2}, // Ledyba is bug/flying - {0x6, 0x2}, // Ledian is bug/flying - {0x6, 0x3}, // Spinarak is bug/poison - {0x6, 0x3}, // Ariados is bug/poison - {0x3, 0x2}, // Crobat is poison/flying - {0xb, 0xd}, // Chinchou is water/electric - {0xb, 0xd}, // Lanturn is water/electric - {0xd, 0xd}, // Pichu is electric/electric - {0x0, 0x0}, // Cleffa is normal/normal - {0x0, 0x0}, // Igglybuff is normal/normal - {0x0, 0x0}, // Togepi is normal/normal - {0x0, 0x2}, // Togetic is normal/flying - {0xe, 0x2}, // Natu is psychic/flying - {0xe, 0x2}, // Xatu is psychic/flying - {0xd, 0xd}, // Mareep is electric/electric - {0xd, 0xd}, // Flaaffy is electric/electric - {0xd, 0xd}, // Ampharos is electric/electric - {0xc, 0xc}, // Bellossom is grass/grass - {0xb, 0xb}, // Marill is water/water - {0xb, 0xb}, // Azumarill is water/water - {0x5, 0x5}, // Sudowoodo is rock/rock - {0xb, 0xb}, // Politoed is water/water - {0xc, 0x2}, // Hoppip is grass/flying - {0xc, 0x2}, // Skiploom is grass/flying - {0xc, 0x2}, // Jumpluff is grass/flying - {0x0, 0x0}, // Aipom is normal/normal - {0xc, 0xc}, // Sunkern is grass/grass - {0xc, 0xc}, // Sunflora is grass/grass - {0x6, 0x2}, // Yanma is bug/flying - {0xb, 0x4}, // Wooper is water/ground - {0xb, 0x4}, // Quagsire is water/ground - {0xe, 0xe}, // Espeon is psychic/psychic - {0x10, 0x10}, // Umbreon is dark/dark - {0x10, 0x2}, // Murkrow is dark/flying - {0xb, 0xe}, // Slowking is water/psychic - {0x7, 0x7}, // Misdreavus is ghost/ghost - {0xe, 0xe}, // Unown is psychic/psychic - {0xe, 0xe}, // Wobbuffet is psychic/psychic - {0x0, 0xe}, // Girafarig is normal/psychic - {0x6, 0x6}, // Pineco is bug/bug - {0x6, 0x8}, // Forretress is bug/steel - {0x0, 0x0}, // Dunsparce is normal/normal - {0x4, 0x2}, // Gligar is ground/flying - {0x8, 0x4}, // Steelix is steel/ground - {0x0, 0x0}, // Snubbull is normal/normal - {0x0, 0x0}, // Granbull is normal/normal - {0xb, 0x3}, // Qwilfish is water/poison - {0x6, 0x8}, // Scizor is bug/steel - {0x6, 0x5}, // Shuckle is bug/rock - {0x6, 0x1}, // Heracross is bug/fighting - {0x10, 0xf}, // Sneasel is dark/ice - {0x0, 0x0}, // Teddiursa is normal/normal - {0x0, 0x0}, // Ursaring is normal/normal - {0xa, 0xa}, // Slugma is fire/fire - {0xa, 0x5}, // Magcargo is fire/rock - {0xf, 0x4}, // Swinub is ice/ground - {0xf, 0x4}, // Piloswine is ice/ground - {0xb, 0x5}, // Corsola is water/rock - {0xb, 0xb}, // Remoraid is water/water - {0xb, 0xb}, // Octillery is water/water - {0xf, 0x2}, // Delibird is ice/flying - {0xb, 0x2}, // Mantine is water/flying - {0x8, 0x2}, // Skarmory is steel/flying - {0x10, 0xa}, // Houndour is dark/fire - {0x10, 0xa}, // Houndoom is dark/fire - {0xb, 0x10}, // Kingdra is water/dragon - {0x4, 0x4}, // Phanpy is ground/ground - {0x4, 0x4}, // Donphan is ground/ground - {0x0, 0x0}, // Porygon2 is normal/normal - {0x0, 0x0}, // Stantler is normal/normal - {0x0, 0x0}, // Smeargle is normal/normal - {0x1, 0x1}, // Tyrogue is fighting/fighting - {0x1, 0x1}, // Hitmontop is fighting/fighting - {0xf, 0xe}, // Smoochum is ice/psychic - {0xd, 0xd}, // Elekid is electric/electric - {0xa, 0xa}, // Magby is fire/fire - {0x0, 0x0}, // Miltank is normal/normal - {0x0, 0x0}, // Blissey is normal/normal - {0xd, 0xd}, // Raikou is electric/electric - {0xa, 0xa}, // Entei is fire/fire - {0xb, 0xb}, // Suicune is water/water - {0x5, 0x4}, // Larvitar is rock/ground - {0x5, 0x4}, // Pupitar is rock/ground - {0x5, 0x10}, // Tyranitar is rock/dark - {0xe, 0x2}, // Lugia is psychic/flying - {0xa, 0x2}, // Ho-oh is fire/flying - {0xe, 0xc}, // Celebi is psychic/grass - {0xc, 0xc}, // Treecko is grass/grass - }; - -#endif - u16 input_charset[256]; - u16 gen3_charset[256]; - PokemonTables(); - - void load_exp_groups(); - void load_gender_ratios(); - void load_num_abilities(); - void load_first_moves(); - void load_power_points(); - void load_event_pkmn(); - void load_types(); - void load_input_charset(byte gen, Language lang); - void load_gen3_charset(Language lang); - - u32 get_max_exp(int index_num); - u8 get_gender_threshold(int index_num, bool is_gen_3); - bool get_num_abilities(int index_num); - bool can_learn_move(int pkmn_index, int move_index); - byte get_earliest_move(int index_num); - byte get_gen_3_char(u16 input_char); -}; - -/** - * Loads the charset for and into - */ -void load_localized_charset(u16 *output_char_array, byte gen, Language lang); -byte get_char_from_charset(const u16 *charset, u16 input_char); - -#endif \ No newline at end of file diff --git a/include/pccs/typeDefs.h b/include/pccs/typeDefs.h deleted file mode 100644 index 4b4c482..0000000 --- a/include/pccs/typeDefs.h +++ /dev/null @@ -1,671 +0,0 @@ -#ifndef TYPEDEFS_H -#define TYPEDEFS_H - -#include "pccs_settings.h" - -#if ON_GBA -#include -#else -typedef unsigned char u8, byte, uchar, echar; -typedef unsigned short u16, hword, ushort, eshort; -typedef unsigned int u32, word, uint, eint; -typedef unsigned long long u64; - -typedef signed char s8; -typedef signed short s16; -typedef signed int s32; -typedef signed long long s64; -#endif - -// byte offset, data length (in bits), and bit offset -struct DataVarInfo -{ - int byteOffset; // The offset of the value - int dataLength; // The length of the data in bits - int bitOffset; // The offset of where the bits are in the array -}; - -enum Stat -{ - HP, - ATTACK, - DEFENSE, - SPEED, - SPECIAL_ATTACK, - SPECIAL_DEFENSE, - SPECIAL = SPECIAL_ATTACK, -}; - -enum Condition -{ - COOLNESS, - BEAUTY, - CUTENESS, - SMARTNESS, - TOUGHNESS, -}; - -enum Gen1Types -{ - NORMAL, - FIGHTING, - FLYING, - POISON, - GROUND, - ROCK, - BIRD, - BUG, - GHOST, - NINE, - TEN, - ELEVEN, - TWELVE, - THIRTEEN, - FOURTEEN, - FIFTEEN, - SIXTEEN, - SEVENTEEN, - EIGHTEEN, - NINETEEN, - FIRE, - WATER, - GRASS, - ELECTRIC, - PSYCHIC, - ICE, - DRAGON, -}; - -enum Ribbon -{ - COOL_NORMAL_CONTEST, - COOL_SUPER_CONTEST, - COOL_HYPER_CONTEST, - COOL_MASTER_CONTEST, - BEAUTY_NORMAL_CONTEST, - BEAUTY_SUPER_CONTEST, - BEAUTY_HYPER_CONTEST, - BEAUTY_MASTER_CONTEST, - CUTE_NORMAL_CONTEST, - CUTE_SUPER_CONTEST, - CUTE_HYPER_CONTEST, - CUTE_MASTER_CONTEST, - SMART_NORMAL_CONTEST, - SMART_SUPER_CONTEST, - SMART_HYPER_CONTEST, - SMART_MASTER_CONTEST, - TOUGH_NORMAL_CONTEST, - TOUGH_SUPER_CONTEST, - TOUGH_HYPER_CONTEST, - TOUGH_MASTER_CONTEST, - CHAMPION, - WINNING, - VICTORY, - ARTIST, - EFFORT, - BATTLECHAMPION, - REGIONALCHAMPION, - NATIONALCHAMPION, - COUNTRY, - NATIONAL, - EARTH, -}; - -enum Gender -{ - MALE, - FEMALE, - GENDERLESS, -}; - -enum Nature -{ - HARDY, - LONELY, - BRAVE, - ADAMANT, - NAUGHTY, - BOLD, - DOCILE, - RELAXED, - IMPISH, - LAX, - TIMID, - HASTY, - SERIOUS, - JOLLY, - NAIVE, - MODEST, - MILD, - QUIET, - BASHFUL, - RASH, - CALM, - GENTLE, - SASSY, - CAREFUL, - QUIRKY, -}; - -enum Species -{ - BULBASAUR = 1, - IVYSAUR, - VENUSAUR, - CHARMANDER, - CHARMELEON, - CHARIZARD, - SQUIRTLE, - WARTORTLE, - BLASTOISE, - CATERPIE, - METAPOD, - BUTTERFREE, - WEEDLE, - KAKUNA, - BEEDRILL, - PIDGEY, - PIDGEOTTO, - PIDGEOT, - RATTATA, - RATICATE, - SPEAROW, - FEAROW, - EKANS, - ARBOK, - PIKACHU, - RAICHU, - SANDSHREW, - SANDSLASH, - NIDORAN_F, - NIDORINA, - NIDOQUEEN, - NIDORAN_M, - NIDORINO, - NIDOKING, - CLEFAIRY, - CLEFABLE, - VULPIX, - NINETALES, - JIGGLYPUFF, - WIGGLYTUFF, - ZUBAT, - GOLBAT, - ODDISH, - GLOOM, - VILEPLUME, - PARAS, - PARASECT, - VENONAT, - VENOMOTH, - DIGLETT, - DUGTRIO, - MEOWTH, - PERSIAN, - PSYDUCK, - GOLDUCK, - MANKEY, - PRIMEAPE, - GROWLITHE, - ARCANINE, - POLIWAG, - POLIWHIRL, - POLIWRATH, - ABRA, - KADABRA, - ALAKAZAM, - MACHOP, - MACHOKE, - MACHAMP, - BELLSPROUT, - WEEPINBELL, - VICTREEBEL, - TENTACOOL, - TENTACRUEL, - GEODUDE, - GRAVELER, - GOLEM, - PONYTA, - RAPIDASH, - SLOWPOKE, - SLOWBRO, - MAGNEMITE, - MAGNETON, - FARFETCHD, - DODUO, - DODRIO, - SEEL, - DEWGONG, - GRIMER, - MUK, - SHELLDER, - CLOYSTER, - GASTLY, - HAUNTER, - GENGAR, - ONIX, - DROWZEE, - HYPNO, - KRABBY, - KINGLER, - VOLTORB, - ELECTRODE, - EXEGGCUTE, - EXEGGUTOR, - CUBONE, - MAROWAK, - HITMONLEE, - HITMONCHAN, - LICKITUNG, - KOFFING, - WEEZING, - RHYHORN, - RHYDON, - CHANSEY, - TANGELA, - KANGASKHAN, - HORSEA, - SEADRA, - GOLDEEN, - SEAKING, - STARYU, - STARMIE, - MR_MIME, - SCYTHER, - JYNX, - ELECTABUZZ, - MAGMAR, - PINSIR, - TAUROS, - MAGIKARP, - GYARADOS, - LAPRAS, - DITTO, - EEVEE, - VAPOREON, - JOLTEON, - FLAREON, - PORYGON, - OMANYTE, - OMASTAR, - KABUTO, - KABUTOPS, - AERODACTYL, - SNORLAX, - ARTICUNO, - ZAPDOS, - MOLTRES, - DRATINI, - DRAGONAIR, - DRAGONITE, - MEWTWO, - MEW, - CHIKORITA, - BAYLEEF, - MEGANIUM, - CYNDAQUIL, - QUILAVA, - TYPHLOSION, - TOTODILE, - CROCONAW, - FERALIGATR, - SENTRET, - FURRET, - HOOTHOOT, - NOCTOWL, - LEDYBA, - LEDIAN, - SPINARAK, - ARIADOS, - CROBAT, - CHINCHOU, - LANTURN, - PICHU, - CLEFFA, - IGGLYBUFF, - TOGEPI, - TOGETIC, - NATU, - XATU, - MAREEP, - FLAAFFY, - AMPHAROS, - BELLOSSOM, - MARILL, - AZUMARILL, - SUDOWOODO, - POLITOED, - HOPPIP, - SKIPLOOM, - JUMPLUFF, - AIPOM, - SUNKERN, - SUNFLORA, - YANMA, - WOOPER, - QUAGSIRE, - ESPEON, - UMBREON, - MURKROW, - SLOWKING, - MISDREAVUS, - UNOWN, - WOBBUFFET, - GIRAFARIG, - PINECO, - FORRETRESS, - DUNSPARCE, - GLIGAR, - STEELIX, - SNUBBULL, - GRANBULL, - QWILFISH, - SCIZOR, - SHUCKLE, - HERACROSS, - SNEASEL, - TEDDIURSA, - URSARING, - SLUGMA, - MAGCARGO, - SWINUB, - PILOSWINE, - CORSOLA, - REMORAID, - OCTILLERY, - DELIBIRD, - MANTINE, - SKARMORY, - HOUNDOUR, - HOUNDOOM, - KINGDRA, - PHANPY, - DONPHAN, - PORYGON2, - STANTLER, - SMEARGLE, - TYROGUE, - HITMONTOP, - SMOOCHUM, - ELEKID, - MAGBY, - MILTANK, - BLISSEY, - RAIKOU, - ENTEI, - SUICUNE, - LARVITAR, - PUPITAR, - TYRANITAR, - LUGIA, - HO_OH, - CELEBI, - TREECKO, - MISSINGNO = 0xFF, -}; - -enum PokeBall -{ - MASTER = 1, - ULTRA, - GREAT, - POKE, - SAFARI, - NET, - DIVE, - NEST, - REPEAT, - TIMER, - LUXURY, - PREMIER, -}; - -enum Game -{ - SAPPHIRE = 1, - RUBY, - EMERALD, - FIRERED, - LEAFGREEN, - HEARTGOLD = 7, - SOULSILVER, - DIAMOND = 10, - PEARL, - PLATINUM, - COlOSSEUM_XD = 15, -}; - -enum Item -{ - NONE, - MASTER_BALL, - ULTRA_BALL, - GREAT_BALL, - POKE_BALL, - SAFARI_BALL, - NET_BALL, - DIVE_BALL, - NEST_BALL, - REPEAT_BALL, - TIMER_BALL, - LUXURY_BALL, - PREMIER_BALL, - POTION, - ANTIDOTE, - BURN_HEAL, - ICE_HEAL, - AWAKENING, - PARLYZ_HEAL, - FULL_RESTORE, - MAX_POTION, - HYPER_POTION, - SUPER_POTION, - FULL_HEAL, - REVIVE, - MAX_REVIVE, - FRESH_WATER, - SODA_POP, - LEMONADE, - MOOMOO_MILK, - ENERGYPOWDER, - ENERGY_ROOT, - HEAL_POWDER, - REVIVAL_HERB, - ETHER, - MAX_ETHER, - ELIXIR, - MAX_ELIXIR, - LAVA_COOKIE, - BLUE_FLUTE, - YELLOW_FLUTE, - RED_FLUTE, - BLACK_FLUTE, - WHITE_FLUTE, - BERRY_JUICE, - SACRED_ASH, - SHOAL_SALT, - SHOAL_SHELL, - RED_SHARD, - BLUE_SHARD, - YELLOW_SHARD, - GREEN_SHARD, - - HP_UP = 0x3F, - PROTEIN, - IRON, - CARBOS, - CALCIUM, - RARE_CANDY, - PP_UP, - ZINC, - PP_MAX, - - GUARD_SPEC = 0x49, - DIRE_HIT, - X_ATTACK, - X_DEFEND, - X_SPEED, - X_ACCURACY, - X_SPECIAL, - POKE_DOLL, - FLUFFY_TAIL, - - SUPER_REPEL = 0x53, - MAX_REPEL, - ESCAPE_ROPE, - REPEL, - - SUN_STONE = 0x5D, - MOON_STONE, - FIRE_STONE, - THUNDERSTONE, - WATER_STONE, - LEAF_STONE, - - TINYMUSHROOM = 0x67, - BIG_MUSHROOM, - - NORMAL_PEARL = 0x6A, - BIG_PEARL, - STARDUST, - STAR_PIECE, - NUGGET, - HEART_SCALE, - - ORANGE_MAIL = 0x79, - HARBOR_MAIL, - GLITTER_MAIL, - MECH_MAIL, - WOOD_MAIL, - WAVE_MAIL, - BEAD_MAIL, - SHADOW_MAIL, - TROPIC_MAIL, - DREAM_MAIL, - FAB_MAIL, - RETRO_MAIL, - CHERI_BERRY, - CHESTO_BERRY, - PECHA_BERRY, - RAWST_BERRY, - ASPEAR_BERRY, - LEPPA_BERRY, - ORAN_BERRY, - PERSIM_BERRY, - LUM_BERRY, - SITRUS_BERRY, - FIGY_BERRY, - WIKI_BERRY, - MAGO_BERRY, - AGUAV_BERRY, - IAPAPA_BERRY, - RAZZ_BERRY, - BLUK_BERRY, - NANAB_BERRY, - WEPEAR_BERRY, - PINAP_BERRY, - POMEG_BERRY, - KELPSY_BERRY, - QUALOT_BERRY, - HONDEW_BERRY, - GREPA_BERRY, - TAMATO_BERRY, - CORNN_BERRY, - MAGOST_BERRY, - RABUTA_BERRY, - NOMEL_BERRY, - SPELON_BERRY, - PAMTRE_BERRY, - WATMEL_BERRY, - DURIN_BERRY, - BELUE_BERRY, - LIECHI_BERRY, - GANLON_BERRY, - SALAC_BERRY, - PETAYA_BERRY, - APICOT_BERRY, - LANSAT_BERRY, - STARF_BERRY, - ENIGMA_BERRY, - - BRIGHTPOWDER = 0xB3, - WHITE_HERB, - MACHO_BRACE, - EXP_SHARE, - QUICK_CLAW, - SOOTHE_BELL, - MENTAL_HERB, - CHOICE_BAND, - KINGS_ROCK, - SILVERPOWDER, - AMULET_COIN, - CLEANSE_TAG, - SOUL_DEW, - DEEPSEATOOTH, - DEEPSEASCALE, - SMOKE_BALL, - EVERSTONE, - FOCUS_BAND, - LUCKY_EGG, - SCOPE_LENS, - METAL_COAT, - LEFTOVERS, - DRAGON_SCALE, - LIGHT_BALL, - SOFT_SAND, - HARD_STONE, - MIRACLE_SEED, - BLACKGLASSES, - BLACK_BELT, - MAGNET, - MYSTIC_WATER, - SHARP_BEAK, - POISON_BARB, - NEVERMELTICE, - SPELL_TAG, - TWISTEDSPOON, - CHARCOAL, - DRAGON_FANG, - SILK_SCARF, - UPGRADE, - SHELL_BELL, - SEA_INCENSE, - LAX_INCENSE, - LUCKY_PUNCH, - METAL_POWDER, - THICK_CLUB, - STICK, - - RED_SCARF = 0xFE, - BLUE_SCARF, - PINK_SCARF, - GREEN_SCARF, - YELLOW_SCARF -}; - -enum Substructure -{ - SUB_G, - SUB_A, - SUB_E, - SUB_M, -}; - -enum Language -{ - JAPANESE = 1, - ENGLISH, - FRENCH, - ITALIAN, - GERMAN, - SPANISH, - KOREAN, -}; - -enum RNGMethod -{ - ABCD_U, // Normal method - BACD_R, // Used for calculating events -}; - -#endif \ No newline at end of file diff --git a/include/pokemon_party.h b/include/pokemon_party.h index dd0b7e5..5a126aa 100644 --- a/include/pokemon_party.h +++ b/include/pokemon_party.h @@ -2,7 +2,7 @@ #define POKEMON_PARTY_H #include -#include "pccs/PokeBox.h" +#include "PokeBox.h" #include "gb_rom_values/base_gb_rom_struct.h" class Pokemon_Party { diff --git a/source/box_menu.cpp b/source/box_menu.cpp index 39f2900..e26f2f8 100644 --- a/source/box_menu.cpp +++ b/source/box_menu.cpp @@ -1,5 +1,5 @@ #include -#include "pccs/typeDefs.h" +#include "typeDefs.h" #include "button_menu.h" #include "button_handler.h" #include "save_data_manager.h" diff --git a/source/pccs/GBPokemon.cpp b/source/pccs/GBPokemon.cpp deleted file mode 100644 index dc162d2..0000000 --- a/source/pccs/GBPokemon.cpp +++ /dev/null @@ -1,818 +0,0 @@ -#include "GBPokemon.h" - -// This constructor fills all our convenience arrays -GBPokemon::GBPokemon() -{ - nicknameArrayPtr = nicknameArray; - nicknameArraySize = 11; - OTArrayPtr = OTArray; - OTArraySize = 11; - externalIndexNumberPtr = &externalIndexNumber; - isBigEndian = true; - generation = 0; -} - -// This is used to load our data in from an array -void GBPokemon::loadData(Language nLang, byte nDataArray[], byte nNicknameArray[], byte nOTArray[], byte nExternalIndexNum) -{ - for (int i = 0; i < dataArraySize; i++) - { - dataArrayPtr[i] = nDataArray[i]; - } - - for (int i = 0; i < nicknameArraySize; i++) - { - nicknameArray[i] = nNicknameArray[i]; - } - - for (int i = 0; i < OTArraySize; i++) - { - OTArray[i] = nOTArray[i]; - } - - if (generation == 1) - { - externalIndexNumber = gen_1_index_array[nExternalIndexNum]; - } - else - { - externalIndexNumber = nExternalIndexNum; - } - - lang = nLang; - updateValidity(); -} - -// This is used to easily print out a Pokemon, when using a standard C++ terminal -#if ON_GBA -#else -std::string GBPokemon::parentPrint() -{ - pokeTable->load_input_charset(generation, ENGLISH); - std::stringstream os; - os << "Species Index Number: " << getSpeciesIndexNumber() << "\n" - << "Nickname: ["; - - for (int i = 0; i < 10; i++) - { - os << "0x" << std::setfill('0') << std::setw(2) << std::right << std::hex << (int)nicknameArray[i] << (i < 9 ? ", " : ""); - } - - os << "] ("; - - for (int i = 0; i < 10; i++) - { - os << (char)(pokeTable->input_charset[(int)nicknameArray[i]]); - } - - os << ")" << "\n" - << "Original Trainer: ["; - - for (int i = 0; i < 7; i++) - { - os << "0x" << std::setfill('0') << std::setw(2) << std::right << std::hex << (int)OTArray[i] << (i < 6 ? ", " : ""); - } - - os << "] ("; - - for (int i = 0; i < 7; i++) - { - os << (char)(pokeTable->input_charset[(int)OTArray[i]]); - } - - os << ")" << "\n" - << std::dec - << "Trainer ID: " << getTrainerID() << "\n" - << "Level: " << getLevel() << "\n" - << "Exp: " << getExpPoints() << "\n" - << "Moves: " - << "\n\t" << getMove(0) << " (" << getPPTotal(0) << " PP, " << getPPUpNum(0) << " PP Ups" << ")" - << "\n\t" << getMove(1) << " (" << getPPTotal(1) << " PP, " << getPPUpNum(1) << " PP Ups" << ")" - << "\n\t" << getMove(2) << " (" << getPPTotal(2) << " PP, " << getPPUpNum(2) << " PP Ups" << ")" - << "\n\t" << getMove(3) << " (" << getPPTotal(3) << " PP, " << getPPUpNum(3) << " PP Ups" << ")" << "\n" - << "Is Shiny: " << getIsShiny() << "\n"; - return os.str(); -} -#endif - -u32 GBPokemon::getDV(Stat currStat) -{ - if (currStat == HP) - { - - return ((getVar(DVs[ATTACK][generation - 1]) & 0x1) << 3) | - ((getVar(DVs[DEFENSE][generation - 1]) & 0x1) << 2) | - ((getVar(DVs[SPEED][generation - 1]) & 0x1) << 1) | - ((getVar(DVs[SPECIAL][generation - 1]) & 0x1) << 0); - } - else - { - return getVar(DVs[currStat][generation - 1]); - } -} - -bool GBPokemon::setDV(Stat currStat, byte newVal) -{ - if (currStat == HP) - { - return setVar(DVs[ATTACK][generation - 1], (getVar(DVs[ATTACK][generation - 1]) & 0b1110) | ((newVal >> 3) & 0x1)) && - setVar(DVs[DEFENSE][generation - 1], (getVar(DVs[DEFENSE][generation - 1]) & 0b1110) | ((newVal >> 2) & 0x1)) && - setVar(DVs[SPEED][generation - 1], (getVar(DVs[SPEED][generation - 1]) & 0b1110) | ((newVal >> 1) & 0x1)) && - setVar(DVs[SPECIAL][generation - 1], (getVar(DVs[SPECIAL][generation - 1]) & 0b1110) | ((newVal >> 0) & 0x1)); - } - else - { - return setVar(DVs[currStat][generation - 1], newVal); - } -} - -byte GBPokemon::getUnownLetter() -{ - if (getSpeciesIndexNumber() == 201) - { - byte letter = 0; - letter |= ((getDV(ATTACK) & 0b0110) >> 1) << 6; - letter |= ((getDV(DEFENSE) & 0b0110) >> 1) << 4; - letter |= ((getDV(SPEED) & 0b0110) >> 1) << 2; - letter |= ((getDV(SPECIAL) & 0b0110) >> 1) << 0; - letter = letter / 10; - return letter; - } - return 255; -} - -Gender GBPokemon::getGender() -{ - byte index = getSpeciesIndexNumber(); - u32 threshold = pokeTable->get_gender_threshold(index, false); - - if (threshold == 255) - { - return GENDERLESS; - } - else - { - if (getDV(ATTACK) <= threshold) - { - return FEMALE; - } - return MALE; - } -} - -Nature GBPokemon::getVirtualConsoleNature() -{ - return (Nature)(getExpPoints() % 25); -} - -bool GBPokemon::getIsShiny() -{ - return ((getDV(ATTACK) & 0b0010) == 0b0010) && - getDV(DEFENSE) == 10 && - getDV(SPEED) == 10 && - getDV(SPECIAL) == 10; -} - -bool GBPokemon::convertToGen3(Gen3Pokemon *newPkmn, bool sanitizeMythicals) -{ - if (!isValid) - { - return false; - } - - bool valid = - // Start with things that effect the PID - convertSpeciesIndexNumber(newPkmn) && - setRequestedLetter(newPkmn) && - setRequestedNature(newPkmn) && - setRequestedGender(newPkmn) && - setRequestedAbility(newPkmn) && - setRequestedSize(newPkmn) && - - // Then set the PID - generatePersonalityValue(newPkmn, ABCD_U) && - - // Then set everything else - convertTrainerID(newPkmn) && - convertNickname(newPkmn) && - convertLanguage(newPkmn) && - convertMiscFlags(newPkmn) && - convertTrainerNickname(newPkmn) && - convertMarkings(newPkmn) && - convertItem(newPkmn) && - convertEXP(newPkmn) && - convertFriendship(newPkmn) && - convertMoves(newPkmn) && - convertEVs(newPkmn) && - convertContestConditions(newPkmn) && - convertPokerus(newPkmn) && - convertMetLocation(newPkmn) && - convertMetLevel(newPkmn) && - convertGameOfOrigin(newPkmn) && - convertPokeball(newPkmn) && - convertTrainerGender(newPkmn) && - convertIVs(newPkmn) && - convertRibbonsAndObedience(newPkmn) && - convertShininess(newPkmn); - - if (sanitizeMythicals && (getSpeciesIndexNumber() == MEW || getSpeciesIndexNumber() == CELEBI)) - { - // Modify the required data for the event - valid &= loadEvent(newPkmn); - } - - newPkmn->isValid = valid; - return valid; -}; - -bool GBPokemon::loadEvent(Gen3Pokemon *newPkmn) -{ - bool valid = - generatePersonalityValue(newPkmn, BACD_R) && - convertEVs(newPkmn) && - convertIVs(newPkmn); - if (!valid) - { - return false; - } - if (getSpeciesIndexNumber() == MEW) - { - newPkmn->setGameOfOrigin(RUBY); - newPkmn->setFatefulEncounterObedience(true); - newPkmn->setMetLocation(0xFF); // Fateful Encounter - newPkmn->setLevelMet(10); - newPkmn->setSecretID(00000); - if (newPkmn->getExpPoints() < 560) // 560 is level 10 for Mew - { - newPkmn->setExpPoints(560); - } - - byte jpnOT[] = {0x6A, 0x95, 0x53, 0xFF, 0xFF, 0xFF, 0xFF}; - byte engOT[] = {0xBB, 0xE9, 0xE6, 0xD5, 0xFF, 0x00, 0x00}; - - switch (getLanguage()) - { - case JAPANESE: - case KOREAN: - newPkmn->setTrainerID(50716); - newPkmn->setOTArray(jpnOT, 7); - break; - case ENGLISH: - case FRENCH: - case ITALIAN: - case GERMAN: - case SPANISH: - default: - newPkmn->setTrainerID(20078); - newPkmn->setOTArray(engOT, 7); - break; - } - } - else if (getSpeciesIndexNumber() == CELEBI) - { - newPkmn->setGameOfOrigin(RUBY); - newPkmn->setFatefulEncounterObedience(false); - newPkmn->setMetLocation(0xFF); // Fateful Encounter - newPkmn->setSecretID(0); - - byte jpnOT[] = {0x70, 0x62, 0x78, 0x7E, 0xFF, 0x00, 0x00}; - byte engOT[] = {0xA2, 0xA1, 0x00, 0xBB, 0xC8, 0xC3, 0xD0}; - - switch (getLanguage()) - { - case JAPANESE: - case KOREAN: - newPkmn->setLevelMet(10); - if (newPkmn->getExpPoints() < 560) // 560 is level 10 for Celebi - { - newPkmn->setExpPoints(560); - } - newPkmn->setTrainerID(60720); - newPkmn->setOTArray(jpnOT, 7); - break; - case ENGLISH: - case FRENCH: - case ITALIAN: - case GERMAN: - case SPANISH: - default: - newPkmn->setLanguage(ENGLISH); - newPkmn->setLevelMet(70); - if (newPkmn->getExpPoints() < 344960) // 344960 is level 70 for Celebi - { - newPkmn->setExpPoints(344960); - } - newPkmn->setTrainerID(10); - newPkmn->setOTArray(engOT, 7); - break; - } - } - - int val = getExpPoints(); - if (val < 560) // Mew and Celebi are both Medium Slow, 560 is level 10 - { - setExpPoints(560); - } - return true; -} - -void GBPokemon::updateValidity() -{ - byte currSpeciesIndexNumber = getSpeciesIndexNumber(); - isValid = ((currSpeciesIndexNumber <= CELEBI || // Checks if the Pokemon is beyond the spported Pokemon, excluding Treecko for now - (currSpeciesIndexNumber == MISSINGNO && generation == 1)) && // But keep MissingNo - currSpeciesIndexNumber != 0 && // Makes sure the Pokemon isn't a blank party space - currSpeciesIndexNumber == externalIndexNumber && // Checks that the Pokemon isn't a hybrid or an egg - getHeldItem() == 0 // Makes sure the current Pokemon doesn't have a held item - ); -}; - -bool GBPokemon::externalConvertNickname(byte outputArray[]) -{ - pokeTable->load_input_charset(generation, ENGLISH); - pokeTable->load_gen3_charset(ENGLISH); - for (int i = 0; i < 10; i++) - { - outputArray[i] = pokeTable->get_gen_3_char(pokeTable->input_charset[nicknameArray[i]]); - } - outputArray[10] = 0xFF; - return true; -}; - -bool GBPokemon::generatePersonalityValue(Gen3Pokemon *newPkmn, RNGMethod rng) -{ - newPkmn->currRand = getPureRand(); - u32 pid = 0; - u16 seedA = 0; - u16 seedB = 0; - do - { - if (rng == ABCD_U) - { - seedA = newPkmn->getNextRand_u16(); - seedB = newPkmn->getNextRand_u16(); - pid = seedA | (seedB << 16); - } - else if (rng == BACD_R) - { - newPkmn->currRand &= 0xFFFF; // Restrict the seed to 16 bits - seedA = newPkmn->getNextRand_u16(); - seedB = newPkmn->getNextRand_u16(); - pid = seedB | (seedA << 16); - } - newPkmn->setPersonalityValue(pid); - // std::cout << "Testing PID: " << std::hex << pid << "\n"; - /* - std::cout << "PV: " << newPkmn->getPersonalityValue() << "\n" - << "Letter: " << newPkmn->getUnownLetter() << " | " << getUnownLetter() << "\n" - << "Nature: " << newPkmn->getNature() << " | " << getVirtualConsoleNature() << "\n" - << "Gender: " << newPkmn->getGender() << " | " << getGender() << "\n"; - */ - } while (!( - newPkmn->getAbilityFromPersonalityValue() == newPkmn->internalAbility && - newPkmn->getUnownLetter() == newPkmn->internalUnownLetter && - newPkmn->getNature() == newPkmn->internalNature && - newPkmn->getGender() == newPkmn->internalGender && - newPkmn->getSize() == newPkmn->internalSize)); - return true; -}; - -bool GBPokemon::convertTrainerID(Gen3Pokemon *newPkmn) -{ - newPkmn->setTrainerID(getTrainerID()); - return true; -} - -bool GBPokemon::convertNickname(Gen3Pokemon *newPkmn) -{ - pokeTable->load_input_charset(generation, ENGLISH); - pokeTable->load_gen3_charset(ENGLISH); - for (int i = 0; i < 10; i++) - { - newPkmn->setNicknameLetter(i, pokeTable->get_gen_3_char(pokeTable->input_charset[nicknameArray[i]])); - } - return true; -}; - -bool GBPokemon::convertLanguage(Gen3Pokemon *newPkmn) -{ - newPkmn->setLanguage(getLanguage()); - return true; -} - -bool GBPokemon::convertMiscFlags(Gen3Pokemon *newPkmn) -{ - newPkmn->setIsBadEgg(false); - newPkmn->setHasSpecies(true); - newPkmn->setUseEggName(false); - newPkmn->setIsEgg(false); - return true; -} - -bool GBPokemon::convertTrainerNickname(Gen3Pokemon *newPkmn) -{ - pokeTable->load_input_charset(1, ENGLISH); - pokeTable->load_gen3_charset(ENGLISH); - - for (int i = 0; i < 6; i++) - { - newPkmn->setOTLetter(i, pokeTable->get_gen_3_char(pokeTable->input_charset[OTArray[i]])); - } - - return true; -}; - -bool GBPokemon::convertMarkings(Gen3Pokemon *newPkmn) -{ - newPkmn->setMarkings(0b0000); - return true; -} - -bool GBPokemon::convertSpeciesIndexNumber(Gen3Pokemon *newPkmn) -{ - switch (getSpeciesIndexNumber()) - { - case TREECKO: - newPkmn->setSpeciesIndexNumber(0x115); - break; - case MISSINGNO: - newPkmn->setSpeciesIndexNumber(PORYGON); - break; - default: - newPkmn->setSpeciesIndexNumber(getSpeciesIndexNumber()); - break; - } - return true; -} - -bool GBPokemon::convertItem(Gen3Pokemon *newPkmn) -{ -#if ACCESS_POKEDEX -#include "save_data_manager.h" - if (!is_caught(newPkmn->getSpeciesIndexNumber())) - { - newPkmn->setHeldItem(RARE_CANDY); - set_caught(newPkmn->getSpeciesIndexNumber()); - } - else - { - newPkmn->setHeldItem(NONE); - } -#else - newPkmn->setHeldItem(NONE); -#endif - return true; -} - -bool GBPokemon::convertEXP(Gen3Pokemon *newPkmn) -{ - // As per Poke Transporter, the level will be based on the level value, not the EXP - // Make sure Level is not over 100 - - int speciesIndex = getSpeciesIndexNumber(); - int currLevel = getLevel(); - if (currLevel > 100) - { - currLevel = 100; - } - - // Truncate the EXP down to the current level - pokeTable->load_exp_groups(); - switch (pokeTable->EXP_GROUPS[speciesIndex]) - { - case EXP_FAST: - newPkmn->setExpPoints((4 * (currLevel * currLevel * currLevel)) / 5); - break; - - default: // MissingNo is the only one that should hit default, so match it to Porygon - case EXP_MED_FAST: - newPkmn->setExpPoints(currLevel * currLevel * currLevel); - break; - - case EXP_MED_SLOW: - newPkmn->setExpPoints(((6 * currLevel * currLevel * currLevel) / 5) - (15 * currLevel * currLevel) + (100 * currLevel) - 140); - break; - - case EXP_SLOW: - newPkmn->setExpPoints((5 * (currLevel * currLevel * currLevel)) / 4); - break; - } - return true; -}; - -bool GBPokemon::convertFriendship(Gen3Pokemon *newPkmn) -{ - newPkmn->setFriendship(70); - return true; -} - -bool GBPokemon::convertMoves(Gen3Pokemon *newPkmn) -{ - Species speciesIndexNum = (Species)getSpeciesIndexNumber(); - // Check that the moves are valid - if ((speciesIndexNum != SMEARGLE) && - (speciesIndexNum != MISSINGNO) && - (speciesIndexNum != TREECKO)) // Ignore Smeargle, MissingNo, and Treecko - { - for (int i = 0; i < 4; i++) - { - if (pokeTable->can_learn_move(speciesIndexNum, getMove(i))) - { - newPkmn->setMove(i, getMove(i)); // Add the move - newPkmn->setPPUpNum(i, getPPUpNum(i)); // Add the PP Bonuses - } - } - } - - // Make sure it has at least one move - int count = 0; - for (int i = 0; i < 4; i++) - { - count += (newPkmn->getMove(i) != 0); - } - if (count == 0) - { - newPkmn->setMove(0, pokeTable->get_earliest_move(speciesIndexNum)); - } - - // Bubble valid moves to the top - int i, j; - bool swapped; - for (i = 0; i < 3; i++) - { - swapped = false; - for (j = 0; j < 3 - i; j++) - { - if (newPkmn->getMove(j) == 0 && newPkmn->getMove(j + 1) != 0) - { - // Move the move *and* PP bonus up if there is a blank space - newPkmn->setMove(j, newPkmn->getMove(j + 1)); - newPkmn->setPPUpNum(j, newPkmn->getPPUpNum(j + 1)); - newPkmn->setMove(j + 1, 0); - newPkmn->setPPUpNum(j + 1, 0); - swapped = true; - } - } - - // If no two elements were swapped - // by inner loop, then break - if (swapped == false) - break; - } - - // Restore the PP values - pokeTable->load_power_points(); - for (int i = 0; i < 4; i++) - { - int move = newPkmn->getMove(i); - newPkmn->setPPTotal(i, pokeTable->POWER_POINTS[move] + ((pokeTable->POWER_POINTS[move] / 5) * newPkmn->getPPUpNum(i))); - } - - return true; -}; - -bool GBPokemon::convertEVs(Gen3Pokemon *newPkmn) -{ - for (int i = 0; i < 6; i++) - { - newPkmn->setEV((Stat)i, 0); - } - return true; -}; - -bool GBPokemon::convertContestConditions(Gen3Pokemon *newPkmn) -{ - for (int i = 0; i < 5; i++) - { - newPkmn->setContestCondition((Condition)i, 0); - } - newPkmn->setSheen(0); - return true; -}; - -bool GBPokemon::convertPokerus(Gen3Pokemon *newPkmn) -{ - newPkmn->setPokerusStrain(getPokerusStrain()); - newPkmn->setPokerusDaysRemaining(getPokerusDaysRemaining()); - return true; -} - -bool GBPokemon::convertMetLocation(Gen3Pokemon *newPkmn) -{ - newPkmn->setMetLocation(0xFF); // A fateful encounter - return true; -} - -bool GBPokemon::convertMetLevel(Gen3Pokemon *newPkmn) -{ - newPkmn->setLevelMet(getLevel()); - return true; -} - -bool GBPokemon::convertGameOfOrigin(Gen3Pokemon *newPkmn) -{ - switch (generation) - { - case 1: - newPkmn->setGameOfOrigin(FIRERED); - break; - - case 2: - newPkmn->setGameOfOrigin(HEARTGOLD); - break; - - default: - return false; - } - return true; -} - -bool GBPokemon::convertPokeball(Gen3Pokemon *newPkmn) -{ - if (getSpeciesIndexNumber() == MISSINGNO) - { - newPkmn->setPokeballCaughtIn(MASTER); - } - else - { - newPkmn->setPokeballCaughtIn(POKE); - } - - return true; -} - -bool GBPokemon::convertTrainerGender(Gen3Pokemon *newPkmn) -{ - newPkmn->setOriginalTrainerGender(getCaughtDataGender()); - return true; -}; - -bool GBPokemon::convertIVs(Gen3Pokemon *newPkmn) -{ - u16 currRand; - - currRand = newPkmn->getNextRand_u16(); - newPkmn->setIV(HP, (currRand >> 0) & 0b11111); - newPkmn->setIV(ATTACK, (currRand >> 5) & 0b11111); - newPkmn->setIV(DEFENSE, (currRand >> 10) & 0b11111); - currRand = newPkmn->getNextRand_u16(); - newPkmn->setIV(SPEED, (currRand >> 0) & 0b11111); - newPkmn->setIV(SPECIAL_ATTACK, (currRand >> 5) & 0b11111); - newPkmn->setIV(SPECIAL_DEFENSE, (currRand >> 10) & 0b11111); - - return true; -}; - -bool GBPokemon::convertAbilityFlag(Gen3Pokemon *newPkmn) -{ - newPkmn->setAbility(newPkmn->getPersonalityValue() & 0b1); - return true; -} - -bool GBPokemon::convertRibbonsAndObedience(Gen3Pokemon *newPkmn) -{ - Species speciesIndexNumber = (Species)getSpeciesIndexNumber(); - if (speciesIndexNumber == MEW || speciesIndexNumber == CELEBI) - { - newPkmn->setFatefulEncounterObedience(true); - } - return true; -}; - -bool GBPokemon::setRequestedLetter(Gen3Pokemon *newPkmn) -{ - newPkmn->internalUnownLetter = getUnownLetter(); - return true; -}; - -bool GBPokemon::setRequestedNature(Gen3Pokemon *newPkmn) -{ - newPkmn->internalNature = getVirtualConsoleNature(); - return true; -}; - -bool GBPokemon::setRequestedGender(Gen3Pokemon *newPkmn) -{ - newPkmn->internalGender = getGender(); - return true; -}; - -bool GBPokemon::setRequestedAbility(Gen3Pokemon *newPkmn) -{ - newPkmn->internalAbility = 255; - return true; -}; - -bool GBPokemon::setRequestedSize(Gen3Pokemon *newPkmn) -{ - newPkmn->internalSize = 255; - return true; -}; - -bool GBPokemon::convertShininess(Gen3Pokemon *newPkmn) -{ - byte nickname[10] = {}; - byte trainerName[7] = {}; - - for (int i = 0; i < 10; i++) - { - nickname[i] = newPkmn->getNicknameLetter(i); - } - - for (int i = 0; i < 7; i++) - { - trainerName[i] = newPkmn->getOTLetter(i); - } - - if ((getSpeciesIndexNumber() == 52) && - fnv1a_hash(trainerName, 7) == 1342961308 && - (fnv1a_hash(nickname, 7) == 1515822901 || fnv1a_hash(nickname, 8) == 2671449886)) - { - for (int i = 1; i <= 4; i++) - { - setDV((Stat)i, 15); - } - } - - u16 shinyTest = newPkmn->getTrainerID() ^ - (newPkmn->getPersonalityValue() >> 0 & 0xFFFF) ^ - (newPkmn->getPersonalityValue() >> 16 & 0xFFFF); - - if (getIsShiny()) - { // Make shiny - newPkmn->setSecretID(shinyTest); - } - else - { // Make sure it isn't shiny - if (shinyTest < 8) - { // It became shiny, fix that - newPkmn->setSecretID(51691); - } - else - { - newPkmn->setSecretID(0); - } - } - return true; -}; - -const DataVarInfo - GBPokemon::speciesIndexNumber[2] = {{0x00, 8, 0}, {0x00, 8, 0}}, - GBPokemon::level[2] = {{0x03, 8, 0}, {0x1F, 8, 0}}, - GBPokemon::moveOne[2] = {{0x08, 8, 0}, {0x02, 8, 0}}, - GBPokemon::moveTwo[2] = {{0x09, 8, 0}, {0x03, 8, 0}}, - GBPokemon::moveThree[2] = {{0x0A, 8, 0}, {0x04, 8, 0}}, - GBPokemon::moveFour[2] = {{0x0B, 8, 0}, {0x05, 8, 0}}, - GBPokemon::trainerID[2] = {{0x0C, 16, 0}, {0x06, 16, 0}}, - GBPokemon::expPoints[2] = {{0x0E, 24, 0}, {0x08, 24, 0}}, - GBPokemon::hpStatExp[2] = {{0x11, 16, 0}, {0x0B, 16, 0}}, - GBPokemon::atkStatExp[2] = {{0x13, 16, 0}, {0x0D, 16, 0}}, - GBPokemon::defStatExp[2] = {{0x15, 16, 0}, {0x0F, 16, 0}}, - GBPokemon::speStatExp[2] = {{0x17, 16, 0}, {0x11, 16, 0}}, - GBPokemon::spcStatExp[2] = {{0x19, 16, 0}, {0x13, 16, 0}}, - GBPokemon::atkDV[2] = {{0x1B, 4, 4}, {0x15, 4, 4}}, - GBPokemon::defDV[2] = {{0x1B, 4, 0}, {0x15, 4, 0}}, - GBPokemon::speDV[2] = {{0x1C, 4, 4}, {0x16, 4, 4}}, - GBPokemon::spcDV[2] = {{0x1C, 4, 0}, {0x16, 4, 0}}, - GBPokemon::ppUpNumMoveOne[2] = {{0x1D, 2, 6}, {0x17, 2, 6}}, - GBPokemon::ppNumTotalMoveOne[2] = {{0x1D, 6, 0}, {0x17, 6, 0}}, - GBPokemon::ppUpNumMoveTwo[2] = {{0x1E, 2, 6}, {0x18, 2, 6}}, - GBPokemon::ppNumTotalMoveTwo[2] = {{0x1E, 6, 0}, {0x18, 6, 0}}, - GBPokemon::ppUpNumMoveThree[2] = {{0x1F, 2, 6}, {0x19, 2, 6}}, - GBPokemon::ppNumTotalMoveThree[2] = {{0x1F, 6, 0}, {0x19, 6, 0}}, - GBPokemon::ppUpNumMoveFour[2] = {{0x20, 2, 6}, {0x1A, 2, 6}}, - GBPokemon::ppNumTotalMoveFour[2] = {{0x20, 6, 0}, {0x1A, 6, 0}}; - -const DataVarInfo - *GBPokemon::moves[4] = { - GBPokemon::moveOne, - GBPokemon::moveTwo, - GBPokemon::moveThree, - GBPokemon::moveFour, -}, - *GBPokemon::statExps[5] = { - GBPokemon::hpStatExp, - GBPokemon::atkStatExp, - GBPokemon::defStatExp, - GBPokemon::speStatExp, - GBPokemon::spcStatExp, -}, - *GBPokemon::DVs[5] = { - GBPokemon::atkDV, // This is wrong, but it will never be accessed anyway. - GBPokemon::atkDV, - GBPokemon::defDV, - GBPokemon::speDV, - GBPokemon::spcDV, -}, - *GBPokemon::PPUpNums[4] = { - GBPokemon::ppUpNumMoveOne, - GBPokemon::ppUpNumMoveTwo, - GBPokemon::ppUpNumMoveThree, - GBPokemon::ppUpNumMoveFour, -}, - *GBPokemon::PPUpTotals[4] = { - GBPokemon::ppNumTotalMoveOne, - GBPokemon::ppNumTotalMoveTwo, - GBPokemon::ppNumTotalMoveThree, - GBPokemon::ppNumTotalMoveFour, -}; \ No newline at end of file diff --git a/source/pccs/Gen1Pokemon.cpp b/source/pccs/Gen1Pokemon.cpp deleted file mode 100644 index 8a3f702..0000000 --- a/source/pccs/Gen1Pokemon.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "Gen1Pokemon.h" - -Gen1Pokemon::Gen1Pokemon(PokemonTables *table) -{ - pokeTable = table; - dataArrayPtr = dataArray; - dataArraySize = 33; - generation = 1; -} - -#if ON_GBA -#else -void Gen1Pokemon::print(std::ostream &os) -{ - os << parentPrint() - << "Stats: " - << "\n\tHP: " << getStatExp(HP) << " Stat EXP, " << getDV(HP) << " DVs" - << "\n\tAttack: " << getStatExp(ATTACK) << " Stat EXP, " << getDV(ATTACK) << " DVs" - << "\n\tDefense: " << getStatExp(DEFENSE) << " Stat EXP, " << getDV(DEFENSE) << " DVs" - << "\n\tSpeed: " << getStatExp(SPEED) << " Stat EXP, " << getDV(SPEED) << " DVs" - << "\n\tSpecial: " << getStatExp(SPECIAL) << " Stat EXP, " << getDV(SPECIAL) << " DVs" << "\n" - << "Types: " - << "\n\t" << getType(0) - << "\n\t" << getType(1) << "\n" - << "Current HP: " << getCurrentHP() << "\n" - << "Status Condition: " << getStatusCondition() << "\n" - << "Catch Rate: " << getCatchRate() << "\n"; -} -#endif - -u32 Gen1Pokemon::getSpeciesIndexNumber() -{ - return gen_1_index_array[getVar(speciesIndexNumber[1])]; -} - -bool Gen1Pokemon::setSpeciesIndexNumber(byte newVal) -{ - for (int i = 0; i < 191; i++) - { - if (gen_1_index_array[i] == newVal) - { - return setVar(speciesIndexNumber[1], newVal); - } - } - return setVar(speciesIndexNumber[1], newVal); -} - -const DataVarInfo - Gen1Pokemon::g1_currentHP = {0x01, 16, 0}, - Gen1Pokemon::g1_statusCondition = {0x04, 8, 0}, - Gen1Pokemon::g1_typeOne = {0x05, 8, 0}, - Gen1Pokemon::g1_typeTwo = {0x06, 8, 0}, - Gen1Pokemon::g1_catchRate = {0x07, 8, 0}; - -const DataVarInfo - *Gen1Pokemon::g1_types[2] = - { - &Gen1Pokemon::g1_typeOne, - &Gen1Pokemon::g1_typeTwo, -}; \ No newline at end of file diff --git a/source/pccs/Gen2Pokemon.cpp b/source/pccs/Gen2Pokemon.cpp deleted file mode 100644 index a2af0a9..0000000 --- a/source/pccs/Gen2Pokemon.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "Gen2Pokemon.h" - -Gen2Pokemon::Gen2Pokemon(PokemonTables *table) -{ - pokeTable = table; - dataArrayPtr = dataArray; - dataArraySize = 32; - generation = 2; -} - -#if ON_GBA -#else -void Gen2Pokemon::print(std::ostream &os) -{ - os << parentPrint() - << "Stats: " - << "\n\tHP: " << getStatExp(HP) << " Stat EXP, " << getDV(HP) << " DVs" - << "\n\tAttack: " << getStatExp(ATTACK) << " Stat EXP, " << getDV(ATTACK) << " DVs" - << "\n\tDefense: " << getStatExp(DEFENSE) << " Stat EXP, " << getDV(DEFENSE) << " DVs" - << "\n\tSpeed: " << getStatExp(SPEED) << " Stat EXP, " << getDV(SPEED) << " DVs" - << "\n\tSpecial Attack: " << getStatExp(SPECIAL) << " Stat EXP, " << getDV(SPECIAL) << " DVs" - << "\n\tSpecial Defense: " << getStatExp(SPECIAL) << " Stat EXP, " << getDV(SPECIAL) << " DVs" << "\n" // Special Attack and Special Defense are the same - << "Held Item: " << getHeldItem() << "\n" - << "Friendship: " << getFriendship() << "\n" - << "Pokerus: " - << "\n\tStrain: " << getPokerusStrain() - << "\n\tDays Remaining: " << getPokerusDaysRemaining() << "\n" - << "Caught Data: " - << "\n\tTime: " << getCaughtDataTime() - << "\n\tLevel: " << getCaughtDataLevel() - << "\n\tTrainer Gender: " << getCaughtDataGender() - << "\n\tLocation: " << getCaughtDataLocation() << "\n"; -} -#endif - -const DataVarInfo - Gen2Pokemon::g2_heldItem = {0x01, 8, 0}, - Gen2Pokemon::g2_friendship = {0x1B, 8, 0}, - Gen2Pokemon::g2_pokerusStrain = {0x1C, 4, 4}, - Gen2Pokemon::g2_pokerusDaysRemaining = {0x1C, 4, 0}, - Gen2Pokemon::g2_caughtDataTime = {0x1D, 2, 6}, - Gen2Pokemon::g2_caughtDataLevel = {0x1D, 6, 0}, - Gen2Pokemon::g2_caughtDataGender = {0x1E, 1, 7}, - Gen2Pokemon::g2_caughtDataLocation = {0x1E, 7, 0}; \ No newline at end of file diff --git a/source/pccs/Gen3Pokemon.cpp b/source/pccs/Gen3Pokemon.cpp deleted file mode 100644 index 75beb28..0000000 --- a/source/pccs/Gen3Pokemon.cpp +++ /dev/null @@ -1,743 +0,0 @@ -#include "Gen3Pokemon.h" - -Gen3Pokemon::Gen3Pokemon(PokemonTables *table) -{ - pokeTable = table; - dataArrayPtr = dataArray; - dataArraySize = 80; - nicknameArrayPtr = &dataArray[0x8]; - OTArrayPtr = &dataArray[0x14]; - isBigEndian = false; - isEncrypted = false; - generation = 3; -}; - -bool Gen3Pokemon::convertToGen3(Gen3Pokemon *g3p) -{ - return false; -} - -// This is used to easily print out a Pokemon, when using a standard C++ terminal -#if ON_GBA -#else -void Gen3Pokemon::print(std::ostream &os) -{ - updateChecksum(); - updateSubstructureShift(); - - pokeTable->load_gen3_charset(ENGLISH); - if (!isValid) - { - os << "ERROR: POKEMON IS INVALID\n"; - } - else - { - os - << "Personality Value: " << std::hex << getPersonalityValue() << std::dec - << "\n\tLetter: " << (int)getUnownLetter() - << "\n\tNature: " << getNature() - << "\n\tGender: " << getGender() << '\n' - << "Trainer ID: " << getTrainerID() << "\n" - << "Secret ID: " << getSecretID() << "\n" - << "Nickname: ["; - - for (int i = 0; i < 10; i++) - { - os << "0x" << std::setfill('0') << std::setw(2) << std::right << std::hex << (int)getNicknameLetter(i) << (i < 9 ? ", " : ""); - } - - os << "] ("; - - for (int i = 0; i < 10; i++) - { - os << (char)(pokeTable->gen3_charset[(int)getNicknameLetter(i)]); - } - - os << ")" << "\n" - << "Original Trainer: ["; - - for (int i = 0; i < 7; i++) - { - os << "0x" << std::setfill('0') << std::setw(2) << std::right << std::hex << (int)getOTLetter(i) << (i < 6 ? ", " : ""); - } - - os << "] ("; - - for (int i = 0; i < 7; i++) - { - os << (char)(pokeTable->gen3_charset[(int)getOTLetter(i)]); - } - - os << ")" << "\n" - << std::dec - << "Language: " << getLanguage() << "\n" - << "Is Bad Egg: " << getIsBadEgg() << "\n" - << "Has Species: " << getHasSpecies() << "\n" - << "Use Egg Name: " << getUseEggName() << "\n" - << "Block Box RS: " << getBlockBoxRS() << "\n" - << "Markings: " << getMarkings() << "\n" - << "Checksum: " << getChecksum() << "\n" - << "Species Index Number: " << getSpeciesIndexNumber() << "\n" - << "Held Item: " << getHeldItem() << "\n" - << "Experience: " << getExpPoints() << "\n" - << "Friendship: " << getFriendship() << "\n" - << "Stats: " - << "\n\tHP: " << getEV(HP) << " EVs, " << getIV(HP) << " IVs" - << "\n\tAttack: " << getEV(ATTACK) << " EVs, " << getIV(ATTACK) << " IVs" - << "\n\tDefense: " << getEV(DEFENSE) << " EVs, " << getIV(DEFENSE) << " IVs" - << "\n\tSpecial Attack: " << getEV(SPECIAL_ATTACK) << " EVs, " << getIV(SPECIAL_ATTACK) << " IVs" - << "\n\tSpecial Defense: " << getEV(SPECIAL_DEFENSE) << " EVs, " << getIV(SPECIAL_DEFENSE) << " IVs" - << "\n\tSpeed: " << getEV(SPEED) << " EVs, " << getIV(SPEED) << " IVs" << "\n" - << "Contest Stats: " - << "\n\tCoolness: " << getContestCondition(COOLNESS) - << "\n\tBeauty: " << getContestCondition(BEAUTY) - << "\n\tCuteness: " << getContestCondition(CUTENESS) - << "\n\tSmartness: " << getContestCondition(SMARTNESS) - << "\n\tToughness: " << getContestCondition(TOUGHNESS) - << "\n\tSheen: " << getSheen() << "\n" - << "Moves: " - << "\n\t" << getMove(0) << " (" << getPPTotal(0) << " PP, " << getPPUpNum(0) << " PP Ups" << ")" - << "\n\t" << getMove(1) << " (" << getPPTotal(1) << " PP, " << getPPUpNum(1) << " PP Ups" << ")" - << "\n\t" << getMove(2) << " (" << getPPTotal(2) << " PP, " << getPPUpNum(2) << " PP Ups" << ")" - << "\n\t" << getMove(3) << " (" << getPPTotal(3) << " PP, " << getPPUpNum(3) << " PP Ups" << ")" << "\n" - << "Pokerus: " - << "\n\tStrain: " << getPokerusStrain() - << "\n\tDays Remaining: " << getPokerusDaysRemaining() << "\n" - << "Met Location: " << getMetLocation() << "\n" - << "Level Met: " << getLevelMet() << "\n" - << "Game of Origin: " << getGameOfOrigin() << "\n" - << "Pokeball Caught In: " << getPokeballCaughtIn() << "\n" - << "Original Trainer Gender: " << getOriginalTrainerGender() << "\n" - << "Is Egg: " << getIsEgg() << "\n" - << "Ability: " << getAbility() << "\n" - << "Fateful Encounter/Obedience: " << getFatefulEncounterObedience() << "\n" - << "Is Shiny: " << getIsShiny() << "\n" - << "\n" - << "Substructure Perm: " << currSubstructureShift << "\n" - << "Encryption Key: " << std::hex << ((getTrainerID() | getSecretID() << 16) ^ getPersonalityValue()) << std::dec << "\n" - << "Substructure offsets:" - << "\n\tG: " << substructOffsets[SUB_G] - << "\n\tA: " << substructOffsets[SUB_A] - << "\n\tE: " << substructOffsets[SUB_E] - << "\n\tM: " << substructOffsets[SUB_M] - << "\n"; - } -}; -std::string Gen3Pokemon::printDataArray(bool encrypedData) -{ - updateSubstructureShift(); - updateChecksum(); - encryptSubstructures(); - std::stringstream ss; - for (int i = 0; i < 80; i++) - { - ss << std::hex << std::setw(2) << std::setfill('0') << (int)dataArray[i] << (i < 79 ? " " : ""); - } - return ss.str(); -} -#endif - -// Get Nickname is different -// u32 getNickname() {}; -// u32 getOriginalTrainerName() {} - -u32 Gen3Pokemon::getNextRand_u32() -{ - currRand = (0x41C64E6D * currRand) + 0x6073; - // std::cout << "Rolled: " << std::hex << currRand << "\n"; - return currRand; -} - -u32 Gen3Pokemon::getPrevRand_u32() -{ - currRand = (currRand - 24691) * 4005161829; - return currRand; -} - -u16 Gen3Pokemon::getNextRand_u16() -{ - return getNextRand_u32() >> 16; -} - -u16 Gen3Pokemon::getPrevRand_u16() -{ - return getPrevRand_u32() >> 16; -} - -bool Gen3Pokemon::setPersonalityValue(u32 newVal) // Setting the Personality Value should modify some other values as well -{ - bool successful = setVar(personalityValue, newVal); - if (successful) - { - //successful &= setAbility(getPersonalityValue() & 0b1); - } - return successful; -} - -bool Gen3Pokemon::setAbility(u32 newVal) // We need to check if they have two abilities -{ - if (pokeTable->get_num_abilities(getSpeciesIndexNumber()) == 0) - { - newVal = 0; - } - internalAbility = newVal; - return setVar(ability, substructOffsets[SUB_M], newVal); -} - -// This is used to load our data in from an array and mark it as encrypted -void Gen3Pokemon::loadData(byte incomingArray[]) -{ - for (int i = 0; i < dataArraySize; i++) - { - dataArrayPtr[i] = incomingArray[i]; - } - isEncrypted = true; -} - -// And then some general functions -void Gen3Pokemon::decryptSubstructures() -{ - if (isEncrypted) - { - u32 key = (getTrainerID() | getSecretID() << 16) ^ getPersonalityValue(); - for (int i = 0; i < 48; i++) - { - dataArrayPtr[0x20 + i] ^= ((key >> (8 * (i % 4))) & 0xFF); - } - } -}; - -void Gen3Pokemon::encryptSubstructures() -{ - if (!isEncrypted) - { - u32 key = (getTrainerID() | getSecretID() << 16) ^ getPersonalityValue(); - for (int i = 0; i < 48; i++) - { - dataArrayPtr[0x20 + i] ^= ((key >> (8 * (i % 4))) & 0xFF); - } - } -}; - -void Gen3Pokemon::updateChecksum() -{ - bool encryptionState = isEncrypted; - decryptSubstructures(); - int checksum = 0x0000; - for (int i = 0; i < 48; i = i + 2) - { - checksum = checksum + ((dataArrayPtr[0x20 + i + 1] << 8) | dataArrayPtr[0x20 + i]); - } - setChecksum(checksum); - if (encryptionState) - { - encryptSubstructures(); - } -} - -void Gen3Pokemon::updateSubstructureShift() -{ - int structureVal = getPersonalityValue() % 24; - if (structureVal == currSubstructureShift) - { - return; - } - currSubstructureShift = structureVal; - - resetSubstructureShift(); - -#define MAX_LEN 4 - int index = 0; - while (index < MAX_LEN) - { - int len = MAX_LEN - index; - int factorial = 1; - for (int i = 1; i < len; i++) - { - factorial *= i; - } - int swapLoc = (structureVal / factorial) + index; - for (int i = index; i < swapLoc; i++) - { - swapSubstructures(index, (i + 1)); - } - index += 1; - structureVal %= factorial; - } -} - -void Gen3Pokemon::resetSubstructureShift() -{ - for (int currDest = 0; currDest < 4; currDest++) - { - for (int i = 0; i < 4; i++) - { - if ((substructOffsets[i] / 12) == currDest) - { - swapSubstructures(currDest, i); - } - } - } -} - -void Gen3Pokemon::swapSubstructures(int indexOne, int indexTwo) -{ - if (indexOne == indexTwo) - { - return; - } - - byte tempByte; - for (int i = 0; i < 12; i++) - { - tempByte = dataArrayPtr[0x20 + (indexOne * 12) + i]; - dataArrayPtr[0x20 + (indexOne * 12) + i] = dataArrayPtr[0x20 + (indexTwo * 12) + i]; - dataArrayPtr[0x20 + (indexTwo * 12) + i] = tempByte; - } - - int valOne = 0; - int valTwo = 0; - int tempInt; - - for (int i = 0; i < 4; i++) - { - if (substructOffsets[i] == indexOne * 12) - { - valOne = i; - } - if (substructOffsets[i] == indexTwo * 12) - { - valTwo = i; - } - } - tempInt = substructOffsets[valOne]; - substructOffsets[valOne] = substructOffsets[valTwo]; - substructOffsets[valTwo] = tempInt; -} - -void Gen3Pokemon::updateSecurityData() -{ - updateSubstructureShift(); - updateChecksum(); - encryptSubstructures(); -} - -byte Gen3Pokemon::getUnownLetter() -{ - if (getSpeciesIndexNumber() == 201) - { - - u32 personalityValue = getPersonalityValue(); - return ( - ((personalityValue & 0x03000000) >> 18) + - ((personalityValue & 0x00030000) >> 12) + - ((personalityValue & 0x00000300) >> 6) + - ((personalityValue & 0x00000003) >> 0)) % - 28; - } - else - { - return 255; - } -}; - -Nature Gen3Pokemon::getNature() -{ - return (Nature)(getPersonalityValue() % 25); -}; - -Gender Gen3Pokemon::getGender() -{ - byte index = getSpeciesIndexNumber(); - u32 threshold = pokeTable->get_gender_threshold(index, true); - - switch (threshold) - { - case 0: - return MALE; - case 254: - return FEMALE; - case 255: - return GENDERLESS; - default: - if ((getPersonalityValue() & 0xFF) >= threshold) - { - return MALE; - } - return FEMALE; - } -} - -int Gen3Pokemon::getAbilityFromPersonalityValue() -{ - if (internalAbility == 255) - { - return 255; - } - return getPersonalityValue() & 0b1; -} - -int Gen3Pokemon::getSize() -{ - return 255; -} - -bool Gen3Pokemon::getIsShiny() -{ - return (getTrainerID() ^ - getSecretID() ^ - (getPersonalityValue() >> 0 & 0xFFFF) ^ - (getPersonalityValue() >> 16 & 0xFFFF)) < 8; -} - -bool Gen3Pokemon::setNicknameArray(byte nameArr[], int nameArrSize) -{ - for (int i = 0; i < nameArrSize; i++) - { - setNicknameLetter(i, nameArr[i]); - } - return true; -} - -bool Gen3Pokemon::setOTArray(byte otArr[], int otArrSize) -{ - for (int i = 0; i < otArrSize; i++) - { - setOTLetter(i, otArr[i]); - } - return true; -} - -#pragma region -// Since there is only the Pokemon parent class, we can directly define these directly -const DataVarInfo - // All of the data info variables - Gen3Pokemon::personalityValue = - {0x00, 32, 0}, - Gen3Pokemon::trainerID = - {0x04, 16, 0}, - Gen3Pokemon::secretID = - {0x06, 16, 0}, - Gen3Pokemon::nicknameLetterOne = - {0x08, 8, 0}, // This is silly. Change this. - Gen3Pokemon::nicknameLetterTwo = - {0x09, 8, 0}, - Gen3Pokemon::nicknameLetterThree = - {0x0A, 8, 0}, - Gen3Pokemon::nicknameLetterFour = - {0x0B, 8, 0}, - Gen3Pokemon::nicknameLetterFive = - {0x0C, 8, 0}, - Gen3Pokemon::nicknameLetterSix = - {0x0D, 8, 0}, - Gen3Pokemon::nicknameLetterSeven = - {0x0E, 8, 0}, - Gen3Pokemon::nicknameLetterEight = - {0x0F, 8, 0}, - Gen3Pokemon::nicknameLetterNine = - {0x10, 8, 0}, - Gen3Pokemon::nicknameLetterTen = - {0x11, 8, 0}, - Gen3Pokemon::language = - {0x12, 8, 0}, - Gen3Pokemon::isBadEgg = - {0x13, 1, 0}, - Gen3Pokemon::hasSpecies = - {0x13, 1, 1}, - Gen3Pokemon::useEggName = - {0x13, 1, 2}, - Gen3Pokemon::blockBoxRS = - {0x13, 1, 3}, - // Gen3Pokemon::unusedFlags = - // {0x13, 4, 4}, - Gen3Pokemon::originalTrainerNameLetterOne = - {0x14, 8, 0}, // This is also silly. Change this. - Gen3Pokemon::originalTrainerNameLetterTwo = - {0x15, 8, 0}, - Gen3Pokemon::originalTrainerNameLetterThree = - {0x16, 8, 0}, - Gen3Pokemon::originalTrainerNameLetterFour = - {0x17, 8, 0}, - Gen3Pokemon::originalTrainerNameLetterFive = - {0x18, 8, 0}, - Gen3Pokemon::originalTrainerNameLetterSix = - {0x19, 8, 0}, - Gen3Pokemon::originalTrainerNameLetterSeven = - {0x1A, 8, 0}, - Gen3Pokemon::markings = - {0x1B, 4, 0}, - Gen3Pokemon::checksum = - {0x1C, 16, 0}; -// Gen3Pokemon::unknown = -// {0x1E, 16, 0}; - -const DataVarInfo - *Gen3Pokemon::nickname[10] = { - &Gen3Pokemon::nicknameLetterOne, - &Gen3Pokemon::nicknameLetterTwo, - &Gen3Pokemon::nicknameLetterThree, - &Gen3Pokemon::nicknameLetterFour, - &Gen3Pokemon::nicknameLetterFive, - &Gen3Pokemon::nicknameLetterSix, - &Gen3Pokemon::nicknameLetterSeven, - &Gen3Pokemon::nicknameLetterEight, - &Gen3Pokemon::nicknameLetterNine, - &Gen3Pokemon::nicknameLetterTen, -}, - *Gen3Pokemon::originalTrainerName[7] = { - &Gen3Pokemon::originalTrainerNameLetterOne, - &Gen3Pokemon::originalTrainerNameLetterTwo, - &Gen3Pokemon::originalTrainerNameLetterThree, - &Gen3Pokemon::originalTrainerNameLetterFour, - &Gen3Pokemon::originalTrainerNameLetterFive, - &Gen3Pokemon::originalTrainerNameLetterSix, - &Gen3Pokemon::originalTrainerNameLetterSeven, -}; - -// data section G -const DataVarInfo - Gen3Pokemon::speciesIndexNumber = - {0x20 + 0x00, 16, 0}, - Gen3Pokemon::heldItem = - {0x20 + 0x02, 16, 0}, - Gen3Pokemon::expPoints = - {0x20 + 0x04, 32, 0}, - Gen3Pokemon::ppUpNumMoveOne = - {0x20 + 0x08, 2, 0}, - Gen3Pokemon::ppUpNumMoveTwo = - {0x20 + 0x08, 2, 2}, - Gen3Pokemon::ppUpNumMoveThree = - {0x20 + 0x08, 2, 4}, - Gen3Pokemon::ppUpNumMoveFour = - {0x20 + 0x08, 2, 6}, - Gen3Pokemon::friendship = - {0x20 + 0x09, 8, 0}; -// Gen3Pokemon::unused = -// {0x20 + 0x0A, 16, 0}; -const DataVarInfo - *Gen3Pokemon::ppUpNums[4] = { - &Gen3Pokemon::ppUpNumMoveOne, - &Gen3Pokemon::ppUpNumMoveTwo, - &Gen3Pokemon::ppUpNumMoveThree, - &Gen3Pokemon::ppUpNumMoveFour, -}; - -// data section A -const DataVarInfo - Gen3Pokemon::moveOne = - {0x20 + 0x00, 16, 0}, - Gen3Pokemon::moveTwo = - {0x20 + 0x02, 16, 0}, - Gen3Pokemon::moveThree = - {0x20 + 0x04, 16, 0}, - Gen3Pokemon::moveFour = - {0x20 + 0x06, 16, 0}, - Gen3Pokemon::moveOnePP = - {0x20 + 0x08, 8, 0}, - Gen3Pokemon::moveTwoPP = - {0x20 + 0x09, 8, 0}, - Gen3Pokemon::moveThreePP = - {0x20 + 0x0A, 8, 0}, - Gen3Pokemon::moveFourPP = - {0x20 + 0x0B, 8, 0}; -const DataVarInfo - *Gen3Pokemon::moves[4] = { - &Gen3Pokemon::moveOne, - &Gen3Pokemon::moveTwo, - &Gen3Pokemon::moveThree, - &Gen3Pokemon::moveFour, -}, - *Gen3Pokemon::ppUpTotals[4] = { - &Gen3Pokemon::moveOnePP, - &Gen3Pokemon::moveTwoPP, - &Gen3Pokemon::moveThreePP, - &Gen3Pokemon::moveFourPP, -}; - -// data section E -const DataVarInfo - Gen3Pokemon::hpEVs = - {0x20 + 0x00, 8, 0}, - Gen3Pokemon::attackEVs = - {0x20 + 0x01, 8, 0}, - Gen3Pokemon::defenseEVs = - {0x20 + 0x02, 8, 0}, - Gen3Pokemon::speedEVs = - {0x20 + 0x03, 8, 0}, - Gen3Pokemon::specialAttackEVs = - {0x20 + 0x04, 8, 0}, - Gen3Pokemon::specialDefenseEVs = - {0x20 + 0x05, 8, 0}, - Gen3Pokemon::coolnessCondition = - {0x20 + 0x06, 8, 0}, - Gen3Pokemon::beautyCondition = - {0x20 + 0x07, 8, 0}, - Gen3Pokemon::cutenessCondition = - {0x20 + 0x08, 8, 0}, - Gen3Pokemon::smartnessCondition = - {0x20 + 0x09, 8, 0}, - Gen3Pokemon::toughnessCondition = - {0x20 + 0x0A, 8, 0}, - Gen3Pokemon::sheen = - {0x20 + 0x0B, 8, 0}; - -const DataVarInfo - *Gen3Pokemon::EVs[6] = { - &Gen3Pokemon::hpEVs, - &Gen3Pokemon::attackEVs, - &Gen3Pokemon::defenseEVs, - &Gen3Pokemon::speedEVs, - &Gen3Pokemon::specialAttackEVs, - &Gen3Pokemon::specialDefenseEVs, -}, - *Gen3Pokemon::contestConditions[5] = { - &Gen3Pokemon::coolnessCondition, - &Gen3Pokemon::beautyCondition, - &Gen3Pokemon::cutenessCondition, - &Gen3Pokemon::smartnessCondition, - &Gen3Pokemon::toughnessCondition, -}; - -const DataVarInfo - - // data section M - Gen3Pokemon::pokerusStrain = - {0x20 + 0x00, 4, 0}, - Gen3Pokemon::pokerusDaysRemaining = - {0x20 + 0x00, 4, 4}, - Gen3Pokemon::metLocation = - {0x20 + 0x01, 8, 0}, - Gen3Pokemon::levelMet = - {0x20 + 0x02, 7, 0}, - Gen3Pokemon::gameOfOrigin = - {0x20 + 0x02, 4, 7}, - Gen3Pokemon::pokeballCaughtIn = - {0x20 + 0x02, 4, 11}, - Gen3Pokemon::originalTrainerGender = - {0x20 + 0x02, 1, 15}, - Gen3Pokemon::hpIVs = - {0x20 + 0x04, 5, 0}, - Gen3Pokemon::attackIVs = - {0x20 + 0x04, 5, 5}, - Gen3Pokemon::defenseIVs = - {0x20 + 0x04, 5, 10}, - Gen3Pokemon::speedIVs = - {0x20 + 0x04, 5, 15}, - Gen3Pokemon::specialAttackIVs = - {0x20 + 0x04, 5, 20}, - Gen3Pokemon::specialDefenseIVs = - {0x20 + 0x04, 5, 25}, - Gen3Pokemon::isEgg = - {0x20 + 0x04, 1, 30}, - Gen3Pokemon::ability = - {0x20 + 0x04, 1, 31}, - Gen3Pokemon::coolNormalContestRibbon = - {0x20 + 0x08, 1, 0}, // This is also very silly. Change it. - Gen3Pokemon::coolSuperContestRibbon = - {0x20 + 0x08, 1, 0}, - Gen3Pokemon::coolHyperContestRibbon = - {0x20 + 0x08, 1, 1}, - Gen3Pokemon::coolMasterContestRibbon = - {0x20 + 0x08, 1, 2}, - Gen3Pokemon::beautyNormalContestRibbon = - {0x20 + 0x08, 1, 3}, - Gen3Pokemon::beautySuperContestRibbon = - {0x20 + 0x08, 1, 4}, - Gen3Pokemon::beautyHyperContestRibbon = - {0x20 + 0x08, 1, 5}, - Gen3Pokemon::beautyMasterContestRibbon = - {0x20 + 0x08, 1, 6}, - Gen3Pokemon::cuteNormalContestRibbon = - {0x20 + 0x08, 1, 7}, - Gen3Pokemon::cuteSuperContestRibbon = - {0x20 + 0x08, 1, 8}, - Gen3Pokemon::cuteHyperContestRibbon = - {0x20 + 0x08, 1, 9}, - Gen3Pokemon::cuteMasterContestRibbon = - {0x20 + 0x08, 1, 10}, - Gen3Pokemon::smartNormalContestRibbon = - {0x20 + 0x08, 1, 11}, - Gen3Pokemon::smartSuperContestRibbon = - {0x20 + 0x08, 1, 12}, - Gen3Pokemon::smartHyperContestRibbon = - {0x20 + 0x08, 1, 13}, - Gen3Pokemon::smartMasterContestRibbon = - {0x20 + 0x08, 1, 14}, - Gen3Pokemon::toughNormalContestRibbon = - {0x20 + 0x08, 1, 15}, - Gen3Pokemon::toughSuperContestRibbon = - {0x20 + 0x08, 1, 16}, - Gen3Pokemon::toughHyperContestRibbon = - {0x20 + 0x08, 1, 17}, - Gen3Pokemon::toughMasterContestRibbon = - {0x20 + 0x08, 1, 18}, - Gen3Pokemon::championRibbon = - {0x20 + 0x08, 1, 19}, - Gen3Pokemon::winningRibbon = - {0x20 + 0x08, 1, 20}, - Gen3Pokemon::victoryRibbon = - {0x20 + 0x08, 1, 21}, - Gen3Pokemon::artistRibbon = - {0x20 + 0x08, 1, 22}, - Gen3Pokemon::effortRibbon = - {0x20 + 0x08, 1, 23}, - Gen3Pokemon::battleChampionRibbon = - {0x20 + 0x08, 1, 24}, - Gen3Pokemon::regionalChampionRibbon = - {0x20 + 0x08, 1, 25}, - Gen3Pokemon::nationalChampionRibbon = - {0x20 + 0x08, 1, 26}, - Gen3Pokemon::countryRibbon = - {0x20 + 0x08, 1, 27}, - Gen3Pokemon::nationalRibbon = - {0x20 + 0x08, 1, 28}, - Gen3Pokemon::earthRibbon = - {0x20 + 0x08, 1, 29}, - Gen3Pokemon::unusedRibbons = - {0x20 + 0x08, 1, 30}, - Gen3Pokemon::fatefulEncounterObedience = - {0x20 + 0x08, 1, 31}; - -const DataVarInfo - *Gen3Pokemon::IVs[6] = { - &Gen3Pokemon::hpIVs, - &Gen3Pokemon::attackIVs, - &Gen3Pokemon::defenseIVs, - &Gen3Pokemon::speedIVs, - &Gen3Pokemon::specialAttackIVs, - &Gen3Pokemon::specialDefenseIVs, -}, - *Gen3Pokemon::ribbons[31] = { - &Gen3Pokemon::coolNormalContestRibbon, - &Gen3Pokemon::coolSuperContestRibbon, - &Gen3Pokemon::coolHyperContestRibbon, - &Gen3Pokemon::coolMasterContestRibbon, - &Gen3Pokemon::beautyNormalContestRibbon, - &Gen3Pokemon::beautySuperContestRibbon, - &Gen3Pokemon::beautyHyperContestRibbon, - &Gen3Pokemon::beautyMasterContestRibbon, - &Gen3Pokemon::cuteNormalContestRibbon, - &Gen3Pokemon::cuteSuperContestRibbon, - &Gen3Pokemon::cuteHyperContestRibbon, - &Gen3Pokemon::cuteMasterContestRibbon, - &Gen3Pokemon::smartNormalContestRibbon, - &Gen3Pokemon::smartSuperContestRibbon, - &Gen3Pokemon::smartHyperContestRibbon, - &Gen3Pokemon::smartMasterContestRibbon, - &Gen3Pokemon::toughNormalContestRibbon, - &Gen3Pokemon::toughSuperContestRibbon, - &Gen3Pokemon::toughHyperContestRibbon, - &Gen3Pokemon::toughMasterContestRibbon, - &Gen3Pokemon::championRibbon, - &Gen3Pokemon::winningRibbon, - &Gen3Pokemon::victoryRibbon, - &Gen3Pokemon::artistRibbon, - &Gen3Pokemon::effortRibbon, - &Gen3Pokemon::battleChampionRibbon, - &Gen3Pokemon::regionalChampionRibbon, - &Gen3Pokemon::nationalChampionRibbon, - &Gen3Pokemon::countryRibbon, - &Gen3Pokemon::nationalRibbon, - &Gen3Pokemon::earthRibbon, -}; -#pragma endregion \ No newline at end of file diff --git a/source/pccs/PokeBox.cpp b/source/pccs/PokeBox.cpp deleted file mode 100644 index b9b428b..0000000 --- a/source/pccs/PokeBox.cpp +++ /dev/null @@ -1,165 +0,0 @@ -#include "PokeBox.h" -#include - -#if ON_GBA -#include "global_frame_controller.h" -#include "text_engine.h" -#endif - -PokeBox::PokeBox() -{ - nullMon = new Pokemon(); -} - -PokeBox::PokeBox(PokemonTables *nTable) -{ - table = nTable; -} - -void PokeBox::setTable(PokemonTables *nTable) -{ - table = nTable; -} - -bool PokeBox::addPokemon(Pokemon *currPkmn) -{ - if (currIndex < 30) - { - boxStorage[currIndex] = currPkmn; - currIndex++; - return true; - } - return false; -} - -Pokemon *PokeBox::getPokemon(int index) -{ - if (index < currIndex) - { - return boxStorage[index]; - } - return nullMon; -} - -GBPokemon *PokeBox::getGBPokemon(int index) -{ - Pokemon *currPkmn = getPokemon(index); - GBPokemon *currGBPkmn = (GBPokemon *)currPkmn; - return currGBPkmn; -} - -Gen3Pokemon *PokeBox::getGen3Pokemon(int index) -{ - Pokemon *currPkmn = getPokemon(index); - Gen3Pokemon *currGen3Pkmn = (Gen3Pokemon *)currPkmn; - currGen3Pkmn->updateSecurityData(); - return currGen3Pkmn; -} - -bool PokeBox::removePokemon(int index) -{ - if (index < currIndex) - { - for (int i = index; i < currIndex; i++) - { - boxStorage[i] = boxStorage[i + 1]; - } - currIndex -= 1; - return true; - } - return false; -} - -// This is used to load our data in from an array -void PokeBox::loadData(int generation, Language nLang, byte nDataArray[]) -{ - if (nLang != ENGLISH) - { - return; // Other languages are not supported yet - } - for (int pkmnIndex = 0; pkmnIndex < nDataArray[0]; pkmnIndex++) - { - GBPokemon *newPkmn = nullptr; - if (generation == 1) - { - newPkmn = new Gen1Pokemon(table); - } - else if (generation == 2) - { - newPkmn = new Gen2Pokemon(table); - } - - int externalIDOffset = 1; - int dataOffset = externalIDOffset + (20 * 1) + 1; - int trainerNameOffset = dataOffset + (20 * newPkmn->dataArraySize); - int nicknameOffset = trainerNameOffset + (20 * newPkmn->OTArraySize); - - externalIDOffset += pkmnIndex * 1; - dataOffset += pkmnIndex * newPkmn->dataArraySize; - trainerNameOffset += pkmnIndex * newPkmn->OTArraySize; - nicknameOffset += pkmnIndex * newPkmn->nicknameArraySize; - - newPkmn->loadData( - nLang, - &nDataArray[dataOffset], // Pokemon Data - &nDataArray[nicknameOffset], // Nickname - &nDataArray[trainerNameOffset], // Trainer Name - nDataArray[externalIDOffset] // External ID Number - ); - - addPokemon(newPkmn); - } -} - -void PokeBox::convertPkmn(int index) -{ - Gen3Pokemon *convertedPkmn = new Gen3Pokemon(table); - Pokemon *basePkmn = getPokemon(index); - GBPokemon *oldPkmn = (GBPokemon *)(basePkmn); - - oldPkmn->convertToGen3(convertedPkmn, stabilize_mythical); - delete boxStorage[index]; - boxStorage[index] = convertedPkmn; -} - -void PokeBox::convertAll() -{ - for (int i = 0; i < currIndex; i++) - { - convertPkmn(i); - } -} - -int PokeBox::getNumInBox() -{ - return currIndex; -} - -int PokeBox::getNumValid() -{ - int numValid = 0; - for (int i = 0; i < currIndex; i++) - { - if (getPokemon(i)->isValid) - { - numValid++; - } - } - return numValid; -} - -#if ON_GBA -#else -std::string PokeBox::printDataArray() -{ - std::stringstream ss; - for (int i = 0; i < currIndex; i++) - { - if (boxStorage[i]->generation == 3) - { - ss << ((Gen3Pokemon *)boxStorage[i])->printDataArray(true) << "\n"; - } - } - return ss.str(); -} -#endif \ No newline at end of file diff --git a/source/pccs/Pokemon.cpp b/source/pccs/Pokemon.cpp deleted file mode 100644 index 4115ead..0000000 --- a/source/pccs/Pokemon.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include "Pokemon.h" - -Pokemon::Pokemon() -{ - isValid = false; -} - -u32 Pokemon::getSpeciesIndexNumber() -{ - return 0; -} - -u32 Pokemon::getVar(DataVarInfo dataVar) -{ - return getVar(dataVar, 0); -} - -u32 Pokemon::getVar(DataVarInfo dataVar, int extraByteOffset) -{ - u32 out = 0; - if (dataVar.dataLength < 8) - { // is less than a byte, do bitwise stuff on a single byte - // ... but we can't assume that the data is within a single byte (thanks gen 3) - if (dataVar.dataLength + dataVar.bitOffset > 8) - { - int numBytes = (dataVar.dataLength + dataVar.bitOffset) / 8 + 1; - if (numBytes > 4) - { - numBytes = 4; // This avoids importing math for rounding. Silly though. - } - int arrayIndex; - for (int i = 0; i < numBytes; i++) - { - arrayIndex = (isBigEndian ? i : numBytes - (i + 1)); - out = (out << 8) | dataArrayPtr[dataVar.byteOffset + extraByteOffset + arrayIndex]; - } - out = (out >> dataVar.bitOffset) & sizeToMask(dataVar.dataLength); - } - else - { - out = (dataArrayPtr[dataVar.byteOffset + extraByteOffset] >> dataVar.bitOffset) & sizeToMask(dataVar.dataLength); - } - } - else - { // is larger than a byte, will have to access multiple parts of the array - int numBytes = dataVar.dataLength / 8; - int arrayIndex; - for (int i = 0; i < numBytes; i++) - { - arrayIndex = (isBigEndian ? i : numBytes - (i + 1)); - out = (out << 8) | dataArrayPtr[dataVar.byteOffset + extraByteOffset + arrayIndex]; - } - } - return out; -} - -bool Pokemon::setVar(DataVarInfo dataVar, u32 newValue) -{ - return setVar(dataVar, 0, newValue); -} - -bool Pokemon::setVar(DataVarInfo dataVar, int extraByteOffset, u32 newValue) -{ - if (dataVar.dataLength < 8) - { // is less than a byte, do bitwise stuff on a single byte - // ... but we can't assume that the data is within a single byte (thanks gen 3) - if (dataVar.dataLength + dataVar.bitOffset > 8) - { - int numBytes = (dataVar.dataLength + dataVar.bitOffset) / 8 + 1; - if (numBytes > 4) - { - numBytes = 4; // This avoids importing math for rounding. Silly though. - } - int arrayIndex; - for (int i = 0; i < numBytes; i++) - { - arrayIndex = (isBigEndian ? i : numBytes - (i + 1)); - dataArrayPtr[dataVar.byteOffset + arrayIndex + extraByteOffset] &= ~((sizeToMask(dataVar.dataLength) << dataVar.bitOffset) >> (arrayIndex * 8)); - dataArrayPtr[dataVar.byteOffset + arrayIndex + extraByteOffset] |= ((newValue & sizeToMask(dataVar.dataLength)) << dataVar.bitOffset) >> (arrayIndex * 8); - } - } - else - { - dataArrayPtr[dataVar.byteOffset + extraByteOffset] &= ~(sizeToMask(dataVar.dataLength) << dataVar.bitOffset); - dataArrayPtr[dataVar.byteOffset + extraByteOffset] |= (newValue & sizeToMask(dataVar.dataLength)) << dataVar.bitOffset; - } - } - else - { // is larger than a byte, will have to access multiple parts of the array - int numBytes = dataVar.dataLength / 8; - int arrayIndex; - for (int i = 0; i < numBytes; i++) - { - arrayIndex = (isBigEndian ? i : numBytes - (i + 1)); - dataArrayPtr[dataVar.byteOffset + arrayIndex + extraByteOffset] = (newValue >> (8 * ((numBytes - 1) - i))); - } - } - return true; -} \ No newline at end of file diff --git a/source/pccs/pokemon_data.cpp b/source/pccs/pokemon_data.cpp deleted file mode 100644 index d2c3263..0000000 --- a/source/pccs/pokemon_data.cpp +++ /dev/null @@ -1,3573 +0,0 @@ -#include "pokemon_data.h" -#include - -#if USE_COMPRESSED_DATA -#include "EXP_GROUPS_lz10_bin.h" -#include "GENDER_RATIO_lz10_bin.h" -#include "NUM_ABILITIES_lz10_bin.h" -#include "FIRST_MOVES_lz10_bin.h" -#include "POWER_POINTS_lz10_bin.h" -#include "EVENT_PKMN_lz10_bin.h" -#include "TYPES_lz10_bin.h" -#include "gen_1_charsets_lz10_bin.h" -#include "gen_2_charsets_lz10_bin.h" -#include "gen_3_charsets_lz10_bin.h" -#include -#endif - -// All data was obtained using PokeAPI -// This data won't compress very well with ZX0 (only 1 byte reduction), so we leave it uncompressed. -const byte gen_1_index_array[191]{ - 0x00, // Offset the list to remove "off by one" errors - 0x70, // Rhydon - 0x73, // Kangaskhan - 0x20, // Nidoran♂ - 0x23, // Clefairy - 0x15, // Spearow - 0x64, // Voltorb - 0x22, // Nidoking - 0x50, // Slowbro - 0x02, // Ivysaur - 0x67, // Exeggutor - 0x6C, // Lickitung - 0x66, // Exeggcute - 0x58, // Grimer - 0x5E, // Gengar - 0x1D, // Nidoran♀ - 0x1F, // Nidoqueen - 0x68, // Cubone - 0x6F, // Rhyhorn - 0x83, // Lapras - 0x3B, // Arcanine - 0x97, // Mew - 0x82, // Gyarados - 0x5A, // Shellder - 0x48, // Tentacool - 0x5C, // Gastly - 0x7B, // Scyther - 0x78, // Staryu - 0x09, // Blastoise - 0x7F, // Pinsir - 0x72, // Tangela - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0x3A, // Growlithe - 0x5F, // Onix - 0x16, // Fearow - 0x10, // Pidgey - 0x4F, // Slowpoke - 0x40, // Kadabra - 0x4B, // Graveler - 0x71, // Chansey - 0x43, // Machoke - 0x7A, // Mr. Mime - 0x6A, // Hitmonlee - 0x6B, // Hitmonchan - 0x18, // Arbok - 0x2F, // Parasect - 0x36, // Psyduck - 0x60, // Drowzee - 0x4C, // Golem - 0xFF, // MissingNo. - 0x7E, // Magmar - 0xFF, // MissingNo. - 0x7D, // Electabuzz - 0x52, // Magneton - 0x6D, // Koffing - 0xFF, // MissingNo. - 0x38, // Mankey - 0x56, // Seel - 0x32, // Diglett - 0x80, // Tauros - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0x53, // Farfetch'd - 0x30, // Venonat - 0x95, // Dragonite - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0x54, // Doduo - 0x3C, // Poliwag - 0x7C, // Jynx - 0x92, // Moltres - 0x90, // Articuno - 0x91, // Zapdos - 0x84, // Ditto - 0x34, // Meowth - 0x62, // Krabby - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0x25, // Vulpix - 0x26, // Ninetales - 0x19, // Pikachu - 0x1A, // Raichu - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0x93, // Dratini - 0x94, // Dragonair - 0x8C, // Kabuto - 0x8D, // Kabutops - 0x74, // Horsea - 0x75, // Seadra - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0x1B, // Sandshrew - 0x1C, // Sandslash - 0x8A, // Omanyte - 0x8B, // Omastar - 0x27, // Jigglypuff - 0x28, // Wigglytuff - 0x85, // Eevee - 0x88, // Flareon - 0x87, // Jolteon - 0x86, // Vaporeon - 0x42, // Machop - 0x29, // Zubat - 0x17, // Ekans - 0x2E, // Paras - 0x3D, // Poliwhirl - 0x3E, // Poliwrath - 0x0D, // Weedle - 0x0E, // Kakuna - 0x0F, // Beedrill - 0xFF, // MissingNo. - 0x55, // Dodrio - 0x39, // Primeape - 0x33, // Dugtrio - 0x31, // Venomoth - 0x57, // Dewgong - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0x0A, // Caterpie - 0x0B, // Metapod - 0x0C, // Butterfree - 0x44, // Machamp - 0xFF, // MissingNo. - 0x37, // Golduck - 0x61, // Hypno - 0x2A, // Golbat - 0x96, // Mewtwo - 0x8F, // Snorlax - 0x81, // Magikarp - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0x59, // Muk - 0xFF, // MissingNo. - 0x63, // Kingler - 0x5B, // Cloyster - 0xFF, // MissingNo. - 0x65, // Electrode - 0x24, // Clefable - 0x6E, // Weezing - 0x35, // Persian - 0x69, // Marowak - 0xFF, // MissingNo. - 0x5D, // Haunter - 0x3F, // Abra - 0x41, // Alakazam - 0x11, // Pidgeotto - 0x12, // Pidgeot - 0x79, // Starmie - 0x01, // Bulbasaur - 0x03, // Venusaur - 0x49, // Tentacruel - 0xFF, // MissingNo. - 0x76, // Goldeen - 0x77, // Seaking - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0x4D, // Ponyta - 0x4E, // Rapidash - 0x13, // Rattata - 0x14, // Raticate - 0x21, // Nidorino - 0x1E, // Nidorina - 0x4A, // Geodude - 0x89, // Porygon - 0x8E, // Aerodactyl - 0xFF, // MissingNo. - 0x51, // Magnemite - 0xFF, // MissingNo. - 0xFF, // MissingNo. - 0x04, // Charmander - 0x07, // Squirtle - 0x05, // Charmeleon - 0x08, // Wartortle - 0x06, // Charizard - 0xFF, // MissingNo. - 0xFF, // Kabutops Fossil MissingNo. - 0xFF, // Aerodactyl Fossil MissingNo. - 0xFF, // Ghost MissingNo. - 0x2B, // Oddish - 0x2C, // Gloom - 0x2D, // Vileplume - 0x45, // Bellsprout - 0x46, // Weepinbell - 0x47, // Victreebel -}; - -// Indexes found here: https://bulbapedia.bulbagarden.net/wiki/Experience#In_the_core_series -const u32 EXP_MAXIMUMS[6]{ - med_fast_max, - 0, // erratic_max - 0, // flux_max - med_slow_max, - fast_max, - slow_max}; - -const int GENDER_THRESHOLDS[2][8]{ - {-1, 2, 4, 8, 12, 14, -1, -1}, - {-1, 31, 63, 127, 191, 225, -1, -1}}; - -// The EVOLUTIONS table won't compress well with ZX0 (it would only save 12 bytes), so it's not worth the -// decompression runtime cost. Therefore we leave it uncompressed. -const u8 EVOLUTIONS[POKEMON_ARRAY_SIZE]{ - 0, // Offset the list to remove "off by one" errors - 0x0, // Bulbasaur is a base evolution - 0x1, // Ivysaur evolves from Bulbasaur - 0x2, // Venusaur evolves from Ivysaur - 0x0, // Charmander is a base evolution - 0x4, // Charmeleon evolves from Charmander - 0x5, // Charizard evolves from Charmeleon - 0x0, // Squirtle is a base evolution - 0x7, // Wartortle evolves from Squirtle - 0x8, // Blastoise evolves from Wartortle - 0x0, // Caterpie is a base evolution - 0xa, // Metapod evolves from Caterpie - 0xb, // Butterfree evolves from Metapod - 0x0, // Weedle is a base evolution - 0xd, // Kakuna evolves from Weedle - 0xe, // Beedrill evolves from Kakuna - 0x0, // Pidgey is a base evolution - 0x10, // Pidgeotto evolves from Pidgey - 0x11, // Pidgeot evolves from Pidgeotto - 0x0, // Rattata is a base evolution - 0x13, // Raticate evolves from Rattata - 0x0, // Spearow is a base evolution - 0x15, // Fearow evolves from Spearow - 0x0, // Ekans is a base evolution - 0x17, // Arbok evolves from Ekans - 0xac, // Pikachu evolves from Pichu - 0x19, // Raichu evolves from Pikachu - 0x0, // Sandshrew is a base evolution - 0x1b, // Sandslash evolves from Sandshrew - 0x0, // Nidoran-f is a base evolution - 0x1d, // Nidorina evolves from Nidoran-f - 0x1e, // Nidoqueen evolves from Nidorina - 0x0, // Nidoran-m is a base evolution - 0x20, // Nidorino evolves from Nidoran-m - 0x21, // Nidoking evolves from Nidorino - 0xad, // Clefairy evolves from Cleffa - 0x23, // Clefable evolves from Clefairy - 0x0, // Vulpix is a base evolution - 0x25, // Ninetales evolves from Vulpix - 0xae, // Jigglypuff evolves from Igglybuff - 0x27, // Wigglytuff evolves from Jigglypuff - 0x0, // Zubat is a base evolution - 0x29, // Golbat evolves from Zubat - 0x0, // Oddish is a base evolution - 0x2b, // Gloom evolves from Oddish - 0x2c, // Vileplume evolves from Gloom - 0x0, // Paras is a base evolution - 0x2e, // Parasect evolves from Paras - 0x0, // Venonat is a base evolution - 0x30, // Venomoth evolves from Venonat - 0x0, // Diglett is a base evolution - 0x32, // Dugtrio evolves from Diglett - 0x0, // Meowth is a base evolution - 0x34, // Persian evolves from Meowth - 0x0, // Psyduck is a base evolution - 0x36, // Golduck evolves from Psyduck - 0x0, // Mankey is a base evolution - 0x38, // Primeape evolves from Mankey - 0x0, // Growlithe is a base evolution - 0x3a, // Arcanine evolves from Growlithe - 0x0, // Poliwag is a base evolution - 0x3c, // Poliwhirl evolves from Poliwag - 0x3d, // Poliwrath evolves from Poliwhirl - 0x0, // Abra is a base evolution - 0x3f, // Kadabra evolves from Abra - 0x40, // Alakazam evolves from Kadabra - 0x0, // Machop is a base evolution - 0x42, // Machoke evolves from Machop - 0x43, // Machamp evolves from Machoke - 0x0, // Bellsprout is a base evolution - 0x45, // Weepinbell evolves from Bellsprout - 0x46, // Victreebel evolves from Weepinbell - 0x0, // Tentacool is a base evolution - 0x48, // Tentacruel evolves from Tentacool - 0x0, // Geodude is a base evolution - 0x4a, // Graveler evolves from Geodude - 0x4b, // Golem evolves from Graveler - 0x0, // Ponyta is a base evolution - 0x4d, // Rapidash evolves from Ponyta - 0x0, // Slowpoke is a base evolution - 0x4f, // Slowbro evolves from Slowpoke - 0x0, // Magnemite is a base evolution - 0x51, // Magneton evolves from Magnemite - 0x0, // Farfetchd is a base evolution - 0x0, // Doduo is a base evolution - 0x54, // Dodrio evolves from Doduo - 0x0, // Seel is a base evolution - 0x56, // Dewgong evolves from Seel - 0x0, // Grimer is a base evolution - 0x58, // Muk evolves from Grimer - 0x0, // Shellder is a base evolution - 0x5a, // Cloyster evolves from Shellder - 0x0, // Gastly is a base evolution - 0x5c, // Haunter evolves from Gastly - 0x5d, // Gengar evolves from Haunter - 0x0, // Onix is a base evolution - 0x0, // Drowzee is a base evolution - 0x60, // Hypno evolves from Drowzee - 0x0, // Krabby is a base evolution - 0x62, // Kingler evolves from Krabby - 0x0, // Voltorb is a base evolution - 0x64, // Electrode evolves from Voltorb - 0x0, // Exeggcute is a base evolution - 0x66, // Exeggutor evolves from Exeggcute - 0x0, // Cubone is a base evolution - 0x68, // Marowak evolves from Cubone - 0xec, // Hitmonlee evolves from Tyrogue - 0xec, // Hitmonchan evolves from Tyrogue - 0x0, // Lickitung is a base evolution - 0x0, // Koffing is a base evolution - 0x6d, // Weezing evolves from Koffing - 0x0, // Rhyhorn is a base evolution - 0x6f, // Rhydon evolves from Rhyhorn - 0x0, // Chansey is a base evolution (in gen 2) - 0x0, // Tangela is a base evolution - 0x0, // Kangaskhan is a base evolution - 0x0, // Horsea is a base evolution - 0x74, // Seadra evolves from Horsea - 0x0, // Goldeen is a base evolution - 0x76, // Seaking evolves from Goldeen - 0x0, // Staryu is a base evolution - 0x78, // Starmie evolves from Staryu - 0x0, // Mr-mime is a base evolution (in gen 2) - 0x0, // Scyther is a base evolution - 0xee, // Jynx evolves from Smoochum - 0xef, // Electabuzz evolves from Elekid - 0xf0, // Magmar evolves from Magby - 0x0, // Pinsir is a base evolution - 0x0, // Tauros is a base evolution - 0x0, // Magikarp is a base evolution - 0x81, // Gyarados evolves from Magikarp - 0x0, // Lapras is a base evolution - 0x0, // Ditto is a base evolution - 0x0, // Eevee is a base evolution - 0x85, // Vaporeon evolves from Eevee - 0x85, // Jolteon evolves from Eevee - 0x85, // Flareon evolves from Eevee - 0x0, // Porygon is a base evolution - 0x0, // Omanyte is a base evolution - 0x8a, // Omastar evolves from Omanyte - 0x0, // Kabuto is a base evolution - 0x8c, // Kabutops evolves from Kabuto - 0x0, // Aerodactyl is a base evolution - 0x0, // Snorlax is a base evolution (in gen 2) - 0x0, // Articuno is a base evolution - 0x0, // Zapdos is a base evolution - 0x0, // Moltres is a base evolution - 0x0, // Dratini is a base evolution - 0x93, // Dragonair evolves from Dratini - 0x94, // Dragonite evolves from Dragonair - 0x0, // Mewtwo is a base evolution - 0x0, // Mew is a base evolution - 0x0, // Chikorita is a base evolution - 0x98, // Bayleef evolves from Chikorita - 0x99, // Meganium evolves from Bayleef - 0x0, // Cyndaquil is a base evolution - 0x9b, // Quilava evolves from Cyndaquil - 0x9c, // Typhlosion evolves from Quilava - 0x0, // Totodile is a base evolution - 0x9e, // Croconaw evolves from Totodile - 0x9f, // Feraligatr evolves from Croconaw - 0x0, // Sentret is a base evolution - 0xa1, // Furret evolves from Sentret - 0x0, // Hoothoot is a base evolution - 0xa3, // Noctowl evolves from Hoothoot - 0x0, // Ledyba is a base evolution - 0xa5, // Ledian evolves from Ledyba - 0x0, // Spinarak is a base evolution - 0xa7, // Ariados evolves from Spinarak - 0x2a, // Crobat evolves from Golbat - 0x0, // Chinchou is a base evolution - 0xaa, // Lanturn evolves from Chinchou - 0x0, // Pichu is a base evolution - 0x0, // Cleffa is a base evolution - 0x0, // Igglybuff is a base evolution - 0x0, // Togepi is a base evolution - 0xaf, // Togetic evolves from Togepi - 0x0, // Natu is a base evolution - 0xb1, // Xatu evolves from Natu - 0x0, // Mareep is a base evolution - 0xb3, // Flaaffy evolves from Mareep - 0xb4, // Ampharos evolves from Flaaffy - 0x2c, // Bellossom evolves from Gloom - 0x0, // Marill is a base evolution (in gen 2) - 0xb7, // Azumarill evolves from Marill - 0x0, // Sudowoodo is a base evolution (in gen 2) - 0x3d, // Politoed evolves from Poliwhirl - 0x0, // Hoppip is a base evolution - 0xbb, // Skiploom evolves from Hoppip - 0xbc, // Jumpluff evolves from Skiploom - 0x0, // Aipom is a base evolution - 0x0, // Sunkern is a base evolution - 0xbf, // Sunflora evolves from Sunkern - 0x0, // Yanma is a base evolution - 0x0, // Wooper is a base evolution - 0xc2, // Quagsire evolves from Wooper - 0x85, // Espeon evolves from Eevee - 0x85, // Umbreon evolves from Eevee - 0x0, // Murkrow is a base evolution - 0x4f, // Slowking evolves from Slowpoke - 0x0, // Misdreavus is a base evolution - 0x0, // Unown is a base evolution - 0x0, // Wobbuffet is a base evolution (in gen 2) - 0x0, // Girafarig is a base evolution - 0x0, // Pineco is a base evolution - 0xcc, // Forretress evolves from Pineco - 0x0, // Dunsparce is a base evolution - 0x0, // Gligar is a base evolution - 0x5f, // Steelix evolves from Onix - 0x0, // Snubbull is a base evolution - 0xd1, // Granbull evolves from Snubbull - 0x0, // Qwilfish is a base evolution - 0x7b, // Scizor evolves from Scyther - 0x0, // Shuckle is a base evolution - 0x0, // Heracross is a base evolution - 0x0, // Sneasel is a base evolution - 0x0, // Teddiursa is a base evolution - 0xd8, // Ursaring evolves from Teddiursa - 0x0, // Slugma is a base evolution - 0xda, // Magcargo evolves from Slugma - 0x0, // Swinub is a base evolution - 0xdc, // Piloswine evolves from Swinub - 0x0, // Corsola is a base evolution - 0x0, // Remoraid is a base evolution - 0xdf, // Octillery evolves from Remoraid - 0x0, // Delibird is a base evolution - 0x0, // Mantine is a base evolution (in gen 2) - 0x0, // Skarmory is a base evolution - 0x0, // Houndour is a base evolution - 0xe4, // Houndoom evolves from Houndour - 0x75, // Kingdra evolves from Seadra - 0x0, // Phanpy is a base evolution - 0xe7, // Donphan evolves from Phanpy - 0x89, // Porygon2 evolves from Porygon - 0x0, // Stantler is a base evolution - 0x0, // Smeargle is a base evolution - 0x0, // Tyrogue is a base evolution - 0xec, // Hitmontop evolves from Tyrogue - 0x0, // Smoochum is a base evolution - 0x0, // Elekid is a base evolution - 0x0, // Magby is a base evolution - 0x0, // Miltank is a base evolution - 0x71, // Blissey evolves from Chansey - 0x0, // Raikou is a base evolution - 0x0, // Entei is a base evolution - 0x0, // Suicune is a base evolution - 0x0, // Larvitar is a base evolution - 0xf6, // Pupitar evolves from Larvitar - 0xf7, // Tyranitar evolves from Pupitar - 0x0, // Lugia is a base evolution - 0x0, // Ho-oh is a base evolution - 0x0, // Celebi is a base evolution - 0x0, // Treecko is a base evolution -}; - -const byte MOVESETS[POKEMON_ARRAY_SIZE][32]{ - // This data is stored as 32 bytes of binary data per Pokemon, depending on if they can learn the move. Data obtained through PokeAPI - // 0(unused) 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168 176 184 192 200 208 216 224 232 240 248 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // Offset the list to remove "off by one" errors - {0b00000000, 0b00000011, 0b00000010, 0b00000000, 0b01100010, 0b00000100, 0b00000000, 0b00000000, 0b00000010, 0b01111101, 0b10000000, 0b00001000, 0b00000010, 0b10000001, 0b01000000, 0b00000000, 0b00100000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000110, 0b00000010, 0b00001100, 0b00000000, 0b00111001, 0b00100110, 0b10110000, 0b00000010, 0b00010100, 0b01000000, 0b01000000}, // Bulbasaur - {0b00000000, 0b00000011, 0b00000010, 0b00000000, 0b01100010, 0b00000100, 0b00000000, 0b00000000, 0b00000010, 0b01111101, 0b00000000, 0b00001000, 0b00000010, 0b10000001, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00001100, 0b00000000, 0b00110001, 0b00100110, 0b10100000, 0b00000010, 0b00010100, 0b01000000, 0b01000000}, // Ivysaur - {0b00000000, 0b00000011, 0b00000010, 0b00000000, 0b01100010, 0b00000110, 0b00000000, 0b00000001, 0b00000010, 0b01111101, 0b00000000, 0b01001000, 0b00000010, 0b10000001, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00001100, 0b00000000, 0b00110001, 0b00100110, 0b10100000, 0b00000010, 0b00010100, 0b01000000, 0b01000000}, // Venusaur - {0b00000101, 0b00100011, 0b00000000, 0b01000000, 0b00100010, 0b00001100, 0b00001100, 0b00000000, 0b00001110, 0b00000000, 0b00110000, 0b00011000, 0b00010010, 0b10001001, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001100, 0b00011000, 0b00000100, 0b00000010, 0b10010100, 0b00000000, 0b10010001, 0b00100110, 0b10100001, 0b00000001, 0b10000100, 0b01000010, 0b01010000}, // Charmander - {0b00000101, 0b00100011, 0b00000000, 0b01000000, 0b00100010, 0b00000100, 0b00001100, 0b00000000, 0b00001110, 0b00000000, 0b00110000, 0b00011000, 0b00010010, 0b10001001, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001100, 0b00011000, 0b00000100, 0b00000010, 0b10000100, 0b00000000, 0b00010001, 0b00100110, 0b10100001, 0b00000001, 0b10000100, 0b01000000, 0b01000000}, // Charmeleon - {0b00000101, 0b00100011, 0b01010000, 0b01000000, 0b00100010, 0b00000110, 0b00001100, 0b00000001, 0b00001110, 0b00000000, 0b00110000, 0b01011000, 0b00010010, 0b10001001, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001100, 0b00011000, 0b00000100, 0b00000010, 0b10000100, 0b00000000, 0b00010001, 0b00110110, 0b10100001, 0b00000001, 0b10000100, 0b01000000, 0b01000000}, // Charizard - {0b00000100, 0b10000000, 0b00000000, 0b01000000, 0b01100011, 0b00001000, 0b00000011, 0b11110000, 0b00001110, 0b00000000, 0b00000000, 0b00011000, 0b00000010, 0b10000011, 0b00100000, 0b00000001, 0b00100000, 0b00000000, 0b01000000, 0b00001000, 0b00001000, 0b00000101, 0b00000010, 0b00000100, 0b01001000, 0b00010101, 0b00000110, 0b10100001, 0b00000101, 0b00000100, 0b10010000, 0b01000000}, // Squirtle - {0b00000100, 0b10000000, 0b00000000, 0b01000000, 0b01100011, 0b00001000, 0b00000001, 0b11110000, 0b00001110, 0b00000000, 0b00000000, 0b00011000, 0b00000010, 0b10000011, 0b00000000, 0b00000001, 0b00100000, 0b00000000, 0b01000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00001000, 0b00010101, 0b00000110, 0b10100001, 0b00000101, 0b00000100, 0b10000000, 0b01000000}, // Wartortle - {0b00000100, 0b10000000, 0b00000000, 0b01000000, 0b01100011, 0b00001010, 0b00000001, 0b11110001, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000011, 0b00000000, 0b00000001, 0b00100000, 0b00000000, 0b01000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00001000, 0b00010101, 0b00000110, 0b10100001, 0b00000101, 0b00000100, 0b10000000, 0b01000000}, // Blastoise - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // Caterpie - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // Metapod - {0b00000000, 0b00000000, 0b10100000, 0b00000000, 0b00000010, 0b00000000, 0b10000000, 0b00001001, 0b00000000, 0b00001111, 0b00000000, 0b00001110, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b00110001, 0b00000110, 0b10110000, 0b00000000, 0b00000100, 0b11000001, 0b00000000}, // Butterfree - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // Weedle - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // Kakuna - {0b00000000, 0b00000011, 0b00000000, 0b00000001, 0b00000010, 0b01100000, 0b00000000, 0b00000001, 0b00000000, 0b00001000, 0b00000000, 0b00001000, 0b01010010, 0b10000000, 0b00001000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00100110, 0b10100000, 0b00001000, 0b00000100, 0b01000000, 0b01000000}, // Beedrill - {0b00000000, 0b00000000, 0b11110000, 0b00001000, 0b01000010, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b01100010, 0b10000000, 0b00000001, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b01000100, 0b01000000, 0b00010001, 0b00010110, 0b10100000, 0b00001000, 0b00000100, 0b11000000, 0b00000000}, // Pidgey - {0b00000000, 0b00000000, 0b11110000, 0b00001000, 0b01000010, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b01100010, 0b10000000, 0b00000001, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00010110, 0b10100000, 0b00000000, 0b00000100, 0b11000000, 0b00000000}, // Pidgeotto - {0b00000000, 0b00000000, 0b11110000, 0b00001000, 0b01000010, 0b00000000, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b01100010, 0b10000000, 0b00000001, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00010110, 0b10100000, 0b00000000, 0b00000100, 0b11000000, 0b00000000}, // Pidgeot - {0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b01100011, 0b00001000, 0b00000000, 0b00110000, 0b00001000, 0b00000000, 0b00000111, 0b00011000, 0b00100011, 0b10000001, 0b00001000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00101010, 0b00101000, 0b10001100, 0b00010010, 0b00000100, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b00001001, 0b00000100, 0b11000001, 0b01000000}, // Rattata - {0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b01100011, 0b00000010, 0b00000000, 0b00110001, 0b00001010, 0b00000000, 0b00000111, 0b00011000, 0b00100010, 0b10000001, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001010, 0b00101000, 0b10000100, 0b00000010, 0b10000100, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b00001001, 0b00000100, 0b11000001, 0b01000000}, // Raticate - {0b00000000, 0b00000000, 0b00010000, 0b00000001, 0b00000010, 0b00010100, 0b00000000, 0b00000000, 0b11000000, 0b00000000, 0b00000000, 0b00001000, 0b01100010, 0b10000000, 0b00000001, 0b00000000, 0b01000000, 0b00000001, 0b00000000, 0b00001000, 0b01001000, 0b10000100, 0b00000010, 0b11000100, 0b00000000, 0b00010011, 0b00010110, 0b10100000, 0b00001000, 0b00000100, 0b11000000, 0b00000000}, // Spearow - {0b00000000, 0b00000000, 0b00010000, 0b00000001, 0b00000010, 0b00010100, 0b00000000, 0b00000001, 0b11000000, 0b00000000, 0b00000000, 0b00001000, 0b01000010, 0b10000000, 0b00000001, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00010110, 0b10100000, 0b00001000, 0b00000100, 0b11000000, 0b00000000}, // Fearow - {0b00000000, 0b00000000, 0b00000100, 0b00000000, 0b00110010, 0b10011000, 0b00010000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b01011000, 0b00000011, 0b10000000, 0b00100000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00001010, 0b00001000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00001001, 0b00000100, 0b11000000, 0b00010000}, // Ekans - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00110010, 0b10011000, 0b00010000, 0b00000001, 0b00000010, 0b00000000, 0b00000000, 0b01011000, 0b00000011, 0b10000000, 0b00100000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b11000000, 0b00000000}, // Arbok - {0b00000100, 0b01000000, 0b00000100, 0b01000000, 0b00100011, 0b00000100, 0b00000000, 0b00000000, 0b00001110, 0b00000000, 0b00001111, 0b00011000, 0b01100010, 0b10000001, 0b01000000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b00010101, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b10000000, 0b01000000}, // Pikachu - {0b00000100, 0b01000000, 0b00000000, 0b01000000, 0b00100011, 0b00000000, 0b00000000, 0b00000001, 0b00001110, 0b00000000, 0b00001111, 0b00011000, 0b00100010, 0b10000001, 0b01000000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010101, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b10000000, 0b01000000}, // Raichu - {0b00000000, 0b00100011, 0b00000000, 0b00001000, 0b00100010, 0b10000000, 0b00000000, 0b00000000, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000001, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00101100, 0b00011000, 0b10000101, 0b00000010, 0b00000100, 0b00000000, 0b01010101, 0b00100110, 0b10110001, 0b00000101, 0b10000100, 0b01000000, 0b01000000}, // Sandshrew - {0b00000000, 0b00100011, 0b00000000, 0b00001000, 0b00100010, 0b10000000, 0b00000000, 0b00000001, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000001, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00101100, 0b00011000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b01010101, 0b00100110, 0b10100001, 0b00000001, 0b00000100, 0b01000000, 0b01000000}, // Sandslash - {0b00000000, 0b00100001, 0b00000000, 0b10000000, 0b00101011, 0b10001100, 0b10100000, 0b00110000, 0b00001010, 0b00000000, 0b00000101, 0b00011000, 0b00000010, 0b10000001, 0b00001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00101000, 0b00001000, 0b10000100, 0b00000010, 0b00001100, 0b00000000, 0b00011001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b11100000, 0b01010000}, // Nidoran-f - {0b00000000, 0b00100001, 0b00000000, 0b10000000, 0b00100011, 0b10001100, 0b00000000, 0b00110000, 0b00001010, 0b00000000, 0b00000101, 0b00011000, 0b00000010, 0b10000001, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00101000, 0b00001000, 0b10000100, 0b00000010, 0b00001100, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b11100000, 0b01000000}, // Nidorina - {0b00000101, 0b11100001, 0b00000000, 0b11000000, 0b00100011, 0b10000010, 0b00000100, 0b01110001, 0b00001110, 0b00000000, 0b00000101, 0b01011000, 0b00000010, 0b10000001, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00000010, 0b00001100, 0b00001000, 0b01010001, 0b00100110, 0b10100001, 0b00000001, 0b00000100, 0b11000001, 0b01000000}, // Nidoqueen - {0b00000000, 0b00000001, 0b00000000, 0b10000011, 0b10101010, 0b10010000, 0b10100000, 0b00110000, 0b10001010, 0b00000000, 0b00000101, 0b00011100, 0b00000010, 0b10000001, 0b00001000, 0b00000000, 0b00000100, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001100, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b11000000, 0b01010000}, // Nidoran-m - {0b00000000, 0b00000001, 0b00000000, 0b10000011, 0b10100010, 0b10010000, 0b00000000, 0b00110000, 0b10001010, 0b00000000, 0b00000101, 0b00011000, 0b00000010, 0b10000001, 0b00001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001100, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b11000000, 0b01000000}, // Nidorino - {0b00000101, 0b11000001, 0b00000000, 0b11000000, 0b00100110, 0b10000010, 0b00000100, 0b01110001, 0b10001110, 0b00000000, 0b00000101, 0b01011000, 0b00000010, 0b10000001, 0b00001000, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00000010, 0b00001100, 0b00001000, 0b01010001, 0b00100110, 0b10100001, 0b10000001, 0b00000100, 0b11000001, 0b01000000}, // Nidoking - {0b01010101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00000101, 0b00000100, 0b00110000, 0b00001110, 0b00001000, 0b00000111, 0b00011010, 0b00000010, 0b10010001, 0b01010010, 0b00000010, 0b00000001, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b00010101, 0b00000110, 0b10110001, 0b00010001, 0b00001100, 0b11001001, 0b00000000}, // Clefairy - {0b00010101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00000001, 0b00000100, 0b00110001, 0b00001110, 0b00001000, 0b00000111, 0b00011010, 0b00000010, 0b10010001, 0b01010010, 0b00000010, 0b00000001, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b00010101, 0b00000110, 0b10110001, 0b00000001, 0b00000100, 0b11001001, 0b00000000}, // Clefable - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100011, 0b00000010, 0b00101100, 0b00000000, 0b00000000, 0b00000000, 0b00010000, 0b00011001, 0b00100010, 0b10000100, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000101, 0b00001010, 0b01000000, 0b00000000, 0b00010001, 0b00000110, 0b10110000, 0b00000001, 0b00000100, 0b01001000, 0b00000000}, // Vulpix - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100010, 0b00000010, 0b00001100, 0b00000001, 0b00000000, 0b00000000, 0b00010000, 0b00011000, 0b00100010, 0b10000100, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10110000, 0b00000001, 0b00000100, 0b01000000, 0b00000000}, // Ninetales - {0b01010101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00000001, 0b00100100, 0b00110000, 0b00001110, 0b00001000, 0b00000111, 0b00011010, 0b00000010, 0b10000001, 0b01010000, 0b00000010, 0b00000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b00010101, 0b00000110, 0b10110001, 0b00000000, 0b00000100, 0b11001001, 0b00000000}, // Jigglypuff - {0b00010101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00000001, 0b00100100, 0b00110001, 0b00001110, 0b00001000, 0b00000111, 0b00011010, 0b00000010, 0b10000001, 0b01010000, 0b00000010, 0b00000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b00010101, 0b00000110, 0b10110001, 0b00000000, 0b00000100, 0b11001001, 0b00000000}, // Wigglytuff - {0b00000000, 0b00000000, 0b11100000, 0b00000000, 0b00000010, 0b00001000, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00100010, 0b10000100, 0b00100000, 0b00000000, 0b01000000, 0b00000100, 0b00000000, 0b00001000, 0b00001000, 0b10000110, 0b00000010, 0b01001000, 0b00000000, 0b00110001, 0b00011110, 0b10100000, 0b00001000, 0b00000100, 0b11000001, 0b00000000}, // Zubat - {0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000010, 0b00001000, 0b10000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00000011, 0b10000100, 0b00100000, 0b00000000, 0b01000000, 0b00000100, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00011110, 0b10100000, 0b00000000, 0b00000100, 0b11000001, 0b00000000}, // Golbat - {0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00010000, 0b00000000, 0b00000001, 0b00011111, 0b10000000, 0b00001000, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000101, 0b00000010, 0b00001000, 0b00000000, 0b00111001, 0b00000110, 0b10100000, 0b00000010, 0b00011100, 0b01000000, 0b00000000}, // Oddish - {0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00010000, 0b00000000, 0b00000001, 0b00001111, 0b10000000, 0b00001000, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00000010, 0b00001100, 0b01000000, 0b00000000}, // Gloom - {0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b00100010, 0b00000000, 0b00000000, 0b00000001, 0b00000001, 0b10001010, 0b10000000, 0b00001000, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b01000000, 0b00000000}, // Vileplume - {0b00000000, 0b00100011, 0b00000000, 0b00000000, 0b00100010, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00101110, 0b00000000, 0b00011000, 0b00000011, 0b10000000, 0b01000000, 0b00000000, 0b00000000, 0b00000100, 0b00011000, 0b00001000, 0b00011000, 0b10000101, 0b00000010, 0b00001000, 0b00000000, 0b00110011, 0b00100110, 0b10100000, 0b00001010, 0b00000100, 0b01000000, 0b01000000}, // Paras - {0b00000000, 0b00100011, 0b00000000, 0b00000000, 0b00100010, 0b00000000, 0b00000000, 0b00000001, 0b00001000, 0b00101110, 0b00000000, 0b00011000, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000100, 0b00011000, 0b00001000, 0b00011000, 0b10000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00100110, 0b10100000, 0b00000000, 0b00000100, 0b01000000, 0b01000000}, // Parasect - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000010, 0b00000000, 0b10100000, 0b00001000, 0b00000000, 0b00001111, 0b00000000, 0b00001110, 0b00000011, 0b10000000, 0b00000000, 0b00000000, 0b01000000, 0b00000100, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b01000000, 0b00110001, 0b00000110, 0b10100000, 0b00100000, 0b00000100, 0b01000000, 0b00000000}, // Venonat - {0b00000000, 0b00000000, 0b10000000, 0b00000000, 0b01000010, 0b00000000, 0b10100000, 0b00001001, 0b00000000, 0b00001111, 0b00000000, 0b00001110, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b01000000, 0b00000100, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b01000000, 0b00110001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b01000000, 0b00000000}, // Venomoth - {0b00000000, 0b00100001, 0b00000000, 0b00001000, 0b00100010, 0b00000100, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b00000011, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00101100, 0b00011000, 0b10000100, 0b00000010, 0b01001100, 0b00000000, 0b00010001, 0b00000110, 0b10100010, 0b00001000, 0b00000100, 0b01000010, 0b01010000}, // Diglett - {0b00000000, 0b00100001, 0b00000000, 0b00001000, 0b00100010, 0b00000100, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00101100, 0b01011000, 0b10000100, 0b00000010, 0b00001100, 0b00000000, 0b00010001, 0b00000110, 0b10100010, 0b00000000, 0b00000100, 0b01000000, 0b01000000}, // Dugtrio - {0b00000010, 0b00100001, 0b00000000, 0b00000000, 0b00100010, 0b00001100, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000101, 0b00011001, 0b00000011, 0b10000001, 0b00000000, 0b00000000, 0b01000100, 0b00100000, 0b00001000, 0b00101000, 0b00011000, 0b10000100, 0b00001010, 0b01000100, 0b00001000, 0b00011001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b11001001, 0b00000000}, // Meowth - {0b00000010, 0b00100001, 0b00000000, 0b00000000, 0b00100010, 0b00001110, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000101, 0b00011000, 0b00000011, 0b10000001, 0b00000000, 0b00000000, 0b01000000, 0b00100000, 0b00001000, 0b00101000, 0b00011000, 0b10000100, 0b00000010, 0b01000100, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b11001001, 0b00000000}, // Persian - {0b00000100, 0b10100000, 0b00000000, 0b01000000, 0b00100011, 0b00000000, 0b00100000, 0b11111000, 0b00001110, 0b00000000, 0b00000000, 0b00011111, 0b00000011, 0b10000000, 0b01000000, 0b00000001, 0b01000000, 0b00000000, 0b00001000, 0b00101000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b01001000, 0b00010001, 0b00000110, 0b10100001, 0b00000001, 0b00000110, 0b10001000, 0b11000000}, // Psyduck - {0b00000100, 0b10100000, 0b00000000, 0b01000000, 0b00100011, 0b00000000, 0b00100000, 0b11110001, 0b00001110, 0b00000000, 0b00000000, 0b00011100, 0b00000011, 0b10000000, 0b00000000, 0b00000001, 0b01000000, 0b00000000, 0b00001000, 0b00101000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00001000, 0b00010001, 0b00100110, 0b10100001, 0b00000001, 0b00000100, 0b10001000, 0b01000000}, // Golduck - {0b00100101, 0b11100000, 0b00000000, 0b01000000, 0b00100110, 0b00010000, 0b00000000, 0b00000000, 0b00011110, 0b00000000, 0b00000101, 0b01011000, 0b10000011, 0b10000001, 0b00001010, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00101100, 0b00001000, 0b10000100, 0b00010010, 0b00000100, 0b01000000, 0b00010001, 0b00000110, 0b10100001, 0b00000001, 0b00000110, 0b11001000, 0b01010000}, // Mankey - {0b00100101, 0b11100000, 0b00000000, 0b01000000, 0b00100110, 0b00010000, 0b00000000, 0b00000001, 0b00011110, 0b00000000, 0b00000101, 0b01011000, 0b00010011, 0b10000001, 0b00001010, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00101100, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00000110, 0b10100001, 0b00000001, 0b00000110, 0b11001000, 0b01000000}, // Primeape - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00101110, 0b00011010, 0b00001100, 0b00000000, 0b00000010, 0b00000000, 0b00010000, 0b00011000, 0b01000010, 0b10000000, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10001100, 0b00000010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10110000, 0b00000001, 0b00000100, 0b01100000, 0b01000000}, // Growlithe - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100010, 0b00001010, 0b00001100, 0b00000001, 0b00000010, 0b00000000, 0b00000000, 0b00011000, 0b00000010, 0b10000000, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b01000100, 0b01000000}, // Arcanine - {0b00010000, 0b00000000, 0b00000000, 0b00000000, 0b00100010, 0b00000000, 0b00000011, 0b11110100, 0b00000000, 0b00000000, 0b00000000, 0b00011011, 0b00000010, 0b10000001, 0b00100000, 0b00000001, 0b00000000, 0b00000000, 0b01000010, 0b00001000, 0b00001000, 0b10100100, 0b00000010, 0b00010000, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b10000000, 0b00000000}, // Poliwag - {0b00010100, 0b10000000, 0b00000000, 0b01000000, 0b00100010, 0b00000000, 0b00000001, 0b11110000, 0b00001110, 0b00000000, 0b00000000, 0b01011011, 0b00000010, 0b10000001, 0b00000010, 0b00000001, 0b00000000, 0b00000000, 0b01000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00010100, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b10000000, 0b01000000}, // Poliwhirl - {0b00010100, 0b10000000, 0b00000000, 0b01000000, 0b00100010, 0b00000000, 0b00000001, 0b01110001, 0b00101110, 0b00000000, 0b00000000, 0b01011011, 0b00000010, 0b10000001, 0b00000010, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10100100, 0b00000010, 0b00000100, 0b00001000, 0b00010001, 0b00000110, 0b10100001, 0b00000000, 0b00000100, 0b10000000, 0b01000000}, // Poliwrath - {0b00000101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00000000, 0b00000010, 0b00001010, 0b00001010, 0b10000000, 0b11010010, 0b00000000, 0b00000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10110001, 0b00010001, 0b00000100, 0b11001001, 0b00000000}, // Abra - {0b00000101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00000000, 0b00100000, 0b00001000, 0b00001100, 0b00000000, 0b00000010, 0b00001110, 0b00001010, 0b11000000, 0b01010010, 0b00000000, 0b00000010, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10110001, 0b00000001, 0b00000100, 0b11001001, 0b10000000}, // Kadabra - {0b00000101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00000000, 0b00100000, 0b00001001, 0b00001100, 0b00000000, 0b00000010, 0b00001110, 0b00001010, 0b11000000, 0b01010010, 0b00000000, 0b00000010, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10110001, 0b00000001, 0b00000100, 0b11001001, 0b10000000}, // Alakazam - {0b00100101, 0b11000000, 0b00000000, 0b01010000, 0b00100010, 0b00010000, 0b00000100, 0b00000000, 0b00111110, 0b00000000, 0b00000000, 0b01011000, 0b10000010, 0b10000000, 0b01001010, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00000010, 0b10000100, 0b01000000, 0b00010001, 0b00000110, 0b10100001, 0b00010000, 0b01000110, 0b11000000, 0b01000000}, // Machop - {0b00100101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00010000, 0b00000100, 0b00000000, 0b00111110, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000000, 0b00001010, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00000010, 0b10000100, 0b01000000, 0b00010001, 0b00000110, 0b10100001, 0b00000000, 0b01000110, 0b11000000, 0b01000000}, // Machoke - {0b00100101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00010000, 0b00000100, 0b00000001, 0b00111110, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000000, 0b00001010, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00000010, 0b10000100, 0b01000000, 0b00010001, 0b00000110, 0b10100001, 0b00000000, 0b01000110, 0b11000000, 0b01000000}, // Machamp - {0b00000000, 0b00000011, 0b00000110, 0b00000000, 0b00010010, 0b00000000, 0b00010000, 0b00000000, 0b00000000, 0b00111111, 0b00000000, 0b00001000, 0b00000010, 0b10000000, 0b00010000, 0b00000000, 0b00000000, 0b00000100, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00010010, 0b00010100, 0b01000000, 0b00000000}, // Bellsprout - {0b00000000, 0b00000011, 0b00000110, 0b00000000, 0b00010010, 0b00000000, 0b00010000, 0b00000000, 0b00000000, 0b00111111, 0b00000000, 0b00001000, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00000010, 0b00000100, 0b01000000, 0b00000000}, // Weepinbell - {0b00000000, 0b00000011, 0b00000010, 0b00000000, 0b00100010, 0b00000000, 0b00000000, 0b00000001, 0b00000000, 0b00011001, 0b00000000, 0b00001000, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00000010, 0b00000100, 0b01000000, 0b00000000}, // Victreebel - {0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b00010010, 0b10000000, 0b10010000, 0b11110110, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00000011, 0b10000100, 0b10100000, 0b00000001, 0b00001000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00001000, 0b00110001, 0b00000110, 0b10110000, 0b00000100, 0b00000100, 0b10010000, 0b00000000}, // Tentacool - {0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b00010010, 0b10000000, 0b10010000, 0b11110101, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00000011, 0b10000000, 0b10000000, 0b00000001, 0b00001000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00001000, 0b00110001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b10000000, 0b00000000}, // Tentacruel - {0b00000101, 0b00000000, 0b00000000, 0b00000000, 0b01100010, 0b00000000, 0b00000100, 0b00000000, 0b00001110, 0b00000000, 0b00000000, 0b11011000, 0b00000010, 0b10000001, 0b00000010, 0b10000010, 0b00000000, 0b00000000, 0b00000000, 0b01001100, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b01010101, 0b00000110, 0b10100011, 0b00000000, 0b00000100, 0b01000000, 0b01000000}, // Geodude - {0b00000101, 0b00000000, 0b00000000, 0b00000000, 0b01100010, 0b00000000, 0b00000100, 0b00000000, 0b00001110, 0b00000000, 0b00000000, 0b11011000, 0b00000010, 0b10000001, 0b00000010, 0b10000010, 0b00000000, 0b00000000, 0b00000000, 0b01001100, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b01010101, 0b00000110, 0b10100011, 0b00000000, 0b00000100, 0b01000000, 0b01000000}, // Graveler - {0b00000101, 0b00000000, 0b00000000, 0b01000000, 0b01100010, 0b00000010, 0b00000100, 0b00000001, 0b00001110, 0b00000000, 0b00000000, 0b11011000, 0b00000010, 0b10000001, 0b00000010, 0b10000010, 0b00000000, 0b00000000, 0b00000000, 0b01001100, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b01010101, 0b00100110, 0b10100011, 0b00000000, 0b00000100, 0b01000000, 0b01000000}, // Golem - {0b00000000, 0b00000000, 0b00000001, 0b10000000, 0b01101111, 0b00000100, 0b00001100, 0b00000000, 0b00000010, 0b00001000, 0b00010000, 0b00001001, 0b01100010, 0b10000000, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001100, 0b00000010, 0b00000000, 0b00000000, 0b00011001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b01000000, 0b00000000}, // Ponyta - {0b00000000, 0b00000000, 0b00000001, 0b00000001, 0b01101011, 0b00000100, 0b00001100, 0b00000001, 0b00000010, 0b00001000, 0b00010000, 0b00001000, 0b01100010, 0b10000000, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b01000000, 0b00000000}, // Rapidash - {0b00000000, 0b00000000, 0b00000001, 0b00000100, 0b01100010, 0b00000100, 0b00100101, 0b01110000, 0b00000010, 0b00000000, 0b00000010, 0b01011110, 0b00000010, 0b10000000, 0b00000000, 0b00000010, 0b01000100, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000110, 0b00000010, 0b00010100, 0b00001000, 0b00010001, 0b00000110, 0b10110000, 0b00000001, 0b00000100, 0b11001001, 0b10000000}, // Slowpoke - {0b00000100, 0b10000000, 0b00000000, 0b01000100, 0b01100010, 0b00000100, 0b00100101, 0b01110001, 0b00001110, 0b00000000, 0b00000010, 0b01011110, 0b00000010, 0b10000010, 0b00000000, 0b00000010, 0b01000100, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000110, 0b00000010, 0b00000100, 0b00001000, 0b00010001, 0b00100110, 0b10110001, 0b00000001, 0b00000100, 0b11001001, 0b01000000}, // Slowbro - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000010, 0b00000000, 0b11000000, 0b00000000, 0b00000000, 0b00000000, 0b00001111, 0b00001000, 0b00000011, 0b10000000, 0b00010000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000000, 0b10000001, 0b00010101, 0b01000010, 0b10100000, 0b00000000, 0b00000100, 0b11000000, 0b00000000}, // Magnemite - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000010, 0b00000000, 0b11000000, 0b00000001, 0b00000000, 0b00000000, 0b00001111, 0b00001000, 0b00000011, 0b10000000, 0b00010000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b01001000, 0b00000100, 0b00000010, 0b00000000, 0b10000001, 0b00010101, 0b01000010, 0b10100000, 0b00000000, 0b00000100, 0b11000000, 0b00000000}, // Magneton - {0b00000000, 0b00000011, 0b10010000, 0b00001001, 0b00100010, 0b00010000, 0b00000000, 0b00000000, 0b10000000, 0b00000000, 0b00000000, 0b00001000, 0b01100010, 0b10000000, 0b00000001, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00011000, 0b10000111, 0b00000010, 0b00000100, 0b01000000, 0b00010011, 0b00110110, 0b10100000, 0b00000001, 0b00000100, 0b01001000, 0b00000000}, // Farfetchd - {0b00000000, 0b00000000, 0b00010000, 0b00000001, 0b00100010, 0b00000100, 0b10000000, 0b00000000, 0b11000000, 0b00000000, 0b00000000, 0b00001000, 0b01110010, 0b10000000, 0b00100000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b01001000, 0b10000101, 0b00000010, 0b01000100, 0b00000000, 0b00010001, 0b00010110, 0b10100000, 0b00001000, 0b00000100, 0b01000000, 0b00000000}, // Doduo - {0b00000000, 0b00000000, 0b00010000, 0b00000001, 0b00100010, 0b00000100, 0b00000000, 0b00000001, 0b11000000, 0b00000000, 0b00000000, 0b00001000, 0b01010010, 0b10000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b01001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00010110, 0b10100000, 0b00001000, 0b00000100, 0b01000000, 0b00000000}, // Dodrio - {0b00000000, 0b00000000, 0b00000100, 0b00000100, 0b10101010, 0b00000100, 0b00100000, 0b01110010, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00000010, 0b10000000, 0b00000000, 0b00100001, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00011000, 0b00010001, 0b00000110, 0b10110000, 0b00010000, 0b00000100, 0b10000000, 0b00000000}, // Seel - {0b00000000, 0b00000000, 0b00000000, 0b00000100, 0b00101010, 0b00000100, 0b00000000, 0b01110011, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00000010, 0b10000000, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00001000, 0b00010001, 0b00000110, 0b10110000, 0b00000000, 0b00000100, 0b10000000, 0b00000000}, // Dewgong - {0b01000001, 0b11000000, 0b00000000, 0b00000000, 0b00100000, 0b00000000, 0b00100100, 0b00000000, 0b00000000, 0b00000000, 0b00000101, 0b00011000, 0b00000011, 0b10110000, 0b00100000, 0b00101010, 0b00000000, 0b00010000, 0b00000001, 0b01001000, 0b00001000, 0b10000110, 0b00000010, 0b00001100, 0b00000000, 0b00110001, 0b00001110, 0b10100001, 0b00000000, 0b00000100, 0b11000000, 0b00000000}, // Grimer - {0b01000001, 0b11000000, 0b00000000, 0b00000000, 0b00100000, 0b00000000, 0b00100100, 0b00000001, 0b00000010, 0b00000000, 0b00000101, 0b00011000, 0b00000011, 0b10110000, 0b00000000, 0b00001010, 0b00000000, 0b00010000, 0b00000001, 0b01001000, 0b00001000, 0b10000100, 0b00000010, 0b00001100, 0b00000000, 0b00110001, 0b00000110, 0b10100001, 0b00000000, 0b00000100, 0b11000000, 0b01000000}, // Muk - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01001010, 0b00010000, 0b10000000, 0b01110110, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00000011, 0b10000010, 0b10000000, 0b00000000, 0b11000000, 0b00000000, 0b00000000, 0b01001000, 0b00001000, 0b00000100, 0b00000010, 0b00000000, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b00000100, 0b00000100, 0b10000000, 0b00000000}, // Shellder - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b10000000, 0b01110011, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00000010, 0b10000010, 0b00000000, 0b00000000, 0b01010000, 0b00000000, 0b00000000, 0b01001000, 0b00001000, 0b00000100, 0b00000010, 0b00000001, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b10000000, 0b00000000}, // Cloyster - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000100, 0b00001011, 0b00000110, 0b10000100, 0b00100000, 0b00100000, 0b00000000, 0b00100000, 0b00000100, 0b01001000, 0b00001000, 0b10010110, 0b00001010, 0b00001000, 0b00110000, 0b00110001, 0b00001110, 0b10100000, 0b00000000, 0b00000100, 0b11001001, 0b00000000}, // Gastly - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000100, 0b00001011, 0b00000110, 0b10000100, 0b00000000, 0b00100000, 0b00000000, 0b00100000, 0b00000000, 0b01001000, 0b00001000, 0b10010110, 0b00001010, 0b00001000, 0b00100000, 0b00110001, 0b00001110, 0b10100000, 0b00000000, 0b00000100, 0b11001001, 0b00000000}, // Haunter - {0b00000101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00000000, 0b00000000, 0b00000001, 0b00001110, 0b00000000, 0b00000101, 0b00001011, 0b00000110, 0b10000100, 0b00000010, 0b00100000, 0b00000000, 0b00100000, 0b00000000, 0b01001000, 0b00001000, 0b10010110, 0b00001010, 0b00001000, 0b00100000, 0b00110001, 0b00001110, 0b10100001, 0b00000000, 0b00000100, 0b11001001, 0b01000000}, // Gengar - {0b00000000, 0b00000000, 0b00001100, 0b00000000, 0b01100010, 0b00000010, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b11011000, 0b00010011, 0b10100000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01001100, 0b00001000, 0b00000101, 0b00000010, 0b00000100, 0b00000000, 0b01010001, 0b00000110, 0b10100000, 0b01000001, 0b00000100, 0b01001000, 0b01000000}, // Onix - {0b01000101, 0b11000000, 0b00000000, 0b01000100, 0b00100010, 0b00000000, 0b00100000, 0b00000000, 0b00001100, 0b00000000, 0b00000010, 0b00001111, 0b10000010, 0b10000000, 0b11010010, 0b00000000, 0b00000000, 0b00110000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10110001, 0b00000000, 0b00000100, 0b11001001, 0b10000000}, // Drowzee - {0b01000101, 0b11000000, 0b00000000, 0b01000100, 0b00100010, 0b00000000, 0b00100000, 0b00000001, 0b00001100, 0b00000000, 0b00000010, 0b00001111, 0b10000010, 0b10000000, 0b01010010, 0b00000000, 0b00000000, 0b00110000, 0b00001000, 0b00001000, 0b00001000, 0b10010100, 0b00000010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10110001, 0b00000000, 0b00000100, 0b11001001, 0b10000000}, // Hypno - {0b00000000, 0b00011011, 0b00000101, 0b00000000, 0b00100010, 0b00010000, 0b00000000, 0b01110000, 0b00000010, 0b00000000, 0b00000000, 0b00011000, 0b00000010, 0b10100000, 0b00100000, 0b00000000, 0b00000100, 0b00000000, 0b01000000, 0b10001000, 0b00001000, 0b10000101, 0b00000010, 0b00000100, 0b00001000, 0b00010001, 0b00100110, 0b10100000, 0b00000000, 0b00000100, 0b10000000, 0b01000000}, // Krabby - {0b00000000, 0b00011011, 0b00000001, 0b00000000, 0b00100010, 0b00010000, 0b00000000, 0b01110001, 0b00000010, 0b00000000, 0b00000000, 0b00011000, 0b00000010, 0b10100000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b10001000, 0b00001000, 0b10000101, 0b00000010, 0b00000100, 0b00001000, 0b00010001, 0b00100110, 0b10100000, 0b00000000, 0b10000100, 0b10000000, 0b01000000}, // Kingler - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000111, 0b00001000, 0b00000011, 0b10000000, 0b01000000, 0b10000000, 0b01000000, 0b00000000, 0b00001000, 0b01001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b00010101, 0b01000010, 0b10100000, 0b00000000, 0b00000100, 0b10010000, 0b00000000}, // Voltorb - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b01000000, 0b00000001, 0b00000000, 0b00000000, 0b00000111, 0b00001000, 0b00000011, 0b10000000, 0b01000000, 0b10000000, 0b01000000, 0b00000000, 0b00001000, 0b01001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b00010101, 0b01000010, 0b10100000, 0b00000000, 0b00000100, 0b10010000, 0b00000000}, // Electrode - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b01001111, 0b00000000, 0b00001111, 0b00000010, 0b10000000, 0b01010000, 0b00000000, 0b00000000, 0b00101000, 0b00001000, 0b01001000, 0b00001000, 0b10000110, 0b00000010, 0b00001000, 0b00000000, 0b00110101, 0b00000110, 0b10100000, 0b00000000, 0b00011100, 0b01001010, 0b00000000}, // Exeggcute - {0b00000000, 0b00000000, 0b00000001, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000001, 0b00000010, 0b00001000, 0b00000000, 0b00001111, 0b00000010, 0b10000000, 0b01010000, 0b01000000, 0b00000000, 0b00101000, 0b00001000, 0b01001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00000000, 0b00110101, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b01001000, 0b00000000}, // Exeggutor - {0b00000101, 0b01000010, 0b00000000, 0b01000100, 0b00100111, 0b00010100, 0b00000100, 0b00110000, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b00010011, 0b10000000, 0b00001000, 0b00000110, 0b00100000, 0b00000000, 0b00000000, 0b00011100, 0b00001000, 0b10000100, 0b00000010, 0b00010100, 0b00011010, 0b01010011, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b01000010, 0b01000000}, // Cubone - {0b00000101, 0b01000010, 0b00000000, 0b01000100, 0b00100111, 0b00010100, 0b00000100, 0b00110001, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b00010010, 0b10000000, 0b00001000, 0b00000110, 0b00000000, 0b00000000, 0b00000000, 0b00011100, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00001010, 0b01010011, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b01000000, 0b01000000}, // Marowak - {0b00000100, 0b00000000, 0b00000000, 0b11110000, 0b00100010, 0b00000000, 0b00000000, 0b00000000, 0b00001110, 0b00000000, 0b00000000, 0b01001000, 0b10000010, 0b10000000, 0b00001010, 0b00000000, 0b01000000, 0b10000000, 0b00000000, 0b00001100, 0b00001000, 0b10100100, 0b00010010, 0b00000100, 0b01000000, 0b00010001, 0b00000110, 0b10100001, 0b00000000, 0b00000100, 0b11000000, 0b01000000}, // Hitmonlee - {0b00001101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00000000, 0b00000000, 0b00000000, 0b00001110, 0b00000000, 0b00000000, 0b01001000, 0b01000010, 0b10000000, 0b00000010, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00000011, 0b00000100, 0b00000100, 0b00010001, 0b00000110, 0b10100001, 0b00001000, 0b00000100, 0b11000000, 0b01000000}, // Hitmonchan - {0b00000101, 0b11000011, 0b00000101, 0b01000000, 0b00110010, 0b00000000, 0b10100100, 0b01110001, 0b00001110, 0b00001000, 0b00000101, 0b01011000, 0b00000011, 0b10000001, 0b00000000, 0b00100010, 0b00000000, 0b00100000, 0b00000000, 0b00001100, 0b00001000, 0b10000110, 0b00000010, 0b00010100, 0b00001000, 0b01010101, 0b00000110, 0b10100011, 0b00000001, 0b00000100, 0b11001001, 0b01000000}, // Lickitung - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000100, 0b00001000, 0b00000000, 0b00000000, 0b00000101, 0b00001000, 0b00000011, 0b10001000, 0b00100000, 0b10011010, 0b00000000, 0b00010000, 0b00001100, 0b01001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00100000, 0b00010101, 0b00000110, 0b10101000, 0b00000000, 0b00000100, 0b11000001, 0b00000000}, // Koffing - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000100, 0b00000001, 0b00000000, 0b00000000, 0b00000101, 0b00001000, 0b00000010, 0b10001000, 0b00100000, 0b10011010, 0b00000000, 0b00010000, 0b00001000, 0b01001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00100000, 0b00010101, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b11000001, 0b00000000}, // Weezing - {0b00000000, 0b00000010, 0b00000001, 0b00000011, 0b10101011, 0b00000010, 0b00000100, 0b00110000, 0b00001010, 0b00000000, 0b00000101, 0b01011000, 0b00000010, 0b10000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000110, 0b00010010, 0b10000100, 0b00001000, 0b01010101, 0b00000110, 0b10100010, 0b10000001, 0b00000100, 0b11100000, 0b01000000}, // Rhyhorn - {0b00000101, 0b01000011, 0b00000001, 0b01000011, 0b10101011, 0b00000010, 0b00000100, 0b01110001, 0b00001110, 0b00000000, 0b00000101, 0b01011000, 0b00000010, 0b10000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00000010, 0b10000100, 0b00001000, 0b01010101, 0b00100110, 0b10100001, 0b10000001, 0b00000100, 0b11000000, 0b01000000}, // Rhydon - {0b01010100, 0b00000000, 0b00000000, 0b01000000, 0b00100011, 0b00000101, 0b00000100, 0b00110001, 0b00001110, 0b00001000, 0b00000111, 0b01001010, 0b00000010, 0b10010001, 0b01000010, 0b01000010, 0b00000001, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00001000, 0b01010101, 0b00000111, 0b11110001, 0b00000001, 0b00000100, 0b11001001, 0b01000000}, // Chansey - {0b00000000, 0b00000011, 0b00001110, 0b00000000, 0b00100010, 0b00000000, 0b00000000, 0b00000001, 0b00000001, 0b11101111, 0b00000000, 0b00001100, 0b00000010, 0b10000000, 0b00010000, 0b00000000, 0b00001100, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b10000101, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b01001000, 0b01000000}, // Tangela - {0b00001101, 0b11000001, 0b00000001, 0b01000000, 0b00100011, 0b00011010, 0b00100100, 0b01110001, 0b00001110, 0b00001000, 0b00000101, 0b01011000, 0b00010010, 0b10000000, 0b00001000, 0b00000010, 0b00000000, 0b00000000, 0b00100000, 0b00001100, 0b00001000, 0b10000100, 0b00010010, 0b00000100, 0b01001000, 0b01010001, 0b00100110, 0b10110001, 0b00000001, 0b00000100, 0b11000001, 0b01000000}, // Kangaskhan - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00010000, 0b00100001, 0b11110010, 0b00000000, 0b00000000, 0b00100000, 0b00001000, 0b01000010, 0b10001000, 0b00000000, 0b00000001, 0b01000000, 0b00000000, 0b01000010, 0b00001000, 0b00001000, 0b00000101, 0b00000010, 0b00000010, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b01000000, 0b00000101, 0b10000000, 0b00000000}, // Horsea - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00010000, 0b00000001, 0b11110001, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b01000010, 0b10001000, 0b00000000, 0b00000001, 0b01000000, 0b00000000, 0b01000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000000, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b00000000, 0b00000101, 0b10000000, 0b00000000}, // Seadra - {0b00000000, 0b00000000, 0b00000000, 0b00000011, 0b10000011, 0b00000000, 0b10000000, 0b11111000, 0b10000000, 0b00000000, 0b00000000, 0b00001000, 0b01000010, 0b10000000, 0b00100000, 0b00000001, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000101, 0b00000010, 0b00000000, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b10000000, 0b00000100, 0b10000000, 0b00000000}, // Goldeen - {0b00000000, 0b00000000, 0b00000000, 0b00000011, 0b10000011, 0b00000000, 0b10000000, 0b01110001, 0b10000000, 0b00000000, 0b00000000, 0b00001000, 0b01000010, 0b10000000, 0b00000000, 0b00000001, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000101, 0b00000010, 0b00000000, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b10000000, 0b00000100, 0b10000000, 0b00000000}, // Seaking - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000010, 0b00000000, 0b00000001, 0b11110100, 0b00000000, 0b00000000, 0b00000111, 0b00001010, 0b00000010, 0b11110000, 0b01010000, 0b00000001, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000000, 0b00001000, 0b00010001, 0b00000010, 0b10100000, 0b00000100, 0b00000100, 0b10001000, 0b00000000}, // Staryu - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000001, 0b01110001, 0b00000000, 0b00000000, 0b00000111, 0b00001010, 0b00000010, 0b11000100, 0b01010000, 0b00000001, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000000, 0b00001000, 0b00010001, 0b00000010, 0b10100000, 0b00000100, 0b00000100, 0b10001000, 0b00000000}, // Starmie - {0b00010101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00000000, 0b00000000, 0b00001001, 0b00001100, 0b00001000, 0b00000111, 0b00001111, 0b10000010, 0b10000000, 0b11010010, 0b00000000, 0b00000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00000110, 0b10110000, 0b00110000, 0b00000100, 0b11001001, 0b10000000}, // Mr-mime - {0b00000000, 0b00000111, 0b01000000, 0b00000000, 0b00000010, 0b00010000, 0b00000000, 0b00000001, 0b00001000, 0b00000000, 0b00000000, 0b00001000, 0b01100010, 0b10000000, 0b01001000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00011000, 0b10000100, 0b00010010, 0b00000000, 0b00000000, 0b00010011, 0b00110110, 0b10110000, 0b00101000, 0b00000100, 0b11000000, 0b01000000}, // Scyther - {0b01010100, 0b10000000, 0b00000000, 0b01000000, 0b00100010, 0b00000000, 0b00000000, 0b00110001, 0b00001100, 0b00000000, 0b00000000, 0b00001010, 0b00000010, 0b10000000, 0b01010010, 0b00100000, 0b00000000, 0b00100010, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000110, 0b00000100, 0b00011000, 0b00010001, 0b00001110, 0b10100001, 0b00000000, 0b00000100, 0b10001001, 0b00000000}, // Jynx - {0b00000101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00010000, 0b00000000, 0b00000001, 0b00001110, 0b00000000, 0b00000111, 0b00001010, 0b00100011, 0b10000000, 0b01000000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b10000000, 0b01000000}, // Electabuzz - {0b00000101, 0b01000000, 0b00000000, 0b01000000, 0b00100010, 0b00010000, 0b00001100, 0b00000001, 0b00001110, 0b00000000, 0b00000000, 0b00001010, 0b00000010, 0b10001100, 0b00000000, 0b00010010, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b01000000, 0b01000000}, // Magmar - {0b00000000, 0b00011011, 0b00001000, 0b00000001, 0b00100010, 0b00000000, 0b00000000, 0b00000001, 0b00100110, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10100000, 0b00001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000101, 0b00000010, 0b01000000, 0b00000000, 0b00010011, 0b00100110, 0b10100000, 0b00000000, 0b00000100, 0b11000000, 0b01000000}, // Pinsir - {0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b01101111, 0b00000000, 0b00000100, 0b01110001, 0b00000010, 0b00001000, 0b00000101, 0b01001000, 0b00010010, 0b10000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b10000000, 0b00001000, 0b01010001, 0b00000110, 0b10100000, 0b00001001, 0b00000100, 0b11000000, 0b01000000}, // Tauros - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // Magikarp - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100110, 0b00011010, 0b00000100, 0b11110001, 0b00000010, 0b00000000, 0b00100111, 0b01001000, 0b00000010, 0b10000000, 0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000000, 0b00001000, 0b01010001, 0b00000110, 0b10100000, 0b00000000, 0b00000101, 0b10000000, 0b01000000}, // Gyarados - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b10100010, 0b00000111, 0b00000011, 0b11110001, 0b00000010, 0b00000000, 0b00000101, 0b00001010, 0b00000010, 0b10000100, 0b00000000, 0b00000001, 0b00000000, 0b00100000, 0b00000000, 0b00001000, 0b00001000, 0b00000110, 0b00000010, 0b00000000, 0b01011000, 0b00010001, 0b00000110, 0b10110000, 0b00000001, 0b00000100, 0b10000000, 0b01000000}, // Lapras - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // Ditto - {0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b01101011, 0b00001100, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00011000, 0b00100010, 0b10000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000111, 0b00000010, 0b00000100, 0b00000000, 0b00011001, 0b00000110, 0b10100000, 0b00100001, 0b00000100, 0b11000001, 0b00000000}, // Eevee - {0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b01100011, 0b00001010, 0b00000001, 0b11110011, 0b00000000, 0b00000000, 0b00000000, 0b00011000, 0b00100010, 0b10000000, 0b00100000, 0b00000001, 0b01000000, 0b00000000, 0b00000001, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b11000001, 0b00000000}, // Vaporeon - {0b00000000, 0b00000000, 0b00000000, 0b10001000, 0b01100011, 0b00100010, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00001111, 0b00011000, 0b01100010, 0b10000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b11000001, 0b00000000}, // Jolteon - {0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b01100011, 0b00011010, 0b00001100, 0b00000001, 0b00000000, 0b00000000, 0b00010000, 0b00011000, 0b00100010, 0b10000000, 0b00000000, 0b00010010, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b11000001, 0b00000000}, // Flareon - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000010, 0b00000000, 0b00000000, 0b00111001, 0b00000000, 0b00001000, 0b00000111, 0b00001010, 0b01000010, 0b11000000, 0b00000000, 0b00000000, 0b01000000, 0b00100000, 0b00001000, 0b00001001, 0b11001000, 0b10000100, 0b10000010, 0b00000000, 0b10001001, 0b00010001, 0b00000010, 0b10100000, 0b00000001, 0b00000100, 0b11001001, 0b00000000}, // Porygon - {0b00000000, 0b00000000, 0b00000100, 0b00000000, 0b00100010, 0b00011000, 0b10000001, 0b11110110, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00000010, 0b10000010, 0b00100000, 0b00000001, 0b00001000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00000010, 0b00000001, 0b00001000, 0b01010101, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b10000010, 0b01000000}, // Omanyte - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100010, 0b00011000, 0b00000001, 0b11110001, 0b00000100, 0b00000000, 0b00000000, 0b00001000, 0b00000010, 0b10000010, 0b00000000, 0b00000001, 0b00011000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00001000, 0b01010101, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b10000010, 0b01000000}, // Omastar - {0b00000000, 0b00100000, 0b00000000, 0b00001000, 0b00100010, 0b00010000, 0b00000000, 0b01110110, 0b00000001, 0b10000000, 0b00000000, 0b00011000, 0b00000010, 0b10100100, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000101, 0b00000010, 0b00000000, 0b00001000, 0b01110101, 0b00000110, 0b10100000, 0b00000100, 0b00000100, 0b10000010, 0b01000000}, // Kabuto - {0b00000000, 0b00100011, 0b00000000, 0b01001000, 0b00100010, 0b00010000, 0b00000000, 0b01110001, 0b00000101, 0b10000000, 0b00000000, 0b00011000, 0b00000010, 0b10100000, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00011000, 0b10000100, 0b00000010, 0b00000000, 0b00001000, 0b01110101, 0b00100110, 0b10100000, 0b00000000, 0b00000100, 0b10000010, 0b01000000}, // Kabutops - {0b00000000, 0b00000000, 0b01110000, 0b00000000, 0b00001010, 0b00001010, 0b10000100, 0b00000001, 0b00000010, 0b00000000, 0b00000000, 0b01001000, 0b01000010, 0b10000000, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000110, 0b00000010, 0b10000000, 0b01000000, 0b01010001, 0b00010110, 0b10100000, 0b01001001, 0b00000100, 0b11000010, 0b01000000}, // Aerodactyl - {0b00000101, 0b11000000, 0b00000000, 0b01000100, 0b01100010, 0b00000000, 0b00000100, 0b01110001, 0b00001110, 0b00001000, 0b00000101, 0b01101010, 0b00000010, 0b10000001, 0b00000010, 0b00100010, 0b00000100, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b00000110, 0b00000010, 0b00010100, 0b00001000, 0b01011101, 0b00000110, 0b10100001, 0b00000000, 0b00000100, 0b11001001, 0b00000000}, // Snorlax - {0b00000000, 0b00000000, 0b10010000, 0b00000000, 0b00000010, 0b00000010, 0b00000010, 0b00110001, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b01000010, 0b10000000, 0b00010000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00100100, 0b00000110, 0b00000100, 0b00001000, 0b01010001, 0b00010010, 0b10100000, 0b00000000, 0b00000100, 0b11000000, 0b01000000}, // Articuno - {0b00000000, 0b00000000, 0b00010000, 0b00000000, 0b00000010, 0b00000010, 0b00000000, 0b00000001, 0b11000000, 0b00000000, 0b00001111, 0b00001000, 0b01000010, 0b10000000, 0b01000000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000100, 0b01010001, 0b00010010, 0b10100000, 0b00000000, 0b00000100, 0b11000000, 0b01000000}, // Zapdos - {0b00000000, 0b00000000, 0b01010000, 0b00000000, 0b00000010, 0b00000010, 0b00001100, 0b00000001, 0b00000000, 0b00000000, 0b00010000, 0b00001000, 0b01000010, 0b10000000, 0b00000000, 0b00000010, 0b01000000, 0b00000001, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b01010001, 0b00010010, 0b10110000, 0b00000000, 0b00000100, 0b11000000, 0b01000000}, // Moltres - {0b00000000, 0b00000000, 0b00000100, 0b00000000, 0b00110010, 0b00010000, 0b10000110, 0b01110001, 0b00000000, 0b00000000, 0b00100111, 0b00001000, 0b01000010, 0b10000000, 0b01100000, 0b00000011, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000000, 0b00001000, 0b10010001, 0b00000110, 0b10110000, 0b01000001, 0b00000101, 0b11000000, 0b00000000}, // Dratini - {0b00000000, 0b00000000, 0b00000100, 0b00000000, 0b00110010, 0b00010000, 0b00000100, 0b01110001, 0b00000000, 0b00000000, 0b00100111, 0b00001000, 0b01000010, 0b10000000, 0b00000000, 0b00000011, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000000, 0b00001000, 0b10010001, 0b00000110, 0b10110000, 0b00000001, 0b00000101, 0b11000000, 0b00000000}, // Dragonair - {0b00000001, 0b11000001, 0b01010100, 0b00000000, 0b00110010, 0b00010010, 0b00000100, 0b01110001, 0b00000010, 0b00000000, 0b00100111, 0b01001000, 0b01000010, 0b10000000, 0b00000000, 0b00000011, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00001000, 0b11010001, 0b00110110, 0b10110001, 0b00000001, 0b00000101, 0b11000000, 0b01000000}, // Dragonite - {0b00000101, 0b11000000, 0b00000000, 0b01000000, 0b00100010, 0b00000000, 0b00100110, 0b00110001, 0b00001110, 0b00001000, 0b00000111, 0b01001110, 0b00000010, 0b11000000, 0b11010010, 0b00000010, 0b01000100, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00001000, 0b01010001, 0b00000010, 0b10110001, 0b00000001, 0b00000100, 0b11001001, 0b11000000}, // Mewtwo - {0b01000101, 0b11000011, 0b00010000, 0b01000000, 0b00100010, 0b00000010, 0b00000100, 0b01110001, 0b00001110, 0b00001000, 0b00000111, 0b01011010, 0b00000010, 0b10000001, 0b01010010, 0b00000011, 0b01000001, 0b00100000, 0b10001000, 0b01001100, 0b00001000, 0b10000100, 0b00000010, 0b00001100, 0b00001000, 0b01110101, 0b00110110, 0b10110001, 0b00000001, 0b00000100, 0b11001011, 0b01000000}, // Mew - {0b00000000, 0b00000011, 0b00000010, 0b00000000, 0b01100010, 0b00000100, 0b00000000, 0b00000000, 0b00001000, 0b01011100, 0b00000000, 0b00001000, 0b00000010, 0b10000000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000101, 0b00000010, 0b00000100, 0b00000000, 0b00110001, 0b00000110, 0b10110000, 0b00000001, 0b00010100, 0b01000010, 0b00000000}, // Chikorita - {0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b01100010, 0b00000100, 0b00000000, 0b00000000, 0b00001010, 0b00011100, 0b00000000, 0b00001000, 0b00000010, 0b10000000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b00110001, 0b00100110, 0b10110000, 0b00000001, 0b00010100, 0b01000000, 0b01000000}, // Bayleef - {0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b01100010, 0b00000100, 0b00000000, 0b00000001, 0b00001010, 0b00011100, 0b00000000, 0b01001000, 0b00000010, 0b10000000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b00110001, 0b00100110, 0b10110000, 0b00000001, 0b00010100, 0b01000000, 0b01000000}, // Meganium - {0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b01100110, 0b00010000, 0b00001100, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00011000, 0b00100010, 0b10001001, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00101000, 0b00001000, 0b00001100, 0b00010010, 0b00000100, 0b01000000, 0b00010101, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b01000000, 0b00000000}, // Cyndaquil - {0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b01100010, 0b00010010, 0b00001100, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00011000, 0b00100010, 0b10001001, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001100, 0b00000010, 0b00000100, 0b00000000, 0b00010101, 0b00100110, 0b10100000, 0b00000000, 0b00000100, 0b01000000, 0b01000000}, // Quilava - {0b00000101, 0b01000001, 0b00000000, 0b01000000, 0b01100010, 0b00010010, 0b00001100, 0b00000001, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b00100010, 0b10001001, 0b00000000, 0b00000010, 0b01000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b00001100, 0b00000010, 0b00000100, 0b00000000, 0b00010101, 0b00100110, 0b10100001, 0b00000000, 0b00000100, 0b01000000, 0b01000000}, // Typhlosion - {0b00000100, 0b10100011, 0b00000000, 0b01000000, 0b00100110, 0b00011000, 0b00000001, 0b11110000, 0b00001100, 0b00000000, 0b00000000, 0b00011000, 0b00010011, 0b10000000, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00011000, 0b00000100, 0b00000010, 0b10000100, 0b00001000, 0b00010001, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b10100010, 0b00000000}, // Totodile - {0b00000100, 0b10100011, 0b00000000, 0b01000000, 0b00100010, 0b00011010, 0b00000001, 0b11110000, 0b00001110, 0b00000000, 0b00000000, 0b00011000, 0b00010011, 0b10000000, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00011000, 0b00000100, 0b00000010, 0b10000100, 0b00001000, 0b00010001, 0b00100110, 0b10100001, 0b00000001, 0b00000100, 0b10000000, 0b01000000}, // Croconaw - {0b00000100, 0b10100011, 0b00000000, 0b01000000, 0b00100010, 0b00011010, 0b00000001, 0b11110001, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b00010011, 0b10000000, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00011000, 0b00000100, 0b00000010, 0b10000100, 0b00001000, 0b00010001, 0b00100110, 0b10100001, 0b00000001, 0b00000100, 0b10000000, 0b01000000}, // Feraligatr - {0b00000001, 0b11100001, 0b00000100, 0b00000000, 0b00100010, 0b00000000, 0b00000100, 0b01100000, 0b00000000, 0b00001000, 0b00000100, 0b00011000, 0b00100010, 0b10000001, 0b00001000, 0b00000000, 0b01000100, 0b00000000, 0b00000000, 0b00101000, 0b00011000, 0b10000100, 0b00010010, 0b00000100, 0b00000000, 0b00010101, 0b00100110, 0b10100001, 0b00001001, 0b00000100, 0b11000001, 0b00000000}, // Sentret - {0b00000001, 0b11100001, 0b00000100, 0b00000000, 0b00100010, 0b00000000, 0b00000100, 0b01110001, 0b00000010, 0b00001000, 0b00000101, 0b00011000, 0b00100010, 0b10000001, 0b00000000, 0b00000000, 0b01000100, 0b00000000, 0b00000000, 0b00101000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010101, 0b00100110, 0b10100001, 0b00000001, 0b00000100, 0b11000001, 0b01000000}, // Furret - {0b00000000, 0b00000000, 0b01110000, 0b00000000, 0b01001010, 0b00000100, 0b10000000, 0b00000000, 0b10000000, 0b00000000, 0b00000000, 0b00001111, 0b00000010, 0b10000000, 0b00010001, 0b00000000, 0b01000000, 0b00100001, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b01000100, 0b01000000, 0b00010001, 0b00010110, 0b10100000, 0b00000000, 0b00000100, 0b11000001, 0b00000000}, // Hoothoot - {0b00000000, 0b00000000, 0b00010000, 0b00000000, 0b01001010, 0b00000100, 0b00000000, 0b00000001, 0b10000000, 0b00000000, 0b00000000, 0b00001111, 0b00000010, 0b10000000, 0b00010000, 0b00000000, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b01000000, 0b00010001, 0b00010110, 0b10100000, 0b00000000, 0b00000100, 0b11000001, 0b00000000}, // Noctowl - {0b00001100, 0b11000010, 0b00000000, 0b00000000, 0b01000010, 0b00000000, 0b10000000, 0b00001000, 0b00000000, 0b00001000, 0b00000000, 0b00011000, 0b01000010, 0b10000000, 0b01010100, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b00110101, 0b00000110, 0b10110001, 0b00100000, 0b00000100, 0b01000000, 0b00000000}, // Ledyba - {0b00001100, 0b11000010, 0b00000000, 0b00000000, 0b01000010, 0b00000000, 0b10000000, 0b00000001, 0b00000000, 0b00001000, 0b00000000, 0b00011000, 0b01000010, 0b10000000, 0b01010000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b00110101, 0b00000110, 0b10110001, 0b00100000, 0b00000100, 0b01000000, 0b00000000}, // Ledian - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100010, 0b10000000, 0b01100000, 0b00001000, 0b00000000, 0b00001000, 0b01000000, 0b00011010, 0b01000110, 0b10000000, 0b00000000, 0b00000000, 0b00001000, 0b00000100, 0b00001000, 0b00101000, 0b00001000, 0b11000100, 0b00000010, 0b10001000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00101000, 0b00000100, 0b01000000, 0b00000000}, // Spinarak - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100010, 0b10000000, 0b00000000, 0b00000001, 0b00000000, 0b00001000, 0b01000000, 0b00011010, 0b01000110, 0b10000000, 0b00000000, 0b00000000, 0b00001000, 0b00000100, 0b00001000, 0b00101000, 0b00001000, 0b11000100, 0b00000010, 0b10001000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b01000000, 0b00000000}, // Ariados - {0b00000000, 0b00000000, 0b01010000, 0b00000000, 0b00000010, 0b00001000, 0b10000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00000011, 0b10000100, 0b00100000, 0b00000000, 0b01000000, 0b00000100, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00011110, 0b10100000, 0b00000000, 0b00000100, 0b11000001, 0b00000000}, // Crobat - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001010, 0b00000000, 0b10000001, 0b11110000, 0b00000000, 0b00000000, 0b00000111, 0b00001000, 0b00000011, 0b10000100, 0b00000000, 0b00000001, 0b00000100, 0b00000000, 0b01001000, 0b00001000, 0b00001000, 0b00000101, 0b00000010, 0b00000000, 0b00000000, 0b00010001, 0b01000110, 0b10100000, 0b00000000, 0b00000100, 0b10000000, 0b00000000}, // Chinchou - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001010, 0b00000000, 0b10000001, 0b11110001, 0b00000000, 0b00000000, 0b00000111, 0b00001000, 0b00000010, 0b10000100, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b01001000, 0b00001000, 0b00001000, 0b00000101, 0b00000010, 0b00000000, 0b00000000, 0b00010001, 0b01000110, 0b10100000, 0b00000000, 0b00000100, 0b10000000, 0b00000000}, // Lanturn - {0b00010100, 0b00000000, 0b00000000, 0b01000000, 0b00100011, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00000000, 0b00001111, 0b00001000, 0b00000010, 0b10000001, 0b01000100, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00010010, 0b00100100, 0b00000000, 0b00011101, 0b00000110, 0b11100000, 0b00010001, 0b00000100, 0b10000000, 0b00000000}, // Pichu - {0b01000100, 0b00000000, 0b00000000, 0b01000000, 0b00100010, 0b00000001, 0b00000100, 0b00000000, 0b00001100, 0b00001000, 0b00000010, 0b00011010, 0b00000010, 0b10000001, 0b01010010, 0b00000010, 0b00000101, 0b00100000, 0b00001010, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00110100, 0b00001000, 0b00011101, 0b00000110, 0b11110000, 0b00010001, 0b00000100, 0b11001001, 0b00000000}, // Cleffa - {0b01000100, 0b00000000, 0b00000000, 0b01000000, 0b00100010, 0b00000001, 0b00000100, 0b00000000, 0b00001100, 0b00001000, 0b00000010, 0b00011010, 0b00000010, 0b10000001, 0b01010000, 0b00000010, 0b00000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b01100100, 0b00011000, 0b00011101, 0b00000110, 0b11110000, 0b00000000, 0b00000100, 0b11001001, 0b00000000}, // Igglybuff - {0b00000100, 0b00000000, 0b00000000, 0b01000000, 0b00100010, 0b00000100, 0b00000100, 0b00000000, 0b10001100, 0b00001000, 0b00000010, 0b00001010, 0b00000010, 0b10000001, 0b01010011, 0b00000010, 0b01000001, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00100100, 0b01000000, 0b00011101, 0b00000110, 0b11110000, 0b00110000, 0b00000100, 0b11001011, 0b11000000}, // Togepi - {0b00000100, 0b00000000, 0b00010000, 0b01000000, 0b00100010, 0b00000100, 0b00000100, 0b00000001, 0b00001100, 0b00001000, 0b00000010, 0b00001010, 0b00000010, 0b10000001, 0b01010010, 0b00000010, 0b01000001, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00100100, 0b00000000, 0b00011101, 0b00010110, 0b10110000, 0b00110000, 0b00000100, 0b11001011, 0b01000000}, // Togetic - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00010000, 0b00000000, 0b00000000, 0b11000000, 0b00001000, 0b00000010, 0b00001010, 0b00101110, 0b10000100, 0b01110000, 0b00000000, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b01000000, 0b00000000, 0b00110001, 0b00010110, 0b10100000, 0b00000000, 0b00000100, 0b11001001, 0b10000000}, // Natu - {0b00000000, 0b00000000, 0b00010000, 0b00000000, 0b00000010, 0b00010000, 0b00000000, 0b00000001, 0b10000000, 0b00001000, 0b00000010, 0b00001010, 0b00001110, 0b10000100, 0b01010000, 0b00000000, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b00110001, 0b00010110, 0b10100000, 0b00000000, 0b00000100, 0b11001001, 0b10000000}, // Xatu - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01101010, 0b00000100, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001111, 0b00001000, 0b00000011, 0b10000001, 0b01010000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00100010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10110000, 0b00000001, 0b00000100, 0b10000000, 0b00000000}, // Mareep - {0b00000101, 0b01000000, 0b00000000, 0b01000000, 0b01100010, 0b00000100, 0b00000000, 0b00000000, 0b00001110, 0b00000000, 0b00001111, 0b00001000, 0b00000010, 0b10000001, 0b01000000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00100010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b10000000, 0b01000000}, // Flaaffy - {0b00000101, 0b01000000, 0b00000000, 0b01000000, 0b01100010, 0b00000100, 0b00000000, 0b00000001, 0b00001110, 0b00000000, 0b00001111, 0b00001000, 0b00000010, 0b10000001, 0b01000000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00100010, 0b00000000, 0b00000000, 0b00010001, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b10000000, 0b01000000}, // Ampharos - {0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000001, 0b00000001, 0b00001010, 0b10000000, 0b00001000, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00000110, 0b10110000, 0b00000010, 0b00000100, 0b01000000, 0b00000000}, // Bellossom - {0b00000100, 0b10000000, 0b00000000, 0b01000000, 0b01100011, 0b00000000, 0b10000001, 0b11110100, 0b00000110, 0b00000000, 0b00000000, 0b00011000, 0b00000010, 0b10000001, 0b01000000, 0b00000001, 0b01000100, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00010100, 0b00011000, 0b00010101, 0b00000110, 0b11100001, 0b00000001, 0b00000100, 0b10000000, 0b11000000}, // Marill - {0b00000100, 0b10000000, 0b00000000, 0b01000000, 0b01100011, 0b00000000, 0b00000001, 0b11110101, 0b00000110, 0b00000000, 0b00000000, 0b00011000, 0b00000010, 0b10000001, 0b00000000, 0b00000001, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00001000, 0b00010101, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b10000000, 0b01000000}, // Azumarill - {0b00000101, 0b11000000, 0b00000100, 0b01000000, 0b00100010, 0b00000000, 0b00000000, 0b00000000, 0b00011110, 0b00000000, 0b00000000, 0b11011000, 0b00000010, 0b10000001, 0b00000000, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b01001100, 0b00001000, 0b10000101, 0b00000010, 0b01000100, 0b00000000, 0b01010101, 0b00000110, 0b10100001, 0b00000000, 0b00000100, 0b01001000, 0b01000000}, // Sudowoodo - {0b00010100, 0b00000000, 0b00000000, 0b01000000, 0b00100010, 0b00000000, 0b00000001, 0b01110001, 0b00001110, 0b00000000, 0b00000000, 0b01011011, 0b00000010, 0b10000001, 0b00000010, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00011000, 0b00010001, 0b00000110, 0b10100001, 0b00000000, 0b00000100, 0b10000000, 0b01000000}, // Politoed - {0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b01000011, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11001111, 0b00000000, 0b00001100, 0b00000010, 0b10000001, 0b00010000, 0b00000000, 0b00000100, 0b00000000, 0b00001010, 0b00001000, 0b00001000, 0b00000100, 0b00100010, 0b00000000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00010000, 0b00010100, 0b01001000, 0b00000000}, // Hoppip - {0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b01000011, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11001111, 0b00000000, 0b00001000, 0b00000010, 0b10000001, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001010, 0b00001000, 0b00001000, 0b00000100, 0b00100010, 0b00000000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00000000, 0b00010100, 0b01000000, 0b00000000}, // Skiploom - {0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b01000011, 0b00000000, 0b00000000, 0b00000001, 0b00000000, 0b11001111, 0b00000000, 0b00001000, 0b00000010, 0b10000001, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001010, 0b00001000, 0b00001000, 0b00000100, 0b00100010, 0b00000000, 0b00000000, 0b00110001, 0b00000110, 0b10100000, 0b00000000, 0b00010100, 0b01000000, 0b00000000}, // Jumpluff - {0b00010101, 0b11100001, 0b00000100, 0b01001000, 0b00100011, 0b00000000, 0b00000000, 0b00000000, 0b00001110, 0b00001000, 0b00000111, 0b00011000, 0b01000011, 0b10000001, 0b00000010, 0b00000000, 0b01000000, 0b00100000, 0b00000000, 0b00101000, 0b00001000, 0b10000100, 0b00001010, 0b00000100, 0b00000000, 0b00010001, 0b00100110, 0b10100001, 0b00101001, 0b00000100, 0b11000001, 0b01010000}, // Aipom - {0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00000001, 0b11101000, 0b00000000, 0b00001000, 0b00000010, 0b10000000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000110, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00000110, 0b10110000, 0b00010000, 0b00010100, 0b01000000, 0b00000000}, // Sunkern - {0b01000000, 0b00000011, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000001, 0b00000001, 0b00111000, 0b10000000, 0b00001000, 0b00000010, 0b10000000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00001000, 0b00000000, 0b00110001, 0b00000110, 0b10110000, 0b00000000, 0b00000100, 0b01000000, 0b00000000}, // Sunflora - {0b00000000, 0b00000000, 0b01100000, 0b00000000, 0b01000010, 0b00000000, 0b11000000, 0b00000000, 0b00000000, 0b00001000, 0b00000000, 0b00001011, 0b00100011, 0b10000000, 0b00000000, 0b00000000, 0b01000000, 0b00100100, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00010010, 0b00000000, 0b01000100, 0b00110001, 0b00010110, 0b10100000, 0b00000000, 0b00000100, 0b01000001, 0b00000000}, // Yanma - {0b00000000, 0b10000000, 0b00000100, 0b00000000, 0b00100011, 0b00000000, 0b00000011, 0b01110000, 0b00000000, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000001, 0b00100000, 0b00000001, 0b00000100, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000110, 0b00000010, 0b00001100, 0b00000000, 0b01010101, 0b00000110, 0b10110001, 0b00000001, 0b00000100, 0b10000010, 0b01000000}, // Wooper - {0b00000100, 0b10000000, 0b00000100, 0b01000000, 0b00100011, 0b00000000, 0b00000011, 0b01110001, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000001, 0b00100000, 0b00000001, 0b00000100, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00001100, 0b00000000, 0b01010101, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b10000000, 0b01000000}, // Quagsire - {0b00000000, 0b00000001, 0b00000000, 0b00001000, 0b01100011, 0b00000000, 0b00000000, 0b00001001, 0b00000000, 0b00000000, 0b00000000, 0b00011110, 0b00100010, 0b10000000, 0b01010000, 0b00000000, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00100100, 0b11001001, 0b00000000}, // Espeon - {0b00000000, 0b00000001, 0b00000000, 0b00001000, 0b01100011, 0b00000000, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b00011010, 0b00100011, 0b10000100, 0b00000000, 0b00000000, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b01000100, 0b00000000, 0b00010001, 0b00001110, 0b10100000, 0b00001001, 0b00001100, 0b11001001, 0b00000000}, // Umbreon - {0b00000000, 0b00000000, 0b01110000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b11000000, 0b00000000, 0b00000010, 0b00001000, 0b00000110, 0b10000100, 0b00100001, 0b00000000, 0b01000000, 0b00100001, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b01000100, 0b00011000, 0b00010001, 0b00011110, 0b10100000, 0b00001000, 0b00000100, 0b11001001, 0b00000000}, // Murkrow - {0b00000100, 0b10000000, 0b00000000, 0b01000100, 0b01100010, 0b00000100, 0b00100101, 0b01110001, 0b00001110, 0b00000000, 0b00000010, 0b01011110, 0b00000010, 0b10000000, 0b00000000, 0b00000010, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000110, 0b00000010, 0b00000100, 0b00001000, 0b00010001, 0b00100110, 0b10110001, 0b00000001, 0b00000100, 0b11001001, 0b01000000}, // Slowking - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00000100, 0b00000000, 0b00001000, 0b00000000, 0b00000000, 0b00000111, 0b00001010, 0b00000011, 0b10000101, 0b00000000, 0b00000000, 0b01000000, 0b00100000, 0b00001100, 0b00001000, 0b00001000, 0b10000100, 0b00001010, 0b00000000, 0b00110000, 0b00010001, 0b00001110, 0b10101000, 0b00000000, 0b00000100, 0b11001001, 0b00000000}, // Misdreavus - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000100, 0b00000000, 0b00000000}, // Unown - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100000, 0b00000000, 0b00000000, 0b00010000, 0b00000000, 0b00000000, 0b00010000, 0b00000000}, // Wobbuffet - {0b00000000, 0b00000000, 0b00000001, 0b00000000, 0b01101010, 0b00000100, 0b00000000, 0b00001000, 0b00000010, 0b00000000, 0b00000111, 0b01001110, 0b01000010, 0b10000000, 0b01010000, 0b00000000, 0b01000100, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b01000000, 0b00010001, 0b00000110, 0b10100000, 0b00100001, 0b00000100, 0b11101001, 0b11010000}, // Girafarig - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01101010, 0b00100000, 0b00000000, 0b00000000, 0b00001010, 0b00001000, 0b00000000, 0b01011000, 0b00000010, 0b10000001, 0b01010100, 0b10000000, 0b01000000, 0b00000000, 0b00000000, 0b01001100, 0b00001000, 0b00000101, 0b00000010, 0b00000001, 0b00000000, 0b01110101, 0b00000110, 0b10100000, 0b00000100, 0b00000100, 0b01000000, 0b01000000}, // Pineco - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01101010, 0b00000000, 0b00000000, 0b00000001, 0b00001010, 0b00001000, 0b00000000, 0b01011000, 0b00000010, 0b10000001, 0b01010100, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b01001100, 0b00001000, 0b00000100, 0b00000010, 0b00000001, 0b10000000, 0b01110101, 0b00000110, 0b10100000, 0b00000100, 0b00000100, 0b01000000, 0b01000000}, // Forretress - {0b00000000, 0b00000000, 0b00000000, 0b00000100, 0b00101010, 0b00001000, 0b00000100, 0b00110000, 0b00001010, 0b00001000, 0b00000111, 0b01011000, 0b00010011, 0b10000001, 0b00000100, 0b00000010, 0b00000000, 0b01100000, 0b00000000, 0b00001100, 0b00001000, 0b10000111, 0b00001010, 0b00000100, 0b00000000, 0b00010101, 0b00000110, 0b10100000, 0b00001001, 0b00000100, 0b11001011, 0b01000000}, // Dunsparce - {0b00000000, 0b00001111, 0b01000000, 0b00001000, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b00001010, 0b00000000, 0b00000000, 0b01011000, 0b00100011, 0b10100000, 0b00000000, 0b00000000, 0b01000000, 0b00100000, 0b00000000, 0b00001100, 0b00011000, 0b10000100, 0b00000010, 0b01001000, 0b00000000, 0b01010001, 0b00110110, 0b10100000, 0b00000001, 0b10000100, 0b11000000, 0b01000000}, // Gligar - {0b00000000, 0b00000001, 0b00001100, 0b00000000, 0b01100010, 0b00000010, 0b00000000, 0b00000001, 0b00000010, 0b00000000, 0b00000000, 0b11011000, 0b00010011, 0b10100001, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01001100, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b01010101, 0b00000110, 0b10100000, 0b01000001, 0b00000100, 0b01100000, 0b01000000}, // Steelix - {0b00000101, 0b11000000, 0b00000000, 0b01000000, 0b01101011, 0b00001010, 0b00000100, 0b00000000, 0b00001110, 0b00001000, 0b00000111, 0b01011000, 0b00010010, 0b10000001, 0b00010010, 0b00100010, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b11001100, 0b00000000, 0b00011001, 0b00000111, 0b11100001, 0b00000000, 0b00000100, 0b11100001, 0b01000000}, // Snubbull - {0b00000101, 0b11000000, 0b00000000, 0b01000000, 0b01101011, 0b00001010, 0b00000100, 0b00000001, 0b00001110, 0b00001000, 0b00000111, 0b01011000, 0b00010010, 0b10000001, 0b00000010, 0b00100010, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000100, 0b00000010, 0b10001100, 0b00000000, 0b00011001, 0b00000110, 0b10100001, 0b00000001, 0b00000100, 0b11100001, 0b01000000}, // Granbull - {0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b01001010, 0b10100000, 0b10000001, 0b11110100, 0b00000000, 0b00000000, 0b00000010, 0b00001000, 0b00000010, 0b10110001, 0b00100000, 0b00000001, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000101, 0b00000010, 0b00001001, 0b00101000, 0b00010101, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b10000001, 0b00000000}, // Qwilfish - {0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b00000010, 0b00010000, 0b00000000, 0b00000001, 0b00001010, 0b00000000, 0b00000000, 0b00001000, 0b01100010, 0b10000000, 0b00001000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00011000, 0b10000100, 0b00000010, 0b00000000, 0b00000000, 0b01010011, 0b00110110, 0b10100000, 0b00001000, 0b10000100, 0b11000000, 0b01000000}, // Scizor - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00110010, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000011, 0b00000100, 0b00000000, 0b00001000, 0b00000000, 0b00001000, 0b00001100, 0b00001000, 0b00000100, 0b00000010, 0b00001100, 0b00000000, 0b01010101, 0b00000110, 0b10110000, 0b00010010, 0b00000100, 0b01000000, 0b01000000}, // Shuckle - {0b00000000, 0b00000011, 0b00000000, 0b00000011, 0b01101010, 0b00010000, 0b00000000, 0b00000001, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10100000, 0b00000100, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b10000101, 0b00010010, 0b00000000, 0b00000000, 0b00010011, 0b00100110, 0b10100000, 0b10000000, 0b00000100, 0b11000000, 0b01000000}, // Heracross - {0b00000000, 0b10100011, 0b00000000, 0b00000000, 0b00000010, 0b00011000, 0b00000000, 0b01110000, 0b00001010, 0b00000000, 0b00000000, 0b00011000, 0b01100011, 0b10000001, 0b00010000, 0b00000000, 0b01000000, 0b00100000, 0b00000000, 0b00101000, 0b00011000, 0b10000100, 0b00001010, 0b01000100, 0b01001000, 0b00010001, 0b00100110, 0b10100001, 0b00000001, 0b10000100, 0b11001001, 0b01010000}, // Sneasel - {0b00000101, 0b11100011, 0b00000000, 0b01000000, 0b00101110, 0b00010010, 0b00000000, 0b00000000, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000001, 0b00000010, 0b00100000, 0b01000000, 0b00000000, 0b00000000, 0b00101000, 0b00011000, 0b10000100, 0b00000010, 0b01000100, 0b00000000, 0b00010101, 0b00100110, 0b10100001, 0b00000000, 0b10000100, 0b11100000, 0b01000000}, // Teddiursa - {0b00000101, 0b11100011, 0b00000000, 0b01000000, 0b00100110, 0b00010010, 0b00000000, 0b00000001, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000001, 0b00000010, 0b00100000, 0b01000000, 0b00000000, 0b00000000, 0b00101100, 0b00011000, 0b10000100, 0b00000010, 0b01000100, 0b00000000, 0b00010101, 0b00100110, 0b10100001, 0b00000000, 0b00000100, 0b11000000, 0b01000000}, // Ursaring - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100010, 0b00000000, 0b00001100, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b10001000, 0b00000010, 0b10100001, 0b01010000, 0b00010010, 0b00000100, 0b00000000, 0b00000001, 0b00001100, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b00010101, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b01000000, 0b01000000}, // Slugma - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100010, 0b00000000, 0b00001100, 0b00000001, 0b00000010, 0b00000000, 0b00000000, 0b11001000, 0b00000010, 0b10100001, 0b01010000, 0b00010010, 0b00000100, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b01010101, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b01000000, 0b01000000}, // Magcargo - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01101010, 0b00001010, 0b00000010, 0b00110000, 0b00000010, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000001, 0b01010000, 0b00000000, 0b00000100, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b00000100, 0b00000110, 0b00000100, 0b00001000, 0b01010001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b10000010, 0b01000000}, // Swinub - {0b00000000, 0b00000000, 0b00000000, 0b00000011, 0b00101010, 0b00000010, 0b00000010, 0b00110001, 0b00000010, 0b00000000, 0b00000000, 0b01011000, 0b00000010, 0b10000001, 0b01010000, 0b00000000, 0b00000100, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b00000100, 0b00000110, 0b00000100, 0b00001000, 0b01010001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b10000000, 0b01000000}, // Piloswine - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100010, 0b00000000, 0b00000010, 0b01110100, 0b00000010, 0b00000000, 0b00000000, 0b01011010, 0b00000011, 0b11100101, 0b11010000, 0b00000000, 0b00010100, 0b00000000, 0b01000000, 0b01001100, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b01010101, 0b00000110, 0b10110000, 0b00000000, 0b00000100, 0b11010011, 0b01000000}, // Corsola - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b10000101, 0b01111111, 0b00000000, 0b00000000, 0b00000010, 0b00001010, 0b00000011, 0b10000001, 0b00101000, 0b00000011, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000110, 0b00000001, 0b00010001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b11000000, 0b00000000}, // Remoraid - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000101, 0b01111111, 0b00000100, 0b00000000, 0b00000010, 0b00001010, 0b00000010, 0b10000001, 0b00001000, 0b00000011, 0b01001000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00001110, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b11000000, 0b00000000}, // Octillery - {0b00000100, 0b00000000, 0b00010000, 0b01000000, 0b00100010, 0b00000000, 0b00000000, 0b00110010, 0b00001100, 0b00000000, 0b00000000, 0b00001000, 0b00100010, 0b10000000, 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000010, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00001000, 0b00010001, 0b00000110, 0b11100000, 0b00000100, 0b00000100, 0b10000000, 0b10000000}, // Delibird - {0b00000000, 0b00000000, 0b01000100, 0b00000000, 0b01101010, 0b00000000, 0b10000000, 0b11110100, 0b00000000, 0b00000000, 0b00000000, 0b01001000, 0b01000010, 0b10000100, 0b00100000, 0b00000001, 0b01000000, 0b00000000, 0b01000000, 0b00001100, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b00000000, 0b00000101, 0b10000000, 0b00000000}, // Mantine - {0b00000000, 0b00000001, 0b00110000, 0b00001001, 0b00000010, 0b00010010, 0b00000000, 0b00000000, 0b11001000, 0b00000000, 0b00000000, 0b00001000, 0b01000010, 0b10000000, 0b00000000, 0b00000000, 0b01000000, 0b00000001, 0b00000000, 0b00001100, 0b00001000, 0b10000110, 0b00000010, 0b00000101, 0b00000000, 0b01010001, 0b00010110, 0b10100000, 0b00001000, 0b00000100, 0b01000000, 0b01000000}, // Skarmory - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100010, 0b00011010, 0b00001100, 0b00000000, 0b00001000, 0b00001000, 0b00010000, 0b00001000, 0b00010010, 0b10000000, 0b00000000, 0b00010010, 0b01000000, 0b00100000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00011010, 0b01001100, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00001001, 0b00000100, 0b01100001, 0b01010000}, // Houndour - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100010, 0b00011010, 0b00001100, 0b00000001, 0b00001010, 0b00001000, 0b00000000, 0b00001000, 0b00000010, 0b10000000, 0b00000000, 0b00010010, 0b01000000, 0b00100000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b01001100, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b01100001, 0b01000000}, // Houndoom - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100010, 0b00010000, 0b00000001, 0b11110001, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b01000010, 0b10001000, 0b00000000, 0b00000001, 0b01000000, 0b00000000, 0b01000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000000, 0b00001000, 0b00010001, 0b00000110, 0b10100000, 0b00000000, 0b00000101, 0b10000000, 0b00000000}, // Kingdra - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01101010, 0b00000110, 0b00000000, 0b00000000, 0b00001010, 0b00000000, 0b00000000, 0b01101000, 0b00000010, 0b10000001, 0b00001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000101, 0b00000010, 0b00000100, 0b00000000, 0b01010101, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b01000010, 0b01000000}, // Phanpy - {0b00000000, 0b00000000, 0b00000000, 0b00000011, 0b00100010, 0b00000110, 0b00000000, 0b00000001, 0b00001010, 0b00000000, 0b00000000, 0b01001000, 0b00000010, 0b10000001, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b00000101, 0b00000010, 0b00000100, 0b00000000, 0b01010101, 0b00000110, 0b10100000, 0b00000101, 0b00000100, 0b01000000, 0b01000000}, // Donphan - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000010, 0b00000000, 0b00000000, 0b00111001, 0b00000000, 0b00001000, 0b00000111, 0b00001010, 0b01000010, 0b11000001, 0b00000000, 0b00000000, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b11001000, 0b10000100, 0b10000010, 0b00000000, 0b10001001, 0b00010001, 0b00000010, 0b10100000, 0b00000001, 0b00000100, 0b11001001, 0b00000000}, // Porygon2 - {0b00000000, 0b00000000, 0b00000001, 0b00001000, 0b01101010, 0b00011010, 0b00100000, 0b00000000, 0b00000000, 0b00001000, 0b00000111, 0b01001011, 0b00000010, 0b10000100, 0b01010000, 0b00000000, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00001010, 0b00000100, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000001, 0b00000100, 0b11001001, 0b00000000}, // Stantler - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // Smeargle - {0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b01100010, 0b00000000, 0b00000000, 0b00000000, 0b00001110, 0b00000000, 0b00000000, 0b01001000, 0b00000010, 0b10000000, 0b00000000, 0b00000000, 0b01000000, 0b10000000, 0b00000000, 0b00001100, 0b00001000, 0b10100100, 0b00000011, 0b00000100, 0b00000000, 0b00010001, 0b00000110, 0b10100000, 0b00000100, 0b00000100, 0b11000000, 0b01000000}, // Tyrogue - {0b00000000, 0b00000000, 0b00000000, 0b01010000, 0b00100010, 0b00000000, 0b00000000, 0b00000000, 0b00001110, 0b00000000, 0b00000000, 0b01011000, 0b01100010, 0b10000000, 0b00001000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00001100, 0b00001001, 0b10000100, 0b00000010, 0b00000100, 0b00000100, 0b01010001, 0b00000110, 0b10100000, 0b00001100, 0b00000100, 0b11000000, 0b01000000}, // Hitmontop - {0b01000100, 0b10000000, 0b00000000, 0b01000000, 0b00100010, 0b00000001, 0b00000000, 0b00110000, 0b00001100, 0b00000000, 0b00000000, 0b00001110, 0b10000010, 0b10000000, 0b01010010, 0b00100000, 0b00000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000110, 0b00100100, 0b00011000, 0b00010001, 0b00001110, 0b10100001, 0b00000000, 0b00000100, 0b10001001, 0b00000000}, // Smoochum - {0b00100101, 0b11000000, 0b00000000, 0b01010000, 0b00100010, 0b00010000, 0b00000000, 0b00000000, 0b00001100, 0b00000000, 0b00000111, 0b00001010, 0b10100011, 0b10000000, 0b11000000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00000110, 0b10100001, 0b00000000, 0b00000110, 0b10000000, 0b01000000}, // Elekid - {0b00100101, 0b01000000, 0b00000000, 0b01000000, 0b00100010, 0b00010000, 0b00001100, 0b00000000, 0b00001100, 0b00000000, 0b00000000, 0b00001010, 0b00000011, 0b10001100, 0b10000000, 0b00010010, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b10000100, 0b00000010, 0b00000100, 0b00000000, 0b00010001, 0b00000110, 0b10100001, 0b00000001, 0b00000110, 0b01000000, 0b01000000}, // Magby - {0b00000101, 0b11000000, 0b00000001, 0b01000000, 0b01100010, 0b00000100, 0b00000000, 0b01110001, 0b00001110, 0b00001000, 0b00000111, 0b01001000, 0b00000010, 0b10000001, 0b00000110, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b00000110, 0b00010010, 0b00000100, 0b00001000, 0b01010101, 0b10000111, 0b11100001, 0b00000001, 0b00000100, 0b11001001, 0b01000000}, // Miltank - {0b01010100, 0b00000000, 0b00000000, 0b01000000, 0b00100011, 0b00000101, 0b00000100, 0b00110001, 0b00001110, 0b00001000, 0b00000111, 0b01001010, 0b00000010, 0b10010001, 0b01000010, 0b01000010, 0b00000001, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00001000, 0b01010101, 0b00000110, 0b10110001, 0b00000001, 0b00000100, 0b11000001, 0b01000000}, // Blissey - {0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00100010, 0b00011010, 0b00000000, 0b00000001, 0b00000010, 0b00000000, 0b00001111, 0b00011000, 0b00100010, 0b10000000, 0b00010000, 0b00000000, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b01010001, 0b01000010, 0b10100000, 0b00000001, 0b00000100, 0b11101000, 0b01000000}, // Raikou - {0b00000000, 0b00000001, 0b00000001, 0b00000000, 0b00100010, 0b00011010, 0b00001100, 0b00000001, 0b00000010, 0b00001000, 0b00010000, 0b00011000, 0b00000010, 0b10000000, 0b00010000, 0b00000010, 0b01000000, 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b01010001, 0b00000010, 0b10100000, 0b00000001, 0b00000100, 0b11001000, 0b01000000}, // Entei - {0b00000000, 0b00000001, 0b10000000, 0b00000000, 0b00100010, 0b00011010, 0b00000010, 0b11110111, 0b00000000, 0b00000000, 0b00000000, 0b00011000, 0b00000010, 0b10000000, 0b00010000, 0b00000001, 0b01000000, 0b00000000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00001000, 0b01010001, 0b00000010, 0b10100000, 0b00000001, 0b00000100, 0b11011000, 0b01000000}, // Suicune - {0b00000000, 0b00000000, 0b00000001, 0b00000000, 0b00100110, 0b00011000, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b01011000, 0b00000011, 0b10000000, 0b00001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b00000110, 0b00000010, 0b10000100, 0b00000000, 0b11010001, 0b00000110, 0b10100000, 0b00001000, 0b00000100, 0b11100010, 0b01000000}, // Larvitar - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100110, 0b00011000, 0b00000000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b01011000, 0b00000011, 0b10000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b00000100, 0b00000010, 0b10000100, 0b00000000, 0b01010001, 0b00000110, 0b10100000, 0b00000000, 0b00000100, 0b11100000, 0b01000000}, // Pupitar - {0b00000101, 0b00000001, 0b00000000, 0b01000000, 0b00100110, 0b00011010, 0b00000100, 0b01110001, 0b00001110, 0b00000000, 0b00000111, 0b01011000, 0b00000011, 0b10000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00001100, 0b00001000, 0b00000100, 0b00000010, 0b10000100, 0b00000000, 0b01010001, 0b00100110, 0b10100001, 0b00000001, 0b00000100, 0b11100000, 0b01000000}, // Tyranitar - {0b00000000, 0b00000000, 0b10110000, 0b00000000, 0b00100010, 0b00000010, 0b00000000, 0b11110001, 0b00000010, 0b00000000, 0b00000111, 0b01001010, 0b00000010, 0b11000000, 0b01010000, 0b00000001, 0b01000000, 0b00100000, 0b00000000, 0b00001000, 0b00001000, 0b00000100, 0b01000010, 0b00000100, 0b00001000, 0b01110001, 0b00010010, 0b10110000, 0b00000001, 0b00000100, 0b11001011, 0b11000000}, // Lugia - {0b00000000, 0b00000000, 0b10110000, 0b00000000, 0b00000010, 0b00000010, 0b00000100, 0b00000001, 0b00000010, 0b00001000, 0b00000111, 0b01001010, 0b00000010, 0b11000000, 0b01010000, 0b00000010, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00000000, 0b01110001, 0b00010010, 0b10110100, 0b00000000, 0b00000100, 0b11001011, 0b11000000}, // Ho-oh - {0b00000000, 0b00000011, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000001, 0b00000000, 0b01001000, 0b00000000, 0b00001110, 0b00000010, 0b11000001, 0b01010010, 0b00000000, 0b01000000, 0b00100000, 0b00001000, 0b00001000, 0b00001000, 0b00000100, 0b00000010, 0b00000100, 0b00010000, 0b01110001, 0b00000011, 0b10110000, 0b00100000, 0b00000100, 0b11001011, 0b10000000}, // Celebi - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000010, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // Treecko -}; - -#if USE_COMPRESSED_DATA -#else -const u16 gen_1_charsets[4][256]{ - // gen_1_Jpn_char_array - { - 0x20, - 0x30A4, - 0x30F4, - 0x30A8, - 0x30AA, - 0x30AC, - 0x30AE, - 0x30B0, - 0x30B2, - 0x30B4, - 0x30B6, - 0x30B8, - 0x30BA, - 0x30BC, - 0x30BE, - 0x30C0, - 0x20, - 0x30C5, - 0x30C7, - 0x30C9, - 0x30CA, - 0x30CB, - 0x30CC, - 0x30CD, - 0x30CE, - 0x30D0, - 0x30D3, - 0x30D6, - 0x30DC, - 0x30DE, - 0x30DF, - 0x30E0, - 0x30A3, - 0x3042, - 0x3044, - 0x3094, - 0x3048, - 0x304A, - 0x304C, - 0x304E, - 0x3050, - 0x3052, - 0x3054, - 0x3056, - 0x3058, - 0x305A, - 0x305C, - 0x305E, - 0x3060, - 0x3062, - 0x3065, - 0x3067, - 0x3069, - 0x306A, - 0x306B, - 0x306C, - 0x306D, - 0x306E, - 0x3070, - 0x3073, - 0x3076, - 0x3079, - 0x307C, - 0x307E, - 0x30D1, - 0x30D4, - 0x30D7, - 0x30DD, - 0x3071, - 0x3074, - 0x3077, - 0x307A, - 0x307D, - 0x307E, - 0x20, - 0x20, - 0x20, - 0x3082, - 0x20, - 0x20, - 0x19E, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x56, - 0x53, - 0x4C, - 0x4D, - 0xFF1A, - 0x3043, - 0x3045, - 0x300C, - 0x300D, - 0x300E, - 0x300F, - 0x30FB, - 0x2026, - 0x3041, - 0x3047, - 0x3049, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x30A2, - 0x30A4, - 0x30A6, - 0x30A8, - 0x30AA, - 0x30AB, - 0x30AD, - 0x30AF, - 0x30B1, - 0x30B3, - 0x30B5, - 0x30B7, - 0x30B9, - 0x30BB, - 0x30BD, - 0x30BF, - 0x30C1, - 0x30C4, - 0x30C6, - 0x30C8, - 0x30CA, - 0x30CB, - 0x30CC, - 0x30CD, - 0x30CE, - 0x30CF, - 0x30D2, - 0x30D5, - 0x30DB, - 0x30DE, - 0x30DF, - 0x30E0, - 0x30E1, - 0x30E2, - 0x30E4, - 0x30E6, - 0x30E8, - 0x30E9, - 0x30EB, - 0x30EC, - 0x30ED, - 0x30EF, - 0x30F2, - 0x30F3, - 0x30C3, - 0x30E3, - 0x30E5, - 0x30E7, - 0x30A3, - 0x3042, - 0x3044, - 0x3046, - 0x3048, - 0x304A, - 0x304B, - 0x304D, - 0x304F, - 0x3051, - 0x3053, - 0x3055, - 0x3057, - 0x3059, - 0x305B, - 0x305D, - 0x20, - 0x3061, - 0x3064, - 0x3066, - 0x3068, - 0x306A, - 0x306B, - 0x306C, - 0x306D, - 0x306E, - 0x306F, - 0x3072, - 0x3075, - 0x3078, - 0x307B, - 0x307E, - 0x307F, - 0x3080, - 0x3081, - 0x3082, - 0x3084, - 0x3086, - 0x3088, - 0x3089, - 0x30EA, - 0x308B, - 0x308C, - 0x308D, - 0x308F, - 0x3092, - 0x3093, - 0x3063, - 0x3083, - 0x50, - 0x4D, - 0x30FC, - 0x309C, - 0x309B, - 0x3F, - 0x21, - 0x3002, - 0x30A1, - 0x30A5, - 0x30A7, - 0x25B7, - 0x25B6, - 0x25BC, - 0x2642, - 0x5186, - 0xD7, - 0x2E, - 0x2F, - 0x30A9, - 0x2640, - 0x30, - 0x31, - 0x32, - 0x33, - 0x34, - 0x35, - 0x36, - 0x37, - 0x38, - 0x39, - }, - // gen_1_Eng_char_array - { - 0x2400, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x19E, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x56, - 0x53, - 0x4C, - 0x4D, - 0x3A, - 0x3043, - 0x3045, - 0x2018, - 0x2019, - 0x201C, - 0x201D, - 0x30FB, - 0x2026, - 0x3041, - 0x3047, - 0x3049, - 0x2554, - 0x2550, - 0x2557, - 0x2551, - 0x255A, - 0x255D, - 0x2420, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x4A, - 0x4B, - 0x4C, - 0x4D, - 0x4E, - 0x4F, - 0x50, - 0x51, - 0x52, - 0x53, - 0x54, - 0x55, - 0x56, - 0x57, - 0x58, - 0x59, - 0x5A, - 0x28, - 0x29, - 0x3A, - 0x3B, - 0x28, - 0x29, - 0x61, - 0x62, - 0x63, - 0x64, - 0x65, - 0x66, - 0x67, - 0x68, - 0x69, - 0x6A, - 0x6B, - 0x6C, - 0x6D, - 0x6E, - 0x6F, - 0x70, - 0x71, - 0x72, - 0x73, - 0x74, - 0x75, - 0x76, - 0x77, - 0x78, - 0x79, - 0x7A, - 0xE9, - 0x64, - 0x6C, - 0x73, - 0x74, - 0x76, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x50, - 0x4D, - 0x2D, - 0x72, - 0x6D, - 0x3F, - 0x21, - 0x2E, - 0x30A1, - 0x30A5, - 0x30A7, - 0x25B7, - 0x25B6, - 0x25BC, - 0x2642, - 0x20, - 0xD7, - 0x2E, - 0x2F, - 0x2C, - 0x2640, - 0x30, - 0x31, - 0x32, - 0x33, - 0x34, - 0x35, - 0x36, - 0x37, - 0x38, - 0x39, - }, - // gen_1_FreGer_char_array - { - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x19E, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x56, - 0x53, - 0x4C, - 0x4D, - 0x3A, - 0x3043, - 0x3045, - 0x2018, - 0x2019, - 0x201C, - 0x201D, - 0x30FB, - 0x22EF, - 0x3041, - 0x3047, - 0x3049, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x2420, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x4A, - 0x4B, - 0x4C, - 0x4D, - 0x4E, - 0x4F, - 0x50, - 0x51, - 0x52, - 0x53, - 0x54, - 0x55, - 0x56, - 0x57, - 0x58, - 0x59, - 0x5A, - 0x28, - 0x29, - 0x3A, - 0x3B, - 0x28, - 0x29, - 0x61, - 0x62, - 0x63, - 0x64, - 0x65, - 0x66, - 0x67, - 0x68, - 0x69, - 0x6A, - 0x6B, - 0x6C, - 0x6D, - 0x6E, - 0x6F, - 0x70, - 0x71, - 0x72, - 0x73, - 0x74, - 0x75, - 0x76, - 0x77, - 0x78, - 0x79, - 0x7A, - 0xE0, - 0xE8, - 0xE9, - 0xF9, - 0xDF, - 0xE7, - 0x20, - 0xD6, - 0xDC, - 0xE4, - 0xF6, - 0xFC, - 0xEB, - 0xEF, - 0xE2, - 0xF4, - 0xFB, - 0xEA, - 0xEE, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x63, - 0x64, - 0x6A, - 0x6C, - 0x6D, - 0x6E, - 0x70, - 0x73, - 0x73, - 0x74, - 0x75, - 0x79, - 0x20, - 0x50, - 0x4D, - 0x2D, - 0x2B, - 0x20, - 0x3F, - 0x21, - 0x2E, - 0x30A1, - 0x30A5, - 0x30A7, - 0x25B7, - 0x25B6, - 0x25BC, - 0x2642, - 0x20, - 0xD7, - 0x2E, - 0x2F, - 0x2C, - 0x2640, - 0x30, - 0x31, - 0x32, - 0x33, - 0x34, - 0x35, - 0x36, - 0x37, - 0x38, - 0x39, - }, - // gen_1_ItaSpa_char_array - { - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x19E, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x56, - 0x53, - 0x4C, - 0x4D, - 0x3A, - 0x3043, - 0x3045, - 0x2018, - 0x2019, - 0x201C, - 0x201D, - 0x30FB, - 0x22EF, - 0x3041, - 0x3047, - 0x3049, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x2420, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x4A, - 0x4B, - 0x4C, - 0x4D, - 0x4E, - 0x4F, - 0x50, - 0x51, - 0x52, - 0x53, - 0x54, - 0x55, - 0x56, - 0x57, - 0x58, - 0x59, - 0x5A, - 0x28, - 0x29, - 0x3A, - 0x3B, - 0x28, - 0x29, - 0x61, - 0x62, - 0x63, - 0x64, - 0x65, - 0x66, - 0x67, - 0x68, - 0x69, - 0x6A, - 0x6B, - 0x6C, - 0x6D, - 0x6E, - 0x6F, - 0x70, - 0x71, - 0x72, - 0x73, - 0x74, - 0x75, - 0x76, - 0x77, - 0x78, - 0x79, - 0x7A, - 0xE0, - 0xE8, - 0xE9, - 0xF9, - 0xC0, - 0xC1, - 0x20, - 0xD6, - 0xDC, - 0xE4, - 0xF6, - 0xFC, - 0xC8, - 0xC9, - 0xCC, - 0xCD, - 0xD1, - 0xD2, - 0xD3, - 0xD9, - 0xDA, - 0xE1, - 0xEC, - 0xED, - 0xF1, - 0xF2, - 0xF3, - 0xFA, - 0xBA, - 0x26, - 0x64, - 0x6C, - 0x6D, - 0x72, - 0x73, - 0x74, - 0x76, - 0x20, - 0x20, - 0x50, - 0x4D, - 0x2D, - 0xBF, - 0xA1, - 0x3F, - 0x21, - 0x2E, - 0x30A1, - 0x30A5, - 0x30A7, - 0x25B7, - 0x25B6, - 0x25BC, - 0x2642, - 0x20, - 0xD7, - 0x2E, - 0x2F, - 0x2C, - 0x2640, - 0x30, - 0x31, - 0x32, - 0x33, - 0x34, - 0x35, - 0x36, - 0x37, - 0x38, - 0x39, - }}; -const u16 gen_2_charsets[4][256]{ - // gen_2_Jpn_char_array - { - 0x3F, - 0x30A4, - 0x30F4, - 0x30A8, - 0x30AA, - 0x30AC, - 0x30AE, - 0x30B0, - 0x30B2, - 0x30B4, - 0x30B6, - 0x30B8, - 0x30BA, - 0x30BC, - 0x30BE, - 0x30C0, - 0x30C2, - 0x30C5, - 0x30C7, - 0x30C9, - 0x2A, - 0x2A, - 0x2A, - 0x30CD, - 0x30CE, - 0x30D0, - 0x30D3, - 0x30D6, - 0x30DC, - 0x2A, - 0x2A, - 0x2A, - 0x30A3, - 0x3042, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x304C, - 0x304E, - 0x3050, - 0x3052, - 0x3054, - 0x3056, - 0x3058, - 0x305A, - 0x305C, - 0x305E, - 0x3060, - 0x3062, - 0x3065, - 0x3067, - 0x3069, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x3070, - 0x3073, - 0x3076, - 0x3079, - 0x307C, - 0x2A, - 0x30D1, - 0x30D4, - 0x30D7, - 0x30DD, - 0x3071, - 0x3074, - 0x3077, - 0x307A, - 0x307D, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x3082, - 0x2A, - 0x2A, - 0x19E, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x20, - 0x25B2, - 0x20, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x56, - 0x53, - 0x4C, - 0x4D, - 0x3A, - 0x3043, - 0x3045, - 0x300C, - 0x300D, - 0x300E, - 0x300F, - 0x30FB, - 0x22EF, - 0x3041, - 0x3047, - 0x3049, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x30A2, - 0x30A4, - 0x30A6, - 0x30A8, - 0x30AA, - 0x30AB, - 0x30AD, - 0x30AF, - 0x30B1, - 0x30B3, - 0x30B5, - 0x30B7, - 0x30B9, - 0x30BB, - 0x30BD, - 0x30BF, - 0x30C1, - 0x30C4, - 0x30C6, - 0x30C8, - 0x30CA, - 0x30CB, - 0x30CC, - 0x30CD, - 0x30CE, - 0x30CF, - 0x30D2, - 0x30D5, - 0x30DB, - 0x30DE, - 0x30DF, - 0x30E0, - 0x30E1, - 0x30E2, - 0x30E4, - 0x30E6, - 0x30E8, - 0x30E9, - 0x30EB, - 0x30EC, - 0x30ED, - 0x30EF, - 0x30F2, - 0x30F3, - 0x30C3, - 0x30E3, - 0x30E5, - 0x30E7, - 0x30A3, - 0x3042, - 0x3044, - 0x3046, - 0x3048, - 0x304A, - 0x304B, - 0x304D, - 0x304F, - 0x3051, - 0x3053, - 0x3055, - 0x3057, - 0x3059, - 0x305B, - 0x305D, - 0x305F, - 0x3061, - 0x3064, - 0x3066, - 0x3068, - 0x306A, - 0x306B, - 0x306C, - 0x306D, - 0x306E, - 0x306F, - 0x3072, - 0x3075, - 0x3078, - 0x307B, - 0x307E, - 0x307F, - 0x3080, - 0x3081, - 0x3082, - 0x3084, - 0x3086, - 0x3088, - 0x3089, - 0x30EA, - 0x308B, - 0x308C, - 0x308D, - 0x308F, - 0x3092, - 0x3093, - 0x3063, - 0x3083, - 0x3085, - 0x3087, - 0x30FC, - 0x309C, - 0x309B, - 0x3F, - 0x21, - 0x3002, - 0x30A1, - 0x30A5, - 0x30A7, - 0x25B7, - 0x25B6, - 0x25BC, - 0x2642, - 0x5186, - 0xD7, - 0x2E, - 0x2F, - 0x30A9, - 0x2640, - 0x30, - 0x31, - 0x32, - 0x33, - 0x34, - 0x35, - 0x36, - 0x37, - 0x38, - 0x39, - }, - // gen_2_Eng_char_array - { - 0x3F, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x4A, - 0x4B, - 0x4C, - 0x4D, - 0x4E, - 0x4F, - 0x50, - 0x51, - 0x52, - 0x53, - 0x54, - 0x20, - 0x20, - 0x20, - 0x58, - 0x59, - 0x5A, - 0x28, - 0x29, - 0x3A, - 0x3B, - 0x28, - 0x20, - 0x71, - 0x72, - 0x20, - 0x20, - 0x20, - 0x20, - 0x77, - 0x78, - 0x79, - 0x7A, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0xC4, - 0xD6, - 0xDC, - 0xE4, - 0xF6, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x5A, - 0x28, - 0x29, - 0x3A, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x72, - 0x20, - 0x20, - 0x19E, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x2588, - 0x25B2, - 0x20, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x56, - 0x53, - 0x4C, - 0x4D, - 0x3A, - 0x3043, - 0x3045, - 0x50, - 0x4B, - 0x201C, - 0x201D, - 0x30FB, - 0x2026, - 0x3041, - 0x3047, - 0x3049, - 0x20, - 0x2550, - 0x2557, - 0x2551, - 0x255A, - 0x255D, - 0x2420, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x4A, - 0x4B, - 0x4C, - 0x4D, - 0x4E, - 0x4F, - 0x50, - 0x51, - 0x52, - 0x53, - 0x54, - 0x55, - 0x56, - 0x57, - 0x58, - 0x59, - 0x5A, - 0x28, - 0x29, - 0x3A, - 0x3B, - 0x28, - 0x29, - 0x61, - 0x62, - 0x63, - 0x64, - 0x65, - 0x66, - 0x67, - 0x68, - 0x69, - 0x6A, - 0x6B, - 0x6C, - 0x6D, - 0x6E, - 0x6F, - 0x70, - 0x71, - 0x72, - 0x73, - 0x74, - 0x75, - 0x76, - 0x77, - 0x78, - 0x79, - 0x7A, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0xC4, - 0xD6, - 0xDC, - 0xE4, - 0xF6, - 0xFC, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x64, - 0x6C, - 0x6D, - 0x72, - 0x73, - 0x74, - 0x76, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0xD83E, - 0x20, - 0x50, - 0x4D, - 0x2D, - 0x20, - 0x20, - 0x3F, - 0x21, - 0x2E, - 0x26, - 0xE9, - 0xD83E, - 0x25B7, - 0x25B6, - 0x25BC, - 0x2642, - 0x20, - 0xD7, - 0x2E, - 0x2F, - 0x2C, - 0x2640, - 0x30, - 0x31, - 0x32, - 0x33, - 0x34, - 0x35, - 0x36, - 0x37, - 0x38, - 0x39, - }, - // gen_2_FreGer_char_array - { - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x19E, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x25B2, - 0x20, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x56, - 0x53, - 0x4C, - 0x4D, - 0x3A, - 0x3043, - 0x3045, - 0x50, - 0x4B, - 0x201C, - 0x201D, - 0x30FB, - 0x2026, - 0x3041, - 0x3047, - 0x3049, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x4A, - 0x4B, - 0x4C, - 0x4D, - 0x4E, - 0x4F, - 0x50, - 0x51, - 0x52, - 0x53, - 0x54, - 0x55, - 0x56, - 0x57, - 0x58, - 0x59, - 0x5A, - 0x28, - 0x29, - 0x3A, - 0x3B, - 0x28, - 0x29, - 0x61, - 0x62, - 0x63, - 0x64, - 0x65, - 0x66, - 0x67, - 0x68, - 0x69, - 0x6A, - 0x6B, - 0x6C, - 0x6D, - 0x6E, - 0x6F, - 0x70, - 0x71, - 0x72, - 0x73, - 0x74, - 0x75, - 0x76, - 0x77, - 0x78, - 0x79, - 0x7A, - 0xE0, - 0xE8, - 0xE9, - 0xF9, - 0xDF, - 0xE7, - 0xC4, - 0xD6, - 0xDC, - 0xE4, - 0xF6, - 0xFC, - 0xEB, - 0xEF, - 0xE2, - 0xF4, - 0xFB, - 0xEA, - 0xEE, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x63, - 0x64, - 0x6A, - 0x6C, - 0x6D, - 0x6E, - 0x70, - 0x73, - 0x73, - 0x74, - 0x75, - 0x79, - 0x20, - 0x50, - 0x4D, - 0x2D, - 0x2B, - 0x20, - 0x3F, - 0x21, - 0x2E, - 0x26, - 0xE9, - 0x20, - 0x25B7, - 0x25B6, - 0x25BC, - 0x2642, - 0x20, - 0xD7, - 0x2E, - 0x2F, - 0x2C, - 0x2640, - 0x30, - 0x31, - 0x32, - 0x33, - 0x34, - 0x35, - 0x36, - 0x37, - 0x38, - 0x39, - }, - // gen_2_ItaSpa_char_array - { - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x19E, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x25B2, - 0x20, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x56, - 0x53, - 0x4C, - 0x4D, - 0x3A, - 0x3043, - 0x3045, - 0x50, - 0x4B, - 0x201C, - 0x201D, - 0x30FB, - 0x2026, - 0x3041, - 0x3047, - 0x3049, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x4A, - 0x4B, - 0x4C, - 0x4D, - 0x4E, - 0x4F, - 0x50, - 0x51, - 0x52, - 0x53, - 0x54, - 0x55, - 0x56, - 0x57, - 0x58, - 0x59, - 0x5A, - 0x28, - 0x29, - 0x3A, - 0x3B, - 0x28, - 0x29, - 0x61, - 0x62, - 0x63, - 0x64, - 0x65, - 0x66, - 0x67, - 0x68, - 0x69, - 0x6A, - 0x6B, - 0x6C, - 0x6D, - 0x6E, - 0x6F, - 0x70, - 0x71, - 0x72, - 0x73, - 0x74, - 0x75, - 0x76, - 0x77, - 0x78, - 0x79, - 0x7A, - 0xE0, - 0xE8, - 0xE9, - 0xF9, - 0xC0, - 0xC1, - 0xC4, - 0xD6, - 0xDC, - 0xE4, - 0xF6, - 0xFC, - 0xC8, - 0xC9, - 0xCC, - 0xCD, - 0xD1, - 0xD2, - 0xD3, - 0xD9, - 0xDA, - 0xE1, - 0xEC, - 0xED, - 0xF1, - 0xF2, - 0xF3, - 0xFA, - 0xBA, - 0x26, - 0x64, - 0x6C, - 0x6D, - 0x72, - 0x73, - 0x74, - 0x76, - 0x20, - 0x20, - 0x50, - 0x4D, - 0x2D, - 0xBF, - 0xA1, - 0x3F, - 0x21, - 0x2E, - 0x26, - 0xE9, - 0x20, - 0x25B7, - 0x25B6, - 0x25BC, - 0x2642, - 0x20, - 0xD7, - 0x2E, - 0x2F, - 0x2C, - 0x2640, - 0x30, - 0x31, - 0x32, - 0x33, - 0x34, - 0x35, - 0x36, - 0x37, - 0x38, - 0x39, - }}; -const u16 gen_3_charsets[2][256]{ - // gen_3_Jpn_char_array - { - 0x20, - 0x3042, - 0x3044, - 0x3046, - 0x3048, - 0x304A, - 0x304B, - 0x304D, - 0x304F, - 0x3051, - 0x3053, - 0x3055, - 0x3057, - 0x3059, - 0x305B, - 0x305D, - 0x305F, - 0x3061, - 0x3064, - 0x3066, - 0x3068, - 0x306A, - 0x306B, - 0x306C, - 0x306D, - 0x306E, - 0x306F, - 0x3072, - 0x3075, - 0x3078, - 0x307B, - 0x307E, - 0x307F, - 0x3080, - 0x3081, - 0x3082, - 0x3084, - 0x3086, - 0x3088, - 0x3089, - 0x308A, - 0x308B, - 0x308C, - 0x308D, - 0x308F, - 0x3092, - 0x3093, - 0x3041, - 0x3043, - 0x3045, - 0x3047, - 0x3049, - 0x3083, - 0x3085, - 0x3087, - 0x304C, - 0x304E, - 0x3050, - 0x3052, - 0x3054, - 0x3056, - 0x3058, - 0x305A, - 0x305C, - 0x305E, - 0x3060, - 0x3062, - 0x3065, - 0x3067, - 0x3069, - 0x3070, - 0x3073, - 0x3076, - 0x3079, - 0x307C, - 0x3071, - 0x3074, - 0x3077, - 0x307A, - 0x307D, - 0x3063, - 0x30A2, - 0x30A4, - 0x30A6, - 0x30A8, - 0x30AA, - 0x30AB, - 0x30AD, - 0x30AF, - 0x30B1, - 0x30B3, - 0x30B5, - 0x30B7, - 0x30B9, - 0x30BB, - 0x30BD, - 0x30BF, - 0x30C1, - 0x30C4, - 0x30C6, - 0x30C8, - 0x30CA, - 0x30CB, - 0x30CC, - 0x30CD, - 0x30CE, - 0x30CF, - 0x30D2, - 0x30D5, - 0x30D8, - 0x30DB, - 0x30DE, - 0x30DF, - 0x30E0, - 0x30E1, - 0x30E2, - 0x30E4, - 0x30E6, - 0x30E8, - 0x30E9, - 0x30EA, - 0x20, - 0x30EC, - 0x30ED, - 0x30EF, - 0x30F2, - 0x30F3, - 0x30A1, - 0x30A3, - 0x30A5, - 0x30A7, - 0x30A9, - 0x30E3, - 0x30E5, - 0x30E7, - 0x30AC, - 0x30AE, - 0x30B0, - 0x30B2, - 0x30B4, - 0x30B6, - 0x30B8, - 0x30BA, - 0x30BC, - 0x30BE, - 0x30C0, - 0x30C2, - 0x30C5, - 0x30C7, - 0x30C9, - 0x30D0, - 0x30D3, - 0x30D6, - 0x30D9, - 0x30DC, - 0x30D1, - 0x30D4, - 0x30D7, - 0x30DA, - 0x30DD, - 0x30C3, - 0x30, - 0x31, - 0x32, - 0x33, - 0x34, - 0x35, - 0x36, - 0x37, - 0x38, - 0x39, - 0xFF01, - 0xFF1F, - 0x3002, - 0x30FC, - 0x30FB, - 0x30FB, - 0x300E, - 0x300F, - 0x300C, - 0x300D, - 0x2642, - 0x2640, - 0x5186, - 0x2E, - 0xD7, - 0x2F, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x4A, - 0x4B, - 0x4C, - 0x4D, - 0x4E, - 0x4F, - 0x50, - 0x51, - 0x52, - 0x53, - 0x54, - 0x55, - 0x56, - 0x57, - 0x58, - 0x59, - 0x5A, - 0x61, - 0x62, - 0x63, - 0x64, - 0x65, - 0x66, - 0x67, - 0x68, - 0x69, - 0x6A, - 0x6B, - 0x6C, - 0x6D, - 0x6E, - 0x6F, - 0x70, - 0x71, - 0x72, - 0x73, - 0x74, - 0x75, - 0x76, - 0x77, - 0x78, - 0x79, - 0x7A, - 0x25B6, - 0x3A, - 0xC4, - 0xD6, - 0xDC, - 0xE4, - 0xF6, - 0xFC, - 0x2B06, - 0x2B07, - 0x2B05, - 0x15E, - 0x23C, - 0x206, - 0x1B2, - 0x147, - 0x19E, - }, - // gen_3_Intern_char_array - { - 0x20, - 0xC0, - 0xC1, - 0xC2, - 0xC7, - 0xC8, - 0xC9, - 0xCA, - 0xCB, - 0xCC, - 0x20, - 0xCE, - 0xCF, - 0xD2, - 0xD3, - 0xD4, - 0x152, - 0xD9, - 0xDA, - 0xDB, - 0xD1, - 0xDF, - 0xE0, - 0xE1, - 0x20, - 0xE7, - 0xE8, - 0xE9, - 0xEA, - 0xEB, - 0xEC, - 0x20, - 0xEE, - 0xEF, - 0xF2, - 0xF3, - 0xF4, - 0x153, - 0xF9, - 0xFA, - 0xFB, - 0xF1, - 0xBA, - 0xAA, - 0x1D49, - 0x26, - 0x2B, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x3D, - 0x3B, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x25AF, - 0xBF, - 0xA1, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0xCD, - 0x25, - 0x28, - 0x29, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0xE2, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0xED, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x2B07, - 0x2B05, - 0x27A1, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x2A, - 0x1D49, - 0x3C, - 0x3E, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x2B3, - 0x30, - 0x31, - 0x32, - 0x33, - 0x34, - 0x35, - 0x36, - 0x37, - 0x38, - 0x39, - 0x21, - 0x3F, - 0x2E, - 0x2D, - 0x30FB, - 0x2026, - 0x201C, - 0x201D, - 0x2018, - 0x2019, - 0x2642, - 0x2640, - 0x20, - 0x2C, - 0xD7, - 0x2F, - 0x41, - 0x42, - 0x43, - 0x44, - 0x45, - 0x46, - 0x47, - 0x48, - 0x49, - 0x4A, - 0x4B, - 0x4C, - 0x4D, - 0x4E, - 0x4F, - 0x50, - 0x51, - 0x52, - 0x53, - 0x54, - 0x55, - 0x56, - 0x57, - 0x58, - 0x59, - 0x5A, - 0x61, - 0x62, - 0x63, - 0x64, - 0x65, - 0x66, - 0x67, - 0x68, - 0x69, - 0x6A, - 0x6B, - 0x6C, - 0x6D, - 0x6E, - 0x6F, - 0x70, - 0x71, - 0x72, - 0x73, - 0x74, - 0x75, - 0x76, - 0x77, - 0x78, - 0x79, - 0x7A, - 0x25B6, - 0x3A, - 0xC4, - 0xD6, - 0xDC, - 0xE4, - 0xF6, - 0xFC, - 0x20, - 0x20, - 0x20, - 0x15E, - 0x23C, - 0x206, - 0x1B2, - 0x147, - 0x19E, - }}; -#endif - -static void load_table(u8 *table, const u8 *source, bool &loadedBool) -{ - if (loadedBool) - { - return; - } -#if USE_COMPRESSED_DATA - LZ77UnCompWram(source, table); -#endif - loadedBool = true; -} - -PokemonTables::PokemonTables() - : exp_groups_loaded(false), gender_ratios_loaded(false), num_abilities_loaded(false), first_moves_loaded(false), power_points_loaded(false), event_pkmn_loaded(false), types_loaded(false), input_charset_type(0), gen3_charset_type(0) -{ -} - -void PokemonTables::load_exp_groups() -{ -#if USE_COMPRESSED_DATA - load_table(EXP_GROUPS, EXP_GROUPS_lz10_bin, exp_groups_loaded); -#endif -} - -void PokemonTables::load_gender_ratios() -{ -#if USE_COMPRESSED_DATA - load_table(GENDER_RATIO, GENDER_RATIO_lz10_bin, gender_ratios_loaded); -#endif -} - -void PokemonTables::load_num_abilities() -{ -#if USE_COMPRESSED_DATA - load_table((uint8_t *)NUM_ABILITIES, NUM_ABILITIES_lz10_bin, num_abilities_loaded); -#endif -} - -void PokemonTables::load_first_moves() -{ -#if USE_COMPRESSED_DATA - load_table(FIRST_MOVES, FIRST_MOVES_lz10_bin, first_moves_loaded); -#endif -} - -void PokemonTables::load_power_points() -{ -#if USE_COMPRESSED_DATA - load_table(POWER_POINTS, POWER_POINTS_lz10_bin, power_points_loaded); -#endif -} - -void PokemonTables::load_event_pkmn() -{ -#if USE_COMPRESSED_DATA - load_table((uint8_t *)EVENT_PKMN, EVENT_PKMN_lz10_bin, event_pkmn_loaded); -#endif -} - -void PokemonTables::load_types() -{ -#if USE_COMPRESSED_DATA - load_table((uint8_t *)TYPES, TYPES_lz10_bin, types_loaded); -#endif -} - -void PokemonTables::load_input_charset(byte gen, Language lang) -{ - const u8 desired_charset = (gen << 4) | (lang); - if (input_charset_type == desired_charset) - { - return; - } - load_localized_charset(input_charset, gen, lang); - input_charset_type = desired_charset; -} - -void PokemonTables::load_gen3_charset(Language lang) -{ - // transform lang into the value that would get stored in gen3_charset_index - if (lang == KOREAN) - { - lang = JAPANESE; - } - else if (lang != JAPANESE) - { - lang = ENGLISH; - } - - if (gen3_charset_type == lang) - { - return; - } - - load_localized_charset(gen3_charset, 3, lang); - gen3_charset_type = lang; -} - -u32 PokemonTables::get_max_exp(int index_num) -{ - load_exp_groups(); - int exp_group = EXP_GROUPS[index_num]; - u32 exp_max = EXP_MAXIMUMS[exp_group]; - u32 test = exp_max; - return test; -} - -u8 PokemonTables::get_gender_threshold(int index_num, bool is_gen_3) -{ - load_gender_ratios(); - return GENDER_THRESHOLDS[is_gen_3][GENDER_RATIO[index_num]]; -} - -// If the Pokemon has two abilities it returns a 1, since ability 1 is valid. Otherwise it returns 0 -bool PokemonTables::get_num_abilities(int index_num) -{ - if (index_num == 0x115) // Hardcode Treecko - dumb, but it works - { - return 0; // Treecko only has one ability; - } - load_num_abilities(); - return NUM_ABILITIES[index_num]; -} - -bool PokemonTables::can_learn_move(int pkmn_index, int move_index) -{ - if (move_index == 0) - { - return false; - } - byte data_byte = MOVESETS[pkmn_index][move_index / 8]; - data_byte |= MOVESETS[EVOLUTIONS[pkmn_index]][move_index / 8]; // add in the previous evolution's moves (if they exist) - data_byte |= MOVESETS[EVOLUTIONS[EVOLUTIONS[pkmn_index]]][move_index / 8]; // add in the first evolution's moves (if they exist) - return (data_byte >> (7 - (move_index % 8))) & 0x1; -} - -byte PokemonTables::get_earliest_move(int index_num) -{ - load_first_moves(); - return FIRST_MOVES[index_num]; -} - -byte PokemonTables::get_gen_3_char(u16 input_char) -{ - return get_char_from_charset(gen3_charset, input_char); -} - -// This table indicates the index of each specific charset in their generations' charsets file -static const u8 localization_charset_indices[]{ - 0, // gen 1 JPN - 1, // gen 1 ENG - 2, // gen 1 FR/GER - 2, // gen 1 FR/GER - 3, // gen 1 ITA/SPA - 3, // gen 1 ITA/SPA - 0, // gen 1 KOR -> JPN (unused in gen 1) - 0, // gen 2 JPN - 1, // gen 2 ENG - 2, // gen 2 FR/GER - 2, // gen 2 FR/GER - 3, // gen 2 ITA/SPA - 3, // gen 2 ITA/SPA - 0, // gen 2 KOR -> JPN - 0, // gen 3 JPN - 1, // gen 3 International - 1, // gen 3 International - 1, // gen 3 International - 1, // gen 3 International - 1, // gen 3 International - 0, // gen 3 KOR -> JPN -}; - -void load_localized_charset(u16 *output_char_array, byte gen, Language lang) -{ - u8 generation_charsets[2048]; - const u8 *input_data; - // in the localization_charset_indices list, - // gen 1 starts first and every gen has 7 entries (1 per language) - // however, the language values are 1-based, so we need to convert to 0-based - const u8 lang_index = localization_charset_indices[(gen - 1) * 7 + (lang - 1)]; - -#if USE_COMPRESSED_DATA - switch (gen) - { - case 1: - input_data = gen_1_charsets_lz10_bin; - break; - case 2: - input_data = gen_2_charsets_lz10_bin; - break; - case 3: - input_data = gen_3_charsets_lz10_bin; - break; - default: - // Invalid generation, return without doing anything - return; - } - - LZ77UnCompWram(input_data, generation_charsets); -#else - switch (gen) - { - case 1: - memcpy(generation_charsets, gen_1_charsets, 4 * 256); - break; - case 2: - memcpy(generation_charsets, gen_2_charsets, 4 * 256); - break; - case 3: - memcpy(generation_charsets, gen_3_charsets, 4 * 256); - break; - default: - // Invalid generation, return without doing anything - return; - } - -#endif - - memcpy(output_char_array, generation_charsets + (lang_index * 256 * sizeof(u16)), 256 * sizeof(u16)); // copy the charset into the output array -} - -byte get_char_from_charset(const u16 *charset, u16 input_char) -{ - u16 i = 0; - while (i < 256) - { - if (charset[i] == input_char) - { - return i; - } - ++i; - } - return 0; -} \ No newline at end of file