From 532a095d7781e70f21b9d63c868be62908b2e9a8 Mon Sep 17 00:00:00 2001 From: Philippe Symons Date: Thu, 24 Apr 2025 21:14:48 +0200 Subject: [PATCH] Implement zx0 compression Compress data tables with the ZX0 compression algorithm --- Dockerfile | 12 + Makefile | 425 +- buildDockerImg.sh | 5 + docker-compose.yml | 54 +- include/libstd_replacements.h | 2 +- include/mystery_gift_builder.h | 3 +- include/pokemon.h | 14 +- include/pokemon_data.h | 106 +- include/pokemon_party.h | 4 +- include/script_obj.h | 18 +- include/script_var.h | 4 +- include/select_menu.h | 14 +- include/sprite_data.h | 4 +- include/text_engine.h | 2 +- include/zx0_decompressor.h | 50 + source/flash_mem.cpp | 11 +- source/main.cpp | 45 +- source/mystery_gift_builder.cpp | 29 +- source/mystery_gift_injector.cpp | 5 +- source/pokedex.cpp | 9 +- source/pokemon.cpp | 124 +- source/pokemon_data.cpp | 5943 +------------------ source/pokemon_party.cpp | 8 +- source/script_array.cpp | 18 +- source/script_obj.cpp | 25 +- source/script_var.cpp | 8 +- source/select_menu.cpp | 8 +- source/sprite_data.cpp | 8 +- source/text_engine.cpp | 4 +- source/zx0_decompressor.cpp | 475 ++ tools/compressZX0/Makefile | 43 + tools/compressZX0/main.cpp | 433 ++ tools/data-generator/Makefile | 43 + tools/data-generator/include/common.h | 9 + tools/data-generator/include/pokemon_data.h | 6 + tools/data-generator/src/common.cpp | 12 + tools/data-generator/src/main.cpp | 11 + tools/data-generator/src/pokemon_data.cpp | 5420 +++++++++++++++++ 38 files changed, 7255 insertions(+), 6159 deletions(-) create mode 100644 Dockerfile create mode 100755 buildDockerImg.sh create mode 100644 include/zx0_decompressor.h create mode 100644 source/zx0_decompressor.cpp create mode 100644 tools/compressZX0/Makefile create mode 100644 tools/compressZX0/main.cpp create mode 100644 tools/data-generator/Makefile create mode 100644 tools/data-generator/include/common.h create mode 100644 tools/data-generator/include/pokemon_data.h create mode 100644 tools/data-generator/src/common.cpp create mode 100644 tools/data-generator/src/main.cpp create mode 100644 tools/data-generator/src/pokemon_data.cpp diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4dcb580 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM devkitpro/devkitarm + +LABEL author="Poke Transporter GB" + +USER root + +ARG USER_ID +ARG GROUP_ID + +ENV DEBIAN_FRONTEND="noninteractive" + +RUN apt update && apt install -y build-essential diff --git a/Makefile b/Makefile index 7239e05..f6b870d 100644 --- a/Makefile +++ b/Makefile @@ -1,204 +1,221 @@ -# Build configuration (set to either 'debug' or 'release') -BUILD_TYPE := debug - -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- - -ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") -endif - -include $(DEVKITARM)/gba_rules - -#--------------------------------------------------------------------------------- -# the LIBGBA path is defined in gba_rules, but we have to define LIBTONC ourselves -#--------------------------------------------------------------------------------- -LIBTONC := $(DEVKITPRO)/libtonc - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -# DATA is a list of directories containing binary data -# GRAPHICS is a list of directories containing files to be processed by grit -# -# All directories are specified relative to the project directory where -# the makefile is found -# -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR))_mb -BUILD := build -SOURCES := source -INCLUDES := include -DATA := -MUSIC := audio -GRAPHICS := graphics - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- -ARCH := -mthumb -mthumb-interwork - -CFLAGS := -g -Wall -O2\ - -mcpu=arm7tdmi -mtune=arm7tdmi -masm-syntax-unified\ - $(ARCH) - -CFLAGS += $(INCLUDE) -ffunction-sections -fdata-sections -Os -Wall -mthumb -mcpu=arm7tdmi -mtune=arm7tdmi -CXXFLAGS := $(CFLAGS) -g0 -fno-rtti -fno-exceptions -fdata-sections -ffunction-sections -std=c++20 -Wno-volatile -D_GLIBCXX_USE_CXX20_ABI=0 - -ifeq ($(BUILD_TYPE), debug) - CFLAGS += -g -DDEBUG - CXXFLAGS += -g -DDEBUG -else ifeq ($(BUILD_TYPE), release) - - -endif - -ASFLAGS := -g $(ARCH) -LDFLAGS = -Os -g $(ARCH) -Wl,-Map,$(notdir $*.map) -Wl,--gc-sections -mthumb -mcpu=arm7tdmi -mtune=arm7tdmi -Wl,-Map,output.map,--cref -nodefaultlibs - -CFLAGS += -flto -LDFLAGS += -flto - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lmm -ltonc -lgba -lc -lgcc -lsysbase - - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib. -# the LIBGBA path should remain in this list if you want to use maxmod -#--------------------------------------------------------------------------------- -LIBDIRS := $(LIBGBA) $(LIBTONC) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- - - -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) \ - $(foreach dir,$(GRAPHICS),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#ifneq ($(strip $(MUSIC)),) -# export AUDIOFILES := $(foreach dir,$(notdir $(wildcard $(MUSIC)/*.*)),$(CURDIR)/$(MUSIC)/$(dir)) -# BINFILES += soundbank.bin -#endif - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) -#--------------------------------------------------------------------------------- - export LD := $(CC) -#--------------------------------------------------------------------------------- -else -#--------------------------------------------------------------------------------- - export LD := $(CXX) -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- - -export OFILES_BIN := $(addsuffix .o,$(BINFILES)) - -export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) - -export OFILES_GRAPHICS := $(PNGFILES:.png=.o) - -export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) $(OFILES_GRAPHICS) - -export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) $(PNGFILES:.png=.h) - -export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) - -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) - -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - @mkdir -p loader/data - @cp $(TARGET).gba loader/data/multiboot_rom.bin - @$(MAKE) -C loader - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @$(MAKE) -C loader clean - @rm -fr $(BUILD) $(TARGET).elf $(TARGET).gba - - -#--------------------------------------------------------------------------------- -else - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- - -$(OUTPUT).gba : $(OUTPUT).elf - -$(OUTPUT).elf : $(OFILES) - -$(OFILES_SOURCES) : $(HFILES) - -#--------------------------------------------------------------------------------- -# The bin2o rule should be copied and modified -# for each extension used in the data directories -#--------------------------------------------------------------------------------- - -#--------------------------------------------------------------------------------- -# rule to build soundbank from music files -#--------------------------------------------------------------------------------- -#soundbank.bin soundbank.h : $(AUDIOFILES) -#--------------------------------------------------------------------------------- -# @mmutil $^ -osoundbank.bin -hsoundbank.h - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .bin extension -#--------------------------------------------------------------------------------- -%.bin.o %_bin.h : %.bin -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) - -#--------------------------------------------------------------------------------- -# This rule creates C source files using grit -# grit takes an image file and a .grit describing how the file is to be processed -# add additional rules like this for each image extension -# you use in the graphics folders -#--------------------------------------------------------------------------------- -%.c %.h: %.png %.grit -#--------------------------------------------------------------------------------- - @echo "grit $(notdir $<)" - @grit $< -ftc -o$* - -# make likes to delete intermediate files. This prevents it from deleting the -# files generated by grit after building the GBA ROM. -.SECONDARY: - --include $(DEPSDIR)/*.d -#--------------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------------- +# Build configuration (set to either 'debug' or 'release') +BUILD_TYPE := release + +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +include $(DEVKITARM)/gba_rules + +#--------------------------------------------------------------------------------- +# the LIBGBA path is defined in gba_rules, but we have to define LIBTONC ourselves +#--------------------------------------------------------------------------------- +LIBTONC := $(DEVKITPRO)/libtonc + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +# DATA is a list of directories containing binary data +# GRAPHICS is a list of directories containing files to be processed by grit +# +# All directories are specified relative to the project directory where +# the makefile is found +# +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR))_mb +BUILD := build +SOURCES := source +INCLUDES := include +DATA := data +MUSIC := audio +GRAPHICS := graphics + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -mthumb -mthumb-interwork + +CFLAGS := -Wall -O2\ + -mcpu=arm7tdmi -mtune=arm7tdmi -masm-syntax-unified\ + $(ARCH) + +CFLAGS += $(INCLUDE) -ffunction-sections -fdata-sections -Os -Wall -mthumb -mcpu=arm7tdmi -mtune=arm7tdmi +CXXFLAGS := $(CFLAGS) -g0 -fno-rtti -fno-exceptions -fdata-sections -ffunction-sections -std=c++20 -Wno-volatile -D_GLIBCXX_USE_CXX20_ABI=0 + +ifeq ($(BUILD_TYPE), debug) + CFLAGS += -g -DDEBUG + CXXFLAGS += -g -DDEBUG +else ifeq ($(BUILD_TYPE), release) + + +endif + +ASFLAGS := $(ARCH) +LDFLAGS = -Os $(ARCH) -Wl,-Map,$(notdir $*.map) -Wl,--gc-sections -mthumb -mcpu=arm7tdmi -mtune=arm7tdmi -Wl,-Map,output.map,--cref -nodefaultlibs + +CFLAGS += -flto +LDFLAGS += -flto + +ifeq ($(BUILD_TYPE), debug) +ASFLAGS += -g +LDFLAGS += -g +endif + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lmm -ltonc -lgba -lc -lgcc -lsysbase + + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib. +# the LIBGBA path should remain in this list if you want to use maxmod +#--------------------------------------------------------------------------------- +LIBDIRS := $(LIBGBA) $(LIBTONC) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- + + +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) \ + $(foreach dir,$(GRAPHICS),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png))) + +#ifneq ($(strip $(MUSIC)),) +# export AUDIOFILES := $(foreach dir,$(notdir $(wildcard $(MUSIC)/*.*)),$(CURDIR)/$(MUSIC)/$(dir)) +# BINFILES += soundbank.bin +#endif + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export OFILES_GRAPHICS := $(PNGFILES:.png=.o) + +export OFILES := $(OFILES_SOURCES) $(OFILES_GRAPHICS) + +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) $(PNGFILES:.png=.h) + +export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +.PHONY: $(BUILD) generate_data clean + +all: $(BUILD) + +generate_data: + mkdir -p data + @env -i PATH=$(PATH) $(MAKE) -C tools/compressZX0 + @env -i PATH=$(PATH) $(MAKE) -C tools/data-generator + @cd tools/data-generator && ./data-generator + @find tools/data-generator -name *.bin | xargs -i tools/compressZX0/compressZX0 {} data/ + +#--------------------------------------------------------------------------------- +$(BUILD): generate_data + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + @mkdir -p loader/data + @cp $(TARGET).gba loader/data/multiboot_rom.bin + @$(MAKE) -C loader + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @$(MAKE) -C tools/compressZX0 clean + @$(MAKE) -C tools/data-generator clean + @$(MAKE) -C loader clean + @rm -fr $(BUILD) $(TARGET).elf $(TARGET).gba data/ + + +#--------------------------------------------------------------------------------- +else + +BINFILES := $(foreach dir,../$(DATA),$(notdir $(wildcard $(dir)/*.*))) +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +OFILES += $(OFILES_BIN) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- + +$(OUTPUT).gba : $(OUTPUT).elf + +$(OUTPUT).elf : $(OFILES) + +$(OFILES_SOURCES) : $(HFILES) + +#--------------------------------------------------------------------------------- +# The bin2o rule should be copied and modified +# for each extension used in the data directories +#--------------------------------------------------------------------------------- + +#--------------------------------------------------------------------------------- +# rule to build soundbank from music files +#--------------------------------------------------------------------------------- +#soundbank.bin soundbank.h : $(AUDIOFILES) +#--------------------------------------------------------------------------------- +# @mmutil $^ -osoundbank.bin -hsoundbank.h + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .bin extension +#--------------------------------------------------------------------------------- +%.bin.o %_bin.h : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +#--------------------------------------------------------------------------------- +# This rule creates C source files using grit +# grit takes an image file and a .grit describing how the file is to be processed +# add additional rules like this for each image extension +# you use in the graphics folders +#--------------------------------------------------------------------------------- +%.c %.h: %.png %.grit +#--------------------------------------------------------------------------------- + @echo "grit $(notdir $<)" + @grit $< -ftc -o$* + +# make likes to delete intermediate files. This prevents it from deleting the +# files generated by grit after building the GBA ROM. +.SECONDARY: + +-include $(DEPSDIR)/*.d +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/buildDockerImg.sh b/buildDockerImg.sh new file mode 100755 index 0000000..932db1d --- /dev/null +++ b/buildDockerImg.sh @@ -0,0 +1,5 @@ +#!/bin/bash +mkdir -p docker-build && cd docker-build +docker build -t ptgb-builder:latest -f ../Dockerfile . +cd .. && rm -rf docker-build + diff --git a/docker-compose.yml b/docker-compose.yml index e55dc72..8bba183 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,27 +1,27 @@ -# This docker-compose file allows you to pull the devkitpro/devkitarm docker container -# and use it to build the Poke Transporter GB rom(s). -# -# To launch the container itself in the background: -# docker compose up -d -# Note the container name being printed in the terminal. In my case it was this: poke_transporter_gb-build-1 -# -# Then get a terminal into the container like this: -# docker exec -it poke_transporter_gb-build-1 /bin/bash -# -# Now you can build the project inside this terminal. - -version: "3.5" - -services: - build: - image: devkitpro/devkitarm - working_dir: /usr/Poke_Transporter_GB - command: tail -F anything - volumes: - - type: bind - source: ${SSH_AUTH_SOCK} - target: ${SSH_AUTH_SOCK} - - type: bind - source: ${PWD} - target: /usr/Poke_Transporter_GB - +# This docker-compose file allows you to pull the devkitpro/devkitarm docker container +# and use it to build the Poke Transporter GB rom(s). +# +# To launch the container itself in the background: +# docker compose up -d +# Note the container name being printed in the terminal. In my case it was this: poke_transporter_gb-build-1 +# +# Then get a terminal into the container like this: +# docker exec -it poke_transporter_gb-build-1 /bin/bash +# +# Now you can build the project inside this terminal. + +version: "3.5" + +services: + build: + image: ptgb-builder:latest + working_dir: /usr/Poke_Transporter_GB + command: tail -F anything + volumes: + - type: bind + source: ${SSH_AUTH_SOCK} + target: ${SSH_AUTH_SOCK} + - type: bind + source: ${PWD} + target: /usr/Poke_Transporter_GB + diff --git a/include/libstd_replacements.h b/include/libstd_replacements.h index 722484f..3a5bcee 100644 --- a/include/libstd_replacements.h +++ b/include/libstd_replacements.h @@ -43,7 +43,7 @@ namespace ptgb class vector { public: - static constexpr size_t default_capacity = 10; + static constexpr size_t default_capacity = 4; vector() : buffer_() diff --git a/include/mystery_gift_builder.h b/include/mystery_gift_builder.h index 92c1bc9..25ecdf0 100644 --- a/include/mystery_gift_builder.h +++ b/include/mystery_gift_builder.h @@ -256,6 +256,7 @@ #define CPU_SET_32BIT 0x04000000 class mystery_gift_script { + PokemonTables &data_tables; int curr_mg_index; int curr_section30_index; u8 mg_script[MG_SCRIPT_SIZE] = {}; @@ -264,7 +265,7 @@ class mystery_gift_script u8 four_align_value = 0; public: - mystery_gift_script(); + mystery_gift_script(PokemonTables &data_tables); void build_script(Pokemon_Party &incoming_box_data); //void build_script_old(Pokemon_Party &incoming_box_data); u8 get_script_value_at(int index); diff --git a/include/pokemon.h b/include/pokemon.h index 7ed141e..767c446 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -14,6 +14,8 @@ #define GEN2_JPN_SIZE 383 #define GEN2_INT_SIZE 444 +class PokemonTables; + struct Simplified_Pokemon { byte dex_number; @@ -37,18 +39,18 @@ public: int unown_letter = -1; Pokemon(); void load_data(int index, const byte *party_data, int game, int lang); - void convert_to_gen_three(bool simplified, bool stabilize_mythical); + void convert_to_gen_three(PokemonTables& data_tables, bool simplified, bool stabilize_mythical); void copy_from_to(const byte *source, byte *destination, int size, bool reverse_endian); void alocate_data_chunks(byte *G, byte *A, byte *E, byte *M); void insert_data(byte *first, byte *second, byte *third, byte *fourth); byte get_gen_3_data(int index); byte *get_full_gen_3_array(); byte get_unencrypted_data(int index); - byte *convert_text(byte *text_array, int size, int gen, int lang); - u32 generate_pid_save_iv(byte pid_species_index, byte nature, byte *pid_dvs); - u32 generate_pid_iv_match(byte pid_species_index, byte nature, byte *pid_dvs); + byte *convert_text(PokemonTables& data_tables, byte *text_array, int size); + u32 generate_pid_save_iv(PokemonTables &data_tables, byte pid_species_index, byte nature, byte *pid_dvs); + u32 generate_pid_iv_match(PokemonTables& data_tables, byte pid_species_index, byte nature, byte *pid_dvs); byte rand_reverse_mod(byte modulo_divisor, byte target_mod); - byte get_rand_gender_byte(byte index_num, byte attack_DVs); + byte get_rand_gender_byte(PokemonTables &data_tables, byte index_num, byte attack_DVs); byte get_dex_number(); bool get_validity(); bool get_is_new(); @@ -57,7 +59,7 @@ public: u8 get_letter_from_pid(u32 pid); u8 get_nature_from_pid(u32 pid); u8 get_gender_from_pid(u32 pid); - void set_to_event(byte nature); + void set_to_event(PokemonTables &data_tables, byte nature); int num_in_box; int index_in_box; bool is_missingno = false; diff --git a/include/pokemon_data.h b/include/pokemon_data.h index 25362bc..cbcae02 100644 --- a/include/pokemon_data.h +++ b/include/pokemon_data.h @@ -39,37 +39,85 @@ #define NUM_POKEMON 252 #define POKEMON_ARRAY_SIZE NUM_POKEMON + 1 -extern const u8 EXP_GROUPS[POKEMON_ARRAY_SIZE]; extern const u32 EXP_MAXIMUMS[6]; extern const int GENDER_THRESHOLDS[2][8]; -extern const u8 GENDER_RATIO[POKEMON_ARRAY_SIZE]; -extern const bool NUM_ABILITIES[POKEMON_ARRAY_SIZE]; -extern const byte MOVESETS[POKEMON_ARRAY_SIZE][32]; -extern const byte FIRST_MOVES[POKEMON_ARRAY_SIZE]; -extern const char* NAMES[POKEMON_ARRAY_SIZE]; -extern const u16 JPN_NAMES[POKEMON_ARRAY_SIZE][6]; -extern const u8 EVOLUTIONS[POKEMON_ARRAY_SIZE]; -extern const u8 POWER_POINTS[252]; -extern const u8 MENU_SPRITE_PALS[POKEMON_ARRAY_SIZE + 26][2]; -extern const byte gen_1_index_array[191]; -extern const u16 gen_1_Jpn_char_array[256]; -extern const u16 gen_1_Eng_char_array[256]; -extern const u16 gen_1_FreGer_char_array[256]; -extern const u16 gen_1_ItaSpa_char_array[256]; -extern const u16 gen_2_Jpn_char_array[256]; -extern const u16 gen_2_Eng_char_array[256]; -extern const u16 gen_2_FreGer_char_array[256]; -extern const u16 gen_2_ItaSpa_char_array[256]; -extern const u16 gen_3_Jpn_char_array[256]; -extern const u16 gen_3_Intern_char_array[256]; -extern const byte EVENT_PKMN[8][80]; -extern const u8 TYPES[POKEMON_ARRAY_SIZE][2]; -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, bool is_jpn); +/** + * 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 evolutions_loaded; + bool power_points_loaded; + bool gen_1_index_array_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; + bool movesets_loaded; + 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 EVOLUTIONS[POKEMON_ARRAY_SIZE]; + u8 POWER_POINTS[252]; + byte gen_1_index_array[191]; + byte EVENT_PKMN[8][80]; + u8 TYPES[POKEMON_ARRAY_SIZE][2]; + u16 input_charset[256]; + u16 gen3_charset[256]; + byte MOVESETS[POKEMON_ARRAY_SIZE][32]; + + PokemonTables(); + + void load_exp_groups(); + void load_gender_ratios(); + void load_num_abilities(); + void load_first_moves(); + void load_evolutions(); + void load_power_points(); + void load_gen1_index_array(); + void load_event_pkmn(); + void load_types(); + void load_input_charset(byte gen, byte lang); + void load_gen3_charset(byte lang); + void load_movesets(); + + 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, byte lang); +byte get_char_from_charset(const u16 *charset, u16 input_char); #endif \ No newline at end of file diff --git a/include/pokemon_party.h b/include/pokemon_party.h index f45fc7b..645f617 100644 --- a/include/pokemon_party.h +++ b/include/pokemon_party.h @@ -11,7 +11,7 @@ public: void start_link(); void continue_link(bool cancel_connection); int get_last_error(); - Pokemon get_converted_pkmn(int index); + Pokemon get_converted_pkmn(PokemonTables &data_tables, int index); bool get_has_new_pkmn(); void set_game(int nGame); void set_lang(int nLang); @@ -21,7 +21,7 @@ public: void show_sprites(); Simplified_Pokemon simple_pkmn_array[30]; Simplified_Pokemon get_simple_pkmn(int index); - bool fill_simple_pkmn_array(); + bool fill_simple_pkmn_array(PokemonTables &data_tables); bool get_contains_mythical(); void set_mythic_stabilization(bool stabilize); bool contains_valid = false; diff --git a/include/script_obj.h b/include/script_obj.h index b357a2a..fb3f7a6 100644 --- a/include/script_obj.h +++ b/include/script_obj.h @@ -8,21 +8,21 @@ class script_obj { public: script_obj(); - script_obj(const byte* nText, int nNext); // For dialogue - script_obj(int nRun, int nNext); // For commands - script_obj(int nRun, int nNext_if_true, int nNext_if_false); // for conditionals + script_obj(const byte* nText, uint16_t nNext); // For dialogue + script_obj(uint16_t nRun, uint16_t nNext); // For commands + script_obj(uint16_t nRun, uint16_t nNext_if_true, uint16_t nNext_if_false); // for conditionals const byte* get_text(); - int get_true_index(); - int get_false_index(); - int get_cond_id(); + uint16_t get_true_index(); + uint16_t get_false_index(); + uint16_t get_cond_id(); private: const byte* text; bool has_text = false; - int next_index; - int conditional_index; - int next_false_index; + uint16_t next_index; + uint16_t conditional_index; + uint16_t next_false_index; }; #endif \ No newline at end of file diff --git a/include/script_var.h b/include/script_var.h index 96fbf1c..043f390 100644 --- a/include/script_var.h +++ b/include/script_var.h @@ -49,9 +49,9 @@ class textbox_var : public xse_var public: using xse_var::xse_var; void set_text(const byte nText[]); - void insert_text(u8 mg_array[]); + void insert_text(const u16 *charset, u8 mg_array[]); void set_start(); - void insert_virtual_text(u8 mg_array[]); + void insert_virtual_text(const u16 *charset, u8 mg_array[]); void set_virtual_start(); const byte *text; int text_length; diff --git a/include/select_menu.h b/include/select_menu.h index bcfdeb8..5f94547 100644 --- a/include/select_menu.h +++ b/include/select_menu.h @@ -11,21 +11,21 @@ class Select_Menu { public: - Select_Menu(bool enable_cancel, int nMenu_type, int nStartX, int nStartY); + Select_Menu(bool enable_cancel, u8 nMenu_type, int nStartX, int nStartY); int select_menu_main(); void hide_menu(); void show_menu(); void clear_options(); - void add_option(const byte *option, int return_value); - void set_lang(int nLang); + void add_option(const byte *option, u8 return_value); + void set_lang(u8 nLang); private: ptgb::vector menu_options; - ptgb::vector return_values; - unsigned int curr_selection; + ptgb::vector return_values; + u16 curr_selection; bool cancel_enabled; - int menu_type; - int lang; + u8 menu_type; + u8 lang; int startTileX; int startTileY; }; diff --git a/include/sprite_data.h b/include/sprite_data.h index 76bd0dd..10f0fd5 100644 --- a/include/sprite_data.h +++ b/include/sprite_data.h @@ -125,11 +125,11 @@ void load_textbox_background(); void load_flex_background(int background_id, int layer); void load_eternal_sprites(); void load_temp_box_sprites(Pokemon_Party *party_data); -void load_type_sprites(int pkmn_index, int dex_offset, bool is_caught); +void load_type_sprites(const u8* pkmn_type_table, int pkmn_index, int dex_offset, bool is_caught); void add_menu_box(int options, int startTileX, int startTileY); void add_menu_box(int startTileX, int startTileY, int width, int height); void reload_textbox_background(); -void load_select_sprites(int game_id, int lang); +void load_select_sprites(u8 game_id, u8 lang); void fennel_blink(int frame); void fennel_speak(int frame); int get_curr_flex_background(); diff --git a/include/text_engine.h b/include/text_engine.h index cbd5617..6cf503e 100644 --- a/include/text_engine.h +++ b/include/text_engine.h @@ -28,7 +28,7 @@ void set_text_exit(); int ptgb_write(const char *text); int ptgb_write(const byte *text, bool instant); int ptgb_write(const byte *text, bool instant, int length); -int ptgb_write_debug(const char *text, bool instant); +int ptgb_write_debug(const u16* charset, const char *text, bool instant); void wait_for_user_to_continue(bool clear_text); #endif \ No newline at end of file diff --git a/include/zx0_decompressor.h b/include/zx0_decompressor.h new file mode 100644 index 0000000..ec04063 --- /dev/null +++ b/include/zx0_decompressor.h @@ -0,0 +1,50 @@ +#ifndef _ZX0_DECODE_H +#define _ZX0_DECODE_H + +#include + +// The ZX0 decompressor offers functionality to decompress data +// compressed with the ZX0 algorithm (see tools/compressZX0) +// This algorithm was invented by Einar Saukas +// Original implementation can be found here: https://github.com/einar-saukas/ZX0 +// However, we've implemented a custom variant of this algorithm. +// (for instance: we're storing the uncompressed size in the first 2 bytes in little endian) + +// Our implementation "streams" the decompression: the decompression buffer is only 2 KB, so it can't fit the entire +// uncompressed file at once. Therefore it uses a ringbuffer to stream the decompression on-demand. + +extern "C" +{ + /** + * @brief This function slots the specified input_data buffer into the zx0 decompressor. + * Calling this function effectively resets the ZX0 decompressors' internal state. + */ + void zx0_decompressor_set_input(const uint8_t *input_data); + + /** + * @brief This function returns the uncompressed size of the current input_data buffer. + * It reads this from the first 2 bytes of input_data + */ + uint16_t zx0_decompressor_get_decompressed_size(); + + /** + * @brief This function seeks to the specified OUTPUT buffer position. + * NOTE: this is an expensive operation! + * ZX0 doesn't actually support random access. + * + * So if we're seeking forward, we're actually uncompressing the data until we reach the desired output buffer position. + * And if we're seeking backward, we're actually starting to uncompress from scratch until the desired output buffer position! + * + * So handle this with care! + * @param output_byte_pos + */ + void zx0_decompressor_seek(uint16_t output_byte_pos); + + /** + * @brief This function copies of decompressed data into the specified + * It will trigger decompression on the go (streaming basis) + */ + uint16_t zx0_decompressor_read(uint8_t *output_buffer, uint16_t num_bytes); +} + +#endif \ No newline at end of file diff --git a/source/flash_mem.cpp b/source/flash_mem.cpp index ac835e2..f1311b7 100644 --- a/source/flash_mem.cpp +++ b/source/flash_mem.cpp @@ -2,6 +2,7 @@ #include "libstd_replacements.h" #include "flash_mem.h" #include "pokemon.h" +#include "pokemon_data.h" #include "rom_data.h" #include "libraries/Pokemon-Gen3-to-Gen-X/include/save.h" #include "text_engine.h" @@ -96,10 +97,14 @@ void initalize_memory_locations() void print_mem_section() { return; // This function isn't really needed now + uint16_t charset[256]; byte out[4] = {0, 0, 0, 0xFF}; - out[0] = get_gen_3_char(mem_name, false); - out[1] = get_gen_3_char('-', false); - out[2] = get_gen_3_char(mem_id + 0xA1, false); // Kinda a dumb way to + + load_localized_charset(charset, 3, ENG_ID); + + out[0] = get_char_from_charset(charset, mem_name); + out[1] = get_char_from_charset(charset, '-'); + out[2] = get_char_from_charset(charset, mem_id + 0xA1); // Kinda a dumb way to tte_set_pos(0, 0); ptgb_write(out, true); } diff --git a/source/main.cpp b/source/main.cpp index 8745d33..e1812cd 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -11,6 +11,7 @@ #include "text_engine.h" #include "background_engine.h" #include "pokemon_party.h" +#include "pokemon_data.h" #include "script_array.h" #include "sprite_data.h" #include "button_handler.h" @@ -253,6 +254,8 @@ int credits() } if (ENABLE_DEBUG_SCREEN && key_hit(KEY_SELECT)) { + uint16_t charset[256]; + load_localized_charset(charset, 3, ENG_ID); if (key_held(KEY_UP) && key_held(KEY_L) && key_held(KEY_R)) { set_treecko(true); @@ -270,48 +273,48 @@ int credits() int def_lang = get_def_lang_num(); create_textbox(4, 1, 160, 80, true); - ptgb_write_debug("Debug info:\n\nG: ", true); - ptgb_write_debug(ptgb::to_string(curr_rom.language), true); + ptgb_write_debug(charset, "Debug info:\n\nG: ", true); + ptgb_write_debug(charset, ptgb::to_string(curr_rom.language), true); switch (curr_rom.gamecode) { case RUBY_ID: - ptgb_write_debug("-R-", true); + ptgb_write_debug(charset, "-R-", true); break; case SAPPHIRE_ID: - ptgb_write_debug("-S-", true); + ptgb_write_debug(charset, "-S-", true); break; case FIRERED_ID: - ptgb_write_debug("-F-", true); + ptgb_write_debug(charset, "-F-", true); break; case LEAFGREEN_ID: - ptgb_write_debug("-L-", true); + ptgb_write_debug(charset, "-L-", true); break; case EMERALD_ID: - ptgb_write_debug("-E-", true); + ptgb_write_debug(charset, "-E-", true); break; } - ptgb_write_debug(ptgb::to_string(curr_rom.version), true); + ptgb_write_debug(charset, ptgb::to_string(curr_rom.version), true); - ptgb_write_debug("\nF: ", true); - ptgb_write_debug(ptgb::to_string(e4_flag), true); - ptgb_write_debug(ptgb::to_string(mg_flag), true); - ptgb_write_debug(ptgb::to_string(all_collected_flag), true); - ptgb_write_debug("-", true); + ptgb_write_debug(charset, "\nF: ", true); + ptgb_write_debug(charset, ptgb::to_string(e4_flag), true); + ptgb_write_debug(charset, ptgb::to_string(mg_flag), true); + ptgb_write_debug(charset, ptgb::to_string(all_collected_flag), true); + ptgb_write_debug(charset, "-", true); n2hexstr(hexBuffer, pkmn_flags); - ptgb_write_debug(hexBuffer, true); - ptgb_write_debug("\nS: ", true); - ptgb_write_debug(ptgb::to_string(tutorial), true); - ptgb_write_debug("-", true); + ptgb_write_debug(charset, hexBuffer, true); + ptgb_write_debug(charset, "\nS: ", true); + ptgb_write_debug(charset, ptgb::to_string(tutorial), true); + ptgb_write_debug(charset, "-", true); n2hexstr(hexBuffer, def_lang); - ptgb_write_debug(hexBuffer, true); + ptgb_write_debug(charset, hexBuffer, true); - ptgb_write_debug("\n", true); - ptgb_write_debug(VERSION, true); + ptgb_write_debug(charset, "\n", true); + ptgb_write_debug(charset, VERSION, true); if (get_treecko_enabled()) { - ptgb_write_debug(".T", true); + ptgb_write_debug(charset, ".T", true); } while (true) { diff --git a/source/mystery_gift_builder.cpp b/source/mystery_gift_builder.cpp index 09ef517..7e43bf3 100644 --- a/source/mystery_gift_builder.cpp +++ b/source/mystery_gift_builder.cpp @@ -40,7 +40,8 @@ int var_script_ptr_low = (VAR_ID_START + 0x01); int var_script_ptr_high = (VAR_ID_START + 0x02); int var_call_return_1 = (VAR_ID_START + 0x03); -mystery_gift_script::mystery_gift_script() +mystery_gift_script::mystery_gift_script(PokemonTables &data_tables) + : data_tables(data_tables) { curr_mg_index = NPC_LOCATION_OFFSET; curr_section30_index = 0; @@ -331,7 +332,7 @@ void mystery_gift_script::build_script(Pokemon_Party &incoming_box_data) for (int i = 0; i < MAX_PKMN_IN_BOX; i++) // Add in the Pokemon data { - Pokemon curr_pkmn = incoming_box_data.get_converted_pkmn(i); + Pokemon curr_pkmn = incoming_box_data.get_converted_pkmn(data_tables, i); if (curr_pkmn.get_validity()) { for (int curr_byte = 0; curr_byte < POKEMON_SIZE; curr_byte++) @@ -354,14 +355,16 @@ void mystery_gift_script::build_script(Pokemon_Party &incoming_box_data) } // insert text - textThank.insert_text(save_section_30); - textPCFull.insert_text(save_section_30); - textWeHere.insert_text(save_section_30); - textPCConvo.insert_text(save_section_30); - textPCThanks.insert_text(save_section_30); - textLookerFull.insert_text(save_section_30); - textMoveBox.insert_text(save_section_30); - textReceived.insert_text(save_section_30); + data_tables.load_gen3_charset(ENG_ID); + + textThank.insert_text(data_tables.gen3_charset, save_section_30); + textPCFull.insert_text(data_tables.gen3_charset, save_section_30); + textWeHere.insert_text(data_tables.gen3_charset, save_section_30); + textPCConvo.insert_text(data_tables.gen3_charset, save_section_30); + textPCThanks.insert_text(data_tables.gen3_charset, save_section_30); + textLookerFull.insert_text(data_tables.gen3_charset, save_section_30); + textMoveBox.insert_text(data_tables.gen3_charset, save_section_30); + textReceived.insert_text(data_tables.gen3_charset, save_section_30); movementSlowSpin.insert_movement(save_section_30); movementFastSpin.insert_movement(save_section_30); @@ -783,9 +786,9 @@ void mystery_gift_script::build_script(Pokemon_Party &incoming_box_data) add_word(flashBuffer_ptr.place_word()); add_word(readFlashSector_ptr.place_word()); - textGreet.insert_virtual_text(mg_script); - textYouMustBe.insert_virtual_text(mg_script); - textIAm.insert_virtual_text(mg_script); + textGreet.insert_virtual_text(data_tables.gen3_charset, mg_script); + textYouMustBe.insert_virtual_text(data_tables.gen3_charset, mg_script); + textIAm.insert_virtual_text(data_tables.gen3_charset, mg_script); for (unsigned int i = 0; i < mg_variable_list.size(); i++) // Fill all the refrences for script variables in the mg { diff --git a/source/mystery_gift_injector.cpp b/source/mystery_gift_injector.cpp index 030a985..7517b5a 100644 --- a/source/mystery_gift_injector.cpp +++ b/source/mystery_gift_injector.cpp @@ -16,7 +16,8 @@ static u8 frlg_wonder_card[0x14E] = { bool inject_mystery(Pokemon_Party &incoming_box_data) { - mystery_gift_script script; + PokemonTables data_tables; + mystery_gift_script script(data_tables); if (ENABLE_OLD_EVENT) { // script.build_script_old(incoming_box_data); @@ -83,7 +84,7 @@ bool inject_mystery(Pokemon_Party &incoming_box_data) { for (int i = 0; i < MAX_PKMN_IN_BOX; i++) // Add in the Pokemon data { - Pokemon curr_pkmn = incoming_box_data.get_converted_pkmn(i); + Pokemon curr_pkmn = incoming_box_data.get_converted_pkmn(data_tables, i); if (curr_pkmn.get_validity()) { diff --git a/source/pokedex.cpp b/source/pokedex.cpp index 63b062e..160609f 100644 --- a/source/pokedex.cpp +++ b/source/pokedex.cpp @@ -11,6 +11,8 @@ #include "button_handler.h" #include "translated_text.h" #include "text_engine.h" +#include "zx0_decompressor.h" +#include "TYPES_zx0_bin.h" Dex dex_array[DEX_MAX]; int dex_shift = 0; @@ -71,6 +73,11 @@ void pokedex_init() int pokedex_loop() { + u8 TYPES[POKEMON_ARRAY_SIZE * 2]; + + zx0_decompressor_set_input(TYPES_zx0_bin); + zx0_decompressor_read((uint8_t*)TYPES, zx0_decompressor_get_decompressed_size()); + pokedex_init(); pokedex_show(); bool update = true; @@ -198,7 +205,7 @@ int pokedex_loop() // Eventually it could be optimized to move the labels around, but this honestly makes the most sense. Less code but one frame different for (int i = 0; i < DEX_MAX; i++) { - load_type_sprites(dex_shift + i + 1 + mythic_skip, i, is_caught(dex_shift + i + 1 + mythic_skip)); + load_type_sprites(TYPES, dex_shift + i + 1 + mythic_skip, i, is_caught(dex_shift + i + 1 + mythic_skip)); } update = false; } diff --git a/source/pokemon.cpp b/source/pokemon.cpp index 570f071..87bd08b 100644 --- a/source/pokemon.cpp +++ b/source/pokemon.cpp @@ -6,6 +6,8 @@ #include "save_data_manager.h" #include "debug_mode.h" #include "text_engine.h" +#include "zx0_decompressor.h" +#include "JPN_NAMES_zx0_bin.h" Pokemon::Pokemon() {}; @@ -159,7 +161,7 @@ void Pokemon::load_data(int index, const byte *party_data, int game, int lang) global_next_frame(); } } -void Pokemon::convert_to_gen_three(bool simplified, bool stabilize_mythical) +void Pokemon::convert_to_gen_three(PokemonTables& data_tables, bool simplified, bool stabilize_mythical) { // Convert the species indexes if (gen == 1) @@ -170,7 +172,8 @@ void Pokemon::convert_to_gen_three(bool simplified, bool stabilize_mythical) } else { - species_index_struct = gen_1_index_array[species_index_struct]; + data_tables.load_gen1_index_array(); + species_index_struct = data_tables.gen_1_index_array[species_index_struct]; if (species_index_struct == 0xFF) { is_missingno = true; @@ -206,13 +209,21 @@ void Pokemon::convert_to_gen_three(bool simplified, bool stabilize_mythical) // Set nickname if (language == KOR_ID) { - gen_3_pkmn[18] = JPN_ID; // Set to JPN byte new_nickname[10]; byte new_ot[7]; + u16 cur_char; + + data_tables.load_gen3_charset(language); + // setup the zx0 decompressor to decompress the JPN_NAMES table + zx0_decompressor_set_input(JPN_NAMES_zx0_bin); + // seek to the right pokemon + zx0_decompressor_seek(sizeof(u16) * 6 * species_index_struct); + for (int i = 0; i < 6; i++) { // Read the JPN name and convert it - new_nickname[i] = get_gen_3_char(JPN_NAMES[species_index_struct][i], true); + zx0_decompressor_read((u8*)&cur_char, 2); + new_nickname[i] = data_tables.get_gen_3_char(cur_char); } if (gen == 1) @@ -247,13 +258,16 @@ void Pokemon::convert_to_gen_three(bool simplified, bool stabilize_mythical) } else { - gen_3_pkmn[18] = language; // Language - copy_from_to(convert_text(&nickname[0], 10, gen, language), &gen_3_pkmn[8], 10, false); // Nickname - copy_from_to(convert_text(&trainer_name[0], 7, gen, language), &gen_3_pkmn[20], 7, false); // OT Name + gen_3_pkmn[18] = language; // Language + + data_tables.load_input_charset(gen, language); + data_tables.load_gen3_charset(language); + copy_from_to(convert_text(data_tables, &nickname[0], 10), &gen_3_pkmn[8], 10, false); // Nickname + copy_from_to(convert_text(data_tables, &trainer_name[0], 7), &gen_3_pkmn[20], 7, false); // OT Name } // Make sure Level is not over 100 based on EXP - u32 max_exp = get_max_exp(species_index_struct); + u32 max_exp = data_tables.get_max_exp(species_index_struct); if (exp > max_exp) { exp = max_exp; @@ -320,7 +334,7 @@ void Pokemon::convert_to_gen_three(bool simplified, bool stabilize_mythical) { for (int i = 0; i < 4; i++) { - if ((!can_learn_move(species_index_struct, moves[i])) && (moves[i] != 0)) + if ((!data_tables.can_learn_move(species_index_struct, moves[i])) && (moves[i] != 0)) { moves[i] = 0; // Remove the move pp_bonus[i] = 0; // Remove the PP bonus @@ -331,7 +345,7 @@ void Pokemon::convert_to_gen_three(bool simplified, bool stabilize_mythical) // Make sure it has at least one move if (moves[0] + moves[1] + moves[2] + moves[3] == 0) { - moves[0] = get_earliest_move(species_index_struct); + moves[0] = data_tables.get_earliest_move(species_index_struct); } // Bubble valid moves to the top @@ -360,15 +374,16 @@ void Pokemon::convert_to_gen_three(bool simplified, bool stabilize_mythical) } // Restore the PP values + data_tables.load_power_points(); for (int i = 0; i < 4; i++) { - pure_pp_values[i] = POWER_POINTS[moves[i]] + ((POWER_POINTS[moves[i]] / 5) * pp_bonus[i]); + pure_pp_values[i] = data_tables.POWER_POINTS[moves[i]] + ((data_tables.POWER_POINTS[moves[i]] / 5) * pp_bonus[i]); } // This is everything the mythical needs, don't change anything else if (stabilize_mythical && (species_index_struct == 151 || species_index_struct == 251)) { - set_to_event(nature_mod); + set_to_event(data_tables, nature_mod); return; } @@ -377,7 +392,7 @@ void Pokemon::convert_to_gen_three(bool simplified, bool stabilize_mythical) u32 n_pid; if (ENABLE_MATCH_PID) { - n_pid = generate_pid_iv_match(species_index_struct, nature_mod, &dvs[0]); + n_pid = generate_pid_iv_match(data_tables, species_index_struct, nature_mod, &dvs[0]); u16 curr_rand = get_rand_u16(); ivs[0] = (curr_rand >> 0) & 0b11111; @@ -395,7 +410,7 @@ void Pokemon::convert_to_gen_three(bool simplified, bool stabilize_mythical) } else { - n_pid = generate_pid_save_iv(species_index_struct, nature_mod, &dvs[0]); + n_pid = generate_pid_save_iv(data_tables, species_index_struct, nature_mod, &dvs[0]); // Convert and set IVs int hp_iv = 0; @@ -420,7 +435,7 @@ void Pokemon::convert_to_gen_three(bool simplified, bool stabilize_mythical) enable_auto_random(); // Determine and set Ability - iv_egg_ability |= ((pid[0] & 0x1) ? get_num_abilities(species_index_struct) : 0) << 31; + iv_egg_ability |= ((pid[0] & 0x1) ? data_tables.get_num_abilities(species_index_struct) : 0) << 31; // Origin info origin_info |= ((caught_data[1] & 0b10000000) << 8); // OT gender - We would shift left 15 bits, but the bit is already shifted over 7 @@ -672,66 +687,23 @@ byte Pokemon::get_unencrypted_data(int index) return unencrypted_data[index]; } -byte *Pokemon::convert_text(byte *text_array, int size, int gen, int lang) +byte *Pokemon::convert_text(PokemonTables& data_tables, byte *text_array, int size) { for (int i = 0; i < size; i++) { - switch (gen) - { - case 1: - switch (lang) - { - case JPN_ID: - text_array[i] = get_gen_3_char(gen_1_Jpn_char_array[text_array[i]], true); - break; - case ENG_ID: - default: - text_array[i] = get_gen_3_char(gen_1_Eng_char_array[text_array[i]], false); - break; - case FRE_ID: - case GER_ID: - text_array[i] = get_gen_3_char(gen_1_FreGer_char_array[text_array[i]], false); - break; - case SPA_ID: - case ITA_ID: - text_array[i] = get_gen_3_char(gen_1_ItaSpa_char_array[text_array[i]], false); - break; - } - break; - case 2: - default: - switch (lang) - { - case JPN_ID: - text_array[i] = get_gen_3_char(gen_2_Jpn_char_array[text_array[i]], true); - break; - case ENG_ID: - default: - text_array[i] = get_gen_3_char(gen_2_Eng_char_array[text_array[i]], false); - break; - case FRE_ID: - case GER_ID: - text_array[i] = get_gen_3_char(gen_2_FreGer_char_array[text_array[i]], false); - break; - case SPA_ID: - case ITA_ID: - text_array[i] = get_gen_3_char(gen_2_ItaSpa_char_array[text_array[i]], false); - break; - } - break; - } + text_array[i] = data_tables.get_gen_3_char(data_tables.input_charset[text_array[i]]); } return text_array; } -u32 Pokemon::generate_pid_iv_match(byte pid_species_index, byte nature, byte *pid_dvs) +u32 Pokemon::generate_pid_iv_match(PokemonTables& data_tables, byte pid_species_index, byte nature, byte *pid_dvs) { u32 new_pid = 0; byte new_nature = 0; byte new_gender = 0; byte new_letter = 0; - int gen2_gender_threshold = get_gender_threshold(pid_species_index, false); - int gen3_gender_threshold = get_gender_threshold(pid_species_index, true); + int gen2_gender_threshold = data_tables.get_gender_threshold(pid_species_index, false); + int gen3_gender_threshold = data_tables.get_gender_threshold(pid_species_index, true); bool gender = (((pid_dvs[0] >> 4) & 0b1111) < gen2_gender_threshold); do @@ -768,7 +740,7 @@ u8 Pokemon::get_gender_from_pid(u32 pid) return (pid & 0xFF); }; -u32 Pokemon::generate_pid_save_iv(byte pid_species_index, byte nature, byte *pid_dvs) +u32 Pokemon::generate_pid_save_iv(PokemonTables &data_tables, byte pid_species_index, byte nature, byte *pid_dvs) { // Set Unown Letter u32 new_pid = 0; @@ -795,7 +767,7 @@ u32 Pokemon::generate_pid_save_iv(byte pid_species_index, byte nature, byte *pid else { // Set the correct gender for the Pokemon - new_pid |= get_rand_gender_byte(pid_species_index, ((pid_dvs[0] >> 4) & 0b1111)); + new_pid |= get_rand_gender_byte(data_tables, pid_species_index, ((pid_dvs[0] >> 4) & 0b1111)); // Randomize rest of PID new_pid |= get_rand_u32() & 0xFFFFFF00; @@ -814,10 +786,10 @@ byte Pokemon::rand_reverse_mod(byte modulo_divisor, byte target_mod) return (modulo_divisor * get_rand_range(0, (255 - target_mod) / modulo_divisor)) + target_mod; } -byte Pokemon::get_rand_gender_byte(byte index_num, byte attack_DVs) +byte Pokemon::get_rand_gender_byte(PokemonTables &data_tables, byte index_num, byte attack_DVs) { - byte gen2_threshold = get_gender_threshold(index_num, false); - byte gen3_threshold = get_gender_threshold(index_num, true); + byte gen2_threshold = data_tables.get_gender_threshold(index_num, false); + byte gen3_threshold = data_tables.get_gender_threshold(index_num, true); if (gen2_threshold == -1) // Is one gender or is genderless { return get_rand_range(0, 256); @@ -869,7 +841,7 @@ Simplified_Pokemon Pokemon::get_simple_pkmn() return curr_pkmn; } -void Pokemon::set_to_event(byte nature) +void Pokemon::set_to_event(PokemonTables &data_tables, byte nature) { int event_id = 0; if (species_index_struct == 151) @@ -915,6 +887,7 @@ void Pokemon::set_to_event(byte nature) } } + data_tables.load_event_pkmn(); // Load the event into the Pokemon array and unencrypted data array for (int i = 0; i < 0x20; i++) { @@ -922,15 +895,15 @@ void Pokemon::set_to_event(byte nature) { i += 10; // Skip over the nickname } - gen_3_pkmn[i] = EVENT_PKMN[event_id][i]; + gen_3_pkmn[i] = data_tables.EVENT_PKMN[event_id][i]; } for (int i = 0; i < 12; i++) { - data_section_G[i] = EVENT_PKMN[event_id][i + 0x20 + 0]; - data_section_A[i] = EVENT_PKMN[event_id][i + 0x20 + 12]; - data_section_E[i] = EVENT_PKMN[event_id][i + 0x20 + 24]; - data_section_M[i] = EVENT_PKMN[event_id][i + 0x20 + 36]; + data_section_G[i] = data_tables.EVENT_PKMN[event_id][i + 0x20 + 0]; + data_section_A[i] = data_tables.EVENT_PKMN[event_id][i + 0x20 + 12]; + data_section_E[i] = data_tables.EVENT_PKMN[event_id][i + 0x20 + 24]; + data_section_M[i] = data_tables.EVENT_PKMN[event_id][i + 0x20 + 36]; } // insert moves and PP bonuses @@ -975,7 +948,8 @@ void Pokemon::set_to_event(byte nature) enable_auto_random(); // Determine and set Ability - iv_egg_ability |= ((pid[0] & 0x1) ? get_num_abilities(species_index_struct) : 0) << 31; + data_tables.load_num_abilities(); + iv_egg_ability |= ((pid[0] & 0x1) ? data_tables.get_num_abilities(species_index_struct) : 0) << 31; // Set IVs, Egg, and Ability for (int i = 0; i < 4; i++) diff --git a/source/pokemon_data.cpp b/source/pokemon_data.cpp index b0e9edc..9d1fd86 100644 --- a/source/pokemon_data.cpp +++ b/source/pokemon_data.cpp @@ -1,5712 +1,231 @@ -#include "pokemon_data.h" -#include - -// Indexes found here: https://bulbapedia.bulbagarden.net/wiki/Experience#In_the_core_series -const u32 EXP_MAXIMUMS[6] = { - med_fast_max, - erratic_max, - 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}}; - -u32 get_max_exp(int index_num) -{ - int exp_group = EXP_GROUPS[index_num]; - u32 exp_max = EXP_MAXIMUMS[exp_group]; - u32 test = exp_max; - return test; -}; - -u8 get_gender_threshold(int index_num, bool is_gen_3) -{ - 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 get_num_abilities(int index_num) -{ - return NUM_ABILITIES[index_num]; -}; - -bool can_learn_move(int pkmn_index, int move_index) -{ - 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 get_earliest_move(int index_num) -{ - return FIRST_MOVES[index_num]; -} - -byte get_gen_3_char(u16 input_char, bool is_jpn) -{ - if (is_jpn) - { - for (int i = 0; i < 256; i++) - { - if (gen_3_Jpn_char_array[i] == input_char) - { - return i; - } - } - return 0; - } - else - { - for (int i = 0; i < 256; i++) - { - if (gen_3_Intern_char_array[i] == input_char) - { - return i; - } - } - return 0; - } -} - -// All data was obtained using PokeAPI -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 -}; -const u16 gen_1_Jpn_char_array[256]{ - 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, -}; -const u16 gen_1_Eng_char_array[256]{ - 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, -}; -const u16 gen_1_FreGer_char_array[256]{ - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 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, -}; -const u16 gen_1_ItaSpa_char_array[256]{ - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 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_Jpn_char_array[256]{ - 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, -}; -const u16 gen_2_Eng_char_array[256]{ - 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, -}; -const u16 gen_2_FreGer_char_array[256]{ - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 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, -}; -const u16 gen_2_ItaSpa_char_array[256]{ - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 0x20, - 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_Jpn_char_array[256]{ - 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, -}; -const u16 gen_3_Intern_char_array[256]{ - 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, -}; -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 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 -}; -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 char* NAMES[POKEMON_ARRAY_SIZE]{ - "MissingNo", // Offset the list to remove "off by one" errors - "Bulbasaur", - "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<", - "Nidorina", - "Nidoqueen", - "Nidoran>", - "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", - "Farfetch'd", - "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", -}; -const u16 JPN_NAMES[POKEMON_ARRAY_SIZE][6]{ - {}, // Offset the list to remove "off by one" errors - {0x30D5, 0x30B7, 0x30AE, 0x30C0, 0x30CD, 0x19E}, // Bulbasaur - {0x30D5, 0x30B7, 0x30AE, 0x30BD, 0x30A6, 0x19E}, // Ivysaur - {0x30D5, 0x30B7, 0x30AE, 0x30D0, 0x30CA, 0x19E}, // Venusaur - {0x30D2, 0x30C8, 0x30AB, 0x30B2, 0x19E}, // Charmander - {0x30EA, 0x30B6, 0x30FC, 0x30C9, 0x19E}, // Charmeleon - {0x30EA, 0x30B6, 0x30FC, 0x30C9, 0x30F3, 0x19E}, // Charizard - {0x30BC, 0x30CB, 0x30AC, 0x30E1, 0x19E}, // Squirtle - {0x30AB, 0x30E1, 0x30FC, 0x30EB, 0x19E}, // Wartortle - {0x30AB, 0x30E1, 0x30C3, 0x30AF, 0x30B9, 0x19E}, // Blastoise - {0x30AD, 0x30E3, 0x30BF, 0x30D4, 0x30FC, 0x19E}, // Caterpie - {0x30C8, 0x30E9, 0x30F3, 0x30BB, 0x30EB, 0x19E}, // Metapod - {0x30D0, 0x30BF, 0x30D5, 0x30EA, 0x30FC, 0x19E}, // Butterfree - {0x30D3, 0x30FC, 0x30C9, 0x30EB, 0x19E}, // Weedle - {0x30B3, 0x30AF, 0x30FC, 0x30F3, 0x19E}, // Kakuna - {0x30B9, 0x30D4, 0x30A2, 0x30FC, 0x19E}, // Beedrill - {0x30DD, 0x30C3, 0x30DD, 0x19E}, // Pidgey - {0x30D4, 0x30B8, 0x30E7, 0x30F3, 0x19E}, // Pidgeotto - {0x30D4, 0x30B8, 0x30E7, 0x30C3, 0x30C8, 0x19E}, // Pidgeot - {0x30B3, 0x30E9, 0x30C3, 0x30BF, 0x19E}, // Rattata - {0x30E9, 0x30C3, 0x30BF, 0x19E}, // Raticate - {0x30AA, 0x30CB, 0x30B9, 0x30BA, 0x30E1, 0x19E}, // Spearow - {0x30AA, 0x30CB, 0x30C9, 0x30EA, 0x30EB, 0x19E}, // Fearow - {0x30A2, 0x30FC, 0x30DC, 0x19E}, // Ekans - {0x30A2, 0x30FC, 0x30DC, 0x30C3, 0x30AF, 0x19E}, // Arbok - {0x30D4, 0x30AB, 0x30C1, 0x30E5, 0x30A6, 0x19E}, // Pikachu - {0x30E9, 0x30A4, 0x30C1, 0x30E5, 0x30A6, 0x19E}, // Raichu - {0x30B5, 0x30F3, 0x30C9, 0x19E}, // Sandshrew - {0x30B5, 0x30F3, 0x30C9, 0x30D1, 0x30F3, 0x19E}, // Sandslash - {0x30CB, 0x30C9, 0x30E9, 0x30F3, 0x2640, 0x19E}, // Nidoran♀ - {0x30CB, 0x30C9, 0x30EA, 0x30FC, 0x30CA, 0x19E}, // Nidorina - {0x30CB, 0x30C9, 0x30AF, 0x30A4, 0x30F3, 0x19E}, // Nidoqueen - {0x30CB, 0x30C9, 0x30E9, 0x30F3, 0x2642, 0x19E}, // Nidoran♂ - {0x30CB, 0x30C9, 0x30EA, 0x30FC, 0x30CE, 0x19E}, // Nidorino - {0x30CB, 0x30C9, 0x30AD, 0x30F3, 0x30B0, 0x19E}, // Nidoking - {0x30D4, 0x30C3, 0x30D4, 0x19E}, // Clefairy - {0x30D4, 0x30AF, 0x30B7, 0x30FC, 0x19E}, // Clefable - {0x30ED, 0x30B3, 0x30F3, 0x19E}, // Vulpix - {0x30AD, 0x30E5, 0x30A6, 0x30B3, 0x30F3, 0x19E}, // Ninetales - {0x30D7, 0x30EA, 0x30F3, 0x19E}, // Jigglypuff - {0x30D7, 0x30AF, 0x30EA, 0x30F3, 0x19E}, // Wigglytuff - {0x30BA, 0x30D0, 0x30C3, 0x30C8, 0x19E}, // Zubat - {0x30B4, 0x30EB, 0x30D0, 0x30C3, 0x30C8, 0x19E}, // Golbat - {0x30CA, 0x30BE, 0x30CE, 0x30AF, 0x30B5, 0x19E}, // Oddish - {0x30AF, 0x30B5, 0x30A4, 0x30CF, 0x30CA, 0x19E}, // Gloom - {0x30E9, 0x30D5, 0x30EC, 0x30B7, 0x30A2, 0x19E}, // Vileplume - {0x30D1, 0x30E9, 0x30B9, 0x19E}, // Paras - {0x30D1, 0x30E9, 0x30BB, 0x30AF, 0x30C8, 0x19E}, // Parasect - {0x30B3, 0x30F3, 0x30D1, 0x30F3, 0x19E}, // Venonat - {0x30E2, 0x30EB, 0x30D5, 0x30A9, 0x30F3, 0x19E}, // Venomoth - {0x30C7, 0x30A3, 0x30B0, 0x30C0, 0x19E}, // Diglett - {0x30C0, 0x30B0, 0x30C8, 0x30EA, 0x30AA, 0x19E}, // Dugtrio - {0x30CB, 0x30E3, 0x30FC, 0x30B9, 0x19E}, // Meowth - {0x30DA, 0x30EB, 0x30B7, 0x30A2, 0x30F3, 0x19E}, // Persian - {0x30B3, 0x30C0, 0x30C3, 0x30AF, 0x19E}, // Psyduck - {0x30B4, 0x30EB, 0x30C0, 0x30C3, 0x30AF, 0x19E}, // Golduck - {0x30DE, 0x30F3, 0x30AD, 0x30FC, 0x19E}, // Mankey - {0x30AA, 0x30B3, 0x30EA, 0x30B6, 0x30EB, 0x19E}, // Primeape - {0x30AC, 0x30FC, 0x30C7, 0x30A3, 0x19E}, // Growlithe - {0x30A6, 0x30A4, 0x30F3, 0x30C7, 0x30A3, 0x19E}, // Arcanine - {0x30CB, 0x30E7, 0x30ED, 0x30E2, 0x19E}, // Poliwag - {0x30CB, 0x30E7, 0x30ED, 0x30BE, 0x19E}, // Poliwhirl - {0x30CB, 0x30E7, 0x30ED, 0x30DC, 0x30F3, 0x19E}, // Poliwrath - {0x30B1, 0x30FC, 0x30B7, 0x30A3, 0x19E}, // Abra - {0x30E6, 0x30F3, 0x30B2, 0x30E9, 0x30FC, 0x19E}, // Kadabra - {0x30D5, 0x30FC, 0x30C7, 0x30A3, 0x30F3, 0x19E}, // Alakazam - {0x30EF, 0x30F3, 0x30EA, 0x30AD, 0x30FC, 0x19E}, // Machop - {0x30B4, 0x30FC, 0x30EA, 0x30AD, 0x30FC, 0x19E}, // Machoke - {0x30AB, 0x30A4, 0x30EA, 0x30AD, 0x30FC, 0x19E}, // Machamp - {0x30DE, 0x30C0, 0x30C4, 0x30DC, 0x30DF, 0x19E}, // Bellsprout - {0x30A6, 0x30C4, 0x30C9, 0x30F3, 0x19E}, // Weepinbell - {0x30A6, 0x30C4, 0x30DC, 0x30C3, 0x30C8, 0x19E}, // Victreebel - {0x30E1, 0x30CE, 0x30AF, 0x30E9, 0x30B2, 0x19E}, // Tentacool - {0x30C9, 0x30AF, 0x30AF, 0x30E9, 0x30B2, 0x19E}, // Tentacruel - {0x30A4, 0x30B7, 0x30C4, 0x30D6, 0x30C6, 0x19E}, // Geodude - {0x30B4, 0x30ED, 0x30FC, 0x30F3, 0x19E}, // Graveler - {0x30B4, 0x30ED, 0x30FC, 0x30CB, 0x30E3, 0x19E}, // Golem - {0x30DD, 0x30CB, 0x30FC, 0x30BF, 0x19E}, // Ponyta - {0x30AE, 0x30E3, 0x30ED, 0x30C3, 0x30D7, 0x19E}, // Rapidash - {0x30E4, 0x30C9, 0x30F3, 0x19E}, // Slowpoke - {0x30E4, 0x30C9, 0x30E9, 0x30F3, 0x19E}, // Slowbro - {0x30B3, 0x30A4, 0x30EB, 0x19E}, // Magnemite - {0x30EC, 0x30A2, 0x30B3, 0x30A4, 0x30EB, 0x19E}, // Magneton - {0x30AB, 0x30E2, 0x30CD, 0x30AE, 0x19E}, // Farfetch'd - {0x30C9, 0x30FC, 0x30C9, 0x30FC, 0x19E}, // Doduo - {0x30C9, 0x30FC, 0x30C9, 0x30EA, 0x30AA, 0x19E}, // Dodrio - {0x30D1, 0x30A6, 0x30EF, 0x30A6, 0x19E}, // Seel - {0x30B8, 0x30E5, 0x30B4, 0x30F3, 0x19E}, // Dewgong - {0x30D9, 0x30C8, 0x30D9, 0x30BF, 0x30FC, 0x19E}, // Grimer - {0x30D9, 0x30C8, 0x30D9, 0x30C8, 0x30F3, 0x19E}, // Muk - {0x30B7, 0x30A7, 0x30EB, 0x30C0, 0x30FC, 0x19E}, // Shellder - {0x30D1, 0x30EB, 0x30B7, 0x30A7, 0x30F3, 0x19E}, // Cloyster - {0x30B4, 0x30FC, 0x30B9, 0x19E}, // Gastly - {0x30B4, 0x30FC, 0x30B9, 0x30C8, 0x19E}, // Haunter - {0x30B2, 0x30F3, 0x30AC, 0x30FC, 0x19E}, // Gengar - {0x30A4, 0x30EF, 0x30FC, 0x30AF, 0x19E}, // Onix - {0x30B9, 0x30EA, 0x30FC, 0x30D7, 0x19E}, // Drowzee - {0x30B9, 0x30EA, 0x30FC, 0x30D1, 0x30FC, 0x19E}, // Hypno - {0x30AF, 0x30E9, 0x30D6, 0x19E}, // Krabby - {0x30AD, 0x30F3, 0x30B0, 0x30E9, 0x30FC, 0x19E}, // Kingler - {0x30D3, 0x30EA, 0x30EA, 0x30C0, 0x30DE, 0x19E}, // Voltorb - {0x30DE, 0x30EB, 0x30DE, 0x30A4, 0x30F3, 0x19E}, // Electrode - {0x30BF, 0x30DE, 0x30BF, 0x30DE, 0x19E}, // Exeggcute - {0x30CA, 0x30C3, 0x30B7, 0x30FC, 0x19E}, // Exeggutor - {0x30AB, 0x30E9, 0x30AB, 0x30E9, 0x19E}, // Cubone - {0x30AC, 0x30E9, 0x30AC, 0x30E9, 0x19E}, // Marowak - {0x30B5, 0x30EF, 0x30E0, 0x30E9, 0x30FC, 0x19E}, // Hitmonlee - {0x30A8, 0x30D3, 0x30EF, 0x30E9, 0x30FC, 0x19E}, // Hitmonchan - {0x30D9, 0x30ED, 0x30EA, 0x30F3, 0x30AC, 0x19E}, // Lickitung - {0x30C9, 0x30AC, 0x30FC, 0x30B9, 0x19E}, // Koffing - {0x30DE, 0x30BF, 0x30C9, 0x30AC, 0x30B9, 0x19E}, // Weezing - {0x30B5, 0x30A4, 0x30DB, 0x30FC, 0x30F3, 0x19E}, // Rhyhorn - {0x30B5, 0x30A4, 0x30C9, 0x30F3, 0x19E}, // Rhydon - {0x30E9, 0x30C3, 0x30AD, 0x30FC, 0x19E}, // Chansey - {0x30E2, 0x30F3, 0x30B8, 0x30E3, 0x30E9, 0x19E}, // Tangela - {0x30AC, 0x30EB, 0x30FC, 0x30E9, 0x19E}, // Kangaskhan - {0x30BF, 0x30C3, 0x30C4, 0x30FC, 0x19E}, // Horsea - {0x30B7, 0x30FC, 0x30C9, 0x30E9, 0x19E}, // Seadra - {0x30C8, 0x30B5, 0x30AD, 0x30F3, 0x30C8, 0x19E}, // Goldeen - {0x30A2, 0x30BA, 0x30DE, 0x30AA, 0x30A6, 0x19E}, // Seaking - {0x30D2, 0x30C8, 0x30C7, 0x30DE, 0x30F3, 0x19E}, // Staryu - {0x30B9, 0x30BF, 0x30FC, 0x30DF, 0x30FC, 0x19E}, // Starmie - {0x30D0, 0x30EA, 0x30E4, 0x30FC, 0x30C9, 0x19E}, // Mr. Mime - {0x30B9, 0x30C8, 0x30E9, 0x30A4, 0x30AF, 0x19E}, // Scyther - {0x30EB, 0x30FC, 0x30B8, 0x30E5, 0x30E9, 0x19E}, // Jynx - {0x30A8, 0x30EC, 0x30D6, 0x30FC, 0x19E}, // Electabuzz - {0x30D6, 0x30FC, 0x30D0, 0x30FC, 0x19E}, // Magmar - {0x30AB, 0x30A4, 0x30ED, 0x30B9, 0x19E}, // Pinsir - {0x30B1, 0x30F3, 0x30BF, 0x30ED, 0x30B9, 0x19E}, // Tauros - {0x30B3, 0x30A4, 0x30AD, 0x30F3, 0x30B0, 0x19E}, // Magikarp - {0x30AE, 0x30E3, 0x30E9, 0x30C9, 0x30B9, 0x19E}, // Gyarados - {0x30E9, 0x30D7, 0x30E9, 0x30B9, 0x19E}, // Lapras - {0x30E1, 0x30BF, 0x30E2, 0x30F3, 0x19E}, // Ditto - {0x30A4, 0x30FC, 0x30D6, 0x30A4, 0x19E}, // Eevee - {0x30B7, 0x30E3, 0x30EF, 0x30FC, 0x30BA, 0x19E}, // Vaporeon - {0x30B5, 0x30F3, 0x30C0, 0x30FC, 0x30B9, 0x19E}, // Jolteon - {0x30D6, 0x30FC, 0x30B9, 0x30BF, 0x30FC, 0x19E}, // Flareon - {0x30DD, 0x30EA, 0x30B4, 0x30F3, 0x19E}, // Porygon - {0x30AA, 0x30E0, 0x30CA, 0x30A4, 0x30C8, 0x19E}, // Omanyte - {0x30AA, 0x30E0, 0x30B9, 0x30BF, 0x30FC, 0x19E}, // Omastar - {0x30AB, 0x30D6, 0x30C8, 0x19E}, // Kabuto - {0x30AB, 0x30D6, 0x30C8, 0x30D7, 0x30B9, 0x19E}, // Kabutops - {0x30D7, 0x30C6, 0x30E9, 0x19E}, // Aerodactyl - {0x30AB, 0x30D3, 0x30B4, 0x30F3, 0x19E}, // Snorlax - {0x30D5, 0x30EA, 0x30FC, 0x30B6, 0x30FC, 0x19E}, // Articuno - {0x30B5, 0x30F3, 0x30C0, 0x30FC, 0x19E}, // Zapdos - {0x30D5, 0x30A1, 0x30A4, 0x30E4, 0x30FC, 0x19E}, // Moltres - {0x30DF, 0x30CB, 0x30EA, 0x30E5, 0x30A6, 0x19E}, // Dratini - {0x30CF, 0x30AF, 0x30EA, 0x30E5, 0x30FC, 0x19E}, // Dragonair - {0x30AB, 0x30A4, 0x30EA, 0x30E5, 0x30FC, 0x19E}, // Dragonite - {0x30DF, 0x30E5, 0x30A6, 0x30C4, 0x30FC, 0x19E}, // Mewtwo - {0x30DF, 0x30E5, 0x30A6, 0x19E}, // Mew - {0x30C1, 0x30B3, 0x30EA, 0x30FC, 0x30BF, 0x19E}, // Chikorita - {0x30D9, 0x30A4, 0x30EA, 0x30FC, 0x30D5, 0x19E}, // Bayleef - {0x30E1, 0x30AC, 0x30CB, 0x30A6, 0x30E0, 0x19E}, // Meganium - {0x30D2, 0x30CE, 0x30A2, 0x30E9, 0x30B7, 0x19E}, // Cyndaquil - {0x30DE, 0x30B0, 0x30DE, 0x30E9, 0x30B7, 0x19E}, // Quilava - {0x30D0, 0x30AF, 0x30D5, 0x30FC, 0x30F3, 0x19E}, // Typhlosion - {0x30EF, 0x30CB, 0x30CE, 0x30B3, 0x19E}, // Totodile - {0x30A2, 0x30EA, 0x30B2, 0x30A4, 0x30C4, 0x19E}, // Croconaw - {0x30AA, 0x30FC, 0x30C0, 0x30A4, 0x30EB, 0x19E}, // Feraligatr - {0x30AA, 0x30BF, 0x30C1, 0x19E}, // Sentret - {0x30AA, 0x30AA, 0x30BF, 0x30C1, 0x19E}, // Furret - {0x30DB, 0x30FC, 0x30DB, 0x30FC, 0x19E}, // Hoothoot - {0x30E8, 0x30EB, 0x30CE, 0x30BA, 0x30AF, 0x19E}, // Noctowl - {0x30EC, 0x30C7, 0x30A3, 0x30D0, 0x19E}, // Ledyba - {0x30EC, 0x30C7, 0x30A3, 0x30A2, 0x30F3, 0x19E}, // Ledian - {0x30A4, 0x30C8, 0x30DE, 0x30EB, 0x19E}, // Spinarak - {0x30A2, 0x30EA, 0x30A2, 0x30C9, 0x30B9, 0x19E}, // Ariados - {0x30AF, 0x30ED, 0x30D0, 0x30C3, 0x30C8, 0x19E}, // Crobat - {0x30C1, 0x30E7, 0x30F3, 0x30C1, 0x30FC, 0x19E}, // Chinchou - {0x30E9, 0x30F3, 0x30BF, 0x30FC, 0x30F3, 0x19E}, // Lanturn - {0x30D4, 0x30C1, 0x30E5, 0x30FC, 0x19E}, // Pichu - {0x30D4, 0x30A3, 0x19E}, // Cleffa - {0x30D7, 0x30D7, 0x30EA, 0x30F3, 0x19E}, // Igglybuff - {0x30C8, 0x30B2, 0x30D4, 0x30FC, 0x19E}, // Togepi - {0x30C8, 0x30B2, 0x30C1, 0x30C3, 0x30AF, 0x19E}, // Togetic - {0x30CD, 0x30A4, 0x30C6, 0x30A3, 0x19E}, // Natu - {0x30CD, 0x30A4, 0x30C6, 0x30A3, 0x30AA, 0x19E}, // Xatu - {0x30E1, 0x30EA, 0x30FC, 0x30D7, 0x19E}, // Mareep - {0x30E2, 0x30B3, 0x30B3, 0x19E}, // Flaaffy - {0x30C7, 0x30F3, 0x30EA, 0x30E5, 0x30A6, 0x19E}, // Ampharos - {0x30AD, 0x30EC, 0x30A4, 0x30CF, 0x30CA, 0x19E}, // Bellossom - {0x30DE, 0x30EA, 0x30EB, 0x19E}, // Marill - {0x30DE, 0x30EA, 0x30EB, 0x30EA, 0x19E}, // Azumarill - {0x30A6, 0x30BD, 0x30C3, 0x30AD, 0x30FC, 0x19E}, // Sudowoodo - {0x30CB, 0x30E7, 0x30ED, 0x30C8, 0x30CE, 0x19E}, // Politoed - {0x30CF, 0x30CD, 0x30C3, 0x30B3, 0x19E}, // Hoppip - {0x30DD, 0x30DD, 0x30C3, 0x30B3, 0x19E}, // Skiploom - {0x30EF, 0x30BF, 0x30C3, 0x30B3, 0x19E}, // Jumpluff - {0x30A8, 0x30A4, 0x30D1, 0x30E0, 0x19E}, // Aipom - {0x30D2, 0x30DE, 0x30CA, 0x30C3, 0x30C4, 0x19E}, // Sunkern - {0x30AD, 0x30DE, 0x30EF, 0x30EA, 0x19E}, // Sunflora - {0x30E4, 0x30F3, 0x30E4, 0x30F3, 0x30DE, 0x19E}, // Yanma - {0x30A6, 0x30D1, 0x30FC, 0x19E}, // Wooper - {0x30CC, 0x30AA, 0x30FC, 0x19E}, // Quagsire - {0x30A8, 0x30FC, 0x30D5, 0x30A3, 0x19E}, // Espeon - {0x30D6, 0x30E9, 0x30C3, 0x30AD, 0x30FC, 0x19E}, // Umbreon - {0x30E4, 0x30DF, 0x30AB, 0x30E9, 0x30B9, 0x19E}, // Murkrow - {0x30E4, 0x30C9, 0x30AD, 0x30F3, 0x30B0, 0x19E}, // Slowking - {0x30E0, 0x30A6, 0x30DE, 0x19E}, // Misdreavus - {0x30A2, 0x30F3, 0x30CE, 0x30FC, 0x30F3, 0x19E}, // Unown - {0x30BD, 0x30FC, 0x30CA, 0x30F3, 0x30B9, 0x19E}, // Wobbuffet - {0x30AD, 0x30EA, 0x30F3, 0x30EA, 0x30AD, 0x19E}, // Girafarig - {0x30AF, 0x30CC, 0x30AE, 0x30C0, 0x30DE, 0x19E}, // Pineco - {0x30D5, 0x30A9, 0x30EC, 0x30C8, 0x30B9, 0x19E}, // Forretress - {0x30CE, 0x30B3, 0x30C3, 0x30C1, 0x19E}, // Dunsparce - {0x30B0, 0x30E9, 0x30A4, 0x30AC, 0x30FC, 0x19E}, // Gligar - {0x30CF, 0x30AC, 0x30CD, 0x30FC, 0x30EB, 0x19E}, // Steelix - {0x30D6, 0x30EB, 0x30FC, 0x19E}, // Snubbull - {0x30B0, 0x30E9, 0x30F3, 0x30D6, 0x30EB, 0x19E}, // Granbull - {0x30CF, 0x30EA, 0x30FC, 0x30BB, 0x30F3, 0x19E}, // Qwilfish - {0x30CF, 0x30C3, 0x30B5, 0x30E0, 0x19E}, // Scizor - {0x30C4, 0x30DC, 0x30C4, 0x30DC, 0x19E}, // Shuckle - {0x30D8, 0x30E9, 0x30AF, 0x30ED, 0x30B9, 0x19E}, // Heracross - {0x30CB, 0x30E5, 0x30FC, 0x30E9, 0x19E}, // Sneasel - {0x30D2, 0x30E1, 0x30B0, 0x30DE, 0x19E}, // Teddiursa - {0x30EA, 0x30F3, 0x30B0, 0x30DE, 0x19E}, // Ursaring - {0x30DE, 0x30B0, 0x30DE, 0x30C3, 0x30B0, 0x19E}, // Slugma - {0x30DE, 0x30B0, 0x30AB, 0x30EB, 0x30B4, 0x19E}, // Magcargo - {0x30A6, 0x30EA, 0x30E0, 0x30FC, 0x19E}, // Swinub - {0x30A4, 0x30CE, 0x30E0, 0x30FC, 0x19E}, // Piloswine - {0x30B5, 0x30CB, 0x30FC, 0x30B4, 0x19E}, // Corsola - {0x30C6, 0x30C3, 0x30DD, 0x30A6, 0x30AA, 0x19E}, // Remoraid - {0x30AA, 0x30AF, 0x30BF, 0x30F3, 0x19E}, // Octillery - {0x30C7, 0x30EA, 0x30D0, 0x30FC, 0x30C9, 0x19E}, // Delibird - {0x30DE, 0x30F3, 0x30BF, 0x30A4, 0x30F3, 0x19E}, // Mantine - {0x30A8, 0x30A2, 0x30FC, 0x30E0, 0x30C9, 0x19E}, // Skarmory - {0x30C7, 0x30EB, 0x30D3, 0x30EB, 0x19E}, // Houndour - {0x30D8, 0x30EB, 0x30AC, 0x30FC, 0x19E}, // Houndoom - {0x30AD, 0x30F3, 0x30B0, 0x30C9, 0x30E9, 0x19E}, // Kingdra - {0x30B4, 0x30DE, 0x30BE, 0x30A6, 0x19E}, // Phanpy - {0x30C9, 0x30F3, 0x30D5, 0x30A1, 0x30F3, 0x19E}, // Donphan - {0x30DD, 0x30EA, 0x30B4, 0x30F3, 0xFF12, 0x19E}, // Porygon2 - {0x30AA, 0x30C9, 0x30B7, 0x30B7, 0x19E}, // Stantler - {0x30C9, 0x30FC, 0x30D6, 0x30EB, 0x19E}, // Smeargle - {0x30D0, 0x30EB, 0x30AD, 0x30FC, 0x19E}, // Tyrogue - {0x30AB, 0x30DD, 0x30A8, 0x30E9, 0x30FC, 0x19E}, // Hitmontop - {0x30E0, 0x30C1, 0x30E5, 0x30FC, 0x30EB, 0x19E}, // Smoochum - {0x30A8, 0x30EC, 0x30AD, 0x30C3, 0x30C9, 0x19E}, // Elekid - {0x30D6, 0x30D3, 0x30A3, 0x19E}, // Magby - {0x30DF, 0x30EB, 0x30BF, 0x30F3, 0x30AF, 0x19E}, // Miltank - {0x30CF, 0x30D4, 0x30CA, 0x30B9, 0x19E}, // Blissey - {0x30E9, 0x30A4, 0x30B3, 0x30A6, 0x19E}, // Raikou - {0x30A8, 0x30F3, 0x30C6, 0x30A4, 0x19E}, // Entei - {0x30B9, 0x30A4, 0x30AF, 0x30F3, 0x19E}, // Suicune - {0x30E8, 0x30FC, 0x30AE, 0x30E9, 0x30B9, 0x19E}, // Larvitar - {0x30B5, 0x30CA, 0x30AE, 0x30E9, 0x30B9, 0x19E}, // Pupitar - {0x30D0, 0x30F3, 0x30AE, 0x30E9, 0x30B9, 0x19E}, // Tyranitar - {0x30EB, 0x30AE, 0x30A2, 0x19E}, // Lugia - {0x30DB, 0x30A6, 0x30AA, 0x30A6, 0x19E}, // Ho-Oh - {0x30BB, 0x30EC, 0x30D3, 0x30A3, 0x19E}, // Celebi - {0x30AD, 0x30E2, 0x30EA}, // Treecko -}; -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 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 -}; - -#define ICON_RED 0 -#define ICON_BLU 1 -#define ICON_GRN 2 -#define ICON_BRN 3 -#define ICON_PNK 4 - -const u8 MENU_SPRITE_PALS[POKEMON_ARRAY_SIZE + 26][2] = { - {ICON_BLU, ICON_RED}, // MISSINGNO - {ICON_GRN, ICON_GRN}, // BULBASAUR - {ICON_GRN, ICON_GRN}, // IVYSAUR - {ICON_GRN, ICON_GRN}, // VENUSAUR - {ICON_RED, ICON_BRN}, // CHARMANDER - {ICON_RED, ICON_PNK}, // CHARMELEON - {ICON_RED, ICON_BLU}, // CHARIZARD - {ICON_BLU, ICON_GRN}, // SQUIRTLE - {ICON_BLU, ICON_GRN}, // WARTORTLE - {ICON_BLU, ICON_GRN}, // BLASTOISE - {ICON_GRN, ICON_BRN}, // CATERPIE - {ICON_GRN, ICON_BRN}, // METAPOD - {ICON_PNK, ICON_GRN}, // BUTTERFREE - {ICON_RED, ICON_PNK}, // WEEDLE - {ICON_BRN, ICON_GRN}, // KAKUNA - {ICON_RED, ICON_GRN}, // BEEDRILL - {ICON_BRN, ICON_GRN}, // PIDGEY - {ICON_BRN, ICON_GRN}, // PIDGEOTTO - {ICON_RED, ICON_GRN}, // PIDGEOT - {ICON_PNK, ICON_GRN}, // RATTATA - {ICON_BRN, ICON_RED}, // RATICATE - {ICON_BRN, ICON_GRN}, // SPEAROW - {ICON_BRN, ICON_GRN}, // FEAROW - {ICON_PNK, ICON_GRN}, // EKANS - {ICON_PNK, ICON_BRN}, // ARBOK - {ICON_RED, ICON_PNK}, // PIKACHU - {ICON_RED, ICON_BRN}, // RAICHU - {ICON_BRN, ICON_GRN}, // SANDSHREW - {ICON_BRN, ICON_RED}, // SANDSLASH - {ICON_BLU, ICON_PNK}, // NIDORAN_F - {ICON_BLU, ICON_PNK}, // NIDORINA - {ICON_BLU, ICON_GRN}, // NIDOQUEEN - {ICON_PNK, ICON_BLU}, // NIDORAN_M - {ICON_PNK, ICON_BLU}, // NIDORINO - {ICON_PNK, ICON_BLU}, // NIDOKING - {ICON_PNK, ICON_GRN}, // CLEFAIRY - {ICON_PNK, ICON_GRN}, // CLEFABLE - {ICON_RED, ICON_BRN}, // VULPIX - {ICON_BRN, ICON_BLU}, // NINETALES - {ICON_PNK, ICON_GRN}, // JIGGLYPUFF - {ICON_PNK, ICON_GRN}, // WIGGLYTUFF - {ICON_BLU, ICON_GRN}, // ZUBAT - {ICON_BLU, ICON_GRN}, // GOLBAT - {ICON_GRN, ICON_BRN}, // ODDISH - {ICON_RED, ICON_BRN}, // GLOOM - {ICON_RED, ICON_BRN}, // VILEPLUME - {ICON_RED, ICON_GRN}, // PARAS - {ICON_RED, ICON_GRN}, // PARASECT - {ICON_PNK, ICON_BLU}, // VENONAT - {ICON_PNK, ICON_BLU}, // VENOMOTH - {ICON_BRN, ICON_BLU}, // DIGLETT - {ICON_BRN, ICON_BLU}, // DUGTRIO - {ICON_BRN, ICON_PNK}, // MEOWTH - {ICON_BRN, ICON_PNK}, // PERSIAN - {ICON_BRN, ICON_BLU}, // PSYDUCK - {ICON_BLU, ICON_BLU}, // GOLDUCK - {ICON_BRN, ICON_GRN}, // MANKEY - {ICON_BRN, ICON_GRN}, // PRIMEAPE - {ICON_RED, ICON_GRN}, // GROWLITHE - {ICON_RED, ICON_GRN}, // ARCANINE - {ICON_BLU, ICON_BLU}, // POLIWAG - {ICON_BLU, ICON_BLU}, // POLIWHIRL - {ICON_BLU, ICON_GRN}, // POLIWRATH - {ICON_BRN, ICON_PNK}, // ABRA - {ICON_BRN, ICON_PNK}, // KADABRA - {ICON_BRN, ICON_PNK}, // ALAKAZAM - {ICON_BLU, ICON_BRN}, // MACHOP - {ICON_BLU, ICON_GRN}, // MACHOKE - {ICON_BLU, ICON_GRN}, // MACHAMP - {ICON_GRN, ICON_BRN}, // BELLSPROUT - {ICON_GRN, ICON_BRN}, // WEEPINBELL - {ICON_GRN, ICON_BRN}, // VICTREEBEL - {ICON_BLU, ICON_GRN}, // TENTACOOL - {ICON_BLU, ICON_GRN}, // TENTACRUEL - {ICON_BRN, ICON_RED}, // GEODUDE - {ICON_BRN, ICON_RED}, // GRAVELER - {ICON_BRN, ICON_RED}, // GOLEM - {ICON_RED, ICON_PNK}, // PONYTA - {ICON_RED, ICON_PNK}, // RAPIDASH - {ICON_PNK, ICON_BLU}, // SLOWPOKE - {ICON_PNK, ICON_BLU}, // SLOWBRO - {ICON_BLU, ICON_BRN}, // MAGNEMITE - {ICON_BLU, ICON_BRN}, // MAGNETON - {ICON_BRN, ICON_GRN}, // FARFETCH_D - {ICON_BRN, ICON_GRN}, // DODUO - {ICON_BRN, ICON_GRN}, // DODRIO - {ICON_RED, ICON_PNK}, // SEEL - {ICON_RED, ICON_PNK}, // DEWGONG - {ICON_PNK, ICON_GRN}, // GRIMER - {ICON_PNK, ICON_GRN}, // MUK - {ICON_PNK, ICON_BRN}, // SHELLDER - {ICON_PNK, ICON_BLU}, // CLOYSTER - {ICON_PNK, ICON_BLU}, // GASTLY - {ICON_PNK, ICON_BLU}, // HAUNTER - {ICON_RED, ICON_BLU}, // GENGAR - {ICON_BRN, ICON_GRN}, // ONIX - {ICON_BRN, ICON_PNK}, // DROWZEE - {ICON_BRN, ICON_PNK}, // HYPNO - {ICON_RED, ICON_GRN}, // KRABBY - {ICON_RED, ICON_GRN}, // KINGLER - {ICON_RED, ICON_BLU}, // VOLTORB - {ICON_RED, ICON_BLU}, // ELECTRODE - {ICON_PNK, ICON_GRN}, // EXEGGCUTE - {ICON_GRN, ICON_BRN}, // EXEGGUTOR - {ICON_BRN, ICON_GRN}, // CUBONE - {ICON_BRN, ICON_GRN}, // MAROWAK - {ICON_BRN, ICON_GRN}, // HITMONLEE - {ICON_BRN, ICON_GRN}, // HITMONCHAN - {ICON_PNK, ICON_GRN}, // LICKITUNG - {ICON_PNK, ICON_BLU}, // KOFFING - {ICON_PNK, ICON_BLU}, // WEEZING - {ICON_BLU, ICON_BRN}, // RHYHORN - {ICON_BLU, ICON_BLU}, // RHYDON - {ICON_PNK, ICON_GRN}, // CHANSEY - {ICON_BLU, ICON_GRN}, // TANGELA - {ICON_BRN, ICON_GRN}, // KANGASKHAN - {ICON_BLU, ICON_PNK}, // HORSEA - {ICON_BLU, ICON_PNK}, // SEADRA - {ICON_RED, ICON_BRN}, // GOLDEEN - {ICON_RED, ICON_BRN}, // SEAKING - {ICON_BRN, ICON_BLU}, // STARYU - {ICON_PNK, ICON_BLU}, // STARMIE - {ICON_PNK, ICON_GRN}, // MR__MIME - {ICON_GRN, ICON_GRN}, // SCYTHER - {ICON_RED, ICON_PNK}, // JYNX - {ICON_BRN, ICON_GRN}, // ELECTABUZZ - {ICON_RED, ICON_PNK}, // MAGMAR - {ICON_BRN, ICON_BLU}, // PINSIR - {ICON_BRN, ICON_GRN}, // TAUROS - {ICON_RED, ICON_GRN}, // MAGIKARP - {ICON_BLU, ICON_RED}, // GYARADOS - {ICON_BLU, ICON_PNK}, // LAPRAS - {ICON_PNK, ICON_BLU}, // DITTO - {ICON_BRN, ICON_BLU}, // EEVEE - {ICON_BLU, ICON_PNK}, // VAPOREON - {ICON_BRN, ICON_GRN}, // JOLTEON - {ICON_RED, ICON_BRN}, // FLAREON - {ICON_PNK, ICON_BLU}, // PORYGON - {ICON_BLU, ICON_BRN}, // OMANYTE - {ICON_BLU, ICON_BRN}, // OMASTAR - {ICON_BRN, ICON_GRN}, // KABUTO - {ICON_BRN, ICON_GRN}, // KABUTOPS - {ICON_PNK, ICON_BLU}, // AERODACTYL - {ICON_RED, ICON_BLU}, // SNORLAX - {ICON_BLU, ICON_BLU}, // ARTICUNO - {ICON_BRN, ICON_RED}, // ZAPDOS - {ICON_RED, ICON_PNK}, // MOLTRES - {ICON_BLU, ICON_PNK}, // DRATINI - {ICON_BLU, ICON_PNK}, // DRAGONAIR - {ICON_RED, ICON_GRN}, // DRAGONITE - {ICON_PNK, ICON_GRN}, // MEWTWO - {ICON_PNK, ICON_BLU}, // MEW - {ICON_GRN, ICON_BRN}, // CHIKORITA - {ICON_GRN, ICON_BRN}, // BAYLEEF - {ICON_GRN, ICON_BRN}, // MEGANIUM - {ICON_RED, ICON_PNK}, // CYNDAQUIL - {ICON_RED, ICON_PNK}, // QUILAVA - {ICON_RED, ICON_PNK}, // TYPHLOSION - {ICON_BLU, ICON_GRN}, // TOTODILE - {ICON_BLU, ICON_GRN}, // CROCONAW - {ICON_BLU, ICON_GRN}, // FERALIGATR - {ICON_BRN, ICON_PNK}, // SENTRET - {ICON_BRN, ICON_PNK}, // FURRET - {ICON_BRN, ICON_GRN}, // HOOTHOOT - {ICON_BRN, ICON_GRN}, // NOCTOWL - {ICON_RED, ICON_BRN}, // LEDYBA - {ICON_RED, ICON_BRN}, // LEDIAN - {ICON_GRN, ICON_PNK}, // SPINARAK - {ICON_RED, ICON_PNK}, // ARIADOS - {ICON_PNK, ICON_PNK}, // CROBAT - {ICON_BLU, ICON_BLU}, // CHINCHOU - {ICON_BLU, ICON_PNK}, // LANTURN - {ICON_RED, ICON_BRN}, // PICHU - {ICON_PNK, ICON_GRN}, // CLEFFA - {ICON_PNK, ICON_GRN}, // IGGLYBUFF - {ICON_RED, ICON_BLU}, // TOGEPI - {ICON_RED, ICON_BLU}, // TOGETIC - {ICON_GRN, ICON_GRN}, // NATU - {ICON_GRN, ICON_GRN}, // XATU - {ICON_BLU, ICON_BLU}, // MAREEP - {ICON_PNK, ICON_PNK}, // FLAAFFY - {ICON_BRN, ICON_BLU}, // AMPHAROS - {ICON_GRN, ICON_BLU}, // BELLOSSOM - {ICON_BLU, ICON_GRN}, // MARILL - {ICON_BLU, ICON_BRN}, // AZUMARILL - {ICON_GRN, ICON_PNK}, // SUDOWOODO - {ICON_GRN, ICON_BLU}, // POLITOED - {ICON_PNK, ICON_GRN}, // HOPPIP - {ICON_GRN, ICON_PNK}, // SKIPLOOM - {ICON_BLU, ICON_PNK}, // JUMPLUFF - {ICON_PNK, ICON_PNK}, // AIPOM - {ICON_GRN, ICON_BRN}, // SUNKERN - {ICON_GRN, ICON_BRN}, // SUNFLORA - {ICON_RED, ICON_BLU}, // YANMA - {ICON_BLU, ICON_PNK}, // WOOPER - {ICON_BLU, ICON_PNK}, // QUAGSIRE - {ICON_PNK, ICON_GRN}, // ESPEON - {ICON_BRN, ICON_BLU}, // UMBREON - {ICON_BLU, ICON_PNK}, // MURKROW - {ICON_PNK, ICON_BLU}, // SLOWKING - {ICON_BLU, ICON_BRN}, // MISDREAVUS - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BLU, ICON_PNK}, // WOBBUFFET - {ICON_PNK, ICON_BLU}, // GIRAFARIG - {ICON_GRN, ICON_RED}, // PINECO - {ICON_RED, ICON_GRN}, // FORRETRESS - {ICON_BLU, ICON_PNK}, // DUNSPARCE - {ICON_PNK, ICON_BLU}, // GLIGAR - {ICON_BLU, ICON_BRN}, // STEELIX - {ICON_PNK, ICON_BLU}, // SNUBBULL - {ICON_PNK, ICON_BLU}, // GRANBULL - {ICON_BLU, ICON_PNK}, // QWILFISH - {ICON_RED, ICON_GRN}, // SCIZOR - {ICON_RED, ICON_BLU}, // SHUCKLE - {ICON_BLU, ICON_PNK}, // HERACROSS - {ICON_BLU, ICON_PNK}, // SNEASEL - {ICON_BRN, ICON_GRN}, // TEDDIURSA - {ICON_BRN, ICON_GRN}, // URSARING - {ICON_RED, ICON_BLU}, // SLUGMA - {ICON_RED, ICON_BLU}, // MAGCARGO - {ICON_BRN, ICON_BLU}, // SWINUB - {ICON_BRN, ICON_GRN}, // PILOSWINE - {ICON_PNK, ICON_BLU}, // CORSOLA - {ICON_BLU, ICON_BLU}, // REMORAID - {ICON_RED, ICON_GRN}, // OCTILLERY - {ICON_RED, ICON_PNK}, // DELIBIRD - {ICON_BLU, ICON_BLU}, // MANTINE - {ICON_RED, ICON_GRN}, // SKARMORY - {ICON_RED, ICON_BLU}, // HOUNDOUR - {ICON_RED, ICON_BLU}, // HOUNDOOM - {ICON_BLU, ICON_PNK}, // KINGDRA - {ICON_BLU, ICON_BLU}, // PHANPY - {ICON_BLU, ICON_RED}, // DONPHAN - {ICON_PNK, ICON_BLU}, // PORYGON2 - {ICON_BRN, ICON_GRN}, // STANTLER - {ICON_GRN, ICON_PNK}, // SMEARGLE - {ICON_PNK, ICON_BLU}, // TYROGUE - {ICON_BRN, ICON_BLU}, // HITMONTOP - {ICON_PNK, ICON_PNK}, // SMOOCHUM - {ICON_BRN, ICON_BRN}, // ELEKID - {ICON_RED, ICON_BRN}, // MAGBY - {ICON_PNK, ICON_BLU}, // MILTANK - {ICON_PNK, ICON_PNK}, // BLISSEY - {ICON_BRN, ICON_BRN}, // RAIKOU - {ICON_RED, ICON_RED}, // ENTEI - {ICON_BLU, ICON_BLU}, // SUICUNE - {ICON_GRN, ICON_GRN}, // LARVITAR - {ICON_BLU, ICON_PNK}, // PUPITAR - {ICON_GRN, ICON_PNK}, // TYRANITAR - {ICON_BLU, ICON_PNK}, // LUGIA - {ICON_RED, ICON_BRN}, // HO_OH - {ICON_GRN, ICON_PNK}, // CELEBI - {ICON_GRN, ICON_BLU}, // TREECKO - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN - {ICON_BRN, ICON_BLU}, // UNOWN -}; - -extern 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 -}; \ No newline at end of file +#include "pokemon_data.h" +#include "zx0_decompressor.h" +#include "EXP_GROUPS_zx0_bin.h" +#include "GENDER_RATIO_zx0_bin.h" +#include "NUM_ABILITIES_zx0_bin.h" +#include "FIRST_MOVES_zx0_bin.h" +#include "EVOLUTIONS_zx0_bin.h" +#include "POWER_POINTS_zx0_bin.h" +#include "gen_1_index_array_zx0_bin.h" +#include "EVENT_PKMN_zx0_bin.h" +#include "TYPES_zx0_bin.h" +#include "MOVESETS_zx0_bin.h" +#include "gen_1_Jpn_char_array_zx0_bin.h" +#include "gen_1_Eng_char_array_zx0_bin.h" +#include "gen_1_FreGer_char_array_zx0_bin.h" +#include "gen_1_ItaSpa_char_array_zx0_bin.h" +#include "gen_2_Jpn_char_array_zx0_bin.h" +#include "gen_2_Eng_char_array_zx0_bin.h" +#include "gen_2_FreGer_char_array_zx0_bin.h" +#include "gen_2_ItaSpa_char_array_zx0_bin.h" +#include "gen_3_Jpn_char_array_zx0_bin.h" +#include "gen_3_Intern_char_array_zx0_bin.h" +#include + +// Indexes found here: https://bulbapedia.bulbagarden.net/wiki/Experience#In_the_core_series +const u32 EXP_MAXIMUMS[6] = { + med_fast_max, + erratic_max, + 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}}; + +static void load_table(u8 *table, const u8* source, bool &loadedBool) +{ + if(loadedBool) + { + return; + } + zx0_decompressor_set_input(source); + zx0_decompressor_read(table, zx0_decompressor_get_decompressed_size()); + loadedBool = true; +} + +PokemonTables::PokemonTables() + : exp_groups_loaded(false) + , gender_ratios_loaded(false) + , num_abilities_loaded(false) + , power_points_loaded(false) + , gen_1_index_array_loaded(false) + , event_pkmn_loaded(false) + , types_loaded(false) + , input_charset_type(0) + , gen3_charset_type(0) + , movesets_loaded(false) +{ +} + +void PokemonTables::load_exp_groups() +{ + load_table(EXP_GROUPS, EXP_GROUPS_zx0_bin, exp_groups_loaded); +} + +void PokemonTables::load_gender_ratios() +{ + load_table(GENDER_RATIO, GENDER_RATIO_zx0_bin, gender_ratios_loaded); +} + +void PokemonTables::load_num_abilities() +{ + load_table((uint8_t*)NUM_ABILITIES, NUM_ABILITIES_zx0_bin, num_abilities_loaded); +} + +void PokemonTables::load_first_moves() +{ + load_table(FIRST_MOVES, FIRST_MOVES_zx0_bin, first_moves_loaded); +} + +void PokemonTables::load_evolutions() +{ + load_table(EVOLUTIONS, EVOLUTIONS_zx0_bin, evolutions_loaded); +} + +void PokemonTables::load_power_points() +{ + load_table(POWER_POINTS, POWER_POINTS_zx0_bin, power_points_loaded); +} + +void PokemonTables::load_gen1_index_array() +{ + load_table(gen_1_index_array, gen_1_index_array_zx0_bin, gen_1_index_array_loaded); +} + +void PokemonTables::load_event_pkmn() +{ + load_table((uint8_t*)EVENT_PKMN, EVENT_PKMN_zx0_bin, event_pkmn_loaded); +} + +void PokemonTables::load_types() +{ + load_table((uint8_t*)TYPES, TYPES_zx0_bin, types_loaded); +} + +void PokemonTables::load_input_charset(byte gen, byte 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(byte lang) +{ + // transform lang into the value that would get stored in gen3_charset_index + if(lang == KOR_ID) + { + lang = JPN_ID; + } + else if(lang != JPN_ID) + { + lang = ENG_ID; + } + + if(gen3_charset_type == lang) + { + return; + } + + load_localized_charset(gen3_charset, 3, lang); + gen3_charset_type = lang; +} + +void PokemonTables::load_movesets() +{ + load_table((uint8_t*)MOVESETS, MOVESETS_zx0_bin, movesets_loaded); +} + +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) +{ + load_num_abilities(); + return NUM_ABILITIES[index_num]; +} + +bool PokemonTables::can_learn_move(int pkmn_index, int move_index) +{ + load_movesets(); + load_evolutions(); + 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); +} + +static const u8 *localization_charset_files[] +{ + gen_1_Jpn_char_array_zx0_bin, + gen_1_Eng_char_array_zx0_bin, + gen_1_FreGer_char_array_zx0_bin, + gen_1_FreGer_char_array_zx0_bin, + gen_1_ItaSpa_char_array_zx0_bin, + gen_1_ItaSpa_char_array_zx0_bin, + 0, + gen_2_Jpn_char_array_zx0_bin, + gen_2_Eng_char_array_zx0_bin, + gen_2_FreGer_char_array_zx0_bin, + gen_2_FreGer_char_array_zx0_bin, + gen_2_ItaSpa_char_array_zx0_bin, + gen_2_ItaSpa_char_array_zx0_bin, + 0, + gen_3_Jpn_char_array_zx0_bin, + gen_3_Intern_char_array_zx0_bin, + gen_3_Intern_char_array_zx0_bin, + gen_3_Intern_char_array_zx0_bin, + gen_3_Intern_char_array_zx0_bin, + gen_3_Intern_char_array_zx0_bin, + gen_3_Jpn_char_array_zx0_bin +}; + +void load_localized_charset(u16 *output_char_array, byte gen, byte lang) +{ + zx0_decompressor_set_input(localization_charset_files[(gen - 1) * 7 + (lang - 1)]); + zx0_decompressor_read((u8*)output_char_array, sizeof(u16) * 256); +} + +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 diff --git a/source/pokemon_party.cpp b/source/pokemon_party.cpp index 0176428..509a0f0 100644 --- a/source/pokemon_party.cpp +++ b/source/pokemon_party.cpp @@ -204,11 +204,11 @@ int Pokemon_Party::get_last_error() return last_error; } -Pokemon Pokemon_Party::get_converted_pkmn(int index) +Pokemon Pokemon_Party::get_converted_pkmn(PokemonTables& data_tables, int index) { Pokemon converted_mon; converted_mon.load_data(index, box_data_array, game, lang); - converted_mon.convert_to_gen_three(false, stabilize_mythic); + converted_mon.convert_to_gen_three(data_tables, false, stabilize_mythic); has_new_pkmn = has_new_pkmn || converted_mon.get_is_new(); simple_pkmn_array[index] = converted_mon.get_simple_pkmn(); return converted_mon; @@ -281,14 +281,14 @@ Simplified_Pokemon Pokemon_Party::get_simple_pkmn(int index) return simple_pkmn_array[index]; } -bool Pokemon_Party::fill_simple_pkmn_array() +bool Pokemon_Party::fill_simple_pkmn_array(PokemonTables &data_tables) { contains_mythical = false; for (int index = 0; index < get_num_pkmn(); index++) { Pokemon converted_mon; converted_mon.load_data(index, box_data_array, game, lang); - converted_mon.convert_to_gen_three(true, stabilize_mythic); + converted_mon.convert_to_gen_three(data_tables, true, stabilize_mythic); has_new_pkmn = has_new_pkmn || converted_mon.get_is_new(); contains_mythical = contains_mythical || converted_mon.get_dex_number() == 151 || converted_mon.get_dex_number() == 251; diff --git a/source/script_array.cpp b/source/script_array.cpp index 5609251..3735b80 100644 --- a/source/script_array.cpp +++ b/source/script_array.cpp @@ -139,7 +139,7 @@ void populate_lang_menu() langs.add_option(option_german, GER_ID); langs.add_option(option_italian, ITA_ID); langs.add_option(option_korean, KOR_ID); - langs.add_option(option_cancel, -1); + langs.add_option(option_cancel, UINT8_MAX); } void populate_game_menu(int lang) @@ -154,13 +154,13 @@ void populate_game_menu(int lang) games.add_option(option_gold, GOLD_ID); games.add_option(option_silver, SILVER_ID); games.add_option(option_crystal, CRYSTAL_ID); - games.add_option(option_cancel, -1); + games.add_option(option_cancel, UINT8_MAX); break; case (KOR_ID): games.add_option(option_gold, GOLD_ID); games.add_option(option_silver, SILVER_ID); - games.add_option(option_cancel, -1); + games.add_option(option_cancel, UINT8_MAX); break; default: @@ -170,7 +170,7 @@ void populate_game_menu(int lang) games.add_option(option_gold, GOLD_ID); games.add_option(option_silver, SILVER_ID); games.add_option(option_crystal, CRYSTAL_ID); - games.add_option(option_cancel, -1); + games.add_option(option_cancel, UINT8_MAX); break; } } @@ -300,8 +300,8 @@ bool run_conditional(int index) { return false; } - games.set_lang(lang); - party_data.set_lang(lang); + games.set_lang(static_cast(lang)); + party_data.set_lang(static_cast(lang)); return true; case CMD_GAME_MENU: @@ -348,8 +348,10 @@ bool run_conditional(int index) return true; case CMD_LOAD_SIMP: - return party_data.fill_simple_pkmn_array(); - + { + PokemonTables data_tables; + return party_data.fill_simple_pkmn_array(data_tables); + } case CMD_CANCEL_LINK: party_data.continue_link(true); return true; diff --git a/source/script_obj.cpp b/source/script_obj.cpp index 8aa0868..852fce8 100644 --- a/source/script_obj.cpp +++ b/source/script_obj.cpp @@ -4,27 +4,29 @@ #include "pokemon.h" #include "pokemon_party.h" #include "script_array.h" +#include "translated_text.h" script_obj::script_obj(){}; -script_obj::script_obj(const byte* nText, int nNext) +script_obj::script_obj(const byte* nText, uint16_t nNext) { text = nText; - has_text = true; next_index = nNext; conditional_index = 0; next_false_index = 0; } -script_obj::script_obj(int nRun, int nNext) +script_obj::script_obj(uint16_t nRun, uint16_t nNext) { + text = nullptr; next_index = nNext; conditional_index = nRun; next_false_index = nNext; } -script_obj::script_obj(int nRun, int nNext_if_true, int nNext_if_false) +script_obj::script_obj(uint16_t nRun, uint16_t nNext_if_true, uint16_t nNext_if_false) { + text = nullptr; next_index = nNext_if_true; conditional_index = nRun; next_false_index = nNext_if_false; @@ -32,27 +34,20 @@ script_obj::script_obj(int nRun, int nNext_if_true, int nNext_if_false) const byte* script_obj::get_text() { - if (has_text) - { - return text; - } - else - { - return NULL; - } + return text; } -int script_obj::get_true_index() +uint16_t script_obj::get_true_index() { return next_index; } -int script_obj::get_false_index() +uint16_t script_obj::get_false_index() { return next_false_index; } -int script_obj::get_cond_id() +uint16_t script_obj::get_cond_id() { return conditional_index; } \ No newline at end of file diff --git a/source/script_var.cpp b/source/script_var.cpp index 707c295..7b9e6b0 100644 --- a/source/script_var.cpp +++ b/source/script_var.cpp @@ -153,12 +153,12 @@ void textbox_var::set_virtual_start() start_location_in_script = *curr_loc_ptr - 4; } -void textbox_var::insert_text(u8 mg_array[]) +void textbox_var::insert_text(const u16 *charset, u8 mg_array[]) { set_start(); for (int parser = 0; parser < text_length; parser++) { - if (curr_rom.is_hoenn() && (text[parser] == 0xFC) && (get_gen_3_char((char16_t)(text[parser + 1]), false) == 0x01)) // Removes colored text + if (curr_rom.is_hoenn() && (text[parser] == 0xFC) && (get_char_from_charset(charset, (char16_t)(text[parser + 1])) == 0x01)) // Removes colored text { parser += 2; } @@ -172,12 +172,12 @@ void textbox_var::insert_text(u8 mg_array[]) (*curr_loc_ptr)++; } -void textbox_var::insert_virtual_text(u8 mg_array[]) +void textbox_var::insert_virtual_text(const u16 *charset, u8 mg_array[]) { set_virtual_start(); for (int parser = 0; parser < text_length; parser++) { - if (curr_rom.is_hoenn() && (text[parser] == 0xFC) && (get_gen_3_char((char16_t)(text[parser + 1]), false) == 0x01)) // Removes colored text + if (curr_rom.is_hoenn() && (text[parser] == 0xFC) && (get_char_from_charset(charset, (char16_t)(text[parser + 1])) == 0x01)) // Removes colored text { parser += 2; } diff --git a/source/select_menu.cpp b/source/select_menu.cpp index 721535f..c3b656f 100644 --- a/source/select_menu.cpp +++ b/source/select_menu.cpp @@ -6,7 +6,7 @@ #define TILE_HEIGHT 8 #define TILE_WIDTH 8 -Select_Menu::Select_Menu(bool enable_cancel, int nMenu_type, int nStartTileX, int nStartTileY) +Select_Menu::Select_Menu(bool enable_cancel, u8 nMenu_type, int nStartTileX, int nStartTileY) { cancel_enabled = enable_cancel; menu_type = nMenu_type; @@ -14,7 +14,7 @@ Select_Menu::Select_Menu(bool enable_cancel, int nMenu_type, int nStartTileX, in startTileY = nStartTileY; } -void Select_Menu::add_option(const byte *option, int return_value) +void Select_Menu::add_option(const byte *option, u8 return_value) { menu_options.push_back(option); return_values.push_back(return_value); @@ -66,7 +66,7 @@ int Select_Menu::select_menu_main() if (update) { - if (return_values[curr_selection] == -1) + if (return_values[curr_selection] == UINT8_MAX) { switch (menu_type) { @@ -140,7 +140,7 @@ void Select_Menu::clear_options() return_values.clear(); } -void Select_Menu::set_lang(int nLang) +void Select_Menu::set_lang(u8 nLang) { lang = nLang; } \ No newline at end of file diff --git a/source/sprite_data.cpp b/source/sprite_data.cpp index 85671d1..914c94c 100644 --- a/source/sprite_data.cpp +++ b/source/sprite_data.cpp @@ -514,13 +514,13 @@ void load_temp_box_sprites(Pokemon_Party *party_data) load_sprite_compressed(button_confirm_right, button_edgeTiles, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1); } -void load_type_sprites(int pkmn_index, int dex_offset, bool is_caught) +void load_type_sprites(const u8* pkmn_type_table, int pkmn_index, int dex_offset, bool is_caught) { if (is_caught) { u32 curr_tile_id = global_tile_id_end + (dex_offset * 2 * 4); - int type1 = TYPES[pkmn_index][0]; - int type2 = TYPES[pkmn_index][1]; + u16 type1 = pkmn_type_table[pkmn_index * 2]; + u16 type2 = pkmn_type_table[pkmn_index * 2 + 1]; load_sprite(type_sprites[(dex_offset * 2) + 0], &typesTiles[(type1 * 32)], 128, curr_tile_id, (type1 < 13 ? TYPES_PAL1 : TYPES_PAL2), ATTR0_WIDE, ATTR1_SIZE_32x8, 1); load_sprite(type_sprites[(dex_offset * 2) + 1], &typesTiles[(type2 * 32)], 128, curr_tile_id, (type2 < 13 ? TYPES_PAL1 : TYPES_PAL2), ATTR0_WIDE, ATTR1_SIZE_32x8, 1); @@ -561,7 +561,7 @@ void load_sprite_compressed(OBJ_ATTR *sprite, const unsigned int objTiles[], obj_hide(sprite); }; -void load_select_sprites(int game_id, int lang) +void load_select_sprites(u8 game_id, u8 lang) { u32 curr_tile_id = global_tile_id_end; // Alpha Shadow Main Color Grey Black Mid diff --git a/source/text_engine.cpp b/source/text_engine.cpp index 726479d..1d37325 100644 --- a/source/text_engine.cpp +++ b/source/text_engine.cpp @@ -223,7 +223,7 @@ int ptgb_write(const byte *text, bool instant, int length) return 0; // str - text; } // This is mostly used for debug stuff, I shouldn't rely it on it much. -int ptgb_write_debug(const char *text, bool instant) +int ptgb_write_debug(const u16* charset, const char *text, bool instant) { byte temp_holding[256]; int i; @@ -240,7 +240,7 @@ int ptgb_write_debug(const char *text, bool instant) } else { - temp_holding[i] = get_gen_3_char(text[i], false); + temp_holding[i] = get_char_from_charset(charset, text[i]); } } return ptgb_write(temp_holding, instant); diff --git a/source/zx0_decompressor.cpp b/source/zx0_decompressor.cpp new file mode 100644 index 0000000..4975973 --- /dev/null +++ b/source/zx0_decompressor.cpp @@ -0,0 +1,475 @@ +#include "zx0_decompressor.h" +#include + +// The following code is a custom implementation of the ZX0 decompression algorithm invented by Einar Saukas +// Original implementation can be found here: https://github.com/einar-saukas/ZX0 +// It uses classes, but keeps them completely hidden in the .cpp file with an anonymous namespace for internal linkage. +// The header provides a C facade to access the relevant methods, but the rest of Poke Transporter GB +// doesn't need to be aware of all the datatypes/classes defined here. +namespace +{ +/** + * This class implements a ringbuffer. This is useful for ZX0 decompression + * because it allows you to look back easily. + * + * WARNING: the specified bufferSize MUST be a power of 2! + * This is needed because I optimized a modulo division (for wraparound) + * with a bitmask AND. (and it simply won't work correctly if the bufferSize is not a power of 2!) + */ +class RingBuffer +{ +public: + RingBuffer(uint8_t *buffer, const uint16_t bufferSize); + + /** + * Returns the buffer size. + */ + uint16_t getBufferSize() const; + + uint16_t read(uint8_t *outputBuffer, uint16_t bytesToRead); + uint8_t readByte(); + void writeByte(uint8_t value); + + /** + * This function seeks backwards from the current end of the buffer + */ + void seekBackwardsFromBufferEnd(uint16_t offset); + + void reset(); +protected: +private: + uint8_t *buffer_; + uint16_t ringStartPos_; + uint16_t ringReadPos_; + uint16_t ringEndPos_; + uint16_t bufferSize_; +}; + +/** +* This class makes reading on a per-bit basis much easier. +*/ +class BitReader +{ +public: + BitReader(const uint8_t* buffer); + + uint8_t readBit(); + uint8_t read(uint8_t numBits); + uint8_t readByte(); +protected: +private: + const uint8_t* buffer_; + const uint8_t* curBuffer_; + uint8_t currentByte_; + uint8_t bitsLeft_; +}; + +enum class ZX0OperationType +{ + NONE, + LITERAL_BLOCK, + COPY_LAST_OFFSET, + COPY_NEW_OFFSET +}; + +typedef struct ZX0Command +{ + ZX0OperationType cmdType; + uint16_t length; + uint16_t offset; + uint16_t bytePos; +} ZX0Command; + +/** + * @brief This class implements the actual ZX0 decompression. + */ +class ZX0Decompressor +{ +public: + ZX0Decompressor(uint8_t* decompressionBuffer, uint16_t decompressionBufferSize); + + /** + * @brief This function prepares the ZX0Decompressor instance + * for decompressing the specified inputData + * @param compressedData + */ + void setInput(const uint8_t *inputData); + + /** + * @brief Retrieves the size of the data when it is fully decompressed + * This is read from the first 2 bytes of the inputData + */ + uint16_t getDecompressedSize() const; + + /** + * @brief This function reads of data into + */ + uint16_t read(uint8_t *outputBuffer, uint16_t numBytes); + + /** + * @brief This function uncompresses from the current point until the + * specified outputBytePos lies inside the decompressionBuffer + */ + void seek(uint16_t outputBytePos); +protected: +private: + void readNextCommand(); + uint16_t copy_block(uint8_t *outputBuffer, uint16_t numBytes); + + RingBuffer buffer_; + BitReader reader_; + ZX0Command cur_command_; + const uint8_t *inputData_; + uint16_t bytesDecompressed_; + uint16_t lastOffset_; +}; + +RingBuffer::RingBuffer(uint8_t *buffer, const uint16_t bufferSize) + : buffer_(buffer) + , ringStartPos_(0) + , ringReadPos_(0) + , ringEndPos_(0) + , bufferSize_(bufferSize) +{ +} + +__attribute__((unused)) +uint16_t RingBuffer::getBufferSize() const +{ + return bufferSize_; +} + +__attribute__((unused)) +uint16_t RingBuffer::read(uint8_t *outputBuffer, uint16_t bytesToRead) +{ + if(ringReadPos_ == ringEndPos_) return 0; // Early exit if empty + + const uint16_t wrapMask = bufferSize_ - 1; + uint16_t available; + uint16_t bytesRead; + uint16_t chunkSize; + + available = (ringReadPos_ < ringEndPos_) ? (ringEndPos_ - ringReadPos_) : (bufferSize_ - ringReadPos_); + + chunkSize = (bytesToRead < available) ? bytesToRead : available; + memcpy(outputBuffer, buffer_ + ringReadPos_, chunkSize); + bytesRead = chunkSize; + ringReadPos_ = (ringReadPos_ + chunkSize) & wrapMask; // wraparound done by bitmask + bytesToRead -= chunkSize; + + if(bytesToRead > 0 && ringReadPos_ != ringEndPos_) + { + // we need more bytes from the start of the buffer + available = ringEndPos_; + chunkSize = (bytesToRead <= ringEndPos_) ? bytesToRead : available; + memcpy(outputBuffer + bytesRead, buffer_, chunkSize); + bytesRead += chunkSize; + ringReadPos_ = chunkSize & wrapMask; // Since we wrapped around to start + } + return bytesRead; +} + +uint8_t RingBuffer::readByte() +{ + uint8_t value; + if(ringReadPos_ == ringEndPos_) return 0; // Early exit if empty + + value = buffer_[ringReadPos_]; + ringReadPos_ = (ringReadPos_ + 1) & (bufferSize_ - 1); + return value; +} + +void RingBuffer::writeByte(uint8_t value) +{ + buffer_[ringEndPos_] = value; + ringEndPos_ = (ringEndPos_ + 1) & (bufferSize_ - 1); // wraparound done by bitmask + + if(ringEndPos_ == ringStartPos_) + { + // buffer is full, overwrite oldest byte + ringStartPos_ = (ringStartPos_ + 1) & (bufferSize_ - 1); // wraparound done by bitmask + } +} + +void RingBuffer::seekBackwardsFromBufferEnd(uint16_t offset) +{ + ringReadPos_ = (ringEndPos_ - offset) & (bufferSize_ - 1); +} + +void RingBuffer::reset() +{ + ringStartPos_ = 0; + ringReadPos_ = 0; + ringEndPos_ = 0; +} + +static inline uint16_t read_elias_gamma(BitReader& reader) +{ + uint16_t num_non_leading_bits = 0; + uint16_t value; + while (!reader.readBit()) + { + ++num_non_leading_bits; // Count leading zeros + } + // reconstruct the most significant bit of value + value = 1 << num_non_leading_bits; // Start with MSB + + // now apply the binary part (the actual value) + while(num_non_leading_bits--) + { + value |= (reader.readBit() << num_non_leading_bits); + } + + // Adjust back to zero-based + return value - 1; +} + +static inline void read_new_offset(BitReader& reader, uint16_t& offset) +{ + const uint8_t has_msb = reader.readBit(); + + const uint16_t lsb = reader.read(7); + const uint16_t msb = (has_msb) ? read_elias_gamma(reader) : 0; + + offset = ((msb << 7) | lsb) + 1; +} + +BitReader::BitReader(const uint8_t* buffer) + : buffer_(buffer) + , curBuffer_(buffer) + , currentByte_(0) + , bitsLeft_(0) +{ +} + +uint8_t BitReader::readBit() +{ + // Pre-decrement and check underflow + if (--bitsLeft_ == 0xFF) + { + currentByte_ = (*curBuffer_); + ++curBuffer_; + bitsLeft_ = 7; + } + return (currentByte_ >> bitsLeft_) & 1; +} + +uint8_t BitReader::read(uint8_t numBits) +{ + uint8_t result = 0; + while (numBits--) + { + result = (result << 1) | readBit(); + } + return result; +} + +uint8_t BitReader::readByte() +{ + if(bitsLeft_ == 0) + { + const uint8_t value = (*curBuffer_); + ++curBuffer_; + return value; + } + // Handle byte reads across bit boundaries + return read(8); +} + +ZX0Decompressor::ZX0Decompressor(uint8_t* decompressionBuffer, uint16_t decompressionBufferSize) + : buffer_(decompressionBuffer, decompressionBufferSize) + , reader_(nullptr) + , cur_command_({ZX0OperationType::NONE, 0, 0, 0}) + , inputData_(nullptr) + , bytesDecompressed_(0) + , lastOffset_(UINT16_MAX) +{ +} + +void ZX0Decompressor::setInput(const uint8_t *inputData) +{ + buffer_.reset(); + reader_ = BitReader(inputData + 2); + cur_command_ = {ZX0OperationType::NONE, 0, 0, 0}; + inputData_ = inputData; + bytesDecompressed_ = 0; + lastOffset_ = UINT16_MAX; +} + +uint16_t ZX0Decompressor::getDecompressedSize() const +{ + if(!inputData_) + { + return 0; + } + return *((uint16_t*)inputData_); +} + +uint16_t ZX0Decompressor::read(uint8_t *outputBuffer, uint16_t numBytes) +{ + const uint16_t decompressed_size = getDecompressedSize(); + const uint16_t bytesDecompressedBefore = bytesDecompressed_; + uint16_t bytesRead; + + while(numBytes) + { + if(bytesDecompressed_ == decompressed_size) + { + break; + } + + // Check if we have finished processing the previous pending command + // if we have, we need to read a new operation + if(cur_command_.cmdType == ZX0OperationType::NONE || cur_command_.bytePos >= cur_command_.length) + { + readNextCommand(); + } + + bytesRead = copy_block(outputBuffer + bytesDecompressed_, numBytes); + numBytes -= bytesRead; + bytesDecompressed_ += bytesRead; + } + + return bytesDecompressed_ - bytesDecompressedBefore; +} + +void ZX0Decompressor::seek(uint16_t outputBytePos) +{ + uint8_t read_buffer[32]; + uint16_t bytesToRead; + uint16_t chunkSize; + + // NOTE: outputBytePos denotes the index of the byte in the output (decompressed data) buffer!! + + // ZX0 doesn't actually have random access + // so we'll have to simulate it. + // first check if the specified position is in the backwards direction. + if(outputBytePos < bytesDecompressed_) + { + // the specified position is in earlier decoded data. + // this will be expensive, because we will have to start decompression from the beginning + // until the specified position. + // reset the decoder + setInput(inputData_); + bytesToRead = outputBytePos; + } + else + { + // The specified position is in future -to-be-decoded- decompressed data. + // so we just need to keep decoding until we're there. + bytesToRead = outputBytePos - bytesDecompressed_; + } + + // Start decompressing until we're at the desired point + do + { + chunkSize = (bytesToRead > sizeof(read_buffer)) ? sizeof(read_buffer) : bytesToRead; + bytesToRead -= read(read_buffer, chunkSize); + } + while(bytesToRead); +} + +void ZX0Decompressor::readNextCommand() +{ + const uint8_t cmdBit = reader_.readBit(); + + // the "COPY_NEW_OFFSET" command adds + 1 to the length, but the other commands don't. + // given that read_elias_gamma() function is marked "inline", the way I set the length + // is to avoid having multiple calls to it here. (for code size) + if(cmdBit) + { + read_new_offset(reader_, lastOffset_); + cur_command_.cmdType = ZX0OperationType::COPY_NEW_OFFSET; + cur_command_.length = 1; + cur_command_.offset = lastOffset_; + cur_command_.bytePos = 0; + } + else if(cur_command_.cmdType == ZX0OperationType::LITERAL_BLOCK) + { + cur_command_.cmdType = ZX0OperationType::COPY_LAST_OFFSET; + // copy from new offset and last offset differs in the sense that with the new offset the encoded length is reduced by one + // and for last offset it isn't. This is likely because you still need to be able to insert a dummy "copy-from-last-offset" operation. + cur_command_.length = 0; + cur_command_.offset = lastOffset_; + } + else + { + cur_command_.cmdType = ZX0OperationType::LITERAL_BLOCK; + cur_command_.length = 0; + } + cur_command_.length += read_elias_gamma(reader_); + cur_command_.bytePos = 0; +} + +uint16_t ZX0Decompressor::copy_block(uint8_t *outputBuffer, uint16_t numBytes) +{ + const uint16_t available = cur_command_.length - cur_command_.bytePos; + const uint16_t bytesToRead = (numBytes > available) ? available : numBytes; + uint16_t bytesRemaining = bytesToRead; + + if(cur_command_.cmdType == ZX0OperationType::LITERAL_BLOCK) + { + // Literal copy + do + { + (*outputBuffer) = reader_.readByte(); + buffer_.writeByte((*outputBuffer)); + ++outputBuffer; + } + while(--bytesRemaining); + } + else + { + if(!cur_command_.bytePos) + { + buffer_.seekBackwardsFromBufferEnd(cur_command_.offset); + } + + do + { + *outputBuffer = buffer_.readByte(); + buffer_.writeByte(*outputBuffer); + ++outputBuffer; + } + while(--bytesRemaining); + } + + cur_command_.bytePos += bytesToRead; + + return bytesToRead; +} + +} + +// define a global 2 KB decompression buffer in IWRAM. +// IWRAM is much faster than EXRAM, so it's ideally suited for decompression. +// 2 KB is a modest/reasonable size to reserve. +// But this also means we can only have one instance of ZX0Decompressor. +// This is one of the reasons why it is implemented in the way that it is. +__attribute__((section(".iwram"))) +static uint8_t decompression_buffer[2048]; +__attribute__((section(".iwram"))) +static ZX0Decompressor decompressor(decompression_buffer, sizeof(decompression_buffer)); + +extern "C" +{ +void zx0_decompressor_set_input(const uint8_t *input_data) +{ + decompressor.setInput(input_data); +} + +uint16_t zx0_decompressor_get_decompressed_size() +{ + return decompressor.getDecompressedSize(); +} + +void zx0_decompressor_seek(uint16_t output_byte_pos) +{ + decompressor.seek(output_byte_pos); +} + +uint16_t zx0_decompressor_read(uint8_t *output_buffer, uint16_t num_bytes) +{ + return decompressor.read(output_buffer, num_bytes); +} +} \ No newline at end of file diff --git a/tools/compressZX0/Makefile b/tools/compressZX0/Makefile new file mode 100644 index 0000000..5582b00 --- /dev/null +++ b/tools/compressZX0/Makefile @@ -0,0 +1,43 @@ +# # Compiler flags +CXXFLAGS := -std=c++11 -fno-rtti -fno-exceptions -fno-unwind-tables -Wall -Wextra -I $(CURDIR) -g + +# Source files directory +SRC_DIR := . +# Build directory +BUILD_DIR := build + +# Source files (add more as needed) +SRCS := $(shell find $(SRC_DIR) -type f -name '*.cpp') +# Object files +OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(SRCS)) + +# Ensure necessary directories exist +# This function ensures the directory for the target exists +define make_directory + @mkdir -p $(dir $@) +endef + +# Target executable +TARGET := compressZX0 + +# Phony targets +.PHONY: all clean + +# Default target +all: $(TARGET) + +$(TARGET): $(OBJS) + $(CXX) $(CXXFLAGS) $^ -o $@ + +# Rule to compile source files +$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp | $(BUILD_DIR) + $(make_directory) + $(CXX) $(CXXFLAGS) -c $< -o $@ + +# Create the build directory if it doesn't exist +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + +# Clean rule +clean: + rm -rf $(BUILD_DIR) $(TARGET) diff --git a/tools/compressZX0/main.cpp b/tools/compressZX0/main.cpp new file mode 100644 index 0000000..b9ef5b6 --- /dev/null +++ b/tools/compressZX0/main.cpp @@ -0,0 +1,433 @@ +#include +#include +#include + +// @author risingPhil +// This file implements the zx0 compression algorithm. +// It serves as a test to see if this algorithm could suit us for the compression of several static arrays/buffers in Poke Transporter GB. + +//#define LOG_OPERATIONS 1 + +#define MAX_OFFSET 2048 // Maximum backward offset (ZX0 limit), tuned for Poke Transporter GB to be able to use a 2 KB decompression buffer +#define MAX_LEN 255 // Maximum match length (ZX0 limit) +#define OUTPUT_BUFFER_SIZE 256 * 1024 // Maximum output buffer size (artificial limitation, I suppose) + +#ifdef LOG_OPERATIONS + #define LOG_OP(...) printf(__VA_ARGS__) +#else + #define LOG_OP(...) +#endif + +// anonymous namespace for internal linkage +namespace +{ + +/** +* This class makes writing on a per-bit basis much easier +*/ +class BitWriter +{ +public: + BitWriter(uint8_t* buffer); + + void write(uint8_t value, uint8_t numBits); + void write_bit(uint8_t value); + void write_byte(uint8_t value); + + size_t get_bits_written() const; +protected: +private: + uint8_t* buffer_; + uint8_t* cur_buffer_; + uint8_t bit_index_; +}; + +BitWriter::BitWriter(uint8_t* buffer) + : buffer_(buffer) + , cur_buffer_(buffer) + , bit_index_(0) +{ +} + +void BitWriter::write_bit(uint8_t value) +{ + value &= 0x1; + *cur_buffer_ |= (value << (7 - bit_index_)); + + if(bit_index_ == 7) + { + ++cur_buffer_; + bit_index_ = 0; + } + else + { + ++bit_index_; + } +} + +void BitWriter::write_byte(uint8_t value) +{ + if(bit_index_) + { + write(value, 8); + return; + } + *cur_buffer_ = value; + ++cur_buffer_; +} + +void BitWriter::write(uint8_t value, uint8_t numBits) +{ + for(int i=numBits - 1; i >= 0; --i) + { + write_bit(value >> i); + } +} + +size_t BitWriter::get_bits_written() const +{ + return (cur_buffer_ - buffer_) * 8 + bit_index_; +} +} + +/** + * @brief Find the best match for the current position (LZ77-style) + * We simply try to find the longest matching bytes backwards in the buffer. + */ +static void find_backwards_match(const unsigned char *buffer, size_t buffer_size, int pos, int *best_offset, int *best_len) +{ + *best_offset = 0; + *best_len = 0; + const size_t max_offset = (pos > MAX_OFFSET) ? MAX_OFFSET : pos; + const int max_len = (buffer_size - pos > MAX_LEN) ? MAX_LEN : buffer_size - pos; + int len; + + for (size_t offset = 1; offset <= max_offset; offset++) + { + len = 0; + while (len < max_len && buffer[pos - offset + len] == buffer[pos + len]) + { + ++len; + } + if (len > *best_len) + { + *best_len = len; + *best_offset = offset; + } + } +} + +/** + * @brief This function encodes the specified value with gamma encoding. + * + * The way it works is that we first determine of how many bits the value consists, except for the leading bits. (=num_non_leading_bits) + * Then we write zeros. + * We also write the original value in bits + * + * For decoding, we can determine the number of zeros and that will indicate how many bits we need to read for the actual value. + * + */ +static void write_elias_gamma(BitWriter& writer, int value) +{ + value++; // Adjust because Gamma only encodes n ≥ 1 + int num_non_leading_bits = 0; + int i; + + // Calculate floor(log2(value)) + int tmp = value >> 1; + while(tmp) + { + ++num_non_leading_bits; + tmp >>= 1; + } + + // Write unary part (k zeros) + for (i = 0; i < num_non_leading_bits; i++) + { + writer.write_bit(0); + } + // Write binary part (num_non_leading_bits+1 bits of value) + for (int i = num_non_leading_bits; i >= 0; i--) + { + writer.write_bit(value >> i); + } +} + +/** + * This struct represents a buffer to hold a number of pending "literal" bytes + * before they actually get written to the output + */ +typedef struct LiteralBuffer +{ + uint8_t buffer[1024]; + uint16_t size; +} LiteralBuffer; + +/** + * @brief This function writes a command for the decompressor to start copying bytes + * from the last offset specified with the write_copy_from_new_offset_block() function + */ +static void write_copy_from_last_offset_block(BitWriter& writer, int length) +{ + LOG_OP("copy_last: %d\n", length); + writer.write_bit(0); + write_elias_gamma(writer, length); +} + +/** + * @brief Writes a command to copy the bytes in LiteralBuffer to the decompressed buffer. + */ +static void write_literal_block(BitWriter& writer, LiteralBuffer& literal_buffer) +{ + uint16_t i = 0; + + if(!literal_buffer.size) + { + return; + } + + LOG_OP("copy_literal: %hu\n", literal_buffer.size); + + // flag that this is a literal block + writer.write_bit(0); + write_elias_gamma(writer, literal_buffer.size); + + while(i < literal_buffer.size) + { + writer.write_byte(literal_buffer.buffer[i]); + + ++i; + } + literal_buffer.size = 0; +} + +/** + * @brief Writes a command to indicate that the decompressor must copy bytes from the given backwards offset. + */ +static void write_copy_from_new_offset_block(BitWriter& writer, int offset, int length) +{ + LOG_OP("copy_new: offset: %d, length: %d\n", offset, length); + writer.write_bit(1); // Match flag + + // Encode offset (Elias Gamma + 7-bit LSB) + const int msb = ((offset - 1) >> 7) & 0xFF; + const int lsb = (offset - 1) & 0x7F; + + // first bit of LSB indicates whether the MSB follows. + writer.write_bit((msb > 0)); + + // write 7 bit LSB raw bits + writer.write(lsb, 7); + + if (msb > 0) + { + write_elias_gamma(writer, msb); + } + + // Encode length (Elias Gamma) + write_elias_gamma(writer, length - 1); +} + +static void literal_buffer_push(BitWriter& writer, LiteralBuffer& literal_buffer, uint8_t byte) +{ + if(literal_buffer.size == 1024) + { + // EDGE case: buffer is full. + // back-to-back literal blocks are forbidden, + // so we must insert a dummy "use last offset" block + write_literal_block(writer, literal_buffer); + write_copy_from_last_offset_block(writer, 0); + } + + literal_buffer.buffer[literal_buffer.size] = byte; + ++literal_buffer.size; +} + +/** + * This function encodes the specified buffer with the ZX0 compression algorithm + * and stores the result into output_buffer. + * + * Please make sure the output_buffer is sufficiently large enough before calling this function. + */ +static size_t encodeZX0(uint8_t* output_buffer, const uint8_t* buffer, size_t buffer_size) +{ + BitWriter writer(output_buffer); + LiteralBuffer literal_buffer = { + .buffer = {0}, + .size = 0 + }; + + int pos = 0; + int last_offset = 0x7FFFFFFF; + int offset; + int length; + int numBytes = buffer_size; + + // first write the size of the input in little endian format in the output buffer + writer.write_byte(static_cast(buffer_size)); + writer.write_byte(static_cast(buffer_size >> 8)); + + while(pos < numBytes) + { + find_backwards_match(buffer, numBytes, pos, &offset, &length); + + // important rules: You cannot have 2 consecutive literal blocks. + // reusing the last offset can only happen after a literal block! + + if(length < 2) + { + // we must buffer the literals because we can only start writing them when we know the "length" + literal_buffer_push(writer, literal_buffer, buffer[pos]); + ++pos; + } + else if(offset == last_offset) + { + // write any pending literal bytes + write_literal_block(writer, literal_buffer); + write_copy_from_last_offset_block(writer, length); + pos += length; + } + else + { + // write any pending literal bytes + write_literal_block(writer, literal_buffer); + write_copy_from_new_offset_block(writer, offset, length); + last_offset = offset; + pos += length; + } + } + + return writer.get_bits_written(); +} + +/** + * @brief Reads the given file completely into the specified buffer. + * The buffer is allocated by this function, but should be delete[]'d by the caller. + */ +static bool read_file(const char* filename, uint8_t*& out_buffer, size_t& out_size) +{ + FILE* file; + long size; + size_t read; + uint8_t* buffer; + + file = fopen(filename, "rb"); + if (!file) return false; + + // Seek to end to determine size + if (fseek(file, 0, SEEK_END) != 0) + { + fclose(file); + return false; + } + + size = ftell(file); + if (size < 0) + { + fclose(file); + return false; + } + + rewind(file); + + buffer = new uint8_t[size]; + + read = fread(buffer, 1, size, file); + fclose(file); + + if (read != (size_t)size) { + delete[] buffer; + return false; + } + + out_buffer = buffer; + out_size = size; + + return true; +} + +static void print_usage() +{ + const char* usageString = R"delim( +Usage: compressZX0 + +This program will compress the given file with the ZX0 compression algorithm and store the output in +/_zx0.bin +)delim"; + printf(usageString); +} + +int main(int argc, char** argv) +{ + // Reserve 256KB buffer, which is already much larger than the maximum file size we'd allow for PTGB. + // (the reason why I'm using a buffer instead of writing directly to a file is simply because I'm lazy. + // I wrote a test of the algorithm using buffers first. And I know that for Poke Transporter GB specifically + // we'll never exceed the 256KB filesize. So I'm not going to rework this code, because there's currently no need) + uint8_t output_buffer[OUTPUT_BUFFER_SIZE] = {0}; + uint8_t *input_buffer = nullptr; + char *filename; + char *extension_dot; + size_t input_buffer_size; + size_t bits_written; + size_t num_bytes; + double compress_ratio; + char output_path[4096]; + FILE* f; + + if(argc < 3) + { + print_usage(); + return 1; + } + + if(!read_file(argv[1], input_buffer, input_buffer_size)) + { + perror("Could not open file: "); + return 1; + } + + // make sure the input_buffer_size is not larger than our output_buffer we statically allocated + // This is a bit of an artificial limitation though. + if(input_buffer_size > sizeof(output_buffer)) + { + fprintf(stderr, "ERROR: The input file should not be larger than %zu KB!\n", sizeof(output_buffer)); + return 1; + } + + // get the filename part of the given file + // and remove the extension. + // basename uses statically allocated memory that gets overwritten by each call. + // but it returns a modifiable char* + // so we might as well just edit that buffer directly because no-one will depend on this value later. + filename = basename(argv[1]); + + printf("Compressing %s...", filename); + + bits_written = encodeZX0(output_buffer, input_buffer, input_buffer_size); + delete[] input_buffer; + input_buffer = nullptr; + num_bytes = (bits_written + 7) / 8; + + printf("done\n"); + + // if we have an extension in the filename, just end the string at the '.' position. + extension_dot = strchr(filename, '.'); + if(extension_dot) + { + *extension_dot = '\0'; + } + + // argv[2] should be the output directory + snprintf(output_path, sizeof(output_path), "%s/%s_zx0.bin", argv[2], filename); + + f = fopen(output_path, "wb+"); + fwrite(output_buffer, 1, num_bytes, f); + fclose(f); + + compress_ratio = static_cast(num_bytes) / input_buffer_size; + printf("Compressed size: %zu bytes/%zu bytes, Compression ratio: %f%%\n", num_bytes, input_buffer_size, compress_ratio * 100.f); + + return 0; +} + + diff --git a/tools/data-generator/Makefile b/tools/data-generator/Makefile new file mode 100644 index 0000000..dfb065b --- /dev/null +++ b/tools/data-generator/Makefile @@ -0,0 +1,43 @@ +# # Compiler flags +CXXFLAGS := -std=c++11 -fno-rtti -fno-exceptions -fno-unwind-tables -Wall -Wextra -I $(CURDIR)/include -g + +# Source files directory +SRC_DIR := ./src +# Build directory +BUILD_DIR := build + +# Source files (add more as needed) +SRCS := $(shell find $(SRC_DIR) -type f -name '*.cpp') +# Object files +OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(SRCS)) + +# Ensure necessary directories exist +# This function ensures the directory for the target exists +define make_directory + @mkdir -p $(dir $@) +endef + +# Target executable +TARGET := data-generator + +# Phony targets +.PHONY: all clean + +# Default target +all: $(TARGET) + +$(TARGET): $(OBJS) + $(CXX) $(CXXFLAGS) $^ -o $@ + +# Rule to compile source files +$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp | $(BUILD_DIR) + $(make_directory) + $(CXX) $(CXXFLAGS) -c $< -o $@ + +# Create the build directory if it doesn't exist +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + +# Clean rule +clean: + rm -rf $(BUILD_DIR) $(TARGET) *.bin diff --git a/tools/data-generator/include/common.h b/tools/data-generator/include/common.h new file mode 100644 index 0000000..cee7281 --- /dev/null +++ b/tools/data-generator/include/common.h @@ -0,0 +1,9 @@ +#ifndef _COMMON_H +#define _COMMON_H + +#include +#include + +void writeTable(const char* filename, const uint8_t *buffer, size_t buffer_size); + +#endif \ No newline at end of file diff --git a/tools/data-generator/include/pokemon_data.h b/tools/data-generator/include/pokemon_data.h new file mode 100644 index 0000000..dc0db0a --- /dev/null +++ b/tools/data-generator/include/pokemon_data.h @@ -0,0 +1,6 @@ +#ifndef _POKEMON_DATA_H +#define _POKEMON_DATA_H + +void generate_pokemon_data(); + +#endif \ No newline at end of file diff --git a/tools/data-generator/src/common.cpp b/tools/data-generator/src/common.cpp new file mode 100644 index 0000000..5ef6aa2 --- /dev/null +++ b/tools/data-generator/src/common.cpp @@ -0,0 +1,12 @@ +#include "common.h" + +#include + +void writeTable(const char* filename, const uint8_t *buffer, size_t buffer_size) +{ + FILE* f; + + f = fopen(filename, "wb+"); + fwrite(buffer, 1, buffer_size, f); + fclose(f); +} \ No newline at end of file diff --git a/tools/data-generator/src/main.cpp b/tools/data-generator/src/main.cpp new file mode 100644 index 0000000..0e72ae2 --- /dev/null +++ b/tools/data-generator/src/main.cpp @@ -0,0 +1,11 @@ +#include "pokemon_data.h" + +// This application holds the various long static data arrays that Poke Transporter GB uses +// and it writes them to .bin files that can be compressed with compressZX0 later. +// it's useful to do it this way because it keeps this data easy to view, edit and document + +int main(int /*argc*/, char **/*argv*/) +{ + generate_pokemon_data(); + return 0; +} \ No newline at end of file diff --git a/tools/data-generator/src/pokemon_data.cpp b/tools/data-generator/src/pokemon_data.cpp new file mode 100644 index 0000000..8d41423 --- /dev/null +++ b/tools/data-generator/src/pokemon_data.cpp @@ -0,0 +1,5420 @@ +#include "pokemon_data.h" +#include "common.h" + +typedef unsigned char u8; +typedef unsigned char byte; +typedef unsigned short u16; + +#define NUM_POKEMON 252 +#define POKEMON_ARRAY_SIZE NUM_POKEMON + 1 + +// All data was obtained using PokeAPI +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 +}; +const u16 gen_1_Jpn_char_array[256]{ + 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, +}; +const u16 gen_1_Eng_char_array[256]{ + 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, +}; +const u16 gen_1_FreGer_char_array[256]{ + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 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, +}; +const u16 gen_1_ItaSpa_char_array[256]{ + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 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_Jpn_char_array[256]{ + 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, +}; +const u16 gen_2_Eng_char_array[256]{ + 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, +}; +const u16 gen_2_FreGer_char_array[256]{ + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 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, +}; +const u16 gen_2_ItaSpa_char_array[256]{ + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 0x20, + 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_Jpn_char_array[256]{ + 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, +}; +const u16 gen_3_Intern_char_array[256]{ + 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, +}; +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 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 +}; +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 u16 JPN_NAMES[POKEMON_ARRAY_SIZE][6]{ + {}, // Offset the list to remove "off by one" errors + {0x30D5, 0x30B7, 0x30AE, 0x30C0, 0x30CD, 0x19E}, // Bulbasaur + {0x30D5, 0x30B7, 0x30AE, 0x30BD, 0x30A6, 0x19E}, // Ivysaur + {0x30D5, 0x30B7, 0x30AE, 0x30D0, 0x30CA, 0x19E}, // Venusaur + {0x30D2, 0x30C8, 0x30AB, 0x30B2, 0x19E}, // Charmander + {0x30EA, 0x30B6, 0x30FC, 0x30C9, 0x19E}, // Charmeleon + {0x30EA, 0x30B6, 0x30FC, 0x30C9, 0x30F3, 0x19E}, // Charizard + {0x30BC, 0x30CB, 0x30AC, 0x30E1, 0x19E}, // Squirtle + {0x30AB, 0x30E1, 0x30FC, 0x30EB, 0x19E}, // Wartortle + {0x30AB, 0x30E1, 0x30C3, 0x30AF, 0x30B9, 0x19E}, // Blastoise + {0x30AD, 0x30E3, 0x30BF, 0x30D4, 0x30FC, 0x19E}, // Caterpie + {0x30C8, 0x30E9, 0x30F3, 0x30BB, 0x30EB, 0x19E}, // Metapod + {0x30D0, 0x30BF, 0x30D5, 0x30EA, 0x30FC, 0x19E}, // Butterfree + {0x30D3, 0x30FC, 0x30C9, 0x30EB, 0x19E}, // Weedle + {0x30B3, 0x30AF, 0x30FC, 0x30F3, 0x19E}, // Kakuna + {0x30B9, 0x30D4, 0x30A2, 0x30FC, 0x19E}, // Beedrill + {0x30DD, 0x30C3, 0x30DD, 0x19E}, // Pidgey + {0x30D4, 0x30B8, 0x30E7, 0x30F3, 0x19E}, // Pidgeotto + {0x30D4, 0x30B8, 0x30E7, 0x30C3, 0x30C8, 0x19E}, // Pidgeot + {0x30B3, 0x30E9, 0x30C3, 0x30BF, 0x19E}, // Rattata + {0x30E9, 0x30C3, 0x30BF, 0x19E}, // Raticate + {0x30AA, 0x30CB, 0x30B9, 0x30BA, 0x30E1, 0x19E}, // Spearow + {0x30AA, 0x30CB, 0x30C9, 0x30EA, 0x30EB, 0x19E}, // Fearow + {0x30A2, 0x30FC, 0x30DC, 0x19E}, // Ekans + {0x30A2, 0x30FC, 0x30DC, 0x30C3, 0x30AF, 0x19E}, // Arbok + {0x30D4, 0x30AB, 0x30C1, 0x30E5, 0x30A6, 0x19E}, // Pikachu + {0x30E9, 0x30A4, 0x30C1, 0x30E5, 0x30A6, 0x19E}, // Raichu + {0x30B5, 0x30F3, 0x30C9, 0x19E}, // Sandshrew + {0x30B5, 0x30F3, 0x30C9, 0x30D1, 0x30F3, 0x19E}, // Sandslash + {0x30CB, 0x30C9, 0x30E9, 0x30F3, 0x2640, 0x19E}, // Nidoran♀ + {0x30CB, 0x30C9, 0x30EA, 0x30FC, 0x30CA, 0x19E}, // Nidorina + {0x30CB, 0x30C9, 0x30AF, 0x30A4, 0x30F3, 0x19E}, // Nidoqueen + {0x30CB, 0x30C9, 0x30E9, 0x30F3, 0x2642, 0x19E}, // Nidoran♂ + {0x30CB, 0x30C9, 0x30EA, 0x30FC, 0x30CE, 0x19E}, // Nidorino + {0x30CB, 0x30C9, 0x30AD, 0x30F3, 0x30B0, 0x19E}, // Nidoking + {0x30D4, 0x30C3, 0x30D4, 0x19E}, // Clefairy + {0x30D4, 0x30AF, 0x30B7, 0x30FC, 0x19E}, // Clefable + {0x30ED, 0x30B3, 0x30F3, 0x19E}, // Vulpix + {0x30AD, 0x30E5, 0x30A6, 0x30B3, 0x30F3, 0x19E}, // Ninetales + {0x30D7, 0x30EA, 0x30F3, 0x19E}, // Jigglypuff + {0x30D7, 0x30AF, 0x30EA, 0x30F3, 0x19E}, // Wigglytuff + {0x30BA, 0x30D0, 0x30C3, 0x30C8, 0x19E}, // Zubat + {0x30B4, 0x30EB, 0x30D0, 0x30C3, 0x30C8, 0x19E}, // Golbat + {0x30CA, 0x30BE, 0x30CE, 0x30AF, 0x30B5, 0x19E}, // Oddish + {0x30AF, 0x30B5, 0x30A4, 0x30CF, 0x30CA, 0x19E}, // Gloom + {0x30E9, 0x30D5, 0x30EC, 0x30B7, 0x30A2, 0x19E}, // Vileplume + {0x30D1, 0x30E9, 0x30B9, 0x19E}, // Paras + {0x30D1, 0x30E9, 0x30BB, 0x30AF, 0x30C8, 0x19E}, // Parasect + {0x30B3, 0x30F3, 0x30D1, 0x30F3, 0x19E}, // Venonat + {0x30E2, 0x30EB, 0x30D5, 0x30A9, 0x30F3, 0x19E}, // Venomoth + {0x30C7, 0x30A3, 0x30B0, 0x30C0, 0x19E}, // Diglett + {0x30C0, 0x30B0, 0x30C8, 0x30EA, 0x30AA, 0x19E}, // Dugtrio + {0x30CB, 0x30E3, 0x30FC, 0x30B9, 0x19E}, // Meowth + {0x30DA, 0x30EB, 0x30B7, 0x30A2, 0x30F3, 0x19E}, // Persian + {0x30B3, 0x30C0, 0x30C3, 0x30AF, 0x19E}, // Psyduck + {0x30B4, 0x30EB, 0x30C0, 0x30C3, 0x30AF, 0x19E}, // Golduck + {0x30DE, 0x30F3, 0x30AD, 0x30FC, 0x19E}, // Mankey + {0x30AA, 0x30B3, 0x30EA, 0x30B6, 0x30EB, 0x19E}, // Primeape + {0x30AC, 0x30FC, 0x30C7, 0x30A3, 0x19E}, // Growlithe + {0x30A6, 0x30A4, 0x30F3, 0x30C7, 0x30A3, 0x19E}, // Arcanine + {0x30CB, 0x30E7, 0x30ED, 0x30E2, 0x19E}, // Poliwag + {0x30CB, 0x30E7, 0x30ED, 0x30BE, 0x19E}, // Poliwhirl + {0x30CB, 0x30E7, 0x30ED, 0x30DC, 0x30F3, 0x19E}, // Poliwrath + {0x30B1, 0x30FC, 0x30B7, 0x30A3, 0x19E}, // Abra + {0x30E6, 0x30F3, 0x30B2, 0x30E9, 0x30FC, 0x19E}, // Kadabra + {0x30D5, 0x30FC, 0x30C7, 0x30A3, 0x30F3, 0x19E}, // Alakazam + {0x30EF, 0x30F3, 0x30EA, 0x30AD, 0x30FC, 0x19E}, // Machop + {0x30B4, 0x30FC, 0x30EA, 0x30AD, 0x30FC, 0x19E}, // Machoke + {0x30AB, 0x30A4, 0x30EA, 0x30AD, 0x30FC, 0x19E}, // Machamp + {0x30DE, 0x30C0, 0x30C4, 0x30DC, 0x30DF, 0x19E}, // Bellsprout + {0x30A6, 0x30C4, 0x30C9, 0x30F3, 0x19E}, // Weepinbell + {0x30A6, 0x30C4, 0x30DC, 0x30C3, 0x30C8, 0x19E}, // Victreebel + {0x30E1, 0x30CE, 0x30AF, 0x30E9, 0x30B2, 0x19E}, // Tentacool + {0x30C9, 0x30AF, 0x30AF, 0x30E9, 0x30B2, 0x19E}, // Tentacruel + {0x30A4, 0x30B7, 0x30C4, 0x30D6, 0x30C6, 0x19E}, // Geodude + {0x30B4, 0x30ED, 0x30FC, 0x30F3, 0x19E}, // Graveler + {0x30B4, 0x30ED, 0x30FC, 0x30CB, 0x30E3, 0x19E}, // Golem + {0x30DD, 0x30CB, 0x30FC, 0x30BF, 0x19E}, // Ponyta + {0x30AE, 0x30E3, 0x30ED, 0x30C3, 0x30D7, 0x19E}, // Rapidash + {0x30E4, 0x30C9, 0x30F3, 0x19E}, // Slowpoke + {0x30E4, 0x30C9, 0x30E9, 0x30F3, 0x19E}, // Slowbro + {0x30B3, 0x30A4, 0x30EB, 0x19E}, // Magnemite + {0x30EC, 0x30A2, 0x30B3, 0x30A4, 0x30EB, 0x19E}, // Magneton + {0x30AB, 0x30E2, 0x30CD, 0x30AE, 0x19E}, // Farfetch'd + {0x30C9, 0x30FC, 0x30C9, 0x30FC, 0x19E}, // Doduo + {0x30C9, 0x30FC, 0x30C9, 0x30EA, 0x30AA, 0x19E}, // Dodrio + {0x30D1, 0x30A6, 0x30EF, 0x30A6, 0x19E}, // Seel + {0x30B8, 0x30E5, 0x30B4, 0x30F3, 0x19E}, // Dewgong + {0x30D9, 0x30C8, 0x30D9, 0x30BF, 0x30FC, 0x19E}, // Grimer + {0x30D9, 0x30C8, 0x30D9, 0x30C8, 0x30F3, 0x19E}, // Muk + {0x30B7, 0x30A7, 0x30EB, 0x30C0, 0x30FC, 0x19E}, // Shellder + {0x30D1, 0x30EB, 0x30B7, 0x30A7, 0x30F3, 0x19E}, // Cloyster + {0x30B4, 0x30FC, 0x30B9, 0x19E}, // Gastly + {0x30B4, 0x30FC, 0x30B9, 0x30C8, 0x19E}, // Haunter + {0x30B2, 0x30F3, 0x30AC, 0x30FC, 0x19E}, // Gengar + {0x30A4, 0x30EF, 0x30FC, 0x30AF, 0x19E}, // Onix + {0x30B9, 0x30EA, 0x30FC, 0x30D7, 0x19E}, // Drowzee + {0x30B9, 0x30EA, 0x30FC, 0x30D1, 0x30FC, 0x19E}, // Hypno + {0x30AF, 0x30E9, 0x30D6, 0x19E}, // Krabby + {0x30AD, 0x30F3, 0x30B0, 0x30E9, 0x30FC, 0x19E}, // Kingler + {0x30D3, 0x30EA, 0x30EA, 0x30C0, 0x30DE, 0x19E}, // Voltorb + {0x30DE, 0x30EB, 0x30DE, 0x30A4, 0x30F3, 0x19E}, // Electrode + {0x30BF, 0x30DE, 0x30BF, 0x30DE, 0x19E}, // Exeggcute + {0x30CA, 0x30C3, 0x30B7, 0x30FC, 0x19E}, // Exeggutor + {0x30AB, 0x30E9, 0x30AB, 0x30E9, 0x19E}, // Cubone + {0x30AC, 0x30E9, 0x30AC, 0x30E9, 0x19E}, // Marowak + {0x30B5, 0x30EF, 0x30E0, 0x30E9, 0x30FC, 0x19E}, // Hitmonlee + {0x30A8, 0x30D3, 0x30EF, 0x30E9, 0x30FC, 0x19E}, // Hitmonchan + {0x30D9, 0x30ED, 0x30EA, 0x30F3, 0x30AC, 0x19E}, // Lickitung + {0x30C9, 0x30AC, 0x30FC, 0x30B9, 0x19E}, // Koffing + {0x30DE, 0x30BF, 0x30C9, 0x30AC, 0x30B9, 0x19E}, // Weezing + {0x30B5, 0x30A4, 0x30DB, 0x30FC, 0x30F3, 0x19E}, // Rhyhorn + {0x30B5, 0x30A4, 0x30C9, 0x30F3, 0x19E}, // Rhydon + {0x30E9, 0x30C3, 0x30AD, 0x30FC, 0x19E}, // Chansey + {0x30E2, 0x30F3, 0x30B8, 0x30E3, 0x30E9, 0x19E}, // Tangela + {0x30AC, 0x30EB, 0x30FC, 0x30E9, 0x19E}, // Kangaskhan + {0x30BF, 0x30C3, 0x30C4, 0x30FC, 0x19E}, // Horsea + {0x30B7, 0x30FC, 0x30C9, 0x30E9, 0x19E}, // Seadra + {0x30C8, 0x30B5, 0x30AD, 0x30F3, 0x30C8, 0x19E}, // Goldeen + {0x30A2, 0x30BA, 0x30DE, 0x30AA, 0x30A6, 0x19E}, // Seaking + {0x30D2, 0x30C8, 0x30C7, 0x30DE, 0x30F3, 0x19E}, // Staryu + {0x30B9, 0x30BF, 0x30FC, 0x30DF, 0x30FC, 0x19E}, // Starmie + {0x30D0, 0x30EA, 0x30E4, 0x30FC, 0x30C9, 0x19E}, // Mr. Mime + {0x30B9, 0x30C8, 0x30E9, 0x30A4, 0x30AF, 0x19E}, // Scyther + {0x30EB, 0x30FC, 0x30B8, 0x30E5, 0x30E9, 0x19E}, // Jynx + {0x30A8, 0x30EC, 0x30D6, 0x30FC, 0x19E}, // Electabuzz + {0x30D6, 0x30FC, 0x30D0, 0x30FC, 0x19E}, // Magmar + {0x30AB, 0x30A4, 0x30ED, 0x30B9, 0x19E}, // Pinsir + {0x30B1, 0x30F3, 0x30BF, 0x30ED, 0x30B9, 0x19E}, // Tauros + {0x30B3, 0x30A4, 0x30AD, 0x30F3, 0x30B0, 0x19E}, // Magikarp + {0x30AE, 0x30E3, 0x30E9, 0x30C9, 0x30B9, 0x19E}, // Gyarados + {0x30E9, 0x30D7, 0x30E9, 0x30B9, 0x19E}, // Lapras + {0x30E1, 0x30BF, 0x30E2, 0x30F3, 0x19E}, // Ditto + {0x30A4, 0x30FC, 0x30D6, 0x30A4, 0x19E}, // Eevee + {0x30B7, 0x30E3, 0x30EF, 0x30FC, 0x30BA, 0x19E}, // Vaporeon + {0x30B5, 0x30F3, 0x30C0, 0x30FC, 0x30B9, 0x19E}, // Jolteon + {0x30D6, 0x30FC, 0x30B9, 0x30BF, 0x30FC, 0x19E}, // Flareon + {0x30DD, 0x30EA, 0x30B4, 0x30F3, 0x19E}, // Porygon + {0x30AA, 0x30E0, 0x30CA, 0x30A4, 0x30C8, 0x19E}, // Omanyte + {0x30AA, 0x30E0, 0x30B9, 0x30BF, 0x30FC, 0x19E}, // Omastar + {0x30AB, 0x30D6, 0x30C8, 0x19E}, // Kabuto + {0x30AB, 0x30D6, 0x30C8, 0x30D7, 0x30B9, 0x19E}, // Kabutops + {0x30D7, 0x30C6, 0x30E9, 0x19E}, // Aerodactyl + {0x30AB, 0x30D3, 0x30B4, 0x30F3, 0x19E}, // Snorlax + {0x30D5, 0x30EA, 0x30FC, 0x30B6, 0x30FC, 0x19E}, // Articuno + {0x30B5, 0x30F3, 0x30C0, 0x30FC, 0x19E}, // Zapdos + {0x30D5, 0x30A1, 0x30A4, 0x30E4, 0x30FC, 0x19E}, // Moltres + {0x30DF, 0x30CB, 0x30EA, 0x30E5, 0x30A6, 0x19E}, // Dratini + {0x30CF, 0x30AF, 0x30EA, 0x30E5, 0x30FC, 0x19E}, // Dragonair + {0x30AB, 0x30A4, 0x30EA, 0x30E5, 0x30FC, 0x19E}, // Dragonite + {0x30DF, 0x30E5, 0x30A6, 0x30C4, 0x30FC, 0x19E}, // Mewtwo + {0x30DF, 0x30E5, 0x30A6, 0x19E}, // Mew + {0x30C1, 0x30B3, 0x30EA, 0x30FC, 0x30BF, 0x19E}, // Chikorita + {0x30D9, 0x30A4, 0x30EA, 0x30FC, 0x30D5, 0x19E}, // Bayleef + {0x30E1, 0x30AC, 0x30CB, 0x30A6, 0x30E0, 0x19E}, // Meganium + {0x30D2, 0x30CE, 0x30A2, 0x30E9, 0x30B7, 0x19E}, // Cyndaquil + {0x30DE, 0x30B0, 0x30DE, 0x30E9, 0x30B7, 0x19E}, // Quilava + {0x30D0, 0x30AF, 0x30D5, 0x30FC, 0x30F3, 0x19E}, // Typhlosion + {0x30EF, 0x30CB, 0x30CE, 0x30B3, 0x19E}, // Totodile + {0x30A2, 0x30EA, 0x30B2, 0x30A4, 0x30C4, 0x19E}, // Croconaw + {0x30AA, 0x30FC, 0x30C0, 0x30A4, 0x30EB, 0x19E}, // Feraligatr + {0x30AA, 0x30BF, 0x30C1, 0x19E}, // Sentret + {0x30AA, 0x30AA, 0x30BF, 0x30C1, 0x19E}, // Furret + {0x30DB, 0x30FC, 0x30DB, 0x30FC, 0x19E}, // Hoothoot + {0x30E8, 0x30EB, 0x30CE, 0x30BA, 0x30AF, 0x19E}, // Noctowl + {0x30EC, 0x30C7, 0x30A3, 0x30D0, 0x19E}, // Ledyba + {0x30EC, 0x30C7, 0x30A3, 0x30A2, 0x30F3, 0x19E}, // Ledian + {0x30A4, 0x30C8, 0x30DE, 0x30EB, 0x19E}, // Spinarak + {0x30A2, 0x30EA, 0x30A2, 0x30C9, 0x30B9, 0x19E}, // Ariados + {0x30AF, 0x30ED, 0x30D0, 0x30C3, 0x30C8, 0x19E}, // Crobat + {0x30C1, 0x30E7, 0x30F3, 0x30C1, 0x30FC, 0x19E}, // Chinchou + {0x30E9, 0x30F3, 0x30BF, 0x30FC, 0x30F3, 0x19E}, // Lanturn + {0x30D4, 0x30C1, 0x30E5, 0x30FC, 0x19E}, // Pichu + {0x30D4, 0x30A3, 0x19E}, // Cleffa + {0x30D7, 0x30D7, 0x30EA, 0x30F3, 0x19E}, // Igglybuff + {0x30C8, 0x30B2, 0x30D4, 0x30FC, 0x19E}, // Togepi + {0x30C8, 0x30B2, 0x30C1, 0x30C3, 0x30AF, 0x19E}, // Togetic + {0x30CD, 0x30A4, 0x30C6, 0x30A3, 0x19E}, // Natu + {0x30CD, 0x30A4, 0x30C6, 0x30A3, 0x30AA, 0x19E}, // Xatu + {0x30E1, 0x30EA, 0x30FC, 0x30D7, 0x19E}, // Mareep + {0x30E2, 0x30B3, 0x30B3, 0x19E}, // Flaaffy + {0x30C7, 0x30F3, 0x30EA, 0x30E5, 0x30A6, 0x19E}, // Ampharos + {0x30AD, 0x30EC, 0x30A4, 0x30CF, 0x30CA, 0x19E}, // Bellossom + {0x30DE, 0x30EA, 0x30EB, 0x19E}, // Marill + {0x30DE, 0x30EA, 0x30EB, 0x30EA, 0x19E}, // Azumarill + {0x30A6, 0x30BD, 0x30C3, 0x30AD, 0x30FC, 0x19E}, // Sudowoodo + {0x30CB, 0x30E7, 0x30ED, 0x30C8, 0x30CE, 0x19E}, // Politoed + {0x30CF, 0x30CD, 0x30C3, 0x30B3, 0x19E}, // Hoppip + {0x30DD, 0x30DD, 0x30C3, 0x30B3, 0x19E}, // Skiploom + {0x30EF, 0x30BF, 0x30C3, 0x30B3, 0x19E}, // Jumpluff + {0x30A8, 0x30A4, 0x30D1, 0x30E0, 0x19E}, // Aipom + {0x30D2, 0x30DE, 0x30CA, 0x30C3, 0x30C4, 0x19E}, // Sunkern + {0x30AD, 0x30DE, 0x30EF, 0x30EA, 0x19E}, // Sunflora + {0x30E4, 0x30F3, 0x30E4, 0x30F3, 0x30DE, 0x19E}, // Yanma + {0x30A6, 0x30D1, 0x30FC, 0x19E}, // Wooper + {0x30CC, 0x30AA, 0x30FC, 0x19E}, // Quagsire + {0x30A8, 0x30FC, 0x30D5, 0x30A3, 0x19E}, // Espeon + {0x30D6, 0x30E9, 0x30C3, 0x30AD, 0x30FC, 0x19E}, // Umbreon + {0x30E4, 0x30DF, 0x30AB, 0x30E9, 0x30B9, 0x19E}, // Murkrow + {0x30E4, 0x30C9, 0x30AD, 0x30F3, 0x30B0, 0x19E}, // Slowking + {0x30E0, 0x30A6, 0x30DE, 0x19E}, // Misdreavus + {0x30A2, 0x30F3, 0x30CE, 0x30FC, 0x30F3, 0x19E}, // Unown + {0x30BD, 0x30FC, 0x30CA, 0x30F3, 0x30B9, 0x19E}, // Wobbuffet + {0x30AD, 0x30EA, 0x30F3, 0x30EA, 0x30AD, 0x19E}, // Girafarig + {0x30AF, 0x30CC, 0x30AE, 0x30C0, 0x30DE, 0x19E}, // Pineco + {0x30D5, 0x30A9, 0x30EC, 0x30C8, 0x30B9, 0x19E}, // Forretress + {0x30CE, 0x30B3, 0x30C3, 0x30C1, 0x19E}, // Dunsparce + {0x30B0, 0x30E9, 0x30A4, 0x30AC, 0x30FC, 0x19E}, // Gligar + {0x30CF, 0x30AC, 0x30CD, 0x30FC, 0x30EB, 0x19E}, // Steelix + {0x30D6, 0x30EB, 0x30FC, 0x19E}, // Snubbull + {0x30B0, 0x30E9, 0x30F3, 0x30D6, 0x30EB, 0x19E}, // Granbull + {0x30CF, 0x30EA, 0x30FC, 0x30BB, 0x30F3, 0x19E}, // Qwilfish + {0x30CF, 0x30C3, 0x30B5, 0x30E0, 0x19E}, // Scizor + {0x30C4, 0x30DC, 0x30C4, 0x30DC, 0x19E}, // Shuckle + {0x30D8, 0x30E9, 0x30AF, 0x30ED, 0x30B9, 0x19E}, // Heracross + {0x30CB, 0x30E5, 0x30FC, 0x30E9, 0x19E}, // Sneasel + {0x30D2, 0x30E1, 0x30B0, 0x30DE, 0x19E}, // Teddiursa + {0x30EA, 0x30F3, 0x30B0, 0x30DE, 0x19E}, // Ursaring + {0x30DE, 0x30B0, 0x30DE, 0x30C3, 0x30B0, 0x19E}, // Slugma + {0x30DE, 0x30B0, 0x30AB, 0x30EB, 0x30B4, 0x19E}, // Magcargo + {0x30A6, 0x30EA, 0x30E0, 0x30FC, 0x19E}, // Swinub + {0x30A4, 0x30CE, 0x30E0, 0x30FC, 0x19E}, // Piloswine + {0x30B5, 0x30CB, 0x30FC, 0x30B4, 0x19E}, // Corsola + {0x30C6, 0x30C3, 0x30DD, 0x30A6, 0x30AA, 0x19E}, // Remoraid + {0x30AA, 0x30AF, 0x30BF, 0x30F3, 0x19E}, // Octillery + {0x30C7, 0x30EA, 0x30D0, 0x30FC, 0x30C9, 0x19E}, // Delibird + {0x30DE, 0x30F3, 0x30BF, 0x30A4, 0x30F3, 0x19E}, // Mantine + {0x30A8, 0x30A2, 0x30FC, 0x30E0, 0x30C9, 0x19E}, // Skarmory + {0x30C7, 0x30EB, 0x30D3, 0x30EB, 0x19E}, // Houndour + {0x30D8, 0x30EB, 0x30AC, 0x30FC, 0x19E}, // Houndoom + {0x30AD, 0x30F3, 0x30B0, 0x30C9, 0x30E9, 0x19E}, // Kingdra + {0x30B4, 0x30DE, 0x30BE, 0x30A6, 0x19E}, // Phanpy + {0x30C9, 0x30F3, 0x30D5, 0x30A1, 0x30F3, 0x19E}, // Donphan + {0x30DD, 0x30EA, 0x30B4, 0x30F3, 0xFF12, 0x19E}, // Porygon2 + {0x30AA, 0x30C9, 0x30B7, 0x30B7, 0x19E}, // Stantler + {0x30C9, 0x30FC, 0x30D6, 0x30EB, 0x19E}, // Smeargle + {0x30D0, 0x30EB, 0x30AD, 0x30FC, 0x19E}, // Tyrogue + {0x30AB, 0x30DD, 0x30A8, 0x30E9, 0x30FC, 0x19E}, // Hitmontop + {0x30E0, 0x30C1, 0x30E5, 0x30FC, 0x30EB, 0x19E}, // Smoochum + {0x30A8, 0x30EC, 0x30AD, 0x30C3, 0x30C9, 0x19E}, // Elekid + {0x30D6, 0x30D3, 0x30A3, 0x19E}, // Magby + {0x30DF, 0x30EB, 0x30BF, 0x30F3, 0x30AF, 0x19E}, // Miltank + {0x30CF, 0x30D4, 0x30CA, 0x30B9, 0x19E}, // Blissey + {0x30E9, 0x30A4, 0x30B3, 0x30A6, 0x19E}, // Raikou + {0x30A8, 0x30F3, 0x30C6, 0x30A4, 0x19E}, // Entei + {0x30B9, 0x30A4, 0x30AF, 0x30F3, 0x19E}, // Suicune + {0x30E8, 0x30FC, 0x30AE, 0x30E9, 0x30B9, 0x19E}, // Larvitar + {0x30B5, 0x30CA, 0x30AE, 0x30E9, 0x30B9, 0x19E}, // Pupitar + {0x30D0, 0x30F3, 0x30AE, 0x30E9, 0x30B9, 0x19E}, // Tyranitar + {0x30EB, 0x30AE, 0x30A2, 0x19E}, // Lugia + {0x30DB, 0x30A6, 0x30AA, 0x30A6, 0x19E}, // Ho-Oh + {0x30BB, 0x30EC, 0x30D3, 0x30A3, 0x19E}, // Celebi + {0x30AD, 0x30E2, 0x30EA}, // Treecko +}; +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 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 +}; + +#define ICON_RED 0 +#define ICON_BLU 1 +#define ICON_GRN 2 +#define ICON_BRN 3 +#define ICON_PNK 4 + +const u8 MENU_SPRITE_PALS[POKEMON_ARRAY_SIZE + 26][2] = { + {ICON_BLU, ICON_RED}, // MISSINGNO + {ICON_GRN, ICON_GRN}, // BULBASAUR + {ICON_GRN, ICON_GRN}, // IVYSAUR + {ICON_GRN, ICON_GRN}, // VENUSAUR + {ICON_RED, ICON_BRN}, // CHARMANDER + {ICON_RED, ICON_PNK}, // CHARMELEON + {ICON_RED, ICON_BLU}, // CHARIZARD + {ICON_BLU, ICON_GRN}, // SQUIRTLE + {ICON_BLU, ICON_GRN}, // WARTORTLE + {ICON_BLU, ICON_GRN}, // BLASTOISE + {ICON_GRN, ICON_BRN}, // CATERPIE + {ICON_GRN, ICON_BRN}, // METAPOD + {ICON_PNK, ICON_GRN}, // BUTTERFREE + {ICON_RED, ICON_PNK}, // WEEDLE + {ICON_BRN, ICON_GRN}, // KAKUNA + {ICON_RED, ICON_GRN}, // BEEDRILL + {ICON_BRN, ICON_GRN}, // PIDGEY + {ICON_BRN, ICON_GRN}, // PIDGEOTTO + {ICON_RED, ICON_GRN}, // PIDGEOT + {ICON_PNK, ICON_GRN}, // RATTATA + {ICON_BRN, ICON_RED}, // RATICATE + {ICON_BRN, ICON_GRN}, // SPEAROW + {ICON_BRN, ICON_GRN}, // FEAROW + {ICON_PNK, ICON_GRN}, // EKANS + {ICON_PNK, ICON_BRN}, // ARBOK + {ICON_RED, ICON_PNK}, // PIKACHU + {ICON_RED, ICON_BRN}, // RAICHU + {ICON_BRN, ICON_GRN}, // SANDSHREW + {ICON_BRN, ICON_RED}, // SANDSLASH + {ICON_BLU, ICON_PNK}, // NIDORAN_F + {ICON_BLU, ICON_PNK}, // NIDORINA + {ICON_BLU, ICON_GRN}, // NIDOQUEEN + {ICON_PNK, ICON_BLU}, // NIDORAN_M + {ICON_PNK, ICON_BLU}, // NIDORINO + {ICON_PNK, ICON_BLU}, // NIDOKING + {ICON_PNK, ICON_GRN}, // CLEFAIRY + {ICON_PNK, ICON_GRN}, // CLEFABLE + {ICON_RED, ICON_BRN}, // VULPIX + {ICON_BRN, ICON_BLU}, // NINETALES + {ICON_PNK, ICON_GRN}, // JIGGLYPUFF + {ICON_PNK, ICON_GRN}, // WIGGLYTUFF + {ICON_BLU, ICON_GRN}, // ZUBAT + {ICON_BLU, ICON_GRN}, // GOLBAT + {ICON_GRN, ICON_BRN}, // ODDISH + {ICON_RED, ICON_BRN}, // GLOOM + {ICON_RED, ICON_BRN}, // VILEPLUME + {ICON_RED, ICON_GRN}, // PARAS + {ICON_RED, ICON_GRN}, // PARASECT + {ICON_PNK, ICON_BLU}, // VENONAT + {ICON_PNK, ICON_BLU}, // VENOMOTH + {ICON_BRN, ICON_BLU}, // DIGLETT + {ICON_BRN, ICON_BLU}, // DUGTRIO + {ICON_BRN, ICON_PNK}, // MEOWTH + {ICON_BRN, ICON_PNK}, // PERSIAN + {ICON_BRN, ICON_BLU}, // PSYDUCK + {ICON_BLU, ICON_BLU}, // GOLDUCK + {ICON_BRN, ICON_GRN}, // MANKEY + {ICON_BRN, ICON_GRN}, // PRIMEAPE + {ICON_RED, ICON_GRN}, // GROWLITHE + {ICON_RED, ICON_GRN}, // ARCANINE + {ICON_BLU, ICON_BLU}, // POLIWAG + {ICON_BLU, ICON_BLU}, // POLIWHIRL + {ICON_BLU, ICON_GRN}, // POLIWRATH + {ICON_BRN, ICON_PNK}, // ABRA + {ICON_BRN, ICON_PNK}, // KADABRA + {ICON_BRN, ICON_PNK}, // ALAKAZAM + {ICON_BLU, ICON_BRN}, // MACHOP + {ICON_BLU, ICON_GRN}, // MACHOKE + {ICON_BLU, ICON_GRN}, // MACHAMP + {ICON_GRN, ICON_BRN}, // BELLSPROUT + {ICON_GRN, ICON_BRN}, // WEEPINBELL + {ICON_GRN, ICON_BRN}, // VICTREEBEL + {ICON_BLU, ICON_GRN}, // TENTACOOL + {ICON_BLU, ICON_GRN}, // TENTACRUEL + {ICON_BRN, ICON_RED}, // GEODUDE + {ICON_BRN, ICON_RED}, // GRAVELER + {ICON_BRN, ICON_RED}, // GOLEM + {ICON_RED, ICON_PNK}, // PONYTA + {ICON_RED, ICON_PNK}, // RAPIDASH + {ICON_PNK, ICON_BLU}, // SLOWPOKE + {ICON_PNK, ICON_BLU}, // SLOWBRO + {ICON_BLU, ICON_BRN}, // MAGNEMITE + {ICON_BLU, ICON_BRN}, // MAGNETON + {ICON_BRN, ICON_GRN}, // FARFETCH_D + {ICON_BRN, ICON_GRN}, // DODUO + {ICON_BRN, ICON_GRN}, // DODRIO + {ICON_RED, ICON_PNK}, // SEEL + {ICON_RED, ICON_PNK}, // DEWGONG + {ICON_PNK, ICON_GRN}, // GRIMER + {ICON_PNK, ICON_GRN}, // MUK + {ICON_PNK, ICON_BRN}, // SHELLDER + {ICON_PNK, ICON_BLU}, // CLOYSTER + {ICON_PNK, ICON_BLU}, // GASTLY + {ICON_PNK, ICON_BLU}, // HAUNTER + {ICON_RED, ICON_BLU}, // GENGAR + {ICON_BRN, ICON_GRN}, // ONIX + {ICON_BRN, ICON_PNK}, // DROWZEE + {ICON_BRN, ICON_PNK}, // HYPNO + {ICON_RED, ICON_GRN}, // KRABBY + {ICON_RED, ICON_GRN}, // KINGLER + {ICON_RED, ICON_BLU}, // VOLTORB + {ICON_RED, ICON_BLU}, // ELECTRODE + {ICON_PNK, ICON_GRN}, // EXEGGCUTE + {ICON_GRN, ICON_BRN}, // EXEGGUTOR + {ICON_BRN, ICON_GRN}, // CUBONE + {ICON_BRN, ICON_GRN}, // MAROWAK + {ICON_BRN, ICON_GRN}, // HITMONLEE + {ICON_BRN, ICON_GRN}, // HITMONCHAN + {ICON_PNK, ICON_GRN}, // LICKITUNG + {ICON_PNK, ICON_BLU}, // KOFFING + {ICON_PNK, ICON_BLU}, // WEEZING + {ICON_BLU, ICON_BRN}, // RHYHORN + {ICON_BLU, ICON_BLU}, // RHYDON + {ICON_PNK, ICON_GRN}, // CHANSEY + {ICON_BLU, ICON_GRN}, // TANGELA + {ICON_BRN, ICON_GRN}, // KANGASKHAN + {ICON_BLU, ICON_PNK}, // HORSEA + {ICON_BLU, ICON_PNK}, // SEADRA + {ICON_RED, ICON_BRN}, // GOLDEEN + {ICON_RED, ICON_BRN}, // SEAKING + {ICON_BRN, ICON_BLU}, // STARYU + {ICON_PNK, ICON_BLU}, // STARMIE + {ICON_PNK, ICON_GRN}, // MR__MIME + {ICON_GRN, ICON_GRN}, // SCYTHER + {ICON_RED, ICON_PNK}, // JYNX + {ICON_BRN, ICON_GRN}, // ELECTABUZZ + {ICON_RED, ICON_PNK}, // MAGMAR + {ICON_BRN, ICON_BLU}, // PINSIR + {ICON_BRN, ICON_GRN}, // TAUROS + {ICON_RED, ICON_GRN}, // MAGIKARP + {ICON_BLU, ICON_RED}, // GYARADOS + {ICON_BLU, ICON_PNK}, // LAPRAS + {ICON_PNK, ICON_BLU}, // DITTO + {ICON_BRN, ICON_BLU}, // EEVEE + {ICON_BLU, ICON_PNK}, // VAPOREON + {ICON_BRN, ICON_GRN}, // JOLTEON + {ICON_RED, ICON_BRN}, // FLAREON + {ICON_PNK, ICON_BLU}, // PORYGON + {ICON_BLU, ICON_BRN}, // OMANYTE + {ICON_BLU, ICON_BRN}, // OMASTAR + {ICON_BRN, ICON_GRN}, // KABUTO + {ICON_BRN, ICON_GRN}, // KABUTOPS + {ICON_PNK, ICON_BLU}, // AERODACTYL + {ICON_RED, ICON_BLU}, // SNORLAX + {ICON_BLU, ICON_BLU}, // ARTICUNO + {ICON_BRN, ICON_RED}, // ZAPDOS + {ICON_RED, ICON_PNK}, // MOLTRES + {ICON_BLU, ICON_PNK}, // DRATINI + {ICON_BLU, ICON_PNK}, // DRAGONAIR + {ICON_RED, ICON_GRN}, // DRAGONITE + {ICON_PNK, ICON_GRN}, // MEWTWO + {ICON_PNK, ICON_BLU}, // MEW + {ICON_GRN, ICON_BRN}, // CHIKORITA + {ICON_GRN, ICON_BRN}, // BAYLEEF + {ICON_GRN, ICON_BRN}, // MEGANIUM + {ICON_RED, ICON_PNK}, // CYNDAQUIL + {ICON_RED, ICON_PNK}, // QUILAVA + {ICON_RED, ICON_PNK}, // TYPHLOSION + {ICON_BLU, ICON_GRN}, // TOTODILE + {ICON_BLU, ICON_GRN}, // CROCONAW + {ICON_BLU, ICON_GRN}, // FERALIGATR + {ICON_BRN, ICON_PNK}, // SENTRET + {ICON_BRN, ICON_PNK}, // FURRET + {ICON_BRN, ICON_GRN}, // HOOTHOOT + {ICON_BRN, ICON_GRN}, // NOCTOWL + {ICON_RED, ICON_BRN}, // LEDYBA + {ICON_RED, ICON_BRN}, // LEDIAN + {ICON_GRN, ICON_PNK}, // SPINARAK + {ICON_RED, ICON_PNK}, // ARIADOS + {ICON_PNK, ICON_PNK}, // CROBAT + {ICON_BLU, ICON_BLU}, // CHINCHOU + {ICON_BLU, ICON_PNK}, // LANTURN + {ICON_RED, ICON_BRN}, // PICHU + {ICON_PNK, ICON_GRN}, // CLEFFA + {ICON_PNK, ICON_GRN}, // IGGLYBUFF + {ICON_RED, ICON_BLU}, // TOGEPI + {ICON_RED, ICON_BLU}, // TOGETIC + {ICON_GRN, ICON_GRN}, // NATU + {ICON_GRN, ICON_GRN}, // XATU + {ICON_BLU, ICON_BLU}, // MAREEP + {ICON_PNK, ICON_PNK}, // FLAAFFY + {ICON_BRN, ICON_BLU}, // AMPHAROS + {ICON_GRN, ICON_BLU}, // BELLOSSOM + {ICON_BLU, ICON_GRN}, // MARILL + {ICON_BLU, ICON_BRN}, // AZUMARILL + {ICON_GRN, ICON_PNK}, // SUDOWOODO + {ICON_GRN, ICON_BLU}, // POLITOED + {ICON_PNK, ICON_GRN}, // HOPPIP + {ICON_GRN, ICON_PNK}, // SKIPLOOM + {ICON_BLU, ICON_PNK}, // JUMPLUFF + {ICON_PNK, ICON_PNK}, // AIPOM + {ICON_GRN, ICON_BRN}, // SUNKERN + {ICON_GRN, ICON_BRN}, // SUNFLORA + {ICON_RED, ICON_BLU}, // YANMA + {ICON_BLU, ICON_PNK}, // WOOPER + {ICON_BLU, ICON_PNK}, // QUAGSIRE + {ICON_PNK, ICON_GRN}, // ESPEON + {ICON_BRN, ICON_BLU}, // UMBREON + {ICON_BLU, ICON_PNK}, // MURKROW + {ICON_PNK, ICON_BLU}, // SLOWKING + {ICON_BLU, ICON_BRN}, // MISDREAVUS + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BLU, ICON_PNK}, // WOBBUFFET + {ICON_PNK, ICON_BLU}, // GIRAFARIG + {ICON_GRN, ICON_RED}, // PINECO + {ICON_RED, ICON_GRN}, // FORRETRESS + {ICON_BLU, ICON_PNK}, // DUNSPARCE + {ICON_PNK, ICON_BLU}, // GLIGAR + {ICON_BLU, ICON_BRN}, // STEELIX + {ICON_PNK, ICON_BLU}, // SNUBBULL + {ICON_PNK, ICON_BLU}, // GRANBULL + {ICON_BLU, ICON_PNK}, // QWILFISH + {ICON_RED, ICON_GRN}, // SCIZOR + {ICON_RED, ICON_BLU}, // SHUCKLE + {ICON_BLU, ICON_PNK}, // HERACROSS + {ICON_BLU, ICON_PNK}, // SNEASEL + {ICON_BRN, ICON_GRN}, // TEDDIURSA + {ICON_BRN, ICON_GRN}, // URSARING + {ICON_RED, ICON_BLU}, // SLUGMA + {ICON_RED, ICON_BLU}, // MAGCARGO + {ICON_BRN, ICON_BLU}, // SWINUB + {ICON_BRN, ICON_GRN}, // PILOSWINE + {ICON_PNK, ICON_BLU}, // CORSOLA + {ICON_BLU, ICON_BLU}, // REMORAID + {ICON_RED, ICON_GRN}, // OCTILLERY + {ICON_RED, ICON_PNK}, // DELIBIRD + {ICON_BLU, ICON_BLU}, // MANTINE + {ICON_RED, ICON_GRN}, // SKARMORY + {ICON_RED, ICON_BLU}, // HOUNDOUR + {ICON_RED, ICON_BLU}, // HOUNDOOM + {ICON_BLU, ICON_PNK}, // KINGDRA + {ICON_BLU, ICON_BLU}, // PHANPY + {ICON_BLU, ICON_RED}, // DONPHAN + {ICON_PNK, ICON_BLU}, // PORYGON2 + {ICON_BRN, ICON_GRN}, // STANTLER + {ICON_GRN, ICON_PNK}, // SMEARGLE + {ICON_PNK, ICON_BLU}, // TYROGUE + {ICON_BRN, ICON_BLU}, // HITMONTOP + {ICON_PNK, ICON_PNK}, // SMOOCHUM + {ICON_BRN, ICON_BRN}, // ELEKID + {ICON_RED, ICON_BRN}, // MAGBY + {ICON_PNK, ICON_BLU}, // MILTANK + {ICON_PNK, ICON_PNK}, // BLISSEY + {ICON_BRN, ICON_BRN}, // RAIKOU + {ICON_RED, ICON_RED}, // ENTEI + {ICON_BLU, ICON_BLU}, // SUICUNE + {ICON_GRN, ICON_GRN}, // LARVITAR + {ICON_BLU, ICON_PNK}, // PUPITAR + {ICON_GRN, ICON_PNK}, // TYRANITAR + {ICON_BLU, ICON_PNK}, // LUGIA + {ICON_RED, ICON_BRN}, // HO_OH + {ICON_GRN, ICON_PNK}, // CELEBI + {ICON_GRN, ICON_BLU}, // TREECKO + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN + {ICON_BRN, ICON_BLU}, // UNOWN +}; + +extern 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 +}; + +void generate_pokemon_data() +{ + writeTable("gen_1_index_array.bin", gen_1_index_array, sizeof(gen_1_index_array)); + writeTable("gen_1_Jpn_char_array.bin", (const uint8_t*)gen_1_Jpn_char_array, sizeof(gen_1_Jpn_char_array)); + writeTable("gen_1_Eng_char_array.bin", (const uint8_t*)gen_1_Eng_char_array, sizeof(gen_1_Eng_char_array)); + writeTable("gen_1_FreGer_char_array.bin", (const uint8_t*)gen_1_FreGer_char_array, sizeof(gen_1_FreGer_char_array)); + writeTable("gen_1_ItaSpa_char_array.bin", (const uint8_t*)gen_1_ItaSpa_char_array, sizeof(gen_1_ItaSpa_char_array)); + writeTable("gen_2_Jpn_char_array.bin", (const uint8_t*)gen_2_Jpn_char_array, sizeof(gen_2_Jpn_char_array)); + writeTable("gen_2_Eng_char_array.bin", (const uint8_t*)gen_2_Eng_char_array, sizeof(gen_2_Eng_char_array)); + writeTable("gen_2_FreGer_char_array.bin", (const uint8_t*)gen_2_FreGer_char_array, sizeof(gen_2_FreGer_char_array)); + writeTable("gen_2_ItaSpa_char_array.bin", (const uint8_t*)gen_2_ItaSpa_char_array, sizeof(gen_2_ItaSpa_char_array)); + writeTable("gen_3_Jpn_char_array.bin", (const uint8_t*)gen_3_Jpn_char_array, sizeof(gen_3_Jpn_char_array)); + writeTable("gen_3_Intern_char_array.bin", (const uint8_t*)gen_3_Intern_char_array, sizeof(gen_3_Intern_char_array)); + writeTable("EXP_GROUPS.bin", EXP_GROUPS, sizeof(EXP_GROUPS)); + writeTable("GENDER_RATIO.bin", GENDER_RATIO, sizeof(GENDER_RATIO)); + writeTable("NUM_ABILITIES.bin", (const uint8_t*)(NUM_ABILITIES), sizeof(NUM_ABILITIES)); + writeTable("MOVESETS.bin", (const uint8_t*)(MOVESETS), sizeof(MOVESETS)); + writeTable("FIRST_MOVES.bin", FIRST_MOVES, sizeof(FIRST_MOVES)); + writeTable("JPN_NAMES.bin", (const uint8_t*)JPN_NAMES, sizeof(JPN_NAMES)); + writeTable("EVOLUTIONS.bin", EVOLUTIONS, sizeof(EVOLUTIONS)); + writeTable("POWER_POINTS.bin", POWER_POINTS, sizeof(POWER_POINTS)); + writeTable("MENU_SPRITE_PALS.bin", (const uint8_t*)MENU_SPRITE_PALS, sizeof(MENU_SPRITE_PALS)); + writeTable("EVENT_PKMN.bin", (const uint8_t*)EVENT_PKMN, sizeof(EVENT_PKMN)); + writeTable("TYPES.bin", (const uint8_t*)TYPES, sizeof(TYPES)); +} \ No newline at end of file