From 9a6bb3ed0c44155a711d66df4d8996d9396ebd6a Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Mon, 1 Dec 2025 11:00:56 -0500 Subject: Define player and rival names once, to be used in two places (#545) --- data/player/names.asm | 15 +++++++++++++++ data/player/names_list.asm | 17 +++++++++++++++++ data/player_names.asm | 31 ------------------------------- data/player_names_list.asm | 27 --------------------------- 4 files changed, 32 insertions(+), 58 deletions(-) create mode 100644 data/player/names.asm create mode 100644 data/player/names_list.asm delete mode 100644 data/player_names.asm delete mode 100644 data/player_names_list.asm (limited to 'data') diff --git a/data/player/names.asm b/data/player/names.asm new file mode 100644 index 00000000..67f2df36 --- /dev/null +++ b/data/player/names.asm @@ -0,0 +1,15 @@ +; see constants/player_constants.asm + +DefaultNamesPlayer: + db "NEW NAME" +FOR n, 1, NUM_PLAYER_NAMES + 1 + next #PLAYERNAME{d:n} +ENDR + db "@" + +DefaultNamesRival: + db "NEW NAME" +FOR n, 1, NUM_PLAYER_NAMES + 1 + next #RIVALNAME{d:n} +ENDR + db "@" diff --git a/data/player/names_list.asm b/data/player/names_list.asm new file mode 100644 index 00000000..786c1229 --- /dev/null +++ b/data/player/names_list.asm @@ -0,0 +1,17 @@ +; see constants/player_constants.asm + +DefaultNamesPlayerList: + db "NEW NAME@" + list_start +FOR n, 1, NUM_PLAYER_NAMES + 1 + li #PLAYERNAME{d:n} +ENDR + assert_list_length NUM_PLAYER_NAMES + +DefaultNamesRivalList: + db "NEW NAME@" + list_start +FOR n, 1, NUM_PLAYER_NAMES + 1 + li #RIVALNAME{d:n} +ENDR + assert_list_length NUM_PLAYER_NAMES diff --git a/data/player_names.asm b/data/player_names.asm deleted file mode 100644 index f57c9877..00000000 --- a/data/player_names.asm +++ /dev/null @@ -1,31 +0,0 @@ -IF DEF(_RED) -DefaultNamesPlayer: - db "NEW NAME" - next "RED" - next "ASH" - next "JACK" - db "@" - -DefaultNamesRival: - db "NEW NAME" - next "BLUE" - next "GARY" - next "JOHN" - db "@" -ENDC - -IF DEF(_BLUE) -DefaultNamesPlayer: - db "NEW NAME" - next "BLUE" - next "GARY" - next "JOHN" - db "@" - -DefaultNamesRival: - db "NEW NAME" - next "RED" - next "ASH" - next "JACK" - db "@" -ENDC diff --git a/data/player_names_list.asm b/data/player_names_list.asm deleted file mode 100644 index 56075df0..00000000 --- a/data/player_names_list.asm +++ /dev/null @@ -1,27 +0,0 @@ -IF DEF(_RED) -DefaultNamesPlayerList: - db "NEW NAME@" - db "RED@" - db "ASH@" - db "JACK@" - -DefaultNamesRivalList: - db "NEW NAME@" - db "BLUE@" - db "GARY@" - db "JOHN@" -ENDC - -IF DEF(_BLUE) -DefaultNamesPlayerList: - db "NEW NAME@" - db "BLUE@" - db "GARY@" - db "JOHN@" - -DefaultNamesRivalList: - db "NEW NAME@" - db "RED@" - db "ASH@" - db "JACK@" -ENDC -- cgit v1.3.1-sl0p From e1948fe4b3994be5e08d5abc39fdf326b5421eb8 Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Mon, 15 Dec 2025 15:02:37 -0500 Subject: Clarify how the order of map constants matters for the Town Map (#553) --- constants/map_constants.asm | 133 ++++++++++++++++++++++++++- data/maps/town_map_entries.asm | 204 +++++++++++++++++++++-------------------- 2 files changed, 235 insertions(+), 102 deletions(-) (limited to 'data') diff --git a/constants/map_constants.asm b/constants/map_constants.asm index dad63579..7ae4af44 100644 --- a/constants/map_constants.asm +++ b/constants/map_constants.asm @@ -4,6 +4,13 @@ MACRO map_const DEF \1_HEIGHT EQU \3 ENDM +; "Indoor" maps are grouped sequentially (see data/maps/town_map_entries.asm) +DEF NUM_INDOOR_MAP_GROUPS EQU 0 +MACRO end_indoor_group + DEF INDOORGROUP_\1 EQU const_value + REDEF NUM_INDOOR_MAP_GROUPS EQU NUM_INDOOR_MAP_GROUPS + 1 +ENDM + ; map ids ; indexes for: ; - MapHeaderBanks (see data/maps/map_header_banks.asm) @@ -28,7 +35,9 @@ ENDM map_const INDIGO_PLATEAU, 10, 9 ; $09 map_const SAFFRON_CITY, 20, 18 ; $0A DEF NUM_CITY_MAPS EQU const_value + map_const UNUSED_MAP_0B, 0, 0 ; $0B + DEF FIRST_ROUTE_MAP EQU const_value map_const ROUTE_1, 10, 18 ; $0C map_const ROUTE_2, 10, 36 ; $0D @@ -55,22 +64,31 @@ DEF FIRST_ROUTE_MAP EQU const_value map_const ROUTE_23, 10, 72 ; $22 map_const ROUTE_24, 10, 18 ; $23 map_const ROUTE_25, 30, 9 ; $24 + DEF FIRST_INDOOR_MAP EQU const_value map_const REDS_HOUSE_1F, 4, 4 ; $25 map_const REDS_HOUSE_2F, 4, 4 ; $26 map_const BLUES_HOUSE, 4, 4 ; $27 map_const OAKS_LAB, 5, 6 ; $28 + end_indoor_group PALLET_TOWN + map_const VIRIDIAN_POKECENTER, 7, 4 ; $29 map_const VIRIDIAN_MART, 4, 4 ; $2A map_const VIRIDIAN_SCHOOL_HOUSE, 4, 4 ; $2B map_const VIRIDIAN_NICKNAME_HOUSE, 4, 4 ; $2C map_const VIRIDIAN_GYM, 10, 9 ; $2D + end_indoor_group VIRIDIAN_CITY + map_const DIGLETTS_CAVE_ROUTE_2, 4, 4 ; $2E map_const VIRIDIAN_FOREST_NORTH_GATE, 5, 4 ; $2F map_const ROUTE_2_TRADE_HOUSE, 4, 4 ; $30 map_const ROUTE_2_GATE, 5, 4 ; $31 map_const VIRIDIAN_FOREST_SOUTH_GATE, 5, 4 ; $32 + end_indoor_group ROUTE_2 + map_const VIRIDIAN_FOREST, 17, 24 ; $33 + end_indoor_group VIRIDIAN_FOREST + map_const MUSEUM_1F, 10, 4 ; $34 map_const MUSEUM_2F, 7, 4 ; $35 map_const PEWTER_GYM, 5, 7 ; $36 @@ -78,42 +96,72 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const PEWTER_MART, 4, 4 ; $38 map_const PEWTER_SPEECH_HOUSE, 4, 4 ; $39 map_const PEWTER_POKECENTER, 7, 4 ; $3A + end_indoor_group PEWTER_CITY + map_const MT_MOON_1F, 20, 18 ; $3B map_const MT_MOON_B1F, 14, 14 ; $3C map_const MT_MOON_B2F, 20, 18 ; $3D + end_indoor_group MT_MOON + map_const CERULEAN_TRASHED_HOUSE, 4, 4 ; $3E map_const CERULEAN_TRADE_HOUSE, 4, 4 ; $3F map_const CERULEAN_POKECENTER, 7, 4 ; $40 map_const CERULEAN_GYM, 5, 7 ; $41 map_const BIKE_SHOP, 4, 4 ; $42 map_const CERULEAN_MART, 4, 4 ; $43 + end_indoor_group CERULEAN_CITY + map_const MT_MOON_POKECENTER, 7, 4 ; $44 + end_indoor_group ROUTE_4 + map_const CERULEAN_TRASHED_HOUSE_COPY, 4, 4 ; $45 + end_indoor_group CERULEAN_CITY_2 + map_const ROUTE_5_GATE, 4, 3 ; $46 map_const UNDERGROUND_PATH_ROUTE_5, 4, 4 ; $47 map_const DAYCARE, 4, 4 ; $48 + end_indoor_group ROUTE_5 + map_const ROUTE_6_GATE, 4, 3 ; $49 map_const UNDERGROUND_PATH_ROUTE_6, 4, 4 ; $4A map_const UNDERGROUND_PATH_ROUTE_6_COPY, 4, 4 ; $4B + end_indoor_group ROUTE_6 + map_const ROUTE_7_GATE, 3, 4 ; $4C map_const UNDERGROUND_PATH_ROUTE_7, 4, 4 ; $4D map_const UNDERGROUND_PATH_ROUTE_7_COPY, 4, 4 ; $4E + end_indoor_group ROUTE_7 + map_const ROUTE_8_GATE, 3, 4 ; $4F map_const UNDERGROUND_PATH_ROUTE_8, 4, 4 ; $50 + end_indoor_group ROUTE_8 + map_const ROCK_TUNNEL_POKECENTER, 7, 4 ; $51 map_const ROCK_TUNNEL_1F, 20, 18 ; $52 + end_indoor_group ROCK_TUNNEL + map_const POWER_PLANT, 20, 18 ; $53 + end_indoor_group POWER_PLANT + map_const ROUTE_11_GATE_1F, 4, 5 ; $54 map_const DIGLETTS_CAVE_ROUTE_11, 4, 4 ; $55 map_const ROUTE_11_GATE_2F, 4, 4 ; $56 + end_indoor_group ROUTE_11 + map_const ROUTE_12_GATE_1F, 5, 4 ; $57 + end_indoor_group ROUTE_12 + map_const BILLS_HOUSE, 4, 4 ; $58 + end_indoor_group SEA_COTTAGE + map_const VERMILION_POKECENTER, 7, 4 ; $59 map_const POKEMON_FAN_CLUB, 4, 4 ; $5A map_const VERMILION_MART, 4, 4 ; $5B map_const VERMILION_GYM, 5, 9 ; $5C map_const VERMILION_PIDGEY_HOUSE, 4, 4 ; $5D map_const VERMILION_DOCK, 14, 6 ; $5E + end_indoor_group VERMILION_CITY + map_const SS_ANNE_1F, 20, 9 ; $5F map_const SS_ANNE_2F, 20, 9 ; $60 map_const SS_ANNE_3F, 10, 3 ; $61 @@ -124,10 +172,14 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const SS_ANNE_1F_ROOMS, 12, 8 ; $66 map_const SS_ANNE_2F_ROOMS, 12, 8 ; $67 map_const SS_ANNE_B1F_ROOMS, 12, 8 ; $68 + end_indoor_group SS_ANNE + map_const UNUSED_MAP_69, 0, 0 ; $69 map_const UNUSED_MAP_6A, 0, 0 ; $6A map_const UNUSED_MAP_6B, 0, 0 ; $6B map_const VICTORY_ROAD_1F, 10, 9 ; $6C + end_indoor_group VICTORY_ROAD + map_const UNUSED_MAP_6D, 0, 0 ; $6D map_const UNUSED_MAP_6E, 0, 0 ; $6E map_const UNUSED_MAP_6F, 0, 0 ; $6F @@ -138,9 +190,17 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const UNUSED_MAP_74, 0, 0 ; $74 map_const UNUSED_MAP_75, 0, 0 ; $75 map_const HALL_OF_FAME, 5, 4 ; $76 + end_indoor_group POKEMON_LEAGUE + map_const UNDERGROUND_PATH_NORTH_SOUTH, 4, 24 ; $77 ; UndergroundPathNorthSouth.blk is actually 4x23 + end_indoor_group UNDERGROUND_PATH + map_const CHAMPIONS_ROOM, 4, 4 ; $78 + end_indoor_group POKEMON_LEAGUE_2 + map_const UNDERGROUND_PATH_WEST_EAST, 25, 4 ; $79 + end_indoor_group UNDERGROUND_PATH_2 + map_const CELADON_MART_1F, 10, 4 ; $7A map_const CELADON_MART_2F, 10, 4 ; $7B map_const CELADON_MART_3F, 10, 4 ; $7C @@ -160,7 +220,11 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const CELADON_DINER, 5, 4 ; $8A map_const CELADON_CHIEF_HOUSE, 4, 4 ; $8B map_const CELADON_HOTEL, 7, 4 ; $8C + end_indoor_group CELADON_CITY + map_const LAVENDER_POKECENTER, 7, 4 ; $8D + end_indoor_group LAVENDER_TOWN + map_const POKEMON_TOWER_1F, 10, 9 ; $8E map_const POKEMON_TOWER_2F, 10, 9 ; $8F map_const POKEMON_TOWER_3F, 10, 9 ; $90 @@ -168,23 +232,41 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const POKEMON_TOWER_5F, 10, 9 ; $92 map_const POKEMON_TOWER_6F, 10, 9 ; $93 map_const POKEMON_TOWER_7F, 10, 9 ; $94 + end_indoor_group POKEMON_TOWER + map_const MR_FUJIS_HOUSE, 4, 4 ; $95 map_const LAVENDER_MART, 4, 4 ; $96 map_const LAVENDER_CUBONE_HOUSE, 4, 4 ; $97 + end_indoor_group LAVENDER_TOWN_2 + map_const FUCHSIA_MART, 4, 4 ; $98 map_const FUCHSIA_BILLS_GRANDPAS_HOUSE, 4, 4 ; $99 map_const FUCHSIA_POKECENTER, 7, 4 ; $9A map_const WARDENS_HOUSE, 5, 4 ; $9B + end_indoor_group FUCHSIA_CITY + map_const SAFARI_ZONE_GATE, 4, 3 ; $9C + end_indoor_group SAFARI_ZONE + map_const FUCHSIA_GYM, 5, 9 ; $9D map_const FUCHSIA_MEETING_ROOM, 7, 4 ; $9E + end_indoor_group FUCHSIA_CITY_2 + map_const SEAFOAM_ISLANDS_B1F, 15, 9 ; $9F map_const SEAFOAM_ISLANDS_B2F, 15, 9 ; $A0 map_const SEAFOAM_ISLANDS_B3F, 15, 9 ; $A1 map_const SEAFOAM_ISLANDS_B4F, 15, 9 ; $A2 + end_indoor_group SEAFOAM_ISLANDS + map_const VERMILION_OLD_ROD_HOUSE, 4, 4 ; $A3 + end_indoor_group VERMILION_CITY_2 + map_const FUCHSIA_GOOD_ROD_HOUSE, 4, 4 ; $A4 + end_indoor_group FUCHSIA_CITY_3 + map_const POKEMON_MANSION_1F, 15, 14 ; $A5 + end_indoor_group POKEMON_MANSION + map_const CINNABAR_GYM, 10, 9 ; $A6 map_const CINNABAR_LAB, 9, 4 ; $A7 map_const CINNABAR_LAB_TRADE_ROOM, 4, 4 ; $A8 @@ -193,7 +275,11 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const CINNABAR_POKECENTER, 7, 4 ; $AB map_const CINNABAR_MART, 4, 4 ; $AC map_const CINNABAR_MART_COPY, 4, 4 ; $AD + end_indoor_group CINNABAR_ISLAND + map_const INDIGO_PLATEAU_LOBBY, 8, 6 ; $AE + end_indoor_group INDIGO_PLATEAU + map_const COPYCATS_HOUSE_1F, 4, 4 ; $AF map_const COPYCATS_HOUSE_2F, 4, 4 ; $B0 map_const FIGHTING_DOJO, 5, 6 ; $B1 @@ -203,21 +289,45 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const SILPH_CO_1F, 15, 9 ; $B5 map_const SAFFRON_POKECENTER, 7, 4 ; $B6 map_const MR_PSYCHICS_HOUSE, 4, 4 ; $B7 + end_indoor_group SAFFRON_CITY + map_const ROUTE_15_GATE_1F, 4, 5 ; $B8 map_const ROUTE_15_GATE_2F, 4, 4 ; $B9 + end_indoor_group ROUTE_15 + map_const ROUTE_16_GATE_1F, 4, 7 ; $BA map_const ROUTE_16_GATE_2F, 4, 4 ; $BB map_const ROUTE_16_FLY_HOUSE, 4, 4 ; $BC + end_indoor_group ROUTE_16 + map_const ROUTE_12_SUPER_ROD_HOUSE, 4, 4 ; $BD + end_indoor_group ROUTE_12_2 + map_const ROUTE_18_GATE_1F, 4, 5 ; $BE map_const ROUTE_18_GATE_2F, 4, 4 ; $BF + end_indoor_group ROUTE_18 + map_const SEAFOAM_ISLANDS_1F, 15, 9 ; $C0 + end_indoor_group SEAFOAM_ISLANDS_2 + map_const ROUTE_22_GATE, 5, 4 ; $C1 + end_indoor_group ROUTE_22 + map_const VICTORY_ROAD_2F, 15, 9 ; $C2 + end_indoor_group VICTORY_ROAD_2 + map_const ROUTE_12_GATE_2F, 4, 4 ; $C3 + end_indoor_group ROUTE_12_3 + map_const VERMILION_TRADE_HOUSE, 4, 4 ; $C4 + end_indoor_group VERMILION_CITY_3 + map_const DIGLETTS_CAVE, 20, 18 ; $C5 + end_indoor_group DIGLETTS_CAVE + map_const VICTORY_ROAD_3F, 15, 9 ; $C6 + end_indoor_group VICTORY_ROAD_3 + map_const ROCKET_HIDEOUT_B1F, 15, 14 ; $C7 map_const ROCKET_HIDEOUT_B2F, 15, 14 ; $C8 map_const ROCKET_HIDEOUT_B3F, 15, 14 ; $C9 @@ -226,6 +336,8 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const UNUSED_MAP_CC, 0, 0 ; $CC map_const UNUSED_MAP_CD, 0, 0 ; $CD map_const UNUSED_MAP_CE, 0, 0 ; $CE + end_indoor_group ROCKET_HQ + map_const SILPH_CO_2F, 15, 9 ; $CF map_const SILPH_CO_3F, 15, 9 ; $D0 map_const SILPH_CO_4F, 15, 9 ; $D1 @@ -233,9 +345,13 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const SILPH_CO_6F, 13, 9 ; $D3 map_const SILPH_CO_7F, 13, 9 ; $D4 map_const SILPH_CO_8F, 13, 9 ; $D5 + end_indoor_group SILPH_CO + map_const POKEMON_MANSION_2F, 15, 14 ; $D6 map_const POKEMON_MANSION_3F, 15, 9 ; $D7 map_const POKEMON_MANSION_B1F, 15, 14 ; $D8 + end_indoor_group POKEMON_MANSION_2 + map_const SAFARI_ZONE_EAST, 15, 13 ; $D9 map_const SAFARI_ZONE_NORTH, 20, 18 ; $DA map_const SAFARI_ZONE_WEST, 15, 13 ; $DB @@ -245,17 +361,29 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const SAFARI_ZONE_WEST_REST_HOUSE, 4, 4 ; $DF map_const SAFARI_ZONE_EAST_REST_HOUSE, 4, 4 ; $E0 map_const SAFARI_ZONE_NORTH_REST_HOUSE, 4, 4 ; $E1 + end_indoor_group SAFARI_ZONE_2 + map_const CERULEAN_CAVE_2F, 15, 9 ; $E2 map_const CERULEAN_CAVE_B1F, 15, 9 ; $E3 map_const CERULEAN_CAVE_1F, 15, 9 ; $E4 + end_indoor_group CERULEAN_CAVE + map_const NAME_RATERS_HOUSE, 4, 4 ; $E5 + end_indoor_group LAVENDER_TOWN_3 + map_const CERULEAN_BADGE_HOUSE, 4, 4 ; $E6 + end_indoor_group CERULEAN_CITY_3 + map_const UNUSED_MAP_E7, 0, 0 ; $E7 map_const ROCK_TUNNEL_B1F, 20, 18 ; $E8 + end_indoor_group ROCK_TUNNEL_2 + map_const SILPH_CO_9F, 13, 9 ; $E9 map_const SILPH_CO_10F, 8, 9 ; $EA map_const SILPH_CO_11F, 9, 9 ; $EB map_const SILPH_CO_ELEVATOR, 2, 2 ; $EC + end_indoor_group SILPH_CO_2 + map_const UNUSED_MAP_ED, 0, 0 ; $ED map_const UNUSED_MAP_EE, 0, 0 ; $EE map_const TRADE_CENTER, 5, 4 ; $EF @@ -267,8 +395,11 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const LORELEIS_ROOM, 5, 6 ; $F5 map_const BRUNOS_ROOM, 5, 6 ; $F6 map_const AGATHAS_ROOM, 5, 6 ; $F7 + end_indoor_group POKEMON_LEAGUE_3 DEF NUM_MAPS EQU const_value ; Indoor maps, such as houses, use this as the Map ID in their exit warps ; This map ID takes the player back to the last outdoor map they were on, stored in wLastMap -DEF LAST_MAP EQU -1 +DEF LAST_MAP EQU $ff + +ASSERT NUM_MAPS <= LAST_MAP, "map IDs overlap LAST_MAP" diff --git a/data/maps/town_map_entries.asm b/data/maps/town_map_entries.asm index c93ba57b..9b981b5f 100644 --- a/data/maps/town_map_entries.asm +++ b/data/maps/town_map_entries.asm @@ -1,4 +1,4 @@ -MACRO external_map +MACRO outdoor_map dn \2, \1 dw \3 ENDM @@ -7,113 +7,115 @@ ENDM ExternalMapEntries: table_width 3 ; x, y, name - external_map 2, 11, PalletTownName - external_map 2, 8, ViridianCityName - external_map 2, 3, PewterCityName - external_map 10, 2, CeruleanCityName - external_map 14, 5, LavenderTownName - external_map 10, 9, VermilionCityName - external_map 7, 5, CeladonCityName - external_map 8, 13, FuchsiaCityName - external_map 2, 15, CinnabarIslandName - external_map 0, 2, IndigoPlateauName - external_map 10, 5, SaffronCityName - external_map 0, 0, PalletTownName ; unused - external_map 2, 10, Route1Name - external_map 2, 6, Route2Name - external_map 4, 3, Route3Name - external_map 8, 2, Route4Name - external_map 10, 3, Route5Name - external_map 10, 8, Route6Name - external_map 8, 5, Route7Name - external_map 13, 5, Route8Name - external_map 13, 2, Route9Name - external_map 14, 4, Route10Name - external_map 12, 9, Route11Name - external_map 14, 9, Route12Name - external_map 13, 11, Route13Name - external_map 11, 12, Route14Name - external_map 10, 13, Route15Name - external_map 5, 5, Route16Name - external_map 4, 8, Route17Name - external_map 6, 13, Route18Name - external_map 6, 15, Route19Name - external_map 4, 15, Route20Name - external_map 2, 13, Route21Name - external_map 0, 8, Route22Name - external_map 0, 6, Route23Name - external_map 10, 1, Route24Name - external_map 11, 0, Route25Name + outdoor_map 2, 11, PalletTownName + outdoor_map 2, 8, ViridianCityName + outdoor_map 2, 3, PewterCityName + outdoor_map 10, 2, CeruleanCityName + outdoor_map 14, 5, LavenderTownName + outdoor_map 10, 9, VermilionCityName + outdoor_map 7, 5, CeladonCityName + outdoor_map 8, 13, FuchsiaCityName + outdoor_map 2, 15, CinnabarIslandName + outdoor_map 0, 2, IndigoPlateauName + outdoor_map 10, 5, SaffronCityName + outdoor_map 0, 0, PalletTownName ; unused + outdoor_map 2, 10, Route1Name + outdoor_map 2, 6, Route2Name + outdoor_map 4, 3, Route3Name + outdoor_map 8, 2, Route4Name + outdoor_map 10, 3, Route5Name + outdoor_map 10, 8, Route6Name + outdoor_map 8, 5, Route7Name + outdoor_map 13, 5, Route8Name + outdoor_map 13, 2, Route9Name + outdoor_map 14, 4, Route10Name + outdoor_map 12, 9, Route11Name + outdoor_map 14, 9, Route12Name + outdoor_map 13, 11, Route13Name + outdoor_map 11, 12, Route14Name + outdoor_map 10, 13, Route15Name + outdoor_map 5, 5, Route16Name + outdoor_map 4, 8, Route17Name + outdoor_map 6, 13, Route18Name + outdoor_map 6, 15, Route19Name + outdoor_map 4, 15, Route20Name + outdoor_map 2, 13, Route21Name + outdoor_map 0, 8, Route22Name + outdoor_map 0, 6, Route23Name + outdoor_map 10, 1, Route24Name + outdoor_map 11, 0, Route25Name assert_table_length FIRST_INDOOR_MAP -MACRO internal_map - db \1 + 1 +MACRO indoor_map + db INDOORGROUP_\1 dn \3, \2 dw \4 ENDM ; the appearance of buildings and dungeons in the town map InternalMapEntries: - ; maximum map id subject to this rule, x, y, name - internal_map OAKS_LAB, 2, 11, PalletTownName - internal_map VIRIDIAN_GYM, 2, 8, ViridianCityName - internal_map VIRIDIAN_FOREST_SOUTH_GATE, 2, 6, Route2Name - internal_map VIRIDIAN_FOREST, 2, 4, ViridianForestName - internal_map PEWTER_POKECENTER, 2, 3, PewterCityName - internal_map MT_MOON_B2F, 6, 2, MountMoonName - internal_map CERULEAN_MART, 10, 2, CeruleanCityName - internal_map MT_MOON_POKECENTER, 5, 2, Route4Name - internal_map CERULEAN_TRASHED_HOUSE_COPY, 10, 2, CeruleanCityName - internal_map DAYCARE, 10, 4, Route5Name - internal_map UNDERGROUND_PATH_ROUTE_6_COPY, 10, 6, Route6Name - internal_map UNDERGROUND_PATH_ROUTE_7_COPY, 9, 5, Route7Name - internal_map UNDERGROUND_PATH_ROUTE_8, 11, 5, Route8Name - internal_map ROCK_TUNNEL_1F, 14, 3, RockTunnelName - internal_map POWER_PLANT, 15, 4, PowerPlantName - internal_map ROUTE_11_GATE_2F, 13, 9, Route11Name - internal_map ROUTE_12_GATE_1F, 14, 7, Route12Name - internal_map BILLS_HOUSE, 12, 0, SeaCottageName - internal_map VERMILION_DOCK, 10, 9, VermilionCityName - internal_map SS_ANNE_B1F_ROOMS, 9, 10, SSAnneName - internal_map VICTORY_ROAD_1F, 0, 4, VictoryRoadName - internal_map HALL_OF_FAME, 0, 2, PokemonLeagueName - internal_map UNDERGROUND_PATH_NORTH_SOUTH, 10, 5, UndergroundPathName - internal_map CHAMPIONS_ROOM, 0, 2, PokemonLeagueName - internal_map UNDERGROUND_PATH_WEST_EAST, 10, 5, UndergroundPathName - internal_map CELADON_HOTEL, 7, 5, CeladonCityName - internal_map LAVENDER_POKECENTER, 14, 5, LavenderTownName - internal_map POKEMON_TOWER_7F, 15, 5, PokemonTowerName - internal_map LAVENDER_CUBONE_HOUSE, 14, 5, LavenderTownName - internal_map WARDENS_HOUSE, 8, 13, FuchsiaCityName - internal_map SAFARI_ZONE_GATE, 8, 12, SafariZoneName - internal_map FUCHSIA_MEETING_ROOM, 8, 13, FuchsiaCityName - internal_map SEAFOAM_ISLANDS_B4F, 5, 15, SeafoamIslandsName - internal_map VERMILION_OLD_ROD_HOUSE, 10, 9, VermilionCityName - internal_map FUCHSIA_GOOD_ROD_HOUSE, 8, 13, FuchsiaCityName - internal_map POKEMON_MANSION_1F, 2, 15, PokemonMansionName - internal_map CINNABAR_MART_COPY, 2, 15, CinnabarIslandName - internal_map INDIGO_PLATEAU_LOBBY, 0, 2, IndigoPlateauName - internal_map MR_PSYCHICS_HOUSE, 10, 5, SaffronCityName - internal_map ROUTE_15_GATE_2F, 9, 13, Route15Name - internal_map ROUTE_16_FLY_HOUSE, 4, 5, Route16Name - internal_map ROUTE_12_SUPER_ROD_HOUSE, 14, 10, Route12Name - internal_map ROUTE_18_GATE_2F, 7, 13, Route18Name - internal_map SEAFOAM_ISLANDS_1F, 5, 15, SeafoamIslandsName - internal_map ROUTE_22_GATE, 0, 7, Route22Name - internal_map VICTORY_ROAD_2F, 0, 4, VictoryRoadName - internal_map ROUTE_12_GATE_2F, 14, 7, Route12Name - internal_map VERMILION_TRADE_HOUSE, 10, 9, VermilionCityName - internal_map DIGLETTS_CAVE, 3, 4, DiglettsCaveName - internal_map VICTORY_ROAD_3F, 0, 4, VictoryRoadName - internal_map UNUSED_MAP_CE, 7, 5, RocketHQName - internal_map SILPH_CO_8F, 10, 5, SilphCoName - internal_map POKEMON_MANSION_B1F, 2, 15, PokemonMansionName - internal_map SAFARI_ZONE_NORTH_REST_HOUSE, 8, 12, SafariZoneName - internal_map CERULEAN_CAVE_1F, 9, 1, CeruleanCaveName - internal_map NAME_RATERS_HOUSE, 14, 5, LavenderTownName - internal_map CERULEAN_BADGE_HOUSE, 10, 2, CeruleanCityName - internal_map ROCK_TUNNEL_B1F, 14, 3, RockTunnelName - internal_map SILPH_CO_ELEVATOR, 10, 5, SilphCoName - internal_map AGATHAS_ROOM, 0, 2, PokemonLeagueName + table_width 4 + ; indoor map group, x, y, name + indoor_map PALLET_TOWN, 2, 11, PalletTownName + indoor_map VIRIDIAN_CITY, 2, 8, ViridianCityName + indoor_map ROUTE_2, 2, 6, Route2Name + indoor_map VIRIDIAN_FOREST, 2, 4, ViridianForestName + indoor_map PEWTER_CITY, 2, 3, PewterCityName + indoor_map MT_MOON, 6, 2, MountMoonName + indoor_map CERULEAN_CITY, 10, 2, CeruleanCityName + indoor_map ROUTE_4, 5, 2, Route4Name + indoor_map CERULEAN_CITY_2, 10, 2, CeruleanCityName + indoor_map ROUTE_5, 10, 4, Route5Name + indoor_map ROUTE_6, 10, 6, Route6Name + indoor_map ROUTE_7, 9, 5, Route7Name + indoor_map ROUTE_8, 11, 5, Route8Name + indoor_map ROCK_TUNNEL, 14, 3, RockTunnelName + indoor_map POWER_PLANT, 15, 4, PowerPlantName + indoor_map ROUTE_11, 13, 9, Route11Name + indoor_map ROUTE_12, 14, 7, Route12Name + indoor_map SEA_COTTAGE, 12, 0, SeaCottageName + indoor_map VERMILION_CITY, 10, 9, VermilionCityName + indoor_map SS_ANNE, 9, 10, SSAnneName + indoor_map VICTORY_ROAD, 0, 4, VictoryRoadName + indoor_map POKEMON_LEAGUE, 0, 2, PokemonLeagueName + indoor_map UNDERGROUND_PATH, 10, 5, UndergroundPathName + indoor_map POKEMON_LEAGUE_2, 0, 2, PokemonLeagueName + indoor_map UNDERGROUND_PATH_2, 10, 5, UndergroundPathName + indoor_map CELADON_CITY, 7, 5, CeladonCityName + indoor_map LAVENDER_TOWN, 14, 5, LavenderTownName + indoor_map POKEMON_TOWER, 15, 5, PokemonTowerName + indoor_map LAVENDER_TOWN_2, 14, 5, LavenderTownName + indoor_map FUCHSIA_CITY, 8, 13, FuchsiaCityName + indoor_map SAFARI_ZONE, 8, 12, SafariZoneName + indoor_map FUCHSIA_CITY_2, 8, 13, FuchsiaCityName + indoor_map SEAFOAM_ISLANDS, 5, 15, SeafoamIslandsName + indoor_map VERMILION_CITY_2, 10, 9, VermilionCityName + indoor_map FUCHSIA_CITY_3, 8, 13, FuchsiaCityName + indoor_map POKEMON_MANSION, 2, 15, PokemonMansionName + indoor_map CINNABAR_ISLAND, 2, 15, CinnabarIslandName + indoor_map INDIGO_PLATEAU, 0, 2, IndigoPlateauName + indoor_map SAFFRON_CITY, 10, 5, SaffronCityName + indoor_map ROUTE_15, 9, 13, Route15Name + indoor_map ROUTE_16, 4, 5, Route16Name + indoor_map ROUTE_12_2, 14, 10, Route12Name + indoor_map ROUTE_18, 7, 13, Route18Name + indoor_map SEAFOAM_ISLANDS_2, 5, 15, SeafoamIslandsName + indoor_map ROUTE_22, 0, 7, Route22Name + indoor_map VICTORY_ROAD_2, 0, 4, VictoryRoadName + indoor_map ROUTE_12_3, 14, 7, Route12Name + indoor_map VERMILION_CITY_3, 10, 9, VermilionCityName + indoor_map DIGLETTS_CAVE, 3, 4, DiglettsCaveName + indoor_map VICTORY_ROAD_3, 0, 4, VictoryRoadName + indoor_map ROCKET_HQ, 7, 5, RocketHQName + indoor_map SILPH_CO, 10, 5, SilphCoName + indoor_map POKEMON_MANSION_2, 2, 15, PokemonMansionName + indoor_map SAFARI_ZONE_2, 8, 12, SafariZoneName + indoor_map CERULEAN_CAVE, 9, 1, CeruleanCaveName + indoor_map LAVENDER_TOWN_3, 14, 5, LavenderTownName + indoor_map CERULEAN_CITY_3, 10, 2, CeruleanCityName + indoor_map ROCK_TUNNEL_2, 14, 3, RockTunnelName + indoor_map SILPH_CO_2, 10, 5, SilphCoName + indoor_map POKEMON_LEAGUE_3, 0, 2, PokemonLeagueName + assert_table_length NUM_INDOOR_MAP_GROUPS db -1 ; end -- cgit v1.3.1-sl0p From d79c578abd993f7eee4e85462a8cd5b7c4e14646 Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Mon, 15 Dec 2025 15:16:40 -0500 Subject: Specify a max item length for `list_start` (#552) --- constants/text_constants.asm | 14 ++++++++------ data/battle/stat_mod_names.asm | 2 +- data/battle/stat_names.asm | 2 +- data/items/names.asm | 2 +- data/moves/names.asm | 3 ++- data/player/names_list.asm | 4 ++-- data/trainers/move_choices.asm | 8 +++++--- data/trainers/names.asm | 2 +- engine/battle/effects.asm | 2 +- engine/battle/get_trainer_name.asm | 2 +- engine/items/item_effects.asm | 2 +- macros/asserts.asm | 18 ++++++++++++++---- 12 files changed, 38 insertions(+), 23 deletions(-) (limited to 'data') diff --git a/constants/text_constants.asm b/constants/text_constants.asm index 88a42bbe..f4587736 100644 --- a/constants/text_constants.asm +++ b/constants/text_constants.asm @@ -1,9 +1,11 @@ -DEF PLAYER_NAME_LENGTH EQU 8 -DEF NAME_LENGTH EQU 11 -DEF ITEM_NAME_LENGTH EQU 13 -DEF MOVE_NAME_LENGTH EQU 14 -DEF NAME_BUFFER_LENGTH EQU 20 -DEF GYM_CITY_LENGTH EQU 17 +DEF PLAYER_NAME_LENGTH EQU 8 +DEF STAT_NAME_LENGTH EQU 10 +DEF NAME_LENGTH EQU 11 +DEF ITEM_NAME_LENGTH EQU 13 +DEF TRAINER_NAME_LENGTH EQU 13 +DEF MOVE_NAME_LENGTH EQU 14 +DEF GYM_CITY_LENGTH EQU 17 +DEF NAME_BUFFER_LENGTH EQU 20 ; PrintNumber, PrintBCDNumber const_def 5 diff --git a/data/battle/stat_mod_names.asm b/data/battle/stat_mod_names.asm index 63c956d7..6c68db4e 100644 --- a/data/battle/stat_mod_names.asm +++ b/data/battle/stat_mod_names.asm @@ -2,7 +2,7 @@ ; The relevant move effect IDs correspond to the stats StatModTextStrings: - list_start + list_start STAT_NAME_LENGTH - 1 li "ATTACK" li "DEFENSE" li "SPEED" diff --git a/data/battle/stat_names.asm b/data/battle/stat_names.asm index 30401a99..08685e83 100644 --- a/data/battle/stat_names.asm +++ b/data/battle/stat_names.asm @@ -1,7 +1,7 @@ ; Stats that vitamins can raise or lower VitaminStats: - list_start + list_start STAT_NAME_LENGTH - 1 li "HEALTH" li "ATTACK" li "DEFENSE" diff --git a/data/items/names.asm b/data/items/names.asm index bab26efc..f5c0f27e 100644 --- a/data/items/names.asm +++ b/data/items/names.asm @@ -1,5 +1,5 @@ ItemNames:: - list_start + list_start ITEM_NAME_LENGTH - 1 li "MASTER BALL" li "ULTRA BALL" li "GREAT BALL" diff --git a/data/moves/names.asm b/data/moves/names.asm index 025172d5..caecc06c 100644 --- a/data/moves/names.asm +++ b/data/moves/names.asm @@ -1,5 +1,6 @@ MoveNames:: - list_start + ; in-battle "used !" text can only fit 12 (MOVE_NAME_LENGTH - 2) characters + list_start MOVE_NAME_LENGTH - 2 li "POUND" li "KARATE CHOP" li "DOUBLESLAP" diff --git a/data/player/names_list.asm b/data/player/names_list.asm index 786c1229..44f3c7f1 100644 --- a/data/player/names_list.asm +++ b/data/player/names_list.asm @@ -2,7 +2,7 @@ DefaultNamesPlayerList: db "NEW NAME@" - list_start + list_start PLAYER_NAME_LENGTH - 1 FOR n, 1, NUM_PLAYER_NAMES + 1 li #PLAYERNAME{d:n} ENDR @@ -10,7 +10,7 @@ ENDR DefaultNamesRivalList: db "NEW NAME@" - list_start + list_start PLAYER_NAME_LENGTH - 1 FOR n, 1, NUM_PLAYER_NAMES + 1 li #RIVALNAME{d:n} ENDR diff --git a/data/trainers/move_choices.asm b/data/trainers/move_choices.asm index 1624b326..98c068a1 100644 --- a/data/trainers/move_choices.asm +++ b/data/trainers/move_choices.asm @@ -1,14 +1,15 @@ +DEF __move_choices__ = 0 + MACRO move_choices IF _NARG db \# ; all args ENDC db 0 ; end - DEF list_index += 1 + DEF __move_choices__ += 1 ENDM ; move choice modification methods that are applied for each trainer class TrainerClassMoveChoiceModifications: - list_start move_choices ; YOUNGSTER move_choices 1 ; BUG CATCHER move_choices 1 ; LASS @@ -56,4 +57,5 @@ TrainerClassMoveChoiceModifications: move_choices 1 ; CHANNELER move_choices 1 ; AGATHA move_choices 1, 3 ; LANCE - assert_list_length NUM_TRAINERS + assert __move_choices__ == NUM_TRAINERS, \ + "TrainerClassMoveChoiceModifications: expected {d:NUM_TRAINERS} entries, got {d:__move_choices__}" diff --git a/data/trainers/names.asm b/data/trainers/names.asm index d7c5677c..1b6f2382 100644 --- a/data/trainers/names.asm +++ b/data/trainers/names.asm @@ -1,5 +1,5 @@ TrainerNames:: - list_start + list_start TRAINER_NAME_LENGTH - 1 li "YOUNGSTER" li "BUG CATCHER" li "LASS" diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm index 22765140..394e07e5 100644 --- a/engine/battle/effects.asm +++ b/engine/battle/effects.asm @@ -754,7 +754,7 @@ PrintStatText: jr .findStatName_inner .foundStatName ld de, wStringBuffer - ld bc, NAME_LENGTH - 1 ; all StatModTextStrings are at most 10 bytes + ld bc, STAT_NAME_LENGTH jp CopyData INCLUDE "data/battle/stat_mod_names.asm" diff --git a/engine/battle/get_trainer_name.asm b/engine/battle/get_trainer_name.asm index a0e869fc..1983b08a 100644 --- a/engine/battle/get_trainer_name.asm +++ b/engine/battle/get_trainer_name.asm @@ -20,5 +20,5 @@ GetTrainerName_:: ld hl, wNameBuffer .foundName ld de, wTrainerName - ld bc, ITEM_NAME_LENGTH + ld bc, TRAINER_NAME_LENGTH jp CopyData diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index 12b5bd00..c4ce13de 100644 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -1308,7 +1308,7 @@ ItemUseMedicine: jr .statNameLoop .gotStatName ld de, wStringBuffer - ld bc, NAME_LENGTH - 1 ; all VitaminStats are at most 10 bytes + ld bc, STAT_NAME_LENGTH call CopyData ; copy the stat's name to wStringBuffer ld a, SFX_HEAL_AILMENT call PlaySound diff --git a/macros/asserts.asm b/macros/asserts.asm index e2de1505..11e0ee99 100644 --- a/macros/asserts.asm +++ b/macros/asserts.asm @@ -4,8 +4,8 @@ MACRO? _redef_current_label IF DEF(\1) PURGE \1 ENDC - IF _NARG == 3 + (\3) - DEF \1 EQUS "\<_NARG>" + IF _NARG > 2 + DEF \1 EQUS "\3" ELIF STRLEN(#__SCOPE__) IF {{__SCOPE__}} - @ == 0 DEF \1 EQUS #{__SCOPE__} @@ -19,7 +19,8 @@ ENDM MACRO? table_width DEF CURRENT_TABLE_WIDTH = \1 - _redef_current_label CURRENT_TABLE_START, "._table_width\@", 2, \# + SHIFT + _redef_current_label CURRENT_TABLE_START, "._table_width\@", \# ENDM MACRO? assert_table_length @@ -40,11 +41,20 @@ ENDM MACRO? list_start DEF list_index = 0 - _redef_current_label CURRENT_LIST_START, "._list_start\@", 1, \# + DEF list_item_length = 0 + IF _NARG > 0 + DEF list_item_length = \1 + SHIFT + ENDC + _redef_current_label CURRENT_LIST_START, "._list_start\@", \# ENDM MACRO? li ASSERT STRFIND(\1, "@") == -1, "String terminator \"@\" in list entry: \1" + IF list_item_length + ASSERT CHARLEN(\1) <= list_item_length, \ + "List entry longer than {d:list_item_length} characters: \1" + ENDC db \1, "@" DEF list_index += 1 ENDM -- cgit v1.3.1-sl0p From fe1e76466b293c83e6cd3a7d4639fb3c49da26ad Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Wed, 7 Jan 2026 22:05:20 -0500 Subject: Use macros to enforce "missable/hide/show object" constraints, and rename them to "toggleable objects" (#557) --- constants/hide_show_constants.asm | 240 ----------- constants/map_constants.asm | 2 +- constants/toggle_constants.asm | 393 ++++++++++++++++++ data/maps/hide_show_data.asm | 568 --------------------------- data/maps/objects/SilphCo7F.asm | 2 +- data/maps/toggleable_objects.asm | 423 ++++++++++++++++++++ data/predef_pointers.asm | 4 +- engine/events/pick_up_item.asm | 16 +- engine/movie/oak_speech/init_player_data.asm | 2 +- engine/overworld/auto_movement.asm | 4 +- engine/overworld/missable_objects.asm | 212 ---------- engine/overworld/movement.asm | 2 +- engine/overworld/toggleable_objects.asm | 213 ++++++++++ home/overworld.asm | 2 +- home/trainers.asm | 4 +- includes.asm | 2 +- main.asm | 4 +- ram/hram.asm | 4 +- ram/wram.asm | 14 +- scripts/BillsHouse.asm | 16 +- scripts/BluesHouse.asm | 4 +- scripts/CeladonMansionRoofHouse.asm | 4 +- scripts/CeruleanCity.asm | 12 +- scripts/CeruleanCity_2.asm | 12 +- scripts/ChampionsRoom.asm | 8 +- scripts/FightingDojo.asm | 8 +- scripts/GameCorner.asm | 4 +- scripts/HallOfFame.asm | 4 +- scripts/MtMoonB2F.asm | 14 +- scripts/Museum1F.asm | 4 +- scripts/OaksLab.asm | 66 ++-- scripts/PalletTown.asm | 12 +- scripts/PewterCity.asm | 16 +- scripts/PewterGym.asm | 8 +- scripts/PokemonTower2F.asm | 4 +- scripts/PokemonTower7F.asm | 26 +- scripts/RocketHideoutB4F.asm | 12 +- scripts/Route12.asm | 4 +- scripts/Route16.asm | 4 +- scripts/Route20.asm | 38 +- scripts/Route22.asm | 8 +- scripts/Route23.asm | 8 +- scripts/Route25.asm | 20 +- scripts/SSAnne2F.asm | 8 +- scripts/SeafoamIslands1F.asm | 12 +- scripts/SeafoamIslandsB1F.asm | 12 +- scripts/SeafoamIslandsB2F.asm | 12 +- scripts/SeafoamIslandsB3F.asm | 12 +- scripts/SilphCo11F.asm | 104 ++--- scripts/SilphCo1F.asm | 4 +- scripts/SilphCo7F.asm | 4 +- scripts/VictoryRoad3F.asm | 8 +- scripts/ViridianGym.asm | 8 +- 53 files changed, 1310 insertions(+), 1301 deletions(-) delete mode 100644 constants/hide_show_constants.asm create mode 100644 constants/toggle_constants.asm delete mode 100644 data/maps/hide_show_data.asm create mode 100644 data/maps/toggleable_objects.asm delete mode 100644 engine/overworld/missable_objects.asm create mode 100644 engine/overworld/toggleable_objects.asm (limited to 'data') diff --git a/constants/hide_show_constants.asm b/constants/hide_show_constants.asm deleted file mode 100644 index b73271e8..00000000 --- a/constants/hide_show_constants.asm +++ /dev/null @@ -1,240 +0,0 @@ -DEF HIDE EQU $11 -DEF SHOW EQU $15 - -; MissableObjects indexes (see data/maps/hide_show_data.asm) -; this is a list of the sprites that can be enabled/disabled during the game -; sprites marked with an X are constants that are never used -; because those sprites are not (de)activated in a map's script -; (they are either items or sprites that deactivate after battle -; and are detected in wMissableObjectList) - - const_def - const HS_PALLET_TOWN_OAK ; 00 - const HS_LYING_OLD_MAN ; 01 - const HS_OLD_MAN ; 02 - const HS_MUSEUM_GUY ; 03 - const HS_GYM_GUY ; 04 - const HS_CERULEAN_RIVAL ; 05 - const HS_CERULEAN_ROCKET ; 06 - const HS_CERULEAN_GUARD_1 ; 07 - const HS_CERULEAN_CAVE_GUY ; 08 - const HS_CERULEAN_GUARD_2 ; 09 - const HS_SAFFRON_CITY_1 ; 0A - const HS_SAFFRON_CITY_2 ; 0B - const HS_SAFFRON_CITY_3 ; 0C - const HS_SAFFRON_CITY_4 ; 0D - const HS_SAFFRON_CITY_5 ; 0E - const HS_SAFFRON_CITY_6 ; 0F - const HS_SAFFRON_CITY_7 ; 10 - const HS_SAFFRON_CITY_8 ; 11 - const HS_SAFFRON_CITY_9 ; 12 - const HS_SAFFRON_CITY_A ; 13 - const HS_SAFFRON_CITY_B ; 14 - const HS_SAFFRON_CITY_C ; 15 - const HS_SAFFRON_CITY_D ; 16 - const HS_SAFFRON_CITY_E ; 17 - const HS_SAFFRON_CITY_F ; 18 - const HS_ROUTE_2_ITEM_1 ; 19 X - const HS_ROUTE_2_ITEM_2 ; 1A X - const HS_ROUTE_4_ITEM ; 1B X - const HS_ROUTE_9_ITEM ; 1C X - const HS_ROUTE_12_SNORLAX ; 1D - const HS_ROUTE_12_ITEM_1 ; 1E X - const HS_ROUTE_12_ITEM_2 ; 1F X - const HS_ROUTE_15_ITEM ; 20 X - const HS_ROUTE_16_SNORLAX ; 21 - const HS_ROUTE_22_RIVAL_1 ; 22 - const HS_ROUTE_22_RIVAL_2 ; 23 - const HS_NUGGET_BRIDGE_GUY ; 24 - const HS_ROUTE_24_ITEM ; 25 X - const HS_ROUTE_25_ITEM ; 26 X - const HS_DAISY_SITTING ; 27 - const HS_DAISY_WALKING ; 28 - const HS_TOWN_MAP ; 29 - const HS_OAKS_LAB_RIVAL ; 2A - const HS_STARTER_BALL_1 ; 2B - const HS_STARTER_BALL_2 ; 2C - const HS_STARTER_BALL_3 ; 2D - const HS_OAKS_LAB_OAK_1 ; 2E - const HS_POKEDEX_1 ; 2F - const HS_POKEDEX_2 ; 30 - const HS_OAKS_LAB_OAK_2 ; 31 - const HS_VIRIDIAN_GYM_GIOVANNI ; 32 - const HS_VIRIDIAN_GYM_ITEM ; 33 X - const HS_OLD_AMBER ; 34 - const HS_CERULEAN_CAVE_1F_ITEM_1 ; 35 X - const HS_CERULEAN_CAVE_1F_ITEM_2 ; 36 X - const HS_CERULEAN_CAVE_1F_ITEM_3 ; 37 X - const HS_POKEMON_TOWER_2F_RIVAL ; 38 - const HS_POKEMON_TOWER_3F_ITEM ; 39 X - const HS_POKEMON_TOWER_4F_ITEM_1 ; 3A X - const HS_POKEMON_TOWER_4F_ITEM_2 ; 3B X - const HS_POKEMON_TOWER_4F_ITEM_3 ; 3C X - const HS_POKEMON_TOWER_5F_ITEM ; 3D X - const HS_POKEMON_TOWER_6F_ITEM_1 ; 3E X - const HS_POKEMON_TOWER_6F_ITEM_2 ; 3F X - const HS_POKEMON_TOWER_7F_ROCKET_1 ; 40 X - const HS_POKEMON_TOWER_7F_ROCKET_2 ; 41 X - const HS_POKEMON_TOWER_7F_ROCKET_3 ; 42 X - const HS_POKEMON_TOWER_7F_MR_FUJI ; 43 - const HS_MR_FUJIS_HOUSE_MR_FUJI ; 44 - const HS_CELADON_MANSION_EEVEE_GIFT ; 45 - const HS_GAME_CORNER_ROCKET ; 46 - const HS_WARDENS_HOUSE_ITEM ; 47 X - const HS_POKEMON_MANSION_1F_ITEM_1 ; 48 X - const HS_POKEMON_MANSION_1F_ITEM_2 ; 49 X - const HS_FIGHTING_DOJO_GIFT_1 ; 4A - const HS_FIGHTING_DOJO_GIFT_2 ; 4B - const HS_SILPH_CO_1F_RECEPTIONIST ; 4C - const HS_VOLTORB_1 ; 4D X - const HS_VOLTORB_2 ; 4E X - const HS_VOLTORB_3 ; 4F X - const HS_ELECTRODE_1 ; 50 X - const HS_VOLTORB_4 ; 51 X - const HS_VOLTORB_5 ; 52 X - const HS_ELECTRODE_2 ; 53 X - const HS_VOLTORB_6 ; 54 X - const HS_ZAPDOS ; 55 X - const HS_POWER_PLANT_ITEM_1 ; 56 X - const HS_POWER_PLANT_ITEM_2 ; 57 X - const HS_POWER_PLANT_ITEM_3 ; 58 X - const HS_POWER_PLANT_ITEM_4 ; 59 X - const HS_POWER_PLANT_ITEM_5 ; 5A X - const HS_MOLTRES ; 5B X - const HS_VICTORY_ROAD_2F_ITEM_1 ; 5C X - const HS_VICTORY_ROAD_2F_ITEM_2 ; 5D X - const HS_VICTORY_ROAD_2F_ITEM_3 ; 5E X - const HS_VICTORY_ROAD_2F_ITEM_4 ; 5F X - const HS_VICTORY_ROAD_2F_BOULDER ; 60 - const HS_BILL_POKEMON ; 61 - const HS_BILL_1 ; 62 - const HS_BILL_2 ; 63 - const HS_VIRIDIAN_FOREST_ITEM_1 ; 64 X - const HS_VIRIDIAN_FOREST_ITEM_2 ; 65 X - const HS_VIRIDIAN_FOREST_ITEM_3 ; 66 X - const HS_MT_MOON_1F_ITEM_1 ; 67 X - const HS_MT_MOON_1F_ITEM_2 ; 68 X - const HS_MT_MOON_1F_ITEM_3 ; 69 X - const HS_MT_MOON_1F_ITEM_4 ; 6A X - const HS_MT_MOON_1F_ITEM_5 ; 6B X - const HS_MT_MOON_1F_ITEM_6 ; 6C X - const HS_MT_MOON_B2F_FOSSIL_1 ; 6D - const HS_MT_MOON_B2F_FOSSIL_2 ; 6E - const HS_MT_MOON_B2F_ITEM_1 ; 6F X - const HS_MT_MOON_B2F_ITEM_2 ; 70 X - const HS_SS_ANNE_2F_RIVAL ; 71 - const HS_SS_ANNE_1F_ROOMS_ITEM ; 72 X - const HS_SS_ANNE_2F_ROOMS_ITEM_1 ; 73 X - const HS_SS_ANNE_2F_ROOMS_ITEM_2 ; 74 X - const HS_SS_ANNE_B1F_ROOMS_ITEM_1 ; 75 X - const HS_SS_ANNE_B1F_ROOMS_ITEM_2 ; 76 X - const HS_SS_ANNE_B1F_ROOMS_ITEM_3 ; 77 X - const HS_VICTORY_ROAD_3F_ITEM_1 ; 78 X - const HS_VICTORY_ROAD_3F_ITEM_2 ; 79 X - const HS_VICTORY_ROAD_3F_BOULDER ; 7A - const HS_ROCKET_HIDEOUT_B1F_ITEM_1 ; 7B X - const HS_ROCKET_HIDEOUT_B1F_ITEM_2 ; 7C X - const HS_ROCKET_HIDEOUT_B2F_ITEM_1 ; 7D X - const HS_ROCKET_HIDEOUT_B2F_ITEM_2 ; 7E X - const HS_ROCKET_HIDEOUT_B2F_ITEM_3 ; 7F X - const HS_ROCKET_HIDEOUT_B2F_ITEM_4 ; 80 X - const HS_ROCKET_HIDEOUT_B3F_ITEM_1 ; 81 X - const HS_ROCKET_HIDEOUT_B3F_ITEM_2 ; 82 X - const HS_ROCKET_HIDEOUT_B4F_GIOVANNI ; 83 - const HS_ROCKET_HIDEOUT_B4F_ITEM_1 ; 84 X - const HS_ROCKET_HIDEOUT_B4F_ITEM_2 ; 85 X - const HS_ROCKET_HIDEOUT_B4F_ITEM_3 ; 86 X - const HS_ROCKET_HIDEOUT_B4F_ITEM_4 ; 87 - const HS_ROCKET_HIDEOUT_B4F_ITEM_5 ; 88 - const HS_SILPH_CO_2F_1 ; 89 XXX never (de)activated? - const HS_SILPH_CO_2F_2 ; 8A - const HS_SILPH_CO_2F_3 ; 8B - const HS_SILPH_CO_2F_4 ; 8C - const HS_SILPH_CO_2F_5 ; 8D - const HS_SILPH_CO_3F_1 ; 8E - const HS_SILPH_CO_3F_2 ; 8F - const HS_SILPH_CO_3F_ITEM ; 90 X - const HS_SILPH_CO_4F_1 ; 91 - const HS_SILPH_CO_4F_2 ; 92 - const HS_SILPH_CO_4F_3 ; 93 - const HS_SILPH_CO_4F_ITEM_1 ; 94 X - const HS_SILPH_CO_4F_ITEM_2 ; 95 X - const HS_SILPH_CO_4F_ITEM_3 ; 96 X - const HS_SILPH_CO_5F_1 ; 97 - const HS_SILPH_CO_5F_2 ; 98 - const HS_SILPH_CO_5F_3 ; 99 - const HS_SILPH_CO_5F_4 ; 9A - const HS_SILPH_CO_5F_ITEM_1 ; 9B X - const HS_SILPH_CO_5F_ITEM_2 ; 9C X - const HS_SILPH_CO_5F_ITEM_3 ; 9D X - const HS_SILPH_CO_6F_1 ; 9E - const HS_SILPH_CO_6F_2 ; 9F - const HS_SILPH_CO_6F_3 ; A0 - const HS_SILPH_CO_6F_ITEM_1 ; A1 X - const HS_SILPH_CO_6F_ITEM_2 ; A2 X - const HS_SILPH_CO_7F_1 ; A3 - const HS_SILPH_CO_7F_2 ; A4 - const HS_SILPH_CO_7F_3 ; A5 - const HS_SILPH_CO_7F_4 ; A6 - const HS_SILPH_CO_7F_RIVAL ; A7 - const HS_SILPH_CO_7F_ITEM_1 ; A8 X - const HS_SILPH_CO_7F_ITEM_2 ; A9 X - const HS_SILPH_CO_7F_8 ; AA XXX sprite doesn't exist - const HS_SILPH_CO_8F_1 ; AB - const HS_SILPH_CO_8F_2 ; AC - const HS_SILPH_CO_8F_3 ; AD - const HS_SILPH_CO_9F_1 ; AE - const HS_SILPH_CO_9F_2 ; AF - const HS_SILPH_CO_9F_3 ; B0 - const HS_SILPH_CO_10F_1 ; B1 - const HS_SILPH_CO_10F_2 ; B2 - const HS_SILPH_CO_10F_3 ; B3 XXX never (de)activated? - const HS_SILPH_CO_10F_ITEM_1 ; B4 X - const HS_SILPH_CO_10F_ITEM_2 ; B5 X - const HS_SILPH_CO_10F_ITEM_3 ; B6 X - const HS_SILPH_CO_11F_1 ; B7 - const HS_SILPH_CO_11F_2 ; B8 - const HS_SILPH_CO_11F_3 ; B9 - const HS_UNUSED_MAP_F4_1 ; BA XXX sprite doesn't exist - const HS_POKEMON_MANSION_2F_ITEM ; BB X - const HS_POKEMON_MANSION_3F_ITEM_1 ; BC X - const HS_POKEMON_MANSION_3F_ITEM_2 ; BD X - const HS_POKEMON_MANSION_B1F_ITEM_1 ; BE X - const HS_POKEMON_MANSION_B1F_ITEM_2 ; BF X - const HS_POKEMON_MANSION_B1F_ITEM_3 ; C0 X - const HS_POKEMON_MANSION_B1F_ITEM_4 ; C1 X - const HS_POKEMON_MANSION_B1F_ITEM_5 ; C2 X - const HS_SAFARI_ZONE_EAST_ITEM_1 ; C3 X - const HS_SAFARI_ZONE_EAST_ITEM_2 ; C4 X - const HS_SAFARI_ZONE_EAST_ITEM_3 ; C5 X - const HS_SAFARI_ZONE_EAST_ITEM_4 ; C6 X - const HS_SAFARI_ZONE_NORTH_ITEM_1 ; C7 X - const HS_SAFARI_ZONE_NORTH_ITEM_2 ; C8 X - const HS_SAFARI_ZONE_WEST_ITEM_1 ; C9 X - const HS_SAFARI_ZONE_WEST_ITEM_2 ; CA X - const HS_SAFARI_ZONE_WEST_ITEM_3 ; CB X - const HS_SAFARI_ZONE_WEST_ITEM_4 ; CC X - const HS_SAFARI_ZONE_CENTER_ITEM ; CD X - const HS_CERULEAN_CAVE_2F_ITEM_1 ; CE X - const HS_CERULEAN_CAVE_2F_ITEM_2 ; CF X - const HS_CERULEAN_CAVE_2F_ITEM_3 ; D0 X - const HS_MEWTWO ; D1 X - const HS_CERULEAN_CAVE_B1F_ITEM_1 ; D2 X - const HS_CERULEAN_CAVE_B1F_ITEM_2 ; D3 X - const HS_VICTORY_ROAD_1F_ITEM_1 ; D4 X - const HS_VICTORY_ROAD_1F_ITEM_2 ; D5 X - const HS_CHAMPIONS_ROOM_OAK ; D6 - const HS_SEAFOAM_ISLANDS_1F_BOULDER_1 ; D7 - const HS_SEAFOAM_ISLANDS_1F_BOULDER_2 ; D8 - const HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 ; D9 - const HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 ; DA - const HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 ; DB - const HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 ; DC - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_1 ; DD - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_2 ; DE - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_3 ; DF - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_4 ; E0 - const HS_SEAFOAM_ISLANDS_B4F_BOULDER_1 ; E1 - const HS_SEAFOAM_ISLANDS_B4F_BOULDER_2 ; E2 - const HS_ARTICUNO ; E3 X -DEF NUM_HS_OBJECTS EQU const_value diff --git a/constants/map_constants.asm b/constants/map_constants.asm index 7ae4af44..fe0bd9f5 100644 --- a/constants/map_constants.asm +++ b/constants/map_constants.asm @@ -16,7 +16,7 @@ ENDM ; - MapHeaderBanks (see data/maps/map_header_banks.asm) ; - MapHeaderPointers (see data/maps/map_header_pointers.asm) ; - MapSongBanks (see data/maps/songs.asm) -; - MapHSPointers (see data/maps/hide_show_data.asm) +; - ToggleableObjectMapPointers (see data/maps/toggleable_objects.asm) ; - MapSpriteSets (see data/maps/sprite_sets.asm) ; - ExternalMapEntries (see data/maps/town_map_entries.asm) ; - WildDataPointers (see data/wild/grass_water.asm) diff --git a/constants/toggle_constants.asm b/constants/toggle_constants.asm new file mode 100644 index 00000000..701bc2b4 --- /dev/null +++ b/constants/toggle_constants.asm @@ -0,0 +1,393 @@ +DEF OFF EQU $11 +DEF ON EQU $15 + +MACRO toggle_consts_for + DEF TOGGLEMAP{\1} EQU const_value +ENDM + +; ToggleableObjectStates indexes (see data/maps/toggleable_objects.asm) +; This lists the object_events that can be toggled by ShowObject/HideObject. +; The constants marked with an X are never used, because those object_events +; are not toggled on/off in any map's script. +; (The X-ed ones are either items or static Pokemon encounters that deactivate +; after battle and are detected in wToggleableObjectList.) + + const_def + + toggle_consts_for PALLET_TOWN + const TOGGLE_PALLET_TOWN_OAK ; 00 + + toggle_consts_for VIRIDIAN_CITY + const TOGGLE_LYING_OLD_MAN ; 01 + const TOGGLE_OLD_MAN ; 02 + + toggle_consts_for PEWTER_CITY + const TOGGLE_MUSEUM_GUY ; 03 + const TOGGLE_GYM_GUY ; 04 + + toggle_consts_for CERULEAN_CITY + const TOGGLE_CERULEAN_RIVAL ; 05 + const TOGGLE_CERULEAN_ROCKET ; 06 + const TOGGLE_CERULEAN_GUARD_1 ; 07 + const TOGGLE_CERULEAN_CAVE_GUY ; 08 + const TOGGLE_CERULEAN_GUARD_2 ; 09 + + toggle_consts_for SAFFRON_CITY + const TOGGLE_SAFFRON_CITY_1 ; 0A + const TOGGLE_SAFFRON_CITY_2 ; 0B + const TOGGLE_SAFFRON_CITY_3 ; 0C + const TOGGLE_SAFFRON_CITY_4 ; 0D + const TOGGLE_SAFFRON_CITY_5 ; 0E + const TOGGLE_SAFFRON_CITY_6 ; 0F + const TOGGLE_SAFFRON_CITY_7 ; 10 + const TOGGLE_SAFFRON_CITY_8 ; 11 + const TOGGLE_SAFFRON_CITY_9 ; 12 + const TOGGLE_SAFFRON_CITY_A ; 13 + const TOGGLE_SAFFRON_CITY_B ; 14 + const TOGGLE_SAFFRON_CITY_C ; 15 + const TOGGLE_SAFFRON_CITY_D ; 16 + const TOGGLE_SAFFRON_CITY_E ; 17 + const TOGGLE_SAFFRON_CITY_F ; 18 + + toggle_consts_for ROUTE_2 + const TOGGLE_ROUTE_2_ITEM_1 ; 19 X + const TOGGLE_ROUTE_2_ITEM_2 ; 1A X + + toggle_consts_for ROUTE_4 + const TOGGLE_ROUTE_4_ITEM ; 1B X + + toggle_consts_for ROUTE_9 + const TOGGLE_ROUTE_9_ITEM ; 1C X + + toggle_consts_for ROUTE_12 + const TOGGLE_ROUTE_12_SNORLAX ; 1D + const TOGGLE_ROUTE_12_ITEM_1 ; 1E X + const TOGGLE_ROUTE_12_ITEM_2 ; 1F X + + toggle_consts_for ROUTE_15 + const TOGGLE_ROUTE_15_ITEM ; 20 X + + toggle_consts_for ROUTE_16 + const TOGGLE_ROUTE_16_SNORLAX ; 21 + + toggle_consts_for ROUTE_22 + const TOGGLE_ROUTE_22_RIVAL_1 ; 22 + const TOGGLE_ROUTE_22_RIVAL_2 ; 23 + + toggle_consts_for ROUTE_24 + const TOGGLE_NUGGET_BRIDGE_GUY ; 24 + const TOGGLE_ROUTE_24_ITEM ; 25 X + + toggle_consts_for ROUTE_25 + const TOGGLE_ROUTE_25_ITEM ; 26 X + + toggle_consts_for BLUES_HOUSE + const TOGGLE_DAISY_SITTING ; 27 + const TOGGLE_DAISY_WALKING ; 28 + const TOGGLE_TOWN_MAP ; 29 + + toggle_consts_for OAKS_LAB + const TOGGLE_OAKS_LAB_RIVAL ; 2A + const TOGGLE_STARTER_BALL_1 ; 2B + const TOGGLE_STARTER_BALL_2 ; 2C + const TOGGLE_STARTER_BALL_3 ; 2D + const TOGGLE_OAKS_LAB_OAK_1 ; 2E + const TOGGLE_POKEDEX_1 ; 2F + const TOGGLE_POKEDEX_2 ; 30 + const TOGGLE_OAKS_LAB_OAK_2 ; 31 + + toggle_consts_for VIRIDIAN_GYM + const TOGGLE_VIRIDIAN_GYM_GIOVANNI ; 32 + const TOGGLE_VIRIDIAN_GYM_ITEM ; 33 X + + toggle_consts_for MUSEUM_1F + const TOGGLE_OLD_AMBER ; 34 + + toggle_consts_for CERULEAN_CAVE_1F + const TOGGLE_CERULEAN_CAVE_1F_ITEM_1 ; 35 X + const TOGGLE_CERULEAN_CAVE_1F_ITEM_2 ; 36 X + const TOGGLE_CERULEAN_CAVE_1F_ITEM_3 ; 37 X + + toggle_consts_for POKEMON_TOWER_2F + const TOGGLE_POKEMON_TOWER_2F_RIVAL ; 38 + + toggle_consts_for POKEMON_TOWER_3F + const TOGGLE_POKEMON_TOWER_3F_ITEM ; 39 X + + toggle_consts_for POKEMON_TOWER_4F + const TOGGLE_POKEMON_TOWER_4F_ITEM_1 ; 3A X + const TOGGLE_POKEMON_TOWER_4F_ITEM_2 ; 3B X + const TOGGLE_POKEMON_TOWER_4F_ITEM_3 ; 3C X + + toggle_consts_for POKEMON_TOWER_5F + const TOGGLE_POKEMON_TOWER_5F_ITEM ; 3D X + + toggle_consts_for POKEMON_TOWER_6F + const TOGGLE_POKEMON_TOWER_6F_ITEM_1 ; 3E X + const TOGGLE_POKEMON_TOWER_6F_ITEM_2 ; 3F X + + toggle_consts_for POKEMON_TOWER_7F + const TOGGLE_POKEMON_TOWER_7F_ROCKET_1 ; 40 X + const TOGGLE_POKEMON_TOWER_7F_ROCKET_2 ; 41 X + const TOGGLE_POKEMON_TOWER_7F_ROCKET_3 ; 42 X + const TOGGLE_POKEMON_TOWER_7F_MR_FUJI ; 43 + + toggle_consts_for MR_FUJIS_HOUSE + const TOGGLE_MR_FUJIS_HOUSE_MR_FUJI ; 44 + + toggle_consts_for CELADON_MANSION_ROOF_HOUSE + const TOGGLE_CELADON_MANSION_EEVEE_GIFT ; 45 + + toggle_consts_for GAME_CORNER + const TOGGLE_GAME_CORNER_ROCKET ; 46 + + toggle_consts_for WARDENS_HOUSE + const TOGGLE_WARDENS_HOUSE_ITEM ; 47 X + + toggle_consts_for POKEMON_MANSION_1F + const TOGGLE_POKEMON_MANSION_1F_ITEM_1 ; 48 X + const TOGGLE_POKEMON_MANSION_1F_ITEM_2 ; 49 X + + toggle_consts_for FIGHTING_DOJO + const TOGGLE_FIGHTING_DOJO_GIFT_1 ; 4A + const TOGGLE_FIGHTING_DOJO_GIFT_2 ; 4B + + toggle_consts_for SILPH_CO_1F + const TOGGLE_SILPH_CO_1F_RECEPTIONIST ; 4C + + toggle_consts_for POWER_PLANT + const TOGGLE_VOLTORB_1 ; 4D X + const TOGGLE_VOLTORB_2 ; 4E X + const TOGGLE_VOLTORB_3 ; 4F X + const TOGGLE_ELECTRODE_1 ; 50 X + const TOGGLE_VOLTORB_4 ; 51 X + const TOGGLE_VOLTORB_5 ; 52 X + const TOGGLE_ELECTRODE_2 ; 53 X + const TOGGLE_VOLTORB_6 ; 54 X + const TOGGLE_ZAPDOS ; 55 X + const TOGGLE_POWER_PLANT_ITEM_1 ; 56 X + const TOGGLE_POWER_PLANT_ITEM_2 ; 57 X + const TOGGLE_POWER_PLANT_ITEM_3 ; 58 X + const TOGGLE_POWER_PLANT_ITEM_4 ; 59 X + const TOGGLE_POWER_PLANT_ITEM_5 ; 5A X + + toggle_consts_for VICTORY_ROAD_2F + const TOGGLE_MOLTRES ; 5B X + const TOGGLE_VICTORY_ROAD_2F_ITEM_1 ; 5C X + const TOGGLE_VICTORY_ROAD_2F_ITEM_2 ; 5D X + const TOGGLE_VICTORY_ROAD_2F_ITEM_3 ; 5E X + const TOGGLE_VICTORY_ROAD_2F_ITEM_4 ; 5F X + const TOGGLE_VICTORY_ROAD_2F_BOULDER ; 60 + + toggle_consts_for BILLS_HOUSE + const TOGGLE_BILL_POKEMON ; 61 + const TOGGLE_BILL_1 ; 62 + const TOGGLE_BILL_2 ; 63 + + toggle_consts_for VIRIDIAN_FOREST + const TOGGLE_VIRIDIAN_FOREST_ITEM_1 ; 64 X + const TOGGLE_VIRIDIAN_FOREST_ITEM_2 ; 65 X + const TOGGLE_VIRIDIAN_FOREST_ITEM_3 ; 66 X + + toggle_consts_for MT_MOON_1F + const TOGGLE_MT_MOON_1F_ITEM_1 ; 67 X + const TOGGLE_MT_MOON_1F_ITEM_2 ; 68 X + const TOGGLE_MT_MOON_1F_ITEM_3 ; 69 X + const TOGGLE_MT_MOON_1F_ITEM_4 ; 6A X + const TOGGLE_MT_MOON_1F_ITEM_5 ; 6B X + const TOGGLE_MT_MOON_1F_ITEM_6 ; 6C X + + toggle_consts_for MT_MOON_B2F + const TOGGLE_MT_MOON_B2F_FOSSIL_1 ; 6D + const TOGGLE_MT_MOON_B2F_FOSSIL_2 ; 6E + const TOGGLE_MT_MOON_B2F_ITEM_1 ; 6F X + const TOGGLE_MT_MOON_B2F_ITEM_2 ; 70 X + + toggle_consts_for SS_ANNE_2F + const TOGGLE_SS_ANNE_2F_RIVAL ; 71 + + toggle_consts_for SS_ANNE_1F_ROOMS + const TOGGLE_SS_ANNE_1F_ROOMS_ITEM ; 72 X + + toggle_consts_for SS_ANNE_2F_ROOMS + const TOGGLE_SS_ANNE_2F_ROOMS_ITEM_1 ; 73 X + const TOGGLE_SS_ANNE_2F_ROOMS_ITEM_2 ; 74 X + + toggle_consts_for SS_ANNE_B1F_ROOMS + const TOGGLE_SS_ANNE_B1F_ROOMS_ITEM_1 ; 75 X + const TOGGLE_SS_ANNE_B1F_ROOMS_ITEM_2 ; 76 X + const TOGGLE_SS_ANNE_B1F_ROOMS_ITEM_3 ; 77 X + + toggle_consts_for VICTORY_ROAD_3F + const TOGGLE_VICTORY_ROAD_3F_ITEM_1 ; 78 X + const TOGGLE_VICTORY_ROAD_3F_ITEM_2 ; 79 X + const TOGGLE_VICTORY_ROAD_3F_BOULDER ; 7A + + toggle_consts_for ROCKET_HIDEOUT_B1F + const TOGGLE_ROCKET_HIDEOUT_B1F_ITEM_1 ; 7B X + const TOGGLE_ROCKET_HIDEOUT_B1F_ITEM_2 ; 7C X + + toggle_consts_for ROCKET_HIDEOUT_B2F + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_1 ; 7D X + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_2 ; 7E X + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_3 ; 7F X + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_4 ; 80 X + + toggle_consts_for ROCKET_HIDEOUT_B3F + const TOGGLE_ROCKET_HIDEOUT_B3F_ITEM_1 ; 81 X + const TOGGLE_ROCKET_HIDEOUT_B3F_ITEM_2 ; 82 X + + toggle_consts_for ROCKET_HIDEOUT_B4F + const TOGGLE_ROCKET_HIDEOUT_B4F_GIOVANNI ; 83 + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_1 ; 84 X + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_2 ; 85 X + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_3 ; 86 X + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_4 ; 87 + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_5 ; 88 + + toggle_consts_for SILPH_CO_2F + const TOGGLE_SILPH_CO_2F_1 ; 89 XXX never (de)activated? + const TOGGLE_SILPH_CO_2F_2 ; 8A + const TOGGLE_SILPH_CO_2F_3 ; 8B + const TOGGLE_SILPH_CO_2F_4 ; 8C + const TOGGLE_SILPH_CO_2F_5 ; 8D + + toggle_consts_for SILPH_CO_3F + const TOGGLE_SILPH_CO_3F_1 ; 8E + const TOGGLE_SILPH_CO_3F_2 ; 8F + const TOGGLE_SILPH_CO_3F_ITEM ; 90 X + + toggle_consts_for SILPH_CO_4F + const TOGGLE_SILPH_CO_4F_1 ; 91 + const TOGGLE_SILPH_CO_4F_2 ; 92 + const TOGGLE_SILPH_CO_4F_3 ; 93 + const TOGGLE_SILPH_CO_4F_ITEM_1 ; 94 X + const TOGGLE_SILPH_CO_4F_ITEM_2 ; 95 X + const TOGGLE_SILPH_CO_4F_ITEM_3 ; 96 X + + toggle_consts_for SILPH_CO_5F + const TOGGLE_SILPH_CO_5F_1 ; 97 + const TOGGLE_SILPH_CO_5F_2 ; 98 + const TOGGLE_SILPH_CO_5F_3 ; 99 + const TOGGLE_SILPH_CO_5F_4 ; 9A + const TOGGLE_SILPH_CO_5F_ITEM_1 ; 9B X + const TOGGLE_SILPH_CO_5F_ITEM_2 ; 9C X + const TOGGLE_SILPH_CO_5F_ITEM_3 ; 9D X + + toggle_consts_for SILPH_CO_6F + const TOGGLE_SILPH_CO_6F_1 ; 9E + const TOGGLE_SILPH_CO_6F_2 ; 9F + const TOGGLE_SILPH_CO_6F_3 ; A0 + const TOGGLE_SILPH_CO_6F_ITEM_1 ; A1 X + const TOGGLE_SILPH_CO_6F_ITEM_2 ; A2 X + + toggle_consts_for SILPH_CO_7F + const TOGGLE_SILPH_CO_7F_1 ; A3 + const TOGGLE_SILPH_CO_7F_2 ; A4 + const TOGGLE_SILPH_CO_7F_3 ; A5 + const TOGGLE_SILPH_CO_7F_4 ; A6 + const TOGGLE_SILPH_CO_7F_RIVAL ; A7 + const TOGGLE_SILPH_CO_7F_ITEM_1 ; A8 X + const TOGGLE_SILPH_CO_7F_ITEM_2 ; A9 X + const TOGGLE_SILPH_CO_7F_8 ; AA XXX sprite doesn't exist + + toggle_consts_for SILPH_CO_8F + const TOGGLE_SILPH_CO_8F_1 ; AB + const TOGGLE_SILPH_CO_8F_2 ; AC + const TOGGLE_SILPH_CO_8F_3 ; AD + + toggle_consts_for SILPH_CO_9F + const TOGGLE_SILPH_CO_9F_1 ; AE + const TOGGLE_SILPH_CO_9F_2 ; AF + const TOGGLE_SILPH_CO_9F_3 ; B0 + + toggle_consts_for SILPH_CO_10F + const TOGGLE_SILPH_CO_10F_1 ; B1 + const TOGGLE_SILPH_CO_10F_2 ; B2 + const TOGGLE_SILPH_CO_10F_3 ; B3 XXX never (de)activated? + const TOGGLE_SILPH_CO_10F_ITEM_1 ; B4 X + const TOGGLE_SILPH_CO_10F_ITEM_2 ; B5 X + const TOGGLE_SILPH_CO_10F_ITEM_3 ; B6 X + + toggle_consts_for SILPH_CO_11F + const TOGGLE_SILPH_CO_11F_1 ; B7 + const TOGGLE_SILPH_CO_11F_2 ; B8 + const TOGGLE_SILPH_CO_11F_3 ; B9 + + toggle_consts_for UNUSED_MAP_F4 + const TOGGLE_UNUSED_MAP_F4_1 ; BA XXX sprite doesn't exist + + toggle_consts_for POKEMON_MANSION_2F + const TOGGLE_POKEMON_MANSION_2F_ITEM ; BB X + + toggle_consts_for POKEMON_MANSION_3F + const TOGGLE_POKEMON_MANSION_3F_ITEM_1 ; BC X + const TOGGLE_POKEMON_MANSION_3F_ITEM_2 ; BD X + + toggle_consts_for POKEMON_MANSION_B1F + const TOGGLE_POKEMON_MANSION_B1F_ITEM_1 ; BE X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_2 ; BF X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_3 ; C0 X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_4 ; C1 X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_5 ; C2 X + + toggle_consts_for SAFARI_ZONE_EAST + const TOGGLE_SAFARI_ZONE_EAST_ITEM_1 ; C3 X + const TOGGLE_SAFARI_ZONE_EAST_ITEM_2 ; C4 X + const TOGGLE_SAFARI_ZONE_EAST_ITEM_3 ; C5 X + const TOGGLE_SAFARI_ZONE_EAST_ITEM_4 ; C6 X + + toggle_consts_for SAFARI_ZONE_NORTH + const TOGGLE_SAFARI_ZONE_NORTH_ITEM_1 ; C7 X + const TOGGLE_SAFARI_ZONE_NORTH_ITEM_2 ; C8 X + + toggle_consts_for SAFARI_ZONE_WEST + const TOGGLE_SAFARI_ZONE_WEST_ITEM_1 ; C9 X + const TOGGLE_SAFARI_ZONE_WEST_ITEM_2 ; CA X + const TOGGLE_SAFARI_ZONE_WEST_ITEM_3 ; CB X + const TOGGLE_SAFARI_ZONE_WEST_ITEM_4 ; CC X + + toggle_consts_for SAFARI_ZONE_CENTER + const TOGGLE_SAFARI_ZONE_CENTER_ITEM ; CD X + + toggle_consts_for CERULEAN_CAVE_2F + const TOGGLE_CERULEAN_CAVE_2F_ITEM_1 ; CE X + const TOGGLE_CERULEAN_CAVE_2F_ITEM_2 ; CF X + const TOGGLE_CERULEAN_CAVE_2F_ITEM_3 ; D0 X + + toggle_consts_for CERULEAN_CAVE_B1F + const TOGGLE_MEWTWO ; D1 X + const TOGGLE_CERULEAN_CAVE_B1F_ITEM_1 ; D2 X + const TOGGLE_CERULEAN_CAVE_B1F_ITEM_2 ; D3 X + + toggle_consts_for VICTORY_ROAD_1F + const TOGGLE_VICTORY_ROAD_1F_ITEM_1 ; D4 X + const TOGGLE_VICTORY_ROAD_1F_ITEM_2 ; D5 X + + toggle_consts_for CHAMPIONS_ROOM + const TOGGLE_CHAMPIONS_ROOM_OAK ; D6 + + toggle_consts_for SEAFOAM_ISLANDS_1F + const TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_1 ; D7 + const TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_2 ; D8 + + toggle_consts_for SEAFOAM_ISLANDS_B1F + const TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 ; D9 + const TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 ; DA + + toggle_consts_for SEAFOAM_ISLANDS_B2F + const TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 ; DB + const TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 ; DC + + toggle_consts_for SEAFOAM_ISLANDS_B3F + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_1 ; DD + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_2 ; DE + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_3 ; DF + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_4 ; E0 + + toggle_consts_for SEAFOAM_ISLANDS_B4F + const TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_1 ; E1 + const TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_2 ; E2 + const TOGGLE_ARTICUNO ; E3 X + +DEF NUM_TOGGLEABLE_OBJECTS EQU const_value diff --git a/data/maps/hide_show_data.asm b/data/maps/hide_show_data.asm deleted file mode 100644 index bc68c90f..00000000 --- a/data/maps/hide_show_data.asm +++ /dev/null @@ -1,568 +0,0 @@ -; default hidden/shown objects for each map - -MapHSPointers: -; entries correspond to map ids - table_width 2 - dw PalletTownHS - dw ViridianCityHS - dw PewterCityHS - dw CeruleanCityHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SaffronCityHS - dw NoHS - dw NoHS - dw Route2HS - dw NoHS - dw Route4HS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw Route9HS - dw NoHS - dw NoHS - dw Route12HS - dw NoHS - dw NoHS - dw Route15HS - dw Route16HS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw Route22HS - dw NoHS - dw Route24HS - dw Route25HS - dw NoHS - dw NoHS - dw BluesHouseHS - dw OaksLabHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw ViridianGymHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw ViridianForestHS - dw Museum1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw MtMoon1FHS - dw NoHS - dw MtMoonB2FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw PowerPlantHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw BillsHouseHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SSAnne2FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SSAnne1FRoomsHS - dw SSAnne2FRoomsHS - dw SSAnneB1FRoomsHS - dw NoHS - dw NoHS - dw NoHS - dw VictoryRoad1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw ChampionsRoomHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw CeladonMansionRoofHouseHS - dw NoHS - dw NoHS - dw GameCornerHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw PokemonTower2FHS - dw PokemonTower3FHS - dw PokemonTower4FHS - dw PokemonTower5FHS - dw PokemonTower6FHS - dw PokemonTower7FHS - dw MrFujisHouseHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw WardensHouseHS - dw NoHS - dw NoHS - dw NoHS - dw SeafoamIslandsB1FHS - dw SeafoamIslandsB2FHS - dw SeafoamIslandsB3FHS - dw SeafoamIslandsB4FHS - dw NoHS - dw NoHS - dw PokemonMansion1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw FightingDojoHS - dw NoHS - dw NoHS - dw NoHS - dw SilphCo1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SeafoamIslands1FHS - dw NoHS - dw VictoryRoad2FHS - dw NoHS - dw NoHS - dw NoHS - dw VictoryRoad3FHS - dw RocketHideoutB1FHS - dw RocketHideoutB2FHS - dw RocketHideoutB3FHS - dw RocketHideoutB4FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SilphCo2FHS - dw SilphCo3FHS - dw SilphCo4FHS - dw SilphCo5FHS - dw SilphCo6FHS - dw SilphCo7FHS - dw SilphCo8FHS - dw PokemonMansion2FHS - dw PokemonMansion3FHS - dw PokemonMansionB1FHS - dw SafariZoneEastHS - dw SafariZoneNorthHS - dw SafariZoneWestHS - dw SafariZoneCenterHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw CeruleanCave2FHS - dw CeruleanCaveB1FHS - dw CeruleanCaveHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SilphCo9FHS - dw SilphCo10FHS - dw SilphCo11FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw UnusedMapF4HS - dw NoHS - dw NoHS - dw NoHS - assert_table_length NUM_MAPS - dw -1 ; end - -NoHS: - db -1, -1, -1 ; end - -MissableObjects: -; entries correspond to HS_* constants (see constants/hide_show_constants) - table_width 3 -; format: map id, object id, HIDE/SHOW - -PalletTownHS: - db PALLET_TOWN, PALLETTOWN_OAK, HIDE -ViridianCityHS: - db VIRIDIAN_CITY, VIRIDIANCITY_OLD_MAN_SLEEPY, SHOW - db VIRIDIAN_CITY, VIRIDIANCITY_OLD_MAN, HIDE -PewterCityHS: - db PEWTER_CITY, PEWTERCITY_SUPER_NERD1, SHOW - db PEWTER_CITY, PEWTERCITY_YOUNGSTER, SHOW -CeruleanCityHS: - db CERULEAN_CITY, CERULEANCITY_RIVAL, HIDE - db CERULEAN_CITY, CERULEANCITY_ROCKET, SHOW - db CERULEAN_CITY, CERULEANCITY_GUARD1, HIDE - db CERULEAN_CITY, CERULEANCITY_SUPER_NERD3, SHOW - db CERULEAN_CITY, CERULEANCITY_GUARD2, SHOW -SaffronCityHS: - db SAFFRON_CITY, SAFFRONCITY_ROCKET1, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET2, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET3, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET4, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET5, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET6, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET7, SHOW - db SAFFRON_CITY, SAFFRONCITY_SCIENTIST, HIDE - db SAFFRON_CITY, SAFFRONCITY_SILPH_WORKER_M, HIDE - db SAFFRON_CITY, SAFFRONCITY_SILPH_WORKER_F, HIDE - db SAFFRON_CITY, SAFFRONCITY_GENTLEMAN, HIDE - db SAFFRON_CITY, SAFFRONCITY_PIDGEOT, HIDE - db SAFFRON_CITY, SAFFRONCITY_ROCKER, HIDE - db SAFFRON_CITY, SAFFRONCITY_ROCKET8, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET9, HIDE -Route2HS: - db ROUTE_2, ROUTE2_MOON_STONE, SHOW - db ROUTE_2, ROUTE2_HP_UP, SHOW -Route4HS: - db ROUTE_4, ROUTE4_TM_WHIRLWIND, SHOW -Route9HS: - db ROUTE_9, ROUTE9_TM_TELEPORT, SHOW -Route12HS: - db ROUTE_12, ROUTE12_SNORLAX, SHOW - db ROUTE_12, ROUTE12_TM_PAY_DAY, SHOW - db ROUTE_12, ROUTE12_IRON, SHOW -Route15HS: - db ROUTE_15, ROUTE15_TM_RAGE, SHOW -Route16HS: - db ROUTE_16, ROUTE16_SNORLAX, SHOW -Route22HS: - db ROUTE_22, ROUTE22_RIVAL1, HIDE - db ROUTE_22, ROUTE22_RIVAL2, HIDE -Route24HS: - db ROUTE_24, ROUTE24_COOLTRAINER_M1, SHOW - db ROUTE_24, ROUTE24_TM_THUNDER_WAVE, SHOW -Route25HS: - db ROUTE_25, ROUTE25_TM_SEISMIC_TOSS, SHOW -BluesHouseHS: - db BLUES_HOUSE, BLUESHOUSE_DAISY1, SHOW - db BLUES_HOUSE, BLUESHOUSE_DAISY2, HIDE - db BLUES_HOUSE, BLUESHOUSE_TOWN_MAP, SHOW -OaksLabHS: - db OAKS_LAB, OAKSLAB_RIVAL, SHOW - db OAKS_LAB, OAKSLAB_CHARMANDER_POKE_BALL, SHOW - db OAKS_LAB, OAKSLAB_SQUIRTLE_POKE_BALL, SHOW - db OAKS_LAB, OAKSLAB_BULBASAUR_POKE_BALL, SHOW - db OAKS_LAB, OAKSLAB_OAK1, HIDE - db OAKS_LAB, OAKSLAB_POKEDEX1, SHOW - db OAKS_LAB, OAKSLAB_POKEDEX2, SHOW - db OAKS_LAB, OAKSLAB_OAK2, HIDE -ViridianGymHS: - db VIRIDIAN_GYM, VIRIDIANGYM_GIOVANNI, SHOW - db VIRIDIAN_GYM, VIRIDIANGYM_REVIVE, SHOW -Museum1FHS: - db MUSEUM_1F, MUSEUM1F_OLD_AMBER, SHOW -CeruleanCaveHS: - db CERULEAN_CAVE_1F, CERULEANCAVE1F_FULL_RESTORE, SHOW - db CERULEAN_CAVE_1F, CERULEANCAVE1F_MAX_ELIXER, SHOW - db CERULEAN_CAVE_1F, CERULEANCAVE1F_NUGGET, SHOW -PokemonTower2FHS: - db POKEMON_TOWER_2F, POKEMONTOWER2F_RIVAL, SHOW -PokemonTower3FHS: - db POKEMON_TOWER_3F, POKEMONTOWER3F_ESCAPE_ROPE, SHOW -PokemonTower4FHS: - db POKEMON_TOWER_4F, POKEMONTOWER4F_ELIXER, SHOW - db POKEMON_TOWER_4F, POKEMONTOWER4F_AWAKENING, SHOW - db POKEMON_TOWER_4F, POKEMONTOWER4F_HP_UP, SHOW -PokemonTower5FHS: - db POKEMON_TOWER_5F, POKEMONTOWER5F_NUGGET, SHOW -PokemonTower6FHS: - db POKEMON_TOWER_6F, POKEMONTOWER6F_RARE_CANDY, SHOW - db POKEMON_TOWER_6F, POKEMONTOWER6F_X_ACCURACY, SHOW -PokemonTower7FHS: - db POKEMON_TOWER_7F, POKEMONTOWER7F_ROCKET1, SHOW - db POKEMON_TOWER_7F, POKEMONTOWER7F_ROCKET2, SHOW - db POKEMON_TOWER_7F, POKEMONTOWER7F_ROCKET3, SHOW - db POKEMON_TOWER_7F, POKEMONTOWER7F_MR_FUJI, SHOW -MrFujisHouseHS: - db MR_FUJIS_HOUSE, MRFUJISHOUSE_MR_FUJI, HIDE -CeladonMansionRoofHouseHS: - db CELADON_MANSION_ROOF_HOUSE, CELADONMANSION_ROOF_HOUSE_EEVEE_POKEBALL, SHOW -GameCornerHS: - db GAME_CORNER, GAMECORNER_ROCKET, SHOW -WardensHouseHS: - db WARDENS_HOUSE, WARDENSHOUSE_RARE_CANDY, SHOW -PokemonMansion1FHS: - db POKEMON_MANSION_1F, POKEMONMANSION1F_ESCAPE_ROPE, SHOW - db POKEMON_MANSION_1F, POKEMONMANSION1F_CARBOS, SHOW -FightingDojoHS: - db FIGHTING_DOJO, FIGHTINGDOJO_HITMONLEE_POKE_BALL, SHOW - db FIGHTING_DOJO, FIGHTINGDOJO_HITMONCHAN_POKE_BALL, SHOW -SilphCo1FHS: - db SILPH_CO_1F, SILPHCO1F_LINK_RECEPTIONIST, HIDE -PowerPlantHS: - db POWER_PLANT, POWERPLANT_VOLTORB1, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB2, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB3, SHOW - db POWER_PLANT, POWERPLANT_ELECTRODE1, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB4, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB5, SHOW - db POWER_PLANT, POWERPLANT_ELECTRODE2, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB6, SHOW - db POWER_PLANT, POWERPLANT_ZAPDOS, SHOW - db POWER_PLANT, POWERPLANT_CARBOS, SHOW - db POWER_PLANT, POWERPLANT_HP_UP, SHOW - db POWER_PLANT, POWERPLANT_RARE_CANDY, SHOW - db POWER_PLANT, POWERPLANT_TM_THUNDER, SHOW - db POWER_PLANT, POWERPLANT_TM_REFLECT, SHOW -VictoryRoad2FHS: - db VICTORY_ROAD_2F, VICTORYROAD2F_MOLTRES, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_TM_SUBMISSION, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_FULL_HEAL, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_TM_MEGA_KICK, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_GUARD_SPEC, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_BOULDER3, SHOW -BillsHouseHS: - db BILLS_HOUSE, BILLSHOUSE_BILL_POKEMON, SHOW - db BILLS_HOUSE, BILLSHOUSE_BILL1, HIDE - db BILLS_HOUSE, BILLSHOUSE_BILL2, HIDE -ViridianForestHS: - db VIRIDIAN_FOREST, VIRIDIANFOREST_ANTIDOTE, SHOW - db VIRIDIAN_FOREST, VIRIDIANFOREST_POTION, SHOW - db VIRIDIAN_FOREST, VIRIDIANFOREST_POKE_BALL, SHOW -MtMoon1FHS: - db MT_MOON_1F, MTMOON1F_POTION1, SHOW - db MT_MOON_1F, MTMOON1F_MOON_STONE, SHOW - db MT_MOON_1F, MTMOON1F_RARE_CANDY, SHOW - db MT_MOON_1F, MTMOON1F_ESCAPE_ROPE, SHOW - db MT_MOON_1F, MTMOON1F_POTION2, SHOW - db MT_MOON_1F, MTMOON1F_TM_WATER_GUN, SHOW -MtMoonB2FHS: - db MT_MOON_B2F, MTMOONB2F_DOME_FOSSIL, SHOW - db MT_MOON_B2F, MTMOONB2F_HELIX_FOSSIL, SHOW - db MT_MOON_B2F, MTMOONB2F_HP_UP, SHOW - db MT_MOON_B2F, MTMOONB2F_TM_MEGA_PUNCH, SHOW -SSAnne2FHS: - db SS_ANNE_2F, SSANNE2F_RIVAL, HIDE -SSAnne1FRoomsHS: - db SS_ANNE_1F_ROOMS, SSANNE1FROOMS_TM_BODY_SLAM, SHOW -SSAnne2FRoomsHS: - db SS_ANNE_2F_ROOMS, SSANNE2FROOMS_MAX_ETHER, SHOW - db SS_ANNE_2F_ROOMS, SSANNE2FROOMS_RARE_CANDY, SHOW -SSAnneB1FRoomsHS: - db SS_ANNE_B1F_ROOMS, SSANNEB1FROOMS_ETHER, SHOW - db SS_ANNE_B1F_ROOMS, SSANNEB1FROOMS_TM_REST, SHOW - db SS_ANNE_B1F_ROOMS, SSANNEB1FROOMS_MAX_POTION, SHOW -VictoryRoad3FHS: - db VICTORY_ROAD_3F, VICTORYROAD3F_MAX_REVIVE, SHOW - db VICTORY_ROAD_3F, VICTORYROAD3F_TM_EXPLOSION, SHOW - db VICTORY_ROAD_3F, VICTORYROAD3F_BOULDER4, SHOW -RocketHideoutB1FHS: - db ROCKET_HIDEOUT_B1F, ROCKETHIDEOUTB1F_ESCAPE_ROPE, SHOW - db ROCKET_HIDEOUT_B1F, ROCKETHIDEOUTB1F_HYPER_POTION, SHOW -RocketHideoutB2FHS: - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_MOON_STONE, SHOW - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_NUGGET, SHOW - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_TM_HORN_DRILL, SHOW - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_SUPER_POTION, SHOW -RocketHideoutB3FHS: - db ROCKET_HIDEOUT_B3F, ROCKETHIDEOUTB3F_TM_DOUBLE_EDGE, SHOW - db ROCKET_HIDEOUT_B3F, ROCKETHIDEOUTB3F_RARE_CANDY, SHOW -RocketHideoutB4FHS: - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_GIOVANNI, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_HP_UP, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_TM_RAZOR_WIND, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_IRON, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_SILPH_SCOPE, HIDE - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_LIFT_KEY, HIDE -SilphCo2FHS: - db SILPH_CO_2F, SILPHCO2F_SILPH_WORKER_F, SHOW - db SILPH_CO_2F, SILPHCO2F_SCIENTIST1, SHOW - db SILPH_CO_2F, SILPHCO2F_SCIENTIST2, SHOW - db SILPH_CO_2F, SILPHCO2F_ROCKET1, SHOW - db SILPH_CO_2F, SILPHCO2F_ROCKET2, SHOW -SilphCo3FHS: - db SILPH_CO_3F, SILPHCO3F_ROCKET, SHOW - db SILPH_CO_3F, SILPHCO3F_SCIENTIST, SHOW - db SILPH_CO_3F, SILPHCO3F_HYPER_POTION, SHOW -SilphCo4FHS: - db SILPH_CO_4F, SILPHCO4F_ROCKET1, SHOW - db SILPH_CO_4F, SILPHCO4F_SCIENTIST, SHOW - db SILPH_CO_4F, SILPHCO4F_ROCKET2, SHOW - db SILPH_CO_4F, SILPHCO4F_FULL_HEAL, SHOW - db SILPH_CO_4F, SILPHCO4F_MAX_REVIVE, SHOW - db SILPH_CO_4F, SILPHCO4F_ESCAPE_ROPE, SHOW -SilphCo5FHS: - db SILPH_CO_5F, SILPHCO5F_ROCKET1, SHOW - db SILPH_CO_5F, SILPHCO5F_SCIENTIST, SHOW - db SILPH_CO_5F, SILPHCO5F_ROCKER, SHOW - db SILPH_CO_5F, SILPHCO5F_ROCKET2, SHOW - db SILPH_CO_5F, SILPHCO5F_TM_TAKE_DOWN, SHOW - db SILPH_CO_5F, SILPHCO5F_PROTEIN, SHOW - db SILPH_CO_5F, SILPHCO5F_CARD_KEY, SHOW -SilphCo6FHS: - db SILPH_CO_6F, SILPHCO6F_ROCKET1, SHOW - db SILPH_CO_6F, SILPHCO6F_SCIENTIST, SHOW - db SILPH_CO_6F, SILPHCO6F_ROCKET2, SHOW - db SILPH_CO_6F, SILPHCO6F_HP_UP, SHOW - db SILPH_CO_6F, SILPHCO6F_X_ACCURACY, SHOW -SilphCo7FHS: - db SILPH_CO_7F, SILPHCO7F_ROCKET1, SHOW - db SILPH_CO_7F, SILPHCO7F_SCIENTIST, SHOW - db SILPH_CO_7F, SILPHCO7F_ROCKET2, SHOW - db SILPH_CO_7F, SILPHCO7F_ROCKET3, SHOW - db SILPH_CO_7F, SILPHCO7F_RIVAL, SHOW - db SILPH_CO_7F, SILPHCO7F_CALCIUM, SHOW - db SILPH_CO_7F, SILPHCO7F_TM_SWORDS_DANCE, SHOW - db SILPH_CO_7F, SILPHCO7F_UNUSED, SHOW -SilphCo8FHS: - db SILPH_CO_8F, SILPHCO8F_ROCKET1, SHOW - db SILPH_CO_8F, SILPHCO8F_SCIENTIST, SHOW - db SILPH_CO_8F, SILPHCO8F_ROCKET2, SHOW -SilphCo9FHS: - db SILPH_CO_9F, SILPHCO9F_ROCKET1, SHOW - db SILPH_CO_9F, SILPHCO9F_SCIENTIST, SHOW - db SILPH_CO_9F, SILPHCO9F_ROCKET2, SHOW -SilphCo10FHS: - db SILPH_CO_10F, SILPHCO10F_ROCKET, SHOW - db SILPH_CO_10F, SILPHCO10F_SCIENTIST, SHOW - db SILPH_CO_10F, SILPHCO10F_SILPH_WORKER_F, SHOW - db SILPH_CO_10F, SILPHCO10F_TM_EARTHQUAKE, SHOW - db SILPH_CO_10F, SILPHCO10F_RARE_CANDY, SHOW - db SILPH_CO_10F, SILPHCO10F_CARBOS, SHOW -SilphCo11FHS: - db SILPH_CO_11F, SILPHCO11F_GIOVANNI, SHOW - db SILPH_CO_11F, SILPHCO11F_ROCKET1, SHOW - db SILPH_CO_11F, SILPHCO11F_ROCKET2, SHOW -UnusedMapF4HS: - db UNUSED_MAP_F4, $02, SHOW ; unused -PokemonMansion2FHS: - db POKEMON_MANSION_2F, POKEMONMANSION2F_CALCIUM, SHOW -PokemonMansion3FHS: - db POKEMON_MANSION_3F, POKEMONMANSION3F_MAX_POTION, SHOW - db POKEMON_MANSION_3F, POKEMONMANSION3F_IRON, SHOW -PokemonMansionB1FHS: - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_RARE_CANDY, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_FULL_RESTORE, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_TM_BLIZZARD, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_TM_SOLARBEAM, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_SECRET_KEY, SHOW -SafariZoneEastHS: - db SAFARI_ZONE_EAST, SAFARIZONEEAST_FULL_RESTORE, SHOW - db SAFARI_ZONE_EAST, SAFARIZONEEAST_MAX_RESTORE, SHOW - db SAFARI_ZONE_EAST, SAFARIZONEEAST_CARBOS, SHOW - db SAFARI_ZONE_EAST, SAFARIZONEEAST_TM_EGG_BOMB, SHOW -SafariZoneNorthHS: - db SAFARI_ZONE_NORTH, SAFARIZONENORTH_PROTEIN, SHOW - db SAFARI_ZONE_NORTH, SAFARIZONENORTH_TM_SKULL_BASH, SHOW -SafariZoneWestHS: - db SAFARI_ZONE_WEST, SAFARIZONEWEST_MAX_POTION, SHOW - db SAFARI_ZONE_WEST, SAFARIZONEWEST_TM_DOUBLE_TEAM, SHOW - db SAFARI_ZONE_WEST, SAFARIZONEWEST_MAX_REVIVE, SHOW - db SAFARI_ZONE_WEST, SAFARIZONEWEST_GOLD_TEETH, SHOW -SafariZoneCenterHS: - db SAFARI_ZONE_CENTER, SAFARIZONECENTER_NUGGET, SHOW -CeruleanCave2FHS: - db CERULEAN_CAVE_2F, CERULEANCAVE2F_PP_UP, SHOW - db CERULEAN_CAVE_2F, CERULEANCAVE2F_ULTRA_BALL, SHOW - db CERULEAN_CAVE_2F, CERULEANCAVE2F_FULL_RESTORE, SHOW -CeruleanCaveB1FHS: - db CERULEAN_CAVE_B1F, CERULEANCAVEB1F_MEWTWO, SHOW - db CERULEAN_CAVE_B1F, CERULEANCAVEB1F_ULTRA_BALL, SHOW - db CERULEAN_CAVE_B1F, CERULEANCAVEB1F_MAX_REVIVE, SHOW -VictoryRoad1FHS: - db VICTORY_ROAD_1F, VICTORYROAD1F_TM_SKY_ATTACK, SHOW - db VICTORY_ROAD_1F, VICTORYROAD1F_RARE_CANDY, SHOW -ChampionsRoomHS: - db CHAMPIONS_ROOM, CHAMPIONSROOM_OAK, HIDE -SeafoamIslands1FHS: - db SEAFOAM_ISLANDS_1F, SEAFOAMISLANDS1F_BOULDER1, SHOW - db SEAFOAM_ISLANDS_1F, SEAFOAMISLANDS1F_BOULDER2, SHOW -SeafoamIslandsB1FHS: - db SEAFOAM_ISLANDS_B1F, SEAFOAMISLANDSB1F_BOULDER1, HIDE - db SEAFOAM_ISLANDS_B1F, SEAFOAMISLANDSB1F_BOULDER2, HIDE -SeafoamIslandsB2FHS: - db SEAFOAM_ISLANDS_B2F, SEAFOAMISLANDSB2F_BOULDER1, HIDE - db SEAFOAM_ISLANDS_B2F, SEAFOAMISLANDSB2F_BOULDER2, HIDE -SeafoamIslandsB3FHS: - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER2, SHOW - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER3, SHOW - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER5, HIDE - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER6, HIDE -SeafoamIslandsB4FHS: - db SEAFOAM_ISLANDS_B4F, SEAFOAMISLANDSB4F_BOULDER1, HIDE - db SEAFOAM_ISLANDS_B4F, SEAFOAMISLANDSB4F_BOULDER2, HIDE - db SEAFOAM_ISLANDS_B4F, SEAFOAMISLANDSB4F_ARTICUNO, SHOW - assert_table_length NUM_HS_OBJECTS - db -1, 1, SHOW ; end diff --git a/data/maps/objects/SilphCo7F.asm b/data/maps/objects/SilphCo7F.asm index 6f2ca90d..0dbe2c7f 100644 --- a/data/maps/objects/SilphCo7F.asm +++ b/data/maps/objects/SilphCo7F.asm @@ -10,7 +10,7 @@ const_export SILPHCO7F_RIVAL const_export SILPHCO7F_CALCIUM const_export SILPHCO7F_TM_SWORDS_DANCE - const_export SILPHCO7F_UNUSED ; referenced in data/maps/hide_show_data.asm, no corresponding object_event + const_export SILPHCO7F_UNUSED ; referenced in data/maps/toggleable_objects.asm, no corresponding object_event SilphCo7F_Object: db $2e ; border block diff --git a/data/maps/toggleable_objects.asm b/data/maps/toggleable_objects.asm new file mode 100644 index 00000000..d94002d9 --- /dev/null +++ b/data/maps/toggleable_objects.asm @@ -0,0 +1,423 @@ +; toggleable objects for each map + +ToggleableObjectMapPointers: +; entries correspond to map ids + table_width 2 +FOR n, NUM_MAPS + IF DEF(TOGGLEMAP{n}) ; defined by `toggle_consts_for` + dw ToggleData{n} + ELSE + dw NoToggleData + ENDC +ENDR + assert_table_length NUM_MAPS + dw -1 ; end + +NoToggleData: + db -1, -1, -1 ; end + +DEF toggles_ok = 1 + +MACRO? toggleable_objects_for + DEF toggle_map_id = \1 ; map id + ToggleData{toggle_map_id}: + IF toggles_ok + ASSERT DEF(TOGGLEMAP{toggle_map_id}), \ + "`toggleable_objects_for \1` is not defined" + DEF toggles_ok &= DEF(TOGGLEMAP{toggle_map_id}) + IF toggles_ok + assert_table_length TOGGLEMAP{toggle_map_id} + DEF toggles_ok &= TOGGLEMAP{toggle_map_id} * 3 == @ - ToggleableObjectStates + ENDC + ENDC +ENDM + +MACRO toggle_object_state + db toggle_map_id ; from previous `toggleable_objects_for` + db \1 ; object id + db \2 ; OFF/ON +ENDM + +ToggleableObjectStates: +; entries correspond to TOGGLE_* constants (see constants/toggle_constants.asm) + table_width 3 + + toggleable_objects_for PALLET_TOWN + toggle_object_state PALLETTOWN_OAK, OFF + + toggleable_objects_for VIRIDIAN_CITY + toggle_object_state VIRIDIANCITY_OLD_MAN_SLEEPY, ON + toggle_object_state VIRIDIANCITY_OLD_MAN, OFF + + toggleable_objects_for PEWTER_CITY + toggle_object_state PEWTERCITY_SUPER_NERD1, ON + toggle_object_state PEWTERCITY_YOUNGSTER, ON + + toggleable_objects_for CERULEAN_CITY + toggle_object_state CERULEANCITY_RIVAL, OFF + toggle_object_state CERULEANCITY_ROCKET, ON + toggle_object_state CERULEANCITY_GUARD1, OFF + toggle_object_state CERULEANCITY_SUPER_NERD3, ON + toggle_object_state CERULEANCITY_GUARD2, ON + + toggleable_objects_for SAFFRON_CITY + toggle_object_state SAFFRONCITY_ROCKET1, ON + toggle_object_state SAFFRONCITY_ROCKET2, ON + toggle_object_state SAFFRONCITY_ROCKET3, ON + toggle_object_state SAFFRONCITY_ROCKET4, ON + toggle_object_state SAFFRONCITY_ROCKET5, ON + toggle_object_state SAFFRONCITY_ROCKET6, ON + toggle_object_state SAFFRONCITY_ROCKET7, ON + toggle_object_state SAFFRONCITY_SCIENTIST, OFF + toggle_object_state SAFFRONCITY_SILPH_WORKER_M, OFF + toggle_object_state SAFFRONCITY_SILPH_WORKER_F, OFF + toggle_object_state SAFFRONCITY_GENTLEMAN, OFF + toggle_object_state SAFFRONCITY_PIDGEOT, OFF + toggle_object_state SAFFRONCITY_ROCKER, OFF + toggle_object_state SAFFRONCITY_ROCKET8, ON + toggle_object_state SAFFRONCITY_ROCKET9, OFF + + toggleable_objects_for ROUTE_2 + toggle_object_state ROUTE2_MOON_STONE, ON + toggle_object_state ROUTE2_HP_UP, ON + + toggleable_objects_for ROUTE_4 + toggle_object_state ROUTE4_TM_WHIRLWIND, ON + + toggleable_objects_for ROUTE_9 + toggle_object_state ROUTE9_TM_TELEPORT, ON + + toggleable_objects_for ROUTE_12 + toggle_object_state ROUTE12_SNORLAX, ON + toggle_object_state ROUTE12_TM_PAY_DAY, ON + toggle_object_state ROUTE12_IRON, ON + + toggleable_objects_for ROUTE_15 + toggle_object_state ROUTE15_TM_RAGE, ON + + toggleable_objects_for ROUTE_16 + toggle_object_state ROUTE16_SNORLAX, ON + + toggleable_objects_for ROUTE_22 + toggle_object_state ROUTE22_RIVAL1, OFF + toggle_object_state ROUTE22_RIVAL2, OFF + + toggleable_objects_for ROUTE_24 + toggle_object_state ROUTE24_COOLTRAINER_M1, ON + toggle_object_state ROUTE24_TM_THUNDER_WAVE, ON + + toggleable_objects_for ROUTE_25 + toggle_object_state ROUTE25_TM_SEISMIC_TOSS, ON + + toggleable_objects_for BLUES_HOUSE + toggle_object_state BLUESHOUSE_DAISY1, ON + toggle_object_state BLUESHOUSE_DAISY2, OFF + toggle_object_state BLUESHOUSE_TOWN_MAP, ON + + toggleable_objects_for OAKS_LAB + toggle_object_state OAKSLAB_RIVAL, ON + toggle_object_state OAKSLAB_CHARMANDER_POKE_BALL, ON + toggle_object_state OAKSLAB_SQUIRTLE_POKE_BALL, ON + toggle_object_state OAKSLAB_BULBASAUR_POKE_BALL, ON + toggle_object_state OAKSLAB_OAK1, OFF + toggle_object_state OAKSLAB_POKEDEX1, ON + toggle_object_state OAKSLAB_POKEDEX2, ON + toggle_object_state OAKSLAB_OAK2, OFF + + toggleable_objects_for VIRIDIAN_GYM + toggle_object_state VIRIDIANGYM_GIOVANNI, ON + toggle_object_state VIRIDIANGYM_REVIVE, ON + + toggleable_objects_for MUSEUM_1F + toggle_object_state MUSEUM1F_OLD_AMBER, ON + + toggleable_objects_for CERULEAN_CAVE_1F + toggle_object_state CERULEANCAVE1F_FULL_RESTORE, ON + toggle_object_state CERULEANCAVE1F_MAX_ELIXER, ON + toggle_object_state CERULEANCAVE1F_NUGGET, ON + + toggleable_objects_for POKEMON_TOWER_2F + toggle_object_state POKEMONTOWER2F_RIVAL, ON + + toggleable_objects_for POKEMON_TOWER_3F + toggle_object_state POKEMONTOWER3F_ESCAPE_ROPE, ON + + toggleable_objects_for POKEMON_TOWER_4F + toggle_object_state POKEMONTOWER4F_ELIXER, ON + toggle_object_state POKEMONTOWER4F_AWAKENING, ON + toggle_object_state POKEMONTOWER4F_HP_UP, ON + + toggleable_objects_for POKEMON_TOWER_5F + toggle_object_state POKEMONTOWER5F_NUGGET, ON + + toggleable_objects_for POKEMON_TOWER_6F + toggle_object_state POKEMONTOWER6F_RARE_CANDY, ON + toggle_object_state POKEMONTOWER6F_X_ACCURACY, ON + + toggleable_objects_for POKEMON_TOWER_7F + toggle_object_state POKEMONTOWER7F_ROCKET1, ON + toggle_object_state POKEMONTOWER7F_ROCKET2, ON + toggle_object_state POKEMONTOWER7F_ROCKET3, ON + toggle_object_state POKEMONTOWER7F_MR_FUJI, ON + + toggleable_objects_for MR_FUJIS_HOUSE + toggle_object_state MRFUJISHOUSE_MR_FUJI, OFF + + toggleable_objects_for CELADON_MANSION_ROOF_HOUSE + toggle_object_state CELADONMANSION_ROOF_HOUSE_EEVEE_POKEBALL, ON + + toggleable_objects_for GAME_CORNER + toggle_object_state GAMECORNER_ROCKET, ON + + toggleable_objects_for WARDENS_HOUSE + toggle_object_state WARDENSHOUSE_RARE_CANDY, ON + + toggleable_objects_for POKEMON_MANSION_1F + toggle_object_state POKEMONMANSION1F_ESCAPE_ROPE, ON + toggle_object_state POKEMONMANSION1F_CARBOS, ON + + toggleable_objects_for FIGHTING_DOJO + toggle_object_state FIGHTINGDOJO_HITMONLEE_POKE_BALL, ON + toggle_object_state FIGHTINGDOJO_HITMONCHAN_POKE_BALL, ON + + toggleable_objects_for SILPH_CO_1F + toggle_object_state SILPHCO1F_LINK_RECEPTIONIST, OFF + + toggleable_objects_for POWER_PLANT + toggle_object_state POWERPLANT_VOLTORB1, ON + toggle_object_state POWERPLANT_VOLTORB2, ON + toggle_object_state POWERPLANT_VOLTORB3, ON + toggle_object_state POWERPLANT_ELECTRODE1, ON + toggle_object_state POWERPLANT_VOLTORB4, ON + toggle_object_state POWERPLANT_VOLTORB5, ON + toggle_object_state POWERPLANT_ELECTRODE2, ON + toggle_object_state POWERPLANT_VOLTORB6, ON + toggle_object_state POWERPLANT_ZAPDOS, ON + toggle_object_state POWERPLANT_CARBOS, ON + toggle_object_state POWERPLANT_HP_UP, ON + toggle_object_state POWERPLANT_RARE_CANDY, ON + toggle_object_state POWERPLANT_TM_THUNDER, ON + toggle_object_state POWERPLANT_TM_REFLECT, ON + + toggleable_objects_for VICTORY_ROAD_2F + toggle_object_state VICTORYROAD2F_MOLTRES, ON + toggle_object_state VICTORYROAD2F_TM_SUBMISSION, ON + toggle_object_state VICTORYROAD2F_FULL_HEAL, ON + toggle_object_state VICTORYROAD2F_TM_MEGA_KICK, ON + toggle_object_state VICTORYROAD2F_GUARD_SPEC, ON + toggle_object_state VICTORYROAD2F_BOULDER3, ON + + toggleable_objects_for BILLS_HOUSE + toggle_object_state BILLSHOUSE_BILL_POKEMON, ON + toggle_object_state BILLSHOUSE_BILL1, OFF + toggle_object_state BILLSHOUSE_BILL2, OFF + + toggleable_objects_for VIRIDIAN_FOREST + toggle_object_state VIRIDIANFOREST_ANTIDOTE, ON + toggle_object_state VIRIDIANFOREST_POTION, ON + toggle_object_state VIRIDIANFOREST_POKE_BALL, ON + + toggleable_objects_for MT_MOON_1F + toggle_object_state MTMOON1F_POTION1, ON + toggle_object_state MTMOON1F_MOON_STONE, ON + toggle_object_state MTMOON1F_RARE_CANDY, ON + toggle_object_state MTMOON1F_ESCAPE_ROPE, ON + toggle_object_state MTMOON1F_POTION2, ON + toggle_object_state MTMOON1F_TM_WATER_GUN, ON + + toggleable_objects_for MT_MOON_B2F + toggle_object_state MTMOONB2F_DOME_FOSSIL, ON + toggle_object_state MTMOONB2F_HELIX_FOSSIL, ON + toggle_object_state MTMOONB2F_HP_UP, ON + toggle_object_state MTMOONB2F_TM_MEGA_PUNCH, ON + + toggleable_objects_for SS_ANNE_2F + toggle_object_state SSANNE2F_RIVAL, OFF + + toggleable_objects_for SS_ANNE_1F_ROOMS + toggle_object_state SSANNE1FROOMS_TM_BODY_SLAM, ON + + toggleable_objects_for SS_ANNE_2F_ROOMS + toggle_object_state SSANNE2FROOMS_MAX_ETHER, ON + toggle_object_state SSANNE2FROOMS_RARE_CANDY, ON + + toggleable_objects_for SS_ANNE_B1F_ROOMS + toggle_object_state SSANNEB1FROOMS_ETHER, ON + toggle_object_state SSANNEB1FROOMS_TM_REST, ON + toggle_object_state SSANNEB1FROOMS_MAX_POTION, ON + + toggleable_objects_for VICTORY_ROAD_3F + toggle_object_state VICTORYROAD3F_MAX_REVIVE, ON + toggle_object_state VICTORYROAD3F_TM_EXPLOSION, ON + toggle_object_state VICTORYROAD3F_BOULDER4, ON + + toggleable_objects_for ROCKET_HIDEOUT_B1F + toggle_object_state ROCKETHIDEOUTB1F_ESCAPE_ROPE, ON + toggle_object_state ROCKETHIDEOUTB1F_HYPER_POTION, ON + + toggleable_objects_for ROCKET_HIDEOUT_B2F + toggle_object_state ROCKETHIDEOUTB2F_MOON_STONE, ON + toggle_object_state ROCKETHIDEOUTB2F_NUGGET, ON + toggle_object_state ROCKETHIDEOUTB2F_TM_HORN_DRILL, ON + toggle_object_state ROCKETHIDEOUTB2F_SUPER_POTION, ON + + toggleable_objects_for ROCKET_HIDEOUT_B3F + toggle_object_state ROCKETHIDEOUTB3F_TM_DOUBLE_EDGE, ON + toggle_object_state ROCKETHIDEOUTB3F_RARE_CANDY, ON + + toggleable_objects_for ROCKET_HIDEOUT_B4F + toggle_object_state ROCKETHIDEOUTB4F_GIOVANNI, ON + toggle_object_state ROCKETHIDEOUTB4F_HP_UP, ON + toggle_object_state ROCKETHIDEOUTB4F_TM_RAZOR_WIND, ON + toggle_object_state ROCKETHIDEOUTB4F_IRON, ON + toggle_object_state ROCKETHIDEOUTB4F_SILPH_SCOPE, OFF + toggle_object_state ROCKETHIDEOUTB4F_LIFT_KEY, OFF + + toggleable_objects_for SILPH_CO_2F + toggle_object_state SILPHCO2F_SILPH_WORKER_F, ON + toggle_object_state SILPHCO2F_SCIENTIST1, ON + toggle_object_state SILPHCO2F_SCIENTIST2, ON + toggle_object_state SILPHCO2F_ROCKET1, ON + toggle_object_state SILPHCO2F_ROCKET2, ON + + toggleable_objects_for SILPH_CO_3F + toggle_object_state SILPHCO3F_ROCKET, ON + toggle_object_state SILPHCO3F_SCIENTIST, ON + toggle_object_state SILPHCO3F_HYPER_POTION, ON + + toggleable_objects_for SILPH_CO_4F + toggle_object_state SILPHCO4F_ROCKET1, ON + toggle_object_state SILPHCO4F_SCIENTIST, ON + toggle_object_state SILPHCO4F_ROCKET2, ON + toggle_object_state SILPHCO4F_FULL_HEAL, ON + toggle_object_state SILPHCO4F_MAX_REVIVE, ON + toggle_object_state SILPHCO4F_ESCAPE_ROPE, ON + + toggleable_objects_for SILPH_CO_5F + toggle_object_state SILPHCO5F_ROCKET1, ON + toggle_object_state SILPHCO5F_SCIENTIST, ON + toggle_object_state SILPHCO5F_ROCKER, ON + toggle_object_state SILPHCO5F_ROCKET2, ON + toggle_object_state SILPHCO5F_TM_TAKE_DOWN, ON + toggle_object_state SILPHCO5F_PROTEIN, ON + toggle_object_state SILPHCO5F_CARD_KEY, ON + + toggleable_objects_for SILPH_CO_6F + toggle_object_state SILPHCO6F_ROCKET1, ON + toggle_object_state SILPHCO6F_SCIENTIST, ON + toggle_object_state SILPHCO6F_ROCKET2, ON + toggle_object_state SILPHCO6F_HP_UP, ON + toggle_object_state SILPHCO6F_X_ACCURACY, ON + + toggleable_objects_for SILPH_CO_7F + toggle_object_state SILPHCO7F_ROCKET1, ON + toggle_object_state SILPHCO7F_SCIENTIST, ON + toggle_object_state SILPHCO7F_ROCKET2, ON + toggle_object_state SILPHCO7F_ROCKET3, ON + toggle_object_state SILPHCO7F_RIVAL, ON + toggle_object_state SILPHCO7F_CALCIUM, ON + toggle_object_state SILPHCO7F_TM_SWORDS_DANCE, ON + toggle_object_state SILPHCO7F_UNUSED, ON + + toggleable_objects_for SILPH_CO_8F + toggle_object_state SILPHCO8F_ROCKET1, ON + toggle_object_state SILPHCO8F_SCIENTIST, ON + toggle_object_state SILPHCO8F_ROCKET2, ON + + toggleable_objects_for SILPH_CO_9F + toggle_object_state SILPHCO9F_ROCKET1, ON + toggle_object_state SILPHCO9F_SCIENTIST, ON + toggle_object_state SILPHCO9F_ROCKET2, ON + + toggleable_objects_for SILPH_CO_10F + toggle_object_state SILPHCO10F_ROCKET, ON + toggle_object_state SILPHCO10F_SCIENTIST, ON + toggle_object_state SILPHCO10F_SILPH_WORKER_F, ON + toggle_object_state SILPHCO10F_TM_EARTHQUAKE, ON + toggle_object_state SILPHCO10F_RARE_CANDY, ON + toggle_object_state SILPHCO10F_CARBOS, ON + + toggleable_objects_for SILPH_CO_11F + toggle_object_state SILPHCO11F_GIOVANNI, ON + toggle_object_state SILPHCO11F_ROCKET1, ON + toggle_object_state SILPHCO11F_ROCKET2, ON + + toggleable_objects_for UNUSED_MAP_F4 + toggle_object_state $02, ON ; unused + + toggleable_objects_for POKEMON_MANSION_2F + toggle_object_state POKEMONMANSION2F_CALCIUM, ON + + toggleable_objects_for POKEMON_MANSION_3F + toggle_object_state POKEMONMANSION3F_MAX_POTION, ON + toggle_object_state POKEMONMANSION3F_IRON, ON + + toggleable_objects_for POKEMON_MANSION_B1F + toggle_object_state POKEMONMANSIONB1F_RARE_CANDY, ON + toggle_object_state POKEMONMANSIONB1F_FULL_RESTORE, ON + toggle_object_state POKEMONMANSIONB1F_TM_BLIZZARD, ON + toggle_object_state POKEMONMANSIONB1F_TM_SOLARBEAM, ON + toggle_object_state POKEMONMANSIONB1F_SECRET_KEY, ON + + toggleable_objects_for SAFARI_ZONE_EAST + toggle_object_state SAFARIZONEEAST_FULL_RESTORE, ON + toggle_object_state SAFARIZONEEAST_MAX_RESTORE, ON + toggle_object_state SAFARIZONEEAST_CARBOS, ON + toggle_object_state SAFARIZONEEAST_TM_EGG_BOMB, ON + + toggleable_objects_for SAFARI_ZONE_NORTH + toggle_object_state SAFARIZONENORTH_PROTEIN, ON + toggle_object_state SAFARIZONENORTH_TM_SKULL_BASH, ON + + toggleable_objects_for SAFARI_ZONE_WEST + toggle_object_state SAFARIZONEWEST_MAX_POTION, ON + toggle_object_state SAFARIZONEWEST_TM_DOUBLE_TEAM, ON + toggle_object_state SAFARIZONEWEST_MAX_REVIVE, ON + toggle_object_state SAFARIZONEWEST_GOLD_TEETH, ON + + toggleable_objects_for SAFARI_ZONE_CENTER + toggle_object_state SAFARIZONECENTER_NUGGET, ON + + toggleable_objects_for CERULEAN_CAVE_2F + toggle_object_state CERULEANCAVE2F_PP_UP, ON + toggle_object_state CERULEANCAVE2F_ULTRA_BALL, ON + toggle_object_state CERULEANCAVE2F_FULL_RESTORE, ON + + toggleable_objects_for CERULEAN_CAVE_B1F + toggle_object_state CERULEANCAVEB1F_MEWTWO, ON + toggle_object_state CERULEANCAVEB1F_ULTRA_BALL, ON + toggle_object_state CERULEANCAVEB1F_MAX_REVIVE, ON + + toggleable_objects_for VICTORY_ROAD_1F + toggle_object_state VICTORYROAD1F_TM_SKY_ATTACK, ON + toggle_object_state VICTORYROAD1F_RARE_CANDY, ON + + toggleable_objects_for CHAMPIONS_ROOM + toggle_object_state CHAMPIONSROOM_OAK, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_1F + toggle_object_state SEAFOAMISLANDS1F_BOULDER1, ON + toggle_object_state SEAFOAMISLANDS1F_BOULDER2, ON + + toggleable_objects_for SEAFOAM_ISLANDS_B1F + toggle_object_state SEAFOAMISLANDSB1F_BOULDER1, OFF + toggle_object_state SEAFOAMISLANDSB1F_BOULDER2, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_B2F + toggle_object_state SEAFOAMISLANDSB2F_BOULDER1, OFF + toggle_object_state SEAFOAMISLANDSB2F_BOULDER2, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_B3F + toggle_object_state SEAFOAMISLANDSB3F_BOULDER2, ON + toggle_object_state SEAFOAMISLANDSB3F_BOULDER3, ON + toggle_object_state SEAFOAMISLANDSB3F_BOULDER5, OFF + toggle_object_state SEAFOAMISLANDSB3F_BOULDER6, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_B4F + toggle_object_state SEAFOAMISLANDSB4F_BOULDER1, OFF + toggle_object_state SEAFOAMISLANDSB4F_BOULDER2, OFF + toggle_object_state SEAFOAMISLANDSB4F_ARTICUNO, ON + + assert_table_length NUM_TOGGLEABLE_OBJECTS + + db -1, 1, ON ; end diff --git a/data/predef_pointers.asm b/data/predef_pointers.asm index e6968c46..19c3ea8f 100644 --- a/data/predef_pointers.asm +++ b/data/predef_pointers.asm @@ -32,7 +32,7 @@ PredefPointers:: add_predef ApplyOutOfBattlePoisonDamage add_predef AnyPartyAlive add_predef ShowObject - add_predef ShowObject2 + add_predef ShowObject2 ; identical to ShowObject add_predef ReplaceTileBlock add_predef InitPlayerData2 add_predef LoadTilesetHeader @@ -75,7 +75,7 @@ PredefPointers:: add_predef WriteMonMoves add_predef SaveMenu add_predef LoadSGB - add_predef MarkTownVisitedAndLoadMissableObjects + add_predef MarkTownVisitedAndLoadToggleableObjects add_predef SetPartyMonTypes add_predef CanLearnTM add_predef TMToMove diff --git a/engine/events/pick_up_item.asm b/engine/events/pick_up_item.asm index 8fbdcfa2..a55c604a 100644 --- a/engine/events/pick_up_item.asm +++ b/engine/events/pick_up_item.asm @@ -3,19 +3,19 @@ PickUpItem: ldh a, [hSpriteIndex] ld b, a - ld hl, wMissableObjectList -.missableObjectsListLoop + ld hl, wToggleableObjectList +.toggleableObjectsListLoop ld a, [hli] cp $ff ret z cp b - jr z, .isMissable + jr z, .isToggleable inc hl - jr .missableObjectsListLoop + jr .toggleableObjectsListLoop -.isMissable +.isToggleable ld a, [hl] - ldh [hMissableObjectIndex], a + ldh [hToggleableObjectIndex], a ld hl, wMapSpriteExtraData ldh a, [hSpriteIndex] @@ -30,8 +30,8 @@ PickUpItem: call GiveItem jr nc, .BagFull - ldh a, [hMissableObjectIndex] - ld [wMissableObjectIndex], a + ldh a, [hToggleableObjectIndex] + ld [wToggleableObjectIndex], a predef HideObject ld a, 1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a diff --git a/engine/movie/oak_speech/init_player_data.asm b/engine/movie/oak_speech/init_player_data.asm index 843eb96e..bd4f86a4 100644 --- a/engine/movie/oak_speech/init_player_data.asm +++ b/engine/movie/oak_speech/init_player_data.asm @@ -45,7 +45,7 @@ DEF START_MONEY EQU $3000 ld bc, wGameProgressFlagsEnd - wGameProgressFlags call FillMemory ; clear all game progress flags - jp InitializeMissableObjectsFlags + jp InitializeToggleableObjectsFlags InitializeEmptyList: xor a ; count diff --git a/engine/overworld/auto_movement.asm b/engine/overworld/auto_movement.asm index 13d30cca..dc5fc385 100644 --- a/engine/overworld/auto_movement.asm +++ b/engine/overworld/auto_movement.asm @@ -148,8 +148,8 @@ PalletMovementScript_Done: ld a, [wSimulatedJoypadStatesIndex] and a ret nz - ld a, HS_PALLET_TOWN_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_PALLET_TOWN_OAK + ld [wToggleableObjectIndex], a predef HideObject ld hl, wStatusFlags5 res BIT_SCRIPTED_MOVEMENT_STATE, [hl] diff --git a/engine/overworld/missable_objects.asm b/engine/overworld/missable_objects.asm deleted file mode 100644 index 8ea79980..00000000 --- a/engine/overworld/missable_objects.asm +++ /dev/null @@ -1,212 +0,0 @@ -MarkTownVisitedAndLoadMissableObjects:: - ld a, [wCurMap] - cp FIRST_ROUTE_MAP - jr nc, .notInTown - ld c, a - ld b, FLAG_SET - ld hl, wTownVisitedFlag ; mark town as visited (for flying) - predef FlagActionPredef -.notInTown - ld hl, MapHSPointers - ld a, [wCurMap] - ld b, $0 - ld c, a - add hl, bc - add hl, bc - ld a, [hli] ; load missable objects pointer in hl - ld h, [hl] - ld l, a - push hl - ld de, MissableObjects ; calculate difference between out pointer and the base pointer - ld a, l - sub e - jr nc, .noCarry - dec h -.noCarry - ld l, a - ld a, h - sub d - ld h, a - ld a, h - ldh [hDividend], a - ld a, l - ldh [hDividend+1], a - xor a - ldh [hDividend+2], a - ldh [hDividend+3], a - ld a, $3 - ldh [hDivisor], a - ld b, $2 - call Divide ; divide difference by 3, resulting in the global offset (number of missable items before ours) - ld a, [wCurMap] - ld b, a - ldh a, [hDividend+3] - ld c, a ; store global offset in c - ld de, wMissableObjectList - pop hl -.writeMissableObjectsListLoop - ld a, [hli] - cp -1 - jr z, .done ; end of list - cp b - jr nz, .done ; not for current map anymore - ld a, [hli] - inc hl - ld [de], a ; write (map-local) sprite ID - inc de - ld a, c - inc c - ld [de], a ; write (global) missable object index - inc de - jr .writeMissableObjectsListLoop -.done - ld a, -1 - ld [de], a ; write sentinel - ret - -InitializeMissableObjectsFlags: - ld hl, wMissableObjectFlags - ld bc, wMissableObjectFlagsEnd - wMissableObjectFlags - xor a - call FillMemory ; clear missable objects flags - ld hl, MissableObjects - xor a - ld [wMissableObjectCounter], a -.missableObjectsLoop - ld a, [hli] - cp -1 ; end of list - ret z - push hl - inc hl - ld a, [hl] - cp HIDE - jr nz, .skip - ld hl, wMissableObjectFlags - ld a, [wMissableObjectCounter] - ld c, a - ld b, FLAG_SET - call MissableObjectFlagAction ; set flag if Item is hidden -.skip - ld hl, wMissableObjectCounter - inc [hl] - pop hl - inc hl - inc hl - jr .missableObjectsLoop - -; tests if current sprite is a missable object that is hidden/has been removed -IsObjectHidden: - ldh a, [hCurrentSpriteOffset] - swap a - ld b, a - ld hl, wMissableObjectList -.loop - ld a, [hli] - cp -1 - jr z, .notHidden ; not missable -> not hidden - cp b - ld a, [hli] - jr nz, .loop - ld c, a - ld b, FLAG_TEST - ld hl, wMissableObjectFlags - call MissableObjectFlagAction - ld a, c - and a - jr nz, .hidden -.notHidden - xor a -.hidden - ldh [hIsHiddenMissableObject], a - ret - -; adds missable object (items, leg. pokemon, etc.) to the map -; [wMissableObjectIndex]: index of the missable object to be added (global index) -ShowObject: -ShowObject2: - ld hl, wMissableObjectFlags - ld a, [wMissableObjectIndex] - ld c, a - ld b, FLAG_RESET - call MissableObjectFlagAction ; reset "removed" flag - jp UpdateSprites - -; removes missable object (items, leg. pokemon, etc.) from the map -; [wMissableObjectIndex]: index of the missable object to be removed (global index) -HideObject: - ld hl, wMissableObjectFlags - ld a, [wMissableObjectIndex] - ld c, a - ld b, FLAG_SET - call MissableObjectFlagAction ; set "removed" flag - jp UpdateSprites - -MissableObjectFlagAction: -; identical to FlagAction - - push hl - push de - push bc - - ; bit - ld a, c - ld d, a - and 7 - ld e, a - - ; byte - ld a, d - srl a - srl a - srl a - add l - ld l, a - jr nc, .ok - inc h -.ok - - ; d = 1 << e (bitmask) - inc e - ld d, 1 -.shift - dec e - jr z, .shifted - sla d - jr .shift -.shifted - - ld a, b - and a - jr z, .reset - cp FLAG_TEST - jr z, .read - -; set - ld a, [hl] - ld b, a - ld a, d - or b - ld [hl], a - jr .done - -.reset - ld a, [hl] - ld b, a - ld a, d - xor $ff - and b - ld [hl], a - jr .done - -.read - ld a, [hl] - ld b, a - ld a, d - and b - -.done - pop bc - pop de - pop hl - ld c, a - ret diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm index a353c4f1..be8d6f62 100644 --- a/engine/overworld/movement.asm +++ b/engine/overworld/movement.asm @@ -478,7 +478,7 @@ InitializeSpriteScreenPosition: ; tests if sprite is off screen or otherwise unable to do anything CheckSpriteAvailability: predef IsObjectHidden - ldh a, [hIsHiddenMissableObject] + ldh a, [hIsToggleableObjectOff] and a jp nz, .spriteInvisible ld h, HIGH(wSpriteStateData2) diff --git a/engine/overworld/toggleable_objects.asm b/engine/overworld/toggleable_objects.asm new file mode 100644 index 00000000..bfb3576c --- /dev/null +++ b/engine/overworld/toggleable_objects.asm @@ -0,0 +1,213 @@ +MarkTownVisitedAndLoadToggleableObjects:: + ld a, [wCurMap] + cp FIRST_ROUTE_MAP + jr nc, .notInTown + ld c, a + ld b, FLAG_SET + ld hl, wTownVisitedFlag ; mark town as visited (for flying) + predef FlagActionPredef +.notInTown + ld hl, ToggleableObjectMapPointers + ld a, [wCurMap] + ld b, $0 + ld c, a + add hl, bc + add hl, bc + ld a, [hli] ; load toggleable objects pointer in hl + ld h, [hl] + ld l, a + push hl + ld de, ToggleableObjectStates ; calculate difference between out pointer and the base pointer + ld a, l + sub e + jr nc, .noCarry + dec h +.noCarry + ld l, a + ld a, h + sub d + ld h, a + ; divide difference by 3, resulting in the global offset (number of toggleable items before ours) + ld a, h + ldh [hDividend], a + ld a, l + ldh [hDividend+1], a + xor a + ldh [hDividend+2], a + ldh [hDividend+3], a + ld a, $3 + ldh [hDivisor], a + ld b, $2 + call Divide + ld a, [wCurMap] + ld b, a + ldh a, [hDividend+3] + ld c, a ; store global offset in c + ld de, wToggleableObjectList + pop hl +.writeToggleableObjectsListLoop + ld a, [hli] + cp -1 + jr z, .done ; end of list + cp b + jr nz, .done ; not for current map anymore + ld a, [hli] + inc hl + ld [de], a ; write (map-local) sprite ID + inc de + ld a, c + inc c + ld [de], a ; write (global) toggleable object index + inc de + jr .writeToggleableObjectsListLoop +.done + ld a, -1 + ld [de], a ; write sentinel + ret + +InitializeToggleableObjectsFlags: + ld hl, wToggleableObjectFlags + ld bc, wToggleableObjectFlagsEnd - wToggleableObjectFlags + xor a + call FillMemory ; clear toggleable objects flags + ld hl, ToggleableObjectStates + xor a + ld [wToggleableObjectCounter], a +.toggleableObjectsLoop + ld a, [hli] + cp -1 ; end of list + ret z + push hl + inc hl + ld a, [hl] + cp OFF + jr nz, .skip + ld hl, wToggleableObjectFlags + ld a, [wToggleableObjectCounter] + ld c, a + ld b, FLAG_SET + call ToggleableObjectFlagAction ; set flag if object is toggled off +.skip + ld hl, wToggleableObjectCounter + inc [hl] + pop hl + inc hl + inc hl + jr .toggleableObjectsLoop + +; tests if current object is toggled off/has been hidden +IsObjectHidden: + ldh a, [hCurrentSpriteOffset] + swap a + ld b, a + ld hl, wToggleableObjectList +.loop + ld a, [hli] + cp -1 + jr z, .notHidden ; not toggleable -> not hidden + cp b + ld a, [hli] + jr nz, .loop + ld c, a + ld b, FLAG_TEST + ld hl, wToggleableObjectFlags + call ToggleableObjectFlagAction + ld a, c + and a + jr nz, .hidden +.notHidden + xor a +.hidden + ldh [hIsToggleableObjectOff], a + ret + +; adds toggleable object (items, leg. pokemon, etc.) to the map +; [wToggleableObjectIndex]: index of the toggleable object to be added (global index) +ShowObject: +ShowObject2: + ld hl, wToggleableObjectFlags + ld a, [wToggleableObjectIndex] + ld c, a + ld b, FLAG_RESET + call ToggleableObjectFlagAction ; reset "removed" flag + jp UpdateSprites + +; removes toggleable object (items, leg. pokemon, etc.) from the map +; [wToggleableObjectIndex]: index of the toggleable object to be removed (global index) +HideObject: + ld hl, wToggleableObjectFlags + ld a, [wToggleableObjectIndex] + ld c, a + ld b, FLAG_SET + call ToggleableObjectFlagAction ; set "removed" flag + jp UpdateSprites + +ToggleableObjectFlagAction: +; identical to FlagAction + + push hl + push de + push bc + + ; bit + ld a, c + ld d, a + and 7 + ld e, a + + ; byte + ld a, d + srl a + srl a + srl a + add l + ld l, a + jr nc, .ok + inc h +.ok + + ; d = 1 << e (bitmask) + inc e + ld d, 1 +.shift + dec e + jr z, .shifted + sla d + jr .shift +.shifted + + ld a, b + and a + jr z, .reset + cp FLAG_TEST + jr z, .read + +; set + ld a, [hl] + ld b, a + ld a, d + or b + ld [hl], a + jr .done + +.reset + ld a, [hl] + ld b, a + ld a, d + xor $ff + and b + ld [hl], a + jr .done + +.read + ld a, [hl] + ld b, a + ld a, d + and b + +.done + pop bc + pop de + pop hl + ld c, a + ret diff --git a/home/overworld.asm b/home/overworld.asm index e994f694..58550167 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -2003,7 +2003,7 @@ LoadPlayerSpriteGraphicsCommon:: ; function to load data from the map header LoadMapHeader:: - farcall MarkTownVisitedAndLoadMissableObjects + farcall MarkTownVisitedAndLoadToggleableObjects ld a, [wCurMapTileset] ld [wUnusedCurMapTilesetCopy], a ld a, [wCurMap] diff --git a/home/trainers.asm b/home/trainers.asm index 8d2cceaf..87bc7d69 100644 --- a/home/trainers.asm +++ b/home/trainers.asm @@ -202,13 +202,13 @@ EndTrainerBattle:: ld a, [wEnemyMonOrTrainerClass] cp OPP_ID_OFFSET jr nc, .skipRemoveSprite ; test if trainer was fought (in that case skip removing the corresponding sprite) - ld hl, wMissableObjectList + ld hl, wToggleableObjectList ld de, $2 ld a, [wSpriteIndex] call IsInArray ; search for sprite ID inc hl ld a, [hl] - ld [wMissableObjectIndex], a ; load corresponding missable object index and remove it + ld [wToggleableObjectIndex], a ; load corresponding toggleable object index and remove it predef HideObject .skipRemoveSprite ld hl, wStatusFlags5 diff --git a/includes.asm b/includes.asm index 781bb0b1..ea6f1a8e 100644 --- a/includes.asm +++ b/includes.asm @@ -41,7 +41,7 @@ INCLUDE "constants/list_constants.asm" INCLUDE "constants/map_constants.asm" INCLUDE "constants/map_data_constants.asm" INCLUDE "constants/map_object_constants.asm" -INCLUDE "constants/hide_show_constants.asm" +INCLUDE "constants/toggle_constants.asm" INCLUDE "constants/sprite_set_constants.asm" INCLUDE "constants/credits_constants.asm" INCLUDE "constants/audio_constants.asm" diff --git a/main.asm b/main.asm index 11ee2fa9..313bd448 100644 --- a/main.asm +++ b/main.asm @@ -49,7 +49,7 @@ INCLUDE "engine/overworld/player_state.asm" INCLUDE "engine/events/poison.asm" INCLUDE "engine/overworld/tilesets.asm" INCLUDE "engine/overworld/daycare_exp.asm" -INCLUDE "data/maps/hide_show_data.asm" +INCLUDE "data/maps/toggleable_objects.asm" INCLUDE "engine/overworld/field_move_messages.asm" INCLUDE "engine/items/inventory.asm" INCLUDE "engine/overworld/wild_mons.asm" @@ -57,7 +57,7 @@ INCLUDE "engine/items/item_effects.asm" INCLUDE "engine/menus/draw_badges.asm" INCLUDE "engine/overworld/update_map.asm" INCLUDE "engine/overworld/cut.asm" -INCLUDE "engine/overworld/missable_objects.asm" +INCLUDE "engine/overworld/toggleable_objects.asm" INCLUDE "engine/overworld/push_boulder.asm" INCLUDE "engine/pokemon/add_mon.asm" INCLUDE "engine/flag_action.asm" diff --git a/ram/hram.asm b/ram/hram.asm index 1be1dab6..9cfb5327 100644 --- a/ram/hram.asm +++ b/ram/hram.asm @@ -325,7 +325,7 @@ hItemToRemoveIndex:: db NEXTU hItemCounter:: hSavedCoordIndex:: -hMissableObjectIndex:: +hToggleableObjectIndex:: hGymTrashCanRandNumMask:: hInteractedWithBookshelf:: db @@ -350,7 +350,7 @@ hDivisor2:: db hQuotient2:: db NEXTU -hIsHiddenMissableObject:: db +hIsToggleableObjectOff:: db ENDU hMapROMBank:: db diff --git a/ram/wram.asm b/ram/wram.asm index fff7f703..5eefaf06 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -324,7 +324,7 @@ wCheckFor180DegreeTurn:: db ds 1 -wMissableObjectIndex:: db +wToggleableObjectIndex:: db wPredefID:: db wPredefHL:: dw @@ -1224,7 +1224,7 @@ ENDU ; money received after battle = base money × level of last enemy mon wTrainerBaseMoney:: dw ; BCD -wMissableObjectCounter:: db +wToggleableObjectCounter:: db ds 1 @@ -1909,9 +1909,9 @@ wUnusedMapVariable:: db wPlayerCoins:: dw ; BCD -; bit array of missable objects. set = removed -wMissableObjectFlags:: flag_array $100 -wMissableObjectFlagsEnd:: +; bit array of toggleable objects; bit set = toggled off +wToggleableObjectFlags:: flag_array $100 +wToggleableObjectFlagsEnd:: ds 7 @@ -1920,9 +1920,9 @@ wSavedSpriteImageIndex:: db ; each entry consists of 2 bytes ; * the sprite ID (depending on the current map) -; * the missable object index (global, used for wMissableObjectFlags) +; * the toggleable object index (global, used for wToggleableObjectFlags) ; terminated with $FF -wMissableObjectList:: ds 16 * 2 + 1 +wToggleableObjectList:: ds 16 * 2 + 1 ds 1 diff --git a/scripts/BillsHouse.asm b/scripts/BillsHouse.asm index d43ae546..8ecebd20 100644 --- a/scripts/BillsHouse.asm +++ b/scripts/BillsHouse.asm @@ -49,8 +49,8 @@ BillsHousePokemonEntersMachineScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_BILL_POKEMON - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_POKEMON + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_BILL_SAID_USE_CELL_SEPARATOR xor a @@ -75,8 +75,8 @@ BillsHouseBillExitsMachineScript: ld a, 5 ldh [hSpriteMapXCoord], a call SetSpritePosition1 - ld a, HS_BILL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_1 + ld [wToggleableObjectIndex], a predef ShowObject ld c, 8 call DelayFrames @@ -171,11 +171,11 @@ BillsHouseBillSSTicketText: ld hl, .SSTicketReceivedText call PrintText SetEvent EVENT_GOT_SS_TICKET - ld a, HS_CERULEAN_GUARD_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_1 + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_CERULEAN_GUARD_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_2 + ld [wToggleableObjectIndex], a predef HideObject .got_ss_ticket ld hl, .WhyDontYouGoInsteadOfMeText diff --git a/scripts/BluesHouse.asm b/scripts/BluesHouse.asm index 0a16abbf..b85b6d21 100644 --- a/scripts/BluesHouse.asm +++ b/scripts/BluesHouse.asm @@ -40,8 +40,8 @@ BluesHouseDaisySittingText: lb bc, TOWN_MAP, 1 call GiveItem jr nc, .bag_full - ld a, HS_TOWN_MAP - ld [wMissableObjectIndex], a + ld a, TOGGLE_TOWN_MAP + ld [wToggleableObjectIndex], a predef HideObject ld hl, GotMapText call PrintText diff --git a/scripts/CeladonMansionRoofHouse.asm b/scripts/CeladonMansionRoofHouse.asm index d3c03290..12eff10c 100644 --- a/scripts/CeladonMansionRoofHouse.asm +++ b/scripts/CeladonMansionRoofHouse.asm @@ -15,8 +15,8 @@ CeladonMansionRoofHouseEeveePokeballText: lb bc, EEVEE, 25 call GivePokemon jr nc, .party_full - ld a, HS_CELADON_MANSION_EEVEE_GIFT - ld [wMissableObjectIndex], a + ld a, TOGGLE_CELADON_MANSION_EEVEE_GIFT + ld [wToggleableObjectIndex], a predef HideObject .party_full jp TextScriptEnd diff --git a/scripts/CeruleanCity.asm b/scripts/CeruleanCity.asm index 4412b49c..cbd60936 100644 --- a/scripts/CeruleanCity.asm +++ b/scripts/CeruleanCity.asm @@ -8,8 +8,8 @@ CeruleanCityClearScripts: xor a ; SCRIPT_CERULEANCITY_DEFAULT ld [wJoyIgnore], a ld [wCeruleanCityCurScript], a - ld a, HS_CERULEAN_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_RIVAL + ld [wToggleableObjectIndex], a predef_jump HideObject CeruleanCity_ScriptPointers: @@ -90,8 +90,8 @@ ENDC call GetPointerWithinSpriteStateData2 ld [hl], 25 .playerOnRightSideOfBridge - ld a, HS_CERULEAN_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_RIVAL + ld [wToggleableObjectIndex], a predef ShowObject ld de, CeruleanCityMovement1 ld a, CERULEANCITY_RIVAL @@ -222,8 +222,8 @@ CeruleanCityRivalCleanupScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_CERULEAN_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_RIVAL + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a diff --git a/scripts/CeruleanCity_2.asm b/scripts/CeruleanCity_2.asm index 53ace5c8..85986a7a 100644 --- a/scripts/CeruleanCity_2.asm +++ b/scripts/CeruleanCity_2.asm @@ -3,14 +3,14 @@ CeruleanHideRocket: ; one is called after you beat the Rocket that gives you TM28 DIG. ; the screen then fades out, he disappears, and fades back in call GBFadeOutToBlack - ld a, HS_CERULEAN_GUARD_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_1 + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_CERULEAN_GUARD_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_2 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_CERULEAN_ROCKET - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_ROCKET + ld [wToggleableObjectIndex], a predef HideObject call GBFadeInFromBlack ret diff --git a/scripts/ChampionsRoom.asm b/scripts/ChampionsRoom.asm index 68448b3d..752a0a31 100644 --- a/scripts/ChampionsRoom.asm +++ b/scripts/ChampionsRoom.asm @@ -120,8 +120,8 @@ ChampionsRoomOakArrivesScript: ld a, CHAMPIONSROOM_OAK ldh [hSpriteIndex], a call MoveSprite - ld a, HS_CHAMPIONS_ROOM_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_CHAMPIONS_ROOM_OAK + ld [wToggleableObjectIndex], a predef ShowObject ld a, SCRIPT_CHAMPIONSROOM_OAK_CONGRATULATES_PLAYER ld [wChampionsRoomCurScript], a @@ -197,8 +197,8 @@ ChampionsRoomOakExitsScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_CHAMPIONS_ROOM_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_CHAMPIONS_ROOM_OAK + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_CHAMPIONSROOM_PLAYER_FOLLOWS_OAK ld [wChampionsRoomCurScript], a diff --git a/scripts/FightingDojo.asm b/scripts/FightingDojo.asm index 04b35e82..cf822d1f 100644 --- a/scripts/FightingDojo.asm +++ b/scripts/FightingDojo.asm @@ -246,8 +246,8 @@ FightingDojoHitmonleePokeBallText: jr nc, .done ; once Poké Ball is taken, hide sprite - ld a, HS_FIGHTING_DOJO_GIFT_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_FIGHTING_DOJO_GIFT_1 + ld [wToggleableObjectIndex], a predef HideObject SetEvents EVENT_GOT_HITMONLEE, EVENT_DEFEATED_FIGHTING_DOJO .done @@ -281,8 +281,8 @@ FightingDojoHitmonchanPokeBallText: SetEvents EVENT_GOT_HITMONCHAN, EVENT_DEFEATED_FIGHTING_DOJO ; once Poké Ball is taken, hide sprite - ld a, HS_FIGHTING_DOJO_GIFT_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_FIGHTING_DOJO_GIFT_2 + ld [wToggleableObjectIndex], a predef HideObject .done jp TextScriptEnd diff --git a/scripts/GameCorner.asm b/scripts/GameCorner.asm index 028b5c88..0ead1947 100644 --- a/scripts/GameCorner.asm +++ b/scripts/GameCorner.asm @@ -107,8 +107,8 @@ GameCornerRocketExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_GAME_CORNER_ROCKET - ld [wMissableObjectIndex], a + ld a, TOGGLE_GAME_CORNER_ROCKET + ld [wToggleableObjectIndex], a predef HideObject ld hl, wCurrentMapScriptFlags set BIT_CUR_MAP_LOADED_1, [hl] diff --git a/scripts/HallOfFame.asm b/scripts/HallOfFame.asm index 31d56022..8e4f1275 100644 --- a/scripts/HallOfFame.asm +++ b/scripts/HallOfFame.asm @@ -96,8 +96,8 @@ HallOfFameOakCongratulationsScript: call DisplayTextID ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_CERULEAN_CAVE_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_CAVE_GUY + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_HALLOFFAME_RESET_EVENTS_AND_SAVE ld [wHallOfFameCurScript], a diff --git a/scripts/MtMoonB2F.asm b/scripts/MtMoonB2F.asm index 34f11d99..d3c7e57a 100644 --- a/scripts/MtMoonB2F.asm +++ b/scripts/MtMoonB2F.asm @@ -141,12 +141,12 @@ MtMoonB2FSuperNerdTakesOtherFossilScript: call DisplayTextID CheckEvent EVENT_GOT_DOME_FOSSIL jr z, .got_dome_fossil - ld a, HS_MT_MOON_B2F_FOSSIL_2 + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_2 jr .continue .got_dome_fossil - ld a, HS_MT_MOON_B2F_FOSSIL_1 + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_1 .continue - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a @@ -250,8 +250,8 @@ MtMoonB2FDomeFossilText: call GiveItem jp nc, MtMoonB2FYouHaveNoRoomText call MtMoonB2FReceivedFossilText - ld a, HS_MT_MOON_B2F_FOSSIL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_1 + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_GOT_DOME_FOSSIL ld a, SCRIPT_MTMOONB2F_MOVE_SUPER_NERD @@ -278,8 +278,8 @@ MtMoonB2FHelixFossilText: call GiveItem jp nc, MtMoonB2FYouHaveNoRoomText call MtMoonB2FReceivedFossilText - ld a, HS_MT_MOON_B2F_FOSSIL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_2 + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_GOT_HELIX_FOSSIL ld a, SCRIPT_MTMOONB2F_MOVE_SUPER_NERD diff --git a/scripts/Museum1F.asm b/scripts/Museum1F.asm index 6cb6889a..e56a5c11 100644 --- a/scripts/Museum1F.asm +++ b/scripts/Museum1F.asm @@ -197,8 +197,8 @@ Museum1FScientist2Text: call GiveItem jr nc, .bag_full SetEvent EVENT_GOT_OLD_AMBER - ld a, HS_OLD_AMBER - ld [wMissableObjectIndex], a + ld a, TOGGLE_OLD_AMBER + ld [wToggleableObjectIndex], a predef HideObject ld hl, .ReceivedOldAmberText jr .done diff --git a/scripts/OaksLab.asm b/scripts/OaksLab.asm index 9695b99e..12b58c3f 100644 --- a/scripts/OaksLab.asm +++ b/scripts/OaksLab.asm @@ -13,7 +13,7 @@ OaksLab_ScriptPointers: def_script_pointers dw_const OaksLabDefaultScript, SCRIPT_OAKSLAB_DEFAULT dw_const OaksLabOakEntersLabScript, SCRIPT_OAKSLAB_OAK_ENTERS_LAB - dw_const OaksLabHideShowOaksScript, SCRIPT_OAKSLAB_HIDE_SHOW_OAKS + dw_const OaksLabToggleOaksScript, SCRIPT_OAKSLAB_TOGGLE_OAKS dw_const OaksLabPlayerEntersLabScript, SCRIPT_OAKSLAB_PLAYER_ENTERS_LAB dw_const OaksLabFollowedOakScript, SCRIPT_OAKSLAB_FOLLOWED_OAK dw_const OaksLabOakChooseMonSpeechScript, SCRIPT_OAKSLAB_OAK_CHOOSE_MON_SPEECH @@ -37,8 +37,8 @@ OaksLabDefaultScript: ld a, [wNPCMovementScriptFunctionNum] and a ret nz - ld a, HS_OAKS_LAB_OAK_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_OAK_2 + ld [wToggleableObjectIndex], a predef ShowObject ld hl, wStatusFlags4 res BIT_NO_BATTLES, [hl] @@ -53,7 +53,7 @@ OaksLabOakEntersLabScript: ld de, OakEntryMovement call MoveSprite - ld a, SCRIPT_OAKSLAB_HIDE_SHOW_OAKS + ld a, SCRIPT_OAKSLAB_TOGGLE_OAKS ld [wOaksLabCurScript], a ret @@ -63,15 +63,15 @@ OakEntryMovement: db NPC_MOVEMENT_UP db -1 ; end -OaksLabHideShowOaksScript: +OaksLabToggleOaksScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_OAKS_LAB_OAK_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_OAK_2 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_OAKS_LAB_OAK_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_OAK_1 + ld [wToggleableObjectIndex], a predef ShowObject ld a, SCRIPT_OAKSLAB_PLAYER_ENTERS_LAB @@ -306,17 +306,17 @@ OaksLabRivalChoosesStarterScript: ld a, [wRivalStarterBallSpriteIndex] cp OAKSLAB_CHARMANDER_POKE_BALL jr nz, .not_charmander - ld a, HS_STARTER_BALL_1 + ld a, TOGGLE_STARTER_BALL_1 jr .hideBallAndContinue .not_charmander cp OAKSLAB_SQUIRTLE_POKE_BALL jr nz, .not_squirtle - ld a, HS_STARTER_BALL_2 + ld a, TOGGLE_STARTER_BALL_2 jr .hideBallAndContinue .not_squirtle - ld a, HS_STARTER_BALL_3 + ld a, TOGGLE_STARTER_BALL_3 .hideBallAndContinue - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject call Delay3 ld a, [wRivalStarterTemp] @@ -475,8 +475,8 @@ OaksLabPlayerWatchRivalExitScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a jr nz, .checkRivalPosition - ld a, HS_OAKS_LAB_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_RIVAL + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a @@ -519,8 +519,8 @@ OaksLabRivalArrivesAtOaksRequestScript: ldh [hTextID], a call DisplayTextID call OaksLabCalcRivalMovementScript - ld a, HS_OAKS_LAB_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_RIVAL + ld [wToggleableObjectIndex], a predef ShowObject ld a, [wNPCMovementDirections2Index] ld [wSavedNPCMovementDirections2Index], a @@ -578,11 +578,11 @@ OaksLabOakGivesPokedexScript: ldh [hTextID], a call DisplayTextID call Delay3 - ld a, HS_POKEDEX_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEDEX_1 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_POKEDEX_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEDEX_2 + ld [wToggleableObjectIndex], a predef HideObject call OaksLabRivalFaceUpOakFaceDownScript ld a, TEXT_OAKSLAB_OAK_THAT_WAS_MY_DREAM @@ -599,11 +599,11 @@ OaksLabOakGivesPokedexScript: call DisplayTextID SetEvent EVENT_GOT_POKEDEX SetEvent EVENT_OAK_GOT_PARCEL - ld a, HS_LYING_OLD_MAN - ld [wMissableObjectIndex], a + ld a, TOGGLE_LYING_OLD_MAN + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_OLD_MAN - ld [wMissableObjectIndex], a + ld a, TOGGLE_OLD_MAN + ld [wToggleableObjectIndex], a predef ShowObject ld a, [wSavedNPCMovementDirections2Index] ld b, 0 @@ -630,14 +630,14 @@ OaksLabRivalLeavesWithPokedexScript: bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz call PlayDefaultMusic - ld a, HS_OAKS_LAB_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_RIVAL + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_1ST_ROUTE22_RIVAL_BATTLE ResetEventReuseHL EVENT_2ND_ROUTE22_RIVAL_BATTLE SetEventReuseHL EVENT_ROUTE22_RIVAL_WANTS_BATTLE - ld a, HS_ROUTE_22_RIVAL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_1 + ld [wToggleableObjectIndex], a predef ShowObject ld a, SCRIPT_PALLETTOWN_DAISY ld [wPalletTownCurScript], a @@ -904,17 +904,17 @@ OaksLabMonChoiceMenu: ld a, [wSpriteIndex] cp OAKSLAB_CHARMANDER_POKE_BALL jr nz, .not_charmander - ld a, HS_STARTER_BALL_1 + ld a, TOGGLE_STARTER_BALL_1 jr .continue .not_charmander cp OAKSLAB_SQUIRTLE_POKE_BALL jr nz, .not_squirtle - ld a, HS_STARTER_BALL_2 + ld a, TOGGLE_STARTER_BALL_2 jr .continue .not_squirtle - ld a, HS_STARTER_BALL_3 + ld a, TOGGLE_STARTER_BALL_3 .continue - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, $1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a diff --git a/scripts/PalletTown.asm b/scripts/PalletTown.asm index 57c231fa..de88945f 100644 --- a/scripts/PalletTown.asm +++ b/scripts/PalletTown.asm @@ -51,8 +51,8 @@ PalletTownOakHeyWaitScript: call DisplayTextID ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_PALLET_TOWN_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_PALLET_TOWN_OAK + ld [wToggleableObjectIndex], a predef ShowObject ; trigger the next script @@ -136,11 +136,11 @@ PalletTownDaisyScript: CheckBothEventsSet EVENT_GOT_TOWN_MAP, EVENT_ENTERED_BLUES_HOUSE, 1 jr nz, .next SetEvent EVENT_DAISY_WALKING - ld a, HS_DAISY_SITTING - ld [wMissableObjectIndex], a + ld a, TOGGLE_DAISY_SITTING + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_DAISY_WALKING - ld [wMissableObjectIndex], a + ld a, TOGGLE_DAISY_WALKING + ld [wToggleableObjectIndex], a predef_jump ShowObject .next CheckEvent EVENT_GOT_POKEBALLS_FROM_OAK diff --git a/scripts/PewterCity.asm b/scripts/PewterCity.asm index 9693b88f..549a1cad 100644 --- a/scripts/PewterCity.asm +++ b/scripts/PewterCity.asm @@ -92,8 +92,8 @@ PewterCityHideSuperNerd1Script: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_MUSEUM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_MUSEUM_GUY + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_PEWTERCITY_RESET_SUPER_NERD1 ld [wPewterCityCurScript], a @@ -103,8 +103,8 @@ PewterCityResetSuperNerd1Script: ld a, PEWTERCITY_SUPER_NERD1 ld [wSpriteIndex], a call SetSpritePosition2 - ld a, HS_MUSEUM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_MUSEUM_GUY + ld [wToggleableObjectIndex], a predef ShowObject xor a ld [wJoyIgnore], a @@ -161,8 +161,8 @@ PewterCityHideYoungsterScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_GYM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_GYM_GUY + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_PEWTERCITY_RESET_YOUNGSTER ld [wPewterCityCurScript], a @@ -172,8 +172,8 @@ PewterCityResetYoungsterScript: ld a, PEWTERCITY_YOUNGSTER ld [wSpriteIndex], a call SetSpritePosition2 - ld a, HS_GYM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_GYM_GUY + ld [wToggleableObjectIndex], a predef ShowObject xor a ld [wJoyIgnore], a diff --git a/scripts/PewterGym.asm b/scripts/PewterGym.asm index 0f4b9ebe..40a04d73 100644 --- a/scripts/PewterGym.asm +++ b/scripts/PewterGym.asm @@ -66,11 +66,11 @@ PewterGymScriptReceiveTM34: ld hl, wBeatGymFlags set BIT_BOULDERBADGE, [hl] - ld a, HS_GYM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_GYM_GUY + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_ROUTE_22_RIVAL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_1 + ld [wToggleableObjectIndex], a predef HideObject ResetEvents EVENT_1ST_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE diff --git a/scripts/PokemonTower2F.asm b/scripts/PokemonTower2F.asm index d3b6c9a4..1888e511 100644 --- a/scripts/PokemonTower2F.asm +++ b/scripts/PokemonTower2F.asm @@ -116,8 +116,8 @@ PokemonTower2FRivalExitsScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_POKEMON_TOWER_2F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEMON_TOWER_2F_RIVAL + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a diff --git a/scripts/PokemonTower7F.asm b/scripts/PokemonTower7F.asm index 3d8cd636..908e089e 100644 --- a/scripts/PokemonTower7F.asm +++ b/scripts/PokemonTower7F.asm @@ -44,15 +44,15 @@ PokemonTower7FHideNPCScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld hl, wMissableObjectList + ld hl, wToggleableObjectList ld a, [wSpriteIndex] ld b, a -.missableObjectsListLoop +.toggleableObjectsListLoop ld a, [hli] - cp b ; search for sprite ID in missing objects list + cp b ; search for sprite ID in toggleable objects list ld a, [hli] - jr nz, .missableObjectsListLoop - ld [wMissableObjectIndex], a ; remove missable object + jr nz, .toggleableObjectsListLoop + ld [wToggleableObjectIndex], a ; remove toggleable object predef HideObject xor a ld [wJoyIgnore], a @@ -67,8 +67,8 @@ PokemonTower7FHideNPCScript: PokemonTower7FWarpToMrFujiHouseScript: ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_POKEMON_TOWER_7F_MR_FUJI - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEMON_TOWER_7F_MR_FUJI + ld [wToggleableObjectIndex], a predef HideObject ld a, SPRITE_FACING_UP ld [wSpritePlayerStateData1FacingDirection], a @@ -228,14 +228,14 @@ PokemonTower7FMrFujiText: call PrintText SetEvent EVENT_RESCUED_MR_FUJI SetEvent EVENT_RESCUED_MR_FUJI_2 - ld a, HS_MR_FUJIS_HOUSE_MR_FUJI - ld [wMissableObjectIndex], a + ld a, TOGGLE_MR_FUJIS_HOUSE_MR_FUJI + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_SAFFRON_CITY_E - ld [wMissableObjectIndex], a + ld a, TOGGLE_SAFFRON_CITY_E + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_SAFFRON_CITY_F - ld [wMissableObjectIndex], a + ld a, TOGGLE_SAFFRON_CITY_F + ld [wToggleableObjectIndex], a predef ShowObject ld a, SCRIPT_POKEMONTOWER7F_WARP_TO_MR_FUJI_HOUSE ld [wPokemonTower7FCurScript], a diff --git a/scripts/RocketHideoutB4F.asm b/scripts/RocketHideoutB4F.asm index edc51351..7bc3ec31 100644 --- a/scripts/RocketHideoutB4F.asm +++ b/scripts/RocketHideoutB4F.asm @@ -56,11 +56,11 @@ RocketHideoutB4FBeatGiovanniScript: ldh [hTextID], a call DisplayTextID call GBFadeOutToBlack - ld a, HS_ROCKET_HIDEOUT_B4F_GIOVANNI - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_GIOVANNI + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_ROCKET_HIDEOUT_B4F_ITEM_4 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_4 + ld [wToggleableObjectIndex], a predef ShowObject call UpdateSprites call GBFadeInFromBlack @@ -192,8 +192,8 @@ RocketHideoutB4FRocket3AfterBattleText: call PrintText CheckAndSetEvent EVENT_ROCKET_DROPPED_LIFT_KEY jr nz, .done - ld a, HS_ROCKET_HIDEOUT_B4F_ITEM_5 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_5 + ld [wToggleableObjectIndex], a predef ShowObject .done jp TextScriptEnd diff --git a/scripts/Route12.asm b/scripts/Route12.asm index ea9fc567..a6984f87 100644 --- a/scripts/Route12.asm +++ b/scripts/Route12.asm @@ -34,8 +34,8 @@ Route12DefaultScript: ld [wCurOpponent], a ld a, 30 ld [wCurEnemyLevel], a - ld a, HS_ROUTE_12_SNORLAX - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_12_SNORLAX + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_ROUTE12_SNORLAX_POST_BATTLE ld [wRoute12CurScript], a diff --git a/scripts/Route16.asm b/scripts/Route16.asm index 6e3da97c..a1eb6e85 100644 --- a/scripts/Route16.asm +++ b/scripts/Route16.asm @@ -34,8 +34,8 @@ Route16DefaultScript: ld [wCurOpponent], a ld a, 30 ld [wCurEnemyLevel], a - ld a, HS_ROUTE_16_SNORLAX - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_16_SNORLAX + ld [wToggleableObjectIndex], a predef HideObject call UpdateSprites ld a, SCRIPT_ROUTE16_SNORLAX_POST_BATTLE diff --git a/scripts/Route20.asm b/scripts/Route20.asm index 5230858e..3c528b09 100644 --- a/scripts/Route20.asm +++ b/scripts/Route20.asm @@ -12,48 +12,48 @@ Route20_Script: Route20BoulderScript: CheckBothEventsSet EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM3_BOULDER2_DOWN_HOLE jr z, .next_boulder_check - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_1 call Route20ShowObjectScript - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_2 call Route20ShowObjectScript - ld hl, .MissableObjectIDs -.hide_missable_objects + ld hl, .ToggleableObjectIDs +.hide_toggleable_objects ld a, [hli] cp $ff jr z, .next_boulder_check push hl call Route20HideObjectScript pop hl - jr .hide_missable_objects - -.MissableObjectIDs: - db HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 - db HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 - db HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 - db HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 - db HS_SEAFOAM_ISLANDS_B3F_BOULDER_3 - db HS_SEAFOAM_ISLANDS_B3F_BOULDER_4 + jr .hide_toggleable_objects + +.ToggleableObjectIDs: + db TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 + db TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 + db TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 + db TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 + db TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_3 + db TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_4 db -1 ; end .next_boulder_check CheckBothEventsSet EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM4_BOULDER2_DOWN_HOLE ret z - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_1 call Route20ShowObjectScript - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_2 call Route20ShowObjectScript - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_1 call Route20HideObjectScript - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_2 call Route20HideObjectScript ret Route20ShowObjectScript: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject Route20HideObjectScript: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump HideObject Route20_ScriptPointers: diff --git a/scripts/Route22.asm b/scripts/Route22.asm index 80f54290..bef22665 100644 --- a/scripts/Route22.asm +++ b/scripts/Route22.asm @@ -224,8 +224,8 @@ Route22Rival1ExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_ROUTE_22_RIVAL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_1 + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic ResetEvents EVENT_1ST_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE @@ -368,8 +368,8 @@ Route22Rival2ExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_ROUTE_22_RIVAL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_2 + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic ResetEvents EVENT_2ND_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE diff --git a/scripts/Route23.asm b/scripts/Route23.asm index 911a2ef3..07558996 100644 --- a/scripts/Route23.asm +++ b/scripts/Route23.asm @@ -12,11 +12,11 @@ Route23SetVictoryRoadBoulders: ret z ResetEvents EVENT_VICTORY_ROAD_2_BOULDER_ON_SWITCH1, EVENT_VICTORY_ROAD_2_BOULDER_ON_SWITCH2 ResetEvents EVENT_VICTORY_ROAD_3_BOULDER_ON_SWITCH1, EVENT_VICTORY_ROAD_3_BOULDER_ON_SWITCH2 - ld a, HS_VICTORY_ROAD_3F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_3F_BOULDER + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_VICTORY_ROAD_2F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_2F_BOULDER + ld [wToggleableObjectIndex], a predef_jump HideObject Route23_ScriptPointers: diff --git a/scripts/Route25.asm b/scripts/Route25.asm index a85144a8..a4210cc5 100644 --- a/scripts/Route25.asm +++ b/scripts/Route25.asm @@ -1,5 +1,5 @@ Route25_Script: - call Route25ShowHideBillScript + call Route25ToggleBillsScript call EnableAutoTextBoxDrawing ld hl, Route25TrainerHeaders ld de, Route25_ScriptPointers @@ -8,7 +8,7 @@ Route25_Script: ld [wRoute25CurScript], a ret -Route25ShowHideBillScript: +Route25ToggleBillsScript: ld hl, wCurrentMapScriptFlags bit BIT_CUR_MAP_LOADED_2, [hl] res BIT_CUR_MAP_LOADED_2, [hl] @@ -18,21 +18,21 @@ Route25ShowHideBillScript: CheckEventReuseHL EVENT_MET_BILL_2 jr nz, .met_bill ResetEventReuseHL EVENT_BILL_SAID_USE_CELL_SEPARATOR - ld a, HS_BILL_POKEMON - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_POKEMON + ld [wToggleableObjectIndex], a predef_jump ShowObject .met_bill CheckEventAfterBranchReuseHL EVENT_GOT_SS_TICKET, EVENT_MET_BILL_2 ret z SetEventReuseHL EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING - ld a, HS_NUGGET_BRIDGE_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_NUGGET_BRIDGE_GUY + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_BILL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_1 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_BILL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_2 + ld [wToggleableObjectIndex], a predef_jump ShowObject Route25_ScriptPointers: diff --git a/scripts/SSAnne2F.asm b/scripts/SSAnne2F.asm index ee860fd9..32ea70d1 100644 --- a/scripts/SSAnne2F.asm +++ b/scripts/SSAnne2F.asm @@ -33,8 +33,8 @@ SSAnne2FDefaultScript: call PlayMusic ld a, [wCoordIndex] ldh [hSavedCoordIndex], a - ld a, HS_SS_ANNE_2F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_SS_ANNE_2F_RIVAL + ld [wToggleableObjectIndex], a predef ShowObject call Delay3 ld a, SSANNE2F_RIVAL @@ -169,8 +169,8 @@ SSAnne2FRivalExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_SS_ANNE_2F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_SS_ANNE_2F_RIVAL + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic ld a, SCRIPT_SSANNE2F_NOOP diff --git a/scripts/SeafoamIslands1F.asm b/scripts/SeafoamIslands1F.asm index a3ec3c99..1e099f76 100644 --- a/scripts/SeafoamIslands1F.asm +++ b/scripts/SeafoamIslands1F.asm @@ -13,23 +13,23 @@ SeafoamIslands1F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM1_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM1_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM1_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject .noBoulderWasPushed ld a, SEAFOAM_ISLANDS_B1F diff --git a/scripts/SeafoamIslandsB1F.asm b/scripts/SeafoamIslandsB1F.asm index 0bc2ee18..7558e95b 100644 --- a/scripts/SeafoamIslandsB1F.asm +++ b/scripts/SeafoamIslandsB1F.asm @@ -12,23 +12,23 @@ SeafoamIslandsB1F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM2_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM2_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM2_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject .noBoulderWasPushed ld a, SEAFOAM_ISLANDS_B2F diff --git a/scripts/SeafoamIslandsB2F.asm b/scripts/SeafoamIslandsB2F.asm index 48b7979d..2cdb705e 100644 --- a/scripts/SeafoamIslandsB2F.asm +++ b/scripts/SeafoamIslandsB2F.asm @@ -12,23 +12,23 @@ SeafoamIslandsB2F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_3 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_3 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM3_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_4 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_4 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject .noBoulderWasPushed ld a, SEAFOAM_ISLANDS_B3F diff --git a/scripts/SeafoamIslandsB3F.asm b/scripts/SeafoamIslandsB3F.asm index 671d7719..d8e253b6 100644 --- a/scripts/SeafoamIslandsB3F.asm +++ b/scripts/SeafoamIslandsB3F.asm @@ -12,23 +12,23 @@ SeafoamIslandsB3F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_1 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM4_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_2 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef ShowObject jr .runCurrentMapScript .noBoulderWasPushed diff --git a/scripts/SilphCo11F.asm b/scripts/SilphCo11F.asm index 75c545e3..a804ce6d 100644 --- a/scripts/SilphCo11F.asm +++ b/scripts/SilphCo11F.asm @@ -71,78 +71,78 @@ SilphCo11FSetUnlockedDoorEventScript: ret SilphCo11FTeamRocketLeavesScript: - ld hl, .HideMissableObjectIDs + ld hl, .HideToggleableObjectIDs .hide_loop ld a, [hli] cp $ff jr z, .done_hiding push hl - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject pop hl jr .hide_loop .done_hiding - ld hl, .ShowMissableObjectIDs + ld hl, .ShowToggleableObjectIDs .show_loop ld a, [hli] cp -1 ret z push hl - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef ShowObject pop hl jr .show_loop -.ShowMissableObjectIDs: - db HS_SAFFRON_CITY_8 - db HS_SAFFRON_CITY_9 - db HS_SAFFRON_CITY_A - db HS_SAFFRON_CITY_B - db HS_SAFFRON_CITY_C - db HS_SAFFRON_CITY_D +.ShowToggleableObjectIDs: + db TOGGLE_SAFFRON_CITY_8 + db TOGGLE_SAFFRON_CITY_9 + db TOGGLE_SAFFRON_CITY_A + db TOGGLE_SAFFRON_CITY_B + db TOGGLE_SAFFRON_CITY_C + db TOGGLE_SAFFRON_CITY_D db -1 ; end -.HideMissableObjectIDs: - db HS_SAFFRON_CITY_1 - db HS_SAFFRON_CITY_2 - db HS_SAFFRON_CITY_3 - db HS_SAFFRON_CITY_4 - db HS_SAFFRON_CITY_5 - db HS_SAFFRON_CITY_6 - db HS_SAFFRON_CITY_7 - db HS_SAFFRON_CITY_E - db HS_SAFFRON_CITY_F - db HS_SILPH_CO_2F_2 - db HS_SILPH_CO_2F_3 - db HS_SILPH_CO_2F_4 - db HS_SILPH_CO_2F_5 - db HS_SILPH_CO_3F_1 - db HS_SILPH_CO_3F_2 - db HS_SILPH_CO_4F_1 - db HS_SILPH_CO_4F_2 - db HS_SILPH_CO_4F_3 - db HS_SILPH_CO_5F_1 - db HS_SILPH_CO_5F_2 - db HS_SILPH_CO_5F_3 - db HS_SILPH_CO_5F_4 - db HS_SILPH_CO_6F_1 - db HS_SILPH_CO_6F_2 - db HS_SILPH_CO_6F_3 - db HS_SILPH_CO_7F_1 - db HS_SILPH_CO_7F_2 - db HS_SILPH_CO_7F_3 - db HS_SILPH_CO_7F_4 - db HS_SILPH_CO_8F_1 - db HS_SILPH_CO_8F_2 - db HS_SILPH_CO_8F_3 - db HS_SILPH_CO_9F_1 - db HS_SILPH_CO_9F_2 - db HS_SILPH_CO_9F_3 - db HS_SILPH_CO_10F_1 - db HS_SILPH_CO_10F_2 - db HS_SILPH_CO_11F_1 - db HS_SILPH_CO_11F_2 - db HS_SILPH_CO_11F_3 +.HideToggleableObjectIDs: + db TOGGLE_SAFFRON_CITY_1 + db TOGGLE_SAFFRON_CITY_2 + db TOGGLE_SAFFRON_CITY_3 + db TOGGLE_SAFFRON_CITY_4 + db TOGGLE_SAFFRON_CITY_5 + db TOGGLE_SAFFRON_CITY_6 + db TOGGLE_SAFFRON_CITY_7 + db TOGGLE_SAFFRON_CITY_E + db TOGGLE_SAFFRON_CITY_F + db TOGGLE_SILPH_CO_2F_2 + db TOGGLE_SILPH_CO_2F_3 + db TOGGLE_SILPH_CO_2F_4 + db TOGGLE_SILPH_CO_2F_5 + db TOGGLE_SILPH_CO_3F_1 + db TOGGLE_SILPH_CO_3F_2 + db TOGGLE_SILPH_CO_4F_1 + db TOGGLE_SILPH_CO_4F_2 + db TOGGLE_SILPH_CO_4F_3 + db TOGGLE_SILPH_CO_5F_1 + db TOGGLE_SILPH_CO_5F_2 + db TOGGLE_SILPH_CO_5F_3 + db TOGGLE_SILPH_CO_5F_4 + db TOGGLE_SILPH_CO_6F_1 + db TOGGLE_SILPH_CO_6F_2 + db TOGGLE_SILPH_CO_6F_3 + db TOGGLE_SILPH_CO_7F_1 + db TOGGLE_SILPH_CO_7F_2 + db TOGGLE_SILPH_CO_7F_3 + db TOGGLE_SILPH_CO_7F_4 + db TOGGLE_SILPH_CO_8F_1 + db TOGGLE_SILPH_CO_8F_2 + db TOGGLE_SILPH_CO_8F_3 + db TOGGLE_SILPH_CO_9F_1 + db TOGGLE_SILPH_CO_9F_2 + db TOGGLE_SILPH_CO_9F_3 + db TOGGLE_SILPH_CO_10F_1 + db TOGGLE_SILPH_CO_10F_2 + db TOGGLE_SILPH_CO_11F_1 + db TOGGLE_SILPH_CO_11F_2 + db TOGGLE_SILPH_CO_11F_3 db -1 ; end SilphCo11FResetCurScript: diff --git a/scripts/SilphCo1F.asm b/scripts/SilphCo1F.asm index fbc70d77..acb506fc 100644 --- a/scripts/SilphCo1F.asm +++ b/scripts/SilphCo1F.asm @@ -4,8 +4,8 @@ SilphCo1F_Script: ret z CheckAndSetEvent EVENT_SILPH_CO_RECEPTIONIST_AT_DESK ret nz - ld a, HS_SILPH_CO_1F_RECEPTIONIST - ld [wMissableObjectIndex], a + ld a, TOGGLE_SILPH_CO_1F_RECEPTIONIST + ld [wToggleableObjectIndex], a predef_jump ShowObject SilphCo1F_TextPointers: diff --git a/scripts/SilphCo7F.asm b/scripts/SilphCo7F.asm index 29e5fdd3..6b640fd4 100644 --- a/scripts/SilphCo7F.asm +++ b/scripts/SilphCo7F.asm @@ -255,8 +255,8 @@ SilphCo7FRivalExitScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_SILPH_CO_7F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_SILPH_CO_7F_RIVAL + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic xor a diff --git a/scripts/VictoryRoad3F.asm b/scripts/VictoryRoad3F.asm index 2b1b11c0..4a082be5 100644 --- a/scripts/VictoryRoad3F.asm +++ b/scripts/VictoryRoad3F.asm @@ -44,11 +44,11 @@ VictoryRoad3FDefaultScript: .handle_hole CheckAndSetEvent EVENT_VICTORY_ROAD_3_BOULDER_ON_SWITCH2 jr nz, .check_switch_hole - ld a, HS_VICTORY_ROAD_3F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_3F_BOULDER + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_VICTORY_ROAD_2F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_2F_BOULDER + ld [wToggleableObjectIndex], a predef_jump ShowObject .SwitchOrHoleCoords: diff --git a/scripts/ViridianGym.asm b/scripts/ViridianGym.asm index 6f195037..c2b8c362 100644 --- a/scripts/ViridianGym.asm +++ b/scripts/ViridianGym.asm @@ -161,8 +161,8 @@ ViridianGymReceiveTM27: ; deactivate gym trainers SetEventRange EVENT_BEAT_VIRIDIAN_GYM_TRAINER_0, EVENT_BEAT_VIRIDIAN_GYM_TRAINER_7 - ld a, HS_ROUTE_22_RIVAL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_2 + ld [wToggleableObjectIndex], a predef ShowObject SetEvents EVENT_2ND_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE jp ViridianGymResetScripts @@ -219,8 +219,8 @@ ViridianGymGiovanniText: ld hl, .PostBattleAdviceText call PrintText call GBFadeOutToBlack - ld a, HS_VIRIDIAN_GYM_GIOVANNI - ld [wMissableObjectIndex], a + ld a, TOGGLE_VIRIDIAN_GYM_GIOVANNI + ld [wToggleableObjectIndex], a predef HideObject call UpdateSprites call Delay3 -- cgit v1.3.1-sl0p From 0e49aef88ef94b9d3e80d89e4eb718e9425045df Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Wed, 7 Jan 2026 22:05:37 -0500 Subject: Use macros to enforce "hidden object" constraints, and rename them to "hidden events" (#559) --- data/events/hidden_events.asm | 599 ++++++++++++++++++ data/events/hidden_objects.asm | 668 --------------------- data/predef_pointers.asm | 2 +- engine/events/hidden_events/bench_guys.asm | 107 ++++ engine/events/hidden_events/bills_house_pc.asm | 134 +++++ engine/events/hidden_events/blues_room.asm | 13 + engine/events/hidden_events/book_or_sculpture.asm | 21 + engine/events/hidden_events/bookshelves.asm | 39 ++ engine/events/hidden_events/cinnabar_gym_quiz.asm | 200 ++++++ engine/events/hidden_events/elevator.asm | 3 + engine/events/hidden_events/fighting_dojo.asm | 23 + engine/events/hidden_events/gym_statues.asm | 39 ++ engine/events/hidden_events/indigo_plateau_hq.asm | 10 + .../hidden_events/indigo_plateau_statues.asm | 24 + engine/events/hidden_events/magazines.asm | 8 + engine/events/hidden_events/museum_fossils.asm | 51 ++ engine/events/hidden_events/new_bike.asm | 7 + engine/events/hidden_events/oaks_lab_email.asm | 10 + engine/events/hidden_events/oaks_lab_posters.asm | 29 + engine/events/hidden_events/pokecenter_pc.asm | 11 + engine/events/hidden_events/pokemon_stuff.asm | 3 + engine/events/hidden_events/reds_room.asm | 14 + .../events/hidden_events/route_15_binoculars.asm | 14 + engine/events/hidden_events/safari_game.asm | 83 +++ engine/events/hidden_events/school_blackboard.asm | 224 +++++++ engine/events/hidden_events/school_notebooks.asm | 65 ++ engine/events/hidden_events/town_map.asm | 22 + .../events/hidden_events/vermilion_gym_trash.asm | 169 ++++++ engine/events/hidden_items.asm | 10 +- engine/events/hidden_objects/bench_guys.asm | 107 ---- engine/events/hidden_objects/bills_house_pc.asm | 134 ----- engine/events/hidden_objects/blues_room.asm | 13 - engine/events/hidden_objects/book_or_sculpture.asm | 21 - engine/events/hidden_objects/bookshelves.asm | 39 -- engine/events/hidden_objects/cinnabar_gym_quiz.asm | 200 ------ engine/events/hidden_objects/elevator.asm | 3 - engine/events/hidden_objects/fighting_dojo.asm | 23 - engine/events/hidden_objects/gym_statues.asm | 39 -- engine/events/hidden_objects/indigo_plateau_hq.asm | 10 - .../hidden_objects/indigo_plateau_statues.asm | 24 - engine/events/hidden_objects/magazines.asm | 8 - engine/events/hidden_objects/museum_fossils.asm | 51 -- engine/events/hidden_objects/new_bike.asm | 7 - engine/events/hidden_objects/oaks_lab_email.asm | 10 - engine/events/hidden_objects/oaks_lab_posters.asm | 29 - engine/events/hidden_objects/pokecenter_pc.asm | 11 - engine/events/hidden_objects/pokemon_stuff.asm | 3 - engine/events/hidden_objects/reds_room.asm | 14 - .../events/hidden_objects/route_15_binoculars.asm | 14 - engine/events/hidden_objects/safari_game.asm | 83 --- engine/events/hidden_objects/school_blackboard.asm | 224 ------- engine/events/hidden_objects/school_notebooks.asm | 65 -- engine/events/hidden_objects/town_map.asm | 22 - .../events/hidden_objects/vermilion_gym_trash.asm | 169 ------ engine/overworld/hidden_events.asm | 133 ++++ engine/overworld/hidden_objects.asm | 133 ---- engine/slots/game_corner_slots.asm | 6 +- home.asm | 2 +- home/hidden_events.asm | 39 ++ home/hidden_objects.asm | 39 -- home/overworld.asm | 4 +- layout.link | 10 +- main.asm | 62 +- ram/hram.asm | 2 +- ram/wram.asm | 12 +- scripts/GameCorner.asm | 2 +- scripts/SafariZoneGate.asm | 2 +- 67 files changed, 2151 insertions(+), 2220 deletions(-) create mode 100644 data/events/hidden_events.asm delete mode 100644 data/events/hidden_objects.asm create mode 100644 engine/events/hidden_events/bench_guys.asm create mode 100644 engine/events/hidden_events/bills_house_pc.asm create mode 100644 engine/events/hidden_events/blues_room.asm create mode 100644 engine/events/hidden_events/book_or_sculpture.asm create mode 100644 engine/events/hidden_events/bookshelves.asm create mode 100644 engine/events/hidden_events/cinnabar_gym_quiz.asm create mode 100644 engine/events/hidden_events/elevator.asm create mode 100644 engine/events/hidden_events/fighting_dojo.asm create mode 100644 engine/events/hidden_events/gym_statues.asm create mode 100644 engine/events/hidden_events/indigo_plateau_hq.asm create mode 100644 engine/events/hidden_events/indigo_plateau_statues.asm create mode 100644 engine/events/hidden_events/magazines.asm create mode 100644 engine/events/hidden_events/museum_fossils.asm create mode 100644 engine/events/hidden_events/new_bike.asm create mode 100644 engine/events/hidden_events/oaks_lab_email.asm create mode 100644 engine/events/hidden_events/oaks_lab_posters.asm create mode 100644 engine/events/hidden_events/pokecenter_pc.asm create mode 100644 engine/events/hidden_events/pokemon_stuff.asm create mode 100644 engine/events/hidden_events/reds_room.asm create mode 100644 engine/events/hidden_events/route_15_binoculars.asm create mode 100644 engine/events/hidden_events/safari_game.asm create mode 100644 engine/events/hidden_events/school_blackboard.asm create mode 100644 engine/events/hidden_events/school_notebooks.asm create mode 100644 engine/events/hidden_events/town_map.asm create mode 100644 engine/events/hidden_events/vermilion_gym_trash.asm delete mode 100644 engine/events/hidden_objects/bench_guys.asm delete mode 100644 engine/events/hidden_objects/bills_house_pc.asm delete mode 100644 engine/events/hidden_objects/blues_room.asm delete mode 100644 engine/events/hidden_objects/book_or_sculpture.asm delete mode 100644 engine/events/hidden_objects/bookshelves.asm delete mode 100644 engine/events/hidden_objects/cinnabar_gym_quiz.asm delete mode 100644 engine/events/hidden_objects/elevator.asm delete mode 100644 engine/events/hidden_objects/fighting_dojo.asm delete mode 100644 engine/events/hidden_objects/gym_statues.asm delete mode 100644 engine/events/hidden_objects/indigo_plateau_hq.asm delete mode 100644 engine/events/hidden_objects/indigo_plateau_statues.asm delete mode 100644 engine/events/hidden_objects/magazines.asm delete mode 100644 engine/events/hidden_objects/museum_fossils.asm delete mode 100644 engine/events/hidden_objects/new_bike.asm delete mode 100644 engine/events/hidden_objects/oaks_lab_email.asm delete mode 100644 engine/events/hidden_objects/oaks_lab_posters.asm delete mode 100644 engine/events/hidden_objects/pokecenter_pc.asm delete mode 100644 engine/events/hidden_objects/pokemon_stuff.asm delete mode 100644 engine/events/hidden_objects/reds_room.asm delete mode 100644 engine/events/hidden_objects/route_15_binoculars.asm delete mode 100644 engine/events/hidden_objects/safari_game.asm delete mode 100644 engine/events/hidden_objects/school_blackboard.asm delete mode 100644 engine/events/hidden_objects/school_notebooks.asm delete mode 100644 engine/events/hidden_objects/town_map.asm delete mode 100644 engine/events/hidden_objects/vermilion_gym_trash.asm create mode 100644 engine/overworld/hidden_events.asm delete mode 100644 engine/overworld/hidden_objects.asm create mode 100644 home/hidden_events.asm delete mode 100644 home/hidden_objects.asm (limited to 'data') diff --git a/data/events/hidden_events.asm b/data/events/hidden_events.asm new file mode 100644 index 00000000..89c74923 --- /dev/null +++ b/data/events/hidden_events.asm @@ -0,0 +1,599 @@ +DEF num_hidden_event_maps = 0 + +MACRO hidden_event_map + db \1 ; map id + DEF HIDDENEVENTMAP{num_hidden_event_maps} EQUS "\1" + DEF num_hidden_event_maps += 1 +ENDM + +HiddenEventMaps: + hidden_event_map REDS_HOUSE_2F + hidden_event_map BLUES_HOUSE + hidden_event_map OAKS_LAB + hidden_event_map VIRIDIAN_POKECENTER + hidden_event_map VIRIDIAN_MART + hidden_event_map VIRIDIAN_SCHOOL_HOUSE + hidden_event_map VIRIDIAN_GYM + hidden_event_map MUSEUM_1F + hidden_event_map PEWTER_GYM + hidden_event_map PEWTER_MART + hidden_event_map PEWTER_POKECENTER + hidden_event_map CERULEAN_POKECENTER + hidden_event_map CERULEAN_GYM + hidden_event_map CERULEAN_MART + hidden_event_map LAVENDER_POKECENTER + hidden_event_map VERMILION_POKECENTER + hidden_event_map VERMILION_GYM + hidden_event_map CELADON_MANSION_2F + hidden_event_map CELADON_POKECENTER + hidden_event_map CELADON_GYM + hidden_event_map GAME_CORNER + hidden_event_map CELADON_HOTEL + hidden_event_map FUCHSIA_POKECENTER + hidden_event_map FUCHSIA_GYM + hidden_event_map CINNABAR_GYM + hidden_event_map CINNABAR_POKECENTER + hidden_event_map SAFFRON_GYM + hidden_event_map MT_MOON_POKECENTER + hidden_event_map ROCK_TUNNEL_POKECENTER + hidden_event_map TRADE_CENTER + hidden_event_map COLOSSEUM + hidden_event_map VIRIDIAN_FOREST + hidden_event_map MT_MOON_B2F + hidden_event_map INDIGO_PLATEAU + hidden_event_map ROUTE_25 + hidden_event_map ROUTE_9 + hidden_event_map SS_ANNE_KITCHEN + hidden_event_map SS_ANNE_B1F_ROOMS + hidden_event_map ROCKET_HIDEOUT_B1F + hidden_event_map ROCKET_HIDEOUT_B3F + hidden_event_map ROCKET_HIDEOUT_B4F + hidden_event_map SAFFRON_POKECENTER + hidden_event_map POKEMON_TOWER_5F + hidden_event_map ROUTE_13 + hidden_event_map SAFARI_ZONE_GATE + hidden_event_map SAFARI_ZONE_WEST + hidden_event_map SILPH_CO_5F + hidden_event_map SILPH_CO_9F + hidden_event_map COPYCATS_HOUSE_2F + hidden_event_map CERULEAN_CAVE_1F + hidden_event_map CERULEAN_CAVE_B1F + hidden_event_map POWER_PLANT + hidden_event_map SEAFOAM_ISLANDS_B2F + hidden_event_map SEAFOAM_ISLANDS_B4F + hidden_event_map POKEMON_MANSION_1F + hidden_event_map POKEMON_MANSION_3F + hidden_event_map ROUTE_23 + hidden_event_map VICTORY_ROAD_2F + hidden_event_map UNUSED_MAP_6F + hidden_event_map BILLS_HOUSE + hidden_event_map VIRIDIAN_CITY + hidden_event_map SAFARI_ZONE_WEST_REST_HOUSE + hidden_event_map SAFARI_ZONE_EAST_REST_HOUSE + hidden_event_map SAFARI_ZONE_NORTH_REST_HOUSE + hidden_event_map ROUTE_15_GATE_2F + hidden_event_map MR_FUJIS_HOUSE + hidden_event_map CELADON_MANSION_ROOF_HOUSE + hidden_event_map FIGHTING_DOJO + hidden_event_map ROUTE_10 + hidden_event_map INDIGO_PLATEAU_LOBBY + hidden_event_map CINNABAR_LAB_FOSSIL_ROOM + hidden_event_map BIKE_SHOP + hidden_event_map ROUTE_11 + hidden_event_map ROUTE_12 + hidden_event_map POKEMON_MANSION_2F + hidden_event_map POKEMON_MANSION_B1F + hidden_event_map SILPH_CO_11F + hidden_event_map ROUTE_17 + hidden_event_map UNDERGROUND_PATH_NORTH_SOUTH + hidden_event_map UNDERGROUND_PATH_WEST_EAST + hidden_event_map CELADON_CITY + hidden_event_map SEAFOAM_ISLANDS_B3F + hidden_event_map VERMILION_CITY + hidden_event_map CERULEAN_CITY + hidden_event_map ROUTE_4 + db -1 ; end + +HiddenEventPointers: +; each of these pointers is for the corresponding map in HiddenEventMaps +FOR n, num_hidden_event_maps + dw HiddenEventsFor_{HIDDENEVENTMAP{n}} +ENDR + +MACRO hidden_events_for + HiddenEventsFor_\1: +ENDM + +MACRO hidden_event + db \2 ; y coord + db \1 ; x coord + db \4 ; function argument + dba \3 ; event function +ENDM + +MACRO hidden_text_predef + db \2 ; y coord + db \1 ; x coord + db_tx_pre \4 ; text id + dba \3 ; event function +ENDM + +; Some hidden events use SPRITE_FACING_* values, +; but these do not actually prevent the player +; from interacting with them in any direction. +DEF ANY_FACING EQU $d0 + + hidden_events_for TRADE_CENTER + hidden_event 5, 4, CableClubRightGameboy, ANY_FACING + hidden_event 4, 4, CableClubLeftGameboy, ANY_FACING + db -1 ; end + + hidden_events_for COLOSSEUM + hidden_event 5, 4, CableClubRightGameboy, ANY_FACING + hidden_event 4, 4, CableClubLeftGameboy, ANY_FACING + db -1 ; end + + hidden_events_for REDS_HOUSE_2F + hidden_event 0, 1, OpenRedsPC, SPRITE_FACING_UP + hidden_event 3, 5, PrintRedSNESText, ANY_FACING + db -1 ; end + + hidden_events_for BLUES_HOUSE + hidden_event 0, 1, PrintBookcaseText, SPRITE_FACING_UP + hidden_event 1, 1, PrintBookcaseText, SPRITE_FACING_UP + hidden_event 7, 1, PrintBookcaseText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for OAKS_LAB + hidden_event 4, 0, DisplayOakLabLeftPoster, SPRITE_FACING_UP + hidden_event 5, 0, DisplayOakLabRightPoster, SPRITE_FACING_UP + hidden_event 0, 1, DisplayOakLabEmailText, SPRITE_FACING_UP + hidden_event 1, 1, DisplayOakLabEmailText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VIRIDIAN_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VIRIDIAN_MART + db -1 ; end + + hidden_events_for VIRIDIAN_SCHOOL_HOUSE + hidden_text_predef 3, 4, PrintNotebookText, ViridianSchoolNotebook + hidden_text_predef 3, 0, PrintBlackboardLinkCableText, ViridianSchoolBlackboard + db -1 ; end + + hidden_events_for VIRIDIAN_GYM + hidden_event 15, 15, GymStatues, SPRITE_FACING_UP + hidden_event 18, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for MUSEUM_1F + hidden_event 2, 3, AerodactylFossil, SPRITE_FACING_UP + hidden_event 2, 6, KabutopsFossil, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for PEWTER_GYM + hidden_event 3, 10, GymStatues, SPRITE_FACING_UP + hidden_event 6, 10, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for PEWTER_MART + db -1 ; end + + hidden_events_for PEWTER_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CERULEAN_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CERULEAN_GYM + hidden_event 3, 11, GymStatues, SPRITE_FACING_UP + hidden_event 6, 11, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CERULEAN_MART + db -1 ; end + + hidden_events_for LAVENDER_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VERMILION_POKECENTER + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VERMILION_GYM + hidden_event 3, 14, GymStatues, SPRITE_FACING_UP + hidden_event 6, 14, GymStatues, SPRITE_FACING_UP + hidden_event 6, 1, PrintTrashText, SPRITE_FACING_DOWN + ; GymTrashScript argument: [wGymTrashCanIndex] + hidden_event 1, 7, GymTrashScript, 0 + hidden_event 1, 9, GymTrashScript, 1 + hidden_event 1, 11, GymTrashScript, 2 + hidden_event 3, 7, GymTrashScript, 3 + hidden_event 3, 9, GymTrashScript, 4 + hidden_event 3, 11, GymTrashScript, 5 + hidden_event 5, 7, GymTrashScript, 6 + hidden_event 5, 9, GymTrashScript, 7 + hidden_event 5, 11, GymTrashScript, 8 + hidden_event 7, 7, GymTrashScript, 9 + hidden_event 7, 9, GymTrashScript, 10 + hidden_event 7, 11, GymTrashScript, 11 + hidden_event 9, 7, GymTrashScript, 12 + hidden_event 9, 9, GymTrashScript, 13 + hidden_event 9, 11, GymTrashScript, 14 + db -1 ; end + + hidden_events_for CELADON_MANSION_2F + hidden_event 0, 5, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CELADON_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CELADON_GYM + hidden_event 3, 15, GymStatues, SPRITE_FACING_UP + hidden_event 6, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for GAME_CORNER + hidden_event 18, 15, StartSlotMachine, ANY_FACING + hidden_event 18, 14, StartSlotMachine, ANY_FACING + hidden_event 18, 13, StartSlotMachine, ANY_FACING + hidden_event 18, 12, StartSlotMachine, ANY_FACING + hidden_event 18, 11, StartSlotMachine, ANY_FACING + hidden_event 18, 10, StartSlotMachine, SLOTS_SOMEONESKEYS + hidden_event 13, 10, StartSlotMachine, ANY_FACING + hidden_event 13, 11, StartSlotMachine, ANY_FACING + hidden_event 13, 12, StartSlotMachine, SLOTS_OUTTOLUNCH + hidden_event 13, 13, StartSlotMachine, ANY_FACING + hidden_event 13, 14, StartSlotMachine, ANY_FACING + hidden_event 13, 15, StartSlotMachine, ANY_FACING + hidden_event 12, 15, StartSlotMachine, ANY_FACING + hidden_event 12, 14, StartSlotMachine, ANY_FACING + hidden_event 12, 13, StartSlotMachine, ANY_FACING + hidden_event 12, 12, StartSlotMachine, ANY_FACING + hidden_event 12, 11, StartSlotMachine, ANY_FACING + hidden_event 12, 10, StartSlotMachine, ANY_FACING + hidden_event 7, 10, StartSlotMachine, ANY_FACING + hidden_event 7, 11, StartSlotMachine, ANY_FACING + hidden_event 7, 12, StartSlotMachine, ANY_FACING + hidden_event 7, 13, StartSlotMachine, ANY_FACING + hidden_event 7, 14, StartSlotMachine, ANY_FACING + hidden_event 7, 15, StartSlotMachine, ANY_FACING + hidden_event 6, 15, StartSlotMachine, ANY_FACING + hidden_event 6, 14, StartSlotMachine, ANY_FACING + hidden_event 6, 13, StartSlotMachine, ANY_FACING + hidden_event 6, 12, StartSlotMachine, SLOTS_OUTOFORDER + hidden_event 6, 11, StartSlotMachine, ANY_FACING + hidden_event 6, 10, StartSlotMachine, ANY_FACING + hidden_event 1, 10, StartSlotMachine, ANY_FACING + hidden_event 1, 11, StartSlotMachine, ANY_FACING + hidden_event 1, 12, StartSlotMachine, ANY_FACING + hidden_event 1, 13, StartSlotMachine, ANY_FACING + hidden_event 1, 14, StartSlotMachine, ANY_FACING + hidden_event 1, 15, StartSlotMachine, ANY_FACING + ; HiddenCoins argument: COIN + + hidden_event 0, 8, HiddenCoins, COIN + 10 + hidden_event 1, 16, HiddenCoins, COIN + 10 + hidden_event 3, 11, HiddenCoins, COIN + 20 + hidden_event 3, 14, HiddenCoins, COIN + 10 + hidden_event 4, 12, HiddenCoins, COIN + 10 + hidden_event 9, 12, HiddenCoins, COIN + 20 + hidden_event 9, 15, HiddenCoins, COIN + 10 + hidden_event 16, 14, HiddenCoins, COIN + 10 + hidden_event 10, 16, HiddenCoins, COIN + 10 + hidden_event 11, 7, HiddenCoins, COIN + 40 + hidden_event 15, 8, HiddenCoins, COIN + 100 + hidden_event 12, 15, HiddenCoins, COIN + 10 + db -1 ; end + + hidden_events_for CELADON_HOTEL + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + db -1 ; end + + hidden_events_for FUCHSIA_POKECENTER + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for FUCHSIA_GYM + hidden_event 3, 15, GymStatues, SPRITE_FACING_UP + hidden_event 6, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CINNABAR_GYM + hidden_event 17, 13, GymStatues, SPRITE_FACING_UP + ; PrintCinnabarQuiz argument: ([hGymGateAnswer] << 4) | [hGymGateIndex] + hidden_event 15, 7, PrintCinnabarQuiz, (FALSE << 4) | 1 + hidden_event 10, 1, PrintCinnabarQuiz, (TRUE << 4) | 2 + hidden_event 9, 7, PrintCinnabarQuiz, (TRUE << 4) | 3 + hidden_event 9, 13, PrintCinnabarQuiz, (TRUE << 4) | 4 + hidden_event 1, 13, PrintCinnabarQuiz, (FALSE << 4) | 5 + hidden_event 1, 7, PrintCinnabarQuiz, (TRUE << 4) | 6 + db -1 ; end + + hidden_events_for CINNABAR_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for SAFFRON_GYM + hidden_event 9, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for MT_MOON_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for ROCK_TUNNEL_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VIRIDIAN_FOREST + hidden_event 1, 18, HiddenItems, POTION + hidden_event 16, 42, HiddenItems, ANTIDOTE + db -1 ; end + + hidden_events_for MT_MOON_B2F + hidden_event 18, 12, HiddenItems, MOON_STONE + hidden_event 33, 9, HiddenItems, ETHER + db -1 ; end + + hidden_events_for INDIGO_PLATEAU + hidden_event 8, 13, PrintIndigoPlateauHQText, $ff ; inaccessible + hidden_event 11, 13, PrintIndigoPlateauHQText, SPRITE_FACING_DOWN ; inaccessible + db -1 ; end + + hidden_events_for ROUTE_25 + hidden_event 38, 3, HiddenItems, ETHER + hidden_event 10, 1, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for ROUTE_9 + hidden_event 14, 7, HiddenItems, ETHER + db -1 ; end + + hidden_events_for SS_ANNE_KITCHEN + hidden_event 13, 5, PrintTrashText, SPRITE_FACING_DOWN + hidden_event 13, 7, PrintTrashText, SPRITE_FACING_DOWN + hidden_event 13, 9, HiddenItems, GREAT_BALL + db -1 ; end + + hidden_events_for SS_ANNE_B1F_ROOMS + hidden_event 3, 1, HiddenItems, HYPER_POTION + db -1 ; end + + hidden_events_for ROUTE_10 + hidden_event 9, 17, HiddenItems, SUPER_POTION + hidden_event 16, 53, HiddenItems, MAX_ETHER + db -1 ; end + + hidden_events_for ROCKET_HIDEOUT_B1F + hidden_event 21, 15, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for ROCKET_HIDEOUT_B3F + hidden_event 27, 17, HiddenItems, NUGGET + db -1 ; end + + hidden_events_for ROCKET_HIDEOUT_B4F + hidden_event 25, 1, HiddenItems, SUPER_POTION + db -1 ; end + + hidden_events_for SAFFRON_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_TOWER_5F + hidden_event 4, 12, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for ROUTE_13 + hidden_event 1, 14, HiddenItems, PP_UP + hidden_event 16, 13, HiddenItems, CALCIUM + db -1 ; end + + hidden_events_for SAFARI_ZONE_GATE + hidden_event 10, 1, HiddenItems, NUGGET ; inaccessible + db -1 ; end + + hidden_events_for SAFARI_ZONE_WEST + hidden_event 6, 5, HiddenItems, REVIVE + db -1 ; end + + hidden_events_for SILPH_CO_5F + hidden_event 12, 3, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for SILPH_CO_9F + hidden_event 2, 15, HiddenItems, MAX_POTION + db -1 ; end + + hidden_events_for COPYCATS_HOUSE_2F + hidden_event 1, 1, HiddenItems, NUGGET + db -1 ; end + + hidden_events_for CERULEAN_CAVE_1F + hidden_event 14, 11, HiddenItems, RARE_CANDY + db -1 ; end + + hidden_events_for CERULEAN_CAVE_B1F + hidden_event 27, 3, HiddenItems, ULTRA_BALL + db -1 ; end + + hidden_events_for POWER_PLANT + hidden_event 17, 16, HiddenItems, MAX_ELIXER + hidden_event 12, 1, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for SEAFOAM_ISLANDS_B2F + hidden_event 15, 15, HiddenItems, NUGGET + db -1 ; end + + hidden_events_for SEAFOAM_ISLANDS_B4F + hidden_event 25, 17, HiddenItems, ULTRA_BALL + db -1 ; end + + hidden_events_for POKEMON_MANSION_1F + hidden_event 8, 16, HiddenItems, MOON_STONE + hidden_event 2, 5, Mansion1Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_MANSION_2F + hidden_event 2, 11, Mansion2Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_MANSION_3F + hidden_event 1, 9, HiddenItems, MAX_REVIVE + hidden_event 10, 5, Mansion3Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_MANSION_B1F + hidden_event 1, 9, HiddenItems, RARE_CANDY + hidden_event 20, 3, Mansion4Script_Switches, SPRITE_FACING_UP + hidden_event 18, 25, Mansion4Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for ROUTE_23 + hidden_event 9, 44, HiddenItems, FULL_RESTORE + hidden_event 19, 70, HiddenItems, ULTRA_BALL + hidden_event 8, 90, HiddenItems, MAX_ETHER + db -1 ; end + + hidden_events_for VICTORY_ROAD_2F + hidden_event 5, 2, HiddenItems, ULTRA_BALL + hidden_event 26, 7, HiddenItems, FULL_RESTORE + db -1 ; end + + hidden_events_for UNUSED_MAP_6F + hidden_event 14, 11, HiddenItems, MAX_ELIXER + db -1 ; end + + hidden_events_for BILLS_HOUSE + hidden_event 1, 4, BillsHousePC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VIRIDIAN_CITY + hidden_event 14, 4, HiddenItems, POTION + db -1 ; end + + hidden_events_for SAFARI_ZONE_WEST_REST_HOUSE + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for SAFARI_ZONE_EAST_REST_HOUSE + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for SAFARI_ZONE_NORTH_REST_HOUSE + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for ROUTE_15_GATE_2F + hidden_event 1, 2, Route15GateLeftBinoculars, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for MR_FUJIS_HOUSE + hidden_event 0, 1, PrintMagazinesText, SPRITE_FACING_DOWN + hidden_event 1, 1, PrintMagazinesText, SPRITE_FACING_DOWN + hidden_event 7, 1, PrintMagazinesText, SPRITE_FACING_DOWN + db -1 ; end + + hidden_events_for CELADON_MANSION_ROOF_HOUSE + hidden_text_predef 3, 0, PrintBlackboardLinkCableText, LinkCableHelp + hidden_text_predef 4, 0, PrintBlackboardLinkCableText, LinkCableHelp + hidden_text_predef 3, 4, PrintNotebookText, TMNotebook + db -1 ; end + + hidden_events_for FIGHTING_DOJO + hidden_event 3, 9, PrintFightingDojoText, SPRITE_FACING_UP + hidden_event 6, 9, PrintFightingDojoText, SPRITE_FACING_UP + hidden_event 4, 0, PrintFightingDojoText2, SPRITE_FACING_UP + hidden_event 5, 0, PrintFightingDojoText3, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for INDIGO_PLATEAU_LOBBY + hidden_event 15, 7, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CINNABAR_LAB_FOSSIL_ROOM + hidden_event 0, 4, OpenPokemonCenterPC, SPRITE_FACING_UP + hidden_event 2, 4, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for BIKE_SHOP + hidden_event 1, 0, PrintNewBikeText, ANY_FACING + hidden_event 2, 1, PrintNewBikeText, ANY_FACING + hidden_event 1, 2, PrintNewBikeText, ANY_FACING + hidden_event 3, 2, PrintNewBikeText, ANY_FACING + hidden_event 0, 4, PrintNewBikeText, ANY_FACING + hidden_event 1, 5, PrintNewBikeText, ANY_FACING + db -1 ; end + + hidden_events_for ROUTE_11 + hidden_event 48, 5, HiddenItems, ESCAPE_ROPE + db -1 ; end + + hidden_events_for ROUTE_12 + hidden_event 2, 63, HiddenItems, HYPER_POTION + db -1 ; end + + hidden_events_for SILPH_CO_11F + hidden_event 10, 12, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for ROUTE_17 + hidden_event 15, 14, HiddenItems, RARE_CANDY + hidden_event 8, 45, HiddenItems, FULL_RESTORE + hidden_event 17, 72, HiddenItems, PP_UP + hidden_event 4, 91, HiddenItems, MAX_REVIVE + hidden_event 8, 121, HiddenItems, MAX_ELIXER + db -1 ; end + + hidden_events_for UNDERGROUND_PATH_NORTH_SOUTH + hidden_event 3, 4, HiddenItems, FULL_RESTORE + hidden_event 4, 34, HiddenItems, X_SPECIAL + db -1 ; end + + hidden_events_for UNDERGROUND_PATH_WEST_EAST + hidden_event 12, 2, HiddenItems, NUGGET + hidden_event 21, 5, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for CELADON_CITY + hidden_event 48, 15, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for SEAFOAM_ISLANDS_B3F + hidden_event 9, 16, HiddenItems, MAX_ELIXER + db -1 ; end + + hidden_events_for VERMILION_CITY + hidden_event 14, 11, HiddenItems, MAX_ETHER + db -1 ; end + + hidden_events_for CERULEAN_CITY + hidden_event 15, 8, HiddenItems, RARE_CANDY + db -1 ; end + + hidden_events_for ROUTE_4 + hidden_event 40, 3, HiddenItems, GREAT_BALL + db -1 ; end diff --git a/data/events/hidden_objects.asm b/data/events/hidden_objects.asm deleted file mode 100644 index 55e33731..00000000 --- a/data/events/hidden_objects.asm +++ /dev/null @@ -1,668 +0,0 @@ -HiddenObjectMaps: - db REDS_HOUSE_2F - db BLUES_HOUSE - db OAKS_LAB - db VIRIDIAN_POKECENTER - db VIRIDIAN_MART - db VIRIDIAN_SCHOOL_HOUSE - db VIRIDIAN_GYM - db MUSEUM_1F - db PEWTER_GYM - db PEWTER_MART - db PEWTER_POKECENTER - db CERULEAN_POKECENTER - db CERULEAN_GYM - db CERULEAN_MART - db LAVENDER_POKECENTER - db VERMILION_POKECENTER - db VERMILION_GYM - db CELADON_MANSION_2F - db CELADON_POKECENTER - db CELADON_GYM - db GAME_CORNER - db CELADON_HOTEL - db FUCHSIA_POKECENTER - db FUCHSIA_GYM - db CINNABAR_GYM - db CINNABAR_POKECENTER - db SAFFRON_GYM - db MT_MOON_POKECENTER - db ROCK_TUNNEL_POKECENTER - db TRADE_CENTER - db COLOSSEUM - db VIRIDIAN_FOREST - db MT_MOON_B2F - db INDIGO_PLATEAU - db ROUTE_25 - db ROUTE_9 - db SS_ANNE_KITCHEN - db SS_ANNE_B1F_ROOMS - db ROCKET_HIDEOUT_B1F - db ROCKET_HIDEOUT_B3F - db ROCKET_HIDEOUT_B4F - db SAFFRON_POKECENTER - db POKEMON_TOWER_5F - db ROUTE_13 - db SAFARI_ZONE_GATE - db SAFARI_ZONE_WEST - db SILPH_CO_5F - db SILPH_CO_9F - db COPYCATS_HOUSE_2F - db CERULEAN_CAVE_1F - db CERULEAN_CAVE_B1F - db POWER_PLANT - db SEAFOAM_ISLANDS_B2F - db SEAFOAM_ISLANDS_B4F - db POKEMON_MANSION_1F - db POKEMON_MANSION_3F - db ROUTE_23 - db VICTORY_ROAD_2F - db UNUSED_MAP_6F - db BILLS_HOUSE - db VIRIDIAN_CITY - db SAFARI_ZONE_WEST_REST_HOUSE - db SAFARI_ZONE_EAST_REST_HOUSE - db SAFARI_ZONE_NORTH_REST_HOUSE - db ROUTE_15_GATE_2F - db MR_FUJIS_HOUSE - db CELADON_MANSION_ROOF_HOUSE - db FIGHTING_DOJO - db ROUTE_10 - db INDIGO_PLATEAU_LOBBY - db CINNABAR_LAB_FOSSIL_ROOM - db BIKE_SHOP - db ROUTE_11 - db ROUTE_12 - db POKEMON_MANSION_2F - db POKEMON_MANSION_B1F - db SILPH_CO_11F - db ROUTE_17 - db UNDERGROUND_PATH_NORTH_SOUTH - db UNDERGROUND_PATH_WEST_EAST - db CELADON_CITY - db SEAFOAM_ISLANDS_B3F - db VERMILION_CITY - db CERULEAN_CITY - db ROUTE_4 - db -1 ; end - -HiddenObjectPointers: -; each of these pointers is for the corresponding map in HiddenObjectMaps - dw RedsHouse2FHiddenObjects - dw BluesHouseHiddenObjects - dw OaksLabHiddenObjects - dw ViridianPokecenterHiddenObjects - dw ViridianMartHiddenObjects - dw ViridianSchoolHiddenObjects - dw ViridianGymHiddenObjects - dw Museum1FHiddenObjects - dw PewterGymHiddenObjects - dw PewterMartHiddenObjects - dw PewterPokecenterHiddenObjects - dw CeruleanPokecenterHiddenObjects - dw CeruleanGymHiddenObjects - dw CeruleanMartHiddenObjects - dw LavenderPokecenterHiddenObjects - dw VermilionPokecenterHiddenObjects - dw VermilionGymHiddenObjects - dw CeladonMansion2HiddenObjects - dw CeladonPokecenterHiddenObjects - dw CeladonGymHiddenObjects - dw GameCornerHiddenObjects - dw CeladonHotelHiddenObjects - dw FuchsiaPokecenterHiddenObjects - dw FuchsiaGymHiddenObjects - dw CinnabarGymHiddenObjects - dw CinnabarPokecenterHiddenObjects - dw SaffronGymHiddenObjects - dw MtMoonPokecenterHiddenObjects - dw RockTunnelPokecenterHiddenObjects - dw TradeCenterHiddenObjects - dw ColosseumHiddenObjects - dw ViridianForestHiddenObjects - dw MtMoon3HiddenObjects - dw IndigoPlateauHiddenObjects - dw Route25HiddenObjects - dw Route9HiddenObjects - dw SSAnne6HiddenObjects - dw SSAnne10HiddenObjects - dw RocketHideout1HiddenObjects - dw RocketHideout3HiddenObjects - dw RocketHideout4HiddenObjects - dw SaffronPokecenterHiddenObjects - dw PokemonTower5HiddenObjects - dw Route13HiddenObjects - dw SafariZoneEntranceHiddenObjects - dw SafariZoneWestHiddenObjects - dw SilphCo5FHiddenObjects - dw SilphCo9FHiddenObjects - dw CopycatsHouse2FHiddenObjects - dw CeruleanCave1HiddenObjects - dw CeruleanCave3HiddenObjects - dw PowerPlantHiddenObjects - dw SeafoamIslands3HiddenObjects - dw SeafoamIslands5HiddenObjects - dw Mansion1HiddenObjects - dw Mansion3HiddenObjects - dw Route23HiddenObjects - dw VictoryRoad2HiddenObjects - dw Unused6FHiddenObjects - dw BillsHouseHiddenObjects - dw ViridianCityHiddenObjects - dw SafariZoneRestHouse2HiddenObjects - dw SafariZoneRestHouse3HiddenObjects - dw SafariZoneRestHouse4HiddenObjects - dw Route15GateUpstairsHiddenObjects - dw LavenderHouse1HiddenObjects - dw CeladonMansion5HiddenObjects - dw FightingDojoHiddenObjects - dw Route10HiddenObjects - dw IndigoPlateauLobbyHiddenObjects - dw CinnabarLab4HiddenObjects - dw BikeShopHiddenObjects - dw Route11HiddenObjects - dw Route12HiddenObjects - dw Mansion2HiddenObjects - dw Mansion4HiddenObjects - dw SilphCo11FHiddenObjects - dw Route17HiddenObjects - dw UndergroundPathNsHiddenObjects - dw UndergroundPathWeHiddenObjects - dw CeladonCityHiddenObjects - dw SeafoamIslands4HiddenObjects - dw VermilionCityHiddenObjects - dw CeruleanCityHiddenObjects - dw Route4HiddenObjects - -MACRO hidden_object - db \2 ; y coord - db \1 ; x coord - db \3 ; item id - dba \4 ; object routine -ENDM - -MACRO hidden_text_predef - db \2 ; y coord - db \1 ; x coord - db_tx_pre \3 ; text id - dba \4 ; object routine -ENDM - -; Some hidden objects use SPRITE_FACING_* values, -; but these do not actually prevent the player -; from interacting with them in any direction. -DEF ANY_FACING EQU $d0 - -TradeCenterHiddenObjects: - hidden_object 5, 4, ANY_FACING, CableClubRightGameboy - hidden_object 4, 4, ANY_FACING, CableClubLeftGameboy - db -1 ; end - -ColosseumHiddenObjects: - hidden_object 5, 4, ANY_FACING, CableClubRightGameboy - hidden_object 4, 4, ANY_FACING, CableClubLeftGameboy - db -1 ; end - -RedsHouse2FHiddenObjects: - hidden_object 0, 1, SPRITE_FACING_UP, OpenRedsPC - hidden_object 3, 5, ANY_FACING, PrintRedSNESText - db -1 ; end - -BluesHouseHiddenObjects: - hidden_object 0, 1, SPRITE_FACING_UP, PrintBookcaseText - hidden_object 1, 1, SPRITE_FACING_UP, PrintBookcaseText - hidden_object 7, 1, SPRITE_FACING_UP, PrintBookcaseText - db -1 ; end - -OaksLabHiddenObjects: - hidden_object 4, 0, SPRITE_FACING_UP, DisplayOakLabLeftPoster - hidden_object 5, 0, SPRITE_FACING_UP, DisplayOakLabRightPoster - hidden_object 0, 1, SPRITE_FACING_UP, DisplayOakLabEmailText - hidden_object 1, 1, SPRITE_FACING_UP, DisplayOakLabEmailText - db -1 ; end - -ViridianPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -ViridianMartHiddenObjects: - db -1 ; end - -ViridianSchoolHiddenObjects: - hidden_text_predef 3, 4, ViridianSchoolNotebook, PrintNotebookText - hidden_text_predef 3, 0, ViridianSchoolBlackboard, PrintBlackboardLinkCableText - db -1 ; end - -ViridianGymHiddenObjects: - hidden_object 15, 15, SPRITE_FACING_UP, GymStatues - hidden_object 18, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -Museum1FHiddenObjects: - hidden_object 2, 3, SPRITE_FACING_UP, AerodactylFossil - hidden_object 2, 6, SPRITE_FACING_UP, KabutopsFossil - db -1 ; end - -PewterGymHiddenObjects: - hidden_object 3, 10, SPRITE_FACING_UP, GymStatues - hidden_object 6, 10, SPRITE_FACING_UP, GymStatues - db -1 ; end - -PewterMartHiddenObjects: - db -1 ; end - -PewterPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeruleanPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeruleanGymHiddenObjects: - hidden_object 3, 11, SPRITE_FACING_UP, GymStatues - hidden_object 6, 11, SPRITE_FACING_UP, GymStatues - db -1 ; end - -CeruleanMartHiddenObjects: - db -1 ; end - -LavenderPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -VermilionPokecenterHiddenObjects: - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - db -1 ; end - -VermilionGymHiddenObjects: - hidden_object 3, 14, SPRITE_FACING_UP, GymStatues - hidden_object 6, 14, SPRITE_FACING_UP, GymStatues - hidden_object 6, 1, SPRITE_FACING_DOWN, PrintTrashText - ; third param: [wGymTrashCanIndex] - hidden_object 1, 7, 0, GymTrashScript - hidden_object 1, 9, 1, GymTrashScript - hidden_object 1, 11, 2, GymTrashScript - hidden_object 3, 7, 3, GymTrashScript - hidden_object 3, 9, 4, GymTrashScript - hidden_object 3, 11, 5, GymTrashScript - hidden_object 5, 7, 6, GymTrashScript - hidden_object 5, 9, 7, GymTrashScript - hidden_object 5, 11, 8, GymTrashScript - hidden_object 7, 7, 9, GymTrashScript - hidden_object 7, 9, 10, GymTrashScript - hidden_object 7, 11, 11, GymTrashScript - hidden_object 9, 7, 12, GymTrashScript - hidden_object 9, 9, 13, GymTrashScript - hidden_object 9, 11, 14, GymTrashScript - db -1 ; end - -CeladonMansion2HiddenObjects: - hidden_object 0, 5, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeladonPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeladonGymHiddenObjects: - hidden_object 3, 15, SPRITE_FACING_UP, GymStatues - hidden_object 6, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -GameCornerHiddenObjects: - hidden_object 18, 15, ANY_FACING, StartSlotMachine - hidden_object 18, 14, ANY_FACING, StartSlotMachine - hidden_object 18, 13, ANY_FACING, StartSlotMachine - hidden_object 18, 12, ANY_FACING, StartSlotMachine - hidden_object 18, 11, ANY_FACING, StartSlotMachine - hidden_object 18, 10, SLOTS_SOMEONESKEYS, StartSlotMachine - hidden_object 13, 10, ANY_FACING, StartSlotMachine - hidden_object 13, 11, ANY_FACING, StartSlotMachine - hidden_object 13, 12, SLOTS_OUTTOLUNCH, StartSlotMachine - hidden_object 13, 13, ANY_FACING, StartSlotMachine - hidden_object 13, 14, ANY_FACING, StartSlotMachine - hidden_object 13, 15, ANY_FACING, StartSlotMachine - hidden_object 12, 15, ANY_FACING, StartSlotMachine - hidden_object 12, 14, ANY_FACING, StartSlotMachine - hidden_object 12, 13, ANY_FACING, StartSlotMachine - hidden_object 12, 12, ANY_FACING, StartSlotMachine - hidden_object 12, 11, ANY_FACING, StartSlotMachine - hidden_object 12, 10, ANY_FACING, StartSlotMachine - hidden_object 7, 10, ANY_FACING, StartSlotMachine - hidden_object 7, 11, ANY_FACING, StartSlotMachine - hidden_object 7, 12, ANY_FACING, StartSlotMachine - hidden_object 7, 13, ANY_FACING, StartSlotMachine - hidden_object 7, 14, ANY_FACING, StartSlotMachine - hidden_object 7, 15, ANY_FACING, StartSlotMachine - hidden_object 6, 15, ANY_FACING, StartSlotMachine - hidden_object 6, 14, ANY_FACING, StartSlotMachine - hidden_object 6, 13, ANY_FACING, StartSlotMachine - hidden_object 6, 12, SLOTS_OUTOFORDER, StartSlotMachine - hidden_object 6, 11, ANY_FACING, StartSlotMachine - hidden_object 6, 10, ANY_FACING, StartSlotMachine - hidden_object 1, 10, ANY_FACING, StartSlotMachine - hidden_object 1, 11, ANY_FACING, StartSlotMachine - hidden_object 1, 12, ANY_FACING, StartSlotMachine - hidden_object 1, 13, ANY_FACING, StartSlotMachine - hidden_object 1, 14, ANY_FACING, StartSlotMachine - hidden_object 1, 15, ANY_FACING, StartSlotMachine - hidden_object 0, 8, COIN+10, HiddenCoins - hidden_object 1, 16, COIN+10, HiddenCoins - hidden_object 3, 11, COIN+20, HiddenCoins - hidden_object 3, 14, COIN+10, HiddenCoins - hidden_object 4, 12, COIN+10, HiddenCoins - hidden_object 9, 12, COIN+20, HiddenCoins - hidden_object 9, 15, COIN+10, HiddenCoins - hidden_object 16, 14, COIN+10, HiddenCoins - hidden_object 10, 16, COIN+10, HiddenCoins - hidden_object 11, 7, COIN+40, HiddenCoins - hidden_object 15, 8, COIN+100, HiddenCoins - hidden_object 12, 15, COIN+10, HiddenCoins - db -1 ; end - -CeladonHotelHiddenObjects: - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - db -1 ; end - -FuchsiaPokecenterHiddenObjects: - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - db -1 ; end - -FuchsiaGymHiddenObjects: - hidden_object 3, 15, SPRITE_FACING_UP, GymStatues - hidden_object 6, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -CinnabarGymHiddenObjects: - hidden_object 17, 13, SPRITE_FACING_UP, GymStatues - ; third param: ([hGymGateAnswer] << 4) | [hGymGateIndex] - hidden_object 15, 7, (FALSE << 4) | 1, PrintCinnabarQuiz - hidden_object 10, 1, (TRUE << 4) | 2, PrintCinnabarQuiz - hidden_object 9, 7, (TRUE << 4) | 3, PrintCinnabarQuiz - hidden_object 9, 13, (TRUE << 4) | 4, PrintCinnabarQuiz - hidden_object 1, 13, (FALSE << 4) | 5, PrintCinnabarQuiz - hidden_object 1, 7, (TRUE << 4) | 6, PrintCinnabarQuiz - db -1 ; end - -CinnabarPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -SaffronGymHiddenObjects: - hidden_object 9, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -MtMoonPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -RockTunnelPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -ViridianForestHiddenObjects: - hidden_object 1, 18, POTION, HiddenItems - hidden_object 16, 42, ANTIDOTE, HiddenItems - db -1 ; end - -MtMoon3HiddenObjects: - hidden_object 18, 12, MOON_STONE, HiddenItems - hidden_object 33, 9, ETHER, HiddenItems - db -1 ; end - -IndigoPlateauHiddenObjects: - hidden_object 8, 13, $ff, PrintIndigoPlateauHQText ; inaccessible - hidden_object 11, 13, SPRITE_FACING_DOWN, PrintIndigoPlateauHQText ; inaccessible - db -1 ; end - -Route25HiddenObjects: - hidden_object 38, 3, ETHER, HiddenItems - hidden_object 10, 1, ELIXER, HiddenItems - db -1 ; end - -Route9HiddenObjects: - hidden_object 14, 7, ETHER, HiddenItems - db -1 ; end - -SSAnne6HiddenObjects: - hidden_object 13, 5, SPRITE_FACING_DOWN, PrintTrashText - hidden_object 13, 7, SPRITE_FACING_DOWN, PrintTrashText - hidden_object 13, 9, GREAT_BALL, HiddenItems - db -1 ; end - -SSAnne10HiddenObjects: - hidden_object 3, 1, HYPER_POTION, HiddenItems - db -1 ; end - -Route10HiddenObjects: - hidden_object 9, 17, SUPER_POTION, HiddenItems - hidden_object 16, 53, MAX_ETHER, HiddenItems - db -1 ; end - -RocketHideout1HiddenObjects: - hidden_object 21, 15, PP_UP, HiddenItems - db -1 ; end - -RocketHideout3HiddenObjects: - hidden_object 27, 17, NUGGET, HiddenItems - db -1 ; end - -RocketHideout4HiddenObjects: - hidden_object 25, 1, SUPER_POTION, HiddenItems - db -1 ; end - -SaffronPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -PokemonTower5HiddenObjects: - hidden_object 4, 12, ELIXER, HiddenItems - db -1 ; end - -Route13HiddenObjects: - hidden_object 1, 14, PP_UP, HiddenItems - hidden_object 16, 13, CALCIUM, HiddenItems - db -1 ; end - -SafariZoneEntranceHiddenObjects: - hidden_object 10, 1, NUGGET, HiddenItems ; inaccessible - db -1 ; end - -SafariZoneWestHiddenObjects: - hidden_object 6, 5, REVIVE, HiddenItems - db -1 ; end - -SilphCo5FHiddenObjects: - hidden_object 12, 3, ELIXER, HiddenItems - db -1 ; end - -SilphCo9FHiddenObjects: - hidden_object 2, 15, MAX_POTION, HiddenItems - db -1 ; end - -CopycatsHouse2FHiddenObjects: - hidden_object 1, 1, NUGGET, HiddenItems - db -1 ; end - -CeruleanCave1HiddenObjects: - hidden_object 14, 11, RARE_CANDY, HiddenItems - db -1 ; end - -CeruleanCave3HiddenObjects: - hidden_object 27, 3, ULTRA_BALL, HiddenItems - db -1 ; end - -PowerPlantHiddenObjects: - hidden_object 17, 16, MAX_ELIXER, HiddenItems - hidden_object 12, 1, PP_UP, HiddenItems - db -1 ; end - -SeafoamIslands3HiddenObjects: - hidden_object 15, 15, NUGGET, HiddenItems - db -1 ; end - -SeafoamIslands5HiddenObjects: - hidden_object 25, 17, ULTRA_BALL, HiddenItems - db -1 ; end - -Mansion1HiddenObjects: - hidden_object 8, 16, MOON_STONE, HiddenItems - hidden_object 2, 5, SPRITE_FACING_UP, Mansion1Script_Switches - db -1 ; end - -Mansion2HiddenObjects: - hidden_object 2, 11, SPRITE_FACING_UP, Mansion2Script_Switches - db -1 ; end - -Mansion3HiddenObjects: - hidden_object 1, 9, MAX_REVIVE, HiddenItems - hidden_object 10, 5, SPRITE_FACING_UP, Mansion3Script_Switches - db -1 ; end - -Mansion4HiddenObjects: - hidden_object 1, 9, RARE_CANDY, HiddenItems - hidden_object 20, 3, SPRITE_FACING_UP, Mansion4Script_Switches - hidden_object 18, 25, SPRITE_FACING_UP, Mansion4Script_Switches - db -1 ; end - -Route23HiddenObjects: - hidden_object 9, 44, FULL_RESTORE, HiddenItems - hidden_object 19, 70, ULTRA_BALL, HiddenItems - hidden_object 8, 90, MAX_ETHER, HiddenItems - db -1 ; end - -VictoryRoad2HiddenObjects: - hidden_object 5, 2, ULTRA_BALL, HiddenItems - hidden_object 26, 7, FULL_RESTORE, HiddenItems - db -1 ; end - -Unused6FHiddenObjects: - hidden_object 14, 11, MAX_ELIXER, HiddenItems - db -1 ; end - -BillsHouseHiddenObjects: - hidden_object 1, 4, SPRITE_FACING_UP, BillsHousePC - db -1 ; end - -ViridianCityHiddenObjects: - hidden_object 14, 4, POTION, HiddenItems - db -1 ; end - -SafariZoneRestHouse2HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -SafariZoneRestHouse3HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -SafariZoneRestHouse4HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -Route15GateUpstairsHiddenObjects: - hidden_object 1, 2, SPRITE_FACING_UP, Route15GateLeftBinoculars - db -1 ; end - -LavenderHouse1HiddenObjects: - hidden_object 0, 1, SPRITE_FACING_DOWN, PrintMagazinesText - hidden_object 1, 1, SPRITE_FACING_DOWN, PrintMagazinesText - hidden_object 7, 1, SPRITE_FACING_DOWN, PrintMagazinesText - db -1 ; end - -CeladonMansion5HiddenObjects: - hidden_text_predef 3, 0, LinkCableHelp, PrintBlackboardLinkCableText - hidden_text_predef 4, 0, LinkCableHelp, PrintBlackboardLinkCableText - hidden_text_predef 3, 4, TMNotebook, PrintNotebookText - db -1 ; end - -FightingDojoHiddenObjects: - hidden_object 3, 9, SPRITE_FACING_UP, PrintFightingDojoText - hidden_object 6, 9, SPRITE_FACING_UP, PrintFightingDojoText - hidden_object 4, 0, SPRITE_FACING_UP, PrintFightingDojoText2 - hidden_object 5, 0, SPRITE_FACING_UP, PrintFightingDojoText3 - db -1 ; end - -IndigoPlateauLobbyHiddenObjects: - hidden_object 15, 7, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CinnabarLab4HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_UP, OpenPokemonCenterPC - hidden_object 2, 4, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -BikeShopHiddenObjects: - hidden_object 1, 0, ANY_FACING, PrintNewBikeText - hidden_object 2, 1, ANY_FACING, PrintNewBikeText - hidden_object 1, 2, ANY_FACING, PrintNewBikeText - hidden_object 3, 2, ANY_FACING, PrintNewBikeText - hidden_object 0, 4, ANY_FACING, PrintNewBikeText - hidden_object 1, 5, ANY_FACING, PrintNewBikeText - db -1 ; end - -Route11HiddenObjects: - hidden_object 48, 5, ESCAPE_ROPE, HiddenItems - db -1 ; end - -Route12HiddenObjects: - hidden_object 2, 63, HYPER_POTION, HiddenItems - db -1 ; end - -SilphCo11FHiddenObjects: - hidden_object 10, 12, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -Route17HiddenObjects: - hidden_object 15, 14, RARE_CANDY, HiddenItems - hidden_object 8, 45, FULL_RESTORE, HiddenItems - hidden_object 17, 72, PP_UP, HiddenItems - hidden_object 4, 91, MAX_REVIVE, HiddenItems - hidden_object 8, 121, MAX_ELIXER, HiddenItems - db -1 ; end - -UndergroundPathNsHiddenObjects: - hidden_object 3, 4, FULL_RESTORE, HiddenItems - hidden_object 4, 34, X_SPECIAL, HiddenItems - db -1 ; end - -UndergroundPathWeHiddenObjects: - hidden_object 12, 2, NUGGET, HiddenItems - hidden_object 21, 5, ELIXER, HiddenItems - db -1 ; end - -CeladonCityHiddenObjects: - hidden_object 48, 15, PP_UP, HiddenItems - db -1 ; end - -SeafoamIslands4HiddenObjects: - hidden_object 9, 16, MAX_ELIXER, HiddenItems - db -1 ; end - -VermilionCityHiddenObjects: - hidden_object 14, 11, MAX_ETHER, HiddenItems - db -1 ; end - -CeruleanCityHiddenObjects: - hidden_object 15, 8, RARE_CANDY, HiddenItems - db -1 ; end - -Route4HiddenObjects: - hidden_object 40, 3, GREAT_BALL, HiddenItems - db -1 ; end diff --git a/data/predef_pointers.asm b/data/predef_pointers.asm index 19c3ea8f..b3bb1643 100644 --- a/data/predef_pointers.asm +++ b/data/predef_pointers.asm @@ -39,7 +39,7 @@ PredefPointers:: add_predef LearnMoveFromLevelUp add_predef LearnMove add_predef GetQuantityOfItemInBag - add_predef CheckForHiddenObjectOrBookshelfOrCardKeyDoor, $03 ; home bank + add_predef CheckForHiddenEventOrBookshelfOrCardKeyDoor, $03 ; home bank add_predef GiveItem, $03 ; home bank add_predef ChangeBGPalColor0_4Frames add_predef FindPathToPlayer diff --git a/engine/events/hidden_events/bench_guys.asm b/engine/events/hidden_events/bench_guys.asm new file mode 100644 index 00000000..e5a2a724 --- /dev/null +++ b/engine/events/hidden_events/bench_guys.asm @@ -0,0 +1,107 @@ +PrintBenchGuyText: + call EnableAutoTextBoxDrawing + ld hl, BenchGuyTextPointers + ld a, [wCurMap] + ld b, a +.loop + ld a, [hli] + cp -1 + ret z + cp b + jr z, .match + inc hl + inc hl + jr .loop +.match + ld a, [hli] + ld b, a + ld a, [wSpritePlayerStateData1FacingDirection] + cp b + + ; bug: an 'inc hl' instruction is needed before looping back. When trying to + ; talk to a bench guy from above, this Sprite Facing test will fail, and the + ; next loop iteration will be misaligned within BenchGuyTextPointers table. + ; As a result, the routine will miss the terminator byte, and continue to + ; process data beyond the table boundary. + ; It seems that it will only return after starting to read data from VRAM + ; (According to Pan Docs, during PPU mode 3, reads return garbage value, + ; usually $FF). + jr nz, .loop ; player isn't facing the bench guy + ld a, [hl] + jp PrintPredefTextID + +INCLUDE "data/events/bench_guys.asm" + +ViridianCityPokecenterBenchGuyText:: + text_far _ViridianCityPokecenterGuyText + text_end + +PewterCityPokecenterBenchGuyText:: + text_far _PewterCityPokecenterGuyText + text_end + +CeruleanCityPokecenterBenchGuyText:: + text_far _CeruleanPokecenterGuyText + text_end + +LavenderCityPokecenterBenchGuyText:: + text_far _LavenderPokecenterGuyText + text_end + +MtMoonPokecenterBenchGuyText:: + text_far _MtMoonPokecenterBenchGuyText + text_end + +RockTunnelPokecenterBenchGuyText:: + text_far _RockTunnelPokecenterGuyText + text_end + +UnusedBenchGuyText1:: + text_far _UnusedBenchGuyText1 + text_end + +UnusedBenchGuyText2:: + text_far _UnusedBenchGuyText2 + text_end + +UnusedBenchGuyText3:: + text_far _UnusedBenchGuyText3 + text_end + +VermilionCityPokecenterBenchGuyText:: + text_far _VermilionPokecenterGuyText + text_end + +CeladonCityPokecenterBenchGuyText:: + text_far _CeladonCityPokecenterGuyText + text_end + +FuchsiaCityPokecenterBenchGuyText:: + text_far _FuchsiaCityPokecenterGuyText + text_end + +CinnabarIslandPokecenterBenchGuyText:: + text_far _CinnabarPokecenterGuyText + text_end + +SaffronCityPokecenterBenchGuyText:: + text_asm + CheckEvent EVENT_BEAT_SILPH_CO_GIOVANNI + ld hl, SaffronCityPokecenterBenchGuyText2 + jr nz, .printText + ld hl, SaffronCityPokecenterBenchGuyText1 +.printText + call PrintText + jp TextScriptEnd + +SaffronCityPokecenterBenchGuyText1: + text_far _SaffronCityPokecenterGuyText1 + text_end + +SaffronCityPokecenterBenchGuyText2: + text_far _SaffronCityPokecenterGuyText2 + text_end + +CeladonCityHotelText:: + text_far _CeladonCityHotelText + text_end diff --git a/engine/events/hidden_events/bills_house_pc.asm b/engine/events/hidden_events/bills_house_pc.asm new file mode 100644 index 00000000..3972e20c --- /dev/null +++ b/engine/events/hidden_events/bills_house_pc.asm @@ -0,0 +1,134 @@ +BillsHousePC: + call EnableAutoTextBoxDrawing + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + CheckEvent EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING + jr nz, .displayBillsHousePokemonList + CheckEventReuseA EVENT_USED_CELL_SEPARATOR_ON_BILL + jr nz, .displayBillsHouseMonitorText + CheckEventReuseA EVENT_BILL_SAID_USE_CELL_SEPARATOR + jr nz, .doCellSeparator +.displayBillsHouseMonitorText + tx_pre_jump BillsHouseMonitorText +.doCellSeparator + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + tx_pre BillsHouseInitiatedText + ld c, 32 + call DelayFrames + ld a, SFX_TINK + call PlaySound + call WaitForSoundToFinish + ld c, 80 + call DelayFrames + ld a, SFX_SHRINK + call PlaySound + call WaitForSoundToFinish + ld c, 48 + call DelayFrames + ld a, SFX_TINK + call PlaySound + call WaitForSoundToFinish + ld c, 32 + call DelayFrames + ld a, SFX_GET_ITEM_1 + call PlaySound + call WaitForSoundToFinish + call PlayDefaultMusic + SetEvent EVENT_USED_CELL_SEPARATOR_ON_BILL + ret +.displayBillsHousePokemonList + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + tx_pre BillsHousePokemonList + ret + +BillsHouseMonitorText:: + text_far _BillsHouseMonitorText + text_end + +BillsHouseInitiatedText:: + text_far _BillsHouseInitiatedText + text_promptbutton + text_asm + ld a, SFX_STOP_ALL_MUSIC + ld [wNewSoundID], a + call PlaySound + ld c, 16 + call DelayFrames + ld a, SFX_SWITCH + call PlaySound + call WaitForSoundToFinish + ld c, 60 + call DelayFrames + jp TextScriptEnd + +BillsHousePokemonList:: + text_asm + call SaveScreenTilesToBuffer1 + ld hl, BillsHousePokemonListText1 + call PrintText + xor a + ld [wMenuItemOffset], a ; not used + ld [wCurrentMenuItem], a + ld [wLastMenuItem], a + ld a, PAD_A | PAD_B + ld [wMenuWatchedKeys], a + ld a, 4 + ld [wMaxMenuItem], a + ld a, 2 + ld [wTopMenuItemY], a + ld a, 1 + ld [wTopMenuItemX], a +.billsPokemonLoop + ld hl, wStatusFlags5 + set BIT_NO_TEXT_DELAY, [hl] + hlcoord 0, 0 + ld b, 10 + ld c, 9 + call TextBoxBorder + hlcoord 2, 2 + ld de, BillsMonListText + call PlaceString + ld hl, BillsHousePokemonListText2 + call PrintText + call SaveScreenTilesToBuffer2 + call HandleMenuInput + bit B_PAD_B, a + jr nz, .cancel + ld a, [wCurrentMenuItem] + add EEVEE + cp EEVEE + jr z, .displayPokedex + cp FLAREON + jr z, .displayPokedex + cp JOLTEON + jr z, .displayPokedex + cp VAPOREON + jr z, .displayPokedex + jr .cancel +.displayPokedex + call DisplayPokedex + call LoadScreenTilesFromBuffer2 + jr .billsPokemonLoop +.cancel + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + call LoadScreenTilesFromBuffer2 + jp TextScriptEnd + +BillsHousePokemonListText1: + text_far _BillsHousePokemonListText1 + text_end + +BillsMonListText: + db "EEVEE" + next "FLAREON" + next "JOLTEON" + next "VAPOREON" + next "CANCEL@" + +BillsHousePokemonListText2: + text_far _BillsHousePokemonListText2 + text_end diff --git a/engine/events/hidden_events/blues_room.asm b/engine/events/hidden_events/blues_room.asm new file mode 100644 index 00000000..bcbad556 --- /dev/null +++ b/engine/events/hidden_events/blues_room.asm @@ -0,0 +1,13 @@ + + ret ; unused + +UnusedPredefText:: + db "@" + +PrintBookcaseText: + call EnableAutoTextBoxDrawing + tx_pre_jump BookcaseText + +BookcaseText:: + text_far _BookcaseText + text_end diff --git a/engine/events/hidden_events/book_or_sculpture.asm b/engine/events/hidden_events/book_or_sculpture.asm new file mode 100644 index 00000000..e04f4047 --- /dev/null +++ b/engine/events/hidden_events/book_or_sculpture.asm @@ -0,0 +1,21 @@ +BookOrSculptureText:: + text_asm + ld hl, PokemonBooksText + ld a, [wCurMapTileset] + cp MANSION ; Celadon Mansion tileset + jr nz, .ok + lda_coord 8, 6 + cp $38 + jr nz, .ok + ld hl, DiglettSculptureText +.ok + call PrintText + jp TextScriptEnd + +PokemonBooksText: + text_far _PokemonBooksText + text_end + +DiglettSculptureText: + text_far _DiglettSculptureText + text_end diff --git a/engine/events/hidden_events/bookshelves.asm b/engine/events/hidden_events/bookshelves.asm new file mode 100644 index 00000000..813cfc49 --- /dev/null +++ b/engine/events/hidden_events/bookshelves.asm @@ -0,0 +1,39 @@ +; prints text for bookshelves in buildings without sign events +PrintBookshelfText:: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + jr nz, .noMatch +; facing up + ld a, [wCurMapTileset] + ld b, a + lda_coord 8, 7 + ld c, a + ld hl, BookshelfTileIDs +.loop + ld a, [hli] + cp $ff + jr z, .noMatch + cp b + jr nz, .nextBookshelfEntry1 + ld a, [hli] + cp c + jr nz, .nextBookshelfEntry2 + ld a, [hl] + push af + call EnableAutoTextBoxDrawing + pop af + call PrintPredefTextID + xor a + ldh [hInteractedWithBookshelf], a + ret +.nextBookshelfEntry1 + inc hl +.nextBookshelfEntry2 + inc hl + jr .loop +.noMatch + ld a, $ff + ldh [hInteractedWithBookshelf], a + farjp PrintCardKeyText + +INCLUDE "data/tilesets/bookshelf_tile_ids.asm" diff --git a/engine/events/hidden_events/cinnabar_gym_quiz.asm b/engine/events/hidden_events/cinnabar_gym_quiz.asm new file mode 100644 index 00000000..9762c214 --- /dev/null +++ b/engine/events/hidden_events/cinnabar_gym_quiz.asm @@ -0,0 +1,200 @@ +PrintCinnabarQuiz: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + call EnableAutoTextBoxDrawing + tx_pre_jump CinnabarGymQuiz + +CinnabarGymQuiz:: + text_asm + xor a + ld [wOpponentAfterWrongAnswer], a + ld a, [wHiddenEventFunctionArgument] + push af + and $f + ldh [hGymGateIndex], a + pop af + and $f0 + swap a + ldh [hGymGateAnswer], a + ld hl, CinnabarGymQuizIntroText + call PrintText + ldh a, [hGymGateIndex] + dec a + add a + ld d, 0 + ld e, a + ld hl, CinnabarQuizQuestions + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + ld a, 1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + call CinnabarGymQuiz_AskQuestion + jp TextScriptEnd + +CinnabarGymQuizIntroText: + text_far _CinnabarGymQuizIntroText + text_end + +CinnabarQuizQuestions: + dw CinnabarQuizQuestionsText1 + dw CinnabarQuizQuestionsText2 + dw CinnabarQuizQuestionsText3 + dw CinnabarQuizQuestionsText4 + dw CinnabarQuizQuestionsText5 + dw CinnabarQuizQuestionsText6 + +CinnabarQuizQuestionsText1: + text_far _CinnabarQuizQuestionsText1 + text_end + +CinnabarQuizQuestionsText2: + text_far _CinnabarQuizQuestionsText2 + text_end + +CinnabarQuizQuestionsText3: + text_far _CinnabarQuizQuestionsText3 + text_end + +CinnabarQuizQuestionsText4: + text_far _CinnabarQuizQuestionsText4 + text_end + +CinnabarQuizQuestionsText5: + text_far _CinnabarQuizQuestionsText5 + text_end + +CinnabarQuizQuestionsText6: + text_far _CinnabarQuizQuestionsText6 + text_end + +CinnabarGymGateFlagAction: + EventFlagAddress hl, EVENT_CINNABAR_GYM_GATE0_UNLOCKED + predef_jump FlagActionPredef + +CinnabarGymQuiz_AskQuestion: + call YesNoChoice + ldh a, [hGymGateAnswer] + ld c, a + ld a, [wCurrentMenuItem] + cp c + jr nz, .wrongAnswer + ld hl, wCurrentMapScriptFlags + set BIT_CUR_MAP_LOADED_1, [hl] + ldh a, [hGymGateIndex] + ldh [hBackupGymGateIndex], a + ld hl, CinnabarGymQuizCorrectText + call PrintText + ldh a, [hBackupGymGateIndex] + AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 + ld c, a + ld b, FLAG_SET + call CinnabarGymGateFlagAction + jp UpdateCinnabarGymGateTileBlocks_ +.wrongAnswer + call WaitForSoundToFinish + ld a, SFX_DENIED + call PlaySound + call WaitForSoundToFinish + ld hl, CinnabarGymQuizIncorrectText + call PrintText + ldh a, [hGymGateIndex] + add $2 + AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2 + ld c, a + ld b, FLAG_TEST + EventFlagAddress hl, EVENT_BEAT_CINNABAR_GYM_TRAINER_0 + predef FlagActionPredef + ld a, c + and a + ret nz + ldh a, [hGymGateIndex] + add $2 + ld [wOpponentAfterWrongAnswer], a + ret + +CinnabarGymQuizCorrectText: + sound_get_item_1 + text_far _CinnabarGymQuizCorrectText + text_promptbutton + text_asm + + ldh a, [hBackupGymGateIndex] + AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 + ld c, a + ld b, FLAG_TEST + call CinnabarGymGateFlagAction + ld a, c + and a + jp nz, TextScriptEnd + call WaitForSoundToFinish + ld a, SFX_GO_INSIDE + call PlaySound + call WaitForSoundToFinish + jp TextScriptEnd + +CinnabarGymQuizIncorrectText: + text_far _CinnabarGymQuizIncorrectText + text_end + +UpdateCinnabarGymGateTileBlocks_:: +; Update the overworld map with open floor blocks or locked gate blocks +; depending on event flags. + ld a, 6 + ldh [hGymGateIndex], a +.loop + ldh a, [hGymGateIndex] + dec a + add a + add a + ld d, 0 + ld e, a + ld hl, CinnabarGymGateCoords + add hl, de + ld a, [hli] + ld b, [hl] + ld c, a + inc hl + ld a, [hl] + ld [wGymGateTileBlock], a + push bc + ldh a, [hGymGateIndex] + ldh [hBackupGymGateIndex], a + AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 + ld c, a + ld b, FLAG_TEST + call CinnabarGymGateFlagAction + ld a, c + and a + jr nz, .unlocked + ld a, [wGymGateTileBlock] + jr .next +.unlocked + ld a, $e +.next + pop bc + ld [wNewTileBlockID], a + predef ReplaceTileBlock + ld hl, hGymGateIndex + dec [hl] + jr nz, .loop + ret + +MACRO gym_gate_coord + db \1, \2, \3, 0 +ENDM + +DEF HORIZONTAL_GATE_BLOCK EQU $54 +DEF VERTICAL_GATE_BLOCK EQU $5f + +CinnabarGymGateCoords: + ; x coord, y coord, block id + gym_gate_coord 9, 3, HORIZONTAL_GATE_BLOCK + gym_gate_coord 6, 3, HORIZONTAL_GATE_BLOCK + gym_gate_coord 6, 6, HORIZONTAL_GATE_BLOCK + gym_gate_coord 3, 8, VERTICAL_GATE_BLOCK + gym_gate_coord 2, 6, HORIZONTAL_GATE_BLOCK + gym_gate_coord 2, 3, HORIZONTAL_GATE_BLOCK diff --git a/engine/events/hidden_events/elevator.asm b/engine/events/hidden_events/elevator.asm new file mode 100644 index 00000000..ab0f731f --- /dev/null +++ b/engine/events/hidden_events/elevator.asm @@ -0,0 +1,3 @@ +ElevatorText:: + text_far _ElevatorText + text_end diff --git a/engine/events/hidden_events/fighting_dojo.asm b/engine/events/hidden_events/fighting_dojo.asm new file mode 100644 index 00000000..b4f89985 --- /dev/null +++ b/engine/events/hidden_events/fighting_dojo.asm @@ -0,0 +1,23 @@ +PrintFightingDojoText2: + call EnableAutoTextBoxDrawing + tx_pre_jump EnemiesOnEverySideText + +EnemiesOnEverySideText:: + text_far _EnemiesOnEverySideText + text_end + +PrintFightingDojoText3: + call EnableAutoTextBoxDrawing + tx_pre_jump WhatGoesAroundComesAroundText + +WhatGoesAroundComesAroundText:: + text_far _WhatGoesAroundComesAroundText + text_end + +PrintFightingDojoText: + call EnableAutoTextBoxDrawing + tx_pre_jump FightingDojoText + +FightingDojoText:: + text_far _FightingDojoText + text_end diff --git a/engine/events/hidden_events/gym_statues.asm b/engine/events/hidden_events/gym_statues.asm new file mode 100644 index 00000000..1c7eb970 --- /dev/null +++ b/engine/events/hidden_events/gym_statues.asm @@ -0,0 +1,39 @@ +GymStatues: +; if in a gym and have the corresponding badge, a = GymStatueText2_id and jp PrintPredefTextID +; if in a gym and don't have the corresponding badge, a = GymStatueText1_id and jp PrintPredefTextID +; else ret + call EnableAutoTextBoxDrawing + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + ld hl, MapBadgeFlags + ld a, [wCurMap] + ld b, a +.loop + ld a, [hli] + cp $ff + ret z + cp b + jr z, .match + inc hl + jr .loop +.match + ld b, [hl] + ld a, [wBeatGymFlags] + and b + cp b + tx_pre_id GymStatueText2 + jr z, .haveBadge + tx_pre_id GymStatueText1 +.haveBadge + jp PrintPredefTextID + +INCLUDE "data/maps/badge_maps.asm" + +GymStatueText1:: + text_far _GymStatueText1 + text_end + +GymStatueText2:: + text_far _GymStatueText2 + text_end diff --git a/engine/events/hidden_events/indigo_plateau_hq.asm b/engine/events/hidden_events/indigo_plateau_hq.asm new file mode 100644 index 00000000..e8fd0220 --- /dev/null +++ b/engine/events/hidden_events/indigo_plateau_hq.asm @@ -0,0 +1,10 @@ +PrintIndigoPlateauHQText: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + call EnableAutoTextBoxDrawing + tx_pre_jump IndigoPlateauHQText + +IndigoPlateauHQText:: + text_far _IndigoPlateauHQText + text_end diff --git a/engine/events/hidden_events/indigo_plateau_statues.asm b/engine/events/hidden_events/indigo_plateau_statues.asm new file mode 100644 index 00000000..f78a5a72 --- /dev/null +++ b/engine/events/hidden_events/indigo_plateau_statues.asm @@ -0,0 +1,24 @@ +IndigoPlateauStatues:: + text_asm + ld hl, IndigoPlateauStatuesText1 + call PrintText + ld a, [wXCoord] + bit 0, a ; even or odd? + ld hl, IndigoPlateauStatuesText2 + jr nz, .ok + ld hl, IndigoPlateauStatuesText3 +.ok + call PrintText + jp TextScriptEnd + +IndigoPlateauStatuesText1: + text_far _IndigoPlateauStatuesText1 + text_end + +IndigoPlateauStatuesText2: + text_far _IndigoPlateauStatuesText2 + text_end + +IndigoPlateauStatuesText3: + text_far _IndigoPlateauStatuesText3 + text_end diff --git a/engine/events/hidden_events/magazines.asm b/engine/events/hidden_events/magazines.asm new file mode 100644 index 00000000..b58636ff --- /dev/null +++ b/engine/events/hidden_events/magazines.asm @@ -0,0 +1,8 @@ +PrintMagazinesText: + call EnableAutoTextBoxDrawing + tx_pre MagazinesText + ret + +MagazinesText:: + text_far _MagazinesText + text_end diff --git a/engine/events/hidden_events/museum_fossils.asm b/engine/events/hidden_events/museum_fossils.asm new file mode 100644 index 00000000..df74293f --- /dev/null +++ b/engine/events/hidden_events/museum_fossils.asm @@ -0,0 +1,51 @@ +AerodactylFossil: + ld a, FOSSIL_AERODACTYL + ld [wCurPartySpecies], a + call DisplayMonFrontSpriteInBox + call EnableAutoTextBoxDrawing + tx_pre AerodactylFossilText + ret + +AerodactylFossilText:: + text_far _AerodactylFossilText + text_end + +KabutopsFossil: + ld a, FOSSIL_KABUTOPS + ld [wCurPartySpecies], a + call DisplayMonFrontSpriteInBox + call EnableAutoTextBoxDrawing + tx_pre KabutopsFossilText + ret + +KabutopsFossilText:: + text_far _KabutopsFossilText + text_end + +DisplayMonFrontSpriteInBox: +; Displays a pokemon's front sprite in a pop-up window. + ld a, 1 + ldh [hAutoBGTransferEnabled], a + call Delay3 + xor a + ldh [hWY], a + call SaveScreenTilesToBuffer1 + ld a, MON_SPRITE_POPUP + ld [wTextBoxID], a + call DisplayTextBoxID + call UpdateSprites + ld a, [wCurPartySpecies] + ld [wCurSpecies], a + call GetMonHeader + ld de, vChars1 tile $31 + call LoadMonFrontSprite + ld a, $80 + ldh [hStartTileID], a + hlcoord 10, 11 + predef AnimateSendingOutMon + call WaitForTextScrollButtonPress + call LoadScreenTilesFromBuffer1 + call Delay3 + ld a, $90 + ldh [hWY], a + ret diff --git a/engine/events/hidden_events/new_bike.asm b/engine/events/hidden_events/new_bike.asm new file mode 100644 index 00000000..5bce5937 --- /dev/null +++ b/engine/events/hidden_events/new_bike.asm @@ -0,0 +1,7 @@ +PrintNewBikeText: + call EnableAutoTextBoxDrawing + tx_pre_jump NewBicycleText + +NewBicycleText:: + text_far _NewBicycleText + text_end diff --git a/engine/events/hidden_events/oaks_lab_email.asm b/engine/events/hidden_events/oaks_lab_email.asm new file mode 100644 index 00000000..b66babe0 --- /dev/null +++ b/engine/events/hidden_events/oaks_lab_email.asm @@ -0,0 +1,10 @@ +DisplayOakLabEmailText: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + call EnableAutoTextBoxDrawing + tx_pre_jump OakLabEmailText + +OakLabEmailText:: + text_far _OakLabEmailText + text_end diff --git a/engine/events/hidden_events/oaks_lab_posters.asm b/engine/events/hidden_events/oaks_lab_posters.asm new file mode 100644 index 00000000..502cf951 --- /dev/null +++ b/engine/events/hidden_events/oaks_lab_posters.asm @@ -0,0 +1,29 @@ +DisplayOakLabLeftPoster: + call EnableAutoTextBoxDrawing + tx_pre_jump PushStartText + +PushStartText:: + text_far _PushStartText + text_end + +DisplayOakLabRightPoster: + call EnableAutoTextBoxDrawing + ld hl, wPokedexOwned + ld b, wPokedexOwnedEnd - wPokedexOwned + call CountSetBits + ld a, [wNumSetBits] + cp 2 + tx_pre_id SaveOptionText + jr c, .ownLessThanTwo + ; own two or more mon + tx_pre_id StrengthsAndWeaknessesText +.ownLessThanTwo + jp PrintPredefTextID + +SaveOptionText:: + text_far _SaveOptionText + text_end + +StrengthsAndWeaknessesText:: + text_far _StrengthsAndWeaknessesText + text_end diff --git a/engine/events/hidden_events/pokecenter_pc.asm b/engine/events/hidden_events/pokecenter_pc.asm new file mode 100644 index 00000000..59867d1a --- /dev/null +++ b/engine/events/hidden_events/pokecenter_pc.asm @@ -0,0 +1,11 @@ +OpenPokemonCenterPC: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + call EnableAutoTextBoxDrawing + ld a, 1 << BIT_NO_AUTO_TEXT_BOX + ld [wAutoTextBoxDrawingControl], a + tx_pre_jump PokemonCenterPCText + +PokemonCenterPCText:: + script_pokecenter_pc diff --git a/engine/events/hidden_events/pokemon_stuff.asm b/engine/events/hidden_events/pokemon_stuff.asm new file mode 100644 index 00000000..267a191a --- /dev/null +++ b/engine/events/hidden_events/pokemon_stuff.asm @@ -0,0 +1,3 @@ +PokemonStuffText:: + text_far _PokemonStuffText + text_end diff --git a/engine/events/hidden_events/reds_room.asm b/engine/events/hidden_events/reds_room.asm new file mode 100644 index 00000000..7b8d51a0 --- /dev/null +++ b/engine/events/hidden_events/reds_room.asm @@ -0,0 +1,14 @@ +PrintRedSNESText: + call EnableAutoTextBoxDrawing + tx_pre_jump RedBedroomSNESText + +RedBedroomSNESText:: + text_far _RedBedroomSNESText + text_end + +OpenRedsPC: + call EnableAutoTextBoxDrawing + tx_pre_jump RedBedroomPCText + +RedBedroomPCText:: + script_players_pc diff --git a/engine/events/hidden_events/route_15_binoculars.asm b/engine/events/hidden_events/route_15_binoculars.asm new file mode 100644 index 00000000..733ab73e --- /dev/null +++ b/engine/events/hidden_events/route_15_binoculars.asm @@ -0,0 +1,14 @@ +Route15GateLeftBinoculars: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + call EnableAutoTextBoxDrawing + tx_pre Route15UpstairsBinocularsText + ld a, ARTICUNO + ld [wCurPartySpecies], a + call PlayCry + jp DisplayMonFrontSpriteInBox + +Route15UpstairsBinocularsText:: + text_far _Route15UpstairsBinocularsText + text_end diff --git a/engine/events/hidden_events/safari_game.asm b/engine/events/hidden_events/safari_game.asm new file mode 100644 index 00000000..fc014ce0 --- /dev/null +++ b/engine/events/hidden_events/safari_game.asm @@ -0,0 +1,83 @@ +SafariZoneCheck:: + CheckEventHL EVENT_IN_SAFARI_ZONE ; if we are not in the Safari Zone, + jr z, SafariZoneGameStillGoing ; don't bother printing game over text + ld a, [wNumSafariBalls] + and a + jr z, SafariZoneGameOver + jr SafariZoneGameStillGoing + +SafariZoneCheckSteps:: +IF DEF(_DEBUG) + call DebugPressedOrHeldB + ret nz +ENDC + ld a, [wSafariSteps] + ld b, a + ld a, [wSafariSteps + 1] + ld c, a + or b + jr z, SafariZoneGameOver + dec bc + ld a, b + ld [wSafariSteps], a + ld a, c + ld [wSafariSteps + 1], a +SafariZoneGameStillGoing: + xor a + ld [wSafariZoneGameOver], a + ret + +SafariZoneGameOver: + call EnableAutoTextBoxDrawing + xor a + ld [wAudioFadeOutControl], a + dec a ; SFX_STOP_ALL_MUSIC + call PlaySound + ld c, BANK(SFX_Safari_Zone_PA) + ld a, SFX_SAFARI_ZONE_PA + call PlayMusic +.waitForMusicToPlay + ld a, [wChannelSoundIDs + CHAN5] + cp SFX_SAFARI_ZONE_PA + jr nz, .waitForMusicToPlay + ld a, TEXT_SAFARI_GAME_OVER + ldh [hTextID], a + call DisplayTextID + xor a + ld [wPlayerMovingDirection], a + ld a, SAFARI_ZONE_GATE + ldh [hWarpDestinationMap], a + ld a, $3 + ld [wDestinationWarpID], a + ld a, SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI + ld [wSafariZoneGateCurScript], a + SetEvent EVENT_SAFARI_GAME_OVER + ld a, 1 + ld [wSafariZoneGameOver], a + ret + +PrintSafariGameOverText:: + xor a + ld [wJoyIgnore], a + ld hl, SafariGameOverText + jp PrintText + +SafariGameOverText: + text_asm + ld a, [wNumSafariBalls] + and a + jr z, .noMoreSafariBalls + ld hl, TimesUpText + call PrintText +.noMoreSafariBalls + ld hl, GameOverText + call PrintText + jp TextScriptEnd + +TimesUpText: + text_far _TimesUpText + text_end + +GameOverText: + text_far _GameOverText + text_end diff --git a/engine/events/hidden_events/school_blackboard.asm b/engine/events/hidden_events/school_blackboard.asm new file mode 100644 index 00000000..71e24ed0 --- /dev/null +++ b/engine/events/hidden_events/school_blackboard.asm @@ -0,0 +1,224 @@ +PrintBlackboardLinkCableText: + call EnableAutoTextBoxDrawing + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + ld a, [wHiddenEventFunctionArgument] + call PrintPredefTextID + ret + +LinkCableHelp:: + text_asm + call SaveScreenTilesToBuffer1 + ld hl, LinkCableHelpText1 + call PrintText + xor a + ld [wMenuItemOffset], a ; not used + ld [wCurrentMenuItem], a + ld [wLastMenuItem], a + ld a, PAD_A | PAD_B + ld [wMenuWatchedKeys], a + ld a, 3 + ld [wMaxMenuItem], a + ld a, 2 + ld [wTopMenuItemY], a + ld a, 1 + ld [wTopMenuItemX], a +.linkHelpLoop + ld hl, wStatusFlags5 + set BIT_NO_TEXT_DELAY, [hl] + hlcoord 0, 0 + ld b, 8 + ld c, 13 + call TextBoxBorder + hlcoord 2, 2 + ld de, HowToLinkText + call PlaceString + ld hl, LinkCableHelpText2 + call PrintText + call HandleMenuInput + bit B_PAD_B, a + jr nz, .exit + ld a, [wCurrentMenuItem] + cp 3 ; pressed a on "STOP READING" + jr z, .exit + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + ld hl, LinkCableInfoTexts + add a + ld d, 0 + ld e, a + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + jp .linkHelpLoop +.exit + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + call LoadScreenTilesFromBuffer1 + jp TextScriptEnd + +LinkCableHelpText1: + text_far _LinkCableHelpText1 + text_end + +LinkCableHelpText2: + text_far _LinkCableHelpText2 + text_end + +HowToLinkText: + db "HOW TO LINK" + next "COLOSSEUM" + next "TRADE CENTER" + next "STOP READING@" + +LinkCableInfoTexts: + dw LinkCableInfoText1 + dw LinkCableInfoText2 + dw LinkCableInfoText3 + +LinkCableInfoText1: + text_far _LinkCableInfoText1 + text_end + +LinkCableInfoText2: + text_far _LinkCableInfoText2 + text_end + +LinkCableInfoText3: + text_far _LinkCableInfoText3 + text_end + +ViridianSchoolBlackboard:: + text_asm + call SaveScreenTilesToBuffer1 + ld hl, ViridianSchoolBlackboardText1 + call PrintText + xor a + ld [wMenuItemOffset], a + ld [wCurrentMenuItem], a + ld [wLastMenuItem], a + ld a, PAD_LEFT | PAD_RIGHT | PAD_A | PAD_B + ld [wMenuWatchedKeys], a + ld a, 2 + ld [wMaxMenuItem], a + ld a, 2 + ld [wTopMenuItemY], a + ld a, 1 + ld [wTopMenuItemX], a +.blackboardLoop + ld hl, wStatusFlags5 + set BIT_NO_TEXT_DELAY, [hl] + hlcoord 0, 0 + lb bc, 6, 10 + call TextBoxBorder + hlcoord 1, 2 + ld de, StatusAilmentText1 + call PlaceString + hlcoord 6, 2 + ld de, StatusAilmentText2 + call PlaceString + ld hl, ViridianSchoolBlackboardText2 + call PrintText + call HandleMenuInput ; pressing up and down is handled in here + bit B_PAD_B, a ; pressed b + jr nz, .exitBlackboard + bit B_PAD_RIGHT, a + jr z, .didNotPressRight + ; move cursor to right column + ld a, 2 + ld [wMaxMenuItem], a + ld a, 2 + ld [wTopMenuItemY], a + ld a, 6 + ld [wTopMenuItemX], a + ld a, 3 ; in the the right column, use an offset to prevent overlap + ld [wMenuItemOffset], a + jr .blackboardLoop +.didNotPressRight + bit B_PAD_LEFT, a + jr z, .didNotPressLeftOrRight + ; move cursor to left column + ld a, 2 + ld [wMaxMenuItem], a + ld a, 2 + ld [wTopMenuItemY], a + ld a, 1 + ld [wTopMenuItemX], a + xor a + ld [wMenuItemOffset], a + jr .blackboardLoop +.didNotPressLeftOrRight + ld a, [wCurrentMenuItem] + ld b, a + ld a, [wMenuItemOffset] + add b + cp 5 ; cursor is pointing to "QUIT" + jr z, .exitBlackboard + ; we must have pressed a on a status condition + ; so print the text + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + ld hl, ViridianBlackboardStatusPointers + add a + ld d, 0 + ld e, a + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + jp .blackboardLoop +.exitBlackboard + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + call LoadScreenTilesFromBuffer1 + jp TextScriptEnd + +ViridianSchoolBlackboardText1: + text_far _ViridianSchoolBlackboardText1 + text_end + +ViridianSchoolBlackboardText2: + text_far _ViridianSchoolBlackboardText2 + text_end + +StatusAilmentText1: + db " SLP" + next " PSN" + next " PAR@" + +StatusAilmentText2: + db " BRN" + next " FRZ" + next " QUIT@" + + db "@" ; unused + +ViridianBlackboardStatusPointers: + dw ViridianBlackboardSleepText + dw ViridianBlackboardPoisonText + dw ViridianBlackboardPrlzText + dw ViridianBlackboardBurnText + dw ViridianBlackboardFrozenText + +ViridianBlackboardSleepText: + text_far _ViridianBlackboardSleepText + text_end + +ViridianBlackboardPoisonText: + text_far _ViridianBlackboardPoisonText + text_end + +ViridianBlackboardPrlzText: + text_far _ViridianBlackboardPrlzText + text_end + +ViridianBlackboardBurnText: + text_far _ViridianBlackboardBurnText + text_end + +ViridianBlackboardFrozenText: + text_far _ViridianBlackboardFrozenText + text_end diff --git a/engine/events/hidden_events/school_notebooks.asm b/engine/events/hidden_events/school_notebooks.asm new file mode 100644 index 00000000..2387c089 --- /dev/null +++ b/engine/events/hidden_events/school_notebooks.asm @@ -0,0 +1,65 @@ +PrintNotebookText: + call EnableAutoTextBoxDrawing + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + ld a, [wHiddenEventFunctionArgument] + jp PrintPredefTextID + +TMNotebook:: + text_far TMNotebookText + text_waitbutton + text_end + +ViridianSchoolNotebook:: + text_asm + ld hl, ViridianSchoolNotebookText1 + call PrintText + call TurnPageSchoolNotebook + jr nz, .doneReading + ld hl, ViridianSchoolNotebookText2 + call PrintText + call TurnPageSchoolNotebook + jr nz, .doneReading + ld hl, ViridianSchoolNotebookText3 + call PrintText + call TurnPageSchoolNotebook + jr nz, .doneReading + ld hl, ViridianSchoolNotebookText4 + call PrintText + ld hl, ViridianSchoolNotebookText5 + call PrintText +.doneReading + jp TextScriptEnd + +TurnPageSchoolNotebook: + ld hl, TurnPageText + call PrintText + call YesNoChoice + ld a, [wCurrentMenuItem] + and a + ret + +TurnPageText: + text_far _TurnPageText + text_end + +ViridianSchoolNotebookText5: + text_far _ViridianSchoolNotebookText5 + text_waitbutton + text_end + +ViridianSchoolNotebookText1: + text_far _ViridianSchoolNotebookText1 + text_end + +ViridianSchoolNotebookText2: + text_far _ViridianSchoolNotebookText2 + text_end + +ViridianSchoolNotebookText3: + text_far _ViridianSchoolNotebookText3 + text_end + +ViridianSchoolNotebookText4: + text_far _ViridianSchoolNotebookText4 + text_end diff --git a/engine/events/hidden_events/town_map.asm b/engine/events/hidden_events/town_map.asm new file mode 100644 index 00000000..11f7cbc7 --- /dev/null +++ b/engine/events/hidden_events/town_map.asm @@ -0,0 +1,22 @@ +TownMapText:: + text_far _TownMapText + text_promptbutton + text_asm + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + ld hl, wStatusFlags5 + set BIT_NO_TEXT_DELAY, [hl] + call GBPalWhiteOutWithDelay3 + xor a + ldh [hWY], a + inc a + ldh [hAutoBGTransferEnabled], a + call LoadFontTilePatterns + farcall DisplayTownMap + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + ld de, TextScriptEnd + push de + ldh a, [hLoadedROMBank] + push af + jp CloseTextDisplay diff --git a/engine/events/hidden_events/vermilion_gym_trash.asm b/engine/events/hidden_events/vermilion_gym_trash.asm new file mode 100644 index 00000000..40e200d6 --- /dev/null +++ b/engine/events/hidden_events/vermilion_gym_trash.asm @@ -0,0 +1,169 @@ +PrintTrashText: + call EnableAutoTextBoxDrawing + tx_pre_jump VermilionGymTrashText + +VermilionGymTrashText:: + text_far _VermilionGymTrashText + text_end + +GymTrashScript: + call EnableAutoTextBoxDrawing + ld a, [wHiddenEventFunctionArgument] + ld [wGymTrashCanIndex], a + +; Don't do the trash can puzzle if it's already been done. + CheckEvent EVENT_2ND_LOCK_OPENED + jr z, .ok + + tx_pre_jump VermilionGymTrashText + +.ok + CheckEventReuseA EVENT_1ST_LOCK_OPENED + jr nz, .trySecondLock + + ld a, [wFirstLockTrashCanIndex] + ld b, a + ld a, [wGymTrashCanIndex] + cp b + jr z, .openFirstLock + + tx_pre_id VermilionGymTrashText + jr .done + +.openFirstLock +; Next can is trying for the second switch. + SetEvent EVENT_1ST_LOCK_OPENED + + ld hl, GymTrashCans + ld a, [wGymTrashCanIndex] + ; * 5 + ld b, a + add a + add a + add b + + ld d, 0 + ld e, a + add hl, de + ld a, [hli] + +; Bug: This code should calculate a value in the range [0, 3], +; but if the mask and random number don't have any 1 bits in common, then +; the result of the AND will be 0. When 1 is subtracted from that, the value +; will become $ff. This will result in 255 being added to hl, which will cause +; hl to point to one of the zero bytes that pad the end of the ROM bank. +; Trash can 0 was intended to be able to have the second lock only when the +; first lock was in trash can 1 or 3. However, due to this bug, trash can 0 can +; have the second lock regardless of which trash can had the first lock. + + ldh [hGymTrashCanRandNumMask], a + push hl + call Random + swap a + ld b, a + ldh a, [hGymTrashCanRandNumMask] + and b + dec a + pop hl + + ld d, 0 + ld e, a + add hl, de + ld a, [hl] + and $f + ld [wSecondLockTrashCanIndex], a + + tx_pre_id VermilionGymTrashSuccessText1 + jr .done + +.trySecondLock + ld a, [wSecondLockTrashCanIndex] + ld b, a + ld a, [wGymTrashCanIndex] + cp b + jr z, .openSecondLock + +; Reset the cans. + ResetEvent EVENT_1ST_LOCK_OPENED + call Random + + and $e + ld [wFirstLockTrashCanIndex], a + + tx_pre_id VermilionGymTrashFailText + jr .done + +.openSecondLock +; Completed the trash can puzzle. + SetEvent EVENT_2ND_LOCK_OPENED + ld hl, wCurrentMapScriptFlags + set BIT_CUR_MAP_LOADED_2, [hl] + + tx_pre_id VermilionGymTrashSuccessText3 + +.done + jp PrintPredefTextID + +GymTrashCans: +; byte 0: mask for random number +; bytes 1-4: indices of the trash cans that can have the second lock +; (but see the comment above explaining a bug regarding this) +; Note that the mask is simply the number of valid trash can indices that +; follow. The remaining bytes are filled with 0 to pad the length of each entry +; to 5 bytes. + db 2, 1, 3, 0, 0 ; 0 + db 3, 0, 2, 4, 0 ; 1 + db 2, 1, 5, 0, 0 ; 2 + db 3, 0, 4, 6, 0 ; 3 + db 4, 1, 3, 5, 7 ; 4 + db 3, 2, 4, 8, 0 ; 5 + db 3, 3, 7, 9, 0 ; 6 + db 4, 4, 6, 8, 10 ; 7 + db 3, 5, 7, 11, 0 ; 8 + db 3, 6, 10, 12, 0 ; 9 + db 4, 7, 9, 11, 13 ; 10 + db 3, 8, 10, 14, 0 ; 11 + db 2, 9, 13, 0, 0 ; 12 + db 3, 10, 12, 14, 0 ; 13 + db 2, 11, 13, 0, 0 ; 14 + +VermilionGymTrashSuccessText1:: + text_far _VermilionGymTrashSuccessText1 + text_asm + call WaitForSoundToFinish + ld a, SFX_SWITCH + call PlaySound + call WaitForSoundToFinish + jp TextScriptEnd + +; unused +VermilionGymTrashSuccessText2:: + text_far _VermilionGymTrashSuccessText2 + text_end + +; unused +VermilionGymTrashSuccessPlaySfx: + text_asm + call WaitForSoundToFinish + ld a, SFX_SWITCH + call PlaySound + call WaitForSoundToFinish + jp TextScriptEnd + +VermilionGymTrashSuccessText3:: + text_far _VermilionGymTrashSuccessText3 + text_asm + call WaitForSoundToFinish + ld a, SFX_GO_INSIDE + call PlaySound + call WaitForSoundToFinish + jp TextScriptEnd + +VermilionGymTrashFailText:: + text_far _VermilionGymTrashFailText + text_asm + call WaitForSoundToFinish + ld a, SFX_DENIED + call PlaySound + call WaitForSoundToFinish + jp TextScriptEnd diff --git a/engine/events/hidden_items.asm b/engine/events/hidden_items.asm index e42f60f9..065c2d5e 100644 --- a/engine/events/hidden_items.asm +++ b/engine/events/hidden_items.asm @@ -13,7 +13,7 @@ HiddenItems: call EnableAutoTextBoxDrawing ld a, 1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld a, [wHiddenObjectFunctionArgument] ; item ID + ld a, [wHiddenEventFunctionArgument] ; item ID ld [wNamedObjectIndex], a call GetItemName tx_pre_jump FoundHiddenItemText @@ -23,7 +23,7 @@ INCLUDE "data/events/hidden_item_coords.asm" FoundHiddenItemText:: text_far _FoundHiddenItemText text_asm - ld a, [wHiddenObjectFunctionArgument] ; item ID + ld a, [wHiddenEventFunctionArgument] ; item ID ld b, a ld c, 1 call GiveItem @@ -70,7 +70,7 @@ HiddenCoins: ldh [hUnusedCoinsByte], a ldh [hCoins], a ldh [hCoins + 1], a - ld a, [wHiddenObjectFunctionArgument] + ld a, [wHiddenEventFunctionArgument] sub COIN cp 10 jr z, .bcd10 @@ -132,9 +132,9 @@ DroppedHiddenCoinsText:: text_end FindHiddenItemOrCoinsIndex: - ld a, [wHiddenObjectY] + ld a, [wHiddenEventY] ld d, a - ld a, [wHiddenObjectX] + ld a, [wHiddenEventX] ld e, a ld a, [wCurMap] ld b, a diff --git a/engine/events/hidden_objects/bench_guys.asm b/engine/events/hidden_objects/bench_guys.asm deleted file mode 100644 index e5a2a724..00000000 --- a/engine/events/hidden_objects/bench_guys.asm +++ /dev/null @@ -1,107 +0,0 @@ -PrintBenchGuyText: - call EnableAutoTextBoxDrawing - ld hl, BenchGuyTextPointers - ld a, [wCurMap] - ld b, a -.loop - ld a, [hli] - cp -1 - ret z - cp b - jr z, .match - inc hl - inc hl - jr .loop -.match - ld a, [hli] - ld b, a - ld a, [wSpritePlayerStateData1FacingDirection] - cp b - - ; bug: an 'inc hl' instruction is needed before looping back. When trying to - ; talk to a bench guy from above, this Sprite Facing test will fail, and the - ; next loop iteration will be misaligned within BenchGuyTextPointers table. - ; As a result, the routine will miss the terminator byte, and continue to - ; process data beyond the table boundary. - ; It seems that it will only return after starting to read data from VRAM - ; (According to Pan Docs, during PPU mode 3, reads return garbage value, - ; usually $FF). - jr nz, .loop ; player isn't facing the bench guy - ld a, [hl] - jp PrintPredefTextID - -INCLUDE "data/events/bench_guys.asm" - -ViridianCityPokecenterBenchGuyText:: - text_far _ViridianCityPokecenterGuyText - text_end - -PewterCityPokecenterBenchGuyText:: - text_far _PewterCityPokecenterGuyText - text_end - -CeruleanCityPokecenterBenchGuyText:: - text_far _CeruleanPokecenterGuyText - text_end - -LavenderCityPokecenterBenchGuyText:: - text_far _LavenderPokecenterGuyText - text_end - -MtMoonPokecenterBenchGuyText:: - text_far _MtMoonPokecenterBenchGuyText - text_end - -RockTunnelPokecenterBenchGuyText:: - text_far _RockTunnelPokecenterGuyText - text_end - -UnusedBenchGuyText1:: - text_far _UnusedBenchGuyText1 - text_end - -UnusedBenchGuyText2:: - text_far _UnusedBenchGuyText2 - text_end - -UnusedBenchGuyText3:: - text_far _UnusedBenchGuyText3 - text_end - -VermilionCityPokecenterBenchGuyText:: - text_far _VermilionPokecenterGuyText - text_end - -CeladonCityPokecenterBenchGuyText:: - text_far _CeladonCityPokecenterGuyText - text_end - -FuchsiaCityPokecenterBenchGuyText:: - text_far _FuchsiaCityPokecenterGuyText - text_end - -CinnabarIslandPokecenterBenchGuyText:: - text_far _CinnabarPokecenterGuyText - text_end - -SaffronCityPokecenterBenchGuyText:: - text_asm - CheckEvent EVENT_BEAT_SILPH_CO_GIOVANNI - ld hl, SaffronCityPokecenterBenchGuyText2 - jr nz, .printText - ld hl, SaffronCityPokecenterBenchGuyText1 -.printText - call PrintText - jp TextScriptEnd - -SaffronCityPokecenterBenchGuyText1: - text_far _SaffronCityPokecenterGuyText1 - text_end - -SaffronCityPokecenterBenchGuyText2: - text_far _SaffronCityPokecenterGuyText2 - text_end - -CeladonCityHotelText:: - text_far _CeladonCityHotelText - text_end diff --git a/engine/events/hidden_objects/bills_house_pc.asm b/engine/events/hidden_objects/bills_house_pc.asm deleted file mode 100644 index 3972e20c..00000000 --- a/engine/events/hidden_objects/bills_house_pc.asm +++ /dev/null @@ -1,134 +0,0 @@ -BillsHousePC: - call EnableAutoTextBoxDrawing - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - CheckEvent EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING - jr nz, .displayBillsHousePokemonList - CheckEventReuseA EVENT_USED_CELL_SEPARATOR_ON_BILL - jr nz, .displayBillsHouseMonitorText - CheckEventReuseA EVENT_BILL_SAID_USE_CELL_SEPARATOR - jr nz, .doCellSeparator -.displayBillsHouseMonitorText - tx_pre_jump BillsHouseMonitorText -.doCellSeparator - ld a, $1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - tx_pre BillsHouseInitiatedText - ld c, 32 - call DelayFrames - ld a, SFX_TINK - call PlaySound - call WaitForSoundToFinish - ld c, 80 - call DelayFrames - ld a, SFX_SHRINK - call PlaySound - call WaitForSoundToFinish - ld c, 48 - call DelayFrames - ld a, SFX_TINK - call PlaySound - call WaitForSoundToFinish - ld c, 32 - call DelayFrames - ld a, SFX_GET_ITEM_1 - call PlaySound - call WaitForSoundToFinish - call PlayDefaultMusic - SetEvent EVENT_USED_CELL_SEPARATOR_ON_BILL - ret -.displayBillsHousePokemonList - ld a, $1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - tx_pre BillsHousePokemonList - ret - -BillsHouseMonitorText:: - text_far _BillsHouseMonitorText - text_end - -BillsHouseInitiatedText:: - text_far _BillsHouseInitiatedText - text_promptbutton - text_asm - ld a, SFX_STOP_ALL_MUSIC - ld [wNewSoundID], a - call PlaySound - ld c, 16 - call DelayFrames - ld a, SFX_SWITCH - call PlaySound - call WaitForSoundToFinish - ld c, 60 - call DelayFrames - jp TextScriptEnd - -BillsHousePokemonList:: - text_asm - call SaveScreenTilesToBuffer1 - ld hl, BillsHousePokemonListText1 - call PrintText - xor a - ld [wMenuItemOffset], a ; not used - ld [wCurrentMenuItem], a - ld [wLastMenuItem], a - ld a, PAD_A | PAD_B - ld [wMenuWatchedKeys], a - ld a, 4 - ld [wMaxMenuItem], a - ld a, 2 - ld [wTopMenuItemY], a - ld a, 1 - ld [wTopMenuItemX], a -.billsPokemonLoop - ld hl, wStatusFlags5 - set BIT_NO_TEXT_DELAY, [hl] - hlcoord 0, 0 - ld b, 10 - ld c, 9 - call TextBoxBorder - hlcoord 2, 2 - ld de, BillsMonListText - call PlaceString - ld hl, BillsHousePokemonListText2 - call PrintText - call SaveScreenTilesToBuffer2 - call HandleMenuInput - bit B_PAD_B, a - jr nz, .cancel - ld a, [wCurrentMenuItem] - add EEVEE - cp EEVEE - jr z, .displayPokedex - cp FLAREON - jr z, .displayPokedex - cp JOLTEON - jr z, .displayPokedex - cp VAPOREON - jr z, .displayPokedex - jr .cancel -.displayPokedex - call DisplayPokedex - call LoadScreenTilesFromBuffer2 - jr .billsPokemonLoop -.cancel - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - call LoadScreenTilesFromBuffer2 - jp TextScriptEnd - -BillsHousePokemonListText1: - text_far _BillsHousePokemonListText1 - text_end - -BillsMonListText: - db "EEVEE" - next "FLAREON" - next "JOLTEON" - next "VAPOREON" - next "CANCEL@" - -BillsHousePokemonListText2: - text_far _BillsHousePokemonListText2 - text_end diff --git a/engine/events/hidden_objects/blues_room.asm b/engine/events/hidden_objects/blues_room.asm deleted file mode 100644 index bcbad556..00000000 --- a/engine/events/hidden_objects/blues_room.asm +++ /dev/null @@ -1,13 +0,0 @@ - - ret ; unused - -UnusedPredefText:: - db "@" - -PrintBookcaseText: - call EnableAutoTextBoxDrawing - tx_pre_jump BookcaseText - -BookcaseText:: - text_far _BookcaseText - text_end diff --git a/engine/events/hidden_objects/book_or_sculpture.asm b/engine/events/hidden_objects/book_or_sculpture.asm deleted file mode 100644 index e04f4047..00000000 --- a/engine/events/hidden_objects/book_or_sculpture.asm +++ /dev/null @@ -1,21 +0,0 @@ -BookOrSculptureText:: - text_asm - ld hl, PokemonBooksText - ld a, [wCurMapTileset] - cp MANSION ; Celadon Mansion tileset - jr nz, .ok - lda_coord 8, 6 - cp $38 - jr nz, .ok - ld hl, DiglettSculptureText -.ok - call PrintText - jp TextScriptEnd - -PokemonBooksText: - text_far _PokemonBooksText - text_end - -DiglettSculptureText: - text_far _DiglettSculptureText - text_end diff --git a/engine/events/hidden_objects/bookshelves.asm b/engine/events/hidden_objects/bookshelves.asm deleted file mode 100644 index 813cfc49..00000000 --- a/engine/events/hidden_objects/bookshelves.asm +++ /dev/null @@ -1,39 +0,0 @@ -; prints text for bookshelves in buildings without sign events -PrintBookshelfText:: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - jr nz, .noMatch -; facing up - ld a, [wCurMapTileset] - ld b, a - lda_coord 8, 7 - ld c, a - ld hl, BookshelfTileIDs -.loop - ld a, [hli] - cp $ff - jr z, .noMatch - cp b - jr nz, .nextBookshelfEntry1 - ld a, [hli] - cp c - jr nz, .nextBookshelfEntry2 - ld a, [hl] - push af - call EnableAutoTextBoxDrawing - pop af - call PrintPredefTextID - xor a - ldh [hInteractedWithBookshelf], a - ret -.nextBookshelfEntry1 - inc hl -.nextBookshelfEntry2 - inc hl - jr .loop -.noMatch - ld a, $ff - ldh [hInteractedWithBookshelf], a - farjp PrintCardKeyText - -INCLUDE "data/tilesets/bookshelf_tile_ids.asm" diff --git a/engine/events/hidden_objects/cinnabar_gym_quiz.asm b/engine/events/hidden_objects/cinnabar_gym_quiz.asm deleted file mode 100644 index a14bd198..00000000 --- a/engine/events/hidden_objects/cinnabar_gym_quiz.asm +++ /dev/null @@ -1,200 +0,0 @@ -PrintCinnabarQuiz: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - call EnableAutoTextBoxDrawing - tx_pre_jump CinnabarGymQuiz - -CinnabarGymQuiz:: - text_asm - xor a - ld [wOpponentAfterWrongAnswer], a - ld a, [wHiddenObjectFunctionArgument] - push af - and $f - ldh [hGymGateIndex], a - pop af - and $f0 - swap a - ldh [hGymGateAnswer], a - ld hl, CinnabarGymQuizIntroText - call PrintText - ldh a, [hGymGateIndex] - dec a - add a - ld d, 0 - ld e, a - ld hl, CinnabarQuizQuestions - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call PrintText - ld a, 1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - call CinnabarGymQuiz_AskQuestion - jp TextScriptEnd - -CinnabarGymQuizIntroText: - text_far _CinnabarGymQuizIntroText - text_end - -CinnabarQuizQuestions: - dw CinnabarQuizQuestionsText1 - dw CinnabarQuizQuestionsText2 - dw CinnabarQuizQuestionsText3 - dw CinnabarQuizQuestionsText4 - dw CinnabarQuizQuestionsText5 - dw CinnabarQuizQuestionsText6 - -CinnabarQuizQuestionsText1: - text_far _CinnabarQuizQuestionsText1 - text_end - -CinnabarQuizQuestionsText2: - text_far _CinnabarQuizQuestionsText2 - text_end - -CinnabarQuizQuestionsText3: - text_far _CinnabarQuizQuestionsText3 - text_end - -CinnabarQuizQuestionsText4: - text_far _CinnabarQuizQuestionsText4 - text_end - -CinnabarQuizQuestionsText5: - text_far _CinnabarQuizQuestionsText5 - text_end - -CinnabarQuizQuestionsText6: - text_far _CinnabarQuizQuestionsText6 - text_end - -CinnabarGymGateFlagAction: - EventFlagAddress hl, EVENT_CINNABAR_GYM_GATE0_UNLOCKED - predef_jump FlagActionPredef - -CinnabarGymQuiz_AskQuestion: - call YesNoChoice - ldh a, [hGymGateAnswer] - ld c, a - ld a, [wCurrentMenuItem] - cp c - jr nz, .wrongAnswer - ld hl, wCurrentMapScriptFlags - set BIT_CUR_MAP_LOADED_1, [hl] - ldh a, [hGymGateIndex] - ldh [hBackupGymGateIndex], a - ld hl, CinnabarGymQuizCorrectText - call PrintText - ldh a, [hBackupGymGateIndex] - AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 - ld c, a - ld b, FLAG_SET - call CinnabarGymGateFlagAction - jp UpdateCinnabarGymGateTileBlocks_ -.wrongAnswer - call WaitForSoundToFinish - ld a, SFX_DENIED - call PlaySound - call WaitForSoundToFinish - ld hl, CinnabarGymQuizIncorrectText - call PrintText - ldh a, [hGymGateIndex] - add $2 - AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2 - ld c, a - ld b, FLAG_TEST - EventFlagAddress hl, EVENT_BEAT_CINNABAR_GYM_TRAINER_0 - predef FlagActionPredef - ld a, c - and a - ret nz - ldh a, [hGymGateIndex] - add $2 - ld [wOpponentAfterWrongAnswer], a - ret - -CinnabarGymQuizCorrectText: - sound_get_item_1 - text_far _CinnabarGymQuizCorrectText - text_promptbutton - text_asm - - ldh a, [hBackupGymGateIndex] - AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 - ld c, a - ld b, FLAG_TEST - call CinnabarGymGateFlagAction - ld a, c - and a - jp nz, TextScriptEnd - call WaitForSoundToFinish - ld a, SFX_GO_INSIDE - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd - -CinnabarGymQuizIncorrectText: - text_far _CinnabarGymQuizIncorrectText - text_end - -UpdateCinnabarGymGateTileBlocks_:: -; Update the overworld map with open floor blocks or locked gate blocks -; depending on event flags. - ld a, 6 - ldh [hGymGateIndex], a -.loop - ldh a, [hGymGateIndex] - dec a - add a - add a - ld d, 0 - ld e, a - ld hl, CinnabarGymGateCoords - add hl, de - ld a, [hli] - ld b, [hl] - ld c, a - inc hl - ld a, [hl] - ld [wGymGateTileBlock], a - push bc - ldh a, [hGymGateIndex] - ldh [hBackupGymGateIndex], a - AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 - ld c, a - ld b, FLAG_TEST - call CinnabarGymGateFlagAction - ld a, c - and a - jr nz, .unlocked - ld a, [wGymGateTileBlock] - jr .next -.unlocked - ld a, $e -.next - pop bc - ld [wNewTileBlockID], a - predef ReplaceTileBlock - ld hl, hGymGateIndex - dec [hl] - jr nz, .loop - ret - -MACRO gym_gate_coord - db \1, \2, \3, 0 -ENDM - -DEF HORIZONTAL_GATE_BLOCK EQU $54 -DEF VERTICAL_GATE_BLOCK EQU $5f - -CinnabarGymGateCoords: - ; x coord, y coord, block id - gym_gate_coord 9, 3, HORIZONTAL_GATE_BLOCK - gym_gate_coord 6, 3, HORIZONTAL_GATE_BLOCK - gym_gate_coord 6, 6, HORIZONTAL_GATE_BLOCK - gym_gate_coord 3, 8, VERTICAL_GATE_BLOCK - gym_gate_coord 2, 6, HORIZONTAL_GATE_BLOCK - gym_gate_coord 2, 3, HORIZONTAL_GATE_BLOCK diff --git a/engine/events/hidden_objects/elevator.asm b/engine/events/hidden_objects/elevator.asm deleted file mode 100644 index ab0f731f..00000000 --- a/engine/events/hidden_objects/elevator.asm +++ /dev/null @@ -1,3 +0,0 @@ -ElevatorText:: - text_far _ElevatorText - text_end diff --git a/engine/events/hidden_objects/fighting_dojo.asm b/engine/events/hidden_objects/fighting_dojo.asm deleted file mode 100644 index b4f89985..00000000 --- a/engine/events/hidden_objects/fighting_dojo.asm +++ /dev/null @@ -1,23 +0,0 @@ -PrintFightingDojoText2: - call EnableAutoTextBoxDrawing - tx_pre_jump EnemiesOnEverySideText - -EnemiesOnEverySideText:: - text_far _EnemiesOnEverySideText - text_end - -PrintFightingDojoText3: - call EnableAutoTextBoxDrawing - tx_pre_jump WhatGoesAroundComesAroundText - -WhatGoesAroundComesAroundText:: - text_far _WhatGoesAroundComesAroundText - text_end - -PrintFightingDojoText: - call EnableAutoTextBoxDrawing - tx_pre_jump FightingDojoText - -FightingDojoText:: - text_far _FightingDojoText - text_end diff --git a/engine/events/hidden_objects/gym_statues.asm b/engine/events/hidden_objects/gym_statues.asm deleted file mode 100644 index 1c7eb970..00000000 --- a/engine/events/hidden_objects/gym_statues.asm +++ /dev/null @@ -1,39 +0,0 @@ -GymStatues: -; if in a gym and have the corresponding badge, a = GymStatueText2_id and jp PrintPredefTextID -; if in a gym and don't have the corresponding badge, a = GymStatueText1_id and jp PrintPredefTextID -; else ret - call EnableAutoTextBoxDrawing - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - ld hl, MapBadgeFlags - ld a, [wCurMap] - ld b, a -.loop - ld a, [hli] - cp $ff - ret z - cp b - jr z, .match - inc hl - jr .loop -.match - ld b, [hl] - ld a, [wBeatGymFlags] - and b - cp b - tx_pre_id GymStatueText2 - jr z, .haveBadge - tx_pre_id GymStatueText1 -.haveBadge - jp PrintPredefTextID - -INCLUDE "data/maps/badge_maps.asm" - -GymStatueText1:: - text_far _GymStatueText1 - text_end - -GymStatueText2:: - text_far _GymStatueText2 - text_end diff --git a/engine/events/hidden_objects/indigo_plateau_hq.asm b/engine/events/hidden_objects/indigo_plateau_hq.asm deleted file mode 100644 index e8fd0220..00000000 --- a/engine/events/hidden_objects/indigo_plateau_hq.asm +++ /dev/null @@ -1,10 +0,0 @@ -PrintIndigoPlateauHQText: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - call EnableAutoTextBoxDrawing - tx_pre_jump IndigoPlateauHQText - -IndigoPlateauHQText:: - text_far _IndigoPlateauHQText - text_end diff --git a/engine/events/hidden_objects/indigo_plateau_statues.asm b/engine/events/hidden_objects/indigo_plateau_statues.asm deleted file mode 100644 index f78a5a72..00000000 --- a/engine/events/hidden_objects/indigo_plateau_statues.asm +++ /dev/null @@ -1,24 +0,0 @@ -IndigoPlateauStatues:: - text_asm - ld hl, IndigoPlateauStatuesText1 - call PrintText - ld a, [wXCoord] - bit 0, a ; even or odd? - ld hl, IndigoPlateauStatuesText2 - jr nz, .ok - ld hl, IndigoPlateauStatuesText3 -.ok - call PrintText - jp TextScriptEnd - -IndigoPlateauStatuesText1: - text_far _IndigoPlateauStatuesText1 - text_end - -IndigoPlateauStatuesText2: - text_far _IndigoPlateauStatuesText2 - text_end - -IndigoPlateauStatuesText3: - text_far _IndigoPlateauStatuesText3 - text_end diff --git a/engine/events/hidden_objects/magazines.asm b/engine/events/hidden_objects/magazines.asm deleted file mode 100644 index b58636ff..00000000 --- a/engine/events/hidden_objects/magazines.asm +++ /dev/null @@ -1,8 +0,0 @@ -PrintMagazinesText: - call EnableAutoTextBoxDrawing - tx_pre MagazinesText - ret - -MagazinesText:: - text_far _MagazinesText - text_end diff --git a/engine/events/hidden_objects/museum_fossils.asm b/engine/events/hidden_objects/museum_fossils.asm deleted file mode 100644 index df74293f..00000000 --- a/engine/events/hidden_objects/museum_fossils.asm +++ /dev/null @@ -1,51 +0,0 @@ -AerodactylFossil: - ld a, FOSSIL_AERODACTYL - ld [wCurPartySpecies], a - call DisplayMonFrontSpriteInBox - call EnableAutoTextBoxDrawing - tx_pre AerodactylFossilText - ret - -AerodactylFossilText:: - text_far _AerodactylFossilText - text_end - -KabutopsFossil: - ld a, FOSSIL_KABUTOPS - ld [wCurPartySpecies], a - call DisplayMonFrontSpriteInBox - call EnableAutoTextBoxDrawing - tx_pre KabutopsFossilText - ret - -KabutopsFossilText:: - text_far _KabutopsFossilText - text_end - -DisplayMonFrontSpriteInBox: -; Displays a pokemon's front sprite in a pop-up window. - ld a, 1 - ldh [hAutoBGTransferEnabled], a - call Delay3 - xor a - ldh [hWY], a - call SaveScreenTilesToBuffer1 - ld a, MON_SPRITE_POPUP - ld [wTextBoxID], a - call DisplayTextBoxID - call UpdateSprites - ld a, [wCurPartySpecies] - ld [wCurSpecies], a - call GetMonHeader - ld de, vChars1 tile $31 - call LoadMonFrontSprite - ld a, $80 - ldh [hStartTileID], a - hlcoord 10, 11 - predef AnimateSendingOutMon - call WaitForTextScrollButtonPress - call LoadScreenTilesFromBuffer1 - call Delay3 - ld a, $90 - ldh [hWY], a - ret diff --git a/engine/events/hidden_objects/new_bike.asm b/engine/events/hidden_objects/new_bike.asm deleted file mode 100644 index 5bce5937..00000000 --- a/engine/events/hidden_objects/new_bike.asm +++ /dev/null @@ -1,7 +0,0 @@ -PrintNewBikeText: - call EnableAutoTextBoxDrawing - tx_pre_jump NewBicycleText - -NewBicycleText:: - text_far _NewBicycleText - text_end diff --git a/engine/events/hidden_objects/oaks_lab_email.asm b/engine/events/hidden_objects/oaks_lab_email.asm deleted file mode 100644 index b66babe0..00000000 --- a/engine/events/hidden_objects/oaks_lab_email.asm +++ /dev/null @@ -1,10 +0,0 @@ -DisplayOakLabEmailText: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - call EnableAutoTextBoxDrawing - tx_pre_jump OakLabEmailText - -OakLabEmailText:: - text_far _OakLabEmailText - text_end diff --git a/engine/events/hidden_objects/oaks_lab_posters.asm b/engine/events/hidden_objects/oaks_lab_posters.asm deleted file mode 100644 index 502cf951..00000000 --- a/engine/events/hidden_objects/oaks_lab_posters.asm +++ /dev/null @@ -1,29 +0,0 @@ -DisplayOakLabLeftPoster: - call EnableAutoTextBoxDrawing - tx_pre_jump PushStartText - -PushStartText:: - text_far _PushStartText - text_end - -DisplayOakLabRightPoster: - call EnableAutoTextBoxDrawing - ld hl, wPokedexOwned - ld b, wPokedexOwnedEnd - wPokedexOwned - call CountSetBits - ld a, [wNumSetBits] - cp 2 - tx_pre_id SaveOptionText - jr c, .ownLessThanTwo - ; own two or more mon - tx_pre_id StrengthsAndWeaknessesText -.ownLessThanTwo - jp PrintPredefTextID - -SaveOptionText:: - text_far _SaveOptionText - text_end - -StrengthsAndWeaknessesText:: - text_far _StrengthsAndWeaknessesText - text_end diff --git a/engine/events/hidden_objects/pokecenter_pc.asm b/engine/events/hidden_objects/pokecenter_pc.asm deleted file mode 100644 index 59867d1a..00000000 --- a/engine/events/hidden_objects/pokecenter_pc.asm +++ /dev/null @@ -1,11 +0,0 @@ -OpenPokemonCenterPC: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - call EnableAutoTextBoxDrawing - ld a, 1 << BIT_NO_AUTO_TEXT_BOX - ld [wAutoTextBoxDrawingControl], a - tx_pre_jump PokemonCenterPCText - -PokemonCenterPCText:: - script_pokecenter_pc diff --git a/engine/events/hidden_objects/pokemon_stuff.asm b/engine/events/hidden_objects/pokemon_stuff.asm deleted file mode 100644 index 267a191a..00000000 --- a/engine/events/hidden_objects/pokemon_stuff.asm +++ /dev/null @@ -1,3 +0,0 @@ -PokemonStuffText:: - text_far _PokemonStuffText - text_end diff --git a/engine/events/hidden_objects/reds_room.asm b/engine/events/hidden_objects/reds_room.asm deleted file mode 100644 index 7b8d51a0..00000000 --- a/engine/events/hidden_objects/reds_room.asm +++ /dev/null @@ -1,14 +0,0 @@ -PrintRedSNESText: - call EnableAutoTextBoxDrawing - tx_pre_jump RedBedroomSNESText - -RedBedroomSNESText:: - text_far _RedBedroomSNESText - text_end - -OpenRedsPC: - call EnableAutoTextBoxDrawing - tx_pre_jump RedBedroomPCText - -RedBedroomPCText:: - script_players_pc diff --git a/engine/events/hidden_objects/route_15_binoculars.asm b/engine/events/hidden_objects/route_15_binoculars.asm deleted file mode 100644 index 733ab73e..00000000 --- a/engine/events/hidden_objects/route_15_binoculars.asm +++ /dev/null @@ -1,14 +0,0 @@ -Route15GateLeftBinoculars: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - call EnableAutoTextBoxDrawing - tx_pre Route15UpstairsBinocularsText - ld a, ARTICUNO - ld [wCurPartySpecies], a - call PlayCry - jp DisplayMonFrontSpriteInBox - -Route15UpstairsBinocularsText:: - text_far _Route15UpstairsBinocularsText - text_end diff --git a/engine/events/hidden_objects/safari_game.asm b/engine/events/hidden_objects/safari_game.asm deleted file mode 100644 index fc014ce0..00000000 --- a/engine/events/hidden_objects/safari_game.asm +++ /dev/null @@ -1,83 +0,0 @@ -SafariZoneCheck:: - CheckEventHL EVENT_IN_SAFARI_ZONE ; if we are not in the Safari Zone, - jr z, SafariZoneGameStillGoing ; don't bother printing game over text - ld a, [wNumSafariBalls] - and a - jr z, SafariZoneGameOver - jr SafariZoneGameStillGoing - -SafariZoneCheckSteps:: -IF DEF(_DEBUG) - call DebugPressedOrHeldB - ret nz -ENDC - ld a, [wSafariSteps] - ld b, a - ld a, [wSafariSteps + 1] - ld c, a - or b - jr z, SafariZoneGameOver - dec bc - ld a, b - ld [wSafariSteps], a - ld a, c - ld [wSafariSteps + 1], a -SafariZoneGameStillGoing: - xor a - ld [wSafariZoneGameOver], a - ret - -SafariZoneGameOver: - call EnableAutoTextBoxDrawing - xor a - ld [wAudioFadeOutControl], a - dec a ; SFX_STOP_ALL_MUSIC - call PlaySound - ld c, BANK(SFX_Safari_Zone_PA) - ld a, SFX_SAFARI_ZONE_PA - call PlayMusic -.waitForMusicToPlay - ld a, [wChannelSoundIDs + CHAN5] - cp SFX_SAFARI_ZONE_PA - jr nz, .waitForMusicToPlay - ld a, TEXT_SAFARI_GAME_OVER - ldh [hTextID], a - call DisplayTextID - xor a - ld [wPlayerMovingDirection], a - ld a, SAFARI_ZONE_GATE - ldh [hWarpDestinationMap], a - ld a, $3 - ld [wDestinationWarpID], a - ld a, SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI - ld [wSafariZoneGateCurScript], a - SetEvent EVENT_SAFARI_GAME_OVER - ld a, 1 - ld [wSafariZoneGameOver], a - ret - -PrintSafariGameOverText:: - xor a - ld [wJoyIgnore], a - ld hl, SafariGameOverText - jp PrintText - -SafariGameOverText: - text_asm - ld a, [wNumSafariBalls] - and a - jr z, .noMoreSafariBalls - ld hl, TimesUpText - call PrintText -.noMoreSafariBalls - ld hl, GameOverText - call PrintText - jp TextScriptEnd - -TimesUpText: - text_far _TimesUpText - text_end - -GameOverText: - text_far _GameOverText - text_end diff --git a/engine/events/hidden_objects/school_blackboard.asm b/engine/events/hidden_objects/school_blackboard.asm deleted file mode 100644 index 4ac83953..00000000 --- a/engine/events/hidden_objects/school_blackboard.asm +++ /dev/null @@ -1,224 +0,0 @@ -PrintBlackboardLinkCableText: - call EnableAutoTextBoxDrawing - ld a, $1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld a, [wHiddenObjectFunctionArgument] - call PrintPredefTextID - ret - -LinkCableHelp:: - text_asm - call SaveScreenTilesToBuffer1 - ld hl, LinkCableHelpText1 - call PrintText - xor a - ld [wMenuItemOffset], a ; not used - ld [wCurrentMenuItem], a - ld [wLastMenuItem], a - ld a, PAD_A | PAD_B - ld [wMenuWatchedKeys], a - ld a, 3 - ld [wMaxMenuItem], a - ld a, 2 - ld [wTopMenuItemY], a - ld a, 1 - ld [wTopMenuItemX], a -.linkHelpLoop - ld hl, wStatusFlags5 - set BIT_NO_TEXT_DELAY, [hl] - hlcoord 0, 0 - ld b, 8 - ld c, 13 - call TextBoxBorder - hlcoord 2, 2 - ld de, HowToLinkText - call PlaceString - ld hl, LinkCableHelpText2 - call PrintText - call HandleMenuInput - bit B_PAD_B, a - jr nz, .exit - ld a, [wCurrentMenuItem] - cp 3 ; pressed a on "STOP READING" - jr z, .exit - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - ld hl, LinkCableInfoTexts - add a - ld d, 0 - ld e, a - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call PrintText - jp .linkHelpLoop -.exit - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - call LoadScreenTilesFromBuffer1 - jp TextScriptEnd - -LinkCableHelpText1: - text_far _LinkCableHelpText1 - text_end - -LinkCableHelpText2: - text_far _LinkCableHelpText2 - text_end - -HowToLinkText: - db "HOW TO LINK" - next "COLOSSEUM" - next "TRADE CENTER" - next "STOP READING@" - -LinkCableInfoTexts: - dw LinkCableInfoText1 - dw LinkCableInfoText2 - dw LinkCableInfoText3 - -LinkCableInfoText1: - text_far _LinkCableInfoText1 - text_end - -LinkCableInfoText2: - text_far _LinkCableInfoText2 - text_end - -LinkCableInfoText3: - text_far _LinkCableInfoText3 - text_end - -ViridianSchoolBlackboard:: - text_asm - call SaveScreenTilesToBuffer1 - ld hl, ViridianSchoolBlackboardText1 - call PrintText - xor a - ld [wMenuItemOffset], a - ld [wCurrentMenuItem], a - ld [wLastMenuItem], a - ld a, PAD_LEFT | PAD_RIGHT | PAD_A | PAD_B - ld [wMenuWatchedKeys], a - ld a, 2 - ld [wMaxMenuItem], a - ld a, 2 - ld [wTopMenuItemY], a - ld a, 1 - ld [wTopMenuItemX], a -.blackboardLoop - ld hl, wStatusFlags5 - set BIT_NO_TEXT_DELAY, [hl] - hlcoord 0, 0 - lb bc, 6, 10 - call TextBoxBorder - hlcoord 1, 2 - ld de, StatusAilmentText1 - call PlaceString - hlcoord 6, 2 - ld de, StatusAilmentText2 - call PlaceString - ld hl, ViridianSchoolBlackboardText2 - call PrintText - call HandleMenuInput ; pressing up and down is handled in here - bit B_PAD_B, a ; pressed b - jr nz, .exitBlackboard - bit B_PAD_RIGHT, a - jr z, .didNotPressRight - ; move cursor to right column - ld a, 2 - ld [wMaxMenuItem], a - ld a, 2 - ld [wTopMenuItemY], a - ld a, 6 - ld [wTopMenuItemX], a - ld a, 3 ; in the the right column, use an offset to prevent overlap - ld [wMenuItemOffset], a - jr .blackboardLoop -.didNotPressRight - bit B_PAD_LEFT, a - jr z, .didNotPressLeftOrRight - ; move cursor to left column - ld a, 2 - ld [wMaxMenuItem], a - ld a, 2 - ld [wTopMenuItemY], a - ld a, 1 - ld [wTopMenuItemX], a - xor a - ld [wMenuItemOffset], a - jr .blackboardLoop -.didNotPressLeftOrRight - ld a, [wCurrentMenuItem] - ld b, a - ld a, [wMenuItemOffset] - add b - cp 5 ; cursor is pointing to "QUIT" - jr z, .exitBlackboard - ; we must have pressed a on a status condition - ; so print the text - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - ld hl, ViridianBlackboardStatusPointers - add a - ld d, 0 - ld e, a - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call PrintText - jp .blackboardLoop -.exitBlackboard - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - call LoadScreenTilesFromBuffer1 - jp TextScriptEnd - -ViridianSchoolBlackboardText1: - text_far _ViridianSchoolBlackboardText1 - text_end - -ViridianSchoolBlackboardText2: - text_far _ViridianSchoolBlackboardText2 - text_end - -StatusAilmentText1: - db " SLP" - next " PSN" - next " PAR@" - -StatusAilmentText2: - db " BRN" - next " FRZ" - next " QUIT@" - - db "@" ; unused - -ViridianBlackboardStatusPointers: - dw ViridianBlackboardSleepText - dw ViridianBlackboardPoisonText - dw ViridianBlackboardPrlzText - dw ViridianBlackboardBurnText - dw ViridianBlackboardFrozenText - -ViridianBlackboardSleepText: - text_far _ViridianBlackboardSleepText - text_end - -ViridianBlackboardPoisonText: - text_far _ViridianBlackboardPoisonText - text_end - -ViridianBlackboardPrlzText: - text_far _ViridianBlackboardPrlzText - text_end - -ViridianBlackboardBurnText: - text_far _ViridianBlackboardBurnText - text_end - -ViridianBlackboardFrozenText: - text_far _ViridianBlackboardFrozenText - text_end diff --git a/engine/events/hidden_objects/school_notebooks.asm b/engine/events/hidden_objects/school_notebooks.asm deleted file mode 100644 index 96a44ab5..00000000 --- a/engine/events/hidden_objects/school_notebooks.asm +++ /dev/null @@ -1,65 +0,0 @@ -PrintNotebookText: - call EnableAutoTextBoxDrawing - ld a, $1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld a, [wHiddenObjectFunctionArgument] - jp PrintPredefTextID - -TMNotebook:: - text_far TMNotebookText - text_waitbutton - text_end - -ViridianSchoolNotebook:: - text_asm - ld hl, ViridianSchoolNotebookText1 - call PrintText - call TurnPageSchoolNotebook - jr nz, .doneReading - ld hl, ViridianSchoolNotebookText2 - call PrintText - call TurnPageSchoolNotebook - jr nz, .doneReading - ld hl, ViridianSchoolNotebookText3 - call PrintText - call TurnPageSchoolNotebook - jr nz, .doneReading - ld hl, ViridianSchoolNotebookText4 - call PrintText - ld hl, ViridianSchoolNotebookText5 - call PrintText -.doneReading - jp TextScriptEnd - -TurnPageSchoolNotebook: - ld hl, TurnPageText - call PrintText - call YesNoChoice - ld a, [wCurrentMenuItem] - and a - ret - -TurnPageText: - text_far _TurnPageText - text_end - -ViridianSchoolNotebookText5: - text_far _ViridianSchoolNotebookText5 - text_waitbutton - text_end - -ViridianSchoolNotebookText1: - text_far _ViridianSchoolNotebookText1 - text_end - -ViridianSchoolNotebookText2: - text_far _ViridianSchoolNotebookText2 - text_end - -ViridianSchoolNotebookText3: - text_far _ViridianSchoolNotebookText3 - text_end - -ViridianSchoolNotebookText4: - text_far _ViridianSchoolNotebookText4 - text_end diff --git a/engine/events/hidden_objects/town_map.asm b/engine/events/hidden_objects/town_map.asm deleted file mode 100644 index 11f7cbc7..00000000 --- a/engine/events/hidden_objects/town_map.asm +++ /dev/null @@ -1,22 +0,0 @@ -TownMapText:: - text_far _TownMapText - text_promptbutton - text_asm - ld a, $1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld hl, wStatusFlags5 - set BIT_NO_TEXT_DELAY, [hl] - call GBPalWhiteOutWithDelay3 - xor a - ldh [hWY], a - inc a - ldh [hAutoBGTransferEnabled], a - call LoadFontTilePatterns - farcall DisplayTownMap - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - ld de, TextScriptEnd - push de - ldh a, [hLoadedROMBank] - push af - jp CloseTextDisplay diff --git a/engine/events/hidden_objects/vermilion_gym_trash.asm b/engine/events/hidden_objects/vermilion_gym_trash.asm deleted file mode 100644 index 73e50cca..00000000 --- a/engine/events/hidden_objects/vermilion_gym_trash.asm +++ /dev/null @@ -1,169 +0,0 @@ -PrintTrashText: - call EnableAutoTextBoxDrawing - tx_pre_jump VermilionGymTrashText - -VermilionGymTrashText:: - text_far _VermilionGymTrashText - text_end - -GymTrashScript: - call EnableAutoTextBoxDrawing - ld a, [wHiddenObjectFunctionArgument] - ld [wGymTrashCanIndex], a - -; Don't do the trash can puzzle if it's already been done. - CheckEvent EVENT_2ND_LOCK_OPENED - jr z, .ok - - tx_pre_jump VermilionGymTrashText - -.ok - CheckEventReuseA EVENT_1ST_LOCK_OPENED - jr nz, .trySecondLock - - ld a, [wFirstLockTrashCanIndex] - ld b, a - ld a, [wGymTrashCanIndex] - cp b - jr z, .openFirstLock - - tx_pre_id VermilionGymTrashText - jr .done - -.openFirstLock -; Next can is trying for the second switch. - SetEvent EVENT_1ST_LOCK_OPENED - - ld hl, GymTrashCans - ld a, [wGymTrashCanIndex] - ; * 5 - ld b, a - add a - add a - add b - - ld d, 0 - ld e, a - add hl, de - ld a, [hli] - -; Bug: This code should calculate a value in the range [0, 3], -; but if the mask and random number don't have any 1 bits in common, then -; the result of the AND will be 0. When 1 is subtracted from that, the value -; will become $ff. This will result in 255 being added to hl, which will cause -; hl to point to one of the zero bytes that pad the end of the ROM bank. -; Trash can 0 was intended to be able to have the second lock only when the -; first lock was in trash can 1 or 3. However, due to this bug, trash can 0 can -; have the second lock regardless of which trash can had the first lock. - - ldh [hGymTrashCanRandNumMask], a - push hl - call Random - swap a - ld b, a - ldh a, [hGymTrashCanRandNumMask] - and b - dec a - pop hl - - ld d, 0 - ld e, a - add hl, de - ld a, [hl] - and $f - ld [wSecondLockTrashCanIndex], a - - tx_pre_id VermilionGymTrashSuccessText1 - jr .done - -.trySecondLock - ld a, [wSecondLockTrashCanIndex] - ld b, a - ld a, [wGymTrashCanIndex] - cp b - jr z, .openSecondLock - -; Reset the cans. - ResetEvent EVENT_1ST_LOCK_OPENED - call Random - - and $e - ld [wFirstLockTrashCanIndex], a - - tx_pre_id VermilionGymTrashFailText - jr .done - -.openSecondLock -; Completed the trash can puzzle. - SetEvent EVENT_2ND_LOCK_OPENED - ld hl, wCurrentMapScriptFlags - set BIT_CUR_MAP_LOADED_2, [hl] - - tx_pre_id VermilionGymTrashSuccessText3 - -.done - jp PrintPredefTextID - -GymTrashCans: -; byte 0: mask for random number -; bytes 1-4: indices of the trash cans that can have the second lock -; (but see the comment above explaining a bug regarding this) -; Note that the mask is simply the number of valid trash can indices that -; follow. The remaining bytes are filled with 0 to pad the length of each entry -; to 5 bytes. - db 2, 1, 3, 0, 0 ; 0 - db 3, 0, 2, 4, 0 ; 1 - db 2, 1, 5, 0, 0 ; 2 - db 3, 0, 4, 6, 0 ; 3 - db 4, 1, 3, 5, 7 ; 4 - db 3, 2, 4, 8, 0 ; 5 - db 3, 3, 7, 9, 0 ; 6 - db 4, 4, 6, 8, 10 ; 7 - db 3, 5, 7, 11, 0 ; 8 - db 3, 6, 10, 12, 0 ; 9 - db 4, 7, 9, 11, 13 ; 10 - db 3, 8, 10, 14, 0 ; 11 - db 2, 9, 13, 0, 0 ; 12 - db 3, 10, 12, 14, 0 ; 13 - db 2, 11, 13, 0, 0 ; 14 - -VermilionGymTrashSuccessText1:: - text_far _VermilionGymTrashSuccessText1 - text_asm - call WaitForSoundToFinish - ld a, SFX_SWITCH - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd - -; unused -VermilionGymTrashSuccessText2:: - text_far _VermilionGymTrashSuccessText2 - text_end - -; unused -VermilionGymTrashSuccessPlaySfx: - text_asm - call WaitForSoundToFinish - ld a, SFX_SWITCH - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd - -VermilionGymTrashSuccessText3:: - text_far _VermilionGymTrashSuccessText3 - text_asm - call WaitForSoundToFinish - ld a, SFX_GO_INSIDE - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd - -VermilionGymTrashFailText:: - text_far _VermilionGymTrashFailText - text_asm - call WaitForSoundToFinish - ld a, SFX_DENIED - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd diff --git a/engine/overworld/hidden_events.asm b/engine/overworld/hidden_events.asm new file mode 100644 index 00000000..8369e533 --- /dev/null +++ b/engine/overworld/hidden_events.asm @@ -0,0 +1,133 @@ +IsPlayerOnDungeonWarp:: + xor a + ld [wWhichDungeonWarp], a + ld a, [wStatusFlags3] + bit BIT_ON_DUNGEON_WARP, a + ret nz + call ArePlayerCoordsInArray + ret nc + ld a, [wCoordIndex] + ld [wWhichDungeonWarp], a + ld hl, wStatusFlags3 + set BIT_ON_DUNGEON_WARP, [hl] + ld hl, wStatusFlags6 + set BIT_DUNGEON_WARP, [hl] + ret + +; if a hidden event was found, stores $00 in [hDidntFindAnyHiddenEvent], else stores $ff +CheckForHiddenEvent:: + ld hl, hItemAlreadyFound + xor a + ld [hli], a ; [hItemAlreadyFound] + ld [hli], a ; [hSavedMapTextPtr] + ld [hli], a ; [hSavedMapTextPtr + 1] + ld [hl], a ; [hDidntFindAnyHiddenEvent] + ld de, $0 + ld hl, HiddenEventMaps +.hiddenMapLoop + ld a, [hli] + ld b, a + cp $ff + jr z, .noMatch + ld a, [wCurMap] + cp b + jr z, .foundMatchingMap + inc de + inc de + jr .hiddenMapLoop +.foundMatchingMap + ld hl, HiddenEventPointers + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + push hl + ld hl, wHiddenEventFunctionArgument + xor a + ld [hli], a + ld [hli], a + ld [hl], a + pop hl +.hiddenEventLoop + ld a, [hli] + cp $ff + jr z, .noMatch + ld [wHiddenEventY], a + ld b, a + ld a, [hli] + ld [wHiddenEventX], a + ld c, a + call CheckIfCoordsInFrontOfPlayerMatch + ldh a, [hCoordsInFrontOfPlayerMatch] + and a + jr z, .foundMatchingEvent + inc hl + inc hl + inc hl + inc hl + push hl + ld hl, wHiddenEventIndex + inc [hl] + pop hl + jr .hiddenEventLoop +.foundMatchingEvent + ld a, [hli] + ld [wHiddenEventFunctionArgument], a + ld a, [hli] + ld [wHiddenEventFunctionRomBank], a + ld a, [hli] + ld h, [hl] + ld l, a + ret +.noMatch + ld a, $ff + ldh [hDidntFindAnyHiddenEvent], a + ret + +; checks if the coordinates in front of the player's sprite match Y in b and X in c +; [hCoordsInFrontOfPlayerMatch] = $00 if they match, $ff if they don't match +CheckIfCoordsInFrontOfPlayerMatch: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + jr z, .facingUp + cp SPRITE_FACING_LEFT + jr z, .facingLeft + cp SPRITE_FACING_RIGHT + jr z, .facingRight +; facing down + ld a, [wYCoord] + inc a + jr .upDownCommon +.facingUp + ld a, [wYCoord] + dec a +.upDownCommon + cp b + jr nz, .didNotMatch + ld a, [wXCoord] + cp c + jr nz, .didNotMatch + jr .matched +.facingLeft + ld a, [wXCoord] + dec a + jr .leftRightCommon +.facingRight + ld a, [wXCoord] + inc a +.leftRightCommon + cp c + jr nz, .didNotMatch + ld a, [wYCoord] + cp b + jr nz, .didNotMatch +.matched + xor a + jr .done +.didNotMatch + ld a, $ff +.done + ldh [hCoordsInFrontOfPlayerMatch], a + ret + +INCLUDE "data/events/hidden_events.asm" diff --git a/engine/overworld/hidden_objects.asm b/engine/overworld/hidden_objects.asm deleted file mode 100644 index 2798864a..00000000 --- a/engine/overworld/hidden_objects.asm +++ /dev/null @@ -1,133 +0,0 @@ -IsPlayerOnDungeonWarp:: - xor a - ld [wWhichDungeonWarp], a - ld a, [wStatusFlags3] - bit BIT_ON_DUNGEON_WARP, a - ret nz - call ArePlayerCoordsInArray - ret nc - ld a, [wCoordIndex] - ld [wWhichDungeonWarp], a - ld hl, wStatusFlags3 - set BIT_ON_DUNGEON_WARP, [hl] - ld hl, wStatusFlags6 - set BIT_DUNGEON_WARP, [hl] - ret - -; if a hidden object was found, stores $00 in [hDidntFindAnyHiddenObject], else stores $ff -CheckForHiddenObject:: - ld hl, hItemAlreadyFound - xor a - ld [hli], a ; [hItemAlreadyFound] - ld [hli], a ; [hSavedMapTextPtr] - ld [hli], a ; [hSavedMapTextPtr + 1] - ld [hl], a ; [hDidntFindAnyHiddenObject] - ld de, $0 - ld hl, HiddenObjectMaps -.hiddenMapLoop - ld a, [hli] - ld b, a - cp $ff - jr z, .noMatch - ld a, [wCurMap] - cp b - jr z, .foundMatchingMap - inc de - inc de - jr .hiddenMapLoop -.foundMatchingMap - ld hl, HiddenObjectPointers - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - push hl - ld hl, wHiddenObjectFunctionArgument - xor a - ld [hli], a - ld [hli], a - ld [hl], a - pop hl -.hiddenObjectLoop - ld a, [hli] - cp $ff - jr z, .noMatch - ld [wHiddenObjectY], a - ld b, a - ld a, [hli] - ld [wHiddenObjectX], a - ld c, a - call CheckIfCoordsInFrontOfPlayerMatch - ldh a, [hCoordsInFrontOfPlayerMatch] - and a - jr z, .foundMatchingObject - inc hl - inc hl - inc hl - inc hl - push hl - ld hl, wHiddenObjectIndex - inc [hl] - pop hl - jr .hiddenObjectLoop -.foundMatchingObject - ld a, [hli] - ld [wHiddenObjectFunctionArgument], a - ld a, [hli] - ld [wHiddenObjectFunctionRomBank], a - ld a, [hli] - ld h, [hl] - ld l, a - ret -.noMatch - ld a, $ff - ldh [hDidntFindAnyHiddenObject], a - ret - -; checks if the coordinates in front of the player's sprite match Y in b and X in c -; [hCoordsInFrontOfPlayerMatch] = $00 if they match, $ff if they don't match -CheckIfCoordsInFrontOfPlayerMatch: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - jr z, .facingUp - cp SPRITE_FACING_LEFT - jr z, .facingLeft - cp SPRITE_FACING_RIGHT - jr z, .facingRight -; facing down - ld a, [wYCoord] - inc a - jr .upDownCommon -.facingUp - ld a, [wYCoord] - dec a -.upDownCommon - cp b - jr nz, .didNotMatch - ld a, [wXCoord] - cp c - jr nz, .didNotMatch - jr .matched -.facingLeft - ld a, [wXCoord] - dec a - jr .leftRightCommon -.facingRight - ld a, [wXCoord] - inc a -.leftRightCommon - cp c - jr nz, .didNotMatch - ld a, [wYCoord] - cp b - jr nz, .didNotMatch -.matched - xor a - jr .done -.didNotMatch - ld a, $ff -.done - ldh [hCoordsInFrontOfPlayerMatch], a - ret - -INCLUDE "data/events/hidden_objects.asm" diff --git a/engine/slots/game_corner_slots.asm b/engine/slots/game_corner_slots.asm index 48321974..d83d9d6a 100644 --- a/engine/slots/game_corner_slots.asm +++ b/engine/slots/game_corner_slots.asm @@ -1,5 +1,5 @@ StartSlotMachine: - ld a, [wHiddenObjectFunctionArgument] + ld a, [wHiddenEventFunctionArgument] cp SLOTS_OUTOFORDER jr z, .printOutOfOrder cp SLOTS_OUTTOLUNCH @@ -10,9 +10,9 @@ StartSlotMachine: ld a, [wCanPlaySlots] and a ret z - ld a, [wLuckySlotHiddenObjectIndex] + ld a, [wLuckySlotHiddenEventIndex] ld b, a - ld a, [wHiddenObjectIndex] + ld a, [wHiddenEventIndex] inc a cp b jr z, .match diff --git a/home.asm b/home.asm index 4090a274..201a0a22 100644 --- a/home.asm +++ b/home.asm @@ -80,5 +80,5 @@ INCLUDE "home/reload_sprites.asm" INCLUDE "home/give.asm" INCLUDE "home/random.asm" INCLUDE "home/predef.asm" -INCLUDE "home/hidden_objects.asm" +INCLUDE "home/hidden_events.asm" INCLUDE "home/predef_text.asm" diff --git a/home/hidden_events.asm b/home/hidden_events.asm new file mode 100644 index 00000000..5acc95d9 --- /dev/null +++ b/home/hidden_events.asm @@ -0,0 +1,39 @@ +UpdateCinnabarGymGateTileBlocks:: + farjp UpdateCinnabarGymGateTileBlocks_ + +CheckForHiddenEventOrBookshelfOrCardKeyDoor:: + ldh a, [hLoadedROMBank] + push af + ldh a, [hJoyHeld] + bit B_PAD_A, a + jr z, .nothingFound +; A button is pressed + ld a, BANK(CheckForHiddenEvent) + ld [rROMB], a + ldh [hLoadedROMBank], a + call CheckForHiddenEvent + ldh a, [hDidntFindAnyHiddenEvent] + and a + jr nz, .hiddenEventNotFound + ld a, [wHiddenEventFunctionRomBank] + ld [rROMB], a + ldh [hLoadedROMBank], a + ld de, .returnAddress + push de + jp hl +.returnAddress + xor a + jr .done +.hiddenEventNotFound + farcall PrintBookshelfText + ldh a, [hInteractedWithBookshelf] + and a + jr z, .done +.nothingFound + ld a, $ff +.done + ldh [hItemAlreadyFound], a + pop af + ld [rROMB], a + ldh [hLoadedROMBank], a + ret diff --git a/home/hidden_objects.asm b/home/hidden_objects.asm deleted file mode 100644 index bb513b9d..00000000 --- a/home/hidden_objects.asm +++ /dev/null @@ -1,39 +0,0 @@ -UpdateCinnabarGymGateTileBlocks:: - farjp UpdateCinnabarGymGateTileBlocks_ - -CheckForHiddenObjectOrBookshelfOrCardKeyDoor:: - ldh a, [hLoadedROMBank] - push af - ldh a, [hJoyHeld] - bit B_PAD_A, a - jr z, .nothingFound -; A button is pressed - ld a, BANK(CheckForHiddenObject) - ld [rROMB], a - ldh [hLoadedROMBank], a - call CheckForHiddenObject - ldh a, [hDidntFindAnyHiddenObject] - and a - jr nz, .hiddenObjectNotFound - ld a, [wHiddenObjectFunctionRomBank] - ld [rROMB], a - ldh [hLoadedROMBank], a - ld de, .returnAddress - push de - jp hl -.returnAddress - xor a - jr .done -.hiddenObjectNotFound - farcall PrintBookshelfText - ldh a, [hInteractedWithBookshelf] - and a - jr z, .done -.nothingFound - ld a, $ff -.done - ldh [hItemAlreadyFound], a - pop af - ld [rROMB], a - ldh [hLoadedROMBank], a - ret diff --git a/home/overworld.asm b/home/overworld.asm index 58550167..a06a32da 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -87,10 +87,10 @@ OverworldLoopLessDelay:: jp nz, .noDirectionButtonsPressed call IsPlayerCharacterBeingControlledByGame jr nz, .checkForOpponent - call CheckForHiddenObjectOrBookshelfOrCardKeyDoor + call CheckForHiddenEventOrBookshelfOrCardKeyDoor ldh a, [hItemAlreadyFound] and a - jp z, OverworldLoop ; jump if a hidden object or bookshelf was found, but not if a card key door was found + jp z, OverworldLoop ; jump if a hidden event or bookshelf was found, but not if a card key door was found call IsSpriteOrSignInFrontOfPlayer ldh a, [hTextID] and a diff --git a/layout.link b/layout.link index 454b3bec..1b454a58 100644 --- a/layout.link +++ b/layout.link @@ -59,7 +59,7 @@ ROMX $7 "Maps 3" "Pokémon Names" "Maps 4" - "Hidden Objects 1" + "Hidden Events 1" ROMX $8 "Sound Effect Headers 2" "Music Headers 2" @@ -93,7 +93,7 @@ ROMX $11 "Maps 5" "Pokédex Rating" "Maps 6" - "Hidden Objects Core" + "Hidden Events Core" ROMX $12 "Maps 7" "Screen Effects" @@ -105,7 +105,7 @@ ROMX $13 ROMX $14 "Maps 10" "Battle Engine 8" - "Hidden Objects 2" + "Hidden Events 2" ROMX $15 "Maps 11" "Battle Engine 9" @@ -121,12 +121,12 @@ ROMX $17 "Maps 15" "Starter Dex" "Maps 16" - "Hidden Objects 3" + "Hidden Events 3" ROMX $18 "Maps 17" "Cinnabar Lab Fossils" "Maps 18" - "Hidden Objects 4" + "Hidden Events 4" ROMX $19 "Tilesets 1" ROMX $1A diff --git a/main.asm b/main.asm index 313bd448..951afdc2 100644 --- a/main.asm +++ b/main.asm @@ -67,12 +67,12 @@ INCLUDE "engine/movie/oak_speech/init_player_data.asm" INCLUDE "engine/items/get_bag_item_quantity.asm" INCLUDE "engine/overworld/pathfinding.asm" INCLUDE "engine/gfx/hp_bar.asm" -INCLUDE "engine/events/hidden_objects/bookshelves.asm" -INCLUDE "engine/events/hidden_objects/indigo_plateau_statues.asm" -INCLUDE "engine/events/hidden_objects/book_or_sculpture.asm" -INCLUDE "engine/events/hidden_objects/elevator.asm" -INCLUDE "engine/events/hidden_objects/town_map.asm" -INCLUDE "engine/events/hidden_objects/pokemon_stuff.asm" +INCLUDE "engine/events/hidden_events/bookshelves.asm" +INCLUDE "engine/events/hidden_events/indigo_plateau_statues.asm" +INCLUDE "engine/events/hidden_events/book_or_sculpture.asm" +INCLUDE "engine/events/hidden_events/elevator.asm" +INCLUDE "engine/events/hidden_events/town_map.asm" +INCLUDE "engine/events/hidden_events/pokemon_stuff.asm" SECTION "Font Graphics", ROMX @@ -127,16 +127,16 @@ INCLUDE "engine/movie/oak_speech/clear_save.asm" INCLUDE "engine/events/elevator.asm" -SECTION "Hidden Objects 1", ROMX +SECTION "Hidden Events 1", ROMX INCLUDE "engine/menus/oaks_pc.asm" -INCLUDE "engine/events/hidden_objects/new_bike.asm" -INCLUDE "engine/events/hidden_objects/oaks_lab_posters.asm" -INCLUDE "engine/events/hidden_objects/safari_game.asm" -INCLUDE "engine/events/hidden_objects/cinnabar_gym_quiz.asm" -INCLUDE "engine/events/hidden_objects/magazines.asm" -INCLUDE "engine/events/hidden_objects/bills_house_pc.asm" -INCLUDE "engine/events/hidden_objects/oaks_lab_email.asm" +INCLUDE "engine/events/hidden_events/new_bike.asm" +INCLUDE "engine/events/hidden_events/oaks_lab_posters.asm" +INCLUDE "engine/events/hidden_events/safari_game.asm" +INCLUDE "engine/events/hidden_events/cinnabar_gym_quiz.asm" +INCLUDE "engine/events/hidden_events/magazines.asm" +INCLUDE "engine/events/hidden_events/bills_house_pc.asm" +INCLUDE "engine/events/hidden_events/oaks_lab_email.asm" SECTION "Bill's PC", ROMX @@ -217,9 +217,9 @@ SECTION "Pokédex Rating", ROMX INCLUDE "engine/events/pokedex_rating.asm" -SECTION "Hidden Objects Core", ROMX +SECTION "Hidden Events Core", ROMX -INCLUDE "engine/overworld/hidden_objects.asm" +INCLUDE "engine/overworld/hidden_events.asm" SECTION "Screen Effects", ROMX @@ -239,13 +239,13 @@ INCLUDE "engine/battle/init_battle_variables.asm" INCLUDE "engine/battle/move_effects/paralyze.asm" -SECTION "Hidden Objects 2", ROMX +SECTION "Hidden Events 2", ROMX INCLUDE "engine/events/card_key.asm" INCLUDE "engine/events/prize_menu.asm" -INCLUDE "engine/events/hidden_objects/school_notebooks.asm" -INCLUDE "engine/events/hidden_objects/fighting_dojo.asm" -INCLUDE "engine/events/hidden_objects/indigo_plateau_hq.asm" +INCLUDE "engine/events/hidden_events/school_notebooks.asm" +INCLUDE "engine/events/hidden_events/fighting_dojo.asm" +INCLUDE "engine/events/hidden_events/indigo_plateau_hq.asm" SECTION "Battle Engine 9", ROMX @@ -280,14 +280,14 @@ SECTION "Starter Dex", ROMX INCLUDE "engine/events/starter_dex.asm" -SECTION "Hidden Objects 3", ROMX +SECTION "Hidden Events 3", ROMX INCLUDE "engine/pokemon/set_types.asm" -INCLUDE "engine/events/hidden_objects/reds_room.asm" -INCLUDE "engine/events/hidden_objects/route_15_binoculars.asm" -INCLUDE "engine/events/hidden_objects/museum_fossils.asm" -INCLUDE "engine/events/hidden_objects/school_blackboard.asm" -INCLUDE "engine/events/hidden_objects/vermilion_gym_trash.asm" +INCLUDE "engine/events/hidden_events/reds_room.asm" +INCLUDE "engine/events/hidden_events/route_15_binoculars.asm" +INCLUDE "engine/events/hidden_events/museum_fossils.asm" +INCLUDE "engine/events/hidden_events/school_blackboard.asm" +INCLUDE "engine/events/hidden_events/vermilion_gym_trash.asm" SECTION "Cinnabar Lab Fossils", ROMX @@ -295,12 +295,12 @@ SECTION "Cinnabar Lab Fossils", ROMX INCLUDE "engine/events/cinnabar_lab.asm" -SECTION "Hidden Objects 4", ROMX +SECTION "Hidden Events 4", ROMX -INCLUDE "engine/events/hidden_objects/gym_statues.asm" -INCLUDE "engine/events/hidden_objects/bench_guys.asm" -INCLUDE "engine/events/hidden_objects/blues_room.asm" -INCLUDE "engine/events/hidden_objects/pokecenter_pc.asm" +INCLUDE "engine/events/hidden_events/gym_statues.asm" +INCLUDE "engine/events/hidden_events/bench_guys.asm" +INCLUDE "engine/events/hidden_events/blues_room.asm" +INCLUDE "engine/events/hidden_events/pokecenter_pc.asm" SECTION "Battle Engine 11", ROMX diff --git a/ram/hram.asm b/ram/hram.asm index 9cfb5327..24260b80 100644 --- a/ram/hram.asm +++ b/ram/hram.asm @@ -370,7 +370,7 @@ hSpriteMapXCoord:: db NEXTU hItemAlreadyFound:: db ds 2 -hDidntFindAnyHiddenObject:: db +hDidntFindAnyHiddenEvent:: db NEXTU ds 1 diff --git a/ram/wram.asm b/ram/wram.asm index 5eefaf06..44775192 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -390,7 +390,7 @@ wSlotMachineSevenAndBarModeChance:: db ; ROM back to return to when the player is done with the slot machine wSlotMachineSavedROMBank:: db ds 166 -wLuckySlotHiddenObjectIndex:: db +wLuckySlotHiddenEventIndex:: db NEXTU ; values between 0-6. Shake screen horizontally, shake screen vertically, blink Pokemon... @@ -744,12 +744,12 @@ wTempCoins1:: dw wTempCoins2:: dw NEXTU -wHiddenObjectFunctionArgument:: db -wHiddenObjectFunctionRomBank:: db -wHiddenObjectIndex:: db -wHiddenObjectY:: db +wHiddenEventFunctionArgument:: db +wHiddenEventFunctionRomBank:: db +wHiddenEventIndex:: db +wHiddenEventY:: db wHiddenItemOrCoinsIndex:: -wHiddenObjectX:: db +wHiddenEventX:: db NEXTU wPlayerSpinInPlaceAnimFrameDelay:: db diff --git a/scripts/GameCorner.asm b/scripts/GameCorner.asm index 0ead1947..94625d2a 100644 --- a/scripts/GameCorner.asm +++ b/scripts/GameCorner.asm @@ -20,7 +20,7 @@ GameCornerSelectLuckySlotMachine: srl a srl a srl a - ld [wLuckySlotHiddenObjectIndex], a + ld [wLuckySlotHiddenEventIndex], a ret GameCornerSetRocketHideoutDoorTile: diff --git a/scripts/SafariZoneGate.asm b/scripts/SafariZoneGate.asm index 3052cac9..21f72066 100644 --- a/scripts/SafariZoneGate.asm +++ b/scripts/SafariZoneGate.asm @@ -13,7 +13,7 @@ SafariZoneGate_ScriptPointers: dw_const SafariZoneGatePlayerMovingDownScript, SCRIPT_SAFARIZONEGATE_PLAYER_MOVING_DOWN dw_const SafariZoneGateLeavingSafariScript, SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI dw_const SafariZoneGateSetScriptAfterMoveScript, SCRIPT_SAFARIZONEGATE_SET_SCRIPT_AFTER_MOVE - EXPORT SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI ; used by engine/events/hidden_objects/safari_game.asm + EXPORT SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI ; used by engine/events/hidden_events/safari_game.asm SafariZoneGateDefaultScript: ld hl, .PlayerNextToSafariZoneWorker1CoordsArray -- cgit v1.3.1-sl0p From 85b9d866c8392b9ca56c1c17f82dc99a37e1011c Mon Sep 17 00:00:00 2001 From: SnorlaxMonster <7100450+SnorlaxMonster@users.noreply.github.com> Date: Sun, 18 Jan 2026 08:11:37 +1030 Subject: Align move grammar with pokecrystal (#565) Add comments explaining the redundant move grammar categories inherited from the Japanese version. --- data/moves/grammar.asm | 16 +++-- data/text/text_2.asm | 18 ++--- engine/battle/core.asm | 138 +------------------------------------- engine/battle/used_move_text.asm | 139 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 162 insertions(+), 149 deletions(-) create mode 100644 engine/battle/used_move_text.asm (limited to 'data') diff --git a/data/moves/grammar.asm b/data/moves/grammar.asm index bc3d1dc6..e3e87387 100644 --- a/data/moves/grammar.asm +++ b/data/moves/grammar.asm @@ -1,17 +1,21 @@ -ExclamationPointMoveSets: -; set 0 +; Used by GetMoveGrammar (see engine/battle/core.asm) +; Each move is given an identifier for what usedmovetext to use (0-4). +; Made redundant in English localization, where all are just "[mon]used [move]!" + +MoveGrammar: +; 0: originally "[mon]は[move]を つかった!" ("[mon]used [move]!") db SWORDS_DANCE db GROWTH db 0 ; end set -; set 1 +; 1: originally "[mon]は[move]を した!" ("[mon]did [move]!") db RECOVER db BIDE db SELFDESTRUCT db AMNESIA db 0 ; end set -; set 2 +; 2: originally "[mon]は[move]した!" ("[mon]did [move]!") db MEDITATE db AGILITY db TELEPORT @@ -20,7 +24,7 @@ ExclamationPointMoveSets: db BARRAGE db 0 ; end set -; set 3 +; 3: originally "[mon]の[move] こうげき!" ("[mon]'s[move] attack!") db POUND db SCRATCH db VICEGRIP @@ -69,4 +73,6 @@ ExclamationPointMoveSets: db SUBSTITUTE db 0 ; end set +; 4: originally "[mon]の[move]!" ("[mon]'s[move]!") +; Any move not listed above uses this grammar. db -1 ; end diff --git a/data/text/text_2.asm b/data/text/text_2.asm index df28740d..d62e0929 100644 --- a/data/text/text_2.asm +++ b/data/text/text_2.asm @@ -1075,21 +1075,21 @@ _MoveIsDisabledText:: cont "disabled!" prompt -_MonName1Text:: +_ActorNameText:: text "@" text_end -_Used1Text:: +_UsedMove1Text:: text_start line "used @" text_end -_Used2Text:: +_UsedMove2Text:: text_start line "used @" text_end -_InsteadText:: +_UsedInsteadText:: text "instead," cont "@" text_end @@ -1098,23 +1098,23 @@ _MoveNameText:: text_ram wStringBuffer text "@" -_ExclamationPoint1Text:: +_EndUsedMove1Text:: text "!" done -_ExclamationPoint2Text:: +_EndUsedMove2Text:: text "!" done -_ExclamationPoint3Text:: +_EndUsedMove3Text:: text "!" done -_ExclamationPoint4Text:: +_EndUsedMove4Text:: text "!" done -_ExclamationPoint5Text:: +_EndUsedMove5Text:: text "!" done diff --git a/engine/battle/core.asm b/engine/battle/core.asm index dd9fbc71..fc17ec44 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -3115,7 +3115,7 @@ PlayerCanExecuteChargingMove: ; resulting in the Pokemon being invulnerable for the whole battle res INVULNERABLE, [hl] PlayerCanExecuteMove: - call PrintMonName1Text + call DisplayUsedMoveText ld hl, DecrementPP ld de, wPlayerSelectedMove ; pointer to the move just used ld b, BANK(DecrementPP) @@ -3713,139 +3713,7 @@ HandleSelfConfusionDamage: ldh [hWhoseTurn], a jp ApplyDamageToPlayerPokemon -PrintMonName1Text: - ld hl, MonName1Text - jp PrintText - -; this function wastes time calling DetermineExclamationPointTextNum -; and choosing between Used1Text and Used2Text, even though -; those text strings are identical and both continue at PrintInsteadText -; this likely had to do with Japanese grammar that got translated, -; but the functionality didn't get removed -MonName1Text: - text_far _MonName1Text - text_asm - ldh a, [hWhoseTurn] - and a - ld a, [wPlayerMoveNum] - ld hl, wPlayerUsedMove - jr z, .playerTurn - ld a, [wEnemyMoveNum] - ld hl, wEnemyUsedMove -.playerTurn - ld [hl], a - ld [wMoveGrammar], a - call DetermineExclamationPointTextNum - ld a, [wMonIsDisobedient] - and a - ld hl, Used2Text - ret nz - ld a, [wMoveGrammar] - cp 3 - ld hl, Used2Text - ret c - ld hl, Used1Text - ret - -Used1Text: - text_far _Used1Text - text_asm - jr PrintInsteadText - -Used2Text: - text_far _Used2Text - text_asm - ; fall through - -PrintInsteadText: - ld a, [wMonIsDisobedient] - and a - jr z, PrintMoveName - ld hl, InsteadText - ret - -InsteadText: - text_far _InsteadText - text_asm - ; fall through - -PrintMoveName: - ld hl, _PrintMoveName - ret - -_PrintMoveName: - text_far _MoveNameText - text_asm - ld hl, ExclamationPointPointerTable - ld a, [wMoveGrammar] - add a - push bc - ld b, $0 - ld c, a - add hl, bc - pop bc - ld a, [hli] - ld h, [hl] - ld l, a - ret - -ExclamationPointPointerTable: - dw ExclamationPoint1Text - dw ExclamationPoint2Text - dw ExclamationPoint3Text - dw ExclamationPoint4Text - dw ExclamationPoint5Text - -ExclamationPoint1Text: - text_far _ExclamationPoint1Text - text_end - -ExclamationPoint2Text: - text_far _ExclamationPoint2Text - text_end - -ExclamationPoint3Text: - text_far _ExclamationPoint3Text - text_end - -ExclamationPoint4Text: - text_far _ExclamationPoint4Text - text_end - -ExclamationPoint5Text: - text_far _ExclamationPoint5Text - text_end - -; this function does nothing useful -; if the move being used is in set [1-4] from ExclamationPointMoveSets, -; use ExclamationPoint[1-4]Text -; otherwise, use ExclamationPoint5Text -; but all five text strings are identical -; this likely had to do with Japanese grammar that got translated, -; but the functionality didn't get removed -DetermineExclamationPointTextNum: - push bc - ld a, [wMoveGrammar] ; move ID - ld c, a - ld b, $0 - ld hl, ExclamationPointMoveSets -.loop - ld a, [hli] - cp $ff - jr z, .done - cp c - jr z, .done - and a - jr nz, .loop - inc b - jr .loop -.done - ld a, b - ld [wMoveGrammar], a - pop bc - ret - -INCLUDE "data/moves/grammar.asm" +INCLUDE "engine/battle/used_move_text.asm" PrintMoveFailureText: ld de, wPlayerMoveEffect @@ -5642,7 +5510,7 @@ EnemyCanExecuteChargingMove: EnemyCanExecuteMove: xor a ld [wMonIsDisobedient], a - call PrintMonName1Text + call DisplayUsedMoveText ld a, [wEnemyMoveEffect] ld hl, ResidualEffects1 ld de, $1 diff --git a/engine/battle/used_move_text.asm b/engine/battle/used_move_text.asm new file mode 100644 index 00000000..abb35e67 --- /dev/null +++ b/engine/battle/used_move_text.asm @@ -0,0 +1,139 @@ +DisplayUsedMoveText: + ld hl, UsedMoveText + jp PrintText + +UsedMoveText: + text_far _ActorNameText + text_asm + + ldh a, [hWhoseTurn] + and a + ld a, [wPlayerMoveNum] + ld hl, wPlayerUsedMove + jr z, .playerTurn + + ld a, [wEnemyMoveNum] + ld hl, wEnemyUsedMove + +.playerTurn + ld [hl], a + ld [wMoveGrammar], a + call GetMoveGrammar + ld a, [wMonIsDisobedient] + and a + ld hl, UsedMove2Text + ret nz + + ; check move grammar + ld a, [wMoveGrammar] + cp $3 + ld hl, UsedMove2Text + ret c + ld hl, UsedMove1Text + ret + +UsedMove1Text: + text_far _UsedMove1Text + text_asm + jr UsedMoveText_CheckObedience + +UsedMove2Text: + text_far _UsedMove2Text + text_asm + ; fall through + +UsedMoveText_CheckObedience: +; check obedience + ld a, [wMonIsDisobedient] + and a + jr z, .GetMoveNameText +; print "instead," + ld hl, .UsedInsteadText + ret + +.UsedInsteadText: + text_far _UsedInsteadText + text_asm + ; fall through + +.GetMoveNameText: + ld hl, MoveNameText + ret + +MoveNameText: + text_far _MoveNameText + text_asm + ld hl, .endusedmovetexts + ld a, [wMoveGrammar] + add a + push bc + ld b, $0 + ld c, a + add hl, bc + pop bc + ld a, [hli] + ld h, [hl] + ld l, a + ret + +.endusedmovetexts: +; entries correspond to MoveGrammar sets + dw EndUsedMove1Text + dw EndUsedMove2Text + dw EndUsedMove3Text + dw EndUsedMove4Text + dw EndUsedMove5Text + +EndUsedMove1Text: + text_far _EndUsedMove1Text + text_end + +EndUsedMove2Text: + text_far _EndUsedMove2Text + text_end + +EndUsedMove3Text: + text_far _EndUsedMove3Text + text_end + +EndUsedMove4Text: + text_far _EndUsedMove4Text + text_end + +EndUsedMove5Text: + text_far _EndUsedMove5Text + text_end + +; This function is redundant in the English localization. +; In Japanese, it selects one of 5 distinct sentence structures. +; In English, all of these sentences have the exact same structure, +; so this serves no purpose. +GetMoveGrammar: + push bc + ld a, [wMoveGrammar] ; move ID + ld c, a + ld b, $0 + ld hl, MoveGrammar +.loop + ld a, [hli] +; end of table? + cp -1 + jr z, .end +; match? + cp c + jr z, .end +; advance grammar type at 0 + and a + jr nz, .loop +; next grammar type + inc b + jr .loop + +.end +; wMoveGrammar now contains move grammar + ld a, b + ld [wMoveGrammar], a + pop bc + ret + +INCLUDE "data/moves/grammar.asm" -- cgit v1.3.1-sl0p From 70f654bda79619bb7c1262f3fd111eeefd4c2645 Mon Sep 17 00:00:00 2001 From: Narishma-gb <194818981+Narishma-gb@users.noreply.github.com> Date: Sat, 17 Jan 2026 22:42:34 +0100 Subject: Use map names with `ToggleData*` symbols (#563) --- constants/toggle_constants.asm | 3 ++- data/maps/toggleable_objects.asm | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) (limited to 'data') diff --git a/constants/toggle_constants.asm b/constants/toggle_constants.asm index 701bc2b4..64712306 100644 --- a/constants/toggle_constants.asm +++ b/constants/toggle_constants.asm @@ -2,7 +2,8 @@ DEF OFF EQU $11 DEF ON EQU $15 MACRO toggle_consts_for - DEF TOGGLEMAP{\1} EQU const_value + DEF TOGGLEMAP{\1}_ID EQU const_value + DEF TOGGLEMAP{\1}_NAME EQUS "\1" ENDM ; ToggleableObjectStates indexes (see data/maps/toggleable_objects.asm) diff --git a/data/maps/toggleable_objects.asm b/data/maps/toggleable_objects.asm index d94002d9..90f9e689 100644 --- a/data/maps/toggleable_objects.asm +++ b/data/maps/toggleable_objects.asm @@ -4,8 +4,8 @@ ToggleableObjectMapPointers: ; entries correspond to map ids table_width 2 FOR n, NUM_MAPS - IF DEF(TOGGLEMAP{n}) ; defined by `toggle_consts_for` - dw ToggleData{n} + IF DEF(TOGGLEMAP{n}_NAME) ; defined by `toggle_consts_for` + dw ToggleData_{TOGGLEMAP{n}_NAME} ELSE dw NoToggleData ENDC @@ -20,14 +20,14 @@ DEF toggles_ok = 1 MACRO? toggleable_objects_for DEF toggle_map_id = \1 ; map id - ToggleData{toggle_map_id}: + ToggleData_\1: IF toggles_ok - ASSERT DEF(TOGGLEMAP{toggle_map_id}), \ + ASSERT DEF(TOGGLEMAP{toggle_map_id}_ID), \ "`toggleable_objects_for \1` is not defined" - DEF toggles_ok &= DEF(TOGGLEMAP{toggle_map_id}) + DEF toggles_ok &= DEF(TOGGLEMAP{toggle_map_id}_ID) IF toggles_ok - assert_table_length TOGGLEMAP{toggle_map_id} - DEF toggles_ok &= TOGGLEMAP{toggle_map_id} * 3 == @ - ToggleableObjectStates + assert_table_length TOGGLEMAP{toggle_map_id}_ID + DEF toggles_ok &= TOGGLEMAP{toggle_map_id}_ID * 3 == @ - ToggleableObjectStates ENDC ENDC ENDM -- cgit v1.3.1-sl0p From c4f02f18deacba07cb51213af49c2c03cdc4daf2 Mon Sep 17 00:00:00 2001 From: Engezerstorung <154867622+Engezerstorung@users.noreply.github.com> Date: Sat, 17 Jan 2026 22:42:57 +0100 Subject: Use macros for `WildMonEncounterSlotChances` (#562) --- data/wild/probabilities.asm | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) (limited to 'data') diff --git a/data/wild/probabilities.asm b/data/wild/probabilities.asm index 2c56c6b9..6896d937 100644 --- a/data/wild/probabilities.asm +++ b/data/wild/probabilities.asm @@ -1,15 +1,28 @@ +DEF wild_chance_slot = 0 +DEF wild_chance_total = 0 + +MACRO wild_chance + DEF wild_chance_total += \1 + db wild_chance_total - 1 + db wild_chance_slot * 2 + DEF wild_chance_slot += 1 +ENDM + WildMonEncounterSlotChances: -; There are 10 slots for wild pokemon, and this is the table that defines how common each of -; those 10 slots is. A random number is generated and then the first byte of each pair in this -; table is compared against that random number. If the random number is less than or equal -; to the first byte, then that slot is chosen. The second byte is double the slot number. - db 50, $00 ; 51/256 = 19.9% chance of slot 0 - db 101, $02 ; 51/256 = 19.9% chance of slot 1 - db 140, $04 ; 39/256 = 15.2% chance of slot 2 - db 165, $06 ; 25/256 = 9.8% chance of slot 3 - db 190, $08 ; 25/256 = 9.8% chance of slot 4 - db 215, $0A ; 25/256 = 9.8% chance of slot 5 - db 228, $0C ; 13/256 = 5.1% chance of slot 6 - db 241, $0E ; 13/256 = 5.1% chance of slot 7 - db 252, $10 ; 11/256 = 4.3% chance of slot 8 - db 255, $12 ; 3/256 = 1.2% chance of slot 9 +; There are 10 slots for wild pokemon, and this is the list that defines how common each of +; those 10 slots is. A random number is generated and then the cumulative chance value up to the current +; slot (included) is compared against that random number. If the random number is less than or equal +; to said cumulative value, then that slot is chosen. + table_width 2 + wild_chance 51 ; 51/256 = 19.9% chance of slot 0 + wild_chance 51 ; 51/256 = 19.9% chance of slot 1 + wild_chance 39 ; 39/256 = 15.2% chance of slot 2 + wild_chance 25 ; 25/256 = 9.8% chance of slot 3 + wild_chance 25 ; 25/256 = 9.8% chance of slot 4 + wild_chance 25 ; 25/256 = 9.8% chance of slot 5 + wild_chance 13 ; 13/256 = 5.1% chance of slot 6 + wild_chance 13 ; 13/256 = 5.1% chance of slot 7 + wild_chance 11 ; 11/256 = 4.3% chance of slot 8 + wild_chance 3 ; 3/256 = 1.2% chance of slot 9 + assert_table_length NUM_WILDMONS + ASSERT wild_chance_total == 256, "WildMonEncounterSlotChances sum to {d:wild_chance_total}, not 256!" -- cgit v1.3.1-sl0p