diff --git a/constants/scgb_constants.asm b/constants/scgb_constants.asm index 56a90cf1470..e7056367110 100644 --- a/constants/scgb_constants.asm +++ b/constants/scgb_constants.asm @@ -6,6 +6,8 @@ const SCGB_POKEGEAR_PALS const SCGB_STATS_SCREEN_HP_PALS const SCGB_POKEDEX + const SCGB_POKEDEX_EVO + const SCGB_POKEDEX_PICS const SCGB_SLOT_MACHINE const SCGB_BETA_TITLE_SCREEN const SCGB_GS_INTRO diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm index a00e931dd29..acd93281a11 100644 --- a/constants/wram_constants.asm +++ b/constants/wram_constants.asm @@ -13,6 +13,19 @@ DEF AUTO_INPUT EQU $ff const DEXMODE_ABC const DEXMODE_UNOWN +; wPokedexColor + const_def + const DEXCOLOR_RED + const DEXCOLOR_BLUE + const DEXCOLOR_PURPLE + const DEXCOLOR_BROWN + const DEXCOLOR_GREEN + const DEXCOLOR_PINK + const DEXCOLOR_YELLOW + const DEXCOLOR_CYAN + const DEXCOLOR_GRAY + const DEXCOLOR_MEWTWO + ; wMonType:: const_def const PARTYMON ; 0 diff --git a/data/maps/map_names.asm b/data/maps/map_names.asm new file mode 100644 index 00000000000..0a19b403d85 --- /dev/null +++ b/data/maps/map_names.asm @@ -0,0 +1,1357 @@ +MapGroupNum_Names:: + table_width 2, MapGroupNum_Names + dw Olivine_Map_Names + dw Mahogany_Map_Names + dw Dungeons_Map_Names + dw Ecruteak_Map_Names + dw Blackthorn_Map_Names + dw Cinnabar_Map_Names + dw Cerulean_Map_Names + dw Azalea_Map_Names + dw Lake_of_Rage_Map_Names + dw Violet_Map_Names + dw Goldenrod_Map_Names + dw Vermilion_Map_Names + dw Pallet_Map_Names + dw Pewter_Map_Names + dw Fast_Ship_Map_Names + dw Indigo_Map_Names + dw Fuchsia_Map_Names + dw Lavender_Map_Names + dw Silver_Map_Names + dw Cable_Club_Map_Names + dw Celadon_Map_Names + dw Cianwood_Map_Names + dw Viridian_Map_Names + dw New_Bark_Map_Names + dw Saffron_Map_Names + dw Cherrygrove_Map_Names + assert_table_length NUM_MAP_GROUPS + +GetMapGroupNum_Name:: + dec d ; map num + dec e ; map group + push de + ld d, 0 + ; ld hl, Dungeons_Map_Names + ld hl, MapGroupNum_Names + add hl, de + add hl, de + ld a, [hli] + ld e, a + ld a, [hl] + ld d, a + ld h, d + ld l, e + pop de + ld e, d + ld d, 0 + add hl, de + add hl, de + ld a, [hli] + ld e, a + ld a, [hl] + ld d, a + ; return string ptr in de + ret + + +Olivine_Map_Names: ;newgroup OLIVINE ; 1 + table_width 2, Olivine_Map_Names + dw Olivine_Map_Name1 ; map_const OLIVINE_POKECENTER_1F ; 1 + dw Olivine_Map_Name2 ; map_const OLIVINE_GYM ; 2 + dw Olivine_Map_Name3 ; map_const OLIVINE_TIMS_HOUSE ; 3 + dw Olivine_Map_Name4 ; map_const OLIVINE_HOUSE_BETA ; 4 + dw Olivine_Map_Name5 ; map_const OLIVINE_PUNISHMENT_SPEECH_HOUSE ; 5 + dw Olivine_Map_Name6 ; map_const OLIVINE_GOOD_ROD_HOUSE ; 6 + dw Olivine_Map_Name7 ; map_const OLIVINE_CAFE ; 7 + dw Olivine_Map_Name8 ; map_const OLIVINE_MART ; 8 + dw Olivine_Map_Name9 ; map_const ROUTE_38_ECRUTEAK_GATE ; 9 + dw Olivine_Map_Name10 ; map_const ROUTE_39_BARN ; 10 + dw Olivine_Map_Name11 ; map_const ROUTE_39_FARMHOUSE ; 11 + dw Olivine_Map_Name12 ; map_const ROUTE_38, ; 12 + dw Olivine_Map_Name13 ; map_const ROUTE_39, ; 13 + dw Olivine_Map_Name14 ; map_const OLIVINE_CITY ; 14 + assert_table_length NUM_OLIVINE_MAPS + +Mahogany_Map_Names: ;newgroup MAHOGANY + table_width 2, Mahogany_Map_Names ; 2 + dw Mahogany_Map_Name1 ; map_const MAHOGANY_RED_GYARADOS_SPEECH_HOUSE ; 1 + dw Mahogany_Map_Name2 ; map_const MAHOGANY_GYM ; 2 + dw Mahogany_Map_Name3 ; map_const MAHOGANY_POKECENTER_1F ; 3 + dw Mahogany_Map_Name4 ; map_const ROUTE_42_ECRUTEAK_GATE ; 4 + dw Mahogany_Map_Name5 ; map_const ROUTE_42, ; 5 + dw Mahogany_Map_Name6 ; map_const ROUTE_44, ; 6 + dw Mahogany_Map_Name7 ; map_const MAHOGANY_TOWN, ; 7 + assert_table_length NUM_MAHOGANY_MAPS + + +Dungeons_Map_Names: ;newgroup DUNGEONS + table_width 2, Dungeons_Map_Names ; 3 + dw Dungeons_Map_Name1 ; map_const SPROUT_TOWER_1F, ; 1 + dw Dungeons_Map_Name2 ; map_const SPROUT_TOWER_2F, ; 2 + dw Dungeons_Map_Name3 ; map_const SPROUT_TOWER_3F, ; 3 + dw Dungeons_Map_Name4 ; map_const TIN_TOWER_1F, ; 4 + dw Dungeons_Map_Name5 ; map_const TIN_TOWER_2F, 10, 9 ; 5 + dw Dungeons_Map_Name6 ; map_const TIN_TOWER_3F, 10, 9 ; 6 + dw Dungeons_Map_Name7 ; map_const TIN_TOWER_4F, 10, 9 ; 7 + dw Dungeons_Map_Name8 ; map_const TIN_TOWER_5F, 10, 9 ; 8 + dw Dungeons_Map_Name9 ; map_const TIN_TOWER_6F, 10, 9 ; 9 + dw Dungeons_Map_Name10 ; map_const TIN_TOWER_7F, 10, 9 ; 10 + dw Dungeons_Map_Name11 ; map_const TIN_TOWER_8F, 10, 9 ; 11 + dw Dungeons_Map_Name12 ; map_const TIN_TOWER_9F, 10, 9 ; 12 + dw Dungeons_Map_Name13 ; map_const BURNED_TOWER_1F, 10, 9 ; 13 + dw Dungeons_Map_Name14 ; map_const BURNED_TOWER_B1F, 10, 9 ; 14 + dw Dungeons_Map_Name15 ; map_const NATIONAL_PARK, 20, 27 ; 15 + dw Dungeons_Map_Name16 ; map_const NATIONAL_PARK_BUG_CONTEST, 20, 27 ; 16 + dw Dungeons_Map_Name17 ; map_const RADIO_TOWER_1F ; 17 + dw Dungeons_Map_Name18 ; map_const RADIO_TOWER_2F ; 18 + dw Dungeons_Map_Name19 ; map_const RADIO_TOWER_3F ; 19 + dw Dungeons_Map_Name20 ; map_const RADIO_TOWER_4F ; 20 + dw Dungeons_Map_Name21 ; map_const RADIO_TOWER_5F ; 21 + dw Dungeons_Map_Name22 ; map_const RUINS_OF_ALPH_OUTSIDE, 10, 18 ; 22 + dw Dungeons_Map_Name23 ; map_const RUINS_OF_ALPH_HO_OH_CHAMBER ; 23 + dw Dungeons_Map_Name24; map_const RUINS_OF_ALPH_KABUTO_CHAMBER ; 24 + dw Dungeons_Map_Name25; map_const RUINS_OF_ALPH_OMANYTE_CHAMBER ; 25 + dw Dungeons_Map_Name26 ; map_const RUINS_OF_ALPH_AERODACTYL_CHAMBER ; 26 + dw Dungeons_Map_Name27 ; map_const RUINS_OF_ALPH_INNER_CHAMBER, 10, 14 ; 27 + dw Dungeons_Map_Name28 ; map_const RUINS_OF_ALPH_RESEARCH_CENTER ; 28 + dw Dungeons_Map_Name29 ; map_const RUINS_OF_ALPH_HO_OH_ITEM_ROOM ; 29 + dw Dungeons_Map_Name30 ; map_const RUINS_OF_ALPH_KABUTO_ITEM_ROOM ; 30 + dw Dungeons_Map_Name31 ; map_const RUINS_OF_ALPH_OMANYTE_ITEM_ROOM ; 31 + dw Dungeons_Map_Name32 ; map_const RUINS_OF_ALPH_AERODACTYL_ITEM_ROOM ; 32 + dw Dungeons_Map_Name33 ; map_const RUINS_OF_ALPH_HO_OH_WORD_ROOM, 10, 12 ; 33 + dw Dungeons_Map_Name34 ; map_const RUINS_OF_ALPH_KABUTO_WORD_ROOM, 10, 7 ; 34 + dw Dungeons_Map_Name35 ; map_const RUINS_OF_ALPH_OMANYTE_WORD_ROOM, 10, 8 ; 35 + dw Dungeons_Map_Name36 ; map_const RUINS_OF_ALPH_AERODACTYL_WORD_ROOM, 10, 7 ; 36 + dw Dungeons_Map_Name37 ; map_const UNION_CAVE_1F, 10, 18 ; 37 + dw Dungeons_Map_Name38 ; map_const UNION_CAVE_B1F, 10, 18 ; 38 + dw Dungeons_Map_Name39 ; map_const UNION_CAVE_B2F, 10, 18 ; 39 + dw Dungeons_Map_Name40 ; map_const SLOWPOKE_WELL_B1F, 10, 9 ; 40 + dw Dungeons_Map_Name41 ; map_const SLOWPOKE_WELL_B2F, 10, 9 ; 41 + dw Dungeons_Map_Name42 ; map_const OLIVINE_LIGHTHOUSE_1F, 10, 9 ; 42 + dw Dungeons_Map_Name43 ; map_const OLIVINE_LIGHTHOUSE_2F, 10, 9 ; 43 + dw Dungeons_Map_Name44 ; map_const OLIVINE_LIGHTHOUSE_3F, 10, 9 ; 44 + dw Dungeons_Map_Name45 ; map_const OLIVINE_LIGHTHOUSE_4F, 10, 9 ; 45 + dw Dungeons_Map_Name46 ; map_const OLIVINE_LIGHTHOUSE_5F, 10, 9 ; 46 + dw Dungeons_Map_Name47 ; map_const OLIVINE_LIGHTHOUSE_6F, 10, 9 ; 47 + dw Dungeons_Map_Name48 ; map_const MAHOGANY_MART_1F ; 48 + dw Dungeons_Map_Name49 ; map_const TEAM_ROCKET_BASE_B1F, 15, 9 ; 49 + dw Dungeons_Map_Name50 ; map_const TEAM_ROCKET_BASE_B2F, 15, 9 ; 50 + dw Dungeons_Map_Name51 ; map_const TEAM_ROCKET_BASE_B3F, 15, 9 ; 51 + dw Dungeons_Map_Name52 ; map_const ILEX_FOREST, 15, 27 ; 52 + dw Dungeons_Map_Name53 ; map_const GOLDENROD_UNDERGROUND, 15, 18 ; 53 + dw Dungeons_Map_Name54 ; map_const GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES, 15, 18 ; 54 + dw Dungeons_Map_Name55 ; map_const GOLDENROD_DEPT_STORE_B1F, 10, 9 ; 55 + dw Dungeons_Map_Name56 ; map_const GOLDENROD_UNDERGROUND_WAREHOUSE, 10, 9 ; 56 + dw Dungeons_Map_Name57 ; map_const MOUNT_MORTAR_1F_OUTSIDE, 20, 18 ; 57 + dw Dungeons_Map_Name58 ; map_const MOUNT_MORTAR_1F_INSIDE, 20, 27 ; 58 + dw Dungeons_Map_Name59 ; map_const MOUNT_MORTAR_2F_INSIDE, 20, 18 ; 59 + dw Dungeons_Map_Name60 ; map_const MOUNT_MORTAR_B1F, 20, 18 ; 60 + dw Dungeons_Map_Name61 ; map_const ICE_PATH_1F, 20, 18 ; 61 + dw Dungeons_Map_Name62 ; map_const ICE_PATH_B1F, 10, 18 ; 62 + dw Dungeons_Map_Name63 ; map_const ICE_PATH_B2F_MAHOGANY_SIDE, 10, 9 ; 63 + dw Dungeons_Map_Name64 ; map_const ICE_PATH_B2F_BLACKTHORN_SIDE ; 64 + dw Dungeons_Map_Name65 ; map_const ICE_PATH_B3F, 10, 9 ; 65 + dw Dungeons_Map_Name66 ; map_const WHIRL_ISLAND_NW ; 66 + dw Dungeons_Map_Name67 ; map_const WHIRL_ISLAND_NE, 10, 9 ; 67 + dw Dungeons_Map_Name68 ; map_const WHIRL_ISLAND_SW, 10, 9 ; 68 + dw Dungeons_Map_Name69 ; map_const WHIRL_ISLAND_CAVE ; 69 + dw Dungeons_Map_Name70 ; map_const WHIRL_ISLAND_SE ; 70 + dw Dungeons_Map_Name71 ; map_const WHIRL_ISLAND_B1F, 20, 18 ; 71 + dw Dungeons_Map_Name72 ; map_const WHIRL_ISLAND_B2F, 10, 18 ; 72 + dw Dungeons_Map_Name73 ; map_const WHIRL_ISLAND_LUGIA_CHAMBER, 10, 9 ; 73 + dw Dungeons_Map_Name74 ; map_const SILVER_CAVE_ROOM_1, 10, 18 ; 74 + dw Dungeons_Map_Name75 ; map_const SILVER_CAVE_ROOM_2, 15, 18 ; 75 + dw Dungeons_Map_Name76 ; map_const SILVER_CAVE_ROOM_3, 10, 18 ; 76 + dw Dungeons_Map_Name77 ; map_const SILVER_CAVE_ITEM_ROOMS, 10, 9 ; 77 + dw Dungeons_Map_Name78 ; map_const DARK_CAVE_VIOLET_ENTRANCE, 20, 18 ; 78 + dw Dungeons_Map_Name79 ; map_const DARK_CAVE_BLACKTHORN_ENTRANCE, 15, 18 ; 79 + dw Dungeons_Map_Name80 ; map_const DRAGONS_DEN_1F ; 80 + dw Dungeons_Map_Name81 ; map_const DRAGONS_DEN_B1F, 20, 18 ; 81 + dw Dungeons_Map_Name82 ; map_const DRAGON_SHRINE ; 82 + dw Dungeons_Map_Name83 ; map_const TOHJO_FALLS, 15, 9 ; 83 + dw Dungeons_Map_Name84 ; map_const DIGLETTS_CAVE, 10, 18 ; 84 + dw Dungeons_Map_Name85 ; map_const MOUNT_MOON, 15, 9 ; 85 + dw Dungeons_Map_Name86 ; map_const UNDERGROUND_PATH, 3, 14 ; 86 + dw Dungeons_Map_Name87 ; map_const ROCK_TUNNEL_1F, 15, 18 ; 87 + dw Dungeons_Map_Name88 ; map_const ROCK_TUNNEL_B1F, 15, 18 ; 88 + dw Dungeons_Map_Name89 ; map_const SAFARI_ZONE_FUCHSIA_GATE_BETA ; 89 + dw Dungeons_Map_Name90 ; map_const SAFARI_ZONE_BETA, 10, 18 ; 90 + dw Dungeons_Map_Name91 ; map_const VICTORY_ROAD,; 91 + assert_table_length NUM_DUNGEONS_MAPS + + +Ecruteak_Map_Names: ;newgroup ECRUTEAK + table_width 2, Ecruteak_Map_Names ; 4 + dw Ecruteak_Map_Name1 ; map_const ECRUTEAK_TIN_TOWER_ENTRANCE, 10, 9 ; 1 + dw Ecruteak_Map_Name2 ; map_const WISE_TRIOS_ROOM ; 2 + dw Ecruteak_Map_Name3 ; map_const ECRUTEAK_POKECENTER_1F ; 3 + dw Ecruteak_Map_Name4 ; map_const ECRUTEAK_LUGIA_SPEECH_HOUSE ; 4 + dw Ecruteak_Map_Name5 ; map_const DANCE_THEATRE ; 5 + dw Ecruteak_Map_Name6 ; map_const ECRUTEAK_MART ; 6 + dw Ecruteak_Map_Name7 ; map_const ECRUTEAK_GYM ; 7 + dw Ecruteak_Map_Name8 ; map_const ECRUTEAK_ITEMFINDER_HOUSE ; 8 + dw Ecruteak_Map_Name9 ; map_const ECRUTEAK_CITY, 20, 18 ; 9 + assert_table_length NUM_ECRUTEAK_MAPS + +Blackthorn_Map_Names: ;newgroup BLACKTHORN + table_width 2, Blackthorn_Map_Names ; 5 + dw Blackthorn_Map_Name1 ; map_const BLACKTHORN_GYM_1F ; 1 + dw Blackthorn_Map_Name2 ; map_const BLACKTHORN_GYM_2F ; 2 + dw Blackthorn_Map_Name3 ; map_const BLACKTHORN_DRAGON_SPEECH_HOUSE ; 3 + dw Blackthorn_Map_Name4 ; map_const BLACKTHORN_EMYS_HOUSE ; 4 + dw Blackthorn_Map_Name5 ; map_const BLACKTHORN_MART ; 5 + dw Blackthorn_Map_Name6 ; map_const BLACKTHORN_POKECENTER_1F ; 6 + dw Blackthorn_Map_Name7 ; map_const MOVE_DELETERS_HOUSE ; 7 + dw Blackthorn_Map_Name8 ; map_const ROUTE_45, 10, 45 ; 8 + dw Blackthorn_Map_Name9 ; map_const ROUTE_46, 10, 18 ; 9 + dw Blackthorn_Map_Name10 ; map_const BLACKTHORN_CITY, 20, 18 ; 10 + assert_table_length NUM_BLACKTHORN_MAPS + +Cinnabar_Map_Names: ;newgroup CINNABAR + table_width 2, Cinnabar_Map_Names ; 6 + dw Cinnabar_Map_Name1 ; map_const CINNABAR_POKECENTER_1F ; 1 + dw Cinnabar_Map_Name2 ; map_const CINNABAR_POKECENTER_2F_BETA ; 2 + dw Cinnabar_Map_Name3 ; map_const ROUTE_19_FUCHSIA_GATE ; 3 + dw Cinnabar_Map_Name4 ; map_const SEAFOAM_GYM ; 4 + dw Cinnabar_Map_Name5 ; map_const ROUTE_19, 10, 18 ; 5 + dw Cinnabar_Map_Name6 ; map_const ROUTE_20, 30, 9 ; 6 + dw Cinnabar_Map_Name7 ; map_const ROUTE_21, 10, 18 ; 7 + dw Cinnabar_Map_Name8 ; map_const CINNABAR_ISLAND, 10, 9 ; 8 + assert_table_length NUM_CINNABAR_MAPS + +Cerulean_Map_Names: ;newgroup CERULEAN + table_width 2, Cerulean_Map_Names ; 7 + dw Cerulean_Map_Name1 ; map_const CERULEAN_GYM_BADGE_SPEECH_HOUSE ; 1 + dw Cerulean_Map_Name2 ; map_const CERULEAN_POLICE_STATION ; 2 + dw Cerulean_Map_Name3 ; map_const CERULEAN_TRADE_SPEECH_HOUSE ; 3 + dw Cerulean_Map_Name4 ; map_const CERULEAN_POKECENTER_1F ; 4 + dw Cerulean_Map_Name5 ; map_const CERULEAN_POKECENTER_2F_BETA ; 5 + dw Cerulean_Map_Name6 ; map_const CERULEAN_GYM ; 6 + dw Cerulean_Map_Name7 ; map_const CERULEAN_MART ; 7 + dw Cerulean_Map_Name8 ; map_const ROUTE_10_POKECENTER_1F ; 8 + dw Cerulean_Map_Name9 ; map_const ROUTE_10_POKECENTER_2F_BETA ; 9 + dw Cerulean_Map_Name10 ; map_const POWER_PLANT, 10, 9 ; 10 + dw Cerulean_Map_Name11 ; map_const BILLS_HOUSE ; 11 + dw Cerulean_Map_Name12 ; map_const ROUTE_4, 20, 9 ; 12 + dw Cerulean_Map_Name13 ; map_const ROUTE_9, 30, 9 ; 13 + dw Cerulean_Map_Name14 ; map_const ROUTE_10_NORTH, 10, 9 ; 14 + dw Cerulean_Map_Name15 ; map_const ROUTE_24, 10, 9 ; 15 + dw Cerulean_Map_Name16 ; map_const ROUTE_25, 30, 9 ; 16 + dw Cerulean_Map_Name17 ; map_const CERULEAN_CITY, 20, 18 ; 17 + assert_table_length NUM_CERULEAN_MAPS + +Azalea_Map_Names: ;newgroup AZALEA + table_width 2, Azalea_Map_Names ; 8 + dw Azalea_Map_Name1 ; map_const AZALEA_POKECENTER_1F ; 1 + dw Azalea_Map_Name2 ; map_const CHARCOAL_KILN ; 2 + dw Azalea_Map_Name3 ; map_const AZALEA_MART ; 3 + dw Azalea_Map_Name4 ; map_const KURTS_HOUSE ; 4 + dw Azalea_Map_Name5 ; map_const AZALEA_GYM ; 5 + dw Azalea_Map_Name6 ; map_const ROUTE_33,; 6 + dw Azalea_Map_Name7 ; map_const AZALEA_TOWN,; 7 + assert_table_length NUM_AZALEA_MAPS + +Lake_of_Rage_Map_Names: ;newgroup LAKE_OF_RAGE + table_width 2, Lake_of_Rage_Map_Names ; 9 + dw Lake_of_Rage_Map_Name1 ; map_const LAKE_OF_RAGE_HIDDEN_POWER_HOUSE ; 1 + dw Lake_of_Rage_Map_Name2 ; map_const LAKE_OF_RAGE_MAGIKARP_HOUSE ; 2 + dw Lake_of_Rage_Map_Name3 ; map_const ROUTE_43_MAHOGANY_GATE ; 3 + dw Lake_of_Rage_Map_Name4 ; map_const ROUTE_43_GATE ; 4 + dw Lake_of_Rage_Map_Name5 ; map_const ROUTE_43, 10, 27 ; 5 + dw Lake_of_Rage_Map_Name6 ; map_const LAKE_OF_RAGE, 20, 18 ; 6 + assert_table_length NUM_LAKE_OF_RAGE_MAPS + +Violet_Map_Names: ;newgroup VIOLET + table_width 2, Violet_Map_Names ; 10 + dw Violet_Map_Name1 ; map_const ROUTE_32,; 1 + dw Violet_Map_Name2 ; map_const ROUTE_35,; 2 + dw Violet_Map_Name3 ; map_const ROUTE_36,; 3 + dw Violet_Map_Name4 ; map_const ROUTE_37,; 4 + dw Violet_Map_Name5 ; map_const VIOLET_CITY ; 5 + dw Violet_Map_Name6 ; map_const VIOLET_MART ; 6 + dw Violet_Map_Name7 ; map_const VIOLET_GYM ; 7 + dw Violet_Map_Name8 ; map_const EARLS_POKEMON_ACADEMY ; 8 + dw Violet_Map_Name9 ; map_const VIOLET_NICKNAME_SPEECH_HOUSE ; 9 + dw Violet_Map_Name10 ; map_const VIOLET_POKECENTER_1F ; 10 + dw Violet_Map_Name11 ; map_const VIOLET_KYLES_HOUSE ; 11 + dw Violet_Map_Name12 ; map_const ROUTE_32_RUINS_OF_ALPH_GATE ; 12 + dw Violet_Map_Name13 ; map_const ROUTE_32_POKECENTER_1F ; 13 + dw Violet_Map_Name14 ; map_const ROUTE_35_GOLDENROD_GATE ; 14 + dw Violet_Map_Name15 ; map_const ROUTE_35_NATIONAL_PARK_GATE ; 15 + dw Violet_Map_Name16 ; map_const ROUTE_36_RUINS_OF_ALPH_GATE ; 16 + dw Violet_Map_Name17 ; map_const ROUTE_36_NATIONAL_PARK_GATE ; 17 + assert_table_length NUM_VIOLET_MAPS + +Goldenrod_Map_Names: ;newgroup GOLDENROD + table_width 2, Goldenrod_Map_Names ; 11 + dw Goldenrod_Map_Name1 ; map_const ROUTE_34, 10, 27 ; 1 + dw Goldenrod_Map_Name2 ; map_const GOLDENROD_CITY,; 2 + dw Goldenrod_Map_Name3 ; map_const GOLDENROD_GYM, 10, 9 ; 3 + dw Goldenrod_Map_Name4 ; map_const GOLDENROD_BIKE_SHOP ; 4 + dw Goldenrod_Map_Name5 ; map_const GOLDENROD_HAPPINESS_RATER ; 5 + dw Goldenrod_Map_Name6 ; map_const BILLS_FAMILYS_HOUSE ; 6 + dw Goldenrod_Map_Name7 ; map_const GOLDENROD_MAGNET_TRAIN_STATION, 10, 9 ; 7 + dw Goldenrod_Map_Name8 ; map_const GOLDENROD_FLOWER_SHOP ; 8 + dw Goldenrod_Map_Name9 ; map_const GOLDENROD_PP_SPEECH_HOUSE ; 9 + dw Goldenrod_Map_Name10 ; map_const GOLDENROD_NAME_RATER ; 10 + dw Goldenrod_Map_Name11 ; map_const GOLDENROD_DEPT_STORE_1F ; 11 + dw Goldenrod_Map_Name12 ; map_const GOLDENROD_DEPT_STORE_2F ; 12 + dw Goldenrod_Map_Name13 ; map_const GOLDENROD_DEPT_STORE_3F ; 13 + dw Goldenrod_Map_Name14 ; map_const GOLDENROD_DEPT_STORE_4F ; 14 + dw Goldenrod_Map_Name15 ; map_const GOLDENROD_DEPT_STORE_5F ; 15 + dw Goldenrod_Map_Name16 ; map_const GOLDENROD_DEPT_STORE_6F ; 16 + dw Goldenrod_Map_Name17 ; map_const GOLDENROD_DEPT_STORE_ELEVATOR ; 17 + dw Goldenrod_Map_Name18 ; map_const GOLDENROD_DEPT_STORE_ROOF ; 18 + dw Goldenrod_Map_Name19 ; map_const GOLDENROD_GAME_CORNER, 10, 7 ; 19 + dw Goldenrod_Map_Name20 ; map_const GOLDENROD_POKECENTER_1F ; 20 + dw Goldenrod_Map_Name21; map_const POKECOM_CENTER_ADMIN_OFFICE_MOBILE, 16, 16 ; 21 + dw Goldenrod_Map_Name22 ; map_const ILEX_FOREST_AZALEA_GATE ; 22 + dw Goldenrod_Map_Name23 ; map_const ROUTE_34_ILEX_FOREST_GATE ; 23 + dw Goldenrod_Map_Name24 ; map_const DAY_CARE ; 24 + assert_table_length NUM_GOLDENROD_MAPS + +Vermilion_Map_Names: ;newgroup VERMILION + table_width 2, Vermilion_Map_Names ; 12 + dw Vermilion_Map_Name1 ; map_const ROUTE_6, 10, 9 ; 1 + dw Vermilion_Map_Name2 ; map_const ROUTE_11, 20, 9 ; 2 + dw Vermilion_Map_Name3 ; map_const VERMILION_CITY, 20, 18 ; 3 + dw Vermilion_Map_Name4 ; map_const VERMILION_FISHING_SPEECH_HOUSE ; 4 + dw Vermilion_Map_Name5 ; map_const VERMILION_POKECENTER_1F ; 5 + dw Vermilion_Map_Name6 ; map_const VERMILION_POKECENTER_2F_BETA ; 6 + dw Vermilion_Map_Name7 ; map_const POKEMON_FAN_CLUB ; 7 + dw Vermilion_Map_Name8 ; map_const VERMILION_MAGNET_TRAIN_SPEECH_HOUSE ; 8 + dw Vermilion_Map_Name9 ; map_const VERMILION_MART ; 9 + dw Vermilion_Map_Name10 ; map_const VERMILION_DIGLETTS_CAVE_SPEECH_HOUSE ; 10 + dw Vermilion_Map_Name11 ; map_const VERMILION_GYM ; 11 + dw Vermilion_Map_Name12 ; map_const ROUTE_6_SAFFRON_GATE ; 12 + dw Vermilion_Map_Name13 ; map_const ROUTE_6_UNDERGROUND_PATH_ENTRANCE ; 13 + assert_table_length NUM_VERMILION_MAPS + +Pallet_Map_Names: ;newgroup PALLET + table_width 2, Pallet_Map_Names ; 13 + dw Pallet_Map_Name1 ; map_const ROUTE_1, 10, 18 ; 1 + dw Pallet_Map_Name2 ; map_const PALLET_TOWN, 10, 9 ; 2 + dw Pallet_Map_Name3 ; map_const REDS_HOUSE_1F ; 3 + dw Pallet_Map_Name4 ; map_const REDS_HOUSE_2F ; 4 + dw Pallet_Map_Name5 ; map_const BLUES_HOUSE ; 5 + dw Pallet_Map_Name6 ; map_const OAKS_LAB ; 6 + assert_table_length NUM_PALLET_MAPS + +Pewter_Map_Names: ;newgroup PEWTER + table_width 2, Pewter_Map_Names ; 14 + dw Pewter_Map_Name1 ; map_const ROUTE_3, 30, 9 ; 1 + dw Pewter_Map_Name2 ; map_const PEWTER_CITY, 20, 18 ; 2 + dw Pewter_Map_Name3 ; map_const PEWTER_NIDORAN_SPEECH_HOUSE ; 3 + dw Pewter_Map_Name4 ; map_const PEWTER_GYM ; 4 + dw Pewter_Map_Name5 ; map_const PEWTER_MART ; 5 + dw Pewter_Map_Name6 ; map_const PEWTER_POKECENTER_1F ; 6 + dw Pewter_Map_Name7 ; map_const PEWTER_POKECENTER_2F_BETA ; 7 + dw Pewter_Map_Name8 ; map_const PEWTER_SNOOZE_SPEECH_HOUSE ; 8 + assert_table_length NUM_PEWTER_MAPS + +Fast_Ship_Map_Names: ;newgroup FAST_SHIP + table_width 2, Fast_Ship_Map_Names ; 15 + dw Fast_Ship_Map_Name1 ; map_const OLIVINE_PORT, 10, 18 ; 1 + dw Fast_Ship_Map_Name2 ; map_const VERMILION_PORT, 10, 18 ; 2 + dw Fast_Ship_Map_Name3 ; map_const FAST_SHIP_1F, 16, 9 ; 3 + dw Fast_Ship_Map_Name4 ; map_const FAST_SHIP_CABINS_NNW_NNE_NE, 4, 16 ; 4 + dw Fast_Ship_Map_Name5 ; map_const FAST_SHIP_CABINS_SW_SSW_NW, 4, 16 ; 5 + dw Fast_Ship_Map_Name6 ; map_const FAST_SHIP_CABINS_SE_SSE_CAPTAINS_CABIN, 5, 17 ; 6 + dw Fast_Ship_Map_Name7 ; map_const FAST_SHIP_B1F, 16, 8 ; 7 + dw Fast_Ship_Map_Name8 ; map_const OLIVINE_PORT_PASSAGE, 10, 9 ; 8 + dw Fast_Ship_Map_Name9 ; map_const VERMILION_PORT_PASSAGE, 10, 9 ; 9 + dw Fast_Ship_Map_Name10 ; map_const MOUNT_MOON_SQUARE, 15, 9 ; 10 + dw Fast_Ship_Map_Name11 ; map_const MOUNT_MOON_GIFT_SHOP ; 11 + dw Fast_Ship_Map_Name12 ; map_const TIN_TOWER_ROOF, 10, 9 ; 12 + assert_table_length NUM_FAST_SHIP_MAPS + +Indigo_Map_Names: ;newgroup INDIGO + table_width 2, Indigo_Map_Names ; 16 + dw Indigo_Map_Name1 ; map_const ROUTE_23, 10, 9 ; 1 + dw Indigo_Map_Name2 ; map_const INDIGO_PLATEAU_POKECENTER_1F ; 2 + dw Indigo_Map_Name3 ; map_const WILLS_ROOM ; 3 + dw Indigo_Map_Name4 ; map_const KOGAS_ROOM ; 4 + dw Indigo_Map_Name5 ; map_const BRUNOS_ROOM ; 5 + dw Indigo_Map_Name6 ; map_const KARENS_ROOM ; 6 + dw Indigo_Map_Name7 ; map_const LANCES_ROOM, 5, 12 ; 7 + dw Indigo_Map_Name8 ; map_const HALL_OF_FAME ; 8 + assert_table_length NUM_INDIGO_MAPS + +Fuchsia_Map_Names: ;newgroup FUCHSIA + table_width 2, Fuchsia_Map_Names ; 17 + dw Fuchsia_Map_Name1 ; map_const ROUTE_13, 30, 9 ; 1 + dw Fuchsia_Map_Name2 ; map_const ROUTE_14, 10, 18 ; 2 + dw Fuchsia_Map_Name3 ; map_const ROUTE_15, 20, 9 ; 3 + dw Fuchsia_Map_Name4 ; map_const ROUTE_18, 10, 9 ; 4 + dw Fuchsia_Map_Name5 ; map_const FUCHSIA_CITY, 20, 18 ; 5 + dw Fuchsia_Map_Name6 ; map_const FUCHSIA_MART ; 6 + dw Fuchsia_Map_Name7 ; map_const SAFARI_ZONE_MAIN_OFFICE ; 7 + dw Fuchsia_Map_Name8 ; map_const FUCHSIA_GYM ; 8 + dw Fuchsia_Map_Name9 ; map_const BILLS_BROTHERS_HOUSE ; 9 + dw Fuchsia_Map_Name10 ; map_const FUCHSIA_POKECENTER_1F ; 10 + dw Fuchsia_Map_Name11 ; map_const FUCHSIA_POKECENTER_2F_BETA ; 11 + dw Fuchsia_Map_Name12 ; map_const SAFARI_ZONE_WARDENS_HOME ; 12 + dw Fuchsia_Map_Name13 ; map_const ROUTE_15_FUCHSIA_GATE ; 13 + assert_table_length NUM_FUCHSIA_MAPS + +Lavender_Map_Names: ;newgroup LAVENDER + table_width 2, Lavender_Map_Names ; 18 + dw Lavender_Map_Name1 ; map_const ROUTE_8, 20, 9 ; 1 + dw Lavender_Map_Name2 ; map_const ROUTE_12, 10, 27 ; 2 + dw Lavender_Map_Name3 ; map_const ROUTE_10_SOUTH, 10, 9 ; 3 + dw Lavender_Map_Name4 ; map_const LAVENDER_TOWN, 10, 9 ; 4 + dw Lavender_Map_Name5 ; map_const LAVENDER_POKECENTER_1F ; 5 + dw Lavender_Map_Name6 ; map_const LAVENDER_POKECENTER_2F_BETA ; 6 + dw Lavender_Map_Name7 ; map_const MR_FUJIS_HOUSE ; 7 + dw Lavender_Map_Name8 ; map_const LAVENDER_SPEECH_HOUSE ; 8 + dw Lavender_Map_Name9 ; map_const LAVENDER_NAME_RATER ; 9 + dw Lavender_Map_Name10 ; map_const LAVENDER_MART ; 10 + dw Lavender_Map_Name11 ; map_const SOUL_HOUSE ; 11 + dw Lavender_Map_Name12 ; map_const LAV_RADIO_TOWER_1F, 10, 4 ; 12 + dw Lavender_Map_Name13 ; map_const ROUTE_8_SAFFRON_GATE ; 13 + dw Lavender_Map_Name14 ; map_const ROUTE_12_SUPER_ROD_HOUSE ; 14 + assert_table_length NUM_LAVENDER_MAPS + +Silver_Map_Names: ;newgroup SILVER + table_width 2, Silver_Map_Names ; 19 + dw Silver_Map_Name1 ; map_const ROUTE_28, 20, 9 ; 1 + dw Silver_Map_Name2 ; map_const SILVER_CAVE_OUTSIDE, 20, 18 ; 2 + dw Silver_Map_Name3 ; map_const SILVER_CAVE_POKECENTER_1F ; 3 + dw Silver_Map_Name4 ; map_const ROUTE_28_STEEL_WING_HOUSE ; 4 + assert_table_length NUM_SILVER_MAPS + +Cable_Club_Map_Names: ;newgroup CABLE_CLUB + table_width 2, Cable_Club_Map_Names ; 20 + dw Cable_Club_Map_Name1 ; map_const POKECENTER_2F ; 1 + dw Cable_Club_Map_Name2 ; map_const TRADE_CENTER ; 2 + dw Cable_Club_Map_Name3 ; map_const COLOSSEUM ; 3 + dw Cable_Club_Map_Name4 ; map_const TIME_CAPSULE ; 4 + dw Cable_Club_Map_Name5 ; map_const MOBILE_TRADE_ROOM ; 5 + dw Cable_Club_Map_Name6 ; map_const MOBILE_BATTLE_ROOM ; 6 + assert_table_length NUM_CABLE_CLUB_MAPS + +Celadon_Map_Names: ;newgroup CELADON + table_width 2, Celadon_Map_Names ; 21 + dw Celadon_Map_Name1 ; map_const ROUTE_7, 10, 9 ; 1 + dw Celadon_Map_Name2 ; map_const ROUTE_16, 10, 9 ; 2 + dw Celadon_Map_Name3 ; map_const ROUTE_17, 10, 45 ; 3 + dw Celadon_Map_Name4 ; map_const CELADON_CITY, 20, 18 ; 4 + dw Celadon_Map_Name5 ; map_const CELADON_DEPT_STORE_1F ; 5 + dw Celadon_Map_Name6 ; map_const CELADON_DEPT_STORE_2F ; 6 + dw Celadon_Map_Name7 ; map_const CELADON_DEPT_STORE_3F ; 7 + dw Celadon_Map_Name8 ; map_const CELADON_DEPT_STORE_4F ; 8 + dw Celadon_Map_Name9 ; map_const CELADON_DEPT_STORE_5F ; 9 + dw Celadon_Map_Name10 ; map_const CELADON_DEPT_STORE_6F ; 10 + dw Celadon_Map_Name11 ; map_const CELADON_DEPT_STORE_ELEVATOR ; 11 + dw Celadon_Map_Name12 ; map_const CELADON_MANSION_1F ; 12 + dw Celadon_Map_Name13 ; map_const CELADON_MANSION_2F ; 13 + dw Celadon_Map_Name14 ; map_const CELADON_MANSION_3F ; 14 + dw Celadon_Map_Name15 ; map_const CELADON_MANSION_ROOF ; 15 + dw Celadon_Map_Name16 ; map_const CELADON_MANSION_ROOF_HOUSE ; 16 + dw Celadon_Map_Name17 ; map_const CELADON_POKECENTER_1F ; 17 + dw Celadon_Map_Name18 ; map_const CELADON_POKECENTER_2F_BETA ; 18 + dw Celadon_Map_Name19 ; map_const CELADON_GAME_CORNER, 10, 7 ; 19 + dw Celadon_Map_Name20 ; map_const CELADON_GAME_CORNER_PRIZE_ROOM ; 20 + dw Celadon_Map_Name21 ; map_const CELADON_GYM ; 21 + dw Celadon_Map_Name22 ; map_const CELADON_CAFE ; 22 + dw Celadon_Map_Name23 ; map_const ROUTE_16_FUCHSIA_SPEECH_HOUSE ; 23 + dw Celadon_Map_Name24 ; map_const ROUTE_16_GATE ; 24 + dw Celadon_Map_Name25 ; map_const ROUTE_7_SAFFRON_GATE ; 25 + dw Celadon_Map_Name26 ; map_const ROUTE_17_ROUTE_18_GATE ; 26 + assert_table_length NUM_CELADON_MAPS + +Cianwood_Map_Names: ;newgroup CIANWOOD + table_width 2, Cianwood_Map_Names ; 22 + dw Cianwood_Map_Name1 ; map_const ROUTE_40, 10, 18 ; 1 + dw Cianwood_Map_Name2 ; map_const ROUTE_41, 25, 27 ; 2 + dw Cianwood_Map_Name3 ; map_const CIANWOOD_CITY, 15, 27 ; 3 + dw Cianwood_Map_Name4 ; map_const MANIAS_HOUSE ; 4 + dw Cianwood_Map_Name5 ; map_const CIANWOOD_GYM ; 5 + dw Cianwood_Map_Name6 ; map_const CIANWOOD_POKECENTER_1F ; 6 + dw Cianwood_Map_Name7 ; map_const CIANWOOD_PHARMACY ; 7 + dw Cianwood_Map_Name8 ; map_const CIANWOOD_PHOTO_STUDIO ; 8 + dw Cianwood_Map_Name9 ; map_const CIANWOOD_LUGIA_SPEECH_HOUSE ; 9 + dw Cianwood_Map_Name10 ; map_const POKE_SEERS_HOUSE ; 10 + dw Cianwood_Map_Name11 ; map_const BATTLE_TOWER_1F ; 11 + dw Cianwood_Map_Name12 ; map_const BATTLE_TOWER_BATTLE_ROOM ; 12 + dw Cianwood_Map_Name13 ; map_const BATTLE_TOWER_ELEVATOR ; 13 + dw Cianwood_Map_Name14 ; map_const BATTLE_TOWER_HALLWAY, 11, 2 ; 14 + dw Cianwood_Map_Name15 ; map_const ROUTE_40_BATTLE_TOWER_GATE ; 15 + dw Cianwood_Map_Name16 ; map_const BATTLE_TOWER_OUTSIDE, 10, 14 ; 16 + assert_table_length NUM_CIANWOOD_MAPS + +Viridian_Map_Names: ;newgroup VIRIDIAN ; 23 + table_width 2, Viridian_Map_Names + dw Viridian_Map_Name1 ; map_const ROUTE_2, 10, 27 ; 1 + dw Viridian_Map_Name2 ; map_const ROUTE_22, 20, 9 ; 2 + dw Viridian_Map_Name3 ; map_const VIRIDIAN_CITY, 20, 18 ; 3 + dw Viridian_Map_Name4 ; map_const VIRIDIAN_GYM ; 4 + dw Viridian_Map_Name5 ; map_const VIRIDIAN_NICKNAME_SPEECH_HOUSE ; 5 + dw Viridian_Map_Name6 ; map_const TRAINER_HOUSE_1F ; 6 + dw Viridian_Map_Name7 ; map_const TRAINER_HOUSE_B1F ; 7 + dw Viridian_Map_Name8 ; map_const VIRIDIAN_MART ; 8 + dw Viridian_Map_Name9 ; map_const VIRIDIAN_POKECENTER_1F ; 9 + dw Viridian_Map_Name10 ; map_const VIRIDIAN_POKECENTER_2F_BETA ; 10 + dw Viridian_Map_Name11 ; map_const ROUTE_2_NUGGET_HOUSE ; 11 + dw Viridian_Map_Name12 ; map_const ROUTE_2_GATE ; 12 + dw Viridian_Map_Name13 ; map_const VICTORY_ROAD_GATE, 10, 9 ; 13 + assert_table_length NUM_VIRIDIAN_MAPS + + +New_Bark_Map_Names: ; newgroup NEW_BARK ; 24 + table_width 2, New_Bark_Map_Names + dw New_Bark_Map_Name1 ; map_const ROUTE_26, 10, 54 ; 1 + dw New_Bark_Map_Name2 ; map_const ROUTE_27, 40, 9 ; 2 + dw New_Bark_Map_Name3 ; map_const ROUTE_29, 30, 9 ; 3 + dw New_Bark_Map_Name4 ; map_const NEW_BARK_TOWN, 10, 9 ; 4 + dw New_Bark_Map_Name5 ; map_const ELMS_LAB ; 5 + dw New_Bark_Map_Name6 ; map_const PLAYERS_HOUSE_1F ; 6 + dw New_Bark_Map_Name7 ; map_const PLAYERS_HOUSE_2F ; 7 + dw New_Bark_Map_Name8 ; map_const PLAYERS_NEIGHBORS_HOUSE ; 8 + dw New_Bark_Map_Name9 ; map_const ELMS_HOUSE ; 9 + dw New_Bark_Map_Name10 ; map_const ROUTE_26_HEAL_HOUSE ; 10 + dw New_Bark_Map_Name11 ; map_const DAY_OF_WEEK_SIBLINGS_HOUSE ; 11 + dw New_Bark_Map_Name12 ; map_const ROUTE_27_SANDSTORM_HOUSE ; 12 + dw New_Bark_Map_Name13 ; map_const ROUTE_29_ROUTE_46_GATE ; 13 + assert_table_length NUM_NEW_BARK_MAPS + + + ; newgroup SAFFRON +Saffron_Map_Names: ; 25 + table_width 2, Saffron_Map_Names + dw Saffron_Map_Name1 ; map_const ROUTE_5, 10, 9 ; 1 + dw Saffron_Map_Name2 ; map_const SAFFRON_CITY, 20, 18 ; 2 + dw Saffron_Map_Name3 ; map_const FIGHTING_DOJO ; 3 + dw Saffron_Map_Name4 ; map_const SAFFRON_GYM, 10, 9 ; 4 + dw Saffron_Map_Name5 ; map_const SAFFRON_MART ; 5 + dw Saffron_Map_Name6 ; map_const SAFFRON_POKECENTER_1F ; 6 + dw Saffron_Map_Name7 ; map_const SAFFRON_POKECENTER_2F_BETA ; 7 + dw Saffron_Map_Name8 ; map_const MR_PSYCHICS_HOUSE ; 8 + dw Saffron_Map_Name9 ; map_const SAFFRON_MAGNET_TRAIN_STATION, 10, 9 ; 9 + dw Saffron_Map_Name10 ; map_const SILPH_CO_1F ; 10 + dw Saffron_Map_Name11 ; map_const COPYCATS_HOUSE_1F ; 11 + dw Saffron_Map_Name12 ; map_const COPYCATS_HOUSE_2F ; 12 + dw Saffron_Map_Name13 ; map_const ROUTE_5_UNDERGROUND_PATH_ENTRANCE ; 13 + dw Saffron_Map_Name14 ; map_const ROUTE_5_SAFFRON_GATE ; 14 + dw Saffron_Map_Name15 ; map_const ROUTE_5_CLEANSE_TAG_HOUSE ; 15 + assert_table_length NUM_SAFFRON_MAPS + + ; CHERRYGROVE, 26 +Cherrygrove_Map_Names: + table_width 2, Cherrygrove_Map_Names + dw Cherrygrove_Map_Name1 ; map_const ROUTE_30 ; 1 + dw Cherrygrove_Map_Name2 ; map_const ROUTE_31 ; 2 + dw Cherrygrove_Map_Name3 ; map_const CHERRYGROVE_CITY ; 3 + dw Cherrygrove_Map_Name4 ; map_const CHERRYGROVE_MART ; 4 + dw Cherrygrove_Map_Name5 ; map_const CHERRYGROVE_POKECENTER_1F ; 5 + dw Cherrygrove_Map_Name6 ; map_const CHERRYGROVE_GYM_SPEECH_HOUSE ; 6 + dw Cherrygrove_Map_Name7 ; map_const GUIDE_GENTS_HOUSE ; 7 + dw Cherrygrove_Map_Name8 ; map_const CHERRYGROVE_EVOLUTION_SPEECH_HOUSE ; 8 + dw Cherrygrove_Map_Name9 ; map_const ROUTE_30_BERRY_HOUSE ; 9 + dw Cherrygrove_Map_Name10 ; map_const MR_POKEMONS_HOUSE ; 10 + dw Cherrygrove_Map_Name11 ; map_const ROUTE_31_VIOLET_GATE ; 11 + assert_table_length NUM_CHERRYGROVE_MAPS + +; MAX LENGTH: 17 +Olivine_Map_Name1: ; map_const OLIVINE_POKECENTER_1F ; 1 + db "OLIVINE¯", $E1, $E2, " CENTER@" +Olivine_Map_Name2: ; map_const OLIVINE_GYM ; 2 + db "OLIVINE¯GYM@" +Olivine_Map_Name3: ; map_const OLIVINE_TIMS_HOUSE ; 3 + db "TIM'S HOUSE@" +Olivine_Map_Name4: ; map_const OLIVINE_HOUSE_BETA ; 4 + db "OLIVINE¯HOUSE@" +Olivine_Map_Name5: ; map_const OLIVINE_PUNISHMENT_SPEECH_HOUSE ; 5 + db "OLIVINE¯HOUSE 1@" +Olivine_Map_Name6: ; map_const OLIVINE_GOOD_ROD_HOUSE ; 6 + db "OLIVINE¯HOUSE 2@" +Olivine_Map_Name7: ; map_const OLIVINE_CAFE ; 7 + db "OLIVINE¯CAFE@" +Olivine_Map_Name8: ; map_const OLIVINE_MART ; 8 + db "OLIVINE ", $70, $71, "MART@" +Olivine_Map_Name9: ; map_const ROUTE_38_ECRUTEAK_GATE ; 9 + db "ROUTE 38 GATE@" +Olivine_Map_Name10: ; map_const ROUTE_39_BARN ; 10 + db "ROUTE 39 BARN@" +Olivine_Map_Name11: ; map_const ROUTE_39_FARMHOUSE ; 11 + db "ROUTE 39 HOUSE@" +Olivine_Map_Name12: ; map_const ROUTE_38, ; 12 + db "ROUTE 38@" +Olivine_Map_Name13: ; map_const ROUTE_39, ; 13 + db "ROUTE 39@" +Olivine_Map_Name14: ; map_const OLIVINE_CITY ; 14 + db "OLIVINE¯CITY@" + +Mahogany_Map_Name1: ; map_const MAHOGANY_RED_GYARADOS_SPEECH_HOUSE ; 1 + db "MAHOGANY¯HOUSE@" +Mahogany_Map_Name2: ; map_const MAHOGANY_GYM ; 2 + db "MAHOGANY¯GYM@" +Mahogany_Map_Name3: ; map_const MAHOGANY_POKECENTER_1F ; 3 + db "MAHOGANY¯PC@" +Mahogany_Map_Name4: ; map_const ROUTE_42_ECRUTEAK_GATE ; 4 + db "ROUTE 42 GATE@" +Mahogany_Map_Name5: ; map_const ROUTE_42, ; 5 + db "ROUTE 42@" +Mahogany_Map_Name6: ; map_const ROUTE_44, ; 6 + db "ROUTE 44@" +Mahogany_Map_Name7: ; map_const MAHOGANY_TOWN, ; 7 + db "MAHOGANY¯TOWN@" ; 3 +Dungeons_Map_Name1: ; map_const SPROUT_TOWER_1F, ; 1 + db "SPROUT¯TOWER 1F@" +Dungeons_Map_Name2: ; map_const SPROUT_TOWER_2F, ; 2 + db "SPROUT¯TOWER 2F@" +Dungeons_Map_Name3: ; map_const SPROUT_TOWER_3F, ; 3 + db "SPROUT¯TOWER 3F@" +Dungeons_Map_Name4: ; map_const TIN_TOWER_1F, ; 4 + db "TIN TOWER 1F@" +Dungeons_Map_Name5: ; map_const TIN_TOWER_2F,; 5 + db "TIN TOWER 2F@" +Dungeons_Map_Name6: ; map_const TIN_TOWER_3F,; 6 + db "TIN TOWER 3F@" +Dungeons_Map_Name7: ; map_const TIN_TOWER_4F,; 7 + db "TIN TOWER 4F@" +Dungeons_Map_Name8: ; map_const TIN_TOWER_5F, ; 8 + db "TIN TOWER 5F@" +Dungeons_Map_Name9: ; map_const TIN_TOWER_6F, ; 9 + db "TIN TOWER 6F@" +Dungeons_Map_Name10: ; map_const TIN_TOWER_7F, ; 10 + db "TIN TOWER 7F@" +Dungeons_Map_Name11: ; map_const TIN_TOWER_8F,; 11 + db "TIN TOWER 8F@" +Dungeons_Map_Name12: ; map_const TIN_TOWER_9F, ; 12 + db "TIN TOWER 9F@" +Dungeons_Map_Name13: ; map_const BURNED_TOWER_1F, ; 13 + db "BURNED¯TOWER 1F@" +Dungeons_Map_Name14: ; map_const BURNED_TOWER_B1F, ; 14 + db "BURNED¯TOWER B1F@" +Dungeons_Map_Name15: ; map_const NATIONAL_PARK, ; 15 + db "NATIONAL¯PARK@" +Dungeons_Map_Name16: ; map_const NATIONAL_PARK_BUG_CONTEST,; 16 + db "BUG CONTEST@" +Dungeons_Map_Name17: ; map_const RADIO_TOWER_1F ; 17 + db "RADIO TOWER 1F@" +Dungeons_Map_Name18: ; map_const RADIO_TOWER_2F ; 18 + db "RADIO TOWER 2F@" +Dungeons_Map_Name19: ; map_const RADIO_TOWER_3F ; 19 + db "RADIO TOWER 3F@" +Dungeons_Map_Name20: ; map_const RADIO_TOWER_4F ; 20 + db "RADIO TOWER 4F@" +Dungeons_Map_Name21: ; map_const RADIO_TOWER_5F ; 21 + db "RADIO TOWER 5F@" +Dungeons_Map_Name22: ; map_const RUINS_OF_ALPH_OUTSIDE, ; 22 + db "RUINS OF ALPH@" +Dungeons_Map_Name23: ; map_const RUINS_OF_ALPH_HO_OH_CHAMBER ; 23 + db "HO¯OH CHAMBER@" +Dungeons_Map_Name24: ; map_const RUINS_OF_ALPH_KABUTO_CHAMBER ; 24 + db "KABUTO CHAMBER@" +Dungeons_Map_Name25: ; map_const RUINS_OF_ALPH_OMANYTE_CHAMBER ; 25 + db "OMANYTE CHAMBER@" +Dungeons_Map_Name26: ; map_const RUINS_OF_ALPH_AERODACTYL_CHAMBER ; 26 + db "AERO CHAMBER@" +Dungeons_Map_Name27: ; map_const RUINS_OF_ALPH_INNER_CHAMBE ; 27 + db "RUINS CHAMBER@" +Dungeons_Map_Name28: ; map_const RUINS_OF_ALPH_RESEARCH_CENTER ; 28 + db "RUINS LAB@" +Dungeons_Map_Name29: ; map_const RUINS_OF_ALPH_HO_OH_ITEM_ROOM ; 29 + db "HO¯OH PRIZE ROOM@" +Dungeons_Map_Name30: ; map_const RUINS_OF_ALPH_KABUTO_ITEM_ROOM ; 30 + db "KABUTO PRIZE ROOM@" +Dungeons_Map_Name31: ; map_const RUINS_OF_ALPH_OMANYTE_ITEM_ROOM ; 31 + db "OMANYTE PRIZEROOM@" +Dungeons_Map_Name32: ; map_const RUINS_OF_ALPH_AERODACTYL_ITEM_ROOM ; 32 + db "AERO PRIZE ROOM@" +Dungeons_Map_Name33: ; map_const RUINS_OF_ALPH_HO_OH_WORD_ROOM,; 33 + db "HO¯OH WORD ROOM@" +Dungeons_Map_Name34: ; map_const RUINS_OF_ALPH_KABUTO_WORD_ROOM,; 34 + db "KABUTO WORD ROOM@" +Dungeons_Map_Name35: ; map_const RUINS_OF_ALPH_OMANYTE_WORD_ROOM,; 35 + db "OMANYTE WORD ROOM@" +Dungeons_Map_Name36: ; map_const RUINS_OF_ALPH_AERODACTYL_WORD_ROOM,; 36 + db "AERO WORD ROOM@" +Dungeons_Map_Name37: ; map_const UNION_CAVE_1F,; 37 + db "UNION CAVE 1F@" +Dungeons_Map_Name38: ; map_const UNION_CAVE_B1F,; 38 + db "UNION CAVE B1F@" +Dungeons_Map_Name39: ; map_const UNION_CAVE_B2F,; 39 + db "UNION CAVE B2F@" +Dungeons_Map_Name40: ; map_const SLOWPOKE_WELL_B1F,; 40 + db "SLOWPOKEWELL B1@" +Dungeons_Map_Name41: ; map_const SLOWPOKE_WELL_B2F,; 41 + db "SLOWPOKEWELL B2@" +Dungeons_Map_Name42: ; map_const OLIVINE_LIGHTHOUSE_1F,; 42 + db "LIGHTHOUSE 1F@" +Dungeons_Map_Name43: ; map_const OLIVINE_LIGHTHOUSE_2F,; 43 + db "LIGHTHOUSE 2F@" +Dungeons_Map_Name44: ; map_const OLIVINE_LIGHTHOUSE_3F,; 44 + db "LIGHTHOUSE 3F@" +Dungeons_Map_Name45: ; map_const OLIVINE_LIGHTHOUSE_4F,; 45 + db "LIGHTHOUSE 4F@" +Dungeons_Map_Name46: ; map_const OLIVINE_LIGHTHOUSE_5F,; 46 + db "LIGHTHOUSE 5F@" +Dungeons_Map_Name47: ; map_const OLIVINE_LIGHTHOUSE_6F,; 47 + db "LIGHTHOUSE 6F@" +Dungeons_Map_Name48: ; map_const MAHOGANY_MART_1F ; 48 + db "MAHOGANY ", $70, $71, "MART@" +Dungeons_Map_Name49: ; map_const TEAM_ROCKET_BASE_B1F,; 49 + db "ROCKET BASE B1F@" +Dungeons_Map_Name50: ; map_const TEAM_ROCKET_BASE_B2F,; 50 + db "ROCKET BASE B2F@" +Dungeons_Map_Name51: ; map_const TEAM_ROCKET_BASE_B3F,; 51 + db "ROCKET BASE B3F@" +Dungeons_Map_Name52: ; map_const ILEX_FOREST,; 52 + db "ILEX FOREST@" +Dungeons_Map_Name53: ; map_const GOLDENROD_UNDERGROUND,; 53 + db "GOLD. UNDERGROUND@" +Dungeons_Map_Name54: ; map_const GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES,; 54 + db "GOLD. SWITCH ROOM@" +Dungeons_Map_Name55: ; map_const GOLDENROD_DEPT_STORE_B1F,; 55 + db "GOLD. DEPT B1F@" +Dungeons_Map_Name56: ; map_const GOLDENROD_UNDERGROUND_WAREHOUSE,; 56 + db "GOLD. DEPT B1F@" +Dungeons_Map_Name57: ; map_const MOUNT_MORTAR_1F_OUTSIDE,; 57 + db "MT. MORTAR@" +Dungeons_Map_Name58: ; map_const MOUNT_MORTAR_1F_INSIDE,; 58 + db "MT. MORTAR 1F@" +Dungeons_Map_Name59: ; map_const MOUNT_MORTAR_2F_INSIDE,; 59 + db "MT. MORTAR 2F@" +Dungeons_Map_Name60: ; map_const MOUNT_MORTAR_B1F,; 60 + db "MT. MORTAR B1F@" +Dungeons_Map_Name61: ; map_const ICE_PATH_1F,; 61 + db "ICE PATH 1F@" +Dungeons_Map_Name62: ; map_const ICE_PATH_B1F,; 62 + db "ICE PATH B1F@" +Dungeons_Map_Name63: ; map_const ICE_PATH_B2F_MAHOGANY_SIDE,; 63 + db "ICE PATH B2F W@" +Dungeons_Map_Name64: ; map_const ICE_PATH_B2F_BLACKTHORN_SIDE ; 64 + db "ICE PATH B2F E@" +Dungeons_Map_Name65: ; map_const ICE_PATH_B3F,; 65 + db "ICE PATH B3F@" +Dungeons_Map_Name66: ; map_const WHIRL_ISLAND_NW ; 66 + db "WHIRL¯ISL NW@" +Dungeons_Map_Name67: ; map_const WHIRL_ISLAND_NE,; 67 + db "WHIRL¯ISL NE@" +Dungeons_Map_Name68: ; map_const WHIRL_ISLAND_SW,; 68 + db "WHIRL¯ISL SW@" +Dungeons_Map_Name69: ; map_const WHIRL_ISLAND_CAVE ; 69 + db "WHIRL¯ISL CAVE@" +Dungeons_Map_Name70: ; map_const WHIRL_ISLAND_SE ; 70 + db "WHIRL¯ISL SE@" +Dungeons_Map_Name71: ; map_const WHIRL_ISLAND_B1F,; 71 + db "WHIRL¯ISL B1F@" +Dungeons_Map_Name72: ; map_const WHIRL_ISLAND_B2F,; 72 + db "WHIRL¯ISL B2F@" +Dungeons_Map_Name73: ; map_const WHIRL_ISLAND_LUGIA_CHAMBER,; 73 + db "WHIRL¯ISL DEEP@" +Dungeons_Map_Name74: ; map_const SILVER_CAVE_ROOM_1,; 74 + db "SILVER CAVE R1@" +Dungeons_Map_Name75: ; map_const SILVER_CAVE_ROOM_2,; 75 + db "SILVER CAVE R2@" +Dungeons_Map_Name76: ; map_const SILVER_CAVE_ROOM_3,; 76 + db "SILVER CAVE R3@" +Dungeons_Map_Name77: ; map_const SILVER_CAVE_ITEM_ROOMS,; 77 + db "SILVER CAVE ROOM@" +Dungeons_Map_Name78: ; map_const DARK_CAVE_VIOLET_ENTRANCE,; 78 + db "DARK CAVE WEST@" +Dungeons_Map_Name79: ; map_const DARK_CAVE_BLACKTHORN_ENTRANCE,; 79 + db "DARK CAVE EAST@" +Dungeons_Map_Name80: ; map_const DRAGONS_DEN_1F ; 80 + db "DRAGONS¯DEN 1F@" +Dungeons_Map_Name81: ; map_const DRAGONS_DEN_B1F,; 81 + db "DRAGONS¯DEN B1@" +Dungeons_Map_Name82: ; map_const DRAGON_SHRINE ; 82 + db "DRAGON SHRINE@" +Dungeons_Map_Name83: ; map_const TOHJO_FALLS,; 83 + db "TOHJO FALLS@" +Dungeons_Map_Name84: ; map_const DIGLETTS_CAVE,; 84 + db "DIGLETTS¯CAVE@" +Dungeons_Map_Name85: ; map_const MOUNT_MOON,; 85 + db "MT. MOON@" +Dungeons_Map_Name86: ; map_const UNDERGROUND_PATH,; 86 + db "UNDERGROUND PATH@" +Dungeons_Map_Name87: ; map_const ROCK_TUNNEL_1F,; 87 + db "ROCK TUNNEL 1F@" +Dungeons_Map_Name88: ; map_const ROCK_TUNNEL_B1F,; 88 + db "ROCK TUNNEL B1F@" +Dungeons_Map_Name89: ; map_const SAFARI_ZONE_FUCHSIA_GATE_BETA ; 89 + db "SAFARI GATE@" +Dungeons_Map_Name90: ; map_const SAFARI_ZONE_BETA,; 90 + db "SAFARI ZONE@" +Dungeons_Map_Name91: ; map_const VICTORY_ROAD,; 4 + db "VICTORY¯ROAD@" + +Ecruteak_Map_Name1: ; map_const ECRUTEAK_TIN_TOWER_ENTRANCE,; 1 + db "TIN TOWER PATH@" +Ecruteak_Map_Name2: ; map_const WISE_TRIOS_ROOM ; 2 + db "WISE TRIO ROOM@" +Ecruteak_Map_Name3: ; map_const ECRUTEAK_POKECENTER_1F ; 3 + db "ECRUTEAK ", $E1, $E2, "CENTER@" +Ecruteak_Map_Name4: ; map_const ECRUTEAK_LUGIA_SPEECH_HOUSE ; 4 + db "ECRUTEAK¯HOUSE 1@" +Ecruteak_Map_Name5: ; map_const DANCE_THEATRE ; 5 + db "DANCE THEATER@" +Ecruteak_Map_Name6: ; map_const ECRUTEAK_MART ; 6 + db "ECRUTEAK ", $70, $71, "MART@" +Ecruteak_Map_Name7: ; map_const ECRUTEAK_GYM ; 7 + db "ECRUTEAK¯GYM@" +Ecruteak_Map_Name8: ; map_const ECRUTEAK_ITEMFINDER_HOUSE ; 8 + db "ITEMFINDER¯HOUSE@" +Ecruteak_Map_Name9: ; map_const ECRUTEAK_CITY,; 5 + db "ECRUTEAK¯CITY@" + +Blackthorn_Map_Name1: ; map_const BLACKTHORN_GYM_1F ; 1 + db "BLACKTHORN¯GYM@" +Blackthorn_Map_Name2: ; map_const BLACKTHORN_GYM_2F ; 2 + db "BLACKTHORN¯GYM B1@" +Blackthorn_Map_Name3: ; map_const BLACKTHORN_DRAGON_SPEECH_HOUSE ; 3 + db "DRAGON HOUSE@" +Blackthorn_Map_Name4: ; map_const BLACKTHORN_EMYS_HOUSE ; 4 + db "EMY'S HOUSE@" +Blackthorn_Map_Name5: ; map_const BLACKTHORN_MART ; 5 + db "BLACKTHORN ", $70, $71, "MART@" +Blackthorn_Map_Name6: ; map_const BLACKTHORN_POKECENTER_1F ; 6 + db "BLACKTHORN ", $E1, $E2, "CEN.@" +Blackthorn_Map_Name7: ; map_const MOVE_DELETERS_HOUSE ; 7 + db "MOVE DELETER@" +Blackthorn_Map_Name8: ; map_const ROUTE_45,; 8 + db "ROUTE 45@" +Blackthorn_Map_Name9: ; map_const ROUTE_46,; 9 + db "ROUTE 46@" +Blackthorn_Map_Name10: ; map_const BLACKTHORN_CITY,; 6 + db "BLACKTHORN¯CITY@" + +Cinnabar_Map_Name1: ; map_const CINNABAR_POKECENTER_1F ; 1 + db "CINNABAR ", $E1, $E2, "CENTER@" +Cinnabar_Map_Name2: ; map_const CINNABAR_POKECENTER_2F_BETA ; 2 + db "CINNABAR¯PC BETA@" +Cinnabar_Map_Name3: ; map_const ROUTE_19_FUCHSIA_GATE ; 3 + db "ROUTE 19 GATE@" +Cinnabar_Map_Name4: ; map_const SEAFOAM_GYM ; 4 + db "SEAFOAM¯GYM@" +Cinnabar_Map_Name5: ; map_const ROUTE_19, ; 5 + db "ROUTE 19@" +Cinnabar_Map_Name6: ; map_const ROUTE_20,; 6 + db "ROUTE 20@" +Cinnabar_Map_Name7: ; map_const ROUTE_21,; 7 + db "ROUTE 21@" +Cinnabar_Map_Name8: ; map_const CINNABAR_ISLAND,; 7 + db "CINNABAR¯ISLAND@" + +Cerulean_Map_Name1: ; map_const CERULEAN_GYM_BADGE_SPEECH_HOUSE ; 1 + db "CERULEAN¯HOUSE 1@" +Cerulean_Map_Name2: ; map_const CERULEAN_POLICE_STATION ; 2 + db "POLICE STATION@" +Cerulean_Map_Name3: ; map_const CERULEAN_TRADE_SPEECH_HOUSE ; 3 + db "CERULEAN¯HOUSE 2@" +Cerulean_Map_Name4: ; map_const CERULEAN_POKECENTER_1F ; 4 + db "CERULEAN ", $E1, $E2, "CENTER@" +Cerulean_Map_Name5: ; map_const CERULEAN_POKECENTER_2F_BETA ; 5 + db "CERULEAN¯PC BETA@" +Cerulean_Map_Name6: ; map_const CERULEAN_GYM ; 6 + db "CERULEAN¯GYM@" +Cerulean_Map_Name7: ; map_const CERULEAN_MART ; 7 + db "CERULEAN ", $70, $71, "MART@" +Cerulean_Map_Name8: ; map_const ROUTE_10_POKECENTER_1F ; 8 + db "ROUTE 10 ", $E1, $E2, "CENTER@" +Cerulean_Map_Name9: ; map_const ROUTE_10_POKECENTER_2F_BETA ; 9 + db "ROUTE 10 PC BETA@" +Cerulean_Map_Name10: ; map_const POWER_PLANT,; 10 + db "POWER PLANT@" +Cerulean_Map_Name11: ; map_const BILLS_HOUSE ; 11 + db "BILL'S HOUSE@" +Cerulean_Map_Name12: ; map_const ROUTE_4,; 12 + db "ROUTE 4@" +Cerulean_Map_Name13: ; map_const ROUTE_9,; 13 + db "ROUTE 9@" +Cerulean_Map_Name14: ; map_const ROUTE_10_NORTH,; 14 + db "ROUTE 10 NORTH@" +Cerulean_Map_Name15: ; map_const ROUTE_24,; 15 + db "ROUTE 24@" +Cerulean_Map_Name16: ; map_const ROUTE_25,; 16 + db "ROUTE 25@" +Cerulean_Map_Name17: ; map_const CERULEAN_CITY,; 8 + db "CERULEAN¯CITY@" + +Azalea_Map_Name1: ; map_const AZALEA_POKECENTER_1F ; 1 + db "AZALEA ", $E1, $E2, "CENTER@" +Azalea_Map_Name2: ; map_const CHARCOAL_KILN ; 2 + db "CHARCOAL KILN@" +Azalea_Map_Name3: ; map_const AZALEA_MART ; 3 + db "AZALEA ", $70, $71, "MART@" +Azalea_Map_Name4: ; map_const KURTS_HOUSE ; 4 + db "KURT'S HOUSE@" +Azalea_Map_Name5: ; map_const AZALEA_GYM ; 5 + db "AZALEA GYM@" +Azalea_Map_Name6: ; map_const ROUTE_33, ; 6 + db "ROUTE 33@" +Azalea_Map_Name7: ; map_const AZALEA_TOWN, ; 7 + db "AZALEA TOWN@" + +Lake_of_Rage_Map_Name1: ; map_const LAKE_OF_RAGE_HIDDEN_POWER_HOUSE ; 1 + db "HIDDEN¯POWER¯HS@" +Lake_of_Rage_Map_Name2: ; map_const LAKE_OF_RAGE_MAGIKARP_HOUSE ; 2 + db "MAGIKARP¯HOUSE@" +Lake_of_Rage_Map_Name3: ; map_const ROUTE_43_MAHOGANY_GATE ; 3 + db "RT 43 GATE 1@" +Lake_of_Rage_Map_Name4: ; map_const ROUTE_43_GATE ; 4 + db "RT 43 GATE 2@" +Lake_of_Rage_Map_Name5: ; map_const ROUTE_43 ; 5 + db "ROUTE 43@" +Lake_of_Rage_Map_Name6: ; map_const LAKE_OF_RAGE ; 6 + db "LAKE OF¯RAGE@" ; 10 + +Violet_Map_Name1: ; map_const ROUTE_32,; 1 + db "ROUTE 32@" +Violet_Map_Name2: ; map_const ROUTE_35,; 2 + db "ROUTE 35@" +Violet_Map_Name3: ; map_const ROUTE_36,; 3 + db "ROUTE 36@" +Violet_Map_Name4: ; map_const ROUTE_37,; 4 + db "ROUTE 37@" +Violet_Map_Name5: ; map_const VIOLET_CITY,; 5 + db "VIOLET CITY@" +Violet_Map_Name6: ; map_const VIOLET_MART ; 6 + db "VIOLET ", $70, $71, "MART@" +Violet_Map_Name7: ; map_const VIOLET_GYM ; 7 + db "VIOLET GYM@" +Violet_Map_Name8: ; map_const EARLS_POKEMON_ACADEMY ; 8 + db "EARL'S ACADEMY@" +Violet_Map_Name9: ; map_const VIOLET_NICKNAME_SPEECH_HOUSE ; 9 + db "VIOLET HOUSE 1@" +Violet_Map_Name10: ; map_const VIOLET_POKECENTER_1F ; 10 + db "VIOLET ", $E1, $E2, "CENTER@" +Violet_Map_Name11: ; map_const VIOLET_KYLES_HOUSE ; 11 + db "KYLE'S HOUSE@" +Violet_Map_Name12: ; map_const ROUTE_32_RUINS_OF_ALPH_GATE ; 12 + db "ROUTE 32 GATE 1@" +Violet_Map_Name13: ; map_const ROUTE_32_POKECENTER_1F ; 13 + db "ROUTE 32 ", $E1, $E2, "CENTER@" +Violet_Map_Name14: ; map_const ROUTE_35_GOLDENROD_GATE ; 14 + db "ROUTE 35 GATE 2@" +Violet_Map_Name15: ; map_const ROUTE_35_NATIONAL_PARK_GATE ; 15 + db "ROUTE 35 GATE 3@" +Violet_Map_Name16: ; map_const ROUTE_36_RUINS_OF_ALPH_GATE ; 16 + db "ROUTE 36 GATE 1@" +Violet_Map_Name17: ; map_const ROUTE_36_NATIONAL_PARK_GATE ; 17 ; 11 + db "ROUTE 36 GATE 2@" + +Goldenrod_Map_Name1: ; map_const ROUTE_34,; 1 + db "ROUTE 34@" +Goldenrod_Map_Name2: ; map_const GOLDENROD_CITY; 2 + db "GOLDENROD¯CITY@" +Goldenrod_Map_Name3: ; map_const GOLDENROD_GYM,; 3 + db "GOLDENROD¯GYM@" +Goldenrod_Map_Name4: ; map_const GOLDENROD_BIKE_SHOP ; 4 + db "GOLD. BIKE SHOP@" +Goldenrod_Map_Name5: ; map_const GOLDENROD_HAPPINESS_RATER ; 5 + db "HAPPINESS¯RATER@" +Goldenrod_Map_Name6: ; map_const BILLS_FAMILYS_HOUSE ; 6 + db "BILL'S FAM. HOUSE@" +Goldenrod_Map_Name7: ; map_const GOLDENROD_MAGNET_TRAIN_STATION,; 7 + db "TRAIN STATION 1@" +Goldenrod_Map_Name8: ; map_const GOLDENROD_FLOWER_SHOP ; 8 + db "FLOWER SHOP@" +Goldenrod_Map_Name9: ; map_const GOLDENROD_PP_SPEECH_HOUSE ; 9 + db "GOLDENROD HOUSE 1" +Goldenrod_Map_Name10: ; map_const GOLDENROD_NAME_RATER ; 10 + db "GOLD. NAME RATER@" +Goldenrod_Map_Name11: ; map_const GOLDENROD_DEPT_STORE_1F ; 11 + db "GOLD.DEPTSTORE 1F@" +Goldenrod_Map_Name12: ; map_const GOLDENROD_DEPT_STORE_2F ; 12 + db "GOLD.DEPTSTORE 2F@" +Goldenrod_Map_Name13: ; map_const GOLDENROD_DEPT_STORE_3F ; 13 + db "GOLD.DEPTSTORE 3F@" +Goldenrod_Map_Name14: ; map_const GOLDENROD_DEPT_STORE_4F ; 14 + db "GOLD.DEPTSTORE 4F@" +Goldenrod_Map_Name15: ; map_const GOLDENROD_DEPT_STORE_5F ; 15 + db "GOLD.DEPTSTORE 5F@" +Goldenrod_Map_Name16: ; map_const GOLDENROD_DEPT_STORE_6F ; 16 + db "GOLD.DEPTSTORE 6F@" +Goldenrod_Map_Name17: ; map_const GOLDENROD_DEPT_STORE_ELEVATOR ; 17 + db "GOLD. DEPT LIFT@" +Goldenrod_Map_Name18: ; map_const GOLDENROD_DEPT_STORE_ROOF ; 18 + db "GOLD. DEPT ROOF@" +Goldenrod_Map_Name19: ; map_const GOLDENROD_GAME_CORNER,; 19 + db "GOLD. GAME CORNER@" +Goldenrod_Map_Name20: ; map_const GOLDENROD_POKECENTER_1F ; 20 + db "GOLDENROD", $E1, $E2, "CENTER@" +Goldenrod_Map_Name21: ; map_const POKECOM_CENTER_ADMIN_OFFICE_MOBILE,; 21 + db "PC COMM OFFICE@" +Goldenrod_Map_Name22: ; map_const ILEX_FOREST_AZALEA_GATE ; 22 + db "AZALEA GATE@" +Goldenrod_Map_Name23: ; map_const ROUTE_34_ILEX_FOREST_GATE ; 23 + db "ILEX GATE@" +Goldenrod_Map_Name24: ; map_const DAY_CARE ; 24 ; 12 + db "JOHTO DAYCARE@" + +Vermilion_Map_Name1: ; map_const ROUTE_6,; 1 + db "ROUTE 6@" +Vermilion_Map_Name2: ; map_const ROUTE_11,; 2 + db "ROUTE 11@" +Vermilion_Map_Name3: ; map_const VERMILION_CITY, ; 3 + db "VERMILION¯CITY@" +Vermilion_Map_Name4: ; map_const VERMILION_FISHING_SPEECH_HOUSE ; 4 + db "VERMILION¯HOUSE 1@" +Vermilion_Map_Name5: ; map_const VERMILION_POKECENTER_1F ; 5 + db "VERMILION ", $E1, $E2, "CENT.@" +Vermilion_Map_Name6: ; map_const VERMILION_POKECENTER_2F_BETA ; 6 + db "VERMILION¯PC BETA@" +Vermilion_Map_Name7: ; map_const POKEMON_FAN_CLUB ; 7 + db "VERMILION¯FANCLUB@" +Vermilion_Map_Name8: ; map_const VERMILION_MAGNET_TRAIN_SPEECH_HOUSE ; 8 + db "VERMILION¯HOUSE 2@" +Vermilion_Map_Name9: ; map_const VERMILION_MART ; 9 + db "VERMILION ", $70, $71, "MART@" +Vermilion_Map_Name10: ; map_const VERMILION_DIGLETTS_CAVE_SPEECH_HOUSE ; 10 + db "VERMILION¯HOUSE 3@" +Vermilion_Map_Name11: ; map_const VERMILION_GYM ; 11 + db "VERMILION¯GYM@" +Vermilion_Map_Name12: ; map_const ROUTE_6_SAFFRON_GATE ; 12 + db "ROUTE 6 GATE@" +Vermilion_Map_Name13: ; map_const ROUTE_6_UNDERGROUND_PATH_ENTRANCE ; 13 + db "ROUTE 6 UNDER.@" ; 13 + +Pallet_Map_Name1: ; map_const ROUTE_1,; 1 + db "ROUTE 1@" +Pallet_Map_Name2: ; map_const PALLET_TOWN,; 2 + db "PALLET TOWN@" +Pallet_Map_Name3: ; map_const REDS_HOUSE_1F ; 3 + db "RED'S HOUSE 1F@" +Pallet_Map_Name4: ; map_const REDS_HOUSE_2F ; 4 + db "RED'S HOUSE 2F@" +Pallet_Map_Name5: ; map_const BLUES_HOUSE ; 5 + db "BLUE'S HOUSE@" +Pallet_Map_Name6: ; map_const OAKS_LAB ; 6 ; 14 + db "OAK'S LAB@" + +Pewter_Map_Name1: ; map_const ROUTE_3,; 1 + db "ROUTE 3@" +Pewter_Map_Name2: ; map_const PEWTER_CITY,; 2 + db "PEWTER CITY@" +Pewter_Map_Name3: ; map_const PEWTER_NIDORAN_SPEECH_HOUSE ; 3 + db "PEWTER HOUSE 1@" +Pewter_Map_Name4: ; map_const PEWTER_GYM ; 4 + db "PEWTER GYM@" +Pewter_Map_Name5: ; map_const PEWTER_MART ; 5 + db "PEWTER ", $70, $71, "MART@" +Pewter_Map_Name6: ; map_const PEWTER_POKECENTER_1F ; 6 + db "PEWTER ", $E1, $E2, "CENTER@" +Pewter_Map_Name7: ; map_const PEWTER_POKECENTER_2F_BETA ; 7 + db "PEWTER PC BETA@" +Pewter_Map_Name8: ; map_const PEWTER_SNOOZE_SPEECH_HOUSE ; 8 + db "PEWTER HOUSE 2@" ; 15 + +Fast_Ship_Map_Name1: ; map_const OLIVINE_PORT,; 1 + db "OLIVINE MARINA@" +Fast_Ship_Map_Name2: ; map_const VERMILION_PORT,; 2 + db "VERMILION MARINA@" +Fast_Ship_Map_Name3: ; map_const FAST_SHIP_1F,; 3 + db "S.S. AQUA@" +Fast_Ship_Map_Name4: ; map_const FAST_SHIP_CABINS_NNW_NNE_NE,; 4 + db "S.S. AQUA CABIN 1@" +Fast_Ship_Map_Name5: ; map_const FAST_SHIP_CABINS_SW_SSW_NW,; 5 + db "S.S. AQUA CABIN 1@" +Fast_Ship_Map_Name6: ; map_const FAST_SHIP_CABINS_SE_SSE_CAPTAINS_CABIN,; 6 + db "S.S. AQUA CPTQTRS@" +Fast_Ship_Map_Name7: ; map_const FAST_SHIP_B1F,; 7 + db "S.S. AQUA GALLEY@" +Fast_Ship_Map_Name8: ; map_const OLIVINE_PORT_PASSAGE,; 8 + db "JOHTO PORTPASSAGE@" +Fast_Ship_Map_Name9: ; map_const VERMILION_PORT_PASSAGE,; 9 + db "KANTO PORTPASSAGE@" +Fast_Ship_Map_Name10: ; map_const MOUNT_MOON_SQUARE,; 10 + db "MT. MOON SQUARE@" +Fast_Ship_Map_Name11: ; map_const MOUNT_MOON_GIFT_SHOP ; 11 + db "MT. MOON SHOP@" +Fast_Ship_Map_Name12: ; map_const TIN_TOWER_ROOF, 12 + db "TIN TOWER ROOF@" ; 16 + +Indigo_Map_Name1: ; map_const ROUTE_23,; 1 + db "ROUTE 23@" +Indigo_Map_Name2: ; map_const INDIGO_PLATEAU_POKECENTER_1F ; 2 + db "INDIGO¯PLATEAU@" +Indigo_Map_Name3: ; map_const WILLS_ROOM ; 3 + db "E4 WILL'S ROOM@" +Indigo_Map_Name4: ; map_const KOGAS_ROOM ; 4 + db "E4 KOGA'S ROOM@" +Indigo_Map_Name5: ; map_const BRUNOS_ROOM ; 5 + db "E4 BRUNO'S ROOM@" +Indigo_Map_Name6: ; map_const KARENS_ROOM ; 6 + db "E4 KAREN'S ROOM@" +Indigo_Map_Name7: ; map_const LANCES_ROOM,; 7 + db "E4 LANCE'S ROOM@" +Indigo_Map_Name8: ; map_const HALL_OF_FAME ; 8 + db "E4 HALL OF FAME@" ; 17 + +Fuchsia_Map_Name1: ; map_const ROUTE_13,; 1 + db "ROUTE 13@" +Fuchsia_Map_Name2: ; map_const ROUTE_14,; 2 + db "ROUTE 14@" +Fuchsia_Map_Name3: ; map_const ROUTE_15,; 3 + db "ROUTE 15@" +Fuchsia_Map_Name4: ; map_const ROUTE_18,; 4 + db "ROUTE 18@" +Fuchsia_Map_Name5: ; map_const FUCHSIA_CITY,; 5 + db "FUCHSIA¯CITY@" +Fuchsia_Map_Name6: ; map_const FUCHSIA_MART ; 6 + db "FUCHSIA ", $70, $71, "MART@" +Fuchsia_Map_Name7: ; map_const SAFARI_ZONE_MAIN_OFFICE ; 7 + db "SAFARI ZONE HQ@" +Fuchsia_Map_Name8: ; map_const FUCHSIA_GYM ; 8 + db "FUCHSIA¯GYM@" +Fuchsia_Map_Name9: ; map_const BILLS_BROTHERS_HOUSE ; 9 + db "BILL'S BRO HOUSE@" +Fuchsia_Map_Name10: ; map_const FUCHSIA_POKECENTER_1F ; 10 + db "FUCHSIA ", $E1, $E2, "CENTER@" +Fuchsia_Map_Name11: ; map_const FUCHSIA_POKECENTER_2F_BETA ; 11 + db "FUCHSIA¯PC BETA@" +Fuchsia_Map_Name12: ; map_const SAFARI_ZONE_WARDENS_HOME ; 12 + db "WARDEN'S HOUSE@" +Fuchsia_Map_Name13: ; map_const ROUTE_15_FUCHSIA_GATE ; 13 + db "FUCHSIA¯GATE@" + +Lavender_Map_Name1: ; map_const ROUTE_8,; 1 + db "ROUTE 8@" +Lavender_Map_Name2: ; map_const ROUTE_12,; 2 + db "ROUTE 12@" +Lavender_Map_Name3: ; map_const ROUTE_10_SOUTH,; 3 + db "ROUTE 10 S.@" +Lavender_Map_Name4: ; map_const LAVENDER_TOWN,; 4 + db "LAVENDER¯TOWN@" +Lavender_Map_Name5: ; map_const LAVENDER_POKECENTER_1F ; 5 + db "LAVENDER ", $E1, $E2, "CENTER@" +Lavender_Map_Name6: ; map_const LAVENDER_POKECENTER_2F_BETA ; 6 + db "LAVENDER¯PC BETA@" +Lavender_Map_Name7: ; map_const MR_FUJIS_HOUSE ; 7 + db "MR.FUJI'S HOUSE@" +Lavender_Map_Name8: ; map_const LAVENDER_SPEECH_HOUSE ; 8 + db "LAVENDER¯HOUSE 1@" +Lavender_Map_Name9: ; map_const LAVENDER_NAME_RATER ; 9 + db "KANTO NAME RATER@" +Lavender_Map_Name10: ; map_const LAVENDER_MART ; 10 + db "LAVENDER ", $70, $71, "MART@" +Lavender_Map_Name11: ; map_const SOUL_HOUSE ; 11 + db "SOUL HOUSE@" +Lavender_Map_Name12: ; map_const LAV_RADIO_TOWER_1F,; 12 + db "KANTO¯RADIO TOWER@" +Lavender_Map_Name13: ; map_const ROUTE_8_SAFFRON_GATE ; 13 + db "ROUTE 8 GATE@" +Lavender_Map_Name14: ; map_const ROUTE_12_SUPER_ROD_HOUSE ; 14 + db "ROUTE 12 ANGLER@" ; 19 + +Silver_Map_Name1: ; map_const ROUTE_28,; 1 + db "ROUTE 28@" +Silver_Map_Name2: ; map_const SILVER_CAVE_OUTSIDE,; 2 + db "MT. SILVER@" +Silver_Map_Name3: ; map_const SILVER_CAVE_POKECENTER_1F ; 3 + db "SILVER C.", $E1, $E2, "CENTER@" +Silver_Map_Name4: ; map_const ROUTE_28_STEEL_WING_HOUSE ; 4 + db "ROUTE 28 CABIN@" ; 20 + +Cable_Club_Map_Name1: ; map_const POKECENTER_2F ; 1 + db $E1, $E2, " CENTER 2F@" +Cable_Club_Map_Name2: ; map_const TRADE_CENTER ; 2 + db $E1, $E2, " TRADE CENTER@" +Cable_Club_Map_Name3: ; map_const COLOSSEUM ; 3 + db $E1, $E2, " COLOSSEUM@" +Cable_Club_Map_Name4: ; map_const TIME_CAPSULE ; 4 + db $E1, $E2, " TIME CAPSULE@" +Cable_Club_Map_Name5: ; map_const MOBILE_TRADE_ROOM ; 5 + db "MOBILE TRADE@" +Cable_Club_Map_Name6: ; map_const MOBILE_BATTLE_ROOM ; 6 + db "MOBILE BATTLE@" ; 21 + +Celadon_Map_Name1: ; map_const ROUTE_7,; 1 + db "ROUTE 7@" +Celadon_Map_Name2: ; map_const ROUTE_16,; 2 + db "ROUTE 16@" +Celadon_Map_Name3: ; map_const ROUTE_17, 3 + db "ROUTE 17@" +Celadon_Map_Name4: ; map_const CELADON_CITY, 4 + db "CELADON¯CITY@" +Celadon_Map_Name5: ; map_const CELADON_DEPT_STORE_1F ; 5 + db "CEL. DEPTSTORE 1F@" +Celadon_Map_Name6: ; map_const CELADON_DEPT_STORE_2F ; 6 + db "CEL. DEPTSTORE 2F@" +Celadon_Map_Name7: ; map_const CELADON_DEPT_STORE_3F ; 7 + db "CEL. DEPTSTORE 3F@" +Celadon_Map_Name8: ; map_const CELADON_DEPT_STORE_4F ; 8 + db "CEL. DEPTSTORE 4F@" +Celadon_Map_Name9: ; map_const CELADON_DEPT_STORE_5F ; 9 + db "CEL. DEPTSTORE 5F@" +Celadon_Map_Name10: ; map_const CELADON_DEPT_STORE_6F ; 10 + db "CEL. DEPTSTORE 6F@" +Celadon_Map_Name11: ; map_const CELADON_DEPT_STORE_ELEVATOR ; 11 + db "CELADON DEPT LIFT@" +Celadon_Map_Name12: ; map_const CELADON_MANSION_1F ; 12 + db "CELADON MANSION1F@" +Celadon_Map_Name13: ; map_const CELADON_MANSION_2F ; 13 + db "CELADON MANSION2F@" +Celadon_Map_Name14: ; map_const CELADON_MANSION_3F ; 14 + db "CELADON MANSION3F@" +Celadon_Map_Name15: ; map_const CELADON_MANSION_ROOF ; 15 + db "CEL. MANSION ROOF@" +Celadon_Map_Name16: ; map_const CELADON_MANSION_ROOF_HOUSE ; 16 + db "CELADON MANSION4F@" +Celadon_Map_Name17: ; map_const CELADON_POKECENTER_1F ; 17 + db "CELADON ", $E1, $E2, "CENTER@" +Celadon_Map_Name18: ; map_const CELADON_POKECENTER_2F_BETA ; 18 + db "CELADON PC BETA@" +Celadon_Map_Name19: ; map_const CELADON_GAME_CORNER, 19 + db "CEL. GAME CORNER@" +Celadon_Map_Name20: ; map_const CELADON_GAME_CORNER_PRIZE_ROOM ; 20 + db "CELADON PRIZEROOM@" +Celadon_Map_Name21: ; map_const CELADON_GYM ; 21 + db "CELADON GYM@" +Celadon_Map_Name22: ; map_const CELADON_CAFE ; 22 + db "CELADON CAFE@" +Celadon_Map_Name23: ; map_const ROUTE_16_FUCHSIA_SPEECH_HOUSE ; 23 + db "ROUTE 16 HOUSE@" +Celadon_Map_Name24: ; map_const ROUTE_16_GATE ; 24 + db "ROUTE 16 GATE@" +Celadon_Map_Name25: ; map_const ROUTE_7_SAFFRON_GATE ; 25 + db "ROUTE 7 GATE@" +Celadon_Map_Name26: ; map_const ROUTE_17_ROUTE_18_GATE ; 26 + db "ROUTE 17&18 GATE@" ; 22 + +Cianwood_Map_Name1: ; map_const ROUTE_40, 1 + db "ROUTE 40@" +Cianwood_Map_Name2: ; map_const ROUTE_41, ; 2 + db "ROUTE 41@" +Cianwood_Map_Name3: ; map_const CIANWOOD_CITY ; 3 + db "CIANWOOD¯CITY@" +Cianwood_Map_Name4: ; map_const MANIAS_HOUSE ; 4 + db "MANIA'S HOUSE@" +Cianwood_Map_Name5: ; map_const CIANWOOD_GYM ; 5 + db "CIANWOOD¯GYM@" +Cianwood_Map_Name6: ; map_const CIANWOOD_POKECENTER_1F ; 6 + db "CIANWOOD ", $E1, $E2, "CENTER@" +Cianwood_Map_Name7: ; map_const CIANWOOD_PHARMACY ; 7 + db "CIANWOOD¯PHARMACY@" +Cianwood_Map_Name8: ; map_const CIANWOOD_PHOTO_STUDIO ; 8 + db "CIANWOOD¯STUDIO@" +Cianwood_Map_Name9: ; map_const CIANWOOD_LUGIA_SPEECH_HOUSE ; 9 + db "CIANWOOD HOUSE@" +Cianwood_Map_Name10: ; map_const POKE_SEERS_HOUSE ; 10 + db "POKESEER HOUSE@" +Cianwood_Map_Name11: ; map_const BATTLE_TOWER_1F ; 11 + db "BATTLE TOWER 1F@" +Cianwood_Map_Name12: ; map_const BATTLE_TOWER_BATTLE_ROOM ; 12 + db "BATTLE TOWER ROOM@" +Cianwood_Map_Name13: ; map_const BATTLE_TOWER_ELEVATOR ; 13 + db "BATTLE TOWER LIFT@" +Cianwood_Map_Name14: ; map_const BATTLE_TOWER_HALLWAY, ; 14 + db "BATTLE TOWER HALL@" +Cianwood_Map_Name15: ; map_const ROUTE_40_BATTLE_TOWER_GATE ; 15 + db "ROUTE 40 GATE@" +Cianwood_Map_Name16: ; map_const BATTLE_TOWER_OUTSIDE ; 16 + db "BATTLE TOWER@" + +Viridian_Map_Name1: ; map_const ROUTE_2,; 1 + db "ROUTE 2@" +Viridian_Map_Name2: ; map_const ROUTE_22, 2 + db "ROUTE 22@" +Viridian_Map_Name3: ; map_const VIRIDIAN_CITY, 3 + db "VIRIDIAN¯CITY@" +Viridian_Map_Name4: ; map_const VIRIDIAN_GYM ; 4 + db "VIRIDIAN¯GYM@" +Viridian_Map_Name5: ; map_const VIRIDIAN_NICKNAME_SPEECH_HOUSE ; 5 + db "VIRIDIAN¯HOUSE 2@" +Viridian_Map_Name6: ; map_const TRAINER_HOUSE_1F ; 6 + db "VIRIDIAN¯HOUSE 1F@" +Viridian_Map_Name7: ; map_const TRAINER_HOUSE_B1F ; 7 + db "VIRIDIAN¯HOUSEB1F@" +Viridian_Map_Name8: ; map_const VIRIDIAN_MART ; 8 + db "VIRIDIAN ", $70, $71, "MART@" +Viridian_Map_Name9: ; map_const VIRIDIAN_POKECENTER_1F ; 9 + db "VIRIDIAN ", $E1, $E2, "CENTER@" +Viridian_Map_Name10: ; map_const VIRIDIAN_POKECENTER_2F_BETA ; 10 + db "VIRIDIAN¯PC BETA@" +Viridian_Map_Name11: ; map_const ROUTE_2_NUGGET_HOUSE ; 11 + db "RT 2 NUGGET HOUSE@" +Viridian_Map_Name12: ; map_const ROUTE_2_GATE ; 12 + db "ROUTE 2 GATE@" +Viridian_Map_Name13: ; map_const VICTORY_ROAD_GATE, 13 + db "VICTORY¯ROAD GATE@" + +New_Bark_Map_Name1: ; map_const ROUTE_26, 1 + db "ROUTE 26@" +New_Bark_Map_Name2: ; map_const ROUTE_27, 2 + db "ROUTE 27@" +New_Bark_Map_Name3: ; map_const ROUTE_29, ; 3 + db "ROUTE 29@" +New_Bark_Map_Name4: ; map_const NEW_BARK_TOWN,; 4 + db "NEW BARK¯TOWN@" +New_Bark_Map_Name5: ; map_const ELMS_LAB ; 5 + db "ELM'S LAB@" +New_Bark_Map_Name6: ; map_const PLAYERS_HOUSE_1F ; 6 + db "PLAYER'S HOUSE 1F@" +New_Bark_Map_Name7: ; map_const PLAYERS_HOUSE_2F ; 7 + db "PLAYER'S HOUSE 2F@" +New_Bark_Map_Name8: ; map_const PLAYERS_NEIGHBORS_HOUSE ; 8 + db "NEW BARK HOUSE@" +New_Bark_Map_Name9: ; map_const ELMS_HOUSE ; 9 + db "ELM'S HOUSE@" +New_Bark_Map_Name10: ; map_const ROUTE_26_HEAL_HOUSE ; 10 + db "ROUTE 26 HOUSE@" +New_Bark_Map_Name11: ; map_const DAY_OF_WEEK_SIBLINGS_HOUSE ; 11 + db "DAY SIBLINGS HOUSE@" +New_Bark_Map_Name12: ; map_const ROUTE_27_SANDSTORM_HOUSE ; 12 + db "ROUTE 27 HOUSE@" +New_Bark_Map_Name13: ; map_const ROUTE_29_ROUTE_46_GATE ; 13 + db "ROUTE 29 GATE@" + +Saffron_Map_Name1: ; map_const ROUTE_5,; 1 + db "ROUTE 5@" +Saffron_Map_Name2: ; map_const SAFFRON_CITY ; 2 + db "SAFFRON¯CITY@" +Saffron_Map_Name3: ; map_const FIGHTING_DOJO ; 3 + db "FIGHTING DOJO@" +Saffron_Map_Name4: ; map_const SAFFRON_GYM, ; 4 + db "SAFFRON GYM@" +Saffron_Map_Name5: ; map_const SAFFRON_MART ; 5 + db "SAFFRON ", $70, $71, "MART@" +Saffron_Map_Name6: ; map_const SAFFRON_POKECENTER_1F ; 6 + db "SAFFRON ", $E1, $E2, "CENTER@" +Saffron_Map_Name7: ; map_const SAFFRON_POKECENTER_2F_BETA ; 7 + db "SAFFRON PC BETA@" +Saffron_Map_Name8: ; map_const MR_PSYCHICS_HOUSE ; 8 + db "MR.PSYCHICS HOUSE@" +Saffron_Map_Name9: ; map_const SAFFRON_MAGNET_TRAIN_STATION,; 9 + db "SAFFRON STATION@" +Saffron_Map_Name10: ; map_const SILPH_CO_1F ; 10 + db "SILPH CO.@" +Saffron_Map_Name11: ; map_const COPYCATS_HOUSE_1F ; 11 + db "COPYCAT HOUSE 1F@" +Saffron_Map_Name12: ; map_const COPYCATS_HOUSE_2F ; 12 + db "COPYCAT HOUSE 2F@" +Saffron_Map_Name13: ; map_const ROUTE_5_UNDERGROUND_PATH_ENTRANCE ; 13 + db "ROUTE 5 UNDERGRND@" +Saffron_Map_Name14: ; map_const ROUTE_5_SAFFRON_GATE ; 14 + db "ROUTE 5 GATE@" +Saffron_Map_Name15: ; map_const ROUTE_5_CLEANSE_TAG_HOUSE ; 15 + db "ROUTE 5 HOUSE@" + +Cherrygrove_Map_Name1: ; map_const ROUTE_30 ; 1 + db "ROUTE 30@" +Cherrygrove_Map_Name2: ; map_const ROUTE_31 ; 2 + db "ROUTE 31@" +Cherrygrove_Map_Name3: ; map_const CHERRYGROVE_CITY ; 3 + db "CHERRYGROVE¯CITY@" +Cherrygrove_Map_Name4: ; map_const CHERRYGROVE_MART ; 4 + db "CHERRYGROVE.#MART@" +Cherrygrove_Map_Name5: ; map_const CHERRYGROVE_POKECENTER_1F ; 5 + db "CHERRYGROVE ", $E1, $E2, "CEN@" +Cherrygrove_Map_Name6: ; map_const CHERRYGROVE_GYM_SPEECH_HOUSE ; 6 + db "CHERRYG.¯HOUSE 1@" +Cherrygrove_Map_Name7: ; map_const GUIDE_GENTS_HOUSE ; 7 + db "GUIDE GENT HOUSE@" +Cherrygrove_Map_Name8: ; map_const CHERRYGROVE_EVOLUTION_SPEECH_HOUSE ; 8 + db "CHERRYG.¯HOUSE 2@" +Cherrygrove_Map_Name9: ; map_const ROUTE_30_BERRY_HOUSE ; 9 + db "ROUTE 30 HOUSE@" +Cherrygrove_Map_Name10: ; map_const MR_POKEMONS_HOUSE ; 10 + db "MR.#MON HOUSE@" +Cherrygrove_Map_Name11: ; map_const ROUTE_31_VIOLET_GATE ; 11 + db "ROUTE 31 GATE@" \ No newline at end of file diff --git a/data/maps/maps.asm b/data/maps/maps.asm index d3bbc0d9eff..5044f0a2d98 100644 --- a/data/maps/maps.asm +++ b/data/maps/maps.asm @@ -47,91 +47,91 @@ MapGroupPointers:: MapGroup_Olivine: table_width MAP_LENGTH, MapGroup_Olivine - map OlivinePokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivineGym, TILESET_CHAMPIONS_ROOM, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map OlivineTimsHouse, TILESET_HOUSE, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivineHouseBeta, TILESET_HOUSE, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivinePunishmentSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivineGoodRodHouse, TILESET_HOUSE, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivineCafe, TILESET_GAME_CORNER, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivineMart, TILESET_MART, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route38EcruteakGate, TILESET_GATE, GATE, LANDMARK_ROUTE_38, MUSIC_ROUTE_37, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route39Barn, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_ROUTE_39, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route39Farmhouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_39, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route38, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_38, MUSIC_ROUTE_37, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map Route39, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_39, MUSIC_ROUTE_37, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map OlivinePokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivineGym, TILESET_CHAMPIONS_ROOM, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map OlivineTimsHouse, TILESET_HOUSE, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivineHouseBeta, TILESET_HOUSE, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivinePunishmentSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivineGoodRodHouse, TILESET_HOUSE, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivineCafe, TILESET_GAME_CORNER, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivineMart, TILESET_MART, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route38EcruteakGate, TILESET_GATE, GATE, LANDMARK_ROUTE_38, MUSIC_ROUTE_37, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route39Barn, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_ROUTE_39, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route39Farmhouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_39, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route38, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_38, MUSIC_ROUTE_37, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map Route39, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_39, MUSIC_ROUTE_37, FALSE, PALETTE_AUTO, FISHGROUP_NONE map OlivineCity, TILESET_JOHTO, TOWN, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_AUTO, FISHGROUP_SHORE assert_table_length NUM_OLIVINE_MAPS MapGroup_Mahogany: table_width MAP_LENGTH, MapGroup_Mahogany - map MahoganyRedGyaradosSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_MAHOGANY_TOWN, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map MahoganyGym, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_MAHOGANY_TOWN, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map MahoganyPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_MAHOGANY_TOWN, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route42EcruteakGate, TILESET_GATE, GATE, LANDMARK_ROUTE_42, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map MahoganyRedGyaradosSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_MAHOGANY_TOWN, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map MahoganyGym, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_MAHOGANY_TOWN, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map MahoganyPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_MAHOGANY_TOWN, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route42EcruteakGate, TILESET_GATE, GATE, LANDMARK_ROUTE_42, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_DAY, FISHGROUP_NONE map Route42, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_42, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_AUTO, FISHGROUP_LAKE map Route44, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_44, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_AUTO, FISHGROUP_POND - map MahoganyTown, TILESET_JOHTO, TOWN, LANDMARK_MAHOGANY_TOWN, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map MahoganyTown, TILESET_JOHTO, TOWN, LANDMARK_MAHOGANY_TOWN, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_AUTO, FISHGROUP_NONE assert_table_length NUM_MAHOGANY_MAPS MapGroup_Dungeons: table_width MAP_LENGTH, MapGroup_Dungeons - map SproutTower1F, TILESET_TOWER, DUNGEON, LANDMARK_SPROUT_TOWER, MUSIC_SPROUT_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SproutTower2F, TILESET_TOWER, DUNGEON, LANDMARK_SPROUT_TOWER, MUSIC_SPROUT_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SproutTower3F, TILESET_TOWER, DUNGEON, LANDMARK_SPROUT_TOWER, MUSIC_SPROUT_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TinTower1F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TinTower2F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TinTower3F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TinTower4F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TinTower5F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TinTower6F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TinTower7F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TinTower8F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TinTower9F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map BurnedTower1F, TILESET_TOWER, DUNGEON, LANDMARK_BURNED_TOWER, MUSIC_BURNED_TOWER, TRUE, PALETTE_NITE, FISHGROUP_SHORE - map BurnedTowerB1F, TILESET_CAVE, CAVE, LANDMARK_BURNED_TOWER, MUSIC_BURNED_TOWER, TRUE, PALETTE_NITE, FISHGROUP_SHORE - map NationalPark, TILESET_PARK, ROUTE, LANDMARK_NATIONAL_PARK, MUSIC_NATIONAL_PARK, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map NationalParkBugContest, TILESET_PARK, ROUTE, LANDMARK_NATIONAL_PARK, MUSIC_BUG_CATCHING_CONTEST, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map RadioTower1F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_RADIO_TOWER, MUSIC_RADIO_TOWER, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RadioTower2F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_RADIO_TOWER, MUSIC_RADIO_TOWER, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RadioTower3F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_RADIO_TOWER, MUSIC_RADIO_TOWER, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RadioTower4F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_RADIO_TOWER, MUSIC_RADIO_TOWER, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RadioTower5F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_RADIO_TOWER, MUSIC_RADIO_TOWER, TRUE, PALETTE_DAY, FISHGROUP_SHORE + map SproutTower1F, TILESET_TOWER, DUNGEON, LANDMARK_SPROUT_TOWER, MUSIC_SPROUT_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SproutTower2F, TILESET_TOWER, DUNGEON, LANDMARK_SPROUT_TOWER, MUSIC_SPROUT_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SproutTower3F, TILESET_TOWER, DUNGEON, LANDMARK_SPROUT_TOWER, MUSIC_SPROUT_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TinTower1F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TinTower2F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TinTower3F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TinTower4F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TinTower5F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TinTower6F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TinTower7F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TinTower8F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TinTower9F, TILESET_TOWER, DUNGEON, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map BurnedTower1F, TILESET_TOWER, DUNGEON, LANDMARK_BURNED_TOWER, MUSIC_BURNED_TOWER, TRUE, PALETTE_NITE, FISHGROUP_NONE + map BurnedTowerB1F, TILESET_CAVE, CAVE, LANDMARK_BURNED_TOWER, MUSIC_BURNED_TOWER, TRUE, PALETTE_NITE, FISHGROUP_NONE + map NationalPark, TILESET_PARK, ROUTE, LANDMARK_NATIONAL_PARK, MUSIC_NATIONAL_PARK, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map NationalParkBugContest, TILESET_PARK, ROUTE, LANDMARK_NATIONAL_PARK, MUSIC_BUG_CATCHING_CONTEST, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map RadioTower1F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_RADIO_TOWER, MUSIC_RADIO_TOWER, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RadioTower2F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_RADIO_TOWER, MUSIC_RADIO_TOWER, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RadioTower3F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_RADIO_TOWER, MUSIC_RADIO_TOWER, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RadioTower4F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_RADIO_TOWER, MUSIC_RADIO_TOWER, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RadioTower5F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_RADIO_TOWER, MUSIC_RADIO_TOWER, TRUE, PALETTE_DAY, FISHGROUP_NONE map RuinsOfAlphOutside, TILESET_JOHTO, ROUTE, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, FALSE, PALETTE_AUTO, FISHGROUP_POND map RuinsOfAlphHoOhChamber, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphKabutoChamber, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphOmanyteChamber, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphAerodactylChamber, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphInnerChamber, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_RUINS_OF_ALPH_INTERIOR, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphResearchCenter, TILESET_FACILITY, INDOOR, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphHoOhItemRoom, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphKabutoItemRoom, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphOmanyteItemRoom, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphAerodactylItemRoom, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphHoOhWordRoom, TILESET_HO_OH_WORD_ROOM, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphKabutoWordRoom, TILESET_KABUTO_WORD_ROOM, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphOmanyteWordRoom, TILESET_OMANYTE_WORD_ROOM, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map RuinsOfAlphAerodactylWordRoom, TILESET_AERODACTYL_WORD_ROOM, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE + map RuinsOfAlphKabutoChamber, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphOmanyteChamber, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphAerodactylChamber, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphInnerChamber, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_RUINS_OF_ALPH_INTERIOR, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphResearchCenter, TILESET_FACILITY, INDOOR, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, FALSE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphHoOhItemRoom, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphKabutoItemRoom, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphOmanyteItemRoom, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphAerodactylItemRoom, TILESET_RUINS_OF_ALPH, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphHoOhWordRoom, TILESET_HO_OH_WORD_ROOM, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphKabutoWordRoom, TILESET_KABUTO_WORD_ROOM, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphOmanyteWordRoom, TILESET_OMANYTE_WORD_ROOM, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map RuinsOfAlphAerodactylWordRoom, TILESET_AERODACTYL_WORD_ROOM, DUNGEON, LANDMARK_RUINS_OF_ALPH, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE map UnionCave1F, TILESET_CAVE, CAVE, LANDMARK_UNION_CAVE, MUSIC_UNION_CAVE, TRUE, PALETTE_NITE, FISHGROUP_LAKE map UnionCaveB1F, TILESET_CAVE, CAVE, LANDMARK_UNION_CAVE, MUSIC_UNION_CAVE, TRUE, PALETTE_NITE, FISHGROUP_LAKE - map UnionCaveB2F, TILESET_CAVE, CAVE, LANDMARK_UNION_CAVE, MUSIC_UNION_CAVE, TRUE, PALETTE_NITE, FISHGROUP_SHORE + map UnionCaveB2F, TILESET_CAVE, CAVE, LANDMARK_UNION_CAVE, MUSIC_UNION_CAVE, TRUE, PALETTE_NITE, FISHGROUP_OCEAN map SlowpokeWellB1F, TILESET_CAVE, CAVE, LANDMARK_SLOWPOKE_WELL, MUSIC_DARK_CAVE, TRUE, PALETTE_NITE, FISHGROUP_LAKE map SlowpokeWellB2F, TILESET_CAVE, CAVE, LANDMARK_SLOWPOKE_WELL, MUSIC_DARK_CAVE, TRUE, PALETTE_NITE, FISHGROUP_LAKE - map OlivineLighthouse1F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_LIGHTHOUSE, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivineLighthouse2F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_LIGHTHOUSE, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivineLighthouse3F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_LIGHTHOUSE, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivineLighthouse4F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_LIGHTHOUSE, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivineLighthouse5F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_LIGHTHOUSE, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivineLighthouse6F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map MahoganyMart1F, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_MAHOGANY_TOWN, MUSIC_MAHOGANY_MART, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map TeamRocketBaseB1F, TILESET_UNDERGROUND, DUNGEON, LANDMARK_MAHOGANY_TOWN, MUSIC_ROCKET_HIDEOUT, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map TeamRocketBaseB2F, TILESET_FACILITY, DUNGEON, LANDMARK_MAHOGANY_TOWN, MUSIC_ROCKET_HIDEOUT, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map TeamRocketBaseB3F, TILESET_FACILITY, DUNGEON, LANDMARK_MAHOGANY_TOWN, MUSIC_ROCKET_HIDEOUT, TRUE, PALETTE_DAY, FISHGROUP_SHORE + map OlivineLighthouse1F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_LIGHTHOUSE, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivineLighthouse2F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_LIGHTHOUSE, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivineLighthouse3F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_LIGHTHOUSE, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivineLighthouse4F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_LIGHTHOUSE, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivineLighthouse5F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_LIGHTHOUSE, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivineLighthouse6F, TILESET_LIGHTHOUSE, DUNGEON, LANDMARK_LIGHTHOUSE, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map MahoganyMart1F, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_MAHOGANY_TOWN, MUSIC_MAHOGANY_MART, TRUE, PALETTE_DAY, FISHGROUP_NONE + map TeamRocketBaseB1F, TILESET_UNDERGROUND, DUNGEON, LANDMARK_MAHOGANY_TOWN, MUSIC_ROCKET_HIDEOUT, TRUE, PALETTE_DAY, FISHGROUP_NONE + map TeamRocketBaseB2F, TILESET_FACILITY, DUNGEON, LANDMARK_MAHOGANY_TOWN, MUSIC_ROCKET_HIDEOUT, TRUE, PALETTE_DAY, FISHGROUP_NONE + map TeamRocketBaseB3F, TILESET_FACILITY, DUNGEON, LANDMARK_MAHOGANY_TOWN, MUSIC_ROCKET_HIDEOUT, TRUE, PALETTE_DAY, FISHGROUP_NONE map IlexForest, TILESET_FOREST, CAVE, LANDMARK_ILEX_FOREST, MUSIC_UNION_CAVE, FALSE, PALETTE_NITE, FISHGROUP_POND - map GoldenrodUnderground, TILESET_GATE, DUNGEON, LANDMARK_GOLDENROD_CITY, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodUndergroundSwitchRoomEntrances, TILESET_ELITE_FOUR_ROOM, DUNGEON, LANDMARK_GOLDENROD_CITY, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodDeptStoreB1F, TILESET_UNDERGROUND, DUNGEON, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodUndergroundWarehouse, TILESET_UNDERGROUND, DUNGEON, LANDMARK_GOLDENROD_CITY, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_SHORE + map GoldenrodUnderground, TILESET_GATE, DUNGEON, LANDMARK_GOLDENROD_CITY, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodUndergroundSwitchRoomEntrances, TILESET_ELITE_FOUR_ROOM, DUNGEON, LANDMARK_GOLDENROD_CITY, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodDeptStoreB1F, TILESET_UNDERGROUND, DUNGEON, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, TRUE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodUndergroundWarehouse, TILESET_UNDERGROUND, DUNGEON, LANDMARK_GOLDENROD_CITY, MUSIC_UNION_CAVE, TRUE, PALETTE_DAY, FISHGROUP_NONE map MountMortar1FOutside, TILESET_DARK_CAVE, CAVE, LANDMARK_MT_MORTAR, MUSIC_UNION_CAVE, TRUE, PALETTE_NITE, FISHGROUP_LAKE map MountMortar1FInside, TILESET_DARK_CAVE, CAVE, LANDMARK_MT_MORTAR, MUSIC_UNION_CAVE, TRUE, PALETTE_NITE, FISHGROUP_LAKE map MountMortar2FInside, TILESET_DARK_CAVE, CAVE, LANDMARK_MT_MORTAR, MUSIC_UNION_CAVE, TRUE, PALETTE_NITE, FISHGROUP_LAKE @@ -157,51 +157,51 @@ MapGroup_Dungeons: map DarkCaveBlackthornEntrance, TILESET_DARK_CAVE, CAVE, LANDMARK_DARK_CAVE, MUSIC_DARK_CAVE, TRUE, PALETTE_DARK, FISHGROUP_LAKE map DragonsDen1F, TILESET_CAVE, CAVE, LANDMARK_DRAGONS_DEN, MUSIC_DRAGONS_DEN, TRUE, PALETTE_NITE, FISHGROUP_DRATINI map DragonsDenB1F, TILESET_JOHTO, CAVE, LANDMARK_DRAGONS_DEN, MUSIC_DRAGONS_DEN, TRUE, PALETTE_NITE, FISHGROUP_DRATINI - map DragonShrine, TILESET_LAB, INDOOR, LANDMARK_DRAGONS_DEN, MUSIC_DRAGONS_DEN, TRUE, PALETTE_NITE, FISHGROUP_SHORE + map DragonShrine, TILESET_LAB, INDOOR, LANDMARK_DRAGONS_DEN, MUSIC_DRAGONS_DEN, TRUE, PALETTE_NITE, FISHGROUP_NONE map TohjoFalls, TILESET_CAVE, CAVE, LANDMARK_TOHJO_FALLS, MUSIC_UNION_CAVE, TRUE, PALETTE_NITE, FISHGROUP_LAKE - map DiglettsCave, TILESET_CAVE, CAVE, LANDMARK_DIGLETTS_CAVE, MUSIC_MT_MOON, TRUE, PALETTE_NITE, FISHGROUP_SHORE - map MountMoon, TILESET_CAVE, CAVE, LANDMARK_MT_MOON, MUSIC_MT_MOON, TRUE, PALETTE_NITE, FISHGROUP_SHORE - map UndergroundPath, TILESET_UNDERGROUND, GATE, LANDMARK_UNDERGROUND_PATH, MUSIC_MT_MOON, FALSE, PALETTE_NITE, FISHGROUP_SHORE - map RockTunnel1F, TILESET_DARK_CAVE, CAVE, LANDMARK_ROCK_TUNNEL, MUSIC_MT_MOON, TRUE, PALETTE_DARK, FISHGROUP_SHORE - map RockTunnelB1F, TILESET_DARK_CAVE, CAVE, LANDMARK_ROCK_TUNNEL, MUSIC_MT_MOON, TRUE, PALETTE_DARK, FISHGROUP_SHORE - map SafariZoneFuchsiaGateBeta, TILESET_GATE, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SafariZoneBeta, TILESET_PARK, CAVE, LANDMARK_FUCHSIA_CITY, MUSIC_EVOLUTION, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map VictoryRoad, TILESET_CAVE, CAVE, LANDMARK_VICTORY_ROAD, MUSIC_VICTORY_ROAD, TRUE, PALETTE_NITE, FISHGROUP_SHORE + map DiglettsCave, TILESET_CAVE, CAVE, LANDMARK_DIGLETTS_CAVE, MUSIC_MT_MOON, TRUE, PALETTE_NITE, FISHGROUP_NONE + map MountMoon, TILESET_CAVE, CAVE, LANDMARK_MT_MOON, MUSIC_MT_MOON, TRUE, PALETTE_NITE, FISHGROUP_NONE + map UndergroundPath, TILESET_UNDERGROUND, GATE, LANDMARK_UNDERGROUND_PATH, MUSIC_MT_MOON, FALSE, PALETTE_NITE, FISHGROUP_NONE + map RockTunnel1F, TILESET_DARK_CAVE, CAVE, LANDMARK_ROCK_TUNNEL, MUSIC_MT_MOON, TRUE, PALETTE_DARK, FISHGROUP_NONE + map RockTunnelB1F, TILESET_DARK_CAVE, CAVE, LANDMARK_ROCK_TUNNEL, MUSIC_MT_MOON, TRUE, PALETTE_DARK, FISHGROUP_NONE + map SafariZoneFuchsiaGateBeta, TILESET_GATE, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SafariZoneBeta, TILESET_PARK, CAVE, LANDMARK_FUCHSIA_CITY, MUSIC_EVOLUTION, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map VictoryRoad, TILESET_CAVE, CAVE, LANDMARK_VICTORY_ROAD, MUSIC_VICTORY_ROAD, TRUE, PALETTE_NITE, FISHGROUP_NONE assert_table_length NUM_DUNGEONS_MAPS MapGroup_Ecruteak: table_width MAP_LENGTH, MapGroup_Ecruteak - map EcruteakTinTowerEntrance, TILESET_TOWER, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map WiseTriosRoom, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map EcruteakPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map EcruteakLugiaSpeechHouse, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map DanceTheater, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_DANCING_HALL, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map EcruteakMart, TILESET_MART, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map EcruteakGym, TILESET_TOWER, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map EcruteakItemfinderHouse, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map EcruteakTinTowerEntrance, TILESET_TOWER, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map WiseTriosRoom, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, TRUE, PALETTE_DAY, FISHGROUP_NONE + map EcruteakPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map EcruteakLugiaSpeechHouse, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map DanceTheater, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_DANCING_HALL, FALSE, PALETTE_DAY, FISHGROUP_NONE + map EcruteakMart, TILESET_MART, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map EcruteakGym, TILESET_TOWER, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map EcruteakItemfinderHouse, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE map EcruteakCity, TILESET_JOHTO, TOWN, LANDMARK_ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_AUTO, FISHGROUP_POND assert_table_length NUM_ECRUTEAK_MAPS MapGroup_Blackthorn: table_width MAP_LENGTH, MapGroup_Blackthorn - map BlackthornGym1F, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map BlackthornGym2F, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map BlackthornDragonSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map BlackthornEmysHouse, TILESET_HOUSE, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map BlackthornMart, TILESET_MART, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map BlackthornPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map MoveDeletersHouse, TILESET_HOUSE, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map BlackthornGym1F, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map BlackthornGym2F, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map BlackthornDragonSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map BlackthornEmysHouse, TILESET_HOUSE, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map BlackthornMart, TILESET_MART, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map BlackthornPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map MoveDeletersHouse, TILESET_HOUSE, INDOOR, LANDMARK_BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE map Route45, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_45, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_DRATINI_2 - map Route46, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_46, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map Route46, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_46, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_NONE map BlackthornCity, TILESET_JOHTO, TOWN, LANDMARK_BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, FALSE, PALETTE_AUTO, FISHGROUP_POND assert_table_length NUM_BLACKTHORN_MAPS MapGroup_Cinnabar: table_width MAP_LENGTH, MapGroup_Cinnabar - map CinnabarPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_CINNABAR_ISLAND, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CinnabarPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_CINNABAR_ISLAND, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route19FuchsiaGate, TILESET_GATE, GATE, LANDMARK_ROUTE_19, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SeafoamGym, TILESET_CAVE, INDOOR, LANDMARK_SEAFOAM_ISLANDS, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE + map CinnabarPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_CINNABAR_ISLAND, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CinnabarPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_CINNABAR_ISLAND, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route19FuchsiaGate, TILESET_GATE, GATE, LANDMARK_ROUTE_19, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SeafoamGym, TILESET_CAVE, INDOOR, LANDMARK_SEAFOAM_ISLANDS, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE map Route19, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_19, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_SHORE map Route20, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_20, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN map Route21, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_21, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN @@ -210,17 +210,17 @@ MapGroup_Cinnabar: MapGroup_Cerulean: table_width MAP_LENGTH, MapGroup_Cerulean - map CeruleanGymBadgeSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeruleanPoliceStation, TILESET_HOUSE, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeruleanTradeSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeruleanPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeruleanPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map CeruleanGymBadgeSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeruleanPoliceStation, TILESET_HOUSE, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeruleanTradeSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeruleanPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeruleanPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE map CeruleanGym, TILESET_PORT, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE - map CeruleanMart, TILESET_MART, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route10Pokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_10, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route10Pokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_10, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map PowerPlant, TILESET_FACILITY, INDOOR, LANDMARK_POWER_PLANT, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map BillsHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_25, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map CeruleanMart, TILESET_MART, INDOOR, LANDMARK_CERULEAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route10Pokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_10, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route10Pokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_10, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map PowerPlant, TILESET_FACILITY, INDOOR, LANDMARK_POWER_PLANT, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map BillsHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_25, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE map Route4, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_4, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_NONE map Route9, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_9, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_LAKE map Route10North, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_10, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_LAKE @@ -231,21 +231,21 @@ MapGroup_Cerulean: MapGroup_Azalea: table_width MAP_LENGTH, MapGroup_Azalea - map AzaleaPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_AZALEA_TOWN, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CharcoalKiln, TILESET_HOUSE, INDOOR, LANDMARK_AZALEA_TOWN, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map AzaleaMart, TILESET_MART, INDOOR, LANDMARK_AZALEA_TOWN, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map KurtsHouse, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_AZALEA_TOWN, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map AzaleaGym, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_AZALEA_TOWN, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map Route33, TILESET_JOHTO_MODERN, ROUTE, LANDMARK_ROUTE_33, MUSIC_ROUTE_30, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map AzaleaTown, TILESET_JOHTO_MODERN, TOWN, LANDMARK_AZALEA_TOWN, MUSIC_AZALEA_TOWN, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map AzaleaPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_AZALEA_TOWN, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CharcoalKiln, TILESET_HOUSE, INDOOR, LANDMARK_AZALEA_TOWN, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map AzaleaMart, TILESET_MART, INDOOR, LANDMARK_AZALEA_TOWN, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map KurtsHouse, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_AZALEA_TOWN, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map AzaleaGym, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_AZALEA_TOWN, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map Route33, TILESET_JOHTO_MODERN, ROUTE, LANDMARK_ROUTE_33, MUSIC_ROUTE_30, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map AzaleaTown, TILESET_JOHTO_MODERN, TOWN, LANDMARK_AZALEA_TOWN, MUSIC_AZALEA_TOWN, FALSE, PALETTE_AUTO, FISHGROUP_NONE assert_table_length NUM_AZALEA_MAPS MapGroup_LakeOfRage: table_width MAP_LENGTH, MapGroup_LakeOfRage - map LakeOfRageHiddenPowerHouse, TILESET_HOUSE, INDOOR, LANDMARK_LAKE_OF_RAGE, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map LakeOfRageMagikarpHouse, TILESET_HOUSE, INDOOR, LANDMARK_LAKE_OF_RAGE, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route43MahoganyGate, TILESET_GATE, GATE, LANDMARK_ROUTE_43, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route43Gate, TILESET_GATE, GATE, LANDMARK_ROUTE_43, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map LakeOfRageHiddenPowerHouse, TILESET_HOUSE, INDOOR, LANDMARK_LAKE_OF_RAGE, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_DAY, FISHGROUP_NONE + map LakeOfRageMagikarpHouse, TILESET_HOUSE, INDOOR, LANDMARK_LAKE_OF_RAGE, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route43MahoganyGate, TILESET_GATE, GATE, LANDMARK_ROUTE_43, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route43Gate, TILESET_GATE, GATE, LANDMARK_ROUTE_43, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_DAY, FISHGROUP_NONE map Route43, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_43, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_AUTO, FISHGROUP_POND map LakeOfRage, TILESET_JOHTO, TOWN, LANDMARK_LAKE_OF_RAGE, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_AUTO, FISHGROUP_GYARADOS assert_table_length NUM_LAKE_OF_RAGE_MAPS @@ -254,199 +254,199 @@ MapGroup_Violet: table_width MAP_LENGTH, MapGroup_Violet map Route32, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_32, MUSIC_ROUTE_30, FALSE, PALETTE_AUTO, FISHGROUP_QWILFISH map Route35, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_35, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_POND - map Route36, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_36, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map Route37, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_37, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map Route36, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_36, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map Route37, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_37, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_NONE map VioletCity, TILESET_JOHTO, TOWN, LANDMARK_VIOLET_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_AUTO, FISHGROUP_POND - map VioletMart, TILESET_MART, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VioletGym, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map EarlsPokemonAcademy, TILESET_LAB, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VioletNicknameSpeechHouse, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VioletPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VioletKylesHouse, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route32RuinsOfAlphGate, TILESET_GATE, GATE, LANDMARK_ROUTE_32, MUSIC_ROUTE_30, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route32Pokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_32, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route35GoldenrodGate, TILESET_GATE, GATE, LANDMARK_ROUTE_35, MUSIC_ROUTE_36, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route35NationalParkGate, TILESET_GATE, INDOOR, LANDMARK_ROUTE_35, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route36RuinsOfAlphGate, TILESET_GATE, GATE, LANDMARK_ROUTE_36, MUSIC_ROUTE_36, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route36NationalParkGate, TILESET_GATE, INDOOR, LANDMARK_ROUTE_36, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map VioletMart, TILESET_MART, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VioletGym, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map EarlsPokemonAcademy, TILESET_LAB, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VioletNicknameSpeechHouse, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VioletPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VioletKylesHouse, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_VIOLET_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route32RuinsOfAlphGate, TILESET_GATE, GATE, LANDMARK_ROUTE_32, MUSIC_ROUTE_30, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route32Pokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_ROUTE_32, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route35GoldenrodGate, TILESET_GATE, GATE, LANDMARK_ROUTE_35, MUSIC_ROUTE_36, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route35NationalParkGate, TILESET_GATE, INDOOR, LANDMARK_ROUTE_35, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route36RuinsOfAlphGate, TILESET_GATE, GATE, LANDMARK_ROUTE_36, MUSIC_ROUTE_36, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route36NationalParkGate, TILESET_GATE, INDOOR, LANDMARK_ROUTE_36, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_VIOLET_MAPS MapGroup_Goldenrod: table_width MAP_LENGTH, MapGroup_Goldenrod map Route34, TILESET_JOHTO_MODERN, ROUTE, LANDMARK_ROUTE_34, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map GoldenrodCity, TILESET_JOHTO_MODERN, TOWN, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map GoldenrodGym, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodBikeShop, TILESET_CHAMPIONS_ROOM, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodHappinessRater, TILESET_HOUSE, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map BillsFamilysHouse, TILESET_HOUSE, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodMagnetTrainStation, TILESET_TRAIN_STATION, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodFlowerShop, TILESET_HOUSE, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodPPSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodNameRater, TILESET_HOUSE, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodDeptStore1F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodDeptStore2F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodDeptStore3F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodDeptStore4F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodDeptStore5F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodDeptStore6F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodDeptStoreElevator, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodDeptStoreRoof, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodGameCorner, TILESET_GAME_CORNER, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GAME_CORNER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GoldenrodPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map PokecomCenterAdminOfficeMobile, TILESET_POKECOM_CENTER, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map IlexForestAzaleaGate, TILESET_GATE, GATE, LANDMARK_ROUTE_34, MUSIC_ROUTE_36, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route34IlexForestGate, TILESET_GATE, GATE, LANDMARK_ROUTE_34, MUSIC_ROUTE_36, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map DayCare, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_34, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map GoldenrodCity, TILESET_JOHTO_MODERN, TOWN, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map GoldenrodGym, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodBikeShop, TILESET_CHAMPIONS_ROOM, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodHappinessRater, TILESET_HOUSE, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map BillsFamilysHouse, TILESET_HOUSE, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodMagnetTrainStation, TILESET_TRAIN_STATION, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodFlowerShop, TILESET_HOUSE, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodPPSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodNameRater, TILESET_HOUSE, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodDeptStore1F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodDeptStore2F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodDeptStore3F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodDeptStore4F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodDeptStore5F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodDeptStore6F, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodDeptStoreElevator, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodDeptStoreRoof, TILESET_MART, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodGameCorner, TILESET_GAME_CORNER, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GAME_CORNER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GoldenrodPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map PokecomCenterAdminOfficeMobile, TILESET_POKECOM_CENTER, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map IlexForestAzaleaGate, TILESET_GATE, GATE, LANDMARK_ROUTE_34, MUSIC_ROUTE_36, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route34IlexForestGate, TILESET_GATE, GATE, LANDMARK_ROUTE_34, MUSIC_ROUTE_36, FALSE, PALETTE_DAY, FISHGROUP_NONE + map DayCare, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_34, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_GOLDENROD_MAPS MapGroup_Vermilion: table_width MAP_LENGTH, MapGroup_Vermilion map Route6, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_6, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_POND - map Route11, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_11, MUSIC_ROUTE_12, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map Route11, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_11, MUSIC_ROUTE_12, FALSE, PALETTE_AUTO, FISHGROUP_NONE map VermilionCity, TILESET_KANTO, TOWN, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN - map VermilionFishingSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VermilionPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VermilionPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map PokemonFanClub, TILESET_HOUSE, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VermilionMagnetTrainSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VermilionMart, TILESET_MART, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VermilionDiglettsCaveSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VermilionGym, TILESET_GAME_CORNER, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map Route6SaffronGate, TILESET_GATE, GATE, LANDMARK_ROUTE_6, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route6UndergroundPathEntrance, TILESET_GATE, GATE, LANDMARK_ROUTE_6, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map VermilionFishingSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VermilionPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VermilionPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map PokemonFanClub, TILESET_HOUSE, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VermilionMagnetTrainSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VermilionMart, TILESET_MART, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VermilionDiglettsCaveSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VermilionGym, TILESET_GAME_CORNER, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map Route6SaffronGate, TILESET_GATE, GATE, LANDMARK_ROUTE_6, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route6UndergroundPathEntrance, TILESET_GATE, GATE, LANDMARK_ROUTE_6, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_VERMILION_MAPS MapGroup_Pallet: table_width MAP_LENGTH, MapGroup_Pallet - map Route1, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_1, MUSIC_ROUTE_1, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map Route1, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_1, MUSIC_ROUTE_1, FALSE, PALETTE_AUTO, FISHGROUP_NONE map PalletTown, TILESET_KANTO, TOWN, LANDMARK_PALLET_TOWN, MUSIC_PALLET_TOWN, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN - map RedsHouse1F, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_PALLET_TOWN, MUSIC_PALLET_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map RedsHouse2F, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_PALLET_TOWN, MUSIC_PALLET_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map BluesHouse, TILESET_HOUSE, INDOOR, LANDMARK_PALLET_TOWN, MUSIC_PALLET_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OaksLab, TILESET_LAB, INDOOR, LANDMARK_PALLET_TOWN, MUSIC_POKEMON_TALK, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map RedsHouse1F, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_PALLET_TOWN, MUSIC_PALLET_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map RedsHouse2F, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_PALLET_TOWN, MUSIC_PALLET_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map BluesHouse, TILESET_HOUSE, INDOOR, LANDMARK_PALLET_TOWN, MUSIC_PALLET_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OaksLab, TILESET_LAB, INDOOR, LANDMARK_PALLET_TOWN, MUSIC_POKEMON_TALK, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_PALLET_MAPS MapGroup_Pewter: table_width MAP_LENGTH, MapGroup_Pewter - map Route3, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_3, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map PewterCity, TILESET_KANTO, TOWN, LANDMARK_PEWTER_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map PewterNidoranSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map PewterGym, TILESET_TOWER, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map PewterMart, TILESET_MART, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map PewterPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map PewterPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map PewterSnoozeSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map Route3, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_3, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map PewterCity, TILESET_KANTO, TOWN, LANDMARK_PEWTER_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map PewterNidoranSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map PewterGym, TILESET_TOWER, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map PewterMart, TILESET_MART, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map PewterPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map PewterPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map PewterSnoozeSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_PEWTER_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_PEWTER_MAPS MapGroup_FastShip: table_width MAP_LENGTH, MapGroup_FastShip map OlivinePort, TILESET_PORT, ROUTE, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN map VermilionPort, TILESET_PORT, ROUTE, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN - map FastShip1F, TILESET_LIGHTHOUSE, INDOOR, LANDMARK_FAST_SHIP, MUSIC_SS_AQUA, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map FastShipCabins_NNW_NNE_NE, TILESET_LIGHTHOUSE, INDOOR, LANDMARK_FAST_SHIP, MUSIC_SS_AQUA, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map FastShipCabins_SW_SSW_NW, TILESET_LIGHTHOUSE, INDOOR, LANDMARK_FAST_SHIP, MUSIC_SS_AQUA, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map FastShipCabins_SE_SSE_CaptainsCabin, TILESET_LIGHTHOUSE, INDOOR, LANDMARK_FAST_SHIP, MUSIC_SS_AQUA, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map FastShipB1F, TILESET_LIGHTHOUSE, INDOOR, LANDMARK_FAST_SHIP, MUSIC_SS_AQUA, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map OlivinePortPassage, TILESET_UNDERGROUND, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VermilionPortPassage, TILESET_UNDERGROUND, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map MountMoonSquare, TILESET_KANTO, ROUTE, LANDMARK_MT_MOON, MUSIC_MT_MOON_SQUARE, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map MountMoonGiftShop, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_MT_MOON, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TinTowerRoof, TILESET_TOWER, ROUTE, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map FastShip1F, TILESET_LIGHTHOUSE, INDOOR, LANDMARK_FAST_SHIP, MUSIC_SS_AQUA, FALSE, PALETTE_DAY, FISHGROUP_NONE + map FastShipCabins_NNW_NNE_NE, TILESET_LIGHTHOUSE, INDOOR, LANDMARK_FAST_SHIP, MUSIC_SS_AQUA, FALSE, PALETTE_DAY, FISHGROUP_NONE + map FastShipCabins_SW_SSW_NW, TILESET_LIGHTHOUSE, INDOOR, LANDMARK_FAST_SHIP, MUSIC_SS_AQUA, FALSE, PALETTE_DAY, FISHGROUP_NONE + map FastShipCabins_SE_SSE_CaptainsCabin, TILESET_LIGHTHOUSE, INDOOR, LANDMARK_FAST_SHIP, MUSIC_SS_AQUA, FALSE, PALETTE_DAY, FISHGROUP_NONE + map FastShipB1F, TILESET_LIGHTHOUSE, INDOOR, LANDMARK_FAST_SHIP, MUSIC_SS_AQUA, FALSE, PALETTE_DAY, FISHGROUP_NONE + map OlivinePortPassage, TILESET_UNDERGROUND, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VermilionPortPassage, TILESET_UNDERGROUND, INDOOR, LANDMARK_VERMILION_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map MountMoonSquare, TILESET_KANTO, ROUTE, LANDMARK_MT_MOON, MUSIC_MT_MOON_SQUARE, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map MountMoonGiftShop, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_MT_MOON, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TinTowerRoof, TILESET_TOWER, ROUTE, LANDMARK_TIN_TOWER, MUSIC_TIN_TOWER, FALSE, PALETTE_AUTO, FISHGROUP_NONE assert_table_length NUM_FAST_SHIP_MAPS MapGroup_Indigo: table_width MAP_LENGTH, MapGroup_Indigo - map Route23, TILESET_KANTO, TOWN, LANDMARK_ROUTE_23, MUSIC_INDIGO_PLATEAU, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map IndigoPlateauPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map WillsRoom, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map KogasRoom, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map BrunosRoom, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map KarensRoom, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map LancesRoom, TILESET_CHAMPIONS_ROOM, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map HallOfFame, TILESET_ICE_PATH, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_NEW_BARK_TOWN, TRUE, PALETTE_DAY, FISHGROUP_SHORE + map Route23, TILESET_KANTO, TOWN, LANDMARK_ROUTE_23, MUSIC_INDIGO_PLATEAU, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map IndigoPlateauPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, FALSE, PALETTE_DAY, FISHGROUP_NONE + map WillsRoom, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, TRUE, PALETTE_DAY, FISHGROUP_NONE + map KogasRoom, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, TRUE, PALETTE_DAY, FISHGROUP_NONE + map BrunosRoom, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, TRUE, PALETTE_DAY, FISHGROUP_NONE + map KarensRoom, TILESET_ELITE_FOUR_ROOM, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, TRUE, PALETTE_DAY, FISHGROUP_NONE + map LancesRoom, TILESET_CHAMPIONS_ROOM, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, TRUE, PALETTE_DAY, FISHGROUP_NONE + map HallOfFame, TILESET_ICE_PATH, INDOOR, LANDMARK_INDIGO_PLATEAU, MUSIC_NEW_BARK_TOWN, TRUE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_INDIGO_MAPS MapGroup_Fuchsia: table_width MAP_LENGTH, MapGroup_Fuchsia map Route13, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_13, MUSIC_ROUTE_12, FALSE, PALETTE_AUTO, FISHGROUP_QWILFISH_NO_SWARM - map Route14, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_14, MUSIC_ROUTE_12, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map Route15, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_15, MUSIC_ROUTE_12, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map Route18, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_18, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map Route14, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_14, MUSIC_ROUTE_12, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map Route15, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_15, MUSIC_ROUTE_12, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map Route18, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_18, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_NONE map FuchsiaCity, TILESET_KANTO, TOWN, LANDMARK_FUCHSIA_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_AUTO, FISHGROUP_GYARADOS - map FuchsiaMart, TILESET_MART, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SafariZoneMainOffice, TILESET_GAME_CORNER, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map FuchsiaGym, TILESET_LAB, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map BillsBrothersHouse, TILESET_HOUSE, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map FuchsiaPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map FuchsiaPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SafariZoneWardensHome, TILESET_HOUSE, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route15FuchsiaGate, TILESET_GATE, GATE, LANDMARK_ROUTE_15, MUSIC_ROUTE_12, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map FuchsiaMart, TILESET_MART, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SafariZoneMainOffice, TILESET_GAME_CORNER, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map FuchsiaGym, TILESET_LAB, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map BillsBrothersHouse, TILESET_HOUSE, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map FuchsiaPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map FuchsiaPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SafariZoneWardensHome, TILESET_HOUSE, INDOOR, LANDMARK_FUCHSIA_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route15FuchsiaGate, TILESET_GATE, GATE, LANDMARK_ROUTE_15, MUSIC_ROUTE_12, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_FUCHSIA_MAPS MapGroup_Lavender: table_width MAP_LENGTH, MapGroup_Lavender - map Route8, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_8, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map Route8, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_8, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_NONE map Route12, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_12, MUSIC_ROUTE_12, FALSE, PALETTE_AUTO, FISHGROUP_QWILFISH_NO_SWARM map Route10South, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_10, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_LAKE - map LavenderTown, TILESET_KANTO, TOWN, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map LavenderPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map LavenderPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map MrFujisHouse, TILESET_HOUSE, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map LavenderSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map LavenderNameRater, TILESET_HOUSE, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map LavenderMart, TILESET_MART, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SoulHouse, TILESET_HOUSE, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map LavRadioTower1F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_LAV_RADIO_TOWER, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route8SaffronGate, TILESET_GATE, GATE, LANDMARK_ROUTE_8, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route12SuperRodHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_12, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map LavenderTown, TILESET_KANTO, TOWN, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map LavenderPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map LavenderPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map MrFujisHouse, TILESET_HOUSE, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map LavenderSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map LavenderNameRater, TILESET_HOUSE, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map LavenderMart, TILESET_MART, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SoulHouse, TILESET_HOUSE, INDOOR, LANDMARK_LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map LavRadioTower1F, TILESET_RADIO_TOWER, INDOOR, LANDMARK_LAV_RADIO_TOWER, MUSIC_LAVENDER_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route8SaffronGate, TILESET_GATE, GATE, LANDMARK_ROUTE_8, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route12SuperRodHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_12, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_LAVENDER_MAPS MapGroup_Silver: table_width MAP_LENGTH, MapGroup_Silver map Route28, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_28, MUSIC_INDIGO_PLATEAU, FALSE, PALETTE_AUTO, FISHGROUP_POND map SilverCaveOutside, TILESET_KANTO, TOWN, LANDMARK_SILVER_CAVE, MUSIC_INDIGO_PLATEAU, FALSE, PALETTE_AUTO, FISHGROUP_POND - map SilverCavePokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_SILVER_CAVE, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route28SteelWingHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_28, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map SilverCavePokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_SILVER_CAVE, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route28SteelWingHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_28, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_SILVER_MAPS MapGroup_CableClub: table_width MAP_LENGTH, MapGroup_CableClub - map Pokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_SPECIAL, MUSIC_POKEMON_CENTER, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map TradeCenter, TILESET_GATE, INDOOR, LANDMARK_SPECIAL, MUSIC_CHERRYGROVE_CITY, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map Colosseum, TILESET_GATE, INDOOR, LANDMARK_SPECIAL, MUSIC_CHERRYGROVE_CITY, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map TimeCapsule, TILESET_GATE, INDOOR, LANDMARK_SPECIAL, MUSIC_CHERRYGROVE_CITY, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map MobileTradeRoom, TILESET_MANSION, INDOOR, LANDMARK_SPECIAL, MUSIC_CHERRYGROVE_CITY, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map MobileBattleRoom, TILESET_MANSION, INDOOR, LANDMARK_SPECIAL, MUSIC_CHERRYGROVE_CITY, TRUE, PALETTE_DAY, FISHGROUP_SHORE + map Pokecenter2F, TILESET_POKECENTER, INDOOR, LANDMARK_SPECIAL, MUSIC_POKEMON_CENTER, TRUE, PALETTE_DAY, FISHGROUP_NONE + map TradeCenter, TILESET_GATE, INDOOR, LANDMARK_SPECIAL, MUSIC_CHERRYGROVE_CITY, TRUE, PALETTE_DAY, FISHGROUP_NONE + map Colosseum, TILESET_GATE, INDOOR, LANDMARK_SPECIAL, MUSIC_CHERRYGROVE_CITY, TRUE, PALETTE_DAY, FISHGROUP_NONE + map TimeCapsule, TILESET_GATE, INDOOR, LANDMARK_SPECIAL, MUSIC_CHERRYGROVE_CITY, TRUE, PALETTE_DAY, FISHGROUP_NONE + map MobileTradeRoom, TILESET_MANSION, INDOOR, LANDMARK_SPECIAL, MUSIC_CHERRYGROVE_CITY, TRUE, PALETTE_DAY, FISHGROUP_NONE + map MobileBattleRoom, TILESET_MANSION, INDOOR, LANDMARK_SPECIAL, MUSIC_CHERRYGROVE_CITY, TRUE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_CABLE_CLUB_MAPS MapGroup_Celadon: table_width MAP_LENGTH, MapGroup_Celadon - map Route7, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_7, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map Route16, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_16, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map Route7, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_7, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map Route16, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_16, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_NONE map Route17, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_17, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_NONE map CeladonCity, TILESET_KANTO, TOWN, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_AUTO, FISHGROUP_NONE - map CeladonDeptStore1F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonDeptStore2F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonDeptStore3F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonDeptStore4F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonDeptStore5F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonDeptStore6F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonDeptStoreElevator, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonMansion1F, TILESET_MANSION, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonMansion2F, TILESET_MANSION, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonMansion3F, TILESET_MANSION, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonMansionRoof, TILESET_MANSION, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonMansionRoofHouse, TILESET_HOUSE, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_CELADON_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonGameCorner, TILESET_GAME_CORNER, INDOOR, LANDMARK_CELADON_CITY, MUSIC_GAME_CORNER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonGameCornerPrizeRoom, TILESET_GAME_CORNER, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonGym, TILESET_TRAIN_STATION, INDOOR, LANDMARK_CELADON_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map CeladonCafe, TILESET_GAME_CORNER, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route16FuchsiaSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_16, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route16Gate, TILESET_GATE, GATE, LANDMARK_ROUTE_16, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route7SaffronGate, TILESET_GATE, GATE, LANDMARK_ROUTE_7, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route17Route18Gate, TILESET_GATE, GATE, LANDMARK_ROUTE_17, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map CeladonDeptStore1F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonDeptStore2F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonDeptStore3F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonDeptStore4F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonDeptStore5F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonDeptStore6F, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonDeptStoreElevator, TILESET_MART, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonMansion1F, TILESET_MANSION, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonMansion2F, TILESET_MANSION, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonMansion3F, TILESET_MANSION, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonMansionRoof, TILESET_MANSION, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonMansionRoofHouse, TILESET_HOUSE, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_CELADON_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonGameCorner, TILESET_GAME_CORNER, INDOOR, LANDMARK_CELADON_CITY, MUSIC_GAME_CORNER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonGameCornerPrizeRoom, TILESET_GAME_CORNER, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CeladonGym, TILESET_TRAIN_STATION, INDOOR, LANDMARK_CELADON_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map CeladonCafe, TILESET_GAME_CORNER, INDOOR, LANDMARK_CELADON_CITY, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route16FuchsiaSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_16, MUSIC_CELADON_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route16Gate, TILESET_GATE, GATE, LANDMARK_ROUTE_16, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route7SaffronGate, TILESET_GATE, GATE, LANDMARK_ROUTE_7, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route17Route18Gate, TILESET_GATE, GATE, LANDMARK_ROUTE_17, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_CELADON_MAPS MapGroup_Cianwood: @@ -454,72 +454,72 @@ MapGroup_Cianwood: map Route40, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_40, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_SHORE map Route41, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_41, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN map CianwoodCity, TILESET_JOHTO, TOWN, LANDMARK_CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map ManiasHouse, TILESET_HOUSE, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CianwoodGym, TILESET_TOWER, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map CianwoodPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CianwoodPharmacy, TILESET_HOUSE, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CianwoodPhotoStudio, TILESET_HOUSE, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CianwoodLugiaSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map PokeSeersHouse, TILESET_HOUSE, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map BattleTower1F, TILESET_BATTLE_TOWER_INSIDE, INDOOR, LANDMARK_BATTLE_TOWER, MUSIC_BATTLE_TOWER_LOBBY, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map BattleTowerBattleRoom, TILESET_BATTLE_TOWER_INSIDE, INDOOR, LANDMARK_BATTLE_TOWER, MUSIC_BATTLE_TOWER_THEME, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map BattleTowerElevator, TILESET_BATTLE_TOWER_INSIDE, INDOOR, LANDMARK_BATTLE_TOWER, MUSIC_NONE, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map BattleTowerHallway, TILESET_BATTLE_TOWER_INSIDE, INDOOR, LANDMARK_BATTLE_TOWER, MUSIC_BATTLE_TOWER_THEME, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map Route40BattleTowerGate, TILESET_GATE, GATE, LANDMARK_BATTLE_TOWER, MUSIC_ROUTE_36, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map BattleTowerOutside, TILESET_BATTLE_TOWER_OUTSIDE, ROUTE, LANDMARK_BATTLE_TOWER, MUSIC_BATTLE_TOWER_THEME, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map ManiasHouse, TILESET_HOUSE, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CianwoodGym, TILESET_TOWER, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map CianwoodPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CianwoodPharmacy, TILESET_HOUSE, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CianwoodPhotoStudio, TILESET_HOUSE, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CianwoodLugiaSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map PokeSeersHouse, TILESET_HOUSE, INDOOR, LANDMARK_CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map BattleTower1F, TILESET_BATTLE_TOWER_INSIDE, INDOOR, LANDMARK_BATTLE_TOWER, MUSIC_BATTLE_TOWER_LOBBY, TRUE, PALETTE_DAY, FISHGROUP_NONE + map BattleTowerBattleRoom, TILESET_BATTLE_TOWER_INSIDE, INDOOR, LANDMARK_BATTLE_TOWER, MUSIC_BATTLE_TOWER_THEME, TRUE, PALETTE_DAY, FISHGROUP_NONE + map BattleTowerElevator, TILESET_BATTLE_TOWER_INSIDE, INDOOR, LANDMARK_BATTLE_TOWER, MUSIC_NONE, TRUE, PALETTE_DAY, FISHGROUP_NONE + map BattleTowerHallway, TILESET_BATTLE_TOWER_INSIDE, INDOOR, LANDMARK_BATTLE_TOWER, MUSIC_BATTLE_TOWER_THEME, TRUE, PALETTE_DAY, FISHGROUP_NONE + map Route40BattleTowerGate, TILESET_GATE, GATE, LANDMARK_BATTLE_TOWER, MUSIC_ROUTE_36, FALSE, PALETTE_DAY, FISHGROUP_NONE + map BattleTowerOutside, TILESET_BATTLE_TOWER_OUTSIDE, ROUTE, LANDMARK_BATTLE_TOWER, MUSIC_BATTLE_TOWER_THEME, FALSE, PALETTE_AUTO, FISHGROUP_NONE assert_table_length NUM_CIANWOOD_MAPS MapGroup_Viridian: table_width MAP_LENGTH, MapGroup_Viridian - map Route2, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_2, MUSIC_ROUTE_2, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map Route2, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_2, MUSIC_ROUTE_2, FALSE, PALETTE_AUTO, FISHGROUP_NONE map Route22, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_22, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_POND map ViridianCity, TILESET_KANTO, TOWN, LANDMARK_VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_AUTO, FISHGROUP_POND - map ViridianGym, TILESET_TRAIN_STATION, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map ViridianNicknameSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TrainerHouse1F, TILESET_HOUSE, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map TrainerHouseB1F, TILESET_FACILITY, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map ViridianMart, TILESET_MART, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map ViridianPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map ViridianPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route2NuggetHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_2, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route2Gate, TILESET_GATE, GATE, LANDMARK_ROUTE_2, MUSIC_ROUTE_2, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map VictoryRoadGate, TILESET_GATE, GATE, LANDMARK_ROUTE_26, MUSIC_INDIGO_PLATEAU, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map ViridianGym, TILESET_TRAIN_STATION, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map ViridianNicknameSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TrainerHouse1F, TILESET_HOUSE, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map TrainerHouseB1F, TILESET_FACILITY, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map ViridianMart, TILESET_MART, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map ViridianPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map ViridianPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route2NuggetHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_2, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route2Gate, TILESET_GATE, GATE, LANDMARK_ROUTE_2, MUSIC_ROUTE_2, FALSE, PALETTE_DAY, FISHGROUP_NONE + map VictoryRoadGate, TILESET_GATE, GATE, LANDMARK_ROUTE_26, MUSIC_INDIGO_PLATEAU, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_VIRIDIAN_MAPS MapGroup_NewBark: table_width MAP_LENGTH, MapGroup_NewBark map Route26, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_26, MUSIC_ROUTE_26, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN map Route27, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_27, MUSIC_ROUTE_26, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN - map Route29, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_29, MUSIC_ROUTE_29, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map Route29, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_29, MUSIC_ROUTE_29, FALSE, PALETTE_AUTO, FISHGROUP_NONE map NewBarkTown, TILESET_JOHTO, TOWN, LANDMARK_NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN - map ElmsLab, TILESET_LAB, INDOOR, LANDMARK_NEW_BARK_TOWN, MUSIC_PROF_ELM, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map PlayersHouse1F, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map PlayersHouse2F, TILESET_PLAYERS_ROOM, INDOOR, LANDMARK_NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map PlayersNeighborsHouse, TILESET_HOUSE, INDOOR, LANDMARK_NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map ElmsHouse, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route26HealHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_26, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map DayOfWeekSiblingsHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_26, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route27SandstormHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_27, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route29Route46Gate, TILESET_GATE, GATE, LANDMARK_ROUTE_29, MUSIC_ROUTE_29, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map ElmsLab, TILESET_LAB, INDOOR, LANDMARK_NEW_BARK_TOWN, MUSIC_PROF_ELM, FALSE, PALETTE_DAY, FISHGROUP_NONE + map PlayersHouse1F, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map PlayersHouse2F, TILESET_PLAYERS_ROOM, INDOOR, LANDMARK_NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map PlayersNeighborsHouse, TILESET_HOUSE, INDOOR, LANDMARK_NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map ElmsHouse, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route26HealHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_26, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map DayOfWeekSiblingsHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_26, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route27SandstormHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_27, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route29Route46Gate, TILESET_GATE, GATE, LANDMARK_ROUTE_29, MUSIC_ROUTE_29, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_NEW_BARK_MAPS MapGroup_Saffron: table_width MAP_LENGTH, MapGroup_Saffron - map Route5, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_5, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map SaffronCity, TILESET_KANTO, TOWN, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map FightingDojo, TILESET_TRAIN_STATION, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SaffronGym, TILESET_UNDERGROUND, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_SHORE - map SaffronMart, TILESET_MART, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SaffronPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SaffronPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map MrPsychicsHouse, TILESET_HOUSE, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SaffronMagnetTrainStation, TILESET_TRAIN_STATION, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map SilphCo1F, TILESET_FACILITY, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CopycatsHouse1F, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CopycatsHouse2F, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route5UndergroundPathEntrance, TILESET_GATE, GATE, LANDMARK_ROUTE_5, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route5SaffronGate, TILESET_GATE, GATE, LANDMARK_ROUTE_5, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route5CleanseTagHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_5, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map Route5, TILESET_KANTO, ROUTE, LANDMARK_ROUTE_5, MUSIC_ROUTE_3, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map SaffronCity, TILESET_KANTO, TOWN, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_AUTO, FISHGROUP_NONE + map FightingDojo, TILESET_TRAIN_STATION, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SaffronGym, TILESET_UNDERGROUND, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_GYM, TRUE, PALETTE_DAY, FISHGROUP_NONE + map SaffronMart, TILESET_MART, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SaffronPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SaffronPokecenter2FBeta, TILESET_POKECENTER, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map MrPsychicsHouse, TILESET_HOUSE, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SaffronMagnetTrainStation, TILESET_TRAIN_STATION, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map SilphCo1F, TILESET_FACILITY, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CopycatsHouse1F, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CopycatsHouse2F, TILESET_PLAYERS_HOUSE, INDOOR, LANDMARK_SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route5UndergroundPathEntrance, TILESET_GATE, GATE, LANDMARK_ROUTE_5, MUSIC_ROUTE_3, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route5SaffronGate, TILESET_GATE, GATE, LANDMARK_ROUTE_5, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route5CleanseTagHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_5, MUSIC_VIRIDIAN_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_SAFFRON_MAPS MapGroup_Cherrygrove: @@ -527,12 +527,12 @@ MapGroup_Cherrygrove: map Route30, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_30, MUSIC_ROUTE_30, FALSE, PALETTE_AUTO, FISHGROUP_POND map Route31, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_31, MUSIC_ROUTE_30, FALSE, PALETTE_AUTO, FISHGROUP_POND map CherrygroveCity, TILESET_JOHTO, TOWN, LANDMARK_CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - map CherrygroveMart, TILESET_MART, INDOOR, LANDMARK_CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CherrygrovePokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_CHERRYGROVE_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CherrygroveGymSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map GuideGentsHouse, TILESET_HOUSE, INDOOR, LANDMARK_CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map CherrygroveEvolutionSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route30BerryHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_30, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map MrPokemonsHouse, TILESET_FACILITY, INDOOR, LANDMARK_ROUTE_30, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE - map Route31VioletGate, TILESET_GATE, GATE, LANDMARK_ROUTE_31, MUSIC_ROUTE_30, FALSE, PALETTE_DAY, FISHGROUP_SHORE + map CherrygroveMart, TILESET_MART, INDOOR, LANDMARK_CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CherrygrovePokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_CHERRYGROVE_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CherrygroveGymSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map GuideGentsHouse, TILESET_HOUSE, INDOOR, LANDMARK_CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map CherrygroveEvolutionSpeechHouse, TILESET_HOUSE, INDOOR, LANDMARK_CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route30BerryHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_30, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map MrPokemonsHouse, TILESET_FACILITY, INDOOR, LANDMARK_ROUTE_30, MUSIC_CHERRYGROVE_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE + map Route31VioletGate, TILESET_GATE, GATE, LANDMARK_ROUTE_31, MUSIC_ROUTE_30, FALSE, PALETTE_DAY, FISHGROUP_NONE assert_table_length NUM_CHERRYGROVE_MAPS diff --git a/data/wild/fish.asm b/data/wild/fish.asm index 3833c4fe5b4..117cdbb4255 100644 --- a/data/wild/fish.asm +++ b/data/wild/fish.asm @@ -231,3 +231,101 @@ TimeFishGroups: db HORSEA, 40, HORSEA, 40 ; 19 db TENTACOOL, 20, TENTACOOL, 20 ; 20 db TENTACOOL, 40, TENTACOOL, 40 ; 21 + +FishGroups_Names:: + table_width 2, FishGroups_Names + dw Group1_Name + dw Group2_Name + dw Group3_Name + dw Group4_Name + dw Group5_Name + dw Group6_Name + dw Group7_Name + dw Group8_Name + dw Group9_Name + dw Group10_Name + dw Group11_Name + dw Group12_Name + dw Group13_Name + assert_table_length NUM_FISHGROUPS ; (13, NONE is not included in the count) + +Group1_Name: + db "SHORE@" +Group2_Name: + db "OCEAN@" +Group3_Name: + db "LAKE@" +Group4_Name: + db "POND@" +Group5_Name: + db "DRATINI@" +Group6_Name: + db "QWILFISH S@" +Group7_Name: + db "REMORAID S@" +Group8_Name: + db "GYARADOS@" +Group9_Name: + db "DRATINI 2@" +Group10_Name: + db "WHIRL@" +Group11_Name: + db "QWILFISH@" +Group12_Name: + db "REMORAID@" +Group13_Name: + db "QWILFISH 2@" + +GetFishGroupName: +; given fishing group num in 'a' +; return str ptr in 'de' + dec a + add a ; doubles the index since ptrs are 2 bytes + ld hl, FishGroups_Names + ld d, 0 + ld e, a + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ret + +GetMapsFishGroup:: + dec d ; map num + dec e ; map group + push de + ld d, 0 + ; 'e' is the map group + ld hl, MapGroupPointers + add hl, de ; since ptrs are 2 bytes, double the index + add hl, de + ld a, BANK(MapGroupPointers) + call GetFarWord + pop de + ld a, d ; map num becomes the index, do the same as map group + ld bc, MAP_LENGTH + ; hl is pointing to map group ptr + call AddNTimes ; Add bc * a to hl. + ; fish group is the very last byte in the entry + ld bc, MAP_LENGTH - 1 + add hl, bc + ld a, BANK(MapGroupPointers) + call GetFarByte + ; ld a, [hl] ; fishing group + cp FISHGROUP_NONE + jr z, .fishgroup_none + call GetFishGroupName + ; ptr to fishgroup name is in de + ret +.fishgroup_none + xor a + ld d, a + ld e, a + ret + +; GetNextMapName_FishGroup: +; given: Fish group +; given: page number + num already printed +; calculate the map number of next map entry with that fishing group +; get map name based on map index +; return: map name ptr in 'de' \ No newline at end of file diff --git a/engine/gfx/cgb_layouts.asm b/engine/gfx/cgb_layouts.asm index a963947afbf..f097ce0bc0d 100644 --- a/engine/gfx/cgb_layouts.asm +++ b/engine/gfx/cgb_layouts.asm @@ -35,6 +35,8 @@ CGBLayoutJumptable: dw _CGB_PokegearPals dw _CGB_StatsScreenHPPals dw _CGB_Pokedex + dw _CGB_Pokedex_EvoPage + dw _CGB_Pokedex_PicsPage dw _CGB_SlotMachine dw _CGB_BetaTitleScreen dw _CGB_GSIntro @@ -342,7 +344,8 @@ INCLUDE "gfx/stats/stats.pal" _CGB_Pokedex: ld de, wBGPals1 - ld a, PREDEFPAL_POKEDEX + ; ld a, PREDEFPAL_POKEDEX + call CheckPokedexColor call GetPredefPal call LoadHLPaletteIntoDE ; dex interface palette ld a, [wCurPartySpecies] @@ -354,6 +357,14 @@ _CGB_Pokedex: .is_pokemon call GetMonPalettePointer + ld a, [wPokedexShinyToggle] + bit 0, a + jr z, .not_shiny + inc hl + inc hl + inc hl + inc hl +.not_shiny call LoadPalette_White_Col1_Col2_Black ; mon palette ; black background for Pal 7 ld de, wBGPals1 palette 7 ; First color slot of Pal 7 @@ -373,11 +384,18 @@ _CGB_Pokedex: ; mon type 2 ld a, [wBaseType2] ld c, a ; farcall will clobber a for the bank + ld a, [wBaseType1] + cp c + jr z, .same_type farcall GetMonTypeIndex ; load the 2nd type pal ; type index is already in c ld de, wBGPals1 palette 7 + 4 ; slot 3 of pal 7 - farcall LoadMonBaseTypePal ; loads type color into slot 3 of pal 7 + farcall LoadMonBaseTypePal ; loads type color into slot 3 of pal 7 + jr .got_palette +.same_type + ld de, wBGPals1 palette 7 + 4 ; slot 3 of pal 7 + call LoadSingleBlackPal .got_palette call WipeAttrmap hlcoord 1, 1, wAttrmap @@ -385,11 +403,25 @@ _CGB_Pokedex: ld a, $1 ; green question mark palette call FillBoxCGB - ; Both mon types - ; if no 2nd Type, those 4 Squares will appear normally as blank Black Tiles - hlcoord 9, 1, wAttrmap - lb bc, 1, 8 ; box 1 tile in HEIGHT, 8 tiles in WIDTH + ; ; Both mon types + ; ; if no 2nd Type, those 4 Squares will appear normally as blank Black Tiles + ; hlcoord 9, 1, wAttrmap + ; lb bc, 1, 8 ; box 1 tile in HEIGHT, 8 tiles in WIDTH + ; ld a, $7 ; mon base type pals + ; call FillBoxCGB + +; mon base types + hlcoord 9, 6, wAttrmap + lb bc, 1, 8 ld a, $7 ; mon base type pals + set 3, a ; VRAM 1 + call FillBoxCGB + +; page nums + hlcoord 18, 7, wAttrmap + lb bc, 1, 2 + ld a, $0 ; dex pal + set 3, a ; vram1 call FillBoxCGB call InitPartyMenuOBPals @@ -404,6 +436,189 @@ _CGB_Pokedex: ldh [hCGBPalUpdate], a ret +_CGB_Pokedex_EvoPage: + call WipeAttrmap + + ld de, wBGPals1 + ld a, PREDEFPAL_POKEDEX + call GetPredefPal + call LoadHLPaletteIntoDE ; dex interface palette + + ld de, wBGPals1 palette 6 + ld a, PREDEFPAL_POKEDEX + call GetPredefPal + call LoadHLPaletteIntoDE ; dex interface palette + + ; ld de, wBGPals1 palette 6 + ; call LoadSingleBlackPal +; main screen within border, vram 1 + hlcoord 1, 1, wAttrmap + lb bc, 16, 19 + ld a, 0 + set 3, a + call FillBoxCGB + +; mon slot 1 types + hlcoord 16, 2, wAttrmap + lb bc, 2, 4 + ld a, 1 + set 3, a + call FillBoxCGB +; mon slot 2 types + hlcoord 16, 5, wAttrmap + lb bc, 2, 4 + ld a, 2 + set 3, a + call FillBoxCGB +; mon slot 3 types + hlcoord 16, 8, wAttrmap + lb bc, 3, 4 + ld a, 3 + set 3, a + call FillBoxCGB +; mon slot 4 types + hlcoord 16, 12, wAttrmap + lb bc, 3, 4 + ld a, 4 + set 3, a + call FillBoxCGB + + call InitPartyMenuOBPals + call ApplyAttrmap + call ApplyPals + ld a, TRUE + ldh [hCGBPalUpdate], a + ret + +_CGB_Pokedex_PicsPage: + call WipeAttrmap + ld de, wBGPals1 + ld a, PREDEFPAL_POKEDEX + call GetPredefPal + call LoadHLPaletteIntoDE ; dex interface palette +; pokemon pals + ld a, [wCurPartySpecies] + call GetMonPalettePointer + ld a, [wPokedexShinyToggle] + bit 0, a + jr z, .not_shiny + inc hl + inc hl + inc hl + inc hl +.not_shiny + call LoadPalette_White_Col1_Col2_Black ; mon palette +; secondary pokedex pal + ld de, wBGPals1 palette 6 + ld a, PREDEFPAL_POKEDEX + call GetPredefPal + call LoadHLPaletteIntoDE ; dex interface palette + + ld de, wBGPals1 palette 6 + call LoadSingleBlackPal +; black background + ld de, wBGPals1 palette 7 + call LoadSingleBlackPal + +; animated front pic + hlcoord 0, 0, wAttrmap + lb bc, 9, 9 + ld a, 0 + set 3, a + call FillBoxCGB +; animated front pic + hlcoord 1, 1, wAttrmap + lb bc, 7, 7 + ld a, 1 + set 3, a + call FillBoxCGB + +; back pic border + hlcoord 10, 0, wAttrmap + lb bc, 9, 9 + ld a, 0 + set 3, a + call FillBoxCGB +; ; back pic + hlcoord 11, 2, wAttrmap + lb bc, 6, 6 + ld a, 1 + set 3, a + call FillBoxCGB + + +; sprite box border + hlcoord 1, 13, wAttrmap + lb bc, 4, 4 + ld a, 0 + set 3, a + call FillBoxCGB +; sprite box + ; hlcoord 2, 14 + ; lb bc, 2, 2 + ; ld a, 0 + ; call FillBoxCGB + + call InitPartyMenuOBPals + call ApplyAttrmap + call ApplyPals + ld a, TRUE + ldh [hCGBPalUpdate], a + ret + +CheckPokedexColor: + ld a, [wCurPokedexColor] + cp DEXCOLOR_BLUE + jr nz, .Purple + ld a, PREDEFPAL_TRADE_TUBE + ret + +.Purple + cp DEXCOLOR_PURPLE + jr nz, .Brown + ld a, PREDEFPAL_RB_PURPLEMON + ret + +.Brown + cp DEXCOLOR_BROWN + jr nz, .Green + ld a, PREDEFPAL_RB_BROWNMON + ret + +.Green + cp DEXCOLOR_GREEN + jr nz, .Pink + ld a, PREDEFPAL_RB_GREENMON + ret + +.Pink + cp DEXCOLOR_PINK + jr nz, .Yellow + ld a, PREDEFPAL_RB_PINKMON + ret + +.Yellow + cp DEXCOLOR_YELLOW + jr nz, .Cyan + ld a, PREDEFPAL_RB_YELLOWMON + ret + +.Cyan + cp DEXCOLOR_CYAN + jr nz, .Gray + ld a, PREDEFPAL_RB_CYANMON + ret + +.Gray + cp DEXCOLOR_GRAY + jr nz, .Red + ld a, PREDEFPAL_CGB_BADGE + ret + +.Red + ld a, PREDEFPAL_POKEDEX + ret + PokedexQuestionMarkPalette: INCLUDE "gfx/pokedex/question_mark.pal" @@ -1111,7 +1326,8 @@ _CGB_BetaPikachuMinigame: _CGB_PokedexSearchOption: ld de, wBGPals1 - ld a, PREDEFPAL_POKEDEX + call CheckPokedexColor + ; ld a, PREDEFPAL_POKEDEX call GetPredefPal call LoadHLPaletteIntoDE call WipeAttrmap diff --git a/engine/gfx/color.asm b/engine/gfx/color.asm index 5c1d76c6f94..bc8d1eb91c5 100644 --- a/engine/gfx/color.asm +++ b/engine/gfx/color.asm @@ -73,6 +73,71 @@ LoadMonBaseTypePal: ld bc, 2 jp FarCopyColorWRAM +LoadDexTypePals: + ; ldh a, [rSVBK] + ; push af + ; ld a, BANK(wBGPals1) + ; ldh [rSVBK], a + ; ld a, LOW(PALRGB_WHITE) + ; ld [de], a + ; inc de + ; ld a, HIGH(PALRGB_WHITE) + ; ld [de], a + ; inc de + ; pop af + ; ldh [rSVBK], a + ldh a, [rSVBK] + push af + ld a, BANK(wBGPals1) + ldh [rSVBK], a + xor a + ld [de], a + inc de + ld [de], a + inc de + pop af + ldh [rSVBK], a + + ld hl, TypeIconPals + ld a, b + add a + push bc + ld c, a + ld b, 0 + add hl, bc + ld bc, 2 + push de + call FarCopyColorWRAM + pop de + + ld hl, TypeIconPals + pop bc + ld a, c + add a + ld c, a + ld b, 0 + add hl, bc + inc de + inc de + ld bc, 2 + push de + call FarCopyColorWRAM + pop de + inc de + inc de + + ldh a, [rSVBK] + push af + ld a, BANK(wBGPals1) + ldh [rSVBK], a + xor a + ld [de], a + inc de + ld [de], a + inc de + pop af + ldh [rSVBK], a + ret LoadSingleBlackPal: ; Destination address of the Palette and Slot is passed in 'de' ldh a, [rSVBK] diff --git a/engine/gfx/mon_icons.asm b/engine/gfx/mon_icons.asm index ca0a801587c..f47088b7025 100644 --- a/engine/gfx/mon_icons.asm +++ b/engine/gfx/mon_icons.asm @@ -22,7 +22,7 @@ SetMenuMonIconColor: ld [wCurPartySpecies], a call GetMenuMonIconPalette ld hl, wShadowOAMSprite00Attributes - jr _ApplyMenuMonIconColor + jp _ApplyMenuMonIconColor SetMenuMonIconColor_NoShiny: push hl @@ -35,8 +35,51 @@ SetMenuMonIconColor_NoShiny: and a call GetMenuMonIconPalette_PredeterminedShininess ld hl, wShadowOAMSprite00Attributes - jr _ApplyMenuMonIconColor + jp _ApplyMenuMonIconColor +SetDexMonIconColor_NoShiny: + push hl + push de + push bc + push af + + ld a, [wTempIconSpecies] + ld [wCurPartySpecies], a + and a + call GetMenuMonIconPalette_PredeterminedShininess + ld hl, wShadowOAMSprite00Attributes + push af + ldh a, [hObjectStructIndex] + swap a + ld d, 0 + ld e, a + add hl, de + pop af + jp _ApplyMenuMonIconColor +SetDexMonIconColor_SpritePage: + push hl + push de + push bc + push af + + ld a, [wTempIconSpecies] + ld [wCurPartySpecies], a + and a + ld hl, wPokedexShinyToggle + bit 0, [hl] + jr z, .not_shiny + scf +.not_shiny + call GetMenuMonIconPalette_PredeterminedShininess + ld hl, wShadowOAMSprite00Attributes + push af + ldh a, [hObjectStructIndex] + swap a + ld d, 0 + ld e, a + add hl, de + pop af + jp _ApplyMenuMonIconColor LoadPartyMenuMonIconColors: push hl push de @@ -154,7 +197,7 @@ LoadMenuMonIcon: dw Trade_LoadMonIconGFX ; MONICON_TRADE dw Mobile_InitAnimatedMonIcon ; MONICON_MOBILE1 dw Mobile_InitPartyMenuBGPal71 ; MONICON_MOBILE2 - dw Unused_GetPartyMenuMonIcon ; MONICON_UNUSED + dw Pokedex_InitAnimatedMonIcon ; MONICON_UNUSED Unused_GetPartyMenuMonIcon: call InitPartyMenuIcon @@ -362,6 +405,54 @@ MoveList_InitAnimatedMonIcon: ld [hl], SPRITE_ANIM_FUNC_NULL ret +Pokedex_InitAnimatedMonIcon: + ld a, [wCurPartySpecies] + push af + ld a, [wTempSpecies] + ld [wCurPartySpecies], a + call SetDexMonIconColor_NoShiny + + ld a, [wTempIconSpecies] + call ReadMonMenuIcon + ld [wCurIcon], a + call GetMemIconGFX + + ld a, [wStatsScreenFlags] + cp 11 + jr nz, .evo_page + ld a, -1 + ld [wStatsScreenFlags], a + ld d, $88 + ld e, $20 + jr .setxdone +.evo_page + ld a, [wStatsScreenFlags] + inc a +; y coord + ld c, 32 + call SimpleMultiply + add $28 ;$20 + ld d, a +; x coord + ld e, $19 ; $20 +.setxdone +; type is partymon icon + ld a, SPRITE_ANIM_OBJ_PARTY_MON + call _InitSpriteAnimStruct + + ld a, [wCurIconTile] + sub 10 + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld [hl], SPRITE_ANIM_FUNC_NULL + + pop af + ld [wCurPartySpecies], a + ret Trade_LoadMonIconGFX: ld a, [wTempIconSpecies] call ReadMonMenuIcon diff --git a/engine/gfx/sgb_layouts.asm b/engine/gfx/sgb_layouts.asm index e2d899e69d3..c100b778c82 100644 --- a/engine/gfx/sgb_layouts.asm +++ b/engine/gfx/sgb_layouts.asm @@ -28,6 +28,8 @@ SGBLayoutJumptable: dw .SGB_PokegearPals dw .SGB_StatsScreenHPPals dw .SGB_Pokedex + dw .SGB_Pokedex_EvoPage + dw .SGB_Pokedex_PicsPage dw .SGB_SlotMachine dw .SGB_BetaTitleScreen dw .SGB_GSIntro @@ -225,7 +227,9 @@ SGBLayoutJumptable: ld hl, wSGBPals ld de, BlkPacket_Pokedex_PC ret - +.SGB_Pokedex_EvoPage: +.SGB_Pokedex_PicsPage: + ret .SGB_BillsPC: ld hl, PalPacket_Pal01 ld de, wSGBPals diff --git a/engine/pokedex/pokedex.asm b/engine/pokedex/pokedex.asm index 0629f0ee753..e3aac73f804 100644 --- a/engine/pokedex/pokedex.asm +++ b/engine/pokedex/pokedex.asm @@ -13,6 +13,8 @@ const DEXSTATE_UPDATE_SEARCH_RESULTS_SCR const DEXSTATE_UNOWN_MODE const DEXSTATE_UPDATE_UNOWN_MODE + const DEXSTATE_COLOR_OPTION + const DEXSTATE_UPDATE_COLOR_OPTION const DEXSTATE_EXIT DEF POKEDEX_SCX EQU 5 @@ -61,6 +63,9 @@ Pokedex: ld a, [wCurDexMode] ld [wLastDexMode], a + xor a + ld [wPokedexShinyToggle], a + pop af ldh [hInMenu], a pop af @@ -202,6 +207,8 @@ Pokedex_RunJumptable: dw Pokedex_UpdateSearchResultsScreen dw Pokedex_InitUnownMode dw Pokedex_UpdateUnownMode + dw Pokedex_InitColorOption + dw Pokedex_UpdateColorOption dw Pokedex_Exit Pokedex_IncrementDexPointer: @@ -326,27 +333,27 @@ Pokedex_UpdateMainScreen: Pokedex_InitDexEntryScreen: call LowVolume xor a ; page 1 - ld [wPokedexStatus], a - xor a + ld [wPokedexStatus], a ; moves machines index + ld [wPokedexEntryPageNum], a + ld [wPokedexEntryType], a + ld [wPokedexEvoStage2], a + ld [wPokedexEvoStage3], a ldh [hBGMapMode], a call ClearSprites - call Pokedex_GetSelectedMon ld [wCurPartySpecies], a ld a, SCGB_POKEDEX call Pokedex_GetSGBLayout - call Pokedex_LoadCurrentFootprint call Pokedex_DrawDexEntryScreenBG call Pokedex_InitArrowCursor call Pokedex_GetSelectedMon ld [wPrevDexEntry], a - farcall DisplayDexEntry call Pokedex_DrawFootprint + farcall DisplayDexEntry call WaitBGMap ld a, $a7 ldh [hWX], a - ld a, [wCurPartySpecies] call PlayMonCry call Pokedex_IncrementDexPointer @@ -363,6 +370,12 @@ Pokedex_UpdateDexEntryScreen: ld a, [hl] and A_BUTTON jr nz, .do_menu_action + ld a, [hl] + and SELECT ; + call nz, Pokedex_toggle_shininess_Entry + ld a, [hl] ; + and START ; + jp nz, Area_Page_map ; .toCry ; call Pokedex_NextOrPreviousDexEntry ret nc call Pokedex_IncrementDexPointer @@ -380,36 +393,160 @@ Pokedex_UpdateDexEntryScreen: jr z, .max_volume ld a, MAX_VOLUME ld [wLastVolume], a - .max_volume call MaxVolume ld a, [wPrevDexEntryJumptableIndex] ld [wJumptableIndex], a ret +; .toCry: +; call Pokedex_GetSelectedMon +; ld a, [wTempSpecies] +; call GetCryIndex +; ld e, c +; ld d, b +; call PlayCry +; ret + Pokedex_Page: - ld a, [wPokedexStatus] - xor 1 ; toggle page - ld [wPokedexStatus], a call Pokedex_GetSelectedMon ld [wPrevDexEntry], a farcall DisplayDexEntry - call WaitBGMap + ret + +Pokedex_toggle_shininess_Entry: + call Pokedex_toggle_shininess1 +; refresh palettes + ld a, SCGB_POKEDEX + call Pokedex_GetSGBLayout + call Pokedex_toggle_shininess2 + ret + +Pokedex_toggle_shininess_Pics: + call Pokedex_toggle_shininess1 +; refresh palettes + ld a, SCGB_POKEDEX_PICS + call Pokedex_GetSGBLayout + call Pokedex_toggle_shininess2 + ret + +Pokedex_toggle_shininess1: +; toggle the current shininess setting + ld hl, wPokedexShinyToggle + bit 0, [hl] + jr z, .set + ; already set, so clear it + res 0, [hl] + ret + ; jr .update_palettes +.set ; bit is not set, so set it + set 0, [hl] + ret +Pokedex_toggle_shininess2: +; play sound based on setting + ld de, SFX_BUMP + ld a, [wPokedexShinyToggle] + bit 0, a + jr z, .got_sound + ld de, SFX_SHINE +.got_sound + call PlaySFX + call WaitSFX ret Pokedex_ReinitDexEntryScreen: ; Reinitialize the Pokédex entry screen after changing the selected mon. call Pokedex_BlackOutBG - xor a ; page 1 - ld [wPokedexStatus], a - xor a - ldh [hBGMapMode], a + ; xor a + ; ldh [hBGMapMode], a call Pokedex_DrawDexEntryScreenBG - call Pokedex_InitArrowCursor call Pokedex_LoadCurrentFootprint call Pokedex_GetSelectedMon ld [wPrevDexEntry], a +.skip + ld a, [wPokedexEntryType] + cp DEXENTRY_PICS + jr c, .pics + ; find first area entry or none? + xor a + ld [wPokedexEntryPageNum], a + ld a, DEXENTRY_PICS + ld [wPokedexEntryType], a + call Area_Page + jr .cont +.pics + ld a, [wPokedexEntryType] + cp DEXENTRY_PICS + jr nz, .evo + xor a + ld [wPokedexEntryPageNum], a + call Pics_Page + jr .cont +.evo + ld a, [wPokedexEntryType] + cp DEXENTRY_EVO + jr nz, .lore +.evo2 + xor a + ld [wPokedexEntryPageNum], a + call Evos_Page + jr .cont + +.lore + cp DEXENTRY_LORE + jr nz, .basestats_check + xor a + ld [wPokedexEntryPageNum], a farcall DisplayDexEntry + jr .cont +.basestats_check + ; so we can preserve the place for easy swithing when comparing base stats + ; since each mon will have the same number and layout of base stats + ld a, [wPokedexEntryType] + cp DEXENTRY_BASESTATS + jr nz, .moves + + ; dec page, since it's auto inc'd after printing + ld a, [wPokedexEntryPageNum] + dec a + ld b, a + ld a, $3 ; currently max supported possible pages (we have tiles for up to 9 tho) + ; by dec'ing the current page num, we could now have -1 (255) + cp b + jr nc, .basestats + ; so if carry flag set, we know we had been on page 4, and after printing it became 4 + ld b, $3 ; page index for page 4, our max page +.basestats + ld a, b + ld [wPokedexEntryPageNum], a + farcall DisplayDexMonStats + jr .cont + +; if not lore or base stats, it's moves +.moves + ; for moves, we can have different numbers of pages. + ; but we can at least keep them on the first move page of the category they were in + ; roll back category if page is 0 + ; since it auto inc's category and xors page num after printing last page of move category + ld a, [wPokedexEntryPageNum] + and a + jr nz, .moves_done +; .rollbackcategory + ld a, [wPokedexEntryType] + dec a ; make sure the order of the consts is right!!! + ld [wPokedexEntryType], a + cp DEXENTRY_BASESTATS + jr nz, .moves_done + ; if a is now DEXENTRY_BASESTATS, we know we were in LVLUP moves category + ; meaning, the last actuall printed category was for the last const, DEXENTRY_MTS + ld a, DEXENTRY_MTS + ld [wPokedexEntryType], a +.moves_done + xor a + ld [wPokedexEntryPageNum], a + ld [wPokedexStatus], a ; moves machines index + farcall DisplayDexMonMoves +.cont call Pokedex_DrawFootprint call Pokedex_LoadSelectedMonTiles call WaitBGMap @@ -421,22 +558,64 @@ Pokedex_ReinitDexEntryScreen: call PlayMonCry ld hl, wJumptableIndex dec [hl] + ld a, [wLastDexMode] + cp -2 + jp z, Pokedex_Handle_Reinit_Evo + ret + +Pokedex_Handle_Reinit_Evo: + ld a, [wCurDexMode] + ld [wLastDexMode], a + jp Pokedex_IncrementDexPointer ret DexEntryScreen_ArrowCursorData: - db D_RIGHT | D_LEFT, 4 - dwcoord 1, 17 ; PAGE - dwcoord 6, 17 ; AREA - dwcoord 11, 17 ; CRY - dwcoord 15, 17 ; PRNT + db D_RIGHT | D_LEFT, 6 + dwcoord 1, 17 ; INFO + dwcoord 4, 17 ; STAT + dwcoord 7, 17 ; MOVES + dwcoord 11, 17 ; AREA + dwcoord 14, 17 ; EVO + dwcoord 17, 17 ; PICS DexEntryScreen_MenuActionJumptable: dw Pokedex_Page - dw .Area - dw .Cry - dw .Print + dw BaseStat_Page + dw Moves_Page + dw Area_Page + dw Evos_Page + dw Pics_Page ; .SpriteAnim + +BaseStat_Page: + call Pokedex_GetSelectedMon + farcall DisplayDexMonStats + ret + +Moves_Page: + call Pokedex_GetSelectedMon + farcall DisplayDexMonMoves + ld a, [wCurPartySpecies] + ld [wCurSpecies], a + ld [wTempSpecies], a + ld [wTempMonSpecies], a + ret + +Area_Page: + ld a, [wPrevDexEntryJumptableIndex] ; same ram as wStatsScreenFlags + push af + call Pokedex_GetSelectedMon + xor a + ldh [hBGMapMode], a + farcall Pokedex_DetailedArea + call WaitBGMap + pop af + ld [wPrevDexEntryJumptableIndex], a ; same ram as wStatsScreenFlags + ret -.Area: +Area_Page_map: + ld a, [wPrevDexEntryJumptableIndex] ; same ram as wStatsScreenFlags + push af + call LoadTilemapToTempTilemap call Pokedex_BlackOutBG xor a ldh [hSCX], a @@ -465,45 +644,336 @@ DexEntryScreen_MenuActionJumptable: ld [wCurPartySpecies], a ld a, SCGB_POKEDEX call Pokedex_GetSGBLayout + pop af + ld [wPrevDexEntryJumptableIndex], a ; same ram as wStatsScreenFlags ret -.Cry: - ld a, [wCurPartySpecies] - call PlayMonCry - ret +Evos_Page: + ld a, [wPrevDexEntryJumptableIndex] ; same ram as wStatsScreenFlags + ld b, a + ld a, [wPokedexEntryType] + ld c, a + ld a, [wPokedexEntryPageNum] + ld d, a + push bc + push de -.Print: - call Pokedex_ApplyPrintPals xor a - ldh [hSCX], a - ld a, [wPrevDexEntryBackup] - push af - ld a, [wPrevDexEntryJumptableIndex] - push af - ld a, [wJumptableIndex] + ld [wStatsScreenFlags], a + ld a, [wLastDexMode] + cp -1 + jr z, .handle_recursed + cp -2 + jr z, .skip + ld a, [wCurDexMode] + ld [wLastDexMode], a + jr .skip +.handle_recursed + ld a, -2 + ld [wLastDexMode], a +.skip + call LoadTilemapToTempTilemap + call Pokedex_BlackOutBG + ; hlcoord 0, 0 + ; lb bc, SCREEN_HEIGHT, SCREEN_WIDTH + ; call ClearBox + xor a + ldh [hBGMapMode], a + ld [wCurDamage], a + ld [wCurDamage + 1], a + hlcoord 0, 0 + lb bc, SCREEN_HEIGHT, SCREEN_WIDTH + call ClearBox + call WaitBGMap + xor a + ldh [hBGMapMode], a + farcall HDMATransferTilemapToWRAMBank3 + ; xor a + ; ldh [hSCX], a + ; call DelayFrame + ; ld a, $7 + ; ldh [hWX], a + ; ld a, $90 + ; ldh [hWY], a + + ld a, $1 + ldh [rVBK], a + ld de, Pokedex_ExtraTiles ; tile 19 + ld hl, vTiles2 tile $62 ; $76 + lb bc, BANK(Pokedex_ExtraTiles), 30 ; 10 + call Request2bpp +; replace icon borders for evo page + ld de, Pokedex_ExtraTiles tile 32 + ld hl, vTiles2 tile $77 + lb bc, BANK(Pokedex_ExtraTiles), 4 + call Request2bpp + ld de, Pokedex_ExtraTiles tile 36 + ld hl, vTiles2 tile $7d + lb bc, BANK(Pokedex_ExtraTiles), 2 + call Request2bpp + + call Pokedex_LoadInversedFont + ld a, $0 + ldh [rVBK], a + call DelayFrame + + ld a, SCGB_POKEDEX_EVO + call Pokedex_GetSGBLayout +.nextpage_jump + xor a + ldh [hBGMapMode], a + call ClearSprites + call Pokedex_GetSelectedMon + ld [wCurPartySpecies], a push af - farcall PrintDexEntry - pop af - ld [wJumptableIndex], a - pop af - ld [wPrevDexEntryJumptableIndex], a + farcall DisplayDexMonEvos + call WaitBGMap pop af - ld [wPrevDexEntryBackup], a - call ClearBGPalettes - call DisableLCD - call Pokedex_LoadInvertedFont + ld [wCurPartySpecies], a + ld [wTempSpecies], a + ld [wCurSpecies], a + ld [wTempMonSpecies], a + ld a, DEXENTRY_EVO + ld [wPokedexEntryType], a +.evopage_loop + callfar PlaySpriteAnimations + call JoyTextDelay + ld hl, hJoyPressed + ld a, [hl] + bit B_BUTTON_F, a + jr nz, .evo_exit + ld a, [wStatsScreenFlags] ; page/continue evo line flag + and a + jr z, .no_second_page + ld hl, hJoyPressed + ld a, [hl] + bit A_BUTTON_F, a + jp nz, .right_dpad + ld hl, hJoyLast + ld a, [hl] + and D_RIGHT + jp nz, .right_dpad + ld a, [hl] +.no_second_page + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .up_or_down_pressed + ld a, [hl] + and D_DOWN + jr nz, .up_or_down_pressed + call DelayFrame + jr .evopage_loop +.up_or_down_pressed + ld a, -1 + ld [wLastDexMode], a + call Pokedex_NextOrPreviousDexEntry + call Pokedex_GetSelectedMon + ld [wCurPartySpecies], a +.evo_exit + call Pokedex_BlackOutBG + call DelayFrame + xor a + ldh [hBGMapMode], a + call ClearSprites + call Pokedex_LoadCurrentFootprint + call Pokedex_DrawFootprint + call Pokedex_LoadPageNums + ld a, $90 + ldh [hWY], a + ld a, POKEDEX_SCX + ldh [hSCX], a + farcall DrawDexEntryScreenRightEdge + call DelayFrame call Pokedex_RedisplayDexEntry - call EnableLCD + call Pokedex_LoadSelectedMonTiles + call Pokedex_GetSelectedMon + ld [wCurPartySpecies], a + ld a, SCGB_POKEDEX + call Pokedex_GetSGBLayout + pop de + pop bc + ld a, b + ld [wPrevDexEntryJumptableIndex], a ; same ram as wStatsScreenFlags + ld a, c + ld [wPokedexEntryType], a + ld a, d + ld [wPokedexEntryPageNum], a + ld a, [wLastDexMode] + cp -1 + call z, Evos_Page + cp -2 + jp z, Pokedex_ReinitDexEntryScreen call WaitBGMap + ret +.right_dpad + ld a, [wCurDamage + 1] + cp -1 + jp nz, .inc_evopage; .nextpage_jump + xor a + ld [wCurDamage], a + jp .nextpage_jump +.inc_evopage + ld a, [wCurDamage] + inc a + ld [wCurDamage], a + jp .nextpage_jump + +; SpriteAnim: +Pics_Page: + ld a, [wPrevDexEntryJumptableIndex] ; same ram as wStatsScreenFlags + ld b, a + ld a, [wPokedexEntryType] + ld c, a + ld a, [wPokedexEntryPageNum] + ld d, a + push bc + push de + ld a, [wLastDexMode] + cp -1 + jr z, .handle_recursed + cp -2 + jr z, .skip + ld a, [wCurDexMode] + ld [wLastDexMode], a + jr .skip +.handle_recursed + ld a, -2 + ld [wLastDexMode], a +.skip + call LoadTilemapToTempTilemap + hlcoord 0, 0 + lb bc, SCREEN_HEIGHT, SCREEN_WIDTH + call ClearBox + call Pokedex_BlackOutBG + farcall HDMATransferTilemapToWRAMBank3 + call ClearSprites + call DisableSpriteUpdates + callfar ClearSpriteAnims2 + xor a + ldh [hBGMapMode], a + ldh [hSCX], a + ld a, $7 + ldh [hWX], a + ld a, $90 + ldh [hWY], a + + ld a, $1 + ldh [rVBK], a + ld de, Pokedex_ExtraTiles tile 21 + ld hl, vTiles2 tile $77 + lb bc, BANK(Pokedex_ExtraTiles), 9 + call Request2bpp + ld a, $0 + ldh [rVBK], a + + ld a, [wCurPartySpecies] + ld [wCurSpecies], a + ld [wTempSpecies], a + ld [wTempMonSpecies], a + call GetBaseData + ld a, SCGB_POKEDEX_PICS + call Pokedex_GetSGBLayout + call Pokedex_GetSelectedMon + + hlcoord 0, 0 + lb bc, SCREEN_HEIGHT, SCREEN_WIDTH + call ClearBox + + hlcoord 1, 9 + call GetPokemonName + call PlaceString + farcall Pokedex_PlaceBackPic + xor a + ld [wStatsScreenFlags], a + farcall Pokedex_PlaceAnimatedFrontpic + farcall Dex_Pics_DrawBorder + call WaitBGMap + farcall Pokedex_place_Mon_Icon + callfar PlaySpriteAnimations + farcall Pokedex_PlayMonCry_AnimateFrontpic +.spritepage_loop + callfar PlaySpriteAnimations + call JoyTextDelay + ld hl, hJoyPressed + ld a, [hl] + and SELECT ; + jp nz, .toggle_shininess + ld a, [hl] + bit B_BUTTON_F, a + jr nz, .sprite_b + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .up_or_down_pressed + ld a, [hl] + and D_DOWN + jr nz, .up_or_down_pressed + call DelayFrame + jr .spritepage_loop +.up_or_down_pressed + ld a, -1 + ld [wLastDexMode], a + call Pokedex_NextOrPreviousDexEntry + call Pokedex_GetSelectedMon + ld [wCurPartySpecies], a + pop de + pop bc + ld a, b + ld [wPrevDexEntryJumptableIndex], a ; same ram as wStatsScreenFlags + ld a, c + ld [wPokedexEntryType], a + ld a, d + ld [wPokedexEntryPageNum], a + jp Pics_Page +.sprite_b + call Pokedex_BlackOutBG + call DelayFrame + xor a + ldh [hBGMapMode], a + call ClearSprites + call Pokedex_LoadCurrentFootprint + call Pokedex_DrawFootprint + call Pokedex_LoadPageNums + ld a, $90 + ldh [hWY], a ld a, POKEDEX_SCX ldh [hSCX], a - call Pokedex_ApplyUsualPals + farcall DrawDexEntryScreenRightEdge + call DelayFrame + call Pokedex_RedisplayDexEntry + call Pokedex_LoadSelectedMonTiles + call Pokedex_GetSelectedMon + ld [wCurPartySpecies], a + ld a, SCGB_POKEDEX + call Pokedex_GetSGBLayout + pop de + pop bc + ld a, b + ld [wPrevDexEntryJumptableIndex], a ; same ram as wStatsScreenFlags + ld a, c + ld [wPokedexEntryType], a + ld a, d + ld [wPokedexEntryPageNum], a + ld a, [wLastDexMode] + cp -2 + jp z, Pokedex_ReinitDexEntryScreen + call WaitBGMap ret +.toggle_shininess: + xor a + ldh [hBGMapMode], a + call Pokedex_toggle_shininess_Pics + xor a + ldh [hObjectStructIndex], a + farcall SetDexMonIconColor_SpritePage + call WaitBGMap + jp .spritepage_loop Pokedex_RedisplayDexEntry: call Pokedex_DrawDexEntryScreenBG call Pokedex_GetSelectedMon - farcall DisplayDexEntry + call SafeLoadTempTilemapToTilemap call Pokedex_DrawFootprint ret @@ -513,8 +983,6 @@ Pokedex_InitOptionScreen: call ClearSprites call Pokedex_DrawOptionScreenBG call Pokedex_InitArrowCursor - ; point cursor to the current dex mode (modes == menu item indexes) - ld a, [wCurDexMode] ld [wDexArrowCursorPosIndex], a call Pokedex_DisplayModeDescription call WaitBGMap @@ -556,22 +1024,25 @@ Pokedex_UpdateOptionScreen: ret .NoUnownModeArrowCursorData: - db D_UP | D_DOWN, 3 - dwcoord 2, 4 ; NEW - dwcoord 2, 6 ; OLD - dwcoord 2, 8 ; ABC + db D_UP | D_DOWN, 4 + dwcoord 2, 3 ; NEW + dwcoord 2, 4 ; OLD + dwcoord 2, 5 ; ABC + dwcoord 2, 6 ; COLOR .ArrowCursorData: - db D_UP | D_DOWN, 4 - dwcoord 2, 4 ; NEW - dwcoord 2, 6 ; OLD - dwcoord 2, 8 ; ABC - dwcoord 2, 10 ; UNOWN + db D_UP | D_DOWN, 5 + dwcoord 2, 3 ; NEW + dwcoord 2, 4 ; OLD + dwcoord 2, 5 ; ABC + dwcoord 2, 6 ; COLOR + dwcoord 2, 7 ; UNOWN .MenuActionJumptable: dw .MenuAction_NewMode dw .MenuAction_OldMode dw .MenuAction_ABCMode + dw .MenuAction_ColorOption dw .MenuAction_UnownMode .MenuAction_NewMode: @@ -605,6 +1076,12 @@ Pokedex_UpdateOptionScreen: ld [wJumptableIndex], a ret +.MenuAction_ColorOption + call Pokedex_BlackOutBG + ld a, DEXSTATE_COLOR_OPTION + ld [wJumptableIndex], a + ret + .MenuAction_UnownMode: call Pokedex_BlackOutBG ld a, DEXSTATE_UNOWN_MODE @@ -615,6 +1092,7 @@ Pokedex_InitSearchScreen: xor a ldh [hBGMapMode], a call ClearSprites + call Pokedex_LoadGFX ; restoring our precious Slowpoke Sprite call Pokedex_DrawSearchScreenBG call Pokedex_InitArrowCursor ld a, NORMAL + 1 @@ -833,7 +1311,6 @@ Pokedex_UpdateUnownMode: ld de, vTiles2 tile $31 lb bc, BANK(PokedexLZ), 58 call DecompressRequest2bpp - .done ret @@ -1136,7 +1613,9 @@ String_START_SEARCH: db $3c, $3b, $41, $42, $43, $4b, $4c, $4d, $4e, $3c, -1 ; START > SEARCH Pokedex_DrawDexEntryScreenBG: - call Pokedex_FillBackgroundColor2 + ; xor a + ; ldh [hBGMapMode], a + ; call Pokedex_FillBackgroundColor2 hlcoord 0, 0 lb bc, 15, 18 call Pokedex_PlaceBorder @@ -1147,34 +1626,87 @@ Pokedex_DrawDexEntryScreenBG: ld b, 15 call Pokedex_FillColumn ld [hl], $39 - hlcoord 1, 10 - ld bc, 19 - ld a, $61 - call ByteFill + hlcoord 1, 17 ld bc, 18 ld a, " " call ByteFill - hlcoord 9, 7 - ld de, .Height - call Pokedex_PlaceString - hlcoord 9, 9 - ld de, .Weight - call Pokedex_PlaceString + + hlcoord 2, 17 + ld bc, $7 tiles + ld a, $7f ; black square + call ByteFill + ld c, 4 + call DelayFrames + + lb bc, 8, SCREEN_WIDTH - 1 + hlcoord 1, 8 + call ClearBox + + hlcoord 1, 8 + ld bc, 19 + ld a, $55 + call ByteFill + ld a, [wTempSpecies] + ld [wCurSpecies], a + farcall DisplayDexMonType + call GetPokemonName + hlcoord 9, 4 + call PlaceString ; mon species + +.print_dex_num +; Print dex number + hlcoord 9, 2 + ld a, $5c ; No + ld [hli], a + ld a, $e8 ; . + ld [hli], a + ld de, wTempSpecies + lb bc, PRINTNUM_LEADINGZEROS | 1, 3 + call PrintNum + hlcoord 0, 17 ld de, .MenuItems - call Pokedex_PlaceString + call Pokedex_PlaceString call Pokedex_PlaceFrontpicTopLeftCorner +; Check to see if we caught it. Get out of here if we haven't. + ld a, [wTempSpecies] + dec a + call CheckCaughtMon + ret z + hlcoord 14, 2 + ld [hl], $4f ; pokeball icon ret - -.Number: ; unreferenced - db $5c, $5d, -1 ; No. -.Height: - db "HT ?", $5e, "??", $5f, -1 ; HT ?'??" -.Weight: - db "WT ???lb", -1 .MenuItems: - db $3b, " PAGE AREA CRY PRNT", -1 + db $3b, " ", $79, $7a, " ", \ ; INFO + $71, $72, " ", \ ; STATS + $74, $75, $76, " ", \ ; MOVES + $77, $78, " ", \ ; AREA + $7d, $7e, \ ; EVO + $31, $7b, $7c, -1 ; PICS + +Pokedex_LoadTextboxSpaceGFX: + nop + push hl + push de + push bc + push af + call DelayFrame + ldh a, [rVBK] + push af + ld a, $1 + ldh [rVBK], a + ld de, TextboxSpaceGFX + lb bc, BANK(TextboxSpaceGFX), 1 + ld hl, vTiles2 tile " " + call Get2bpp + pop af + ldh [rVBK], a + pop af + pop bc + pop de + pop hl + ret Pokedex_DrawOptionScreenBG: call Pokedex_FillBackgroundColor2 @@ -1187,13 +1719,22 @@ Pokedex_DrawOptionScreenBG: hlcoord 0, 1 ld de, .Title call Pokedex_PlaceString + hlcoord 3, 3 + ld de, .NewMode + call PlaceString hlcoord 3, 4 - ld de, .Modes + ld de, .OldMode + call PlaceString + hlcoord 3, 5 + ld de, .AtoZMode + call PlaceString + hlcoord 3, 6 + ld de, .Color call PlaceString ld a, [wUnlockedUnownMode] and a ret z - hlcoord 3, 10 + hlcoord 3, 7 ld de, .UnownMode call PlaceString ret @@ -1201,15 +1742,194 @@ Pokedex_DrawOptionScreenBG: .Title: db $3b, " OPTION ", $3c, -1 -.Modes: - db "NEW #DEX MODE" - next "OLD #DEX MODE" - next "A to Z MODE" - db "@" +.NewMode: + db "NEW #DEX MODE@" + +.OldMode: + db "OLD #DEX MODE@" + +.AtoZMode: + db "A to Z MODE@" + +.Color: + db "#DEX COLOR@" .UnownMode: db "UNOWN MODE@" +Pokedex_DrawColorScreenBG: + call Pokedex_FillBackgroundColor2 + hlcoord 0, 2 + lb bc, 14, 18 + call Pokedex_PlaceBorder + hlcoord 0, 1 + ld de, .Title + call Pokedex_PlaceString + hlcoord 3, 3 + ld de, .Red + call Pokedex_PlaceString + hlcoord 3, 4 + ld de, .Blue + call Pokedex_PlaceString + hlcoord 3, 5 + ld de, .Purple + call Pokedex_PlaceString + hlcoord 3, 6 + ld de, .Brown + call Pokedex_PlaceString + hlcoord 3, 7 + ld de, .Green + call Pokedex_PlaceString + hlcoord 3, 8 + ld de, .Pink + call Pokedex_PlaceString + hlcoord 3, 9 + ld de, .Yellow + call Pokedex_PlaceString + hlcoord 3, 10 + ld de, .Cyan + call Pokedex_PlaceString + hlcoord 3, 11 + ld de, .Gray + call Pokedex_PlaceString + hlcoord 3, 12 + ld de, .Mewtwo + jp Pokedex_PlaceString + + .Title: + db $3b, " COLORS ", $3c, -1 + + .Red + db "RED ", $4f, -1 + + .Blue + db "BLUE ", $4f, -1 + + .Purple + db "PURPLE ", $4f, -1 + + .Brown + db "BROWN ", $4f, -1 + + .Green + db "GREEN ", $4f, -1 + + .Pink + db "PINK ", $4f, -1 + + .Yellow + db "YELLOW ", $4f, -1 + + .Cyan + db "CYAN ", $4f, -1 + + .Gray + db "GRAY ", $4f, -1 + + .Mewtwo + db "MEWTWO ", $4f, -1 + + Pokedex_UpdateColorOption: + ld de, .ArrowCursorData + call Pokedex_MoveArrowCursor + ld hl, hJoyPressed + ld a, [hl] + and SELECT | B_BUTTON + jr nz, .return_to_main_screen + ld a, [hl] + and A_BUTTON + jr nz, .do_menu_action + ret + + .ArrowCursorData: + db D_UP | D_DOWN, 10 + dwcoord 2, 3 ; Red + dwcoord 2, 4 ; Blue + dwcoord 2, 5 ; Purple + dwcoord 2, 6 ; Brown + dwcoord 2, 7 ; Green + dwcoord 2, 8 ; Pink + dwcoord 2, 9 ; Yellow + dwcoord 2, 10 ; Cyan + dwcoord 2, 11 ; Gray + dwcoord 2, 12 ; Mewtwo + + .do_menu_action + ld a, [wDexArrowCursorPosIndex] + ld hl, .MenuActionJumptable + call Pokedex_LoadPointer + jp hl + + .return_to_main_screen + call Pokedex_BlackOutBG + ld a, DEXSTATE_MAIN_SCR + ld [wJumptableIndex], a + ret + + .MenuActionJumptable: + dw .MenuAction_Red + dw .MenuAction_Blue + dw .MenuAction_Purple + dw .MenuAction_Brown + dw .MenuAction_Green + dw .MenuAction_Pink + dw .MenuAction_Yellow + dw .MenuAction_Cyan + dw .MenuAction_Gray + dw .MenuAction_Mewtwo + + .MenuAction_Red + ld b, DEXCOLOR_RED + jr .ChangeColor + + .MenuAction_Blue + ld b, DEXCOLOR_BLUE + jr .ChangeColor + + .MenuAction_Purple + ld b, DEXCOLOR_PURPLE + jr .ChangeColor + + .MenuAction_Brown + ld b, DEXCOLOR_BROWN + jr .ChangeColor + + .MenuAction_Green + ld b, DEXCOLOR_GREEN + jr .ChangeColor + + .MenuAction_Pink + ld b, DEXCOLOR_PINK + jr .ChangeColor + + .MenuAction_Yellow + ld b, DEXCOLOR_YELLOW + jr .ChangeColor + + .MenuAction_Cyan + ld b, DEXCOLOR_CYAN + jr .ChangeColor + + .MenuAction_Gray + ld b, DEXCOLOR_GRAY + jr .ChangeColor + + .MenuAction_Mewtwo + ld b, DEXCOLOR_MEWTWO + + .ChangeColor: + ld a, [wCurPokedexColor] + cp b + jr z, .skip_changing_color + + ld a, b + ld [wCurPokedexColor], a + + .skip_changing_color + call Pokedex_BlackOutBG + ld a, DEXSTATE_COLOR_OPTION + ld [wJumptableIndex], a + ret Pokedex_DrawSearchScreenBG: call Pokedex_FillBackgroundColor2 hlcoord 0, 2 @@ -1460,17 +2180,18 @@ Pokedex_PlaceBorder: Pokedex_PrintListing: ; Prints the list of Pokémon on the main Pokédex screen. -; This check is completely useless. - ld a, [wCurDexMode] - cp DEXMODE_OLD - jr z, .okay - ld c, 11 - jr .resume -.okay +; ; This check is completely useless. +; ld a, [wCurDexMode] +; cp DEXMODE_OLD +; jr z, .okay +; ld c, 11 +; jr .resume +; .okay +; ld c, 11 +; ; End useless check + +; .resume ld c, 11 -; End useless check - -.resume ; Clear (2 * [wDexListingHeight] + 1) by 11 box starting at 0,1 hlcoord 0, 1 ld a, [wDexListingHeight] @@ -1564,12 +2285,12 @@ Pokedex_PlaceDefaultStringIfNotSeen: Pokedex_DrawFootprint: hlcoord 18, 1 - ld a, $62 + ld a, $6d ; $62 ld [hli], a inc a ld [hl], a hlcoord 18, 2 - ld a, $64 + ld a, $6f ; $64 ld [hli], a inc a ld [hl], a @@ -1728,6 +2449,7 @@ Pokedex_DisplayModeDescription: dw .NewMode dw .OldMode dw .ABCMode + dw .Color dw .UnownMode .NewMode: @@ -1742,6 +2464,10 @@ Pokedex_DisplayModeDescription: db " are listed" next "alphabetically.@" +.Color + db "Change the color" + next "of the border.@" + .UnownMode: db "UNOWN are listed" next "in catching order.@" @@ -2171,7 +2897,7 @@ Pokedex_PutScrollbarOAM: ld [hli], a ld a, 161 ; x ld [hli], a - ld a, $0f ; tile id + ld a, $3f ; $0f ; tile id ld [hli], a ld [hl], 0 ; attributes ret @@ -2321,8 +3047,8 @@ Pokedex_BlackOutBG: Pokedex_ApplyPrintPals: ld a, $ff call DmgToCgbBGPals - ld a, $ff - call DmgToCgbObjPal0 + ;ld a, $ff + ; call DmgToCgbObjPal0 call DelayFrame ret @@ -2334,8 +3060,8 @@ Pokedex_ApplyUsualPals: ; This applies the palettes used for most Pokédex screens. ld a, $e4 call DmgToCgbBGPals - ld a, $e0 - call DmgToCgbObjPal0 + ;ld a, $e0 + ;call DmgToCgbObjPal0 ret Pokedex_LoadPointer: @@ -2398,20 +3124,21 @@ Pokedex_LoadAnyFootprint: ld de, Footprints add hl, de - ; push hl ld e, l ld d, h - ld hl, vTiles2 tile $62 + ld hl, vTiles2 tile $6d ; $62 lb bc, BANK(Footprints), 4 call Request1bpp ret Pokedex_LoadGFX: + call Pokedex_LoadPageNums call DisableLCD ld hl, vTiles2 ld bc, $31 tiles xor a call ByteFill + call Pokedex_LoadInvertedFont call LoadFontsExtra ld hl, vTiles2 tile $60 @@ -2423,19 +3150,69 @@ Pokedex_LoadGFX: jr .LoadPokedexSlowpokeLZ .LoadPokedexLZ: + ld a, BANK(PokedexLZ) ld hl, PokedexLZ ld de, vTiles2 tile $31 - call Decompress + call FarDecompress .LoadPokedexSlowpokeLZ: + ld a, BANK(PokedexSlowpokeLZ) ld hl, PokedexSlowpokeLZ ld de, vTiles0 - call Decompress + call FarDecompress + + ld hl, vTiles0 tile $3f + ld de, vTiles0 tile 15 + lb bc, BANK(vTiles0), 1 ; tile + call Get2bpp + ld a, 6 call SkipMusic call EnableLCD ret +Pokedex_LoadPageNums: +; load pagenum tiles to vram1 +; lcd needs to be enabled or it will crash !!! + ldh a, [rLCDC] + push af ; preserve the state of lcd for after we're done + bit rLCDC_ENABLE, a + jr nz, .lcdalreadyon + call EnableLCD + +.lcdalreadyon + ld a, $1 + ldh [rVBK], a + ld de, Pokedex_PageNumTiles tile 0 + ld hl, vTiles2 tile $60 + lb bc, BANK(Pokedex_ExtraTiles), 12 + call Request2bpp +; single black tile at vram1 $7f + ld de, Pokedex_PageNumTiles tile 12 + ld hl, vTiles2 tile $7f + lb bc, BANK(Pokedex_ExtraTiles), 1 + call Request2bpp + + ld a, $0 + ldh [rVBK], a + pop af + ldh [rLCDC], a + ret + +Pokedex_LoadInversedFont: + ld a, 1 + ldh [rVBK], a + ld hl, vTiles1 + lb bc, BANK(FontInversed), 128 ; $80 tiles + ld de, FontInversed + ld a, BANK(FontInversed) + ; call Request1bpp + call Get1bpp;ViaHDMA + + ld a, $0 + ldh [rVBK], a + ret + Pokedex_LoadInvertedFont: call LoadStandardFont ld hl, vTiles1 @@ -2452,11 +3229,11 @@ Pokedex_InvertTiles: jr nz, .loop ret -PokedexLZ: -INCBIN "gfx/pokedex/pokedex.2bpp.lz" +; PokedexLZ: +; INCBIN "gfx/pokedex/pokedex.2bpp.lz" -PokedexSlowpokeLZ: -INCBIN "gfx/pokedex/slowpoke.2bpp.lz" +; PokedexSlowpokeLZ: +; INCBIN "gfx/pokedex/slowpoke.2bpp.lz" Pokedex_CheckSGB: ldh a, [hCGB] @@ -2563,3 +3340,16 @@ Pokedex_ResetBGMapMode: xor a ldh [hBGMapMode], a ret + +Pokedex_InitColorOption: + xor a + ldh [hBGMapMode], a + call ClearSprites + call Pokedex_DrawColorScreenBG + call Pokedex_InitArrowCursor + ld a, [wCurPokedexColor] + ld [wDexArrowCursorPosIndex], a + call WaitBGMap + ld a, SCGB_POKEDEX_SEARCH_OPTION + call Pokedex_GetSGBLayout + jp Pokedex_IncrementDexPointer diff --git a/engine/pokedex/pokedex_2.asm b/engine/pokedex/pokedex_2.asm index ebe158ed084..5a251af73a8 100644 --- a/engine/pokedex/pokedex_2.asm +++ b/engine/pokedex/pokedex_2.asm @@ -1,3 +1,52 @@ + const_def + const DEXENTRY_LORE ; 0 ; bit 0, $1 + const DEXENTRY_BASESTATS ; 1 ; bit 1, $2 + const DEXENTRY_LVLUP ; 2 ; bit 2, $4 + const DEXENTRY_FIELD ; 3 ; bit 3, $8 + const DEXENTRY_EGG ; 4 ; bit 4, $10, 16 + const DEXENTRY_TMS ; 5 ; bit 5, $20, 32 + ; const DEXENTRY_HMS ; bit 6, $40, 64 + const DEXENTRY_MTS ; 6 ;bit 7, $80, 128 + const DEXENTRY_EVO ; 7 + const DEXENTRY_PICS ; 8 + const DEXENTRY_AREA_NONE ; 9 + const DEXENTRY_AREA_GRASS_JOHTO ; 10 + const DEXENTRY_AREA_GRASS_KANTO ; 11 + const DEXENTRY_AREA_GRASS_SWARM ; 12 + const DEXENTRY_AREA_SURF_JOHTO ; 13 + const DEXENTRY_AREA_SURF_KANTO ; 14 + const DEXENTRY_AREA_SURF_SWARM ; 15 + const DEXENTRY_AREA_RODS ; 16 + const DEXENTRY_AREA_TREES ; 17 + const DEXENTRY_AREA_CONTEST ; 18 + +EXPORT DEXENTRY_LORE +EXPORT DEXENTRY_BASESTATS +EXPORT DEXENTRY_LVLUP +EXPORT DEXENTRY_FIELD +EXPORT DEXENTRY_EGG +EXPORT DEXENTRY_TMS +; EXPORT DEXENTRY_HMS +EXPORT DEXENTRY_MTS +EXPORT DEXENTRY_EVO ; 7 +EXPORT DEXENTRY_PICS ; 8 + +EXPORT DEXENTRY_AREA_GRASS_JOHTO +EXPORT DEXENTRY_AREA_GRASS_KANTO +EXPORT DEXENTRY_AREA_GRASS_SWARM + +EXPORT DEXENTRY_AREA_SURF_JOHTO +EXPORT DEXENTRY_AREA_SURF_KANTO +EXPORT DEXENTRY_AREA_SURF_SWARM + +EXPORT DEXENTRY_AREA_RODS +EXPORT DEXENTRY_AREA_TREES +EXPORT DEXENTRY_AREA_CONTEST +EXPORT DEXENTRY_AREA_NONE + +DEF NUM_FIELD_MOVES EQU 14 +DEF MOVESPAGES_CONT_MASK EQU %00000011 + AnimateDexSearchSlowpoke: ld hl, .FrameIDs ld b, 25 @@ -76,108 +125,89 @@ DoDexSearchSlowpokeFrame: dbsprite 11, 13, 0, 0, $22, 0 db -1 +HandlePageNumReset: + ld b, a + ld a, [wPokedexEntryType] + cp b + ret z + ld a, b + ld [wPokedexEntryType], a + xor a + ld [wPokedexEntryPageNum], a + ret + DisplayDexEntry: - call Dex_PrintMonTypeTiles - call GetPokemonName - hlcoord 9, 3 - call PlaceString ; mon species + ; call Dex_PrintMonTypeTiles + ld a, [wPokedexEntryType] + and a + jr nz, .check_caught + ld a, DEXENTRY_LORE + call HandlePageNumReset +.check_caught +; Check to see if we caught it. Get out of here if we haven't. + ld a, [wTempSpecies] + dec a + call CheckCaughtMon + ret z + + ; xor a + ; ldh [hBGMapMode], a + + ld a, DEXENTRY_LORE + call HandlePageNumReset + + lb bc, 8, SCREEN_WIDTH - 1 + hlcoord 1, 8 + call ClearBox + + hlcoord 1, 8 + ld bc, 19 + ld a, $55 + call ByteFill + ld a, [wTempSpecies] ld b, a call GetDexEntryPointer ld a, b push af - hlcoord 9, 5 - call PlaceFarString ; dex species + hlcoord 2, 9 + call PlaceFarString ; dex species nickname ld h, b ld l, c push de -; Print dex number - hlcoord 2, 8 - ld a, $5c ; No - ld [hli], a - ld a, $5d ; . - ld [hli], a - ld de, wTempSpecies - lb bc, PRINTNUM_LEADINGZEROS | 1, 3 - call PrintNum -; Check to see if we caught it. Get out of here if we haven't. - ld a, [wTempSpecies] - dec a - call CheckCaughtMon + hlcoord 12, 9 +.check_tile + ; this prints the "PKMN" symbols after the species nickname + ld a, [hld] + cp $e2 + jr z, .cont + cp $7f ; empty tile + jr z, .check_tile + inc hl + inc hl + ld [hl], " " + inc hl + ld [hl], $e1 + inc hl + ld [hl], $e2 +.cont pop hl pop bc - ret z ; Get the height of the Pokemon. ld a, [wCurPartySpecies] ld [wCurSpecies], a inc hl ld a, b push af - push hl - call GetFarWord - ld d, l - ld e, h - pop hl inc hl inc hl - ld a, d - or e - jr z, .skip_height - push hl - push de -; Print the height, with two of the four digits in front of the decimal point - ld hl, sp+0 - ld d, h - ld e, l - hlcoord 12, 7 - lb bc, 2, (2 << 4) | 4 - call PrintNum -; Replace the decimal point with a ft symbol - hlcoord 14, 7 - ld [hl], $5e - pop af - pop hl - -.skip_height - pop af - push af inc hl push hl - dec hl - call GetFarWord - ld d, l - ld e, h - ld a, e - or d - jr z, .skip_weight - push de -; Print the weight, with four of the five digits in front of the decimal point - ld hl, sp+0 - ld d, h - ld e, l - hlcoord 11, 9 - lb bc, 2, (4 << 4) | 5 - call PrintNum - pop de - -.skip_weight + ld a, [wPokedexEntryPageNum] + and a ; check for page 2 + jr nz, .page2 ; Page 1 - lb bc, 5, SCREEN_WIDTH - 2 - hlcoord 2, 11 - call ClearBox - hlcoord 1, 10 - ld bc, SCREEN_WIDTH - 1 - ld a, $61 ; horizontal divider - call ByteFill - ; page number - hlcoord 1, 9 - ld [hl], $55 - inc hl - ld [hl], $55 - hlcoord 1, 10 - ld [hl], $56 ; P. - inc hl - ld [hl], $57 ; 1 + call Pokedex_PrintPageNum pop de inc de pop af @@ -185,39 +215,39 @@ DisplayDexEntry: push af call PlaceFarString pop bc - ld a, [wPokedexStatus] - or a ; check for page 2 - ret z + call DexEntry_IncPageNum + ; call WaitBGMap + ret ; Page 2 +.page2 + pop de + inc de + pop af + hlcoord 2, 11 + push af + call PlaceFarString + pop bc push bc push de - lb bc, 5, SCREEN_WIDTH - 2 - hlcoord 2, 11 + lb bc, 5, SCREEN_WIDTH - 1 + hlcoord 1, 11 call ClearBox - hlcoord 1, 10 - ld bc, SCREEN_WIDTH - 1 - ld a, $61 + hlcoord 1, 8 + ld bc, 19 + ld a, $55 call ByteFill - ; page number - hlcoord 1, 9 - ld [hl], $55 - inc hl - ld [hl], $55 - hlcoord 1, 10 - ld [hl], $56 ; P. - inc hl - ld [hl], $58 ; 2 + call Pokedex_PrintPageNum pop de inc de pop af hlcoord 2, 11 call PlaceFarString + xor a + ld [wPokedexEntryPageNum], a + ; call WaitBGMap ret -POKeString: ; unreferenced - db "#@" - GetDexEntryPointer: ; return dex entry pointer b:de push hl @@ -257,6 +287,7 @@ rept 4 endr ; if c != 1: skip entry dec c + and c jr z, .done ; skip entry .loop2 @@ -265,14 +296,85 @@ endr inc hl cp "@" jr nz, .loop2 - .done ld d, h ld e, l pop hl ret -INCLUDE "data/pokemon/dex_entry_pointers.asm" +DisplayDexMonType: + call GetBaseData + ld a, [wBaseType1] +; Skip Bird + cp BIRD + jr c, .type1_adjust_done + cp UNUSED_TYPES + dec a + jr c, .type1_adjust_done + sub UNUSED_TYPES +.type1_adjust_done +; load the tiles + ld hl, TypeLightIconGFX + ld bc, 4 * LEN_2BPP_TILE + call AddNTimes + ld d, h + ld e, l + + ld a, $1 + ldh [rVBK], a + ld hl, vTiles2 tile $77 + lb bc, BANK(TypeLightIconGFX), 4 + call Request2bpp + + hlcoord 9, 6 + ld [hl], $77 + inc hl + ld [hl], $78 + inc hl + ld [hl], $79 + inc hl + ld [hl], $7a + + ld a, $0 + ldh [rVBK], a +; 2nd Type + ld a, [wBaseType1] + ld b, a + ld a, [wBaseType2] + cp b + ret z +; Skip Bird + cp BIRD + jr c, .type2_adjust_done + cp UNUSED_TYPES + dec a + jr c, .type2_adjust_done + sub UNUSED_TYPES +.type2_adjust_done +; load type 2 tiles + ld hl, TypeDarkIconGFX + ld bc, 4 * LEN_2BPP_TILE + call AddNTimes + ld d, h + ld e, l + + ld a, $1 + ldh [rVBK], a + + ld hl, vTiles2 tile $7b + lb bc, BANK(TypeDarkIconGFX), 4 + call Request2bpp + hlcoord 13, 6 + ld [hl], $7b + inc hl + ld [hl], $7c + inc hl + ld [hl], $7d + inc hl + ld [hl], $7e + ld a, $0 + ldh [rVBK], a + ret Dex_PrintMonTypeTiles: ld a, [wTempSpecies] @@ -328,3 +430,2643 @@ Dex_PrintMonTypeTiles: inc hl ld [hl], $77 ret + +INCLUDE "data/pokemon/dex_entry_pointers.asm" +INCLUDE "engine/pokedex/pokedex_evolution_page.asm" +INCLUDE "engine/pokedex/pokedex_stats_page.asm" +INCLUDE "engine/pokedex/pokedex_pics_page.asm" + +Pokedex_Clearbox: + ;clear Area BC @ HL + ; xor a + ; ldh [hBGMapMode], a + lb bc, 7, SCREEN_WIDTH - 1 + hlcoord 1, 9 + call ClearBox + ; call WaitBGMap + ret + +DexEntry_adjusthlcoord: + ; given: current printed lines in c + push af + push de + ld a, 20 + ; the num of moves already printed should still be in bc + call SimpleMultiply ; uses c as the other number + ; result in a + ld d, 0 + ld e, a + add hl, de ; allows us to print on the proper row lol + pop de + pop af + ret + +DexEntry_IncPageNum: + ld a, [wPokedexEntryPageNum] + inc a + ld [wPokedexEntryPageNum], a + ret + +Pokedex_PrintPageNum: + push hl + ld a, [wPokedexEntryPageNum] + ; a = page num, starting with 0 as page 1 + hlcoord 18, 7 + ld [hl], $61 ; p. vram1 + inc hl + + cp 10 ; if we are past nine pages + jr c, .checkdone + ld a, 9 +.checkdone + add $62 ; this is how we get the page num tile + ld [hl], a ; # + pop hl + ld a, [wPokedexEntryPageNum] + ret + +DexEntry_NextCategory: + ld [wPokedexEntryType], a + xor a + ld [wPokedexEntryPageNum], a + ld [wPokedexStatus], a + ret + +DexEntry_NONE_text: + db "NONE@" + +DisplayDexMonStats:: + ld a, [wTempSpecies] + ld [wCurSpecies], a + + ld a, DEXENTRY_BASESTATS + call HandlePageNumReset + + call Pokedex_Clearbox + ld de, .Base_stats_text + hlcoord 2, 9 + call PlaceString + call Pokedex_PrintPageNum ; page num is also returned in a + and a + jr z, .print_page1 + cp 1 + jr z, .print_page2 + cp 2 + jr z, .print_page3 + jr .print_page4 +.print_page1 + call Pokedex_GBS_Stats ; 4 lines + call Pokedex_CatchRate ; 1 line + jp DexEntry_IncPageNum +.print_page2 + call Pokedex_PrintBaseEVs ; 4 lines + call Pokedex_PrintBaseExp ; 1 line + call Pokedex_Get_Growth ; 1 lines + jp DexEntry_IncPageNum +.print_page3 + ; these ones NEED to be in this order + call Pokedex_HeightWeight ; 2 lines + call Pokedex_Get_Items ; 3 lines + jp DexEntry_IncPageNum +.print_page4 + call Pokedex_EggG_SetUp ; 3 lines + call Pokedex_PrintHatchSteps ; 1 line + call Pokedex_Get_GenderRatio ; 1 line + xor a + ld [wPokedexEntryPageNum], a + ret +.Base_stats_text: + db "BASE STATS@" + +DisplayDexMonMoves:: + ld a, [wTempSpecies] + ld [wCurSpecies], a + ld [wCurPartySpecies], a + call Pokedex_Clearbox + + ; the byte flag that tells us which type of table we're currently on + ; 0 = Info, 1 = Stats, 2 = LVL UP, 3 = FIELD, 4 = EGG, 5 = TMs, 6 = HMs, 7 = MTs + + ; ld a, [wPokedexEntryType] + ; and MOVESPAGES_CONT_MASK + ; ; if we had just been printing lore or basestats, start with lvlup moves + ; jr nz, .LvlUpLearnset_new + + ld a, [wPokedexEntryType] + ; cp DEXENTRY_LORE + ; jr z, .LvlUpLearnset_new + ; cp DEXENTRY_BASESTATS + ; jr z, .LvlUpLearnset_new + ; cp DEXENTRY_EVO + ; jr z, .LvlUpLearnset_new + ; cp DEXENTRY_PICS + ; jr z, .LvlUpLearnset_new + cp DEXENTRY_LVLUP + jr z, .LvlUpLearnset + cp DEXENTRY_EGG + jr z, .EggMoves + cp DEXENTRY_FIELD + jr z, .Field_Moves + cp DEXENTRY_TMS + jr z, .TMs + ; bit DEXENTRY_HMS, a + ; jr nz, .HMs + cp DEXENTRY_MTS + jr z, .MTs +.LvlUpLearnset_new + ld a, DEXENTRY_LVLUP + call DexEntry_NextCategory +.LvlUpLearnset + ld a, DEXENTRY_LVLUP + ld [wPokedexEntryType], a + call Pokedex_Calc_LvlMovesPtr + call Pokedex_Print_NextLvlMoves + ret +.EggMoves + ld a, DEXENTRY_EGG + ld [wPokedexEntryType], a + call Pokedex_Calc_EggMovesPtr + ret z + call Pokedex_Print_Egg_moves + ret +.Field_Moves + ld a, DEXENTRY_FIELD + ld [wPokedexEntryType], a + + call Pokedex_PrintFieldMoves + ret +.TMs + ld a, DEXENTRY_TMS + ld [wPokedexEntryType], a + call Pokedex_PrintTMs + ret +; .HMs +; ld a, DEXENTRY_HMS +; ld [wPokedexEntryType], a +; call Pokedex_PrintHMs +; ret +.MTs + ld a, DEXENTRY_MTS + ld [wPokedexEntryType], a + call Pokedex_PrintMTs + ret + +Pokedex_Calc_LvlMovesPtr: + ld a, [wTempSpecies] + dec a + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, BANK(EvosAttacksPointers) + call GetFarWord +.SkipEvoBytes + ld a, BANK("Evolutions and Attacks") + call GetFarByte + inc hl + and a ; cp 0 + jr nz, .SkipEvoBytes +.CalcPageoffset + call Pokedex_PrintPageNum ; page num is also returned in a + ld c, 5 + call SimpleMultiply + ; double this num and add to first byte after Evo's 0 + ; for p16, triple the num + ld b, 0 + ld c, a + add hl, bc + add hl, bc + ; add hl, bc + ret + +Pokedex_Print_NextLvlMoves: +; Print No more than 5 moves + ld b, 0 + ld c, 0 ; our move counter, max of 5 + push bc ; our move counter + push hl ; our offset for the start of Moves + ld de, .lvl_moves_text + hlcoord 2, 9 + call PlaceString ; TEXT for 'LVL - Move' + pop hl + pop bc +.learnset_loop + ld a, BANK("Evolutions and Attacks") + call GetFarByte + and a + jr z, .FoundEnd + push hl + ld [wTextDecimalByte], a + hlcoord 2, 11 + call DexEntry_adjusthlcoord + ld [hl], $5d + hlcoord 3, 11 + call DexEntry_adjusthlcoord + ld de, wTextDecimalByte + push bc + lb bc, PRINTNUM_LEFTALIGN | 1, 2 + call PrintNum + pop bc + pop hl + inc hl + push hl + ld a, BANK("Evolutions and Attacks") + call GetFarByte + ld [wNamedObjectIndex], a + call GetMoveName + hlcoord 7, 11 + call DexEntry_adjusthlcoord + push bc + call PlaceString + pop bc + pop hl + inc hl + inc bc + ld a, 5 + cp c + jr nz, .learnset_loop + jr .MaxedPage +.MaxedPage ; Printed 5 moves. Moves are still left. Inc the Page counter + ; check to see if really any moves left, we dont want a blank page + ld a, BANK("Evolutions and Attacks") + call GetFarByte + and a + jr z, .FoundEnd + call DexEntry_IncPageNum + ret +.FoundEnd + ld a, DEXENTRY_FIELD + call DexEntry_NextCategory + ret +.lvl_moves_text: + db "LVL-UP MOVES@" + +Pokedex_PrintFieldMoves: +; CheckLvlUpMoves, 1 for fail, 0 for yes, in c + hlcoord 2, 9 + ld de, .Field_Moves_text + call PlaceString + call Pokedex_PrintPageNum ; page num is also returned in a + ld a, [wPokedexStatus] ; machine moves index + ld b, a + ld c, 0 ; current line +.fm_loop + push bc + ld c, b + ld b, 0 + ld hl, Field_Moves_List + add hl, bc + ld a, [hl] + ld d, a + call Pokedex_CheckLvlUpMoves + ld a, c ; c has lvl we learn move + ld e, c + pop bc + and a + jr nz, .print_move_name +.check_machines +; check TM/HM + push bc + ld c, b + ld b, 0 + ld hl, Field_Moves_List + add hl, bc + ld a, [hl] + ld d, a + ld [wPutativeTMHMMove], a + farcall CanLearnTMHMMove + ld a, c + pop bc + and a + jr z, .notcompatible +; check TM/HM done +.print_move_name + push de + ld a, d + ld [wNamedObjectIndex], a + call GetMoveName + push bc ; our count is in c + hlcoord 7, 11 + call DexEntry_adjusthlcoord + call PlaceString + pop bc +; print TM/HM num + ld d, 0 + ld e, b + ld hl, Field_Moves_Method_List + add hl, de + ld a, [hl] + pop de + and a + jr nz, .tm_or_hm +.printlvlupmove + push bc + hlcoord 3, 11 + call DexEntry_adjusthlcoord + ld [hl], $5d ; + inc hl + lb bc, PRINTNUM_LEFTALIGN | 1, 2 + ld a, e + ld [wTextDecimalByte], a + ld de, wTextDecimalByte + call PrintNum + pop bc + jr .inc_line_count +.tm_or_hm + ; a has the item id of the tm/hm/mt + push af + ld a, e ; lvl at which they learn move? + and a + jr nz, .BothLvlUpandTMHMMT + pop af + ld [wNamedObjectIndex], a + call GetItemName + push bc + hlcoord 2, 11 + call DexEntry_adjusthlcoord + call PlaceString + pop bc +; print TM/HM num done +.inc_line_count + inc c ; since we printed a line + ld a, $5 + cp c + jr nz, .notcompatible ; not yet printed all 5 slots + ; We've printed all 5 slots + ; check if we need to move to next category or if there are moves left + call Pokedex_anymoreFieldMoves + jr z, .done ; there are no moves left + ; moves left + call DexEntry_IncPageNum + ret +.notcompatible + ld a, NUM_FIELD_MOVES - 1 + cp b + jr z, .done + inc b + ld a, b + ld [wPokedexStatus], a ; moves machines index + jp .fm_loop +.done + ld a, DEXENTRY_EGG + call DexEntry_NextCategory + ld a, c + and a + ret nz ; we've had at least one HM Move + hlcoord 4, 11 + ld de, DexEntry_NONE_text + call PlaceString + ret +.both_no_more_room + pop af + jr .inc_line_count +.BothLvlUpandTMHMMT + ; we're print number regardless + push bc + push de + hlcoord 3, 11 + call DexEntry_adjusthlcoord + ld [hl], $5d ; + inc hl + lb bc, PRINTNUM_LEFTALIGN | 1, 2 + ld a, e + ld [wTextDecimalByte], a + ld de, wTextDecimalByte + call PrintNum + pop de + pop bc + + ld a, c + dec b ; so it will do dig again on next page + cp 4 + jr z, .both_no_more_room ; we only have 1 space left, so prioritize lvl up + inc b ; we have room, so fix the field move counter + ; print name again + inc c ; line counter + push bc + push de + ld a, d + ld [wNamedObjectIndex], a + call GetMoveName + ; push bc ; our count is in c + hlcoord 7, 11 + call DexEntry_adjusthlcoord + call PlaceString + pop de + pop bc + + xor a ; so we dont get flagged as both again + ld e, a + pop af ; tm/hm/mt item id + jp .tm_or_hm + ; a needs to be the TM/HM/MT item id + ; do not increment index, so it will print both on next page +.Field_Moves_text: + db "FIELD MOVES@" + +Field_Moves_List: + db TELEPORT, SOFTBOILED, MILK_DRINK, \ + HEADBUTT, ROCK_SMASH, SWEET_SCENT, DIG,\ + CUT, FLY, SURF, STRENGTH, FLASH, WATERFALL, WHIRLPOOL +Field_Moves_Method_List: + db 0, 0, 0, TM01 + 1, TM01 + 7, TM01 + 11, TM01 + 27, HM01, \ + HM01 + 1, HM01 + 2, HM01 + 3, HM01 + 4, HM01 + 5, HM01 + 6 + +Pokedex_anymoreFieldMoves: + ld a, NUM_FIELD_MOVES - 1 + cp b + jr z, .none + ; b has the current machine index + inc b +.fmloop + push bc + ld d, 0 + ld e, b + ld hl, Field_Moves_List + add hl, de + ld a, [hl] + ld d, a + + call Pokedex_CheckLvlUpMoves + ld a, c ; c has lvl we learn move + ld d, a ; to preserve it for later + pop bc + and a + jr nz, .yes + push bc + ld d, 0 + ld e, b + ld hl, Field_Moves_Method_List + add hl, de + ld a, [hl] + and a + jr z, .not_tm_or_hm + ld [wCurItem], a + farcall GetTMHMItemMove + ld a, [wTempTMHM] + ld [wPutativeTMHMMove], a + farcall CanLearnTMHMMove + ld a, c + pop bc + and a + jr nz, .yes +.not_tm_or_hm + ld a, NUM_FIELD_MOVES - 1 + cp b + jr z, .none + inc b + jr .fmloop +.yes + ld a, b + ld [wPokedexStatus], a ; so we can start off at the next learnable machine + ld a, 1 + and a + ret +.none + xor a + ret + +Pokedex_CheckLvlUpMoves: ; used by pokedex field moves +; move looking for in 'd' + ld a, [wCurPartySpecies] + dec a + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, BANK(EvosAttacksPointers) + ld b, a + call GetFarWord + ld a, b + call GetFarByte + inc hl + and a + jr z, .find_move ; does not evolve + dec hl +; Skip Evo Bytes +; Receives a pointer to the evos and attacks for a mon in b:hl, and skips to the attacks. +.skip_evo_bytes + ld a, b + call GetFarByte + inc hl + and a + jr z, .find_move ; found end + cp EVOLVE_STAT + jr nz, .no_extra_skip + inc hl +.no_extra_skip + inc hl + inc hl + jr .skip_evo_bytes +.find_move + ld a, BANK(EvosAttacksPointers) + call GetFarByte + inc hl + and a + jr z, .notfound ; end of mon's lvl up learnset + ld c, a ; the lvl we learn move + ld a, BANK(EvosAttacksPointers) + call GetFarByte + inc hl + cp d ; 'd' is not clobbered in any of the used funcs or farcalls + jr z, .found + jr .find_move +.found + ; lvl learned move in c + ret ; move is in lvl up learnset +.notfound + xor a + ld c, a + ret + +Pokedex_Calc_EggMovesPtr: + ld a, DEXENTRY_EGG + ld [wPokedexEntryType], a + call Pokedex_PrintPageNum ; page num is also returned in a + ld a, [wPokedexEntryPageNum] + ld c, 5 ; we can print 5 Egg moves per page + call SimpleMultiply ; double this num and add to first byte after Evo's 0 + ld b, 0 + ld c, a + push bc +; Step 4: Get First byte of learnset + ; push af ; preserve current species or else move sets will be messed up for stage2+ mons + callfar GetPreEvolution ; changes wCurPartyMon + callfar GetPreEvolution ; changes wCurPartyMon + ld a, [wCurPartySpecies] + dec a ; Bulbasaur is No 1 but entry ZERO + ld b, 0 + ld c, a + ld hl, EggMovePointers + add hl, bc ; trying to add the species number in only 'a' will overflow a + add hl, bc ; add twice to double the index, words/PTRs are TWO bytes ea + ; pop af ; preserve current species or else move sets will be messed up for stage2+ mons + ld a, [wCurSpecies] + ld [wCurPartySpecies], a + ld [wTempSpecies], a + ld [wTempMonSpecies], a + + ld a, BANK(EggMovePointers) + call GetFarWord +.check_if_any + ld a, BANK("Egg Moves") + call GetFarByte + pop bc + add hl, bc + push af ; -1 if no egg moves + push hl + hlcoord 2, 9 + ld de, .EggMoves_text + call PlaceString + pop hl + pop af + cp -1 + ret nz + ; if we reach here, the mon has no egg moves at all + ; will not call Pokedex_Print_Egg_moves + ; increment to next category + ld a, DEXENTRY_TMS + call DexEntry_NextCategory + ;print NONE + hlcoord 3, 11 + ld de, DexEntry_NONE_text + call PlaceString + ret +.EggMoves_text: + db "EGG MOVES@" + +Pokedex_Print_Egg_moves: +; Print No more than 5 moves + ld b, 0 + ld c, 0 ; our move counter, max of 4 for 5 moves + ; our adjusted pointer based on page num is in hl +.Egg_loop + ld a, BANK("Egg Moves") + call GetFarByte ; EGG Move, or -1 for end + cp -1 + jr z, .FoundEnd + inc hl ; Moves HL to next Byte + push hl + ld [wNamedObjectIndex], a ; all the "Name" Funcs use this + call GetMoveName ; returns the string pointer in de + hlcoord 3, 11 + call DexEntry_adjusthlcoord + push bc + call PlaceString ; places Move Name + pop bc + pop hl + ld a, $4 ; means we just printed 5th move + cp c + jr z, .MaxedPage + inc c + jr .Egg_loop +.MaxedPage ; Printed 5 moves. Moves are still left. Inc the Page counter +; CheckNextByte, we dont want blank screen if we just printed last move in slot 5 + ld a, BANK("Egg Moves") + call GetFarByte; Move # returned in "a" + cp -1 + jr z, .FoundEnd + call DexEntry_IncPageNum + ld a, [wCurPartySpecies] + ld [wCurSpecies], a + ld [wTempSpecies], a + ld [wTempMonSpecies], a + ret +.FoundEnd + ld a, DEXENTRY_TMS + call DexEntry_NextCategory + ld a, [wCurPartySpecies] + ld [wCurSpecies], a + ld [wTempSpecies], a + ld [wTempMonSpecies], a + ret + +Pokedex_PrintTMs: + hlcoord 2, 9 + ld de, .dex_TM_text + call PlaceString + call Pokedex_PrintPageNum ; page num is also returned in a + ld a, [wPokedexStatus] ; machine moves index + ld b, a + ld c, 0 ; current line +.tm_loop + push bc + ld a, TM01 + add b + ld [wCurItem], a + farcall GetTMHMItemMove + ld a, [wTempTMHM] + ld [wPutativeTMHMMove], a + farcall CanLearnTMHMMove + ld a, c + pop bc + and a + jr z, .notcompatible + call GetMoveName + push bc ; our count is in c + hlcoord 7, 11 + call DexEntry_adjusthlcoord + call PlaceString + pop bc + ld a, TM01 + ld a, [wPokedexStatus] + ld b, a + ld a, TM01 + add b + ld [wNamedObjectIndex], a + call GetItemName + push bc + hlcoord 2, 11 + call DexEntry_adjusthlcoord + call PlaceString + pop bc + inc c ; since we printed a line + ld a, $5 + cp c + jr nz, .notcompatible ; not yet printed all 5 slots + ; We've printed all 5 slots + ; check if we need to move to next category or if there are moves left + call Pokedex_anymoreTMs + jr z, .done ; there are no moves left + ; moves left + call DexEntry_IncPageNum + ret +.notcompatible + ld a, NUM_TMS - 1 + cp b + jr z, .done + inc b + ld a, b + ld [wPokedexStatus], a ; moves machines index + jr .tm_loop +.done + ; ld a, DEXENTRY_HMS + ld a, DEXENTRY_MTS + call DexEntry_NextCategory + ld a, c + and a + ret nz ; we've had at least one HM Move + hlcoord 4, 11 + ld de, DexEntry_NONE_text + call PlaceString + ret +.dex_TM_text: + db "TECHNICAL MACHINES@" + +Pokedex_anymoreTMs: + ; b has the current HM index + ld a, NUM_TMS - 1 + cp b + jr z, .none + inc b +.tmloop + push bc + ld a, TM01 + add b + ld [wCurItem], a + farcall GetTMHMItemMove + ld a, [wTempTMHM] + ld [wPutativeTMHMMove], a + farcall CanLearnTMHMMove + ld a, c + pop bc + and a + jr nz, .yes + ld a, NUM_TMS - 1 + cp b + jr z, .none + inc b + jr .tmloop +.yes + ld a, b + ld [wPokedexStatus], a ; so we can start off at the next learnable machine + ld a, 1 + and a + ret +.none + xor a + ld [wPokedexStatus], a + ret + +Pokedex_PrintMTs: + hlcoord 2, 9 + ld de, .dex_MT_text + call PlaceString + call Pokedex_PrintPageNum ; page num is also returned in a + ld a, [wPokedexStatus] ; moves machines index + ld b, a ; result of simple multiply in a + ld c, 0 ; current line +.mt_loop + push bc + ld a, MT01 + add b + ld [wCurItem], a + farcall GetTMHMItemMove + ld a, [wTempTMHM] + ld [wPutativeTMHMMove], a + farcall CanLearnTMHMMove + ld a, c + pop bc + and a + jr z, .notcompatible + call GetMoveName + push bc ; our count is in c + hlcoord 3, 11 + call DexEntry_adjusthlcoord + call PlaceString + pop bc + inc c ; since we printed a line + ld a, $5 + cp c + jr nz, .notcompatible + ; We've printed all 5 slots + ; check if we need to move to next category or if there are moves left + call Pokedex_anymoreMTs + jr z, .done ; there are no moves left + ; moves left + call DexEntry_IncPageNum + ret +.notcompatible + ld a, NUM_TUTORS - 1 + cp b + jr z, .done + inc b + ld a, b + ld [wPokedexStatus], a ; moves machines index + jr .mt_loop +.done + ld a, DEXENTRY_LVLUP + call DexEntry_NextCategory + ld a, c + and a + ret nz ; we've had at least one HM Move + hlcoord 4, 11 + ld de, DexEntry_NONE_text + call PlaceString + ret +.dex_MT_text: + db "MOVE TUTORS@" + +Pokedex_anymoreMTs: + ld a, NUM_TUTORS - 1 + cp b + jr z, .none + ; b has the current HM index + inc b +.mtloop + push bc + ld a, MT01 + add b + ld [wCurItem], a + farcall GetTMHMItemMove + ld a, [wTempTMHM] + ld [wPutativeTMHMMove], a + farcall CanLearnTMHMMove + ld a, c + pop bc + and a + jr nz, .yes + ld a, NUM_TUTORS - 1 + cp b + jr z, .none + inc b + jr .mtloop +.yes + ld a, 1 + and a + ret +.none + xor a + ret + +; Pokedex_PrintHMs: +; hlcoord 2, 9 +; ld de, .dex_HM_text +; call PlaceString +; call Pokedex_PrintPageNum ; page num is also returned in a +; ld c, $5 +; ld a, [wPokedexStatus] +; ld b, a +; ld c, 0 ; current line +; .hm_loop +; push bc +; ld a, HM01 +; add b +; ld [wCurItem], a +; farcall GetTMHMItemMove +; ld a, [wTempTMHM] +; ld [wPutativeTMHMMove], a +; farcall CanLearnTMHMMove +; ld a, c +; pop bc +; and a +; jr z, .notcompatible +; call GetMoveName +; push bc ; our count is in c +; hlcoord 7, 11 +; call DexEntry_adjusthlcoord +; call PlaceString +; pop bc +; ld a, HM01 +; add b +; ld [wNamedObjectIndex], a +; call GetItemName +; push bc +; hlcoord 2, 11 +; call DexEntry_adjusthlcoord +; call PlaceString +; pop bc +; inc c ; since we printed a line +; ld a, $5 +; cp c +; jr nz, .notcompatible +; call Pokedex_anymoreHMs +; jr z, .done +; call DexEntry_IncPageNum +; ret +; .notcompatible +; ld a, NUM_HMS - 1 +; cp b +; jr z, .done +; inc b +; jr .hm_loop +; .done +; ld a, DEXENTRY_MTS +; call DexEntry_NextCategory +; ld a, c +; and a +; ret nz ; we've had at least one HM Move +; hlcoord 4, 11 +; ld de, DexEntry_NONE_text +; call PlaceString +; ret +; .dex_HM_text: +; db "HIDDEN MACHINES@" + +; Pokedex_anymoreHMs: +; ld a, NUM_HMS - 1 +; cp b +; jr z, .none +; ; b has the current HM index +; inc b +; .hmloop +; push bc +; ld a, HM01 +; add b +; ld [wCurItem], a +; farcall GetTMHMItemMove +; ld a, [wTempTMHM] +; ld [wPutativeTMHMMove], a +; farcall CanLearnTMHMMove +; ld a, c +; pop bc +; and a +; jr nz, .yes +; ld a, NUM_HMS - 1 +; cp b +; jr z, .none +; inc b +; jr .hmloop +; .yes +; ld a, 1 +; and a +; ret +; .none +; xor a +; ld [wPokedexStatus], a +; ret + +Pokedex_DetailedArea: + xor a + ld [wCurDamage], a + ld [wCurDamage + 1], a + ld [wPokedexEvoStage2], a ; highest lvl + ld [wPokedexEvoStage3], a ; lowest lvl + ld [wStatsScreenFlags], a ; misc counters + ld a, [wPokedexEntryType] + cp DEXENTRY_AREA_NONE + ret z +.checkpoint + call Pokedex_Clearbox + ld a, [wPokedexEntryType] + cp DEXENTRY_AREA_NONE + jr c, .first + call Pokedex_PrintPageNum + ld a, [wPokedexEntryType] + + ld hl, JohtoGrassWildMons + cp DEXENTRY_AREA_GRASS_JOHTO + jr z, .grass ; _johto + ld hl, KantoGrassWildMons + cp DEXENTRY_AREA_GRASS_KANTO + jr z, .grass ; _kanto + ld hl, SwarmGrassWildMons + cp DEXENTRY_AREA_GRASS_SWARM + jr z, .grass ; _swarm + + ld hl,JohtoWaterWildMons + cp DEXENTRY_AREA_SURF_JOHTO + jr z, .surf + ld hl, KantoWaterWildMons + cp DEXENTRY_AREA_SURF_KANTO + jr z, .surf + ld hl, SwarmWaterWildMons + cp DEXENTRY_AREA_SURF_SWARM + jr z, .surf + + cp DEXENTRY_AREA_RODS + jr z, .rods + cp DEXENTRY_AREA_TREES + cp DEXENTRY_AREA_CONTEST + + ; loop back around as if we are arriving for the first time, creating a closed-loop rotation +.first + xor a + ld [wPokedexEntryPageNum], a + call Dex_FindFirstList + cp DEXENTRY_AREA_NONE + jr nz, .found +.none + ld [wPokedexEntryType], a + ld de, .none_wild_text + hlcoord 2, 9 + call PlaceString + xor a + ld [wPokedexStatus], a ; wildmon entry index + ld [wPokedexEntryPageNum], a ; page num + call Pokedex_PrintPageNum + ret +.found + ld [wPokedexEntryType], a + xor a + ld [wPokedexStatus], a ; wildmon entry index + ld [wPokedexEntryPageNum], a ; page num + call Pokedex_DetailedArea + ret + +.grass + ; hl contains the table we are looking at, JohtoGrassWildMons, KantoGrassWildMons, or SwarmGrassWildMons + call Pokedex_DetailedArea_grass + jr .skip_empty_area_check +.surf + call Pokedex_DetailedArea_surf + jr .skip_empty_area_check +.rods + call Pokedex_DetailedArea_rods + jr .skip_empty_area_check +.trees +.contest +.skip_empty_area_check + cp -1 ; -1 means we skipped, ;;;; 0 is normal + jp z, .checkpoint +; .done + xor a + ret + +.none_wild_text: + db "NONE IN WILD@" + +Dex_FindFirstList: +; contest, trees(+rocks), grass swarm, grass, rods, water surf, surf +; grass, grass swarm, contest, trees(+rocks), surf, surf swarm, rods + ld hl, JohtoGrassWildMons + ld a, BANK(JohtoGrassWildMons) + call Dex_Check_Grass + and a + jr z, .grass_johto + ld hl, KantoGrassWildMons + ld a, BANK(KantoGrassWildMons) + call Dex_Check_Grass + and a + jr z, .grass_kanto + ld hl, SwarmGrassWildMons + ld a, BANK(SwarmGrassWildMons) + call Dex_Check_Grass + and a + jr z, .grass_swarm + + ld hl, JohtoWaterWildMons + ld a, BANK(JohtoWaterWildMons) + call Dex_Check_Surf + and a + jr z, .surf_johto + + ld hl, KantoWaterWildMons + ld a, BANK(KantoWaterWildMons) + call Dex_Check_Surf + and a + jr z, .surf_kanto + + ld hl, SwarmWaterWildMons + ld a, BANK(SwarmWaterWildMons) + call Dex_Check_Surf + and a + jr z, .surf_swarm + + xor a + ld [wPokedexStatus], a + ld hl, FishGroups ; we want to start at the beginning + call Dex_Check_Fishing + and a + jr z, .rods + + ; call Dex_Check_TreesRocks + ; and a + ; jr z, .treesrocks + + ; call Dex_Check_BugContest + ; and a + ; jr z, .contest + +; none found + ld a, DEXENTRY_AREA_NONE + ret +.grass_johto + ld a, DEXENTRY_AREA_GRASS_JOHTO + ret +.grass_kanto + ld a, DEXENTRY_AREA_GRASS_KANTO + ret +.grass_swarm + ld a, DEXENTRY_AREA_GRASS_SWARM + ret +.surf_johto + ld a, DEXENTRY_AREA_SURF_JOHTO + ret +.surf_kanto + ld a, DEXENTRY_AREA_SURF_KANTO + ret +.surf_swarm + ld a, DEXENTRY_AREA_SURF_SWARM + ret +.rods + ld a, DEXENTRY_AREA_RODS + ret +.treesrocks + ld a, DEXENTRY_AREA_TREES + ret +.contest + ld a, DEXENTRY_AREA_CONTEST + ret + +Print_area_entry: +; morn,day,nite,space,map name +; time of day + push hl ; pointer to map groupnum/name + push bc ; b has morn encounter rate, c is current print line? + push de ; day (e) /nite (d) encounter rates + hlcoord 3, 11 ; same position regardless + call DexEntry_adjusthlcoord ; current print line needs to be in c + ld [hl], $65 ; day icon tile + ld de, 6 + add hl, de + ld [hl], $6b ; day icon tile + add hl, de + ld [hl], $6c ; nite icon tile + hlcoord 7, 11 + call DexEntry_adjusthlcoord ; current print line needs to be in c + ld [hl], "<%>" + ld de, 6 + add hl, de + ld [hl], "<%>" + add hl, de + ld [hl], "<%>" +.time_done + pop de ; nite encounter % + push de +; encounter % for nite + ld a, d + ld [wTextDecimalByte], a + ld de, wTextDecimalByte + hlcoord 16, 11 + call DexEntry_adjusthlcoord ; current print line needs to be in c + lb bc, 1, 3 + call PrintNum +; encounter rate for day + pop de + pop bc + push bc + ld a, e + ld [wTextDecimalByte], a + ld de, wTextDecimalByte + hlcoord 10, 11 + call DexEntry_adjusthlcoord ; current print line needs to be in c + lb bc, 1, 3 + call PrintNum +; encounter rate for morn + pop bc + push bc + ld a, b + ld [wTextDecimalByte], a + ld de, wTextDecimalByte + hlcoord 4, 11 + call DexEntry_adjusthlcoord ; current print line needs to be in c + lb bc, 1, 3 + call PrintNum + pop bc + +; map name + ld a, BANK(JohtoGrassWildMons) + pop hl + push bc + call GetFarWord + pop bc + ld d, h + ld e, l + farcall GetMapGroupNum_Name + ; map name ptr is in de + hlcoord 2 , 10 + call DexEntry_adjusthlcoord ; current print line needs to be in c + ld a, BANK(MapGroupNum_Names) + push bc + call PlaceFarString + ld c, 4 + call DelayFrames + pop bc ; line counter + ret + +Pokedex_Skip_Empty_Area_Category: + xor a + ld [wPokedexStatus], a ; wildmon entry index + ld [wPokedexEntryPageNum], a ; page num + ld a, [wPokedexEntryType] ; johto, kanto, swarm + inc a + call DexEntry_NextCategory + ld a, -1 ; will signify + ret + +Pokedex_DetailedArea_grass: + push hl ; JohtoGrassWildMons, KantoGrassWildMons, or SwarmGrassWildMons. still need this push because the function probably clobbers hl + ; need to preserve Wildmon Index + ld a, [wPokedexStatus]; wildmon entry index + push af ; wildmon index + ld a, BANK(JohtoGrassWildMons) ; same bank for all 3 thankfully + call Dex_Check_Grass ; since we automatically roll into the next category, we need to check if there's even anything there for us again + ld b, a ; placeholder for a + pop af ; wildmon index + ld [wPokedexStatus], a ; wildmon entry index + pop hl ; in case we are about to exit + ld a, b + and a + jp nz, Pokedex_Skip_Empty_Area_Category + + push hl ; JohtoGrassWildMons, KantoGrassWildMons, or SwarmGrassWildMons + hlcoord 7, 9 + ld de, .grass_walk_text + call PlaceString + ld a, [wPokedexEntryType] + cp DEXENTRY_AREA_GRASS_JOHTO + jr nz, .chk_kanto + hlcoord 1, 9 + ld de, .johto_text + call PlaceString + jr .title_done +.chk_kanto + cp DEXENTRY_AREA_GRASS_KANTO + jr nz, .swarm + hlcoord 1, 9 + ld de, .kanto_text + call PlaceString + jr .title_done +.swarm + hlcoord 1, 9 + ld de, .swarm_text + call PlaceString +.title_done + + ld a, [wPokedexStatus] ; wildmon index + ldh [hMultiplicand + 2], a + xor a + ldh [hMultiplicand + 0], a + ldh [hMultiplicand + 1], a +; Multiply hMultiplicand (3 bytes) by hMultiplier. Result in hProduct. + ld a, GRASS_WILDDATA_LENGTH + ldh [hMultiplier], a + call Multiply ; wildmon entry index + ldh a, [hProduct + 2] + ld b, a + ldh a, [hProduct + 3] + ld c, a ; result of simple multiply in a + ; ld hl, JohtoGrassWildMons + pop hl ; JohtoGrassWildMons, KantoGrassWildMons, or SwarmGrassWildMons + add hl, bc; pointing to map group and num? + ld bc, 0 ; printed line count + push bc ; printed line count + push hl ; points to map group/num +.landmark_loop + ld a, BANK(JohtoGrassWildMons) + call GetFarWord + pop hl ; points to map group/num + pop bc ; line counter + push bc ; line counter + push hl ; points to map group/num + ; skip map encounter rates + inc hl + inc hl + inc hl + inc hl + inc hl ; should now point to lvl of encounter slot + inc hl ; now pointing to species +; morn + ld a, 0 ; morn + call Pokedex_Parse_grass ; encounter % in a + ld b, a + ld a, 1 ; day + call Pokedex_Parse_grass ; encounter % in a + ld e, a + ld a, 2 ; nite + call Pokedex_Parse_grass ; encounter % in a + ld d, a + ld a, b + and a + jr nz, .print + ld a, e + and a + jr nz, .print + ld a, d + and a + jr z, .done +.print + pop hl + push hl + call Print_area_entry + pop hl ; points to map group/num + pop bc ; line counter in c + inc c + inc c + push bc ; print line counter + push hl +.done + pop hl ; points to map group/num + pop bc ; line counter in c + ld a, [wPokedexStatus] ; wildmon index + inc a + ld [wPokedexStatus], a ; wildmon index + push bc ; line counter in c + ld b, 0 + ld c, GRASS_WILDDATA_LENGTH + add hl, bc + pop bc ; print counter + ; check to see if there is a next entry + ld a, BANK(JohtoGrassWildMons) + call GetFarByte ; hl is preserved, also wont clobber print line counter in c + cp -1 + jr z, .reached_end + + ; no need to handle hving printed all 3 slots if we had already reached the end of the table + ld a, c + cp $6 ; 3 entries, 6 rows + jr z, .max_print + + push bc ; print line counter in c + push hl + jr .landmark_loop +.reached_end + xor a + ld [wPokedexStatus], a ; wildmon entry index + ld [wPokedexEntryPageNum], a ; page num + ld a, [wPokedexEntryType] ; johto, janto, swarm + inc a + call DexEntry_NextCategory + xor a ; to ensure a isnt actually returned at -1. 0 is for normal + ret +.max_print + call Grass_check_any_remaining + and a + jr z, .reached_end + ld a, [wPokedexStatus] ; wildmon index + inc a + ld [wPokedexStatus], a ; wildmon index + call DexEntry_IncPageNum + ; page number is currently in a + xor a ; to ensure a isnt actually returned at -1. 0 is for normal + ret +.grass_walk_text: + db "GRASS/WALKING@" +.johto_text: + db "JOHTO@" +.kanto_text: + db "KANTO@" +.swarm_text: + db "SWARM@" + +Pokedex_Parse_grass: + push hl ; first species byte in morn + push bc ; current print line + ld c, 14 ; 7 entries * 2 bytes + call SimpleMultiply + ld b, 0 + ld c, a ; time of day adjustment + add hl, bc + ld c, 0; up to NUM_GRASSMON ; * 3 ; total mon entries, morn/day/nite, 7 per + ld b, 0 ; for calcing encounter % + ; 30%, 30%, 20%, 10%, 5%, 4%, 1% + push bc ; % and NUM_GRASSMON +.map_loop + ld a, BANK(JohtoGrassWildMons) + call GetFarByte ; bkup hl and change to getfarword for pk16? + ; a is species + inc hl ; pointing to next mon lvl + inc hl ; pointing to next mon species + ; a is mon species + ld d, a + ld a, [wCurSpecies] + pop bc ; % and NUM_GRASSMON + cp d ; mon species + jr nz, .not_match + call Add_encounter_percent_grass + add b + ld b, a +.not_match + inc c + push bc ; % and NUM_GRASSMON + ld a, c + cp NUM_GRASSMON + jr z, .map_loop_end ; end of day group + jr .map_loop + +.map_loop_end ; reach end of day group + pop bc ; % and NUM_GRASSMON + ld a, b ; % + pop bc ; print line, do not modify + pop hl ; first species byte in morn + ret + +Grass_check_any_remaining: + push hl + push de + push bc + + ld b, 0 + ld c, GRASS_WILDDATA_LENGTH + add hl, bc + ld bc, 0 ; fake print line counter + push bc + push hl +.landmark_loop + ld a, BANK(JohtoGrassWildMons) + call GetFarWord + pop hl ; points to map group/num + pop bc ; line counter + push bc ; line counter + push hl ; points to map group/num + ; skip map encounter rates + inc hl + inc hl + inc hl + inc hl + inc hl ; should now point to lvl of encounter slot + inc hl ; now pointing to species +; morn + ld a, 0 ; morn + call Pokedex_Parse_grass ; encounter % in a + ld b, a + ld a, 1 ; day + call Pokedex_Parse_grass ; encounter % in a + ld e, a + ld a, 2 ; nite + call Pokedex_Parse_grass ; encounter % in a + ld d, a + ld a, b + and a + jr nz, .entries_remaining + ld a, e + and a + jr nz, .entries_remaining + ld a, d + and a + jr nz, .entries_remaining +.done + pop hl ; points to map group/num + pop bc ; line counter in c + push bc ; line counter in c + ld b, 0 + ld c, GRASS_WILDDATA_LENGTH + add hl, bc + pop bc ; print counter + ; check to see if there is a next entry + ld a, BANK(JohtoGrassWildMons) + call GetFarByte ; hl is preserved + cp -1 + jr z, .reached_end + push bc + push hl + jr .landmark_loop + +.reached_end + pop bc + pop de + pop hl + ; 0 means none left + xor a + ret +.entries_remaining + pop hl ; realign stack, dont care about values + pop bc ; realign stack, dont care about values + + pop bc + pop de + pop hl + ld a, 1 + ret + +Add_encounter_percent_grass: + ; total in b + ; current count in c + push bc + call .body + ld a, b + pop bc + ret +.body: + ld a, c + ld b, 30 + and a + ret z + ld b, 30 + cp 1 + ret z + ld b, 20 + cp 2 + ret z + ld b, 10 + cp 3 + ret z + ld b, 5 + cp 4 + ret z + ld b, 4 + cp 5 + ret z + ld b, 1 + ret + +;;;;;;;;;;;;;;;;;;;;;;; SURF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Pokedex_DetailedArea_surf: + push hl ; JohtoWaterWildMons, KantoWaterWildMons, or SwarmWaterWildMons. still need this push because the function probably clobbers hl + ; need to preserve Wildmon Index + ld a, [wPokedexStatus]; wildmon entry index + push af ; wildmon index + ld a, BANK(JohtoWaterWildMons) ; same bank for all 3 thankfully + call Dex_Check_Surf ; since we automatically roll into the next category, we need to check if there's even anything there for us again + ld b, a ; placeholder for a + pop af ; wildmon index + ld [wPokedexStatus], a ; wildmon entry index + pop hl ; in case we are about to exit + ld a, b + and a + jp nz, Pokedex_Skip_Empty_Area_Category + + push hl ; JohtoWaterWildMons, KantoWaterWildMons, or SwarmWaterWildMons + hlcoord 7, 9 + ld de, .surfing_text + call PlaceString + ld a, [wPokedexEntryType] + cp DEXENTRY_AREA_SURF_JOHTO + jr nz, .chk_kanto + hlcoord 1, 9 + ld de, .johto_text + call PlaceString + jr .title_done +.chk_kanto + cp DEXENTRY_AREA_SURF_KANTO + jr nz, .swarm + hlcoord 1, 9 + ld de, .kanto_text + call PlaceString + jr .title_done +.swarm + hlcoord 1, 9 + ld de, .swarm_text + call PlaceString +.title_done + ld a, [wPokedexStatus] ; wildmon index + ldh [hMultiplicand + 2], a + xor a + ldh [hMultiplicand + 0], a + ldh [hMultiplicand + 1], a +; Multiply hMultiplicand (3 bytes) by hMultiplier. Result in hProduct. + ld a, WATER_WILDDATA_LENGTH + ldh [hMultiplier], a + call Multiply ; wildmon entry index + ldh a, [hProduct + 2] + ld b, a + ldh a, [hProduct + 3] + ld c, a ; result of simple multiply in a + ; ld hl, JohtoWaterWildMons + pop hl ; JohtoWaterWildMons, KantoWaterWildMons, or SwarmWaterWildMons + add hl, bc; pointing to map group and num? + ld bc, 0 ; printed line count + push bc ; printed line count + push hl ; points to map group/num +.landmark_loop + ld a, BANK(JohtoWaterWildMons) + call GetFarWord + pop hl ; points to map group/num + pop bc ; line counter + push bc ; line counter + push hl ; points to map group/num + ; skip map encounter rates, surf only has one, grass has 3 + inc hl + inc hl + inc hl ; should now point to lvl of encounter slot + inc hl ; now pointing to species +; morn + ld a, 0 ; morn + call Pokedex_Parse_surf ; encounter % in a + ld b, a ; pretend morning + ld d, a ; pretend day + ld e, a ; pretend night + and a + jr z, .done +.print + pop hl + push hl + call Print_area_entry + pop hl ; points to map group/num + pop bc ; line counter in c + inc c + inc c + push bc ; print line counter + push hl +.done + pop hl ; points to map group/num + pop bc ; line counter in c + ld a, [wPokedexStatus] ; wildmon index + inc a + ld [wPokedexStatus], a ; wildmon index + push bc ; line counter in c + ld b, 0 + ld c, WATER_WILDDATA_LENGTH + add hl, bc + pop bc ; print counter + ; check to see if there is a next entry + ld a, BANK(JohtoWaterWildMons) + call GetFarByte ; hl is preserved + cp -1 ; if we've printed a 3rd entry, this doesn't get checked + jr z, .reached_end + + ; we dont need to handle having printed all 3 slots if we were at the end of the table + ld a, c + cp $6 ; 3 entries, 6 rows + jr z, .max_print + push bc ; print counter + push hl + jr .landmark_loop +.reached_end + xor a + ld [wPokedexStatus], a ; wildmon entry index + ld [wPokedexEntryPageNum], a ; page num + ld a, [wPokedexEntryType] ; johto, janto, swarm + inc a + call DexEntry_NextCategory + xor a ; to ensure a isnt actually returned at -1. 0 is for normal + ret +.max_print + call Surf_check_any_remaining + and a + jr z, .reached_end + ld a, [wPokedexStatus] ; wildmon index + inc a + ld [wPokedexStatus], a ; wildmon index + call DexEntry_IncPageNum + ; page number is currently in a + xor a ; to ensure a isnt actually returned at -1. 0 is for normal + ret +.surfing_text: + db "SURFING@" +.johto_text: + db "JOHTO@" +.kanto_text: + db "KANTO@" +.swarm_text: + db "SWARM@" + +Pokedex_Parse_surf: + push hl ; first species byte, surfing has no time of day + push bc ; current print line + ld c, 0; up to NUM_WATERMON ; unlike grass, which is 21, this is only 3. and no time of day shenanigans + ld b, 0 ; for calcing encounter % + ; 60%, 30%, 10% + push bc ; % and NUM_WATERMON +.map_loop + ld a, BANK(JohtoWaterWildMons) + call GetFarByte ; bkup hl and change to getfarword for pk16? + ; a is species + inc hl ; pointing to next mon lvl + inc hl ; pointing to next mon species + ; a is mon species + ld d, a + ld a, [wCurSpecies] + pop bc ; % and NUM_GRASSMON + cp d ; mon species + jr nz, .not_match + call Add_encounter_percent_water + add b ; accumulated encounter total for this species is in b, this slot % is in a + ld b, a ; new accumulated encounter % total in b +.not_match + inc c + push bc ; % and NUM_WATERMON + ld a, c + cp NUM_WATERMON + jr z, .map_loop_end ; end of day group + jr .map_loop + +.map_loop_end ; reach end of day group + pop bc ; % and NUM_WATERMON + ld a, b ; % + pop bc ; print line, do not modify + pop hl ; first species byte in morn + ret + +Surf_check_any_remaining: + ; once we have printed max number of entries per page + ; need to determine if there's anymore in this category (johto/kanto/swarm) before switching to next category + push hl + push de + push bc + + ld b, 0 + ld c, WATER_WILDDATA_LENGTH + add hl, bc + ld bc, 0 ; fake print line counter + push bc + push hl +.landmark_loop + ld a, BANK(JohtoWaterWildMons) + call GetFarWord + pop hl ; points to map group/num + pop bc ; line counter + push bc ; line counter + push hl ; points to map group/num + ; skip map encounter rates, minus two for surf + inc hl + inc hl + inc hl ; should now point to lvl of encounter slot + inc hl ; now pointing to species +; morn + ld a, 0 ; morn + call Pokedex_Parse_surf ; encounter % in a + and a + jr nz, .entries_remaining +.done + pop hl ; points to map group/num + pop bc ; line counter in c + push bc ; line counter in c + ld b, 0 + ld c, WATER_WILDDATA_LENGTH + add hl, bc + pop bc ; print counter + ; check to see if there is a next entry + ld a, BANK(JohtoWaterWildMons) + call GetFarByte ; hl is preserved + cp -1 + jr z, .reached_end + push bc + push hl + jr .landmark_loop + +.reached_end + pop bc + pop de + pop hl + ; 0 means none left + xor a + ret +.entries_remaining + pop hl ; realign stack, dont care about values + pop bc ; realign stack, dont care about values + + pop bc + pop de + pop hl + ld a, 1 + ret + +Add_encounter_percent_water: + ; total in b + ; current count in c + ld a, c + and a + jr nz, .slot2 + ld a, 60 + jr .done +.slot2 + cp 1 + jr nz, .slot3 + ld a, 30 + jr .done +.slot3 + ld a, 10 +.done + ; whatever value is currently in a will added to b + ret + +;;;;;;;; First Pass Checking ;;;;;;;;;;;;;; + +Dex_Check_Grass: + ; hl is JohtoGrassWildMons, KantoGrassWildMons, or SwarmGrassWildMons + call GetFarByte + cp -1 ; swarm water table will be empty, just -1 + ret z +.landmark_loop + push hl ; points to map group/num + inc hl + inc hl + inc hl + inc hl ; should now point to lvl of encounter slot + inc hl ; now pointing to species + inc hl + ld a, BANK(JohtoGrassWildMons) + call Pokedex_LookCheck_grass + and a + jr z, .found + pop hl ; points to map group/num + ld a, [wPokedexStatus] + inc a + ld [wPokedexStatus], a + ld b, 0 + ld c, GRASS_WILDDATA_LENGTH + add hl, bc + ; check to see if there is a next entry + ld a, BANK(JohtoGrassWildMons) + call GetFarByte ; hl is preserved + cp -1 + ret z + ; push hl ; hl is JohtoGrassWildMons, KantoGrassWildMons, or SwarmGrassWildMons + jr .landmark_loop +.found + pop hl + xor a + ret + +Pokedex_LookCheck_grass: + ld bc, 0; up to NUM_GRASSMON ; * 3 ; total mon entries, morn/day/nite, 7 per + ; push bc ; up to NUM_GRASSMON * 3 + push af ; bank +.map_loop + pop af + push af + push bc + call GetFarByte ; bkup hl and change to getfarword for pk16? + ; a is species + inc hl ; pointing to next mon lvl + inc hl ; pointing to next mon species + ; a is mon species + ld d, a + ld a, [wCurSpecies] + pop bc + cp d + jr z, .found + ; pop bc ; % and NUM_GRASSMON + inc c + push bc ; % and NUM_GRASSMON + ld a, c + cp NUM_GRASSMON * 3 + jr z, .map_loop_end ; end of wildmon entry, species not found in any time + pop bc + jr .map_loop +.map_loop_end + pop bc + pop af + ld a, 1 + ret +.found + pop af + xor a + ret + +Dex_Check_Surf: + ; hl is JohtoGrassWildMons, KantoGrassWildMons, or SwarmGrassWildMons + call GetFarByte + cp -1 ; swarm water table will be empty, just -1 + ret z +.landmark_loop + push hl ; points to map group/num + ; db 2 percent ; encounter rate + ; db 15, WOOPER + ; db 20, QUAGSIRE + ; db 15, QUAGSIRE + inc hl + inc hl ; should now point to lvl of encounter slot + inc hl ; now pointing to species + inc hl + ld a, BANK(JohtoWaterWildMons) + ; ld a, BANK(KantoWaterWildMons) + call Pokedex_LookCheck_surf + and a + jr z, .found + pop hl ; points to map group/num + ld a, [wPokedexStatus] + inc a + ld [wPokedexStatus], a + ld b, 0 + ld c, WATER_WILDDATA_LENGTH + add hl, bc + ; check to see if there is a next entry + ld a, BANK(JohtoWaterWildMons) + call GetFarByte ; hl is preserved + cp -1 + ;jr z, .reached_end + ret z + ; push hl ; hl is JohtoGrassWildMons, KantoGrassWildMons, or SwarmGrassWildMons + jr .landmark_loop +.found + pop hl + xor a + ret + +Pokedex_LookCheck_surf: + ld bc, 0; up to NUM_WATERMON ; * 3 ; total mon entries, 1 per day, 3 per + ; push bc ; up to NUM_WATERMON * 3 + push af ; bank +.map_loop + pop af + push af + push bc + call GetFarByte ; bkup hl and change to getfarword for pk16? + ; a is species + inc hl ; pointing to next mon lvl + inc hl ; pointing to next mon species + ; a is mon species + ld d, a + ld a, [wCurSpecies] + pop bc + cp d + jr z, .found + ; pop bc ; % and NUM_WATERMON + inc c + push bc ; % and NUM_WATERMON + ld a, c + cp NUM_WATERMON ; no time of day considerations + jr z, .map_loop_end ; end of wildmon entry, species not found in any time + pop bc + jr .map_loop +.map_loop_end + pop bc + pop af + ld a, 1 + ret +.found + pop af + xor a + ret + +;;;;;;;;;;;;;;;;;;;;;;; FISHING RODS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Pokedex_DetailedArea_rods: + ld a, [wPokedexStatus]; wildmon entry index, 0 we havent started yet, 1 is old-shore, 2 is good-shore, 3 is super-shore, 4 is old-ocean, etc + and a + ; if not zero, we know that there are Fishing entries + jr nz, .auto_cont + + ld hl, FishGroups ; we want to start at the beginning + call Dex_Check_Fishing ; from prev category, we automatically roll into this category, we need to check if there's even anything there for us, so we use same func as first pass/check + and a ; if a is 0, means species was found somewhere + jp nz, Pokedex_Skip_Empty_Area_Category + +.auto_cont + xor a + ld [wPokedexEvoStage2], a + ld [wPokedexEvoStage3], a + + ; print the title, FISHING RODS + hlcoord 1, 9 + ld de, .fishing_text + call PlaceString + ; calculate where we left off + + call Fishing_MonIndex_Addr ; clobbers bc, return addr in hl + ld bc, 0 ; printed line count + push bc ; printed line count + ; push hl ; points to fishgroup, specific rod ptr +.landmark_loop + call Check_this_rod ; maybe make new version to accumulate encounter % properly + pop bc ; line counter + ld a, [wPokedexEvoStage2] ; day and morn + and a + jr nz, .print + ld a, [wPokedexEvoStage3] ; nite + and a + jp z, .prep_loop +.print + ; when we arrive here, we are printing our first rod for this Fishing Group, could be any + ; print the first rod, then check if we're super, if not, inc Index and check + ; again, check if we're super, if we ARE, check and inc + push bc ; line counter, rod in b, maps in c + pop bc ; ; line counter, rod in b, maps in c + ; push hl ; points to fishgroup, specific rod ptr + ld a, [wPokedexStatus] ; fish group starting at bit 3 + ; ld b,b +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + call Fishing_Print_Rod + push bc ; line counter, rod in b, maps in c, b has been inc'd + ; zero the cumulative bytes + xor a + ld [wPokedexEvoStage2], a + ld [wPokedexEvoStage3], a +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ; ld b,b + ld a, [wPokedexStatus] ; fish group starting at bit 3 + and 3 ; rod type mask, first 2 bits + cp 2 ; did we just print a super rod? + jr z, .print_rods_done ; we do not inc the index, prep loop will, and calcs new hl + cp 1 ; did we just print a good rod? + jr z, .good2super ; we just printed an good rod, inc index and check, print if not 0 + ; now we can assume we are an old rod + call Fishing_Inc_Index ; we are now indexed on the good rod + call Fishing_MonIndex_Addr + call Check_this_rod + and a + jr z, .good2super ; since we're on the good rod, we still need to check the super rod entry + ; + ld a, [wPokedexStatus] ; fish group starting at bit 3 + ; ld b,b + ; + pop bc ; line counter, rod in b, maps in c + call Fishing_Print_Rod + push bc ; line counter, rod in b, maps in c, now has been inc'd + ; zero the cumulative bytes + xor a + ld [wPokedexEvoStage2], a + ld [wPokedexEvoStage3], a +.good2super + call Fishing_Inc_Index ; we are now indexed on the super rod + call Fishing_MonIndex_Addr + call Check_this_rod + and a + jr z, .print_rods_done + ; + ld a, [wPokedexStatus] ; fish group starting at bit 3 + ; ld b,b + ; + pop bc ; line counter, rod in b, maps in c + call Fishing_Print_Rod + push bc ; line counter, rod in b, maps in c, now has been inc'd + ; zero the cumulative bytes + xor a + ld [wPokedexEvoStage2], a + ld [wPokedexEvoStage3], a + ; do we fall through to prep loop or skip directly to max print? + ; should probably fall through, so double check we dont double inc +.print_rods_done + ; pop hl ; points to fishgroup+rod table ; eventually get rid of the hl stack here? + ; call Fishing_MonIndex_Addr ; eventually get rid of the hl stack here? + ; since we will be exiting since we printed a rod and finished checking the group + pop bc ; line counter, rod in b, maps in c +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; map name ;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ld hl, FishGroups_Names + ; ld b,b + push bc ; line counter, rod in b, maps in c + ; call GetFarWord + ld a, [wPokedexStatus] + sra a + sra a + ld d, 0 + ld e, a + add hl, de + add hl, de + ld a, BANK(FishGroups_Names) + call GetFarWord ;; + ld d, h + ld e, l + ld a, BANK(FishGroups_Names) + hlcoord 1 , 10 ; we want allllll the chars we can have + pop bc ; line counter, rod in b, maps in c + call FishEntry_adjusthlcoord_map ; line counter, rod in b, maps in c + push bc + call PlaceFarString + pop bc + inc c ; since we printed a map name + push bc + + ld c, 4 + call DelayFrames + ; call WaitBGMap + + pop bc ; line counter +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +.prep_loop + ; ; increment wildmon index, if end is 2, zero, inc fish group + push bc + call Fishing_Inc_Index + pop bc + ;;;;;;;;;; check if we've finished all FishingGroups + ld a, [wPokedexStatus] ; fishgroup in bit 3 + sra a + sra a + cp NUM_FISHGROUPS ; + 1 + jr z, .reached_end + ;;;;;;;;;;;;;;;;;;;;; + + ld a, b ; number of rods printed, anything over 0 means we want a new page + and a + ; cp $1 ; experimental, since we're only printing FishGroup Name rn + jr nz, .max_print + + push bc ; print counter + ; push hl ; adjusted points to fishgroup+rod table + jp .landmark_loop +.reached_end + xor a + ld [wPokedexStatus], a ; wildmon entry index + ld [wPokedexEntryPageNum], a ; page num + ld a, [wPokedexEntryType] ; johto, janto, swarm + inc a + call DexEntry_NextCategory + xor a ; to ensure a isnt actually returned at -1. 0 is for normal + ret +.max_print + ; ld b,b + call Fishing_MonIndex_Addr + call Rods_check_any_remaining ; if entries remaining for this species, will return 0 + and a + jr nz, .reached_end ; no more remaining entries for this species, do not increment page + + call DexEntry_IncPageNum + ; page number is currently in a + xor a ; to ensure a isnt actually returned at -1. 0 is for normal + ret +.fishing_text: + db "FISHING RODS@" + +Fishing_Print_Rod: + ; day (e) /nite (d) encounter rates + ld a, [wPokedexEvoStage3] + ld d, a + ld a, [wPokedexEvoStage2] + call Adjust_percent_fish + ld e, a + ld a, d + call Adjust_percent_fish + ld d, a + + push bc ; b has rods printed, c is current maps printed + push de ; day (e) /nite (d) encounter rates + +; time of day icons + ; ld b,b + hlcoord 9, 10 ; same position regardless + call FishEntry_adjusthlcoord_rod ; current print line needs to be in c + ld [hl], $6b ; day icon tile + ld de, 6 + add hl, de + ld [hl], $6c ; nite icon tile +; % char + hlcoord 13, 10 + call FishEntry_adjusthlcoord_rod ; current print line needs to be in c + ld [hl], "<%>" + ld de, 6 ; de should still be 6 since we push/pop de in adjust, check this + add hl, de + ld [hl], "<%>" + + pop de ; nite encounter % in d, day in e + pop bc + push bc ; probably uneccessary but will check later + push de +; encounter % for nite + ld a, d + ld [wTextDecimalByte], a + ld de, wTextDecimalByte + hlcoord 16, 10 + call FishEntry_adjusthlcoord_rod ; current print line needs to be in b + lb bc, 1, 3 + call PrintNum +; encounter rate for day + pop de + pop bc + push bc + ld a, e + ld [wTextDecimalByte], a + ld de, wTextDecimalByte + hlcoord 10, 10 + call FishEntry_adjusthlcoord_rod ; current print line needs to be in b + lb bc, 1, 3 + call PrintNum + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;; Rod Name;;;;;;;;;;;; + pop bc + push bc +;;;;;;;;;; Print Rod based on Index ;;;;;;;;;;;;;;;;; + ld a, [wPokedexStatus] + and 3 ; bit mask for rod type, first 2 bits + ld de, oldrod_text + and a + jr z, .printrod + ld de, goodrod_text + cp 1 + jr z, .printrod + ld de, superrod_text +.printrod + hlcoord 1 , 10 + call FishEntry_adjusthlcoord_rod ; current print line needs to be in b + call PlaceString + + ld c, 4 + call DelayFrames + ; call WaitBGMap + ; ld b,b + + pop bc ; line counter + inc b ; we've printed one rod + ret +oldrod_text: + db "-OLD@" +goodrod_text: + db "-GOOD@" +superrod_text: + db "-SUPER@" + +FishEntry_adjusthlcoord_rod: + ; NOTE, preserve bc before calling this + push bc + ld c, b + ; given: current printed map lines in c, rod lines in b + push af + push de + ld a, 20 + ; the num of moves already printed should still be in bc + call SimpleMultiply ; uses c as the other number + ; result in a + ld d, 0 + ld e, a + add hl, de ; allows us to print on the proper row lol + pop de + pop af + pop bc + ret + +FishEntry_adjusthlcoord_map: +; NOTE, preserve bc before calling this +; given: current printed map lines in c, rod lines in b +; given: set hl coords to baseline location SAME AS ROD, [[[10]]] + push af + push de + push bc + ld c, b ; can be 1, 2, or 3, we wouldn't be here if we havent printed a rod + ld a, 20 + call SimpleMultiply ; uses c as the other number + ; result in a + ld d, 0 + ld e, a + add hl, de ; allows us to print on the proper row by adjusting the pre-calcd hlcoord + pop bc ; now we need to add more lines depending on how many maps we've already printed + push bc + ; should always be 0 since we havent implemented that yet + ld a, 10 + call SimpleMultiply ; uses c as the other number + ; result in a + ld d, 0 + ld e, a + add hl, de ; allows us to print on the proper row by adjusting the pre-calcd hlcoord + + pop bc + pop de + pop af + ret + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FISHING ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Dex_Check_Fishing: +; For first pass checks +; NUM_FISHGROUPS +; FISHGROUP_DATA_LENGTH + ; ld hl, FishGroups + ld bc, 0 ; NUM_FISHGROUPS set up for mainloop + ld a, [wPokedexStatus] + and a + jr z, .mainloop + sra a + sra a ; get fishing group, so we can properly calc to the last fishing group + ld c, a +.mainloop + push bc ; NUM_FISHGROUPS + push hl ; FishGroups + FISHGROUP_DATA_LENGTH * n + inc hl ; skip fishing group's bite rate + call Check_Rods + and a + jr z, .found + pop hl ; FishGroups + FISHGROUP_DATA_LENGTH * n + ld bc, FISHGROUP_DATA_LENGTH + add hl, bc ; FishGroups + FISHGROUP_DATA_LENGTH * n + pop bc ; FISH GROUP # + inc c ; FISH GROUP # + + ld a, NUM_FISHGROUPS + cp c + ret z ; not found + jr .mainloop +.found + pop hl + pop bc + xor a + ret + +;;;; Check all Rods in this Group +Check_Rods: + ; looks for first instance of Species, starting with Old Rod +; ; Get encounter data by rod: + ld bc, 0 ; rod +.rod_loop + push bc + push hl +; ; 0: Old +; ; 1: Good +; ; 2: Super + ; inc hl + add hl, bc + add hl, bc + ; set b to 0? + ld b, 0 + call Check_this_rod + ; if a = 0, no match, done + ; if a not 0, accumulate % + ; b will now be this entry's coded % + push af + ; call Fishing_Inc_Index + pop af + and a + jr z, .notfound ; check next rod type +.found + pop hl + pop bc + xor a + ret +.notfound + ; zero the cumulative bytes + xor a + ld [wPokedexEvoStage2], a + ld [wPokedexEvoStage3], a + call Fishing_Inc_Index + pop hl + pop bc + inc c ; 0 -> 1, good rod, 1 ->2 super rod + ld a, 3 + ; will most likely move this check to parent function and be able to query based on rod + cp c + ret z ; means we've checked 3rd rod, super rod, done, no match + jr .rod_loop + +;;;; Look for Species in this Group's Rod, report encounter % for day and nite in 2-byte (WRAM?) that's its not being used during calcs +Check_this_rod: +; day cumulative encounter %: ldh [hMultiplier], a +; nite cumulative encounter %: ldh [hMultiplicand], + ; ld b,b + push hl + ld a, BANK(FishGroups) + call GetFarWord +.loop + ; check for 100% aka 255. In table, probability is not percentage (out of 100) + ; the probabilities add up to 255. So need to cross multiply to get % T.T + ld a, BANK(FishGroups) + call GetFarByte ; index? this is the probability + + ld c, a ; current entry %, b has prev entry %, or 0 if first entry + sub b ; actual cumulative encounter % is difference between entry's % and prev entry's %, now in a + ; push af ; if this table entry is a match, we will need this value, accumulate based on species match + ld b, c ; for the next entry's calculation, need raw % not the calculated difference + ld c, a ; adjusted % + + inc hl + ld a, BANK(FishGroups) + call GetFarByte ; successfuly gets the Species in the Rod table + ld d, a + ld e, a + and a + call z, Dex_FishTimeGroupsGet ; if zero, not the species, + ; looks at Daytime table to determine the species + ld a, [wCurSpecies] + ; we cannot assume we didnt call the ToD table, which can hold two species, + ; so check both d and e + cp d + jr z, .found + cp e + jr z, .found + ; pop af ; dont need this value (diff of entry %), clean stack +.resume + ld a, b + cp 255 ; this is how we tell if we are looking at the last entry of the table (FF) + jr z, .end + ; we have not reached the end, increment to next entry % loop + inc hl ; species + inc hl ; encounter level + jr .loop +.found + ; return true flag for match, plus % + ; b has adjusted % + ; a is species rn, use to determine day/nite + cp d + jr nz, .trynite + push af ; species + ld a, [wPokedexEvoStage2] + add c + ld [wPokedexEvoStage2], a + pop af ; species +.trynite + cp e + jr nz, .resume + ld a, [wPokedexEvoStage3] + add c + ld [wPokedexEvoStage3], a + jr .resume +.end + pop hl + ; call Fishing_Inc_Index + ld a, [wPokedexEvoStage2] + and a + ret nz + ld a, [wPokedexEvoStage3] ; will ret correct value if 0 or not + ; and a + ; ret nz + ; xor a + ; ; b should be this entry's percentage still, regardless of match or not + ret +;;;;;;;;;;;;;;;;;;;;;;;;; Main 3 Fishing Funcs End;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;; Fishing Utility Funcs ;;;;;;;;;;;;;;;;;;;;;;; +Dex_FishTimeGroupsGet: + push hl + push bc + push af + inc hl + ld a, BANK(FishGroups) + call GetFarByte ; index + ; a is the index + ld hl, TimeFishGroups + ld b, 0 + ld c, a + add hl, bc + add hl, bc + add hl, bc + add hl, bc + ld a, BANK(TimeFishGroups) + call GetFarByte + ld d, a ; species 1 + inc hl + inc hl + ld a, BANK(TimeFishGroups) + call GetFarByte + ld e, a ; species 2 +.done + pop af + pop bc + pop hl + ret + +Adjust_percent_fish: + ; hMultiplicand + ; hMultiplier. Result in hProduct. + push hl + push bc + push de + ldh [hMultiplicand], a + ld a, 100 + ldh [hMultiplier], a + call Multiply + ; Divide hDividend length b (max 4 bytes) by hDivisor. Result in hQuotient. + ; All values are big endian. + ld b, 2 + ; ldh a, [hProduct] + ; ldh [hDividend], a + ld a, 255 + ldh [hDivisor], a + call Divide + pop de + pop bc + pop hl + ldh a, [hQuotient + 3] + cp 100 + ret z + cp 0 + ret z + inc a + ret + +Fishing_MonIndex_Addr: + ; clobbers bc and de + ; return addr in hl + ; given: Wildmon Index (Fishing Group in bits 3+, rod type in bits 1&2) + ld a, [wPokedexStatus] ; wildmon index, will be zero if we are here for the first time + and 3 ; masks the rod value + push af ; rod value + ld a, [wPokedexStatus] + sra a; , 2 ; fish group # + sra a + ldh [hMultiplicand + 2], a + xor a + ldh [hMultiplicand + 0], a + ldh [hMultiplicand + 1], a +; Multiply hMultiplicand (3 bytes) by hMultiplier. Result in hProduct. + ld a, FISHGROUP_DATA_LENGTH + ldh [hMultiplier], a + call Multiply ; wildmon entry index + ldh a, [hProduct + 2] + ld b, a + ldh a, [hProduct + 3] + ld c, a ; result of simple multiply in a + ld hl, FishGroups + add hl, bc; pointing to fishgroup bite rate + pop af ; 0 = old rod, 1 = good rod, 2 = super rod + inc hl ; skip the bite rate byte + add a ; double the value since the rod's are pointers/words + ld de, 0 + ld e, a + add hl, de + ret + +Rods_check_any_remaining: + ; given: hl is addr of next rod, already adjusted for prev rod type and/or new fishing group + ; step 1, depending on this new rod type, if not old rod, check_this_rod individually until next fish group + ld a, [wPokedexStatus] + and 3 ; rod type mask for first 2 bits + jr z, .check_rods + cp 2 ; super rod + jr z, .super + ; we are at good rod rn + call Check_this_rod ; 0 means not found + and a + jr nz, .found + call Fishing_Inc_Index + ; check_this_rod calls inc_index which auto incs hl depending on rod type +.super + call Check_this_rod ; 0 means not found + and a + jr nz, .found + call Fishing_Inc_Index +.check_rods + ; hl was already set properly to beginning of Fish group when this func is called + dec hl ; Dex_Check_Fishing assumed you havent already accounted for Fishing Group's bite rate bit + call Dex_Check_Fishing ; 0 means found + ; and a + ; jr z, .found + ret +.found + xor a + ret + ; call Dex_Check_Fishing with hl aligned to new fish group old rod + ; we are about to exit so we dont need to align the hl addr with new incremented Wildmon index + ; when we come back, will auto calculate new Wildmon Index addr + +Fishing_Inc_Index: + ; given hl if using it + ld a, [wPokedexStatus] ; wildmon index + and 3 ; mask for first 2 bits + inc a + cp 3 + jr z, .incfishgrp + ; no new fish grp needed yet + ld a, [wPokedexStatus] ; wildmon index + inc a + ld [wPokedexStatus], a ; wildmon index + inc hl + inc hl ; two bytes to next ptr in fishgrp + ret +.incfishgrp + ld a, [wPokedexStatus] ; wildmon index + sra a + sra a + inc a + sla a + sla a + ld [wPokedexStatus], a ; wildmon index, also zeros the rod type + inc hl + inc hl + inc hl ; need to skip extra byte for fishgrp bite rate + ret + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Dex_Check_BugContest: +; ; all entries are unique, i.e. Caterpie wont be on the list twice +; ; but theoretically could, if wanted different ranges to have different encounter rates +; ; so we should check the rest of the table anyways in the main Contest function +; ; ContestMons: +; ; encounter %, species, min lvl, max lvl +; ;db 20, CATERPIE, 7, 18 +; ld hl, ContestMons +; .loop +; push hl ; no map group/num in this table +; inc hl ; skip enounter rate, now pointing to species +; ld a, [wCurSpecies] +; ld b, a +; ld a, BANK(ContestMons) +; call GetFarByte +; cp b +; jr z, .found +; pop hl ; points to map group/num +; ld a, [wPokedexStatus] ; increment how many entries we've checked so far +; inc a +; ld [wPokedexStatus], a +; ld b, 0 +; ld c, 4 ; contest data length is not defined , unlike GRASS_WILDDATA_LENGTH etc, but it's 4 bytes +; add hl, bc +; ; check to see if there is a next entry +; ld a, BANK(ContestMons) +; call GetFarByte ; hl is preserved +; cp -1 ; we reched the end of the table without finding a species match +; ret z +; jr .loop +; .found +; pop hl +; xor a +; ret + +; Dex_Check_TreesRocks: +; xor a +; ld [wStatsScreenFlags], a +; ld hl, TreeMons +; ld bc, 0 ; NUM_TREEMON_SETS +; .loop +; push bc +; push hl ; points to TreeMons + 2n +; ; skip map encounter rates +; ld a, BANK(TreeMons) +; call GetFarWord ; TreeMonSet_City, etc encounter % +; inc hl ; now pointing to species +; .mini_loop +; ld a, [wCurSpecies] +; ld b, a +; ld a, BANK(TreeMons) +; call GetFarByte +; cp b +; jr z, .found_end_miniloop +; inc hl +; inc hl +; ld a, BANK(TreeMons) +; call GetFarByte +; cp -1 +; jr z, .found_end_miniloop +; inc hl +; jr .mini_loop +; .found_end_miniloop +; cp -1 +; jr nz, .found +; ld a, [wStatsScreenFlags] +; and a +; jr nz, .rare_done +; inc a +; ld [wStatsScreenFlags], a +; inc hl +; inc hl +; jr .mini_loop +; .rare_done +; pop hl ; points to TreeMons + 2n +; ld b, 0 +; ld c, 2 ; contest not defined , aka GRASS_WILDDATA_LENGTH +; add hl, bc ; points to TreeMons + 2n +; pop bc +; inc c +; ld a, NUM_TREEMON_SETS +; cp c +; ret z +; ld a, [wPokedexStatus] +; inc a +; ld [wPokedexStatus], a +; jr .loop +; .found +; pop hl +; pop bc +; xor a +; ret diff --git a/engine/pokedex/pokedex_3.asm b/engine/pokedex/pokedex_3.asm index b59fd1df25c..46df6a883de 100644 --- a/engine/pokedex/pokedex_3.asm +++ b/engine/pokedex/pokedex_3.asm @@ -150,6 +150,42 @@ DrawDexEntryScreenRightEdge: ldh [hBGMapAddress + 1], a ret +DrawDexEntryScreenRightEdge_Evo: + ldh a, [hBGMapAddress] + ld l, a + ldh a, [hBGMapAddress + 1] + ld h, a + push hl + inc hl + ld a, l + ldh [hBGMapAddress], a + ld a, h + ldh [hBGMapAddress + 1], a + hlcoord 19, 0 + ld [hl], $66 + hlcoord 19, 1 + ld a, $67 + ld b, 16 + call Pokedex_FillColumn2 + ; ld [hl], $68 + hlcoord 19, 17 + ld [hl], $68 + xor a + ld b, SCREEN_HEIGHT + hlcoord 19, 0, wAttrmap + call Pokedex_FillColumn2 + + ; ld b, SCGB_POKEDEX_EVO + ; call GetSGBLayout + + call WaitBGMap2 + pop hl + ld a, l + ldh [hBGMapAddress], a + ld a, h + ldh [hBGMapAddress + 1], a + ret + Pokedex_FillColumn2: ; A local duplicate of Pokedex_FillColumn. push de diff --git a/engine/pokedex/pokedex_evolution_page.asm b/engine/pokedex/pokedex_evolution_page.asm new file mode 100644 index 00000000000..3b8987a0ada --- /dev/null +++ b/engine/pokedex/pokedex_evolution_page.asm @@ -0,0 +1,973 @@ +DisplayDexMonEvos: + ld a, DEXENTRY_EVO + ld [wPokedexEntryType], a + call DisableSpriteUpdates + callfar ClearSpriteAnims2 + farcall Pokedex_GetSelectedMon + ld a, [wTempSpecies] + ld [wCurPartySpecies], a + ld [wCurSpecies], a + ld [wTempMonSpecies], a + hlcoord 0, 4 + lb bc, SCREEN_HEIGHT - 4, SCREEN_WIDTH + call ClearBox + call EVO_Draw_border + ; hlcoord 5, 16 + ; call GetPokemonName + ; call PlaceString + ; ld b,b + ld a, [wTempSpecies] + callfar GetPreEvolution + callfar GetPreEvolution + ld a, [wCurPartySpecies] + ld [wTempSpecies], a + ld [wCurSpecies], a + ld [wTempMonSpecies], a + ; push af ; earliest EVO species + + ld de, .stage1_text + hlcoord 6, 1 + call PlaceString + hlcoord 6, 2 + call EVO_sethlcoord + call GetPokemonName + call PlaceString + ; hlcoord 5, 17 + ; ld de, .EVO_text + ; call PlaceString + ld a, -1 + ld [wStatsScreenFlags], a + call EVO_DrawSpriteBox + call EVO_place_CaughtIcon + hlcoord 6, 2 + call EVO_sethlcoord + call EVO_place_Mon_Types + call EVO_place_Mon_Icon + xor a + ld [wStatsScreenFlags], a + + ;pop af ; earliest evo species + ld a, [wCurPartySpecies] + dec a + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, BANK(EvosAttacksPointers) + call GetFarWord + ld a, BANK("Evolutions and Attacks") + call GetFarByte ; if zero, no evos + and a + jr nz, .does_evo + hlcoord 3, 6 + ld de, .doesnt_evo_text + call PlaceString + ret ; no Evos +.does_evo + push hl + push af ; manner of evo + ld a, [wCurDamage] + and a + jr z, .normal_line + ; we're in a multi-page evo line + pop hl ; dont need this value, just fix stack + pop af ; dont need this value, just fix stack + ;call EVO_print_pagenum ; returns additional page num/index + ld a, [wCurDamage] ; page num + ld c, 4 ; we want the 4th Evo + call SimpleMultiply + call EVO_set_multi_page_ptr + ld a, d + push hl ; manner of evo byte + push af ; manner of evo + ld a, [wCurDamage + 1] ; stage 2 + and a + jr z, .normal_line + hlcoord 6, 4 + ld de, .stage3_text + call PlaceString + ld b, 1 ; stage 3 + jr .cont +.normal_line + ; push af + ; push hl + hlcoord 6, 4 + ld de, .stage2_text + call PlaceString + ld b, 0 ; stage 2 +.cont + hlcoord 6, 5 + call EVO_sethlcoord + pop af ; manner of evo + pop hl ; manner of EVO byte + inc hl ; hl points to manner byte +1 + + ld c, 0 ; count +; get num of stage 2 evos +; MAIN LOOP START +.main_loop + push bc ; count and stage + push af ; manner of evo + push hl ; manner of EVO byte + 1 +; get Species + cp EVOLVE_STAT + jr nz, .no_extra1 + inc hl +.no_extra1 + inc hl ; species byte + ld a, BANK("Evolutions and Attacks") + call GetFarByte ; species + ld [wNamedObjectIndex], a + call GetPokemonName ; uses NamedObjectIndex + call EVO_gethlcoord + ; dec hl + call PlaceString + call EVO_DrawSpriteBox + call EVO_place_CaughtIcon + call EVO_place_Mon_Types + call EVO_place_Mon_Icon + call EVO_inchlcoord + +; done printing species + pop hl ; manner of evo byte +1 + pop af ; manner of evo + push hl ; manner of evo byte +1 + push af ; manner of evo +; print evo info + cp EVOLVE_LEVEL + call z, EVO_level + cp EVOLVE_ITEM + call z, EVO_item + cp EVOLVE_TRADE + call z, EVO_trade + cp EVOLVE_HAPPINESS + call z, EVO_happiness + cp EVOLVE_STAT + call z, EVO_stats +; after the Evo manner specific prints, HL should be pointing to next EVO manner or 0 + pop af ; manner of evo + pop hl ; manner of evo byte +1 +; get Next EVO Manner or 0 + cp EVOLVE_STAT + jr nz, .no_extra2 + inc hl +.no_extra2 + inc hl ; species byte + inc hl ; points to next evo manner or 0 + ld a, BANK(EvosAttacksPointers) + call GetFarByte + pop bc ; previous count + inc c ; current count + inc hl ; if there's a next EVO entry, points to Evo +1 now + push af ; manner of next evo + ld a, c + ld [wStatsScreenFlags], a ; current page slot counter + pop af ; manner of next evo + and a ; checks if evo left in stage + jr z, .done_stage + + push af + ld a, c ; ld a, [wStatsScreenFlags] + cp 3 + jp z, .exit_early_print_cont + pop af + jr .main_loop +.done_stage + xor a + cp b + jr nz, .done ; we were in stage 3 +.done_stage2 + ld a, c ; count of stage 2 + cp $1 + jr nz, .done + cp 3 + jp z, .exit_early_print_cont2 + push bc ; count and stage + ld a, [wCurPartySpecies] ; stage 1 evo + dec a + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, BANK(EvosAttacksPointers) + call GetFarWord + ld a, BANK("Evolutions and Attacks") + call GetFarByte ; manner of stage 1 evo ; if zero, no evos + cp EVOLVE_STAT + jr nz, .no_extra3 + inc hl +.no_extra3 + inc hl + inc hl ; species byte + ld a, BANK("Evolutions and Attacks") + call GetFarByte ; stage 2 species + dec a + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, BANK(EvosAttacksPointers) + call GetFarWord + ld a, BANK("Evolutions and Attacks") + call GetFarByte ; manner of stage 1 evo ; if zero, no evos + + pop bc + and a + jr z, .done ; stage 2 mon doesnt evolve + ; stage 2 mon does evolve + push hl ; manner of evo byte + push af ; manner of evo + ; print Stage 3: + call EVO_gethlcoord + ld de, .stage3_text + inc b + push bc + call PlaceString + call DelayFrame + call EVO_inchlcoord + pop bc + pop af ; manner of evo + pop hl ; manner of evo byte + inc hl ; manner of evo byte +1 + jp .main_loop +.done + xor a + ld [wPokedexEvoStage2], a + ld [wPokedexEvoStage3], a + ld a, [wCurDamage] + and a + jr nz, .done_multi + ld a, [wStatsScreenFlags] + cp 1 + jr nz, .not_single + ; hlcoord 14, 17 + ; ld [hl], $7f ; black square +.not_single + xor a + ld [wStatsScreenFlags], a + ret +.done_multi + ld a, b + inc a + ld [wStatsScreenFlags], a + ld a, -1 + ld [wCurDamage + 1], a + + ld de, .cont_page_text + hlcoord 12, 16 + call PlaceString + ret +.stage1_text: + db $6b, $6c, $6d, "1@" + ; db "STAGE 1:@" +.stage2_text: + db $6b, $6c, $6d, "2@" + ; db "STAGE 2:@" +.stage3_text: + db $6b, $6c, $6d, "3@" + ; db "STAGE 3 +.cont_page_text: + db $63, $64, $65, $66, "@" + ; db "CONT", $eb, "@" +; .EVO_text: +; db "EVOLUTIONS@" +.doesnt_evo_text: + db "DOES NOT EVOLVE@" +.exit_early_print_cont + pop af +.exit_early_print_cont2 + ld a, b ; current stage, 0 = stage 2, 1 = stage 3 + ld [wCurDamage + 1], a + + ld de, .cont_page_text + hlcoord 12, 16 + call PlaceString + ret + +EVO_sethlcoord: + push af + ld a, h + ld [wPokedexEvoStage2], a + ld a, l + ld [wPokedexEvoStage3], a + pop af + ret +EVO_gethlcoord:: + push af + ld a, [wPokedexEvoStage2] + ld h, a + ld a, [wPokedexEvoStage3] + ld l, a + pop af + ret +EVO_inchlcoord: + push af + push bc + ; push de + ld a, [wPokedexEvoStage2] + ld h, a + ld a, [wPokedexEvoStage3] + ld l, a + push hl + ld b, 0 + ld c, SCREEN_WIDTH + add hl, bc + ld a, h + ld [wPokedexEvoStage2], a + ld a, l + ld [wPokedexEvoStage3], a + pop hl + pop bc + pop af + ret + +EVO_level: + push hl ; pointing to lvl byte + call EVO_gethlcoord + ld [hl], $75 ; $5d + ; ld de, .level_text + ; call PlaceString ; "LVL" + + pop hl ; pointing to lvl byte + ld a, BANK("Evolutions and Attacks") + call GetFarByte + ld [wTextDecimalByte], a + ld de, wTextDecimalByte + call EVO_inchlcoord + inc hl + lb bc, PRINTNUM_LEFTALIGN | 1, 2 + call PrintNum ; lvl evolved at + call EVO_inchlcoord + ret +; .level_text: +; db "LVL@" + +EVO_item: + ld a, BANK("Evolutions and Attacks") + call GetFarByte + call EVO_inchlcoord + push af ; item index + ld de, .item_text + call PlaceString ; item: + + pop af ; item index + ld [wNamedObjectIndex], a + call GetItemName + + call EVO_inchlcoord + call PlaceString + call EVO_inchlcoord + ret +.item_text: + db "ITEM@" + +EVO_trade: + ld a, BANK("Evolutions and Attacks") + call GetFarByte + push af ; item index or -1 for no item + call EVO_gethlcoord + ld de, .trade_text + call PlaceString ; mon species + + pop af ; item index + cp -1 + jr z, .done + push af ; trade item index + + call EVO_inchlcoord + ld b, 0 + ld c, 5 + add hl, bc + ld de, .hold_text + call PlaceString + + pop af + ld [wNamedObjectIndex], a + call GetItemName + call EVO_inchlcoord + call PlaceString +.done + call EVO_inchlcoord + ret +.trade_text: + db "TRADE@" +.hold_text: + db " ", "<+>","@" + +EVO_happiness: + push hl ; time of day byte + ; call EVO_inchlcoord + ; ld de, .happiness_text + ; call PlaceString ; mon species + + pop hl ; time of day byte + ld a, BANK("Evolutions and Attacks") + call GetFarByte + + ld de, .anytime_text + cp TR_ANYTIME + jr z, .done + ld de, .sunup_text + cp TR_MORNDAY + jr z, .done + ld de, .nite_text +.done + call EVO_inchlcoord + call PlaceString + call EVO_inchlcoord + ret +.happiness_text: + db $6e, "@"; "HAPPINESS@" +.anytime_text: + db $6e, "@" + ; db "ANYTIME@" +.sunup_text: + db $6e, $71, $72, "@" + ; db "MORN/DAY@" +.nite_text: + db $6e, $73, "@" + ; db "NITE@" + +EVO_stats: + push hl ; level Needed byte + call EVO_gethlcoord + ld [hl], $75 ; for vram1 side + + pop hl ; level needed byte + ld a, BANK("Evolutions and Attacks") + call GetFarByte ; stats needed + + inc hl ; stats const needed byte + push hl ; stats const needed byte +;print lvl + ld [wTextDecimalByte], a + ld de, wTextDecimalByte + call EVO_inchlcoord + lb bc, PRINTNUM_LEFTALIGN | 1, 2 + inc hl ; + call PrintNum + + pop hl ; stats const needed byte + ld a, BANK("Evolutions and Attacks") + call GetFarByte ; Stats Const, ATK >= DEF etc + + ld de, .atk_eq_def_text + cp ATK_EQ_DEF + jr z, .done + ld de, .atk_gt_def_text + cp ATK_LT_DEF + jr z, .done + ld de, .atk_lt_def_text +.done + call EVO_inchlcoord + call PlaceString + call EVO_inchlcoord + ret + +.atk_eq_def_text: + db "ATK = DEF@" +.atk_gt_def_text: + db "ATK > DEF@" +.atk_lt_def_text: + db "ATK < DEF@" + +EVO_place_Mon_Types: + push af + push bc + push hl + ld a, [wTempMonSpecies] + ld a, [wTempSpecies] + ld a, [wCurSpecies] + push af + ld a, [wCurPartySpecies] + + ld a, [wTempSpecies] + ld [wCurSpecies], a + call GetBaseData + +; set up the palette based on the current mon slot + ld a, [wBaseType1] + ld c, a + call EVO_adjust_type_index + ld d, c + ld a, [wBaseType2] + ld c, a ; type 2 + call EVO_adjust_type_index + ld b, d + call .determine_paladdr ; pal 1, 2, 3, or 4 + farcall LoadDexTypePals + call SetPalettes + call DelayFrame + + ld a, [wBaseType1] + ld c, a + call EVO_adjust_type_index + ld a, c + ; ld hl, DexTypeLightIconGFX + ld hl, TypeLightIconGFX + ld bc, 4 * LEN_2BPP_TILE + call AddNTimes + ld d, h + ld e, l + call .determine_mon_slot1 + ld a, b + push af + ; lb bc, BANK(DexTypeLightIconGFX), 4 + lb bc, BANK(TypeLightIconGFX), 4 + + ld a, $1 + ldh [rVBK], a + call Request2bpp + + call EVO_type_gethlcoord + pop af + ld [hli], a + inc a + ld [hli], a + inc a + ld [hli], a + inc a + ld [hl], a + ld a, $0 + ldh [rVBK], a +; 2nd Type + ld a, [wBaseType1] + ld b, a + ld a, [wBaseType2] + cp b + jp z, .done + ld c, a ; type 2 + call EVO_adjust_type_index + + ld a, c ; type 2 +; load type 2 tiles + ld hl, TypeDarkIconGFX ; DexTypeDarkIconGFX + ld bc, 4 * LEN_2BPP_TILE + call AddNTimes + ld d, h + ld e, l + call .determine_mon_slot2 + ld a, b + push af + + ld a, $1 + ldh [rVBK], a + ; lb bc, BANK(DexTypeDarkIconGFX), 4 + lb bc, BANK(TypeDarkIconGFX), 4 + call Request2bpp + + call EVO_type2_gethlcoord + pop af + ld [hli], a + inc a + ld [hli], a + inc a + ld [hli], a + inc a + ld [hl], a + ld a, $0 + ldh [rVBK], a +.done + pop af + ld [wCurSpecies], a + pop hl + pop bc + pop af + ret +.determine_mon_slot1: + ld a, [wStatsScreenFlags] + ld b, $40 + ld hl, vTiles2 tile $40 + cp -1 + ret z + ld b, $48 + ld hl, vTiles2 tile $48 + cp 0 + ret z + ld b, $50 + ld hl, vTiles2 tile $50 + cp 1 + ret z + ld b, $58 + ld hl, vTiles2 tile $58 + ret +.determine_mon_slot2: + ld a, [wStatsScreenFlags] + ld b, $44 + ld hl, vTiles2 tile $44 + cp -1 + ret z + ld b, $4c + ld hl, vTiles2 tile $4c + cp 0 + ret z + ld b, $54 + ld hl, vTiles2 tile $54 + cp 1 + ret z + ld b, $5c + ld hl, vTiles2 tile $5c + ret +.determine_paladdr: + ld a, [wStatsScreenFlags] + ld de, wBGPals1 palette 1 ; + 2 + cp -1 + ret z + ld de, wBGPals1 palette 2 ; + 2 + cp 0 + ret z + ld de, wBGPals1 palette 3 ; + 2 + cp 1 + ret z + ld de, wBGPals1 palette 4 ; + 2 + ret + +EVO_type_gethlcoord: + push bc + push af + call EVO_gethlcoord + ld b, 0 + ld c, 11 + add hl, bc + + dec hl + pop af + pop bc + ret + +EVO_type2_gethlcoord: + push bc + push af + call EVO_gethlcoord + ld b, 0 + ld c, 11 + add hl, bc + ld b, 0 + ld c, SCREEN_WIDTH + add hl, bc + dec hl + pop af + pop bc + ret + +EVO_adjust_type_index: + ld a, c +; Skip Bird + cp BIRD + jr c, .done + cp UNUSED_TYPES + dec a + jr c, .done + sub UNUSED_TYPES +.done + ld c, a + ret + +EVO_place_Mon_Icon: + push af + push bc + push de + push hl + ld a, [wStatsScreenFlags] + inc a + ldh [hObjectStructIndex], a + ld hl, LoadMenuMonIcon + ld a, BANK(LoadMenuMonIcon) + ld e, MONICON_UNUSED + rst FarCall + + pop hl + pop de + pop bc + pop af + ret + +EVO_DrawSpriteBox: + push hl + push de + push bc + push af +; white rectangle/squares + + call EVO_gethlcoord + ld a, [wStatsScreenFlags] + cp -1 + jr z, .stage1 + cp 1 + jr z, .slot3 + cp 2 + jr z, .slot4 +; slot 1 + hlcoord 1, 5 ; 0, 4 + jr .start +.slot3 + hlcoord 1, 9 ; 0, 8 + jr .start +.slot4 + hlcoord 1, 13 ; 0, 12 + jr .start +.stage1 + hlcoord 1, 1 ; 0, 0 +.start +; top left corner + ; hlcoord 0, 0 + ld [hl], $77 + push hl + inc hl +; top border + ld a, $7b + ld bc, 2 + ; hlcoord 1, 0 + push hl + call ByteFill + pop hl +; top right corner + ; hlcoord 3, 0 + inc hl + inc hl + ld [hl], $78 + + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + push hl +; left side + push hl + ; hlcoord 0, 1 + lb bc, 2, 1 + ld a, $7d + call FillBoxWithByte + pop hl + inc hl +;white sprite box fill + ; hlcoord 1, 1 + lb bc, 2, 2 + ld a, $62 ; $7f + push hl + call FillBoxWithByte + pop hl +; right side + inc hl + inc hl + ; hlcoord 3, 1 + lb bc, 2, 1 + ld a, $7e + call FillBoxWithByte + +; bottom left corner + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + add hl, bc + ; hlcoord 0, 3 + ld [hl], $79 +; bottom border + inc hl + ld a, $7c + ld bc, 2 + ; hlcoord 1, 3 + push hl + call ByteFill + pop hl +; bottom right corner + inc hl + inc hl + ; hlcoord 3, 3 + ld [hl], $7a + ; ld a, [wStatsScreenFlags] + ; cp 2 + ; jr nz, .notslot4 + ; hlcoord 1, 16 + ; ld a, $39 + ; ld [hli], a + ; ld [hli], a + ; ld [hli], a + ; ld [hli], a +.notslot4 + pop af + pop bc + pop de + pop hl + ret + +EVO_set_multi_page_ptr: + ld c, a + ; push af ; 4th entry, 8th entry, etc + ld a, [wCurDamage + 1] + ; if we're continuing the stage 3 mons, + ; need to dec a to account for stage 2 mon that wont be in evo list + and a + jr z, .start + ld a, [wCurDamage] + ld b, a + ld a, c + sub b + ld c, a +.start + push bc + ld a, [wCurPartySpecies] ; stage 1 evo + dec a + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, BANK(EvosAttacksPointers) + call GetFarWord + ld a, [wCurDamage + 1] + and a + call nz, .get_stage2 +.loop + ld a, BANK("Evolutions and Attacks") + call GetFarByte ; manner of evo ; if zero, no evos + ld d, a + pop bc ; 4th entry, 8th entry, etc + dec c + ld a, c + and a + ret z ; hl should be pointing at "espeon"'s manner of EVO byte ptr + push bc + ; check for 0? shouldnt encounter 0 + ld a, d + cp EVOLVE_STAT + jr nz, .no_extra1 + inc hl +.no_extra1 + inc hl + inc hl ; species byte + inc hl ; next EVO manner byte + jr .loop +.get_stage2: + ld a, BANK("Evolutions and Attacks") + call GetFarByte ; manner of evo ; if zero, no evos + ; check for 0? shouldnt encounter 0 + cp EVOLVE_STAT + jr nz, .no_extra2 + inc hl +.no_extra2 + inc hl + inc hl ; species byte + ld a, BANK("Evolutions and Attacks") + call GetFarByte ; stage 2 species + dec a + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, BANK(EvosAttacksPointers) + call GetFarWord + ret + +EVO_place_CaughtIcon: + push hl + push de + push bc + push af + ld a, [wTempSpecies] + dec a + call CheckCaughtMon + and a + jr z, .done + call EVO_gethlcoord + ld a, [wStatsScreenFlags] + cp -1 + jr z, .stage1 + cp 1 + jr z, .slot3 + cp 2 + jr z, .slot4 +; slot 1 + hlcoord 5, 5 ; 0, 4 + jr .start +.slot3 + hlcoord 5, 9 ; 0, 8 + jr .start +.slot4 + hlcoord 5, 13 ; 0, 12 + jr .start +.stage1 + hlcoord 5, 2 ; 0, 0 +.start + ld [hl], $76 ; pokeball icon +.done + pop af + pop bc + pop de + pop hl + ret + +EVO_Draw_border: + ; ld b,b + +; Request1bpp +; Load 1bpp at b:de to occupy c tiles of hl. + xor a + ldh [hBGMapMode], a + farcall Pokedex_BlackOutBG + + ld a, 1 + ldh [rVBK], a + + lb bc, BANK(vTiles2), 16 + ld de, $8c00 + ld hl, vTiles2 + call Request1bpp + lb bc, BANK(vTiles2), 16 + ld de, $8c00 + ld hl, vTiles2 tile $10 ; + $10 + call Request1bpp + lb bc, BANK(vTiles2), 16 + ld de, $8c00 + ld hl, vTiles2 tile $20 ; + $20 + call Request1bpp + lb bc, BANK(vTiles2), 16 + ld de, $8c00 + ld hl, vTiles2 tile $30 ; + $30 + call Request1bpp + farcall DrawDexEntryScreenRightEdge_Evo + hlcoord 19, 1 + lb bc, SCREEN_HEIGHT - 2, 1 + ld a, $7f ; erase copied right border + call FillBoxWithByte + hlcoord 19, 0 + ld [hl], $34 + hlcoord 19, 17 + ld [hl], $39 + hlcoord 0, 0 + ld bc, SCREEN_WIDTH + ld a, $34 ; top border + call ByteFill + + hlcoord 0, 17 + ld bc, SCREEN_WIDTH + ld a, $39 ; bottom border + call ByteFill + + hlcoord 0, 0 + lb bc, SCREEN_HEIGHT, 1 + ld a, $36 ; left border + call FillBoxWithByte + + hlcoord 0, 0 + ld a, $33 + ld [hl], a; $65 ; upper left corner + hlcoord 0, 17 ; lower left corner + ld [hl], $38 + xor a + ldh [hBGMapMode], a + + ld b, SCGB_POKEDEX_EVO + call GetSGBLayout + + ; print b > back + hlcoord 16, 16 + ld de, .back_page_text + call PlaceString + call WaitBGMap + ret +.back_page_text: + db $67, $68, $69, $6a, "@" \ No newline at end of file diff --git a/engine/pokedex/pokedex_pics_page.asm b/engine/pokedex/pokedex_pics_page.asm new file mode 100644 index 00000000000..c7c28ee0430 --- /dev/null +++ b/engine/pokedex/pokedex_pics_page.asm @@ -0,0 +1,222 @@ +Pokedex_PlaceAnimatedFrontpic: + ld a, [wCurSpecies] + ld [wCurPartySpecies], a + ld [wTempSpecies], a + ld [wTempMonSpecies], a + ld [wCurPartySpecies], a + farcall Pokedex_GetSelectedMon + call GetBaseData + ld hl, wTempMonDVs + predef GetUnownLetter + ld bc, wTempSpecies + call SetPalettes + call .AnimateMon + call SetPalettes + ret + +.AnimateMon: + ld hl, wStatsScreenFlags + set 5, [hl] + ld a, [wTempSpecies] + ld [wCurPartySpecies], a + hlcoord 1, 1 + +;;; Taken from _PrepMonFrontPic + push hl + ld de, vTiles2 + predef GetMonFrontpic + pop hl + xor a + ldh [hGraphicStartTile], a + lb bc, 7, 7 + predef PlaceGraphic + xor a + ld [wBoxAlignment], a + +.get_animation + ld a, [wTempSpecies] + ld [wCurPartySpecies], a + + farcall Pokedex_LoadTextboxSpaceGFX + ld de, vTiles2 tile $00 + predef GetAnimatedFrontpic + hlcoord 1, 1 + ld d, $0 + ld e, ANIM_MON_MENU + predef LoadMonAnimation + ld hl, wStatsScreenFlags + set 6, [hl] + ret + +Pokedex_PlayMonCry_AnimateFrontpic: + xor a + ld [wPokedexEntryType], a +.loop + call .Pokedex_WaitAnim + call .PokedexWaitCry + ld a, [wPokedexEntryType] + ;bit 7, a + cp 150 + jr nz, .loop + xor a + ld [wPokedexEntryType], a + + call WaitBGMap + ret + +.PokedexWaitCry: + ld a, [wPokedexEntryType] + inc a + ld [wPokedexEntryType], a + callfar PlaySpriteAnimations + ret + +.Pokedex_WaitAnim: + ld hl, wStatsScreenFlags + bit 6, [hl] + jr nz, .try_anim + bit 5, [hl] + jr nz, .finish + call DelayFrame + ret +.try_anim + farcall SetUpPokeAnim + jr nc, .finish + ld hl, wStatsScreenFlags + res 6, [hl] + ret +.finish + ld hl, wStatsScreenFlags + res 5, [hl] + farcall HDMATransferTilemapToWRAMBank3 + ret + +Pokedex_PlaceBackPic: + ld a, $1 + ldh [rVBK], a + ld a, [wCurSpecies] + ld [wCurPartySpecies], a + ld [wTempSpecies], a + ld [wTempMonSpecies], a + call GetBaseData + ld hl, wTempMonDVs + predef GetUnownLetter + ld de, vTiles0 tile $80 + predef GetMonBackpic + ld a, $80 + ldh [hGraphicStartTile], a + lb bc, 6, 6 + hlcoord 11, 2 + predef PlaceGraphic + + ld a, $0 + ldh [rVBK], a + ret + +Pokedex_place_Mon_Icon: + push af + push bc + push de + push hl + ; farcall InitPartyMenuOBPals +; white box + hlcoord 2, 14 + ld a, $7f + ld [hli], a + ld [hld], a + ld bc, SCREEN_WIDTH + add hl, bc + ld [hli], a + ld [hld], a +; sprite box border + hlcoord 1, 13 + ld [hl], $77 + inc hl + ld a, $7b + ld [hli], a + ld [hli], a + ld [hl], $78 + hlcoord 1, 14 + ld [hl], $7d + hlcoord 1, 15 + ld [hl], $7d + hlcoord 1, 16 + ld [hl], $79 + ld a, $7c + inc hl + ld [hli], a + ld [hli], a + ld [hl], $7a + hlcoord 4, 14 + ld [hl], $7e + hlcoord 4, 15 + ld [hl], $7e + ; call Dex_Pics_DrawBorder +; load the icon sprite + ld a, 11 + ld [wStatsScreenFlags], a + xor a + ldh [hObjectStructIndex], a + ld hl, LoadMenuMonIcon + ld a, BANK(LoadMenuMonIcon) + ld e, MONICON_UNUSED + rst FarCall + farcall SetDexMonIconColor_SpritePage + pop hl + pop de + pop bc + pop af + ret + +Dex_Pics_DrawBorder: + hlcoord 0, 0 + ld [hl], $77 + inc hl + + ld bc, 17 + ld a, $7b + call ByteFill + ld [hl], $78 + + hlcoord 8, 0 + ld [hl], $78 + inc hl + inc hl + ld [hl], $77 + + hlcoord 0, 8 + ld [hl], $79 + inc hl + + ld bc, 17 + ld a, $7c + call ByteFill + ld [hl], $7a + + hlcoord 8, 8 + ld [hl], $7a + inc hl + inc hl + ld [hl], $79 + + hlcoord 0, 1 + lb bc, 7, 1 + ld a, $7d + call FillBoxWithByte + hlcoord 10, 1 + lb bc, 7, 1 + ld a, $7d + call FillBoxWithByte + hlcoord 8, 1 + lb bc, 7, 1 + ld a, $7e + call FillBoxWithByte + hlcoord 18, 1 + lb bc, 7, 1 + ld a, $7e + call FillBoxWithByte + hlcoord 9, 0 + lb bc, 9, 1 + ld a, $7f + call FillBoxWithByte + ret \ No newline at end of file diff --git a/engine/pokedex/pokedex_stats_page.asm b/engine/pokedex/pokedex_stats_page.asm new file mode 100644 index 00000000000..960412bf624 --- /dev/null +++ b/engine/pokedex/pokedex_stats_page.asm @@ -0,0 +1,653 @@ +Pokedex_GBS_Stats: + ld de, BS_HP_text + hlcoord 3, 10 + call PlaceString ; TEXT for 'HP' name + + ld de, BS_ATK_text + hlcoord 3, 11 + call PlaceString ; TEXT for 'ATK' name + + ld de, BS_DEF_text + hlcoord 12, 11 + call PlaceString ; TEXT for 'DEF' name + + ld de, BS_SPCL_text + hlcoord 3, 12 + call PlaceString ; TEXT for 'SPCL' name + + ld de, BS_SPCLDEF_text + hlcoord 12, 12 + call PlaceString + + ld de, BS_SPEED_text + hlcoord 12, 10 + call PlaceString + + hlcoord 7, 10 + ld de, wBaseHP + ld c, 3 ;digits + ld b, 1 ;bytes + call PrintNum + hlcoord 16, 10 + ld de, wBaseSpeed + ld c, 3 ;digits + ld b, 1 ;bytes + call PrintNum + + hlcoord 7, 11 + ld de, wBaseAttack + ld c, 3 ;digits + ld b, 1 ;bytes + call PrintNum + hlcoord 16, 11 + ld de, wBaseDefense + ld c, 3 ;digits + ld b, 1 ;bytes + call PrintNum + + hlcoord 7, 12 + ld de, wBaseSpecialAttack + ld c, 3 ;digits + ld b, 1 ;bytes + call PrintNum + hlcoord 16, 12 + ld de, wBaseSpecialDefense + ld c, 3 ;digits + ld b, 1 ;bytes + call PrintNum + + hlcoord 3, 14 + ld de, .BS_Total_text + call PlaceString + + xor a + ld [wCurDamage], a + ld [wCurDamage + 1], a + + ld h, 0 + ld a, [wBaseHP] + ld l, a + ld b, h + ld c, l + ld h, 0 + ld a, [wBaseSpeed] + ld l, a + add hl, bc + + ld b, h + ld c, l + ld h, 0 + ld a, [wBaseAttack] + ld l, a + add hl, bc + + ld b, h + ld c, l + ld h, 0 + ld a, [wBaseDefense] + ld l, a + add hl, bc + + ld b, h + ld c, l + ld h, 0 + ld a, [wBaseSpecialAttack] + ld l, a + add hl, bc + + ld b, h + ld c, l + ld h, 0 + ld a, [wBaseSpecialDefense] + ld l, a + add hl, bc + + ld a, h + ld [wCurDamage], a + ld a, l + ld [wCurDamage + 1], a + + hlcoord 15, 14 + ld de, wCurDamage + lb bc, 2, 3 + call PrintNum + + xor a + ld [wCurDamage], a + ld [wCurDamage + 1], a + ret +.BS_Total_text: + db "Base Total:@" + +BS_HP_text: + db " HP@" +BS_SPEED_text: + db "SPE@" +BS_ATK_text: + db "ATK@" +BS_DEF_text: + db "DEF@" +BS_SPCL_text: + db "SPA@" +BS_SPCLDEF_text: + db "SPD@" + +Pokedex_Get_Items: +; TODO: Add code to differentiate same items in both entries, special cases + hlcoord 3, 10 + ld de, .BS_ITEM_text + call PlaceString + hlcoord 3, 11 + ld de, .BS_ITEM1 + call PlaceString + hlcoord 3, 12 + ld de, .BS_ITEM2 + call PlaceString + +.WildHeldItems1: + ld de, .ThreeDashes + ld a, [wBaseItem1] + and a + jr z, .Item1Done + ld b, a + farcall TimeCapsule_ReplaceTeruSama + ld a, b + ld [wNamedObjectIndex], a + call GetItemName +.Item1Done + hlcoord 7, 11 + call PlaceString +.WildHeldItems2: + ld de, .ThreeDashes + ld a, [wBaseItem2] + and a + jr z, .Item2Done + ld b, a + farcall TimeCapsule_ReplaceTeruSama + ld a, b + ld [wNamedObjectIndex], a + call GetItemName +.Item2Done + hlcoord 7, 12 + call PlaceString + ret +.ThreeDashes: + db "---@" +.BS_ITEM_text: + db "Wild Held Items:@" +.BS_ITEM1: + db "[1]@" +.BS_ITEM2: + db "[2]@" + +Pokedex_EggG_SetUp: + ld a, [wBaseEggGroups] + push af + and $f + ld b, a + pop af + and $f0 + swap a + ld c, a + hlcoord 3, 10 + ld de, .BS_Egg_text1 + push bc + call PlaceString + pop bc + call Pokedex_Get_EggGroup + hlcoord 4, 11 + push bc + call PlaceString + pop bc + ld a, b + cp c + jr z, .EggGroups_DONE +;;; Print second egg group + hlcoord 3, 10 + ld de, .BS_Egg_text2 + push bc + call PlaceString + pop bc + ld b, c + call Pokedex_Get_EggGroup + hlcoord 4, 12 + call PlaceString ;no longer need to preserve bc +.EggGroups_DONE + ret +.BS_Egg_text1: + db "Egg Group: @" +.BS_Egg_text2: + db "Egg Groups: @" + + +Pokedex_Get_EggGroup: +;; have the fixed group num in 'a' already +;; return 'de' as the text for matching group + ld a, b + ld de, .EggG_Monster_text + cp EGG_MONSTER + jr z, .Eggret + ld a, b + ld de, .EggG_Amphibian_text + cp EGG_WATER_1 + jr z, .Eggret + ld a, b + ld de, .EggG_Bug_text + cp EGG_BUG + jr z, .Eggret + ld a, b + ld de, .EggG_Flying_text + cp EGG_FLYING + jr z, .Eggret + ld a, b + ld de, .EggG_Field_text + cp EGG_GROUND + jr z, .Eggret + ld a, b + ld de, .EggG_Fairy_text + cp EGG_FAIRY + jr z, .Eggret + ld a, b + ld de, .EggG_Grass_text + cp EGG_PLANT + jr z, .Eggret + ld a, b + ld de, .EggG_HumanLike_text + cp EGG_HUMANSHAPE + jr z, .Eggret + ld a, b + ld de, .EggG_Invertebrate_text + cp EGG_WATER_3 + jr z, .Eggret + ld a, b + ld de, .EggG_Mineral_text + cp EGG_MINERAL + jr z, .Eggret + ld a, b + ld de, .EggG_Amorphous_text + cp EGG_INDETERMINATE + jr z, .Eggret + ld a, b + ld de, .EggG_Fish_text + cp EGG_WATER_2 + jr z, .Eggret + ld a, b + ld de, .EggG_Dragon_text + cp EGG_DRAGON + jr z, .Eggret + ld a, b + ld de, .EggG_Ditto_text + cp EGG_DITTO + jr z, .Eggret + ld de, DexEntry_NONE_text +.Eggret + ret +;;;Egg Groups +.EggG_Monster_text: + db "Monster@" +.EggG_Amphibian_text: + db "Amphibian@" +.EggG_Bug_text: + db "Bug@" +.EggG_Flying_text: + db "Flying@" +.EggG_Field_text: + db "Field@" +.EggG_Fairy_text: + db "Fairy@" +.EggG_Grass_text: + db "Grass@" +.EggG_HumanLike_text: + db "Humane-Like@" +.EggG_Invertebrate_text: + db "Invertebrate@" +.EggG_Mineral_text: + db "Mineral@" +.EggG_Amorphous_text: + db "Amorphous@" +.EggG_Fish_text: + db "Fish@" +.EggG_Ditto_text: + db "ALL@" +.EggG_Dragon_text: + db "Dragon@" + +Pokedex_Get_GenderRatio:: + hlcoord 3, 15 + ld de, .GR_Text + call PlaceString + ld a, [wBaseGender] + ld de, .GR_always_fem + cp GENDER_F100 + jr z, .GR_print + ld a, [wBaseGender] + ld de, .GR_always_male + cp GENDER_F0 + jr z, .GR_print + ld a, [wBaseGender] + ld de, .GR_QuarterF + cp GENDER_F25 + jr z, .GR_print + ld a, [wBaseGender] + ld de, .GR_Equal + cp GENDER_F50 + jr z, .GR_print + ld a, [wBaseGender] + ld de, .GR_QuartM + cp GENDER_F75 + jr z, .GR_print + ld a, [wBaseGender] + ld de, .GR_MostMale + cp GENDER_F12_5 + jr z, .GR_print + ld de, DexEntry_NONE_text +.GR_print + hlcoord 14, 15 + call PlaceString + ret + +.GR_Text + db "Gender <%>: @" +.GR_always_fem: + db "♀ Only@" +.GR_always_male + db "♂ Only@" +.GR_QuarterF + db "1♀:4♂@" +.GR_Equal + db "1♂:1♀@" +.GR_QuartM + db "4♀:1♂@" +.GR_MostMale + db "8♂:1♀@" + +Pokedex_CatchRate: + hlcoord 3, 15 + ld de, .BS_Catchrate + call PlaceString + hlcoord 15, 15 + lb bc, PRINTNUM_LEFTALIGN | 1, 3 + ld de, wBaseCatchRate + call PrintNum + ret +;Catch Rate +.BS_Catchrate: + db "Catch Rate: @" + +Pokedex_Get_Growth:: +;Growth rate + ; hlcoord 3, 14 + ; ld de, .BS_Growth_text + ; call PlaceString + ld a, [wBaseGrowthRate] + ld de, .growth_Medfast + cp GROWTH_MEDIUM_FAST + jr z, .Growth_print + ld a, [wBaseGrowthRate] + ld de, .growth_slightfast + cp GROWTH_SLIGHTLY_FAST + jr z, .Growth_print + ld a, [wBaseGrowthRate] + ld de, .growth_slightslow + cp GROWTH_SLIGHTLY_SLOW + jr z, .Growth_print + ld a, [wBaseGrowthRate] + ld de, .growth_medslow + cp GROWTH_MEDIUM_SLOW + jr z, .Growth_print + ld a, [wBaseGrowthRate] + ld de, .growth_fast + cp GROWTH_FAST + jr z, .Growth_print + ld de, .growth_slow +.Growth_print + hlcoord 3, 15 + call PlaceString + ret +; .BS_Growth_text: +; db "GROWTH RATE: @" +.growth_Medfast: + db "Med. Fast Growth@" +.growth_slightfast + db "Sml. Fast Growth@" +.growth_slightslow + db "Sml. Slow Growth@" +.growth_medslow + db "Med. Slow Growth@" +.growth_fast + db "Fast Growth@" +.growth_slow + db "Slow Growth@" + +Pokedex_PrintBaseExp: +; wBaseExp + hlcoord 3, 14 + ld de, .Exp_text + call PlaceString + hlcoord 14, 14 + ld de, wBaseExp + ; lb bc, PRINTNUM_LEFTALIGN | 1, 3 + lb bc, 1, 3 + call PrintNum + ret +.Exp_text: + db "EXP Yield:@" + +Pokedex_PrintHatchSteps: +; wBaseEggSteps + hlcoord 3, 13 + ld de, .HatchSteps_text + call PlaceString + hlcoord 14, 13 + ld de, wBaseEggSteps + lb bc, 1, 3 + call PrintNum + ret +.HatchSteps_text: + db "Egg Cycles:@" + +Pokedex_PrintBaseEVs: +; wBaseHPAtkDefSpdEVs +; wBaseSpAtkSpDefEVs +; + db (\1 << 6) | (\2 << 4) | (\3 << 2) | \4 +; + db (\5 << 6) | (\6 << 4) + ld de, .EVyield_text + hlcoord 3, 10 + call PlaceString + + ld a, $6 + ld [wStatsScreenFlags], a + jp .prep_stack +.start_print + ld a, [wBaseHPAtkDefSpdEVs] + and %11000000 + jr z, .ev_atk + swap a + srl a + srl a + pop hl + add a, "0" + ld [hl], a + pop hl + ld de, BS_HP_text + call PlaceString + call .dec_stack_count +.ev_atk + ld a, [wBaseHPAtkDefSpdEVs] + and %00110000 + jr z, .ev_def + swap a + pop hl + add a, "0" + ld [hl], a + pop hl + ld de, BS_ATK_text + call PlaceString + call .dec_stack_count +.ev_def + ld a, [wBaseHPAtkDefSpdEVs] + and %00001100 + jr z, .ev_speed + srl a + srl a + pop hl + add a, "0" + ld [hl], a + pop hl + ld de, BS_DEF_text + call PlaceString + call .dec_stack_count +.ev_speed + ld a, [wBaseHPAtkDefSpdEVs] + and %00000011 + jr z, .ev_spatk + pop hl + add a, "0" + ld [hl], a + + pop hl + ld de, BS_SPEED_text + call PlaceString + call .dec_stack_count +.ev_spatk + ld a, [wBaseSpAtkSpDefEVs] + and %11000000 + jr z, .ev_spdef + swap a + srl a + srl a + pop hl + add a, "0" + ld [hl], a + pop hl + ld de, BS_SPCL_text + call PlaceString + call .dec_stack_count +.ev_spdef + ld a, [wBaseSpAtkSpDefEVs] + and %00110000 + jr z, .ev_done + swap a + pop hl + add a, "0" + ld [hl], a + pop hl + ld de, BS_SPCLDEF_text + call PlaceString + call .dec_stack_count +.ev_done + ld a, [wStatsScreenFlags] + and a + ret z + call .dec_stack_count + pop hl + pop hl + jr .ev_done +.EVyield_text: + db "EV Yield:@" + +.prep_stack + hlcoord 12, 13 + push hl + hlcoord 16, 13 + push hl + hlcoord 4, 13 + push hl + hlcoord 8, 13 + push hl + hlcoord 12, 12 + push hl + hlcoord 16, 12 + push hl + hlcoord 4, 12 + push hl + hlcoord 8, 12 + push hl + hlcoord 12, 11 + push hl + hlcoord 16, 11 + push hl + hlcoord 4, 11 + push hl + hlcoord 8, 11 + push hl + jp .start_print +.dec_stack_count: + ld a, [wStatsScreenFlags] + dec a + ld [wStatsScreenFlags], a + ret + +Pokedex_HeightWeight: +; height string + hlcoord 3, 14 + ld de, .Height + call PlaceString + +; weight string + hlcoord 3, 15 + ld de, .Weight + call PlaceString +; lbs string + hlcoord 11, 15 + ld de, .Pounds + call PlaceString + +; get pokemon's dex entry ptr in b:de + ld a, [wTempSpecies] + ld b, a + call GetDexEntryPointer + ld h, d + ld l, e +; skip species nickname +.loop1 + ld a, b ; bank + call GetFarByte + inc hl + cp "@" + jr nz, .loop1 + +; hl should now be at height + push hl ; keep the ptr, for weight + ld a, b ; bank + push af ; keep bank + call GetFarWord + ld a, h + ld [wPoisonStepCount], a + ld a, l + ld [wPoisonStepCount + 1], a + ld de, wPoisonStepCount +; Print the height, with two of the four digits in front of the decimal point + hlcoord 7, 14 + lb bc, 2, (2 << 4) | 4 + call PrintNum +; get weight + pop af ; bank + pop hl ; ptr + inc hl + inc hl + call GetFarWord + ld a, h + ld [wPoisonStepCount], a + ld a, l + ld [wPoisonStepCount + 1], a + ld de, wPoisonStepCount +; Print the weight, with four of the five digits in front of the decimal point + hlcoord 5, 15 + lb bc, 2, (4 << 4) | 5 + call PrintNum + +; Replace the decimal point with a ft symbol + hlcoord 9, 14 + ld [hl], $5e + inc hl + inc hl + inc hl + ld [hl], $5f + ret +.Height: + db "HT@" ; ? ?? @" ; HT ?'??" +.Weight: + db "WT@" ; ???lb@" +.Pounds: + db "0lbs@" diff --git a/engine/pokegear/pokegear.asm b/engine/pokegear/pokegear.asm index 05577bb301f..35aa3944655 100644 --- a/engine/pokegear/pokegear.asm +++ b/engine/pokegear/pokegear.asm @@ -73,6 +73,17 @@ PokeGear: .InitTilemap: call ClearBGPalettes call ClearTilemap +; ; time of day icons +; push af +; xor a +; ldh [hBGMapMode], a +; ld de, Pokedex_ExtraTiles tile $f +; ld hl, vTiles2 tile $63 +; lb bc, BANK(Pokedex_ExtraTiles), 3 ; tiles +; call Request2bpp +; pop af +; ldh [hBGMapMode], a +; call ClearSprites call DisableLCD xor a @@ -310,18 +321,12 @@ InitPokegearTilemap: .Clock: ld de, ClockTilemapRLE call Pokegear_LoadTilemapRLE - hlcoord 12, 1 - ld de, .switch - call PlaceString hlcoord 0, 12 lb bc, 4, 18 call Textbox call Pokegear_UpdateClock ret -.switch - db " SWITCH▶@" - .Map: ld a, [wPokegearMapPlayerIconLandmark] cp LANDMARK_FAST_SHIP @@ -466,6 +471,9 @@ PokegearClock_Joypad: and A_BUTTON | B_BUTTON | START | SELECT jr nz, .quit ld a, [hl] + and D_LEFT + jr nz, .left + ld a, [hl] and D_RIGHT ret z ld a, [wPokegearFlags] @@ -482,6 +490,16 @@ PokegearClock_Joypad: ld c, POKEGEARSTATE_PHONEINIT ld b, POKEGEARCARD_PHONE jr .done +.left + ; if have radio card, load that, else, load phone + ld a, [wPokegearFlags] + bit POKEGEAR_RADIO_CARD_F, a + jr nz, .radio_card + jr .no_map_card +.radio_card + ld c, POKEGEARSTATE_RADIOINIT + ld b, POKEGEARCARD_RADIO + jr .done .no_phone_card ld a, [wPokegearFlags] @@ -507,22 +525,123 @@ PokegearClock_Joypad: ret Pokegear_UpdateClock: - hlcoord 3, 5 - lb bc, 5, 14 + ; makes the grey colored box + hlcoord 1, 5 + lb bc, 6, 18 call ClearBox + ldh a, [hHours] ld b, a ldh a, [hMinutes] ld c, a - decoord 6, 8 + decoord 11, 1 farcall PrintHoursMins ld hl, .GearTodayText - bccoord 6, 6 + bccoord 2, 6 call PlaceHLTextAtBC - ret - db "ごぜん@" - db "ごご@" + ; draw border + ; ; Fix center Box since i cant find the func that originally drew this one + hlcoord 0, 4 + ld [hl], $06 ; left upper corner + hlcoord 19, 4 + ld [hl], $17 ; right upper corner + hlcoord 0, 11 + ld [hl], $26 ; left lower corner + hlcoord 19, 11 + ld [hl], $27 ; right lower corner + ; draw horizontal bars + hlcoord 1, 4 + ld a, $07 + ld bc, 18 + call ByteFill + hlcoord 1, 11 + ld a, $07 + ld bc, 18 + call ByteFill + + hlcoord 0, 5 + lb bc, 6, 1 + ld a, $16 + call FillBoxWithByte + + hlcoord 19, 5 + lb bc, 6, 1 + ld a, $16 + call FillBoxWithByte + + ; Map Location Name + ; d ; map num + ; e ; map group + ld a, [wMapGroup] + ld e, a + ld a, [wMapNumber] + ld d, a + farcall GetMapGroupNum_Name + ; return string ptr in de + ld a, BANK(MapGroupNum_Names) + hlcoord 2, 8 + call PlaceFarString + ; Fishing group + ; d ; map num + ; e ; map group + ld a, [wMapGroup] + ld e, a + ld a, [wMapNumber] + ld d, a + ; given map info in 'de' + ; return: string ptr in 'de' + ; if 'de' is zero, no fishing group on map + farcall GetMapsFishGroup + ld a, d + and a + jr nz, .print_fish_group + ld a, e + and a + jr z, .print_tod +.print_fish_group + ld a, BANK(FishGroups_Names) + hlcoord 8, 10 + call PlaceFarString + hlcoord 3, 10 + ld de, .FishGrpStr + call PlaceString +.print_tod + ld a, [wTimeOfDay] + and a + jr z, .Morn + cp 1 + jr z, .Day + ld de, .NiteStr +.got_tod + hlcoord 11, 6 + call PlaceString + + hlcoord 11, 0 + ld [hl], $30 ; round edge + inc hl + ld [hl], $7f + hlcoord 11, 2 + ld [hl], $32 + inc hl + ld [hl], $7f + ret +.Morn + ld de, .MornStr + jr .got_tod +.Day + ld de, .DayStr + jr .got_tod + +.MornStr: + db "MORN@" +.DayStr: + db "DAYTIME@" +.NiteStr: + db "NITE@" + ; db "NIGHT@" +.FishGrpStr: + db "FISH:" .GearTodayText: text_far _GearTodayText @@ -758,6 +877,10 @@ PokegearRadio_Joypad: ld a, [hl] and D_LEFT jr nz, .left + ld a, [hl] + and D_RIGHT ; act like you have no phone and no map going left, takes to clock + ; jr nz, .right + jr nz, .no_map ld a, [wPokegearRadioChannelAddr] ld l, a ld a, [wPokegearRadioChannelAddr + 1] @@ -775,6 +898,7 @@ PokegearRadio_Joypad: ld c, POKEGEARSTATE_PHONEINIT ld b, POKEGEARCARD_PHONE jr .switch_page +.right .no_phone ld a, [wPokegearFlags] @@ -843,9 +967,14 @@ PokegearPhone_Joypad: .right ld a, [wPokegearFlags] bit POKEGEAR_RADIO_CARD_F, a - ret z + ; ret z + jr z, .no_map ; goes to clock +; .radio ld c, POKEGEARSTATE_RADIOINIT ld b, POKEGEARCARD_RADIO + jr .switch_page +; .no_radio ; go to clock + .switch_page call Pokegear_SwitchPage ret @@ -1363,7 +1492,7 @@ INCBIN "gfx/pokegear/clock.tilemap.rle" _UpdateRadioStation: jr UpdateRadioStation -; called from engine/sprite_anims/functions.asm +; called from engine/gfx/sprite_anims.asm AnimateTuningKnob: push bc @@ -1769,7 +1898,7 @@ _TownMap: xor a ld [wVramState], a - call ClearBGPalettes + ; call ClearBGPalettes call ClearTilemap call ClearSprites call DisableLCD @@ -1824,7 +1953,7 @@ _TownMap: ldh [hInMenu], a pop af ld [wOptions], a - call ClearBGPalettes + ; call ClearBGPalettes ret .loop @@ -2372,8 +2501,10 @@ Pokedex_GetArea: call JoyTextDelay ld hl, hJoyPressed ld a, [hl] - and A_BUTTON | B_BUTTON - jr nz, .a_b + and B_BUTTON + jr nz, .b + and A_BUTTON + jr nz, .a ldh a, [hJoypadDown] and SELECT jr nz, .select @@ -2386,8 +2517,9 @@ Pokedex_GetArea: .next call DelayFrame jr .loop - -.a_b +.a + +.b call ClearSprites pop af ld [wTownMapCursorLandmark], a @@ -2416,9 +2548,10 @@ Pokedex_GetArea: ret .right - ld a, [wStatusFlags] - bit STATUSFLAGS_HALL_OF_FAME_F, a - ret z +; only reveal Kanto map if beaten league: disabled + ; ld a, [wStatusFlags] + ; bit STATUSFLAGS_HALL_OF_FAME_F, a + ; ret z ldh a, [hWY] and a ret z @@ -2555,10 +2688,10 @@ Pokedex_GetArea: .PlayerOAM: ; y pxl, x pxl, tile offset - db -1 * TILE_WIDTH, -1 * TILE_WIDTH, 0 ; top left - db -1 * TILE_WIDTH, 0 * TILE_WIDTH, 1 ; top right - db 0 * TILE_WIDTH, -1 * TILE_WIDTH, 2 ; bottom left - db 0 * TILE_WIDTH, 0 * TILE_WIDTH, 3 ; bottom right + db -1 * 8, -1 * 8, 0 ; top left + db -1 * 8, 0 * 8, 1 ; top right + db 0 * 8, -1 * 8, 2 ; bottom left + db 0 * 8, 0 * 8, 3 ; bottom right db $80 ; terminator .CheckPlayerLocation: @@ -2658,8 +2791,8 @@ TownMapPals: ; Current tile ld a, [hli] push hl -; The palette map covers tiles $00 to $5f; $60 and above use palette 0 - cp $60 +; The palette map covers tiles $00 to $67; $68 and above use palette 0 + cp $68 jr nc, .pal0 ; The palette data is condensed to nybbles, least-significant first. diff --git a/gfx/pokedex/dex_pagenums.png b/gfx/pokedex/dex_pagenums.png new file mode 100644 index 00000000000..d86468f91ea Binary files /dev/null and b/gfx/pokedex/dex_pagenums.png differ diff --git a/gfx/pokedex/pokedex.png b/gfx/pokedex/pokedex.png index 48af514c775..e4d769c132d 100644 Binary files a/gfx/pokedex/pokedex.png and b/gfx/pokedex/pokedex.png differ diff --git a/gfx/pokedex/rangi_dex_tiles.png b/gfx/pokedex/rangi_dex_tiles.png new file mode 100644 index 00000000000..975bab3a3a0 Binary files /dev/null and b/gfx/pokedex/rangi_dex_tiles.png differ diff --git a/main.asm b/main.asm index e4f737dfff7..4f08307cadc 100644 --- a/main.asm +++ b/main.asm @@ -467,13 +467,10 @@ INCLUDE "engine/movie/intro.asm" SECTION "bank3E", ROMX INCLUDE "engine/gfx/load_font.asm" -INCLUDE "engine/link/time_capsule.asm" INCLUDE "engine/events/name_rater.asm" INCLUDE "engine/events/play_slow_cry.asm" INCLUDE "engine/pokedex/new_pokedex_entry.asm" -INCLUDE "engine/link/time_capsule_2.asm" INCLUDE "engine/pokedex/unown_dex.asm" -INCLUDE "engine/events/magikarp.asm" INCLUDE "engine/battle/hidden_power.asm" INCLUDE "engine/battle/misc.asm" @@ -680,7 +677,22 @@ SECTION "Crystal Events", ROMX INCLUDE "engine/events/battle_tower/load_trainer.asm" INCLUDE "engine/events/odd_egg.asm" - +SECTION "DEX GFX 2", ROMX +PokedexLZ: +INCBIN "gfx/pokedex/pokedex.2bpp.lz" +PokedexSlowpokeLZ: +INCBIN "gfx/pokedex/slowpoke.2bpp.lz" +Pokedex_ExtraTiles: +INCBIN "gfx/pokedex/rangi_dex_tiles.2bpp" +Pokedex_PageNumTiles: +INCBIN "gfx/pokedex/dex_pagenums.2bpp" + +SECTION "Map GroupNums Names", ROMX +INCLUDE "data/maps/map_names.asm" +SECTION "Bank3E Overflow", ROMX +INCLUDE "engine/link/time_capsule.asm" +INCLUDE "engine/link/time_capsule_2.asm" +INCLUDE "engine/events/magikarp.asm" SECTION "Custom GFX", ROMX INCLUDE "gfx/rangi_gfx.asm" SECTION "Stadium 2 Checksums", ROMX[$7DE0], BANK[$7F] diff --git a/ram/wram.asm b/ram/wram.asm index b88aa881874..1b3e774fe15 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -2906,7 +2906,10 @@ wStartSecond:: db wRTC:: ds 4 - ds 4 +wPokedexEntryType:: db +wPokedexEntryPageNum:: db +wPokedexEvoStage2:: db +wPokedexEvoStage3:: db wDST:: ; bit 7: dst @@ -2923,7 +2926,9 @@ wGameTimeFrames:: db wCurDay:: db - ds 1 +wPokedexShinyToggle:: +; bit 0: set if displaying shiny palettes + db wObjectFollow_Leader:: db wObjectFollow_Follower:: db @@ -3025,7 +3030,7 @@ wPokegearFlags:: db wRadioTuningKnob:: db wLastDexMode:: db - ds 1 +wCurPokedexColor:: db ; current dex color wWhichRegisteredItem:: db wRegisteredItem:: db