From 94eee4e89ef5c0857599c2951befee9dc709ae85 Mon Sep 17 00:00:00 2001 From: luckytyphlosion Date: Thu, 31 Dec 2015 15:24:54 -0500 Subject: Cleanup with yellow-exclusive banks Also introduce charmap for $ec (unfilled menu arrow cursor) --- charmap.asm | 1 + data/map_header_banks.asm | 252 ++++ data/map_header_pointers.asm | 252 ++++ data/map_songs.asm | 250 ++++ engine/bank3c.asm | 279 +++++ engine/bank3c/main.asm | 279 ----- engine/bank3c/overworld.asm | 241 ---- engine/bank3d.asm | 693 +++++++++++ engine/bank3d/bank3d_battle.asm | 291 ----- engine/bank3d/link_menu.asm | 910 --------------- engine/bank3d/main.asm | 693 ----------- engine/bank3d/random.asm | 13 - engine/bank3f.asm | 1750 ++++++++++++++++++++++++++++ engine/bank3f/data/map_header_banks.asm | 252 ---- engine/bank3f/data/map_header_pointers.asm | 252 ---- engine/bank3f/data/map_songs.asm | 250 ---- engine/bank3f/main.asm | 1750 ---------------------------- engine/battle/bank3d_battle.asm | 291 +++++ engine/menu/link_menu.asm | 910 +++++++++++++++ engine/overworld/advance_player_sprite.asm | 241 ++++ engine/random.asm | 2 +- yellow/main.asm | 6 +- 22 files changed, 4923 insertions(+), 4935 deletions(-) create mode 100644 data/map_header_banks.asm create mode 100644 data/map_header_pointers.asm create mode 100644 data/map_songs.asm create mode 100644 engine/bank3c.asm delete mode 100644 engine/bank3c/main.asm delete mode 100644 engine/bank3c/overworld.asm create mode 100644 engine/bank3d.asm delete mode 100644 engine/bank3d/bank3d_battle.asm delete mode 100644 engine/bank3d/link_menu.asm delete mode 100644 engine/bank3d/main.asm delete mode 100644 engine/bank3d/random.asm create mode 100644 engine/bank3f.asm delete mode 100644 engine/bank3f/data/map_header_banks.asm delete mode 100644 engine/bank3f/data/map_header_pointers.asm delete mode 100644 engine/bank3f/data/map_songs.asm delete mode 100644 engine/bank3f/main.asm create mode 100644 engine/battle/bank3d_battle.asm create mode 100644 engine/menu/link_menu.asm create mode 100644 engine/overworld/advance_player_sprite.asm diff --git a/charmap.asm b/charmap.asm index 65919932..c794549f 100644 --- a/charmap.asm +++ b/charmap.asm @@ -236,6 +236,7 @@ charmap "'m", $E5 charmap "?", $E6 charmap "!", $E7 charmap ".", $E8 +charmap "▷", $EC charmap "▶", $ED charmap "♂", $EF charmap "¥", $F0 diff --git a/data/map_header_banks.asm b/data/map_header_banks.asm new file mode 100644 index 00000000..eeff1974 --- /dev/null +++ b/data/map_header_banks.asm @@ -0,0 +1,252 @@ +; see also MapHeaderPointers +MapHeaderBanks:: ; fc3e4 (3f:43e4) + dr $fc3e4,$fc4dd + ;db BANK(PalletTown_h) ;PALLET_TOWN + ;db BANK(ViridianCity_h) ; VIRIDIAN_CITY + ;db BANK(PewterCity_h) ; PEWTER_CITY + ;db BANK(CeruleanCity_h) ; CERULEAN_CITY + ;db BANK(LavenderTown_h) ; LAVENDER_TOWN + ;db BANK(VermilionCity_h) ; VERMILION_CITY + ;db BANK(CeladonCity_h) ; CELADON_CITY + ;db BANK(FuchsiaCity_h) ; FUCHSIA_CITY + ;db BANK(CinnabarIsland_h) ; CINNABAR_ISLAND + ;db BANK(IndigoPlateau_h) ; INDIGO_PLATEAU + ;db BANK(SaffronCity_h) ; SAFFRON_CITY + ;db $1 ; unused + ;db BANK(Route1_h) ; ROUTE_1 + ;db BANK(Route2_h) ; ROUTE_2 + ;db BANK(Route3_h) ; ROUTE_3 + ;db BANK(Route4_h) ; ROUTE_4 + ;db BANK(Route5_h) ; ROUTE_5 + ;db BANK(Route6_h) ; ROUTE_6 + ;db BANK(Route7_h) ; ROUTE_7 + ;db BANK(Route8_h) ; ROUTE_8 + ;db BANK(Route9_h) ; ROUTE_9 + ;db BANK(Route10_h) ; ROUTE_10 + ;db BANK(Route11_h) ; ROUTE_11 + ;db BANK(Route12_h) ; ROUTE_12 + ;db BANK(Route13_h) ; ROUTE_13 + ;db BANK(Route14_h) ; ROUTE_14 + ;db BANK(Route15_h) ; ROUTE_15 + ;db BANK(Route16_h) ; ROUTE_16 + ;db BANK(Route17_h) ; ROUTE_17 + ;db BANK(Route18_h) ; ROUTE_18 + ;db BANK(Route19_h) ; ROUTE_19 + ;db BANK(Route20_h) ; ROUTE_20 + ;db BANK(Route21_h) ; ROUTE_21 + ;db BANK(Route22_h) ; ROUTE_22 + ;db BANK(Route23_h) ; ROUTE_23 + ;db BANK(Route24_h) ; ROUTE_24 + ;db BANK(Route25_h) ; ROUTE_25 + ;db BANK(RedsHouse1F_h) + ;db BANK(RedsHouse2F_h) + ;db BANK(BluesHouse_h) + ;db BANK(OaksLab_h) + ;db BANK(ViridianPokecenter_h) + ;db BANK(ViridianMart_h) + ;db BANK(School_h) + ;db BANK(ViridianHouse_h) + ;db BANK(ViridianGym_h) + ;db BANK(DiglettsCaveRoute2_h) + ;db BANK(ViridianForestExit_h) + ;db BANK(Route2House_h) + ;db BANK(Route2Gate_h) + ;db BANK(ViridianForestEntrance_h) + ;db BANK(ViridianForest_h) + ;db BANK(Museum1F_h) + ;db BANK(Museum2F_h) + ;db BANK(PewterGym_h) + ;db BANK(PewterHouse1_h) + ;db BANK(PewterMart_h) + ;db BANK(PewterHouse2_h) + ;db BANK(PewterPokecenter_h) + ;db BANK(MtMoon1_h) + ;db BANK(MtMoon2_h) + ;db BANK(MtMoon3_h) + ;db BANK(CeruleanHouseTrashed_h) + ;db BANK(CeruleanHouse1_h) + ;db BANK(CeruleanPokecenter_h) + ;db BANK(CeruleanGym_h) + ;db BANK(BikeShop_h) + ;db BANK(CeruleanMart_h) + ;db BANK(MtMoonPokecenter_h) + ;db BANK(CeruleanHouseTrashed_h) + ;db BANK(Route5Gate_h) + ;db BANK(UndergroundPathEntranceRoute5_h) + ;db BANK(DayCareM_h) + ;db BANK(Route6Gate_h) + ;db BANK(UndergroundPathEntranceRoute6_h) + ;db BANK(UndergroundPathEntranceRoute6_h) ;FREEZE + ;db BANK(Route7Gate_h) + ;db BANK(UndergroundPathEntranceRoute7_h) + ;db BANK(UndergroundPathEntranceRoute7Copy_h) ;FREEZE + ;db BANK(Route8Gate_h) + ;db BANK(UndergroundPathEntranceRoute8_h) + ;db BANK(RockTunnelPokecenter_h) + ;db BANK(RockTunnel1_h) + ;db BANK(PowerPlant_h) + ;db BANK(Route11Gate_h) + ;db BANK(DiglettsCaveEntranceRoute11_h) + ;db BANK(Route11GateUpstairs_h) + ;db BANK(Route12Gate_h) + ;db BANK(BillsHouse_h) + ;db BANK(VermilionPokecenter_h) + ;db BANK(FanClub_h) + ;db BANK(VermilionMart_h) + ;db BANK(VermilionGym_h) + ;db BANK(VermilionHouse1_h) + ;db BANK(VermilionDock_h) + ;db BANK(SSAnne1_h) + ;db BANK(SSAnne2_h) + ;db BANK(SSAnne3_h) + ;db BANK(SSAnne4_h) + ;db BANK(SSAnne5_h) + ;db BANK(SSAnne6_h) + ;db BANK(SSAnne7_h) + ;db BANK(SSAnne8_h) + ;db BANK(SSAnne9_h) + ;db BANK(SSAnne10_h) + ;db $1D ;unused + ;db $1D ;unused + ;db $1D ;unused + ;db BANK(VictoryRoad1_h) + ;db $1D ;unused + ;db $1D ;unused + ;db $1D ;unused + ;db $1D ;unused + ;db BANK(Lance_h) + ;db $1D ;unused + ;db $1D ;unused + ;db $1D ;unused + ;db $1D ;unused + ;db BANK(HallofFameRoom_h) + ;db BANK(UndergroundPathNS_h) + ;db BANK(Gary_h) + ;db BANK(UndergroundPathWE_h) + ;db BANK(CeladonMart1_h) + ;db BANK(CeladonMart2_h) + ;db BANK(CeladonMart3_h) + ;db BANK(CeladonMart4_h) + ;db BANK(CeladonMartRoof_h) + ;db BANK(CeladonMartElevator_h) + ;db BANK(CeladonMansion1_h) + ;db BANK(CeladonMansion2_h) + ;db BANK(CeladonMansion3_h) + ;db BANK(CeladonMansion4_h) + ;db BANK(CeladonMansion5_h) + ;db BANK(CeladonPokecenter_h) + ;db BANK(CeladonGym_h) + ;db BANK(CeladonGameCorner_h) + ;db BANK(CeladonMart5_h) + ;db BANK(CeladonPrizeRoom_h) + ;db BANK(CeladonDiner_h) + ;db BANK(CeladonHouse_h) + ;db BANK(CeladonHotel_h) + ;db BANK(LavenderPokecenter_h) + ;db BANK(PokemonTower1_h) + ;db BANK(PokemonTower2_h) + ;db BANK(PokemonTower3_h) + ;db BANK(PokemonTower4_h) + ;db BANK(PokemonTower5_h) + ;db BANK(PokemonTower6_h) + ;db BANK(PokemonTower7_h) + ;db BANK(LavenderHouse1_h) + ;db BANK(LavenderMart_h) + ;db BANK(LavenderHouse2_h) + ;db BANK(FuchsiaMart_h) + ;db BANK(FuchsiaHouse1_h) + ;db BANK(FuchsiaPokecenter_h) + ;db BANK(FuchsiaHouse2_h) + ;db BANK(SafariZoneEntrance_h) + ;db BANK(FuchsiaGym_h) + ;db BANK(FuchsiaMeetingRoom_h) + ;db BANK(SeafoamIslands2_h) + ;db BANK(SeafoamIslands3_h) + ;db BANK(SeafoamIslands4_h) + ;db BANK(SeafoamIslands5_h) + ;db BANK(VermilionHouse2_h) + ;db BANK(FuchsiaHouse3_h) + ;db BANK(Mansion1_h) + ;db BANK(CinnabarGym_h) + ;db BANK(Lab1_h) + ;db BANK(Lab2_h) + ;db BANK(Lab3_h) + ;db BANK(Lab4_h) + ;db BANK(CinnabarPokecenter_h) + ;db BANK(CinnabarMart_h) + ;db BANK(CinnabarMart_h) + ;db BANK(IndigoPlateauLobby_h) + ;db BANK(CopycatsHouse1F_h) + ;db BANK(CopycatsHouse2F_h) + ;db BANK(FightingDojo_h) + ;db BANK(SaffronGym_h) + ;db BANK(SaffronHouse1_h) + ;db BANK(SaffronMart_h) + ;db BANK(SilphCo1_h) + ;db BANK(SaffronPokecenter_h) + ;db BANK(SaffronHouse2_h) + ;db BANK(Route15Gate_h) + ;db BANK(Route15GateUpstairs_h) + ;db BANK(Route16Gate_h) + ;db BANK(Route16GateUpstairs_h) + ;db BANK(Route16House_h) + ;db BANK(Route12House_h) + ;db BANK(Route18Gate_h) + ;db BANK(Route18GateUpstairs_h) + ;db BANK(SeafoamIslands1_h) + ;db BANK(Route22Gate_h) + ;db BANK(VictoryRoad2_h) + ;db BANK(Route12GateUpstairs_h) + ;db BANK(VermilionHouse3_h) + ;db BANK(DiglettsCave_h) + ;db BANK(VictoryRoad3_h) + ;db BANK(RocketHideout1_h) + ;db BANK(RocketHideout2_h) + ;db BANK(RocketHideout3_h) + ;db BANK(RocketHideout4_h) + ;db BANK(RocketHideoutElevator_h) + ;db $01 + ;db $01 + ;db $01 + ;db BANK(SilphCo2_h) + ;db BANK(SilphCo3_h) + ;db BANK(SilphCo4_h) + ;db BANK(SilphCo5_h) + ;db BANK(SilphCo6_h) + ;db BANK(SilphCo7_h) + ;db BANK(SilphCo8_h) + ;db BANK(Mansion2_h) + ;db BANK(Mansion3_h) + ;db BANK(Mansion4_h) + ;db BANK(SafariZoneEast_h) + ;db BANK(SafariZoneNorth_h) + ;db BANK(SafariZoneWest_h) + ;db BANK(SafariZoneCenter_h) + ;db BANK(SafariZoneRestHouse1_h) + ;db BANK(SafariZoneSecretHouse_h) + ;db BANK(SafariZoneRestHouse2_h) + ;db BANK(SafariZoneRestHouse3_h) + ;db BANK(SafariZoneRestHouse4_h) + ;db BANK(UnknownDungeon2_h) + ;db BANK(UnknownDungeon3_h) + ;db BANK(UnknownDungeon1_h) + ;db BANK(NameRater_h) + ;db BANK(CeruleanHouse2_h) + ;db $01 + ;db BANK(RockTunnel2_h) + ;db BANK(SilphCo9_h) + ;db BANK(SilphCo10_h) + ;db BANK(SilphCo11_h) + ;db BANK(SilphCoElevator_h) + ;db $11 + ;db $11 + ;db BANK(BattleCenterM_h) + ;db BANK(TradeCenterM_h) + ;db $11 + ;db $11 + ;db $11 + ;db $11 + ;db BANK(Lorelei_h) + ;db BANK(Bruno_h) + ;db BANK(Agatha_h) + ;db BANK(BeachHouse_h) \ No newline at end of file diff --git a/data/map_header_pointers.asm b/data/map_header_pointers.asm new file mode 100644 index 00000000..c7dd0c9f --- /dev/null +++ b/data/map_header_pointers.asm @@ -0,0 +1,252 @@ +; see also MapHeaderBanks +MapHeaderPointers:: ; fc1f2 (3f:41f2) + dr $fc1f2,$fc3e4 + ;dw PalletTown_h + ;dw ViridianCity_h + ;dw PewterCity_h + ;dw CeruleanCity_h + ;dw LavenderTown_h + ;dw VermilionCity_h + ;dw CeladonCity_h + ;dw FuchsiaCity_h + ;dw CinnabarIsland_h + ;dw IndigoPlateau_h + ;dw SaffronCity_h + ;dw SaffronCity_h + ;dw Route1_h + ;dw Route2_h + ;dw Route3_h + ;dw Route4_h + ;dw Route5_h + ;dw Route6_h + ;dw Route7_h + ;dw Route8_h + ;dw Route9_h + ;dw Route10_h + ;dw Route11_h + ;dw Route12_h + ;dw Route13_h + ;dw Route14_h + ;dw Route15_h + ;dw Route16_h + ;dw Route17_h + ;dw Route18_h + ;dw Route19_h + ;dw Route20_h + ;dw Route21_h + ;dw Route22_h + ;dw Route23_h + ;dw Route24_h + ;dw Route25_h + ;dw RedsHouse1F_h + ;dw RedsHouse2F_h + ;dw BluesHouse_h + ;dw OaksLab_h ;id=40 + ;dw ViridianPokecenter_h + ;dw ViridianMart_h + ;dw School_h + ;dw ViridianHouse_h + ;dw ViridianGym_h + ;dw DiglettsCaveRoute2_h + ;dw ViridianForestExit_h + ;dw Route2House_h + ;dw Route2Gate_h + ;dw ViridianForestEntrance_h ;id=50 + ;dw ViridianForest_h + ;dw Museum1F_h + ;dw Museum2F_h + ;dw PewterGym_h + ;dw PewterHouse1_h + ;dw PewterMart_h + ;dw PewterHouse2_h + ;dw PewterPokecenter_h + ;dw MtMoon1_h + ;dw MtMoon2_h ;id=60 + ;dw MtMoon3_h + ;dw CeruleanHouseTrashed_h + ;dw CeruleanHouse1_h + ;dw CeruleanPokecenter_h + ;dw CeruleanGym_h + ;dw BikeShop_h + ;dw CeruleanMart_h + ;dw MtMoonPokecenter_h + ;dw CeruleanHouseTrashed_h ; copy + ;dw Route5Gate_h + ;dw UndergroundPathEntranceRoute5_h + ;dw DayCareM_h + ;dw Route6Gate_h + ;dw UndergroundPathEntranceRoute6_h + ;dw UndergroundPathEntranceRoute6_h ; unused + ;dw Route7Gate_h + ;dw UndergroundPathEntranceRoute7_h + ;dw UndergroundPathEntranceRoute7Copy_h + ;dw Route8Gate_h + ;dw UndergroundPathEntranceRoute8_h ;id=80 + ;dw RockTunnelPokecenter_h + ;dw RockTunnel1_h + ;dw PowerPlant_h + ;dw Route11Gate_h + ;dw DiglettsCaveEntranceRoute11_h + ;dw Route11GateUpstairs_h + ;dw Route12Gate_h + ;dw BillsHouse_h + ;dw VermilionPokecenter_h + ;dw FanClub_h ;id=90 + ;dw VermilionMart_h + ;dw VermilionGym_h + ;dw VermilionHouse1_h + ;dw VermilionDock_h + ;dw SSAnne1_h + ;dw SSAnne2_h + ;dw SSAnne3_h + ;dw SSAnne4_h + ;dw SSAnne5_h + ;dw SSAnne6_h ;id=100 + ;dw SSAnne7_h + ;dw SSAnne8_h + ;dw SSAnne9_h + ;dw SSAnne10_h + ;dw Lance_h ; unused + ;dw Lance_h ; unused + ;dw Lance_h ; unused + ;dw VictoryRoad1_h + ;dw Lance_h ; unused + ;dw Lance_h ; unused ;id=110 + ;dw Lance_h ; unused + ;dw Lance_h ; unused + ;dw Lance_h + ;dw Lance_h ; unused + ;dw Lance_h ; unused + ;dw Lance_h ; unused + ;dw Lance_h ; unused + ;dw HallofFameRoom_h + ;dw UndergroundPathNS_h + ;dw Gary_h ;id=120 + ;dw UndergroundPathWE_h + ;dw CeladonMart1_h + ;dw CeladonMart2_h + ;dw CeladonMart3_h + ;dw CeladonMart4_h + ;dw CeladonMartRoof_h + ;dw CeladonMartElevator_h + ;dw CeladonMansion1_h + ;dw CeladonMansion2_h + ;dw CeladonMansion3_h ;id=130 + ;dw CeladonMansion4_h + ;dw CeladonMansion5_h + ;dw CeladonPokecenter_h + ;dw CeladonGym_h + ;dw CeladonGameCorner_h + ;dw CeladonMart5_h + ;dw CeladonPrizeRoom_h + ;dw CeladonDiner_h + ;dw CeladonHouse_h + ;dw CeladonHotel_h ;id=140 + ;dw LavenderPokecenter_h + ;dw PokemonTower1_h + ;dw PokemonTower2_h + ;dw PokemonTower3_h + ;dw PokemonTower4_h + ;dw PokemonTower5_h + ;dw PokemonTower6_h + ;dw PokemonTower7_h + ;dw LavenderHouse1_h + ;dw LavenderMart_h ;id=150 + ;dw LavenderHouse2_h + ;dw FuchsiaMart_h + ;dw FuchsiaHouse1_h + ;dw FuchsiaPokecenter_h + ;dw FuchsiaHouse2_h + ;dw SafariZoneEntrance_h + ;dw FuchsiaGym_h + ;dw FuchsiaMeetingRoom_h + ;dw SeafoamIslands2_h + ;dw SeafoamIslands3_h ;id=160 + ;dw SeafoamIslands4_h + ;dw SeafoamIslands5_h + ;dw VermilionHouse2_h + ;dw FuchsiaHouse3_h + ;dw Mansion1_h + ;dw CinnabarGym_h + ;dw Lab1_h + ;dw Lab2_h + ;dw Lab3_h + ;dw Lab4_h ;id=170 + ;dw CinnabarPokecenter_h + ;dw CinnabarMart_h + ;dw CinnabarMart_h ; unused + ;dw IndigoPlateauLobby_h + ;dw CopycatsHouse1F_h + ;dw CopycatsHouse2F_h + ;dw FightingDojo_h + ;dw SaffronGym_h + ;dw SaffronHouse1_h + ;dw SaffronMart_h ;id=180 + ;dw SilphCo1_h + ;dw SaffronPokecenter_h + ;dw SaffronHouse2_h + ;dw Route15Gate_h + ;dw Route15GateUpstairs_h + ;dw Route16Gate_h + ;dw Route16GateUpstairs_h + ;dw Route16House_h + ;dw Route12House_h + ;dw Route18Gate_h ;id=190 + ;dw Route18GateUpstairs_h + ;dw SeafoamIslands1_h + ;dw Route22Gate_h + ;dw VictoryRoad2_h + ;dw Route12GateUpstairs_h + ;dw VermilionHouse3_h + ;dw DiglettsCave_h + ;dw VictoryRoad3_h + ;dw RocketHideout1_h + ;dw RocketHideout2_h ;200 + ;dw RocketHideout3_h + ;dw RocketHideout4_h + ;dw RocketHideoutElevator_h + ;dw RocketHideoutElevator_h ; unused + ;dw RocketHideoutElevator_h ; unused + ;dw RocketHideoutElevator_h ; unused + ;dw SilphCo2_h + ;dw SilphCo3_h + ;dw SilphCo4_h + ;dw SilphCo5_h ;210 + ;dw SilphCo6_h + ;dw SilphCo7_h + ;dw SilphCo8_h + ;dw Mansion2_h + ;dw Mansion3_h + ;dw Mansion4_h + ;dw SafariZoneEast_h + ;dw SafariZoneNorth_h + ;dw SafariZoneWest_h + ;dw SafariZoneCenter_h ;220 + ;dw SafariZoneRestHouse1_h + ;dw SafariZoneSecretHouse_h + ;dw SafariZoneRestHouse2_h + ;dw SafariZoneRestHouse3_h + ;dw SafariZoneRestHouse4_h + ;dw UnknownDungeon2_h + ;dw UnknownDungeon3_h + ;dw UnknownDungeon1_h + ;dw NameRater_h + ;dw CeruleanHouse2_h + ;dw Route16Gate_h ; unused + ;dw RockTunnel2_h + ;dw SilphCo9_h + ;dw SilphCo10_h + ;dw SilphCo11_h + ;dw SilphCoElevator_h + ;dw SilphCo2_h ; unused + ;dw SilphCo2_h ; unused + ;dw BattleCenterM_h + ;dw TradeCenterM_h + ;dw SilphCo2_h ; unused + ;dw SilphCo2_h ; unused + ;dw SilphCo2_h ; unused + ;dw SilphCo2_h ; unused + ;dw Lorelei_h + ;dw Bruno_h + ;dw Agatha_h ;247 + ;dw BeachHouse_h \ No newline at end of file diff --git a/data/map_songs.asm b/data/map_songs.asm new file mode 100644 index 00000000..b65822e7 --- /dev/null +++ b/data/map_songs.asm @@ -0,0 +1,250 @@ +MapSongBanks: ; fc000 (3f:4000) + db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ;PALLET_TOWN + db MUSIC_CITIES1, BANK(Music_Cities1) ; VIRIDIAN_CITY + db MUSIC_CITIES1, BANK(Music_Cities1) ; PEWTER_CITY + db MUSIC_CITIES2, BANK(Music_Cities2) ; CERULEAN_CITY + db MUSIC_LAVENDER, BANK(Music_Lavender) ; LAVENDER_TOWN + db MUSIC_VERMILION, BANK(Music_Vermilion) ; VERMILION_CITY + db MUSIC_CELADON, BANK(Music_Celadon) ; CELADON_CITY + db MUSIC_CITIES2, BANK(Music_Cities2) ; FUCHSIA_CITY + db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; CINNABAR_ISLAND + db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; INDIGO_PLATEAU + db MUSIC_CITIES1, BANK(Music_Cities1) ; SAFFRON_CITY + db MUSIC_CITIES1, BANK(Music_Cities1) ; unused + db MUSIC_ROUTES1, BANK(Music_Routes1) ; ROUTE_1 + db MUSIC_ROUTES1, BANK(Music_Routes1) ; ROUTE_2 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_3 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_4 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_5 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_6 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_7 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_8 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_9 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_10 + db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_11 + db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_12 + db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_13 + db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_14 + db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_15 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_16 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_17 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_18 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_19 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_20 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_21 + db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_22 + db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; ROUTE_23 + db MUSIC_ROUTES2, BANK(Music_Routes2) ; ROUTE_24 + db MUSIC_ROUTES2, BANK(Music_Routes2) ; ROUTE_25 + db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; RedsHouse1F + db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; RedsHouse2F + db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; BluesHouse + db MUSIC_OAKS_LAB, BANK(Music_OaksLab) ; OaksLab + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; ViridianPokecenter + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; ViridianMart + db MUSIC_CITIES1, BANK(Music_Cities1) ; School + db MUSIC_CITIES1, BANK(Music_Cities1) ; ViridianHouse + db MUSIC_GYM, BANK(Music_Gym) ; ViridianGym + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; DiglettsCaveRoute2 + db MUSIC_CITIES1, BANK(Music_Cities1) ; ViridianForestExit + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route2House + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route2Gate + db MUSIC_CITIES1, BANK(Music_Cities1) ; ViridianForestEntrance + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; ViridianForest + db MUSIC_CITIES1, BANK(Music_Cities1) ; Museum1F + db MUSIC_CITIES1, BANK(Music_Cities1) ; Museum2F + db MUSIC_GYM, BANK(Music_Gym) ; PewterGym + db MUSIC_CITIES1, BANK(Music_Cities1) ; PewterHouse1 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; PewterMart + db MUSIC_CITIES1, BANK(Music_Cities1) ; PewterHouse2 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; PewterPokecenter + db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; MtMoon1 + db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; MtMoon2 + db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; MtMoon3 + db MUSIC_CITIES2, BANK(Music_Cities2) ; CeruleanHouseTrashed + db MUSIC_CITIES2, BANK(Music_Cities2) ; CeruleanHouse1 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeruleanPokecenter + db MUSIC_GYM, BANK(Music_Gym) ; CeruleanGym + db MUSIC_CITIES2, BANK(Music_Cities2) ; BikeShop + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeruleanMart + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; MtMoonPokecenter + db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; CeruleanHouseTrashed + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route5Gate + db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundTunnelEntranceRoute5 + db MUSIC_CITIES1, BANK(Music_Cities1) ; DayCareM + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route6Gate + db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundTunnelEntranceRoute6 + db MUSIC_VERMILION, BANK(Music_Vermilion) ; FREEZE + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route7Gate + db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundPathEntranceRoute7 + db MUSIC_CELADON, BANK(Music_Celadon) ;FREEZE + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route8Gate + db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundPathEntranceRoute8 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; RockTunnelPokecenter + db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; RockTunnel1 + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; PowerPlant + db MUSIC_VERMILION, BANK(Music_Vermilion) ; Route11Gate + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; DiglettsCaveEntranceRoute11 + db MUSIC_VERMILION, BANK(Music_Vermilion) ; Route11GateUpstairs + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route12Gate + db MUSIC_CITIES2, BANK(Music_Cities2) ; BillsHouse + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; VermilionPokecenter + db MUSIC_VERMILION, BANK(Music_Vermilion) ; FanClub + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; VermilionMart + db MUSIC_GYM, BANK(Music_Gym) ; VermilionGym + db MUSIC_VERMILION, BANK(Music_Vermilion) ; VermilionHouse1 + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; VermilionDock + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne1 + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne2 + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne3 + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne4 + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne5 + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne6 + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne7 + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne8 + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne9 + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne10 + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ;unused + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ;unused + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused + db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; VictoryRoad1 + db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ;unused + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ;unused + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ;unused + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ;unused + db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; Lance + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused + db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused + db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; HallofFameRoom + db MUSIC_ROUTES1, BANK(Music_Routes1) ; UndergroundPathNS + db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; Gary + db MUSIC_ROUTES1, BANK(Music_Routes1) ; UndergroundPathWE + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart1 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart2 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart3 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart4 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMartRoof + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMartElevator + db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion1 + db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion2 + db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion3 + db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion4 + db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion5 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonPokecenter + db MUSIC_GYM, BANK(Music_Gym) ; CeladonGym + db MUSIC_GAME_CORNER, BANK(Music_GameCorner) ; CeladonGameCorner + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart5 + db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonPrizeRoom + db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonDiner + db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonHouse + db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonHotel + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; LavenderPokecenter + db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower1 + db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower2 + db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower3 + db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower4 + db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower5 + db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower6 + db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower7 + db MUSIC_LAVENDER, BANK(Music_Lavender) ; LavenderHouse1 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; LavenderMart + db MUSIC_LAVENDER, BANK(Music_Lavender) ; LavenderHouse2 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; FuchsiaMart + db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaHouse1 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; FuchsiaPokecenter + db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaHouse2 + db MUSIC_CITIES2, BANK(Music_Cities2) ; SafariZoneEntrance + db MUSIC_GYM, BANK(Music_Gym) ; FuchsiaGym + db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaMeetingRoom + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands2 + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands3 + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands4 + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands5 + db MUSIC_CITIES2, BANK(Music_Cities2) ; VermilionHouse2 + db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaHouse3 + db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion1 + db MUSIC_GYM, BANK(Music_Gym) ; CinnabarGym + db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab1 + db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab2 + db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab3 + db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab4 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CinnabarPokecenter + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CinnabarMart + db MUSIC_CINNABAR, BANK(Music_Cinnabar) + db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; IndigoPlateauLobby + db MUSIC_CITIES1, BANK(Music_Cities1) ; CopycatsHouse1F + db MUSIC_CITIES1, BANK(Music_Cities1) ; CopycatsHouse2F + db MUSIC_CITIES1, BANK(Music_Cities1) ; FightingDojo + db MUSIC_GYM, BANK(Music_Gym) ; SaffronGym + db MUSIC_CITIES1, BANK(Music_Cities1) ; SaffronHouse1 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; SaffronMart + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo1 + db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; SaffronPokecenter + db MUSIC_CITIES1, BANK(Music_Cities1) ; SaffronHouse2 + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route15Gate + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route15GateUpstairs + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route16Gate + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route16GateUpstairs + db MUSIC_CELADON, BANK(Music_Celadon) ; Route16House + db MUSIC_CELADON, BANK(Music_Celadon) ; Route12House + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route18Gate + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route18GateUpstairs + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands1 + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; Route22Gate + db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; VictoryRoad2 + db MUSIC_CITIES1, BANK(Music_Cities1) ; Route12GateUpstairs + db MUSIC_VERMILION, BANK(Music_Vermilion) ; VermilionHouse3 + db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; DiglettsCave + db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; VictoryRoad3 + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout1 + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout2 + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout3 + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout4 + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideoutElevator + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo2 + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo3 + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo4 + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo5 + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo6 + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo7 + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo8 + db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion2 + db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion3 + db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion4 + db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneEast + db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneNorth + db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneWest + db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneCenter + db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse1 + db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneSecretHouse + db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse2 + db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse3 + db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse4 + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; UnknownDungeon2 + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; UnknownDungeon3 + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; UnknownDungeon1 + db MUSIC_CITIES2, BANK(Music_Cities2) ; NameRater + db MUSIC_CITIES1, BANK(Music_Cities1) ; CeruleanHouse2 + db MUSIC_CINNABAR, BANK(Music_Cinnabar) + db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; RockTunnel2 + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo9 + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo10 + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo11 + db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCoElevator + db MUSIC_SILPH_CO, BANK(Music_SilphCo) + db MUSIC_SILPH_CO, BANK(Music_SilphCo) + db MUSIC_CELADON, BANK(Music_Celadon) ; BattleCenterM + db MUSIC_CELADON, BANK(Music_Celadon) ; TradeCenterM + db MUSIC_SILPH_CO, BANK(Music_SilphCo) + db MUSIC_SILPH_CO, BANK(Music_SilphCo) + db MUSIC_SILPH_CO, BANK(Music_SilphCo) + db MUSIC_SILPH_CO, BANK(Music_SilphCo) + db MUSIC_GYM, BANK(Music_Gym) ; Lorelei + db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; Bruno + db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; Agatha + db MUSIC_ROUTES3, BANK(Music_Routes3) ; BeachHouse \ No newline at end of file diff --git a/engine/bank3c.asm b/engine/bank3c.asm new file mode 100644 index 00000000..fa661614 --- /dev/null +++ b/engine/bank3c.asm @@ -0,0 +1,279 @@ +PlayPikachuSoundClip:: ; f0000 (3c:4000) + ld a, e + ld e, a + ld d, $0 + ld hl, PikachuCriesPointerTable + add hl, de + add hl, de + add hl, de + ld b, [hl] ; bank of pikachu cry data + inc hl + ld a, [hli] ; cry data pointer + ld h, [hl] + ld l, a + ld c, $4 +.loop + dec c + jr z, .asm_f0019 + call DelayFrame + jr .loop +.asm_f0019 + di + push bc + push hl + ld a, $80 + ld [rNR52], a + ld a, $77 + ld [rNR50], a + xor a + ld [rNR30], a + ld hl, $ff30 ; wave data + ld de, wRedrawRowOrColumnSrcTiles +.saveWaveDataLoop + ld a, [hl] + ld [de], a + inc de + ld a, $ff + ld [hli], a + ld a, l + cp $40 ; end of wave data + jr nz, .saveWaveDataLoop + ld a, $80 + ld [rNR30], a + ld a, [rNR51] + or $44 + ld [rNR51], a + ld a, $ff + ld [rNR31], a + ld a, $20 + ld [rNR32], a + ld a, $ff + ld [rNR33], a + ld a, $87 + ld [rNR34], a + pop hl + pop bc + call PlayPikachuPCM + xor a + ld [wc0f3], a + ld [wc0f4], a + ld a, $80 + ld [rNR52], a + xor a + ld [rNR30], a + ld hl, $ff30 + ld de, wRedrawRowOrColumnSrcTiles +.reloadWaveDataLoop + ld a, [de] + inc de + ld [hli], a + ld a, l + cp $40 ; end of wave data + jr nz, .reloadWaveDataLoop + ld a, $80 + ld [rNR30], a + ld a, [rNR51] + and $bb + ld [rNR51], a + xor a + ld [wChannelSoundIDs+CH4], a + ld [wChannelSoundIDs+CH5], a + ld [wChannelSoundIDs+CH6], a + ld [wChannelSoundIDs+CH7], a + ld a, [H_LOADEDROMBANK] + ei + ret + +PikachuCriesPointerTable: ; f008e (3c:408e) +; format: +; db bank +; dw pointer to cry + +; bank 21 + dbw BANK(PikachuCry1), PikachuCry1 ; 21:4000 + dbw BANK(PikachuCry2), PikachuCry2 ; 21:491a + dbw BANK(PikachuCry3), PikachuCry3 ; 21:4fdc + dbw BANK(PikachuCry4), PikachuCry4 ; 21:59ee + +; bank 22 + dbw BANK(PikachuCry5), PikachuCry5 ; 22:4000 + dbw BANK(PikachuCry6), PikachuCry6 ; 22:5042 + dbw BANK(PikachuCry7), PikachuCry7 ; 22:6254 + +; bank 23 + dbw BANK(PikachuCry8), PikachuCry8 ; 23:4000 + dbw BANK(PikachuCry9), PikachuCry9 ; 23:50ca + dbw BANK(PikachuCry10), PikachuCry10 ; 23:5e0c + +; bank 24 + dbw BANK(PikachuCry11), PikachuCry11 ; 24:4000 + dbw BANK(PikachuCry12), PikachuCry12 ; 24:4722 + dbw BANK(PikachuCry13), PikachuCry13 ; 24:54a4 + +; bank 25 + dbw BANK(PikachuCry14), PikachuCry14 ; 25:4000 + dbw BANK(PikachuCry15), PikachuCry15 ; 25:589a + +; banks 31-34, in no particular order + + dbw BANK(PikachuCry16), PikachuCry16 ; 31:4000 + dbw BANK(PikachuCry17), PikachuCry17 ; 34:4000 + dbw BANK(PikachuCry18), PikachuCry18 ; 31:549a + dbw BANK(PikachuCry19), PikachuCry19 ; 33:4000 + dbw BANK(PikachuCry20), PikachuCry20 ; 32:4000 + dbw BANK(PikachuCry21), PikachuCry21 ; 32:6002 + dbw BANK(PikachuCry22), PikachuCry22 ; 31:63a4 + dbw BANK(PikachuCry23), PikachuCry23 ; 34:4862 + dbw BANK(PikachuCry24), PikachuCry24 ; 33:5632 + dbw BANK(PikachuCry25), PikachuCry25 ; 34:573c + dbw BANK(PikachuCry26), PikachuCry26 ; 33:725c + +; bank 35 + dbw BANK(PikachuCry27), PikachuCry27 ; 35:4000 + dbw BANK(PikachuCry28), PikachuCry28 ; 35:4b5a + dbw BANK(PikachuCry29), PikachuCry29 ; 35:5da4 + dbw BANK(PikachuCry30), PikachuCry30 ; 35:69ce + dbw BANK(PikachuCry31), PikachuCry31 ; 35:6e80 + +; bank 36 + dbw BANK(PikachuCry32), PikachuCry32 ; 36:4000 + dbw BANK(PikachuCry33), PikachuCry33 ; 36:458a + dbw BANK(PikachuCry34), PikachuCry34 ; 36:523c + +; bank 37 + dbw BANK(PikachuCry35), PikachuCry35 ; 37:4000 + dbw BANK(PikachuCry36), PikachuCry36 ; 37:522a + +; banks 36-38 + dbw BANK(PikachuCry37), PikachuCry37 ; 38:4000 + dbw BANK(PikachuCry38), PikachuCry38 ; 38:4dfa + dbw BANK(PikachuCry39), PikachuCry39 ; 37:6e0c + dbw BANK(PikachuCry40), PikachuCry40 ; 38:5a64 + dbw BANK(PikachuCry41), PikachuCry41 ; 36:6746 + dbw BANK(PikachuCry42), PikachuCry42 ; 38:6976 + +INCLUDE "engine/overworld/advance_player_sprite.asm" + +ResetStatusAndHalveMoneyOnBlackout:: ; f0274 (3c:4274) +; Reset player status on blackout. + xor a + ld [wd435],a + xor a ; gamefreak copypasting functions (double xor a) + ld [wBattleResult], a + ld [wWalkBikeSurfState], a + ld [wIsInBattle], a + ld [wMapPalOffset], a + ld [wNPCMovementScriptFunctionNum], a + ld [hJoyHeld], a + ld [wNPCMovementScriptPointerTableNum], a + ld [wFlags_0xcd60], a + + ld [$ff9f], a + ld [$ff9f + 1], a + ld [$ff9f + 2], a + call HasEnoughMoney + jr c, .lostmoney ; never happens + + ; Halve the player's money. + ld a, [wPlayerMoney] + ld [$ff9f], a + ld a, [wPlayerMoney + 1] + ld [$ff9f + 1], a + ld a, [wPlayerMoney + 2] + ld [$ff9f + 2], a + xor a + ld [$ffa2], a + ld [$ffa3], a + ld a, 2 + ld [$ffa4], a + predef DivideBCDPredef3 + ld a, [$ffa2] + ld [wPlayerMoney], a + ld a, [$ffa2 + 1] + ld [wPlayerMoney + 1], a + ld a, [$ffa2 + 2] + ld [wPlayerMoney + 2], a + +.lostmoney + ld hl, wd732 + set 2, [hl] + res 3, [hl] + set 6, [hl] + ld a, %11111111 + ld [wJoyIgnore], a + predef_jump HealParty + +Func_f02da:: ; f02da (3c:42da) + ld a,[wCurMap] + cp VERMILION_GYM ; ??? new thing about verm gym? + jr z,.asm_f02ee + ld c,a + ld hl,Pointer_f02fa +.asm_f02e5 + ld a,[hli] + cp c + jr z,.asm_f02f4 + cp a,$ff + jr nz,.asm_f02e5 + ret +.asm_f02ee + ld hl,wd126 + set 6,[hl] + ret +.asm_f02f4 + ld hl,wd126 + set 5,[hl] + ret + +Pointer_f02fa:: ; f02fa (3c:42fa) + db $cf,$d0,$d1,$d2,$d3,$d4 + db $d5,$e9,$ea,$eb,$d6,$d7 + db $d8,$a5,$a6,$87,$c7,$ca + db $c6,$6c,$c2,$71,$f5,$f6 + db $f7,$ff + +BeachHouse_GFX:: ; f0314 (3c:4314) + INCBIN "gfx/tilesets/beachhouse.2bpp" + +BeachHouse_Block:: ; f0914 (3c:4914) + INCBIN "gfx/blocksets/beachhouse.bst" + +Func_f0a54:: ; f0a54 (3c:4a54) + ret + +Func_f0a55:: ; f0a55 (3c:4a55) + ld hl,Pointer_f0a76 ; 3c:4a76 +.loop + ld a,[hli] + cp a,$ff + ret z + ld b,a + ld a,[wCurMap] + cp b + jr z,.asm_f0a68 + inc hl + inc hl + inc hl + jr .loop + +.asm_f0a68 + ld a,[hli] + ld c,a + ld b,$0 + ld a,[hli] + ld h,[hl] + ld l,a + ld de,wMissableObjectList + call CopyData + ret + +Pointer_f0a76:: ; f0a76 (3c:4a76) + db $27,$07,$7b,$4a,$ff + db $01,$ec,$02,$ed,$03,$ee,$ff + + dr $f0a82,$f220e +BeachHouse_h: ; f220e (3c:620e) +;INCLUDE "data/mapHeaders/beach_house.asm" + dr $f220e,$f25f8 +CheckForHiddenObject:: ; f25f8 (3c:65f8) + dr $f25f8,$f4000 \ No newline at end of file diff --git a/engine/bank3c/main.asm b/engine/bank3c/main.asm deleted file mode 100644 index 468a6412..00000000 --- a/engine/bank3c/main.asm +++ /dev/null @@ -1,279 +0,0 @@ -PlayPikachuSoundClip:: ; f0000 (3c:4000) - ld a, e - ld e, a - ld d, $0 - ld hl, PikachuCriesPointerTable - add hl, de - add hl, de - add hl, de - ld b, [hl] ; bank of pikachu cry data - inc hl - ld a, [hli] ; cry data pointer - ld h, [hl] - ld l, a - ld c, $4 -.loop - dec c - jr z, .asm_f0019 - call DelayFrame - jr .loop -.asm_f0019 - di - push bc - push hl - ld a, $80 - ld [rNR52], a - ld a, $77 - ld [rNR50], a - xor a - ld [rNR30], a - ld hl, $ff30 ; wave data - ld de, wRedrawRowOrColumnSrcTiles -.saveWaveDataLoop - ld a, [hl] - ld [de], a - inc de - ld a, $ff - ld [hli], a - ld a, l - cp $40 ; end of wave data - jr nz, .saveWaveDataLoop - ld a, $80 - ld [rNR30], a - ld a, [rNR51] - or $44 - ld [rNR51], a - ld a, $ff - ld [rNR31], a - ld a, $20 - ld [rNR32], a - ld a, $ff - ld [rNR33], a - ld a, $87 - ld [rNR34], a - pop hl - pop bc - call PlayPikachuPCM - xor a - ld [wc0f3], a - ld [wc0f4], a - ld a, $80 - ld [rNR52], a - xor a - ld [rNR30], a - ld hl, $ff30 - ld de, wRedrawRowOrColumnSrcTiles -.reloadWaveDataLoop - ld a, [de] - inc de - ld [hli], a - ld a, l - cp $40 ; end of wave data - jr nz, .reloadWaveDataLoop - ld a, $80 - ld [rNR30], a - ld a, [rNR51] - and $bb - ld [rNR51], a - xor a - ld [wChannelSoundIDs+CH4], a - ld [wChannelSoundIDs+CH5], a - ld [wChannelSoundIDs+CH6], a - ld [wChannelSoundIDs+CH7], a - ld a, [H_LOADEDROMBANK] - ei - ret - -PikachuCriesPointerTable: ; f008e (3c:408e) -; format: -; db bank -; dw pointer to cry - -; bank 21 - dbw BANK(PikachuCry1), PikachuCry1 ; 21:4000 - dbw BANK(PikachuCry2), PikachuCry2 ; 21:491a - dbw BANK(PikachuCry3), PikachuCry3 ; 21:4fdc - dbw BANK(PikachuCry4), PikachuCry4 ; 21:59ee - -; bank 22 - dbw BANK(PikachuCry5), PikachuCry5 ; 22:4000 - dbw BANK(PikachuCry6), PikachuCry6 ; 22:5042 - dbw BANK(PikachuCry7), PikachuCry7 ; 22:6254 - -; bank 23 - dbw BANK(PikachuCry8), PikachuCry8 ; 23:4000 - dbw BANK(PikachuCry9), PikachuCry9 ; 23:50ca - dbw BANK(PikachuCry10), PikachuCry10 ; 23:5e0c - -; bank 24 - dbw BANK(PikachuCry11), PikachuCry11 ; 24:4000 - dbw BANK(PikachuCry12), PikachuCry12 ; 24:4722 - dbw BANK(PikachuCry13), PikachuCry13 ; 24:54a4 - -; bank 25 - dbw BANK(PikachuCry14), PikachuCry14 ; 25:4000 - dbw BANK(PikachuCry15), PikachuCry15 ; 25:589a - -; banks 31-34, in no particular order - - dbw BANK(PikachuCry16), PikachuCry16 ; 31:4000 - dbw BANK(PikachuCry17), PikachuCry17 ; 34:4000 - dbw BANK(PikachuCry18), PikachuCry18 ; 31:549a - dbw BANK(PikachuCry19), PikachuCry19 ; 33:4000 - dbw BANK(PikachuCry20), PikachuCry20 ; 32:4000 - dbw BANK(PikachuCry21), PikachuCry21 ; 32:6002 - dbw BANK(PikachuCry22), PikachuCry22 ; 31:63a4 - dbw BANK(PikachuCry23), PikachuCry23 ; 34:4862 - dbw BANK(PikachuCry24), PikachuCry24 ; 33:5632 - dbw BANK(PikachuCry25), PikachuCry25 ; 34:573c - dbw BANK(PikachuCry26), PikachuCry26 ; 33:725c - -; bank 35 - dbw BANK(PikachuCry27), PikachuCry27 ; 35:4000 - dbw BANK(PikachuCry28), PikachuCry28 ; 35:4b5a - dbw BANK(PikachuCry29), PikachuCry29 ; 35:5da4 - dbw BANK(PikachuCry30), PikachuCry30 ; 35:69ce - dbw BANK(PikachuCry31), PikachuCry31 ; 35:6e80 - -; bank 36 - dbw BANK(PikachuCry32), PikachuCry32 ; 36:4000 - dbw BANK(PikachuCry33), PikachuCry33 ; 36:458a - dbw BANK(PikachuCry34), PikachuCry34 ; 36:523c - -; bank 37 - dbw BANK(PikachuCry35), PikachuCry35 ; 37:4000 - dbw BANK(PikachuCry36), PikachuCry36 ; 37:522a - -; banks 36-38 - dbw BANK(PikachuCry37), PikachuCry37 ; 38:4000 - dbw BANK(PikachuCry38), PikachuCry38 ; 38:4dfa - dbw BANK(PikachuCry39), PikachuCry39 ; 37:6e0c - dbw BANK(PikachuCry40), PikachuCry40 ; 38:5a64 - dbw BANK(PikachuCry41), PikachuCry41 ; 36:6746 - dbw BANK(PikachuCry42), PikachuCry42 ; 38:6976 - -INCLUDE "engine/bank3c/overworld.asm" - -ResetStatusAndHalveMoneyOnBlackout:: ; f0274 (3c:4274) -; Reset player status on blackout. - xor a - ld [wd435],a - xor a ; gamefreak copypasting functions (double xor a) - ld [wBattleResult], a - ld [wWalkBikeSurfState], a - ld [wIsInBattle], a - ld [wMapPalOffset], a - ld [wNPCMovementScriptFunctionNum], a - ld [hJoyHeld], a - ld [wNPCMovementScriptPointerTableNum], a - ld [wFlags_0xcd60], a - - ld [$ff9f], a - ld [$ff9f + 1], a - ld [$ff9f + 2], a - call HasEnoughMoney - jr c, .lostmoney ; never happens - - ; Halve the player's money. - ld a, [wPlayerMoney] - ld [$ff9f], a - ld a, [wPlayerMoney + 1] - ld [$ff9f + 1], a - ld a, [wPlayerMoney + 2] - ld [$ff9f + 2], a - xor a - ld [$ffa2], a - ld [$ffa3], a - ld a, 2 - ld [$ffa4], a - predef DivideBCDPredef3 - ld a, [$ffa2] - ld [wPlayerMoney], a - ld a, [$ffa2 + 1] - ld [wPlayerMoney + 1], a - ld a, [$ffa2 + 2] - ld [wPlayerMoney + 2], a - -.lostmoney - ld hl, wd732 - set 2, [hl] - res 3, [hl] - set 6, [hl] - ld a, %11111111 - ld [wJoyIgnore], a - predef_jump HealParty - -Func_f02da:: ; f02da (3c:42da) - ld a,[wCurMap] - cp VERMILION_GYM ; ??? new thing about verm gym? - jr z,.asm_f02ee - ld c,a - ld hl,Pointer_f02fa -.asm_f02e5 - ld a,[hli] - cp c - jr z,.asm_f02f4 - cp a,$ff - jr nz,.asm_f02e5 - ret -.asm_f02ee - ld hl,wd126 - set 6,[hl] - ret -.asm_f02f4 - ld hl,wd126 - set 5,[hl] - ret - -Pointer_f02fa:: ; f02fa (3c:42fa) - db $cf,$d0,$d1,$d2,$d3,$d4 - db $d5,$e9,$ea,$eb,$d6,$d7 - db $d8,$a5,$a6,$87,$c7,$ca - db $c6,$6c,$c2,$71,$f5,$f6 - db $f7,$ff - -BeachHouse_GFX:: ; f0314 (3c:4314) - INCBIN "gfx/tilesets/beachhouse.2bpp" - -BeachHouse_Block:: ; f0914 (3c:4914) - INCBIN "gfx/blocksets/beachhouse.bst" - -Func_f0a54:: ; f0a54 (3c:4a54) - ret - -Func_f0a55:: ; f0a55 (3c:4a55) - ld hl,Pointer_f0a76 ; 3c:4a76 -.loop - ld a,[hli] - cp a,$ff - ret z - ld b,a - ld a,[wCurMap] - cp b - jr z,.asm_f0a68 - inc hl - inc hl - inc hl - jr .loop - -.asm_f0a68 - ld a,[hli] - ld c,a - ld b,$0 - ld a,[hli] - ld h,[hl] - ld l,a - ld de,wMissableObjectList - call CopyData - ret - -Pointer_f0a76:: ; f0a76 (3c:4a76) - db $27,$07,$7b,$4a,$ff - db $01,$ec,$02,$ed,$03,$ee,$ff - - dr $f0a82,$f220e -BeachHouse_h: ; f220e (3c:620e) -;INCLUDE "data/mapHeaders/beach_house.asm" - dr $f220e,$f25f8 -CheckForHiddenObject:: ; f25f8 (3c:65f8) - dr $f25f8,$f4000 \ No newline at end of file diff --git a/engine/bank3c/overworld.asm b/engine/bank3c/overworld.asm deleted file mode 100644 index e02fb129..00000000 --- a/engine/bank3c/overworld.asm +++ /dev/null @@ -1,241 +0,0 @@ -_AdvancePlayerSprite:: ; f010c (3c:410c) - ld a,[wSpriteStateData1 + 3] ; delta Y - ld b,a - ld a,[wSpriteStateData1 + 5] ; delta X - ld c,a - ld hl,wWalkCounter ; walking animation counter - dec [hl] - jr nz,.afterUpdateMapCoords -; if it's the end of the animation, update the player's map coordinates - ld hl, wd430 - res 5, [hl] - ld a,[wYCoord] - add b - ld [wYCoord],a - ld a,[wXCoord] - add c - ld [wXCoord],a -.afterUpdateMapCoords - ld a,[wWalkCounter] ; walking animation counter - cp a,$07 - jp nz,.scrollBackgroundAndSprites -; if this is the first iteration of the animation - ld a,c - cp a,$01 - jr nz,.checkIfMovingWest -; moving east - ld a,[wMapViewVRAMPointer] - ld e,a - and $e0 - ld d,a - ld a,e - add $02 - and $1f - or d - ld [wMapViewVRAMPointer],a - jr .adjustXCoordWithinBlock -.checkIfMovingWest - cp a,$ff - jr nz,.checkIfMovingSouth -; moving west - ld a,[wMapViewVRAMPointer] - ld e,a - and a,$e0 - ld d,a - ld a,e - sub $02 - and $1f - or d - ld [wMapViewVRAMPointer],a - jr .adjustXCoordWithinBlock -.checkIfMovingSouth - ld a,b - cp a,$01 - jr nz,.checkIfMovingNorth -; moving south - ld a,[wMapViewVRAMPointer] - add $40 - ld [wMapViewVRAMPointer],a - jr nc,.adjustXCoordWithinBlock - ld a,[wMapViewVRAMPointer + 1] - inc a - and $03 - or $98 - ld [wMapViewVRAMPointer + 1],a - jr .adjustXCoordWithinBlock -.checkIfMovingNorth - cp a,$ff - jr nz,.adjustXCoordWithinBlock -; moving north - ld a,[wMapViewVRAMPointer] - sub $40 - ld [wMapViewVRAMPointer],a - jr nc,.adjustXCoordWithinBlock - ld a,[wMapViewVRAMPointer + 1] - dec a - and $03 - or $98 - ld [wMapViewVRAMPointer + 1],a -.adjustXCoordWithinBlock - ld a,c - and a - jr z,.pointlessJump ; mistake? -.pointlessJump - ld hl,wXBlockCoord - ld a,[hl] - add c - ld [hl],a - cp $02 - jr nz,.checkForMoveToWestBlock -; moved into the tile block to the east - xor a - ld [hl],a - ld hl,wXOffsetSinceLastSpecialWarp - inc [hl] - ld de,wCurrentTileBlockMapViewPointer - call MoveTileBlockMapPointerEast - jr .updateMapView -.checkForMoveToWestBlock - cp a,$ff - jr nz,.adjustYCoordWithinBlock -; moved into the tile block to the west - ld a,$1 - ld [hl],a - ld hl,wXOffsetSinceLastSpecialWarp - dec [hl] - ld de,wCurrentTileBlockMapViewPointer - call MoveTileBlockMapPointerWest - jr .updateMapView -.adjustYCoordWithinBlock - ld hl,wYBlockCoord - ld a,[hl] - add b - ld [hl],a - cp $2 - jr nz,.checkForMoveToNorthBlock -; moved into the tile block to the south - xor a - ld [hl],a - ld hl,wYOffsetSinceLastSpecialWarp - inc [hl] - ld de,wCurrentTileBlockMapViewPointer - ld a,[wCurMapWidth] - call MoveTileBlockMapPointerSouth - jr .updateMapView -.checkForMoveToNorthBlock - cp a,$ff - jr nz,.updateMapView -; moved into the tile block to the north - ld a,$1 - ld [hl],a - ld hl,wYOffsetSinceLastSpecialWarp - dec [hl] - ld de,wCurrentTileBlockMapViewPointer - ld a,[wCurMapWidth] - call MoveTileBlockMapPointerNorth -.updateMapView - call LoadCurrentMapView - ld a,[wSpriteStateData1 + 3] ; delta Y - cp $1 - jr nz,.checkIfMovingNorth2 -; if moving south - call ScheduleSouthRowRedraw - jr .scrollBackgroundAndSprites -.checkIfMovingNorth2 - cp $ff - jr nz,.checkIfMovingEast2 -; if moving north - call ScheduleNorthRowRedraw - jr .scrollBackgroundAndSprites -.checkIfMovingEast2 - ld a,[wSpriteStateData1 + 5] ; delta X - cp $1 - jr nz,.checkIfMovingWest2 -; if moving east - call ScheduleEastColumnRedraw - jr .scrollBackgroundAndSprites -.checkIfMovingWest2 - cp $ff - jr nz,.scrollBackgroundAndSprites -; if moving west - call ScheduleWestColumnRedraw -.scrollBackgroundAndSprites - ld a,[wSpriteStateData1 + 3] ; delta Y - add a - ld b,a - ld a,[wSpriteStateData1 + 5] ; delta X - add a - ld c,a -; shift all the sprites in the direction opposite of the player's motion -; so that the player appears to move relative to them - ld hl,wSpriteStateData1 + $14 - ld e,15 -.spriteShiftLoop - ld a,[hl] - sub b - ld [hli],a - inc l - ld a,[hl] - sub c - ld [hl],a - ld a,$0e - add l - ld l,a - dec e - jr nz,.spriteShiftLoop -.done - ld a,[hSCY] - add b - ld [hSCY],a ; update background scroll Y - ld a,[hSCX] - add c - ld [hSCX],a ; update background scroll X - ret - -MoveTileBlockMapPointerEast:: ; f0248 (3c:4248) - ld a,[de] - add $1 - ld [de],a - ret nc - inc de - ld a,[de] - inc a - ld [de],a - ret - -MoveTileBlockMapPointerWest:: ; f0252 (3c:4252) - ld a,[de] - sub $1 - ld [de],a - ret nc - inc de - ld a,[de] - dec a - ld [de],a - ret - -MoveTileBlockMapPointerSouth:: ; f025c (3c:425c) - add $6 - ld b,a - ld a,[de] - add b - ld [de],a - ret nc - inc de - ld a,[de] - inc a - ld [de],a - ret - -MoveTileBlockMapPointerNorth:: ; f0268 (3c:4268) - add $6 - ld b,a - ld a,[de] - sub b - ld [de],a - ret nc - inc de - ld a,[de] - dec a - ld [de],a - ret \ No newline at end of file diff --git a/engine/bank3d.asm b/engine/bank3d.asm new file mode 100644 index 00000000..ef848679 --- /dev/null +++ b/engine/bank3d.asm @@ -0,0 +1,693 @@ +INCLUDE "engine/battle/common_text.asm" +INCLUDE "engine/battle/link_battle_versus_text.asm" +INCLUDE "engine/battle/unused_stats_functions.asm" +INCLUDE "engine/battle/scroll_draw_trainer_pic.asm" + +Func_f429f:: ; f429f (3d:429f) + coord hl, 0,5 + ld c,$0 +.asm_f42a4 + inc c + ld a,c + cp $9 + ret z + ld d,$5b + push bc + push hl +.asm_f42ad + call Func_f42c2 + dec hl + ld a,d + sub $7 + ld d,a + dec c + jr nz,.asm_f42ad + ld c,$2 + call DelayFrames + pop hl + pop bc + inc hl + jr .asm_f42a4 + +Func_f42c2:: ; f42c2 (3d:f42c2) + push hl + push de + push bc + ld e,$7 +.loop + ld a,d + cp $31 + jr nc,.asm_f42ce + ld a,$7f +.asm_f42ce + ld [hl],a + ld bc,$14 + add hl,bc + inc d + dec e + jr nz,.loop + pop bc + pop de + pop hl + ret + +INCLUDE "engine/battle/decrement_pp.asm" + +ModifyPikachuHappiness:: ; f430a (3d:430a) + ld a, d + cp PIKAHAPPY_GYMLEADER + jr z, .checkanywhereinparty + cp PIKAHAPPY_WALKING + jr z, .checkanywhereinparty + push de + callab IsThisPartymonStarterPikachu_Party + pop de + ret nc + jr .proceed + +.checkanywhereinparty + push de + callab IsStarterPikachuInOurParty + pop de + ret nc + +.proceed + push de + ; Divide [wPikachuHappiness] by 100. Hold the integer part in e. + ld e, $0 + ld a, [wPikachuHappiness] + cp 100 + jr c, .wPikachuHappiness_div_100 + inc e + cp 200 + jr c, .wPikachuHappiness_div_100 + inc e +.wPikachuHappiness_div_100 + ; Get the (d, e) entry from .HappinessChangeTable. + ld c, d + dec c + ld b, $0 + ld hl, .HappinessChangeTable + add hl, bc + add hl, bc + add hl, bc + ld d, $0 + add hl, de + ld a, [hl] + ; If [hl] is positive, take min(0xff, [hl] + [wPikachuHappiness]). + ; If [hl] is negative, take max(0x00, [hl] + [wPikachuHappiness]). + ; Inexplicably, we're using 100 as the threshold for comparison. + cp 100 + ld a, [wPikachuHappiness] + jr nc, .negative + add [hl] + jr nc, .okay + ld a, -1 + jr .okay + +.negative + add [hl] + jr c, .okay + xor a +.okay + ld [wPikachuHappiness], a + + ; Restore d and get the d'th entry in .Moods. + pop de + dec d + ld hl, .Moods + ld e, d + ld d, $0 + add hl, de + ld a, [hl] + ld b, a + ; Modify Pikachu's mood + cp $80 + jr z, .done + ld a, [wPikachuMood] + jr c, .decreased + cp b + jr nc, .done + ld a, [wd49c] + and a + jr nz, .done + jr .update_mood + +.decreased + cp b + jr c, .done +.update_mood + ld a, b + ld [wPikachuMood], a +.done + ret + +.HappinessChangeTable: ; f4385 (3d:4385) + ; Increase + db 5, 3, 2 ; Gained a level + db 5, 3, 2 ; HP restore + db 1, 1, 0 ; Used X item + db 3, 2, 1 ; Challenged Gym Leader + db 1, 1, 0 ; Teach TM/HM + db 2, 1, 1 ; Walking around + ; Decrease + db -3, -3, -5 ; Deposited + db -1, -1, -1 ; Fainted in battle + db -5, -5, -10 ; Fainted due to Poison outside of battle + db -5, -5, -10 ; Unknown (d = 10) + db -10, -10, -20 ; Unknown (d = 11) + +.Moods: ; f43a6 (3d:43a6) + ; Increase + db $8a ; Gained a level + db $83 ; HP restore + db $80 ; Teach TM/HM + db $80 ; Challenged Gym Leader + db $94 ; Unknown (d = 5) + db $80 ; Unknown (d = 6) + ; Decrease + db $62 ; Deposited + db $6c ; Fainted + db $62 ; Unknown (d = 9) + db $6c ; Unknown (d = 10) + db $00 ; Unknown (d = 11) + +; f43b1 (3d:43b1) +RedPicBack:: INCBIN "pic/trainer/redb.pic" +OldManPic:: INCBIN "pic/trainer/oldman.pic" +OakPicBack:: INCBIN "pic/ytrainer/prof.oakb.pic" + +;SECTION "bank3d Yellow Intro",ROMX[$453f],BANK[$3D] + +Func_f453f:: ; f453f (3d:453f) + ld hl,PokemonLogoGraphics + ld de,vChars2 + ld bc,$730 + ld a,BANK(PokemonLogoGraphics) ; redundant because this function is in bank3d + call FarCopyData + ld hl,YellowLogoGraphics+$230 + ld de,vChars0+$fd0 + ld bc,$30 + ld a,BANK(YellowLogoGraphics) + call FarCopyData + ld hl,YellowLogoGraphics+$260 + ld de,vChars1 + ld bc,$400 + ld a,BANK(YellowLogoGraphics) + call FarCopyData + ld hl,YellowLogoGraphics+$660 + ld de,vChars0+$f00 + ld bc,$c0 + ld a,BANK(YellowLogoGraphics) + call FarCopyData + ret + +Func_f4578:: ; f4578 (3d:4578) + coord hl, 2,1 + ld de,Pointer_f45f9 + ld bc,7 << 8 | 16 ; 16x7 (xy) + call CopyScreenArea + ret + +Func_f4585:: ; f4585 (3d:4585) + coord hl, 6,4 + ld de,Pointer_f4673 + ld bc,4 << 8 | 7 ; 7x4 (xy) + call CopyScreenArea + coord hl, 9,8 + ld [hl],$64 + inc hl + ld [hl],$65 + ret + +Func_f459a:: ; f459a (3d:459a) + coord hl, 4,8 + ld de,Pointer_f468f + ld bc,9 << 8 | 12 ; 12x9 (xy) + call CopyScreenArea + coord hl, 16,10 + ld [hl],$96 + coord hl, 16,11 + ld [hl],$9d + coord hl, 16,12 + ld [hl],$a7 + coord hl, 16,13 + ld [hl],$b1 + ld hl,Pointer_f45c7 + ld de,wOAMBuffer + ld bc,$20 + call CopyData + ret + +Pointer_f45c7: ; f45c7 (3d:45c7) + db $60,$40,$f1,$22 + db $60,$48,$f0,$22 + db $68,$40,$f3,$22 + db $68,$48,$f2,$22 + db $60,$60,$f0,$02 + db $60,$68,$f1,$02 + db $68,$60,$f2,$02 + db $68,$68,$f3,$02 + +CopyScreenArea:: ; f45e7 (3d:45e7) +; copy cxb (xy) screen area from de to hl + push bc + push hl +.loop + ld a,[de] + inc de + ld [hli],a + dec c + jr nz,.loop + pop hl + ld bc,$14 + add hl,bc + pop bc + dec b + jr nz,CopyScreenArea + ret + +Pointer_f45f9: ; f45f9 (3d:45f9) +; 16x7 (xy) + db $f4,$f4,$f4,$f4,$f4,$f4,$49,$f4,$72,$30,$f4,$f4,$f4,$f4,$f4,$f4 + db $fd,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0a,$0b,$f4,$0d,$0e,$0f + db $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + db $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f + db $f4,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f + db $f4,$41,$42,$43,$44,$45,$46,$47,$48,$f4,$4a,$4b,$4c,$4d,$4e,$4f + db $f4,$6a,$6b,$6c,$6d,$f4,$f4,$f4,$f4,$f4,$f4,$6e,$6f,$70,$71,$f4 + +Pointer_f4669:: ; f4669 (3d:4669) + db $47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f,$5f + +Pointer_f4673:: ; f4673 (3d:4673) +; 7x4 (xy) + db $24,$25,$66,$67,$68,$69,$2a + db $50,$51,$52,$53,$54,$55,$56 + db $57,$58,$59,$5a,$5b,$5c,$5d + db $6d,$5e,$5f,$60,$61,$62,$63 + +Pointer_f468f:: ; f468f (3d:468f) +; 12x9 (xy) + db $80,$81,$82,$83,$00,$00,$00,$00,$84,$85,$86,$87 + db $88,$89,$8a,$8b,$8c,$8d,$8d,$8e,$8f,$8a,$90,$91 + db $00,$92,$93,$8a,$8a,$8a,$8a,$8a,$8a,$94,$95,$00 + db $00,$00,$97,$8a,$8a,$98,$99,$8a,$8a,$9a,$9b,$9c + db $00,$00,$9e,$9f,$a0,$a1,$a2,$a3,$a4,$a5,$a6,$8a + db $00,$a8,$a9,$aa,$8a,$ab,$ac,$8a,$ad,$ae,$af,$b0 + db $00,$b2,$b3,$b4,$8a,$8a,$8a,$8a,$b5,$b6,$b7,$b8 + db $00,$b9,$ba,$8a,$8a,$8a,$8a,$8a,$8a,$bb,$bc,$00 + db $00,$00,$bd,$8a,$8a,$8a,$8a,$8a,$8a,$be,$bf,$00 + +; f46f9 (3d:46f9) +PokemonLogoGraphics: INCBIN "gfx/pokemon_logo.2bpp" +YellowLogoGraphics: INCBIN "gfx/yellow_titlescreen.2bpp" + +INCLUDE "engine/menu/link_menu.asm" + +HandleMenuInputDouble:: ; f5a40 (3d:5a40) + xor a + ld [wPartyMenuAnimMonEnabled],a + +HandleMenuInputPokemonSelectionDouble:: ; f5a44 (3d:5a44) + ld a,[H_DOWNARROWBLINKCNT1] + push af + ld a,[H_DOWNARROWBLINKCNT2] + push af ; save existing values on stack + xor a + ld [H_DOWNARROWBLINKCNT1],a ; blinking down arrow timing value 1 + ld a,$06 + ld [H_DOWNARROWBLINKCNT2],a ; blinking down arrow timing value 2 +.loop1 + xor a + ld [wAnimCounter],a ; counter for pokemon shaking animation + call Func_f5ab0 + call JoypadLowSensitivity + ld a,[hJoy5] + and a ; was a key pressed? + jr nz,.keyPressed + pop af + ld [H_DOWNARROWBLINKCNT2],a + pop af + ld [H_DOWNARROWBLINKCNT1],a ; restore previous values + xor a + ld [wMenuWrappingEnabled],a ; disable menu wrapping + ret +.keyPressed + xor a + ld [wCheckFor180DegreeTurn],a + ld a,[hJoy5] + ld b,a + bit 6,a ; pressed Up key? + jr z,.checkIfDownPressed +.upPressed + ld a,[wCurrentMenuItem] ; selected menu item + and a ; already at the top of the menu? + jr z,.checkOtherKeys +.notAtTop + dec a + ld [wCurrentMenuItem],a ; move selected menu item up one space + jr .checkOtherKeys +.checkIfDownPressed + bit 7,a + jr z,.checkOtherKeys +.downPressed + ld a,[wCurrentMenuItem] + inc a + ld c,a + ld a,[wMaxMenuItem] + cp c + jr c,.checkOtherKeys + ld a,c + ld [wCurrentMenuItem],a +.checkOtherKeys + ld a,[wMenuWatchedKeys] + and b ; does the menu care about any of the pressed keys? + jp z,.loop1 +.checkIfAButtonOrBButtonPressed + ld a,[hJoy5] + and A_BUTTON | B_BUTTON + jr z,.skipPlayingSound +.AButtonOrBButtonPressed + ld a, $90 ; (SFX_02_40 - SFX_Headers_02) / 3 + call PlaySound ; play sound +.skipPlayingSound + pop af + ld [H_DOWNARROWBLINKCNT2],a + pop af + ld [H_DOWNARROWBLINKCNT1],a ; restore previous values + ld a,[hJoy5] + ret + +Func_f5ab0:: ; f5ab0 (3d:5ab0) + ld a,[wTopMenuItemY] + and a + jr z,.asm_f5ac0 + coord hl, 0,0 + ld bc,$14 +.loop + add hl,bc + dec a + jr nz,.loop +.asm_f5ac0 + ld a,[wTopMenuItemX] + ld b,$0 + ld c,a + add hl,bc + push hl + ld a,[wLastMenuItem] + and a + jr z,.asm_f5ad5 + ld bc,$28 +.loop2 + add hl,bc + dec a + jr nz,.loop2 +.asm_f5ad5 + ld a,[hl] + cp "▶" + jr nz,.asm_f5ade + ld a,[wTileBehindCursor] + ld [hl],a +.asm_f5ade + pop hl + ld a,[wCurrentMenuItem] + and a + jr z,.asm_f5aec + ld bc,$28 +.loop3 + add hl,bc + dec a + jr nz,.loop3 +.asm_f5aec + ld a,[hl] + cp "▶" + jr z,.asm_f5af4 + ld [wTileBehindCursor],a +.asm_f5af4 + ld a,"▶" + ld [hl],a + ld a,l + ld [wMenuCursorLocation],a + ld a,h + ld [wMenuCursorLocation+1],a + ld a,[wCurrentMenuItem] + ld [wLastMenuItem],a + ret + +Func_f5b06:: ; f5b06 (3d:5b06) + ld hl,wd728 + set 0,[hl] + ld hl,Text_f5b17 + call PrintText + ld hl,Text_f5b28 + jp PrintText + +Text_f5b17:: ; f5b17 (3d:5b17) + TX_FAR _UsedStrengthText ; 2d:417e + db $08 ; asm + ld a,[wcf91] + call PlayCry + call Delay3 + jp TextScriptEnd + +Text_f5b28:: ; f5b28 (3d:5b28) + TX_FAR _CanMoveBouldersText ; 2d:4193 + db "@" + +CheckForForcedBikeSurf:: ; f5b2d (3d:5b2d) + ld hl,wd728 + set 1,[hl] + ld a,[wd732] + bit 5,a + jr nz,.asm_f5b59 + ld a,[wCurMap] + cp SEAFOAM_ISLANDS_5 + ret nz + CheckBothEventsSet EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM4_BOULDER2_DOWN_HOLE + ret z + ld hl,CoordsData_f5b64 + call ArePlayerCoordsInArray + ret nc + ld hl,wd728 + res 1,[hl] + ld hl,CurrentTooFastText + jp PrintText +.asm_f5b59 + ld hl,wd728 + res 1,[hl] + ld hl,CyclingIsFunText + jp PrintText + +CoordsData_f5b64:: ; f5b64 (3d:5b64) + db 11,07 + db $ff + +CurrentTooFastText:: ; f5b67 (3d:5b67) + TX_FAR _CurrentTooFastText ; 2d:41ab + db "@" + +CyclingIsFunText:: ; f5b6c (3d:5b6c) + TX_FAR _CyclingIsFunText ; 2d:41ca + db "@" + +AddItemToInventory_:: ; f5b70 (3d:5b70) + ld a,[wItemQuantity] ; a = item quantity + push af + push bc + push de + push hl + push hl + ld d,50 ; PC box can hold 50 items + ld a,wNumBagItems & $FF + cp l + jr nz,.checkIfInventoryFull + ld a,wNumBagItems >> 8 + cp h + jr nz,.checkIfInventoryFull +; if the destination is the bag + ld d,20 ; bag can hold 20 items +.checkIfInventoryFull + ld a,[hl] + sub d + ld d,a + ld a,[hli] + and a + jr z,.addNewItem +.notAtEndOfInventory + ld a,[hli] + ld b,a ; b = ID of current item in table + ld a,[wcf91] ; a = ID of item being added + cp b ; does the current item in the table match the item being added? + jp z,.increaseItemQuantity ; if so, increase the item's quantity + inc hl +.loop + ld a,[hl] + cp a,$ff ; is it the end of the table? + jr nz, .notAtEndOfInventory +.addNewItem ; add an item not yet in the inventory + pop hl + ld a,d + and a ; is there room for a new item slot? + jr z,.done +; if there is room + inc [hl] ; increment the number of items in the inventory + ld a,[hl] ; the number of items will be the index of the new item + add a + dec a + ld c,a + ld b,0 + add hl,bc ; hl = address to store the item + ld a,[wcf91] + ld [hli],a ; store item ID + ld a,[wItemQuantity] + ld [hli],a ; store item quantity + ld [hl],$ff ; store terminator + jp .success +.increaseItemQuantity ; increase the quantity of an item already in the inventory + ld a,[wItemQuantity] + ld b,a ; b = quantity to add + ld a,[hl] ; a = existing item quantity + add b ; a = new item quantity + cp a,100 + jp c,.storeNewQuantity ; if the new quantity is less than 100, store it +; if the new quantity is greater than or equal to 100, +; try to max out the current slot and add the rest in a new slot + sub a,99 + ld [wItemQuantity],a ; a = amount left over (to put in the new slot) + ld a,d + and a ; is there room for a new item slot? + jr z,.increaseItemQuantityFailed +; if so, store 99 in the current slot and store the rest in a new slot + ld a,99 + ld [hli],a + jp .loop +.increaseItemQuantityFailed + pop hl + and a + jr .done +.storeNewQuantity + ld [hl],a + pop hl +.success + scf +.done + pop hl + pop de + pop bc + pop bc + ld a,b + ld [wItemQuantity],a ; restore the initial value from when the function was called + ret + +; function to remove an item (in varying quantities) from the player's bag or PC box +; INPUT: +; hl = address of inventory (either wNumBagItems or wNumBoxItems) +; [wWhichPokemon] = index (within the inventory) of the item to remove +; [wItemQuantity] = quantity to remove +RemoveItemFromInventory_: ; f5be1 (3d:5be1) + push hl + inc hl + ld a,[wWhichPokemon] ; index (within the inventory) of the item being removed + add a + add l + ld l,a + jr nc,.noCarry + inc h +.noCarry + inc hl + ld a,[wItemQuantity] ; quantity being removed + ld e,a + ld a,[hl] ; a = current quantity + sub e + ld [hld],a ; store new quantity + ld [wMaxItemQuantity],a + and a + jr nz,.skipMovingUpSlots +; if the remaining quantity is 0, +; remove the emptied item slot and move up all the following item slots +.moveSlotsUp + ld e,l + ld d,h + inc de + inc de ; de = address of the slot following the emptied one +.loop ; loop to move up the following slots + ld a,[de] + inc de + ld [hli],a + cp a,$ff + jr nz,.loop +; update menu info + xor a + ld [wListScrollOffset],a + ld [wCurrentMenuItem],a + ld [wBagSavedMenuItem],a + ld [wSavedListScrollOffset],a + pop hl + ld a,[hl] ; a = number of items in inventory + dec a ; decrement the number of items + ld [hl],a ; store new number of items + ld [wListCount],a + cp a,2 + jr c,.done + ld [wMaxMenuItem],a + jr .done +.skipMovingUpSlots + pop hl +.done + ret + +TrainerInfoTextBoxTileGraphics: INCBIN "gfx/trainer_info.2bpp" +TrainerInfoTextBoxTileGraphicsEnd: +BlankLeaderNames: INCBIN "gfx/blank_leader_names.2bpp" +CircleTile: INCBIN "gfx/circle_tile.2bpp" +BadgeNumbersTileGraphics: INCBIN "gfx/badge_numbers.2bpp" + +ReadSuperRodData:: ; f5ea4 (3d:5ea4) + ld a,[wCurMap] + ld c,a + ld hl,FishingSlots +.loop + ld a,[hli] + cp $ff + jr z,.notfound + cp c + jr z,.found + ld de,$8 + add hl,de + jr .loop +.found + call GenerateRandomFishingEncounter + ret +.notfound + ld de,$0 + ret + +GenerateRandomFishingEncounter: ; f5ec1 (3d:5ec1) + call Random + cp $66 + jr c,.asm_f5ed6 + inc hl + inc hl + cp $b2 + jr c,.asm_f5ed6 + inc hl + inc hl + cp $e5 + jr c,.asm_f5ed6 + inc hl + inc hl +.asm_f5ed6 + ld e,[hl] + inc hl + ld d,[hl] + ret + +INCLUDE "data/super_rod.asm" +INCLUDE "engine/battle/bank3d_battle.asm" +INCLUDE "engine/items/tm_prices.asm" +INCLUDE "engine/multiply_divide.asm" +INCLUDE "engine/give_pokemon.asm" +INCLUDE "engine/battle/get_trainer_name.asm" +INCLUDE "engine/random.asm" +INCLUDE "engine/predefs.asm" \ No newline at end of file diff --git a/engine/bank3d/bank3d_battle.asm b/engine/bank3d/bank3d_battle.asm deleted file mode 100644 index b9713cec..00000000 --- a/engine/bank3d/bank3d_battle.asm +++ /dev/null @@ -1,291 +0,0 @@ -InitBattle: ; f5ff2 (3d:5ff2) - ld a, [wCurOpponent] - and a - jr z, asm_f6003 - -InitOpponent: ; f5ff8 (3d:5ff8) - ld a, [wCurOpponent] - ld [wcf91], a - ld [wEnemyMonSpecies2], a - jr asm_f601d -asm_f6003: ; f6003 (3d:6003) - ld a, [wd732] - bit 1, a - jr z, .asm_f600f - ld a, [hJoyHeld] - bit 1, a ; B button pressed? - ret nz -.asm_f600f - ld a, [wNumberOfNoRandomBattleStepsLeft] - and a - ret nz - callab TryDoWildEncounter - ret nz -asm_f601d: ; f601d (f:601d) - ld a, [wMapPalOffset] - push af - ld hl, wLetterPrintingDelayFlags - ld a, [hl] - push af - res 1, [hl] - call InitBattleVariables ; 3d:6236 - ld a, [wEnemyMonSpecies2] - sub $c8 - jp c, InitWildBattle - ld [wTrainerClass], a - call GetTrainerInformation - callab ReadTrainer - callab DoBattleTransitionAndInitBattleVariables - call _LoadTrainerPic ; 3d:615a - xor a - ld [wEnemyMonSpecies2], a - ld [$ffe1], a - dec a - ld [wAICount], a - coord hl, 12, 0 - predef CopyUncompressedPicToTilemap - ld a, $ff - ld [wEnemyMonPartyPos], a - ld a, $2 - ld [wIsInBattle], a - - ; Is this a major story battle? - ld a,[wLoneAttackNo] - and a - jp z,InitBattle_Common - callabd_ModifyPikachuHappiness PIKAHAPPY_GYMLEADER ; useless since already in bank3d - jp InitBattle_Common - -InitWildBattle: ; f607c (3d:607c) - ld a, $1 - ld [wIsInBattle], a - callab LoadEnemyMonData - callab DoBattleTransitionAndInitBattleVariables - ld a, [wCurOpponent] - cp MAROWAK - jr z, .isGhost - callab IsGhostBattle - jr nz, .isNoGhost -.isGhost - ld hl, wMonHSpriteDim - ld a, $66 - ld [hli], a ; write sprite dimensions - ld bc, GhostPic - ld a, c - ld [hli], a ; write front sprite pointer - ld [hl], b - ld hl, wEnemyMonNick ; set name to "GHOST" - ld a, "G" - ld [hli], a - ld a, "H" - ld [hli], a - ld a, "O" - ld [hli], a - ld a, "S" - ld [hli], a - ld a, "T" - ld [hli], a - ld [hl], "@" - ld a, [wcf91] - push af - ld a, MON_GHOST - ld [wcf91], a - ld de, vFrontPic - call LoadMonFrontSprite ; load ghost sprite - pop af - ld [wcf91], a - jr .spriteLoaded -.isNoGhost - ld de, vFrontPic - call LoadMonFrontSprite ; load mon sprite -.spriteLoaded - xor a - ld [wTrainerClass], a - ld [$ffe1], a - coord hl, 12, 0 - predef CopyUncompressedPicToTilemap - -; common code that executes after init battle code specific to trainer or wild battles -InitBattle_Common: ; f60eb (3d:60eb) - ld b, $0 - call RunPaletteCommand - callab SlidePlayerAndEnemySilhouettesOnScreen - xor a - ld [H_AUTOBGTRANSFERENABLED], a - ld hl, .emptyString - call PrintText - call SaveScreenTilesToBuffer1 - call ClearScreen - ld a, $98 - ld [$ffbd], a - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a - call Delay3 - ld a, $9c - ld [$ffbd], a - call LoadScreenTilesFromBuffer1 - coord hl, 9, 7 - ld bc, $50a - call ClearScreenArea - coord hl, 1, 0 - ld bc, $40a - call ClearScreenArea - call ClearSprites - ld a, [wIsInBattle] - dec a ; is it a wild battle? - ld hl, DrawEnemyHUDAndHPBar - ld b,BANK(DrawEnemyHUDAndHPBar) - call z, Bankswitch ; draw enemy HUD and HP bar if it's a wild battle - callab StartBattle - callab EndOfBattle - pop af - ld [wLetterPrintingDelayFlags], a - pop af - ld [wMapPalOffset], a - ld a, [wSavedTilesetType] - ld [hTilesetType], a - scf - ret -.emptyString - db "@" - -_LoadTrainerPic: ; f615a (3d:615a) -; wd033-wd034 contain pointer to pic - ld a, [wTrainerPicPointer] ; wd033 - ld e, a - ld a, [wTrainerPicPointer + 1] ; wd034 - ld d, a ; de contains pointer to trainer pic - ld a, [wLinkState] - and a - ld a, Bank(TrainerPics) ; this is where all the trainer pics are (not counting Red's) - jr z, .loadSprite - ld a, Bank(RedPicFront) -.loadSprite - call UncompressSpriteFromDE - ld de, vFrontPic - ld a, $77 - ld c, a - jp LoadUncompressedSpriteData - -LoadMonBackPic: ; f6178 (3d:6178) -; Assumes the monster's attributes have -; been loaded with GetMonHeader. - ld a, [wBattleMonSpecies2] - ld [wcf91], a - coord hl, 1, 5 - ld bc,$708 - call ClearScreenArea - ld hl, wMonHBackSprite - wMonHeader - call UncompressMonSprite - predef ScaleSpriteByTwo - ld de, vBackPic - call InterlaceMergeSpriteBuffers ; combine the two buffers to a single 2bpp sprite - ld hl, vSprites - ld de, vBackPic - ld c, (2*SPRITEBUFFERSIZE)/16 ; count of 16-byte chunks to be copied - ld a, [H_LOADEDROMBANK] - ld b, a - jp CopyVideoData - -Func_f61a6: ; f61a6 (3d:f61a6) - ld a, [wPredefRegisters] - ld h, a - ld a, [wPredefRegisters + 1] - ld l, a - ld a, [$ffe1] - ld [H_DOWNARROWBLINKCNT1], a - ld b, $4c - ld a, [wIsInBattle] - and a - jr z, .asm_f61ef - add b - ld [hl], a - call Delay3 - ld bc, -41 - add hl, bc - ld a, $1 - ld [wNumMovesMinusOne], a - ld bc, $303 - predef CopyDownscaledMonTiles - ld c, $4 - call DelayFrames - ld bc, -41 - add hl, bc - xor a - ld [wNumMovesMinusOne], a - ld bc, $505 - predef CopyDownscaledMonTiles - ld c, $5 - call DelayFrames - ld bc, -41 - jr .asm_f61f2 -.asm_f61ef - ld bc, -123 -.asm_f61f2 - add hl, bc - ld a, [H_DOWNARROWBLINKCNT1] - add $31 - jr CopyUncompressedPicToHL - -Func_f61f9: ; f61f9 (3d:61f9) - ld a, [wPredefRegisters] - ld h, a - ld a, [wPredefRegisters + 1] - ld l, a - ld a, [$ffe1] -CopyUncompressedPicToHL: ; f6203 (3d:6203) - ld bc, $707 - ld de, $14 - push af - ld a, [W_SPRITEFLIPPED] - and a - jr nz, .asm_f6220 - pop af -.asm_f6211 - push bc - push hl -.asm_f6213 - ld [hl], a - add hl, de - inc a - dec c - jr nz, .asm_f6213 - pop hl - inc hl - pop bc - dec b - jr nz, .asm_f6211 - ret - -.asm_f6220 - push bc - ld b, $0 - dec c - add hl, bc - pop bc - pop af -.asm_f6227 - push bc - push hl -.asm_f6229 - ld [hl], a - add hl, de - inc a - dec c - jr nz, .asm_f6229 - pop hl - dec hl - pop bc - dec b - jr nz, .asm_f6227 - ret - -INCLUDE "engine/battle/init_battle_variables.asm" -INCLUDE "engine/battle/moveEffects/focus_energy_effect.asm" -INCLUDE "engine/battle/moveEffects/heal_effect.asm" -INCLUDE "engine/battle/moveEffects/transform_effect.asm" -INCLUDE "engine/battle/moveEffects/reflect_light_screen_effect.asm" -INCLUDE "engine/battle/moveEffects/mist_effect.asm" -INCLUDE "engine/battle/moveEffects/one_hit_ko_effect.asm" -INCLUDE "engine/battle/moveEffects/pay_day_effect.asm" -INCLUDE "engine/battle/moveEffects/paralyze_effect.asm" \ No newline at end of file diff --git a/engine/bank3d/link_menu.asm b/engine/bank3d/link_menu.asm deleted file mode 100644 index a7b4ea9e..00000000 --- a/engine/bank3d/link_menu.asm +++ /dev/null @@ -1,910 +0,0 @@ -Func_f531b:: ; f531b (3d:531b) - ld c,$14 - call DelayFrames - ld a,$1 - ld [wBuffer],a - xor a - ld [wUnknownSerialFlag_d499],a - coord hl, 0,0 - ld bc,$405 - call TextBoxBorder - ld de,Text_f5791 - coord hl, 1,2 - call PlaceString - coord hl, 8,0 - ld bc,$80a - call TextBoxBorder - coord hl, 10,2 - ld de,Text_f579c - call PlaceString - coord hl, 0,10 - ld bc,$612 - call TextBoxBorder - call UpdateSprites - xor a - ld [wUnusedCD37],a - ld [wd72d],a - ld [wd11e],a - ld hl,wTopMenuItemY - ld a,$2 - ld [hli],a - ld a,$9 - ld [hli],a - xor a - ld [hli],a - inc hl - ld a,$3 - ld [hli],a - ld a,$3 - ld [hli],a - xor a - ld [hl],a -.asm_f5377 - call Func_f56bd - call HandleMenuInput - and $3 - add a - add a - ld b,a - ld a,[wCurrentMenuItem] - cp $3 - jr nz,.asm_f5390 - bit 2,b - jr z,.asm_f5390 - dec a - ld b,$8 -.asm_f5390 - add b - add $c0 - ld [wLinkMenuSelectionSendBuffer],a - ld [wLinkMenuSelectionSendBuffer+1],a -.asm_f5399 - ld hl,wLinkMenuSelectionSendBuffer - ld a,[hl] - ld [hSerialSendData],a - call Serial_ExchangeByte - push af - ld hl,wLinkMenuSelectionSendBuffer - ld a,[hl] - ld [hSerialSendData],a - call Serial_ExchangeByte - pop bc - cp b - jr nz,.asm_f5399 - and $f0 - cp $c0 - jr nz,.asm_f5399 - ld a,b - and $c - jr nz,.asm_f53c4 - ld a,[wLinkMenuSelectionSendBuffer] - and $c - jr z,.asm_f5377 - jr .asm_f53df -.asm_f53c4 - ld a,[wLinkMenuSelectionSendBuffer] - and $c - jr z,.asm_f53d1 - ld a,[hSerialConnectionStatus] - cp $2 - jr z,.asm_f53df -.asm_f53d1 - ld a,$1 - ld [wd11e],a - ld a,b - ld [wLinkMenuSelectionSendBuffer],a - and $3 - ld [wCurrentMenuItem],a -.asm_f53df - call DelayFrame - call DelayFrame - ld hl,wLinkMenuSelectionSendBuffer - ld a,[hl] - ld [hSerialSendData],a - call Serial_ExchangeByte - call Serial_ExchangeByte - ld b,$14 -.loop - call DelayFrame - call Serial_SendZeroByte - dec b - jr nz,.loop - ld b,$7f - ld c,$7f - ld d,$7f - ld e,$ec - ld a,[wLinkMenuSelectionSendBuffer] - bit 3,a - jr nz,.asm_f541a - ld b,e - ld e,c - ld a,[wCurrentMenuItem] - and a - jr z,.asm_f541a - ld c,b - ld b,d - dec a - jr z,.asm_f541a - ld d,c - ld c,b -.asm_f541a - ld a,b - Coorda 9,2 - ld a,c - Coorda 9,4 - ld a,d - Coorda 9,6 - ld a,e - Coorda 9,8 - ld c,40 - call DelayFrames - ld a,[wLinkMenuSelectionSendBuffer] - bit 3,a - jr nz,asm_f547f - ld a,[wCurrentMenuItem] - cp $3 - jr z,asm_f547f - inc a - ld [wUnknownSerialFlag_d499],a - ld a,[wCurrentMenuItem] - ld hl,PointerTable_f5488 - ld c,a - ld b,$0 - add hl,bc - add hl,bc - ld a,[hli] - ld h,[hl] - ld l,a - ld de,.returnaddress - push de - jp hl -.returnaddress - ld [wLinkMenuSelectionSendBuffer],a - xor a - ld [wUnknownSerialCounter],a - ld [wUnknownSerialCounter+1],a - call Serial_SyncAndExchangeNybble - ld a,[wLinkMenuSelectionSendBuffer] - and a - jr nz,asm_f547c - ld a, [wLinkMenuSelectionReceiveBuffer] - and a - jr nz, Func_f5476 - xor a - ld [wUnknownSerialCounter],a - ld [wUnknownSerialCounter+1],a - and a - ret - -Func_f5476:: ; f5476 (3d:5476) - ld hl,ColosseumIneligibleText - call PrintText -asm_f547c:: ; f547c (3d:574c) - jp Func_f531b - -asm_f547f:: ; f547f (3d:547f) - xor a - ld [wUnknownSerialCounter],a - ld [wUnknownSerialCounter+1],a - scf - ret - -PointerTable_f5488:: ; f5488 (3d:5488) - dw PokeCup - dw PikaCup - dw PetitCup - -PokeCup:: ; f548e (3d:548e) - ld hl,wPartyCount - ld a,[hli] - cp $3 - jp nz,NotThreeMonsInParty - ld b,$3 -.loop - ld a,[hli] - cp MEW - jp z,MewInParty - dec b - jr nz,.loop - dec hl - dec hl - cp [hl] ; is third mon second mon? - jp z,DuplicateSpecies - dec hl ; wPartySpecies - cp [hl] ; is third mon first mon? - jp z,DuplicateSpecies - ld a,[hli] - cp [hl] ; is first mon second mon? - jp z,DuplicateSpecies - ld a,[wPartyMon1Level] - cp 56 - jp nc,LevelAbove55 - cp 50 - jp c,LevelUnder50 - ld b,a - ld a,[wPartyMon2Level] - cp 56 - jp nc,LevelAbove55 - cp 50 - jp c,LevelUnder50 - ld c,a - ld a,[wPartyMon3Level] - cp 56 - jp nc,LevelAbove55 - cp 50 - jp c,LevelUnder50 - add b - add c - cp 156 - jp nc,CombinedLevelsGreaterThan155 - xor a - ret - -PikaCup:: ; f54e4 (3d:54e4) - ld hl,wPartyCount - ld a,[hli] - cp $3 - jp nz,NotThreeMonsInParty - ld b,$3 -.loop - ld a,[hli] ; wPartySpecies - cp MEW - jp z,MewInParty - dec b - jr nz,.loop - dec hl - dec hl - cp [hl] ; is third mon second mon? - jp z,DuplicateSpecies - dec hl ; wPartySpecies - cp [hl] ; is third mon first mon? - jp z,DuplicateSpecies - ld a,[hli] - cp [hl] ; is first mon second mon? - jp z,DuplicateSpecies - ld a,[wPartyMon1Level] - cp 21 - jp nc,LevelAbove20 - cp 15 - jp c,LevelUnder15 - ld b,a - ld a,[wPartyMon2Level] - cp 21 - jp nc,LevelAbove20 - cp 15 - jp c,LevelUnder15 - ld c,a - ld a,[wPartyMon3Level] - cp 21 - jp nc,LevelAbove20 - cp 15 - jp c,LevelUnder15 - add b - add c - cp 51 - jp nc,CombinedLevelsAbove50 - xor a - ret - -PetitCup:: ; f553a (3d:553a) - ld hl,wPartyCount - ld a,[hli] - cp $3 - jp nz,NotThreeMonsInParty - ld b,$3 -.loop - ld a,[hli] - cp MEW - jp z,MewInParty - dec b - jr nz,.loop - dec hl - dec hl - cp [hl] ; is third mon second mon? - jp z,DuplicateSpecies - dec hl ; wPartySpecies - cp [hl] ; is third mon first mon? - jp z,DuplicateSpecies - ld a,[hli] - cp [hl] ; is first mon second mon? - jp z,DuplicateSpecies - dec hl - ld a,[hl] - ld [wcf91],a - push hl - callab Func_3b10f - pop hl - jp c,asm_f56ad - inc hl - ld a,[hl] - ld [wcf91],a - push hl - callab Func_3b10f - pop hl - jp c,asm_f56ad - inc hl - ld a,[hl] - ld [wcf91],a - push hl - callab Func_3b10f - pop hl - jp c,asm_f56ad - dec hl - dec hl - ld b,$3 -.bigloop - ld a,[hli] - push hl - push bc - push af - dec a - ld c,a - ld b,$0 - ld hl,PokedexEntryPointers - add hl,bc - add hl,bc - ld de,wcd6d - ld bc,$2 - ld a,BANK(PokedexEntryPointers) - call FarCopyData - ld hl,wcd6d - ld a,[hli] - ld h,[hl] - ld l,a - ld de,wcd6d - ld bc,$14 - ld a,BANK(PokedexEntryPointers) - call FarCopyData - ld hl,wcd6d -.loop2 - ld a,[hli] - cp "@" - jr nz,.loop2 - ld a,[hli] - cp $7 - jp nc,asm_f5689 - add a - add a - ld b,a - add a - add b - ld b,a - ld a,[hli] - add b - cp $51 - jp nc,asm_f5689 - ld a,[hli] - sub $b9 - ld a,[hl] - sbc $1 - jp nc,asm_f569b - pop af - pop bc - pop hl - dec b - jr nz,.bigloop - ld a,[wPartyMon1Level] - cp 31 - jp nc,LevelAbove30 - cp 25 - jp c,LevelUnder25 - ld b,a - ld a,[wPartyMon2Level] - cp 31 - jp nc,LevelAbove30 - cp 25 - jp c,LevelUnder25 - ld c,a - ld a,[wPartyMon3Level] - cp 31 - jp nc,LevelAbove30 - cp 25 - jp c,LevelUnder25 - add b - add c - cp 81 - jp nc,CombinedLevelsAbove80 - xor a - ret - -NotThreeMonsInParty:: ; f561d (3d:516d) - ld hl,Colosseum3MonsText - call PrintText - ld a,$1 - ret - -MewInParty:: ; f5626 (3d:f5626) - ld hl,ColosseumMewText - call PrintText - ld a,$2 - ret - -DuplicateSpecies:: ; f562f (3d:f562f) - ld hl,ColosseumDifferentMonsText - call PrintText - ld a,$3 - ret - -LevelAbove55:: ; f5638 (3d:5638) - ld hl,ColosseumMaxL55Text - call PrintText - ld a,$4 - ret - -LevelUnder50:: ; f5641 (3d:5641) - ld hl,ColosseumMinL50Text - call PrintText - ld a,$5 - ret - -CombinedLevelsGreaterThan155:: ; f5641 (3d:564a) - ld hl,ColosseumTotalL155Text - call PrintText - ld a,$6 - ret - -LevelAbove30:: ; f5653 (3d:5653) - ld hl,ColosseumMaxL30Text - call PrintText - ld a,$7 - ret - -LevelUnder25:: ; f565c (3d:565c) - ld hl,ColosseumMinL25Text - call PrintText - ld a,$8 - ret - -CombinedLevelsAbove80:: ; f5665 (3d:5665) - ld hl,ColosseumTotalL80Text - call PrintText - ld a,$9 - ret - -LevelAbove20:: ; f566e (3d:566e) - ld hl,ColosseumMaxL20Text - call PrintText - ld a,$a - ret - -LevelUnder15:: ; f5677 (3d:5677) - ld hl,ColosseumMinL15Text - call PrintText - ld a,$b - ret - -CombinedLevelsAbove50:: ; f5680 (3d:5680) - ld hl,ColosseumTotalL50Text - call PrintText - ld a,$c - ret - -asm_f5689:: ; f5689 (3d:5689) - pop af - pop bc - pop hl - ld [wd11e],a - call GetMonName - ld hl,ColosseumHeightText - call PrintText - ld a,$d - ret - -asm_f569b:: ; f569b (3d:569b) - pop af - pop bc - pop hl - ld [wd11e],a - call GetMonName - ld hl,ColosseumWeightText - call PrintText - ld a,$e - ret - -asm_f56ad:: ; f56ad (3d:56ad) - ld a,[hl] - ld [wd11e],a - call GetMonName - ld hl,ColosseumEvolvedText - call PrintText - ld a,$f - ret - -Func_f56bd:: ; f56bd (3d:56bd) - xor a - ld [H_AUTOBGTRANSFERENABLED],a - coord hl, 1,11 - ld bc,$612 - call ClearScreenArea - ld a,[wCurrentMenuItem] - cp $3 - jr nc,.asm_f56e6 - ld hl,PointerTable_f56ee - ld a,[wCurrentMenuItem] - ld c,a - ld b,$0 - add hl,bc - add hl,bc - ld a,[hli] - ld h,[hl] - ld l,a - ld d,h - ld e,l - coord hl, 1,12 - call PlaceString -.asm_f56e6 - call Delay3 - ld a,$1 - ld [H_AUTOBGTRANSFERENABLED],a - ret - -PointerTable_f56ee:: ; f56ee (3d:56ee) - dw Text_f56f4 - dw Text_f5728 - dw Text_f575b - -Text_f56f4:: ; f56f4 (3d:56f4) - db "LVs of 3:50-55" - next "Sum of LVs:155 MAX" - next "MEW can't attend.@" - -Text_f5728:: ; f5728 (3d:5728) - db "LVs of 3:15-20" - next "Sum of LVs:50 MAX" - next "MEW can't attend.@" - -Text_f575b:: ; f575b (3d:575b) - db "3 Basic .LV25-30" - next "Sum of LVs:80 MAX" - next "6′8″ and 44lb MAX@" - -Text_f5791:: ; f5791 (3d:5791) - db "View" - next "Rules@" - -Text_f579c:: ; f579c (3d:579c) - db "# Cup" - next "Pika Cup" - next "Petit Cup" - next "CANCEL@" - -Colosseum3MonsText:: ; f57bc (3d:57bc) - TX_FAR _Colosseum3MonsText ; a0a2b - db "@" - -ColosseumMewText:: ; f57c1 (3d:57c1) - TX_FAR _ColosseumMewText ; a0a46 - db "@" - -ColosseumDifferentMonsText:: ; f57c6 (3d:57c6) - TX_FAR _ColosseumDifferentMonsText ; a0a5f - db "@" - -ColosseumMaxL55Text:: ; f57cb (3d:57cb) - TX_FAR _ColosseumMaxL55Text ; a0a81 - db "@" - -ColosseumMinL50Text:: ; f57d0 (3d:57d0) - TX_FAR _ColosseumMinL50Text ; a0a9a - db "@" - -ColosseumTotalL155Text:: ; f57d5 (3d:57d5) - TX_FAR _ColosseumTotalL155Text ; a0aba - db "@" - -ColosseumMaxL30Text:: ; f57da (3d:57da) - TX_FAR _ColosseumMaxL30Text ; a0ad9 - db "@" - -ColosseumMinL25Text:: ; f57df (3d:57df) - TX_FAR _ColosseumMinL25Text ; a0af2 - db "@" - -ColosseumTotalL80Text:: ; f57e4 (3d:57e4) - TX_FAR _ColosseumTotalL80Text ; a0b12 - db "@" - -ColosseumMaxL20Text:: ; f57e9 (3d:57e9) - TX_FAR _ColosseumMaxL20Text ; a0b30 - db "@" - -ColosseumMinL15Text:: ; f57ee (3d:57ee) - TX_FAR _ColosseumMinL15Text ; a0b49 - db "@" - -ColosseumTotalL50Text:: ; f57f3 (3d:57f3) - TX_FAR _ColosseumTotalL50Text ; a0b69 - db "@" - -ColosseumHeightText:: ; f57f8 (3d:57f8) - TX_FAR _ColosseumHeightText ; a0b87 - db "@" - -ColosseumWeightText:: ; f57fd (3d:57fd) - TX_FAR _ColosseumWeightText ; a0b9f - db "@" - -ColosseumEvolvedText:: ; f5802 (3d:5802) - TX_FAR _ColosseumEvolvedText ; a0bbb - db "@" - -ColosseumIneligibleText:: ; f5807 (3d:5807) - TX_FAR _ColosseumIneligibleText ; a0bd4 - db "@" - -LinkMenu: ; f580c (3d:580c) - xor a - ld [wLetterPrintingDelayFlags], a - ld hl, wd72e - set 6, [hl] - ld hl, TextTerminator_f5a16 - call PrintText - call SaveScreenTilesToBuffer1 - ld hl, ColosseumWhereToText - call PrintText - coord hl, 5, 3 - ld bc, $80d - call TextBoxBorder - call UpdateSprites - coord hl, 7, 5 - ld de, TradeCenterText - call PlaceString - xor a - ld [wUnusedCD37], a - ld [wd72d], a - ld [wd11e], a - ld hl, wTopMenuItemY - ld a, $5 - ld [hli], a - ld a, $6 - ld [hli], a - xor a - ld [hli], a - inc hl - ld a, $3 - ld [hli], a - ld [hli], a - xor a - ld [hl], a -.waitForInputLoop - call HandleMenuInput - and A_BUTTON | B_BUTTON - add a - add a - ld b, a - ld a, [wCurrentMenuItem] - cp $3 - jr nz,.asm_f586b - bit 2,b - jr z,.asm_f586b - dec a - ld b,$8 -.asm_f586b - add b - add $d0 - ld [wLinkMenuSelectionSendBuffer], a - ld [wLinkMenuSelectionSendBuffer + 1], a -.exchangeMenuSelectionLoop - call Serial_ExchangeLinkMenuSelection - ld a, [wLinkMenuSelectionReceiveBuffer] - ld b, a - and $f0 - cp $d0 - jr z, .asm_5c7d - ld a, [wLinkMenuSelectionReceiveBuffer + 1] - ld b, a - and $f0 - cp $d0 - jr nz, .exchangeMenuSelectionLoop -.asm_5c7d - ld a, b - and $c ; did the enemy press A or B? - jr nz, .enemyPressedAOrB -; the enemy didn't press A or B - ld a, [wLinkMenuSelectionSendBuffer] - and $c ; did the player press A or B? - jr z, .waitForInputLoop ; if neither the player nor the enemy pressed A or B, try again - jr .doneChoosingMenuSelection ; if the player pressed A or B but the enemy didn't, use the player's selection -.enemyPressedAOrB - ld a, [wLinkMenuSelectionSendBuffer] - and $c ; did the player press A or B? - jr z, .useEnemyMenuSelection ; if the enemy pressed A or B but the player didn't, use the enemy's selection -; the enemy and the player both pressed A or B -; The gameboy that is clocking the connection wins. - ld a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK - jr z, .doneChoosingMenuSelection -.useEnemyMenuSelection - ld a, $1 - ld [wd11e], a - ld a, b - ld [wLinkMenuSelectionSendBuffer], a - and $3 - ld [wCurrentMenuItem], a ; wCurrentMenuItem -.doneChoosingMenuSelection - ld a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK - jr nz, .skipStartingTransfer - call DelayFrame - call DelayFrame - ld a, START_TRANSFER_INTERNAL_CLOCK - ld [rSC], a -.skipStartingTransfer - ld b, $7f - ld c, $7f - ld d, $7f - ld e, $ec - ld a, [wLinkMenuSelectionSendBuffer] - and (B_BUTTON << 2) ; was B button pressed? - jr nz, .updateCursorPosition -; A button was pressed - ld a, [wCurrentMenuItem] - cp $2 - jp z, .asm_f5963 - ld b, e - ld e, c - ld a, [wCurrentMenuItem] - and a - jr z, .updateCursorPosition - ld c, b - ld b, d - dec a - jr z, .updateCursorPosition - ld d, c - ld c, b -.updateCursorPosition - call Func_f59ec - call LoadScreenTilesFromBuffer1 - ld a, [wLinkMenuSelectionSendBuffer] - and (B_BUTTON << 2) ; was B button pressed? - jr nz, .choseCancel ; cancel if B pressed - ld a, [wCurrentMenuItem] - cp $2 - jr z, .choseCancel - xor a - ld [wWalkBikeSurfState], a ; start walking - ld a, [wCurrentMenuItem] - and a - ld a, COLOSSEUM - jr nz, .next - ld a, TRADE_CENTER -.next - ld [wd72d], a - ld hl, ColosseumPleaseWaitText - call PrintText - ld c, $32 - call DelayFrames - ld hl, wd732 - res 1, [hl] - ld a, [wAnimationID] - ld [wDestinationMap], a - callab SpecialWarpIn - ld c, $14 - call DelayFrames - xor a - ld [wMenuJoypadPollCount], a - ld [wSerialExchangeNybbleSendData], a - inc a ; LINK_STATE_IN_CABLE_CLUB - ld [wLinkState], a - ld [wEnteringCableClub], a - jpab SpecialEnterMap -.choseCancel - xor a - ld [wMenuJoypadPollCount], a - call Delay3 - callab CloseLinkConnection - ld hl, ColosseumCanceledText - call PrintText - ld hl, wd72e - res 6, [hl] - ret - -.asm_f5963 - ld a,[wd11e] - and a - jr nz,.asm_f5974 - ld b,$7f - ld c,$7f - ld d,$ec - ld e,$7f - call Func_f59ec -.asm_f5974 - xor a - ld [wBuffer], a - ld a,$ff - ld [wSerialExchangeNybbleReceiveData],a - ld a, $b - ld [wLinkMenuSelectionSendBuffer], a - ld b,$78 -.loop - ld a,[hSerialConnectionStatus] - cp $2 - call z,DelayFrame - dec b - jr z,.asm_f59b2 - call Serial_ExchangeNybble - call DelayFrame - ld a,[wSerialExchangeNybbleReceiveData] - inc a - jr z,.loop - ld b,$f -.loop2 - call DelayFrame - call Serial_ExchangeNybble - dec b - jr nz,.loop2 - ld b,$f -.loop3 - call DelayFrame - call Serial_SendZeroByte - dec b - jr nz,.loop3 - jr .asm_f59d6 - -.asm_f59b2 - xor a - ld [wUnknownSerialCounter],a - ld [wUnknownSerialCounter+1],a - ld a,[wd11e] - and a - jr z,.asm_f59cd - ld b,$7f - ld c,$7f - ld d,$7f - ld e,$ec - call Func_f59ec - jp .choseCancel - -.asm_f59cd - ld hl,ColosseumVersionText - call PrintText - jp .choseCancel - -.asm_f59d6 - ld b,$7f - ld c,$7f - ld d,$ec - ld e,$7f - call Func_f59ec - call Func_f531b - jp c,.choseCancel - ld a,$f0 - jp .next - -Func_f59ec:: ; f59ec (3d:59ec) - ld a, b - Coorda 6, 5 - ld a, c - Coorda 6, 7 - ld a, d - Coorda 6, 9 - ld a, e - Coorda 6, 11 - ld c, 40 - call DelayFrames - ret - -ColosseumWhereToText: ; f5a02 (3d:5a02) - TX_FAR _ColosseumWhereToText - db "@" - -ColosseumPleaseWaitText: ; f5a07 (3d:5a07) - TX_FAR _ColosseumPleaseWaitText - db "@" - -ColosseumCanceledText: ; f5a0c (3d:5a0c) - TX_FAR _ColosseumCanceledText - db "@" - -ColosseumVersionText: ; f5a11 (3d:5a11) - TX_FAR _ColosseumVersionText ; 28:4c47 - db "@" - -TextTerminator_f5a16: ; f5a16 (3d:5a16) - db "@" - -TradeCenterText: ; f5a17 (3d:5a17) - db "TRADE CENTER" - next "COLOSSEUM" - next "COLOSSEUM2" - next "CANCEL@" \ No newline at end of file diff --git a/engine/bank3d/main.asm b/engine/bank3d/main.asm deleted file mode 100644 index cc78a114..00000000 --- a/engine/bank3d/main.asm +++ /dev/null @@ -1,693 +0,0 @@ -INCLUDE "engine/battle/common_text.asm" -INCLUDE "engine/battle/link_battle_versus_text.asm" -INCLUDE "engine/battle/unused_stats_functions.asm" -INCLUDE "engine/battle/scroll_draw_trainer_pic.asm" - -Func_f429f:: ; f429f (3d:429f) - coord hl, 0,5 - ld c,$0 -.asm_f42a4 - inc c - ld a,c - cp $9 - ret z - ld d,$5b - push bc - push hl -.asm_f42ad - call Func_f42c2 - dec hl - ld a,d - sub $7 - ld d,a - dec c - jr nz,.asm_f42ad - ld c,$2 - call DelayFrames - pop hl - pop bc - inc hl - jr .asm_f42a4 - -Func_f42c2:: ; f42c2 (3d:f42c2) - push hl - push de - push bc - ld e,$7 -.loop - ld a,d - cp $31 - jr nc,.asm_f42ce - ld a,$7f -.asm_f42ce - ld [hl],a - ld bc,$14 - add hl,bc - inc d - dec e - jr nz,.loop - pop bc - pop de - pop hl - ret - -INCLUDE "engine/battle/decrement_pp.asm" - -ModifyPikachuHappiness:: ; f430a (3d:430a) - ld a, d - cp PIKAHAPPY_GYMLEADER - jr z, .checkanywhereinparty - cp PIKAHAPPY_WALKING - jr z, .checkanywhereinparty - push de - callab IsThisPartymonStarterPikachu_Party - pop de - ret nc - jr .proceed - -.checkanywhereinparty - push de - callab IsStarterPikachuInOurParty - pop de - ret nc - -.proceed - push de - ; Divide [wPikachuHappiness] by 100. Hold the integer part in e. - ld e, $0 - ld a, [wPikachuHappiness] - cp 100 - jr c, .wPikachuHappiness_div_100 - inc e - cp 200 - jr c, .wPikachuHappiness_div_100 - inc e -.wPikachuHappiness_div_100 - ; Get the (d, e) entry from .HappinessChangeTable. - ld c, d - dec c - ld b, $0 - ld hl, .HappinessChangeTable - add hl, bc - add hl, bc - add hl, bc - ld d, $0 - add hl, de - ld a, [hl] - ; If [hl] is positive, take min(0xff, [hl] + [wPikachuHappiness]). - ; If [hl] is negative, take max(0x00, [hl] + [wPikachuHappiness]). - ; Inexplicably, we're using 100 as the threshold for comparison. - cp 100 - ld a, [wPikachuHappiness] - jr nc, .negative - add [hl] - jr nc, .okay - ld a, -1 - jr .okay - -.negative - add [hl] - jr c, .okay - xor a -.okay - ld [wPikachuHappiness], a - - ; Restore d and get the d'th entry in .Moods. - pop de - dec d - ld hl, .Moods - ld e, d - ld d, $0 - add hl, de - ld a, [hl] - ld b, a - ; Modify Pikachu's mood - cp $80 - jr z, .done - ld a, [wPikachuMood] - jr c, .decreased - cp b - jr nc, .done - ld a, [wd49c] - and a - jr nz, .done - jr .update_mood - -.decreased - cp b - jr c, .done -.update_mood - ld a, b - ld [wPikachuMood], a -.done - ret - -.HappinessChangeTable: ; f4385 (3d:4385) - ; Increase - db 5, 3, 2 ; Gained a level - db 5, 3, 2 ; HP restore - db 1, 1, 0 ; Used X item - db 3, 2, 1 ; Challenged Gym Leader - db 1, 1, 0 ; Teach TM/HM - db 2, 1, 1 ; Walking around - ; Decrease - db -3, -3, -5 ; Deposited - db -1, -1, -1 ; Fainted in battle - db -5, -5, -10 ; Fainted due to Poison outside of battle - db -5, -5, -10 ; Unknown (d = 10) - db -10, -10, -20 ; Unknown (d = 11) - -.Moods: ; f43a6 (3d:43a6) - ; Increase - db $8a ; Gained a level - db $83 ; HP restore - db $80 ; Teach TM/HM - db $80 ; Challenged Gym Leader - db $94 ; Unknown (d = 5) - db $80 ; Unknown (d = 6) - ; Decrease - db $62 ; Deposited - db $6c ; Fainted - db $62 ; Unknown (d = 9) - db $6c ; Unknown (d = 10) - db $00 ; Unknown (d = 11) - -; f43b1 (3d:43b1) -RedPicBack:: INCBIN "pic/trainer/redb.pic" -OldManPic:: INCBIN "pic/trainer/oldman.pic" -OakPicBack:: INCBIN "pic/ytrainer/prof.oakb.pic" - -;SECTION "bank3d Yellow Intro",ROMX[$453f],BANK[$3D] - -Func_f453f:: ; f453f (3d:453f) - ld hl,PokemonLogoGraphics - ld de,vChars2 - ld bc,$730 - ld a,BANK(PokemonLogoGraphics) ; redundant because this function is in bank3d - call FarCopyData - ld hl,YellowLogoGraphics+$230 - ld de,vChars0+$fd0 - ld bc,$30 - ld a,BANK(YellowLogoGraphics) - call FarCopyData - ld hl,YellowLogoGraphics+$260 - ld de,vChars1 - ld bc,$400 - ld a,BANK(YellowLogoGraphics) - call FarCopyData - ld hl,YellowLogoGraphics+$660 - ld de,vChars0+$f00 - ld bc,$c0 - ld a,BANK(YellowLogoGraphics) - call FarCopyData - ret - -Func_f4578:: ; f4578 (3d:4578) - coord hl, 2,1 - ld de,Pointer_f45f9 - ld bc,7 << 8 | 16 ; 16x7 (xy) - call CopyScreenArea - ret - -Func_f4585:: ; f4585 (3d:4585) - coord hl, 6,4 - ld de,Pointer_f4673 - ld bc,4 << 8 | 7 ; 7x4 (xy) - call CopyScreenArea - coord hl, 9,8 - ld [hl],$64 - inc hl - ld [hl],$65 - ret - -Func_f459a:: ; f459a (3d:459a) - coord hl, 4,8 - ld de,Pointer_f468f - ld bc,9 << 8 | 12 ; 12x9 (xy) - call CopyScreenArea - coord hl, 16,10 - ld [hl],$96 - coord hl, 16,11 - ld [hl],$9d - coord hl, 16,12 - ld [hl],$a7 - coord hl, 16,13 - ld [hl],$b1 - ld hl,Pointer_f45c7 - ld de,wOAMBuffer - ld bc,$20 - call CopyData - ret - -Pointer_f45c7: ; f45c7 (3d:45c7) - db $60,$40,$f1,$22 - db $60,$48,$f0,$22 - db $68,$40,$f3,$22 - db $68,$48,$f2,$22 - db $60,$60,$f0,$02 - db $60,$68,$f1,$02 - db $68,$60,$f2,$02 - db $68,$68,$f3,$02 - -CopyScreenArea:: ; f45e7 (3d:45e7) -; copy cxb (xy) screen area from de to hl - push bc - push hl -.loop - ld a,[de] - inc de - ld [hli],a - dec c - jr nz,.loop - pop hl - ld bc,$14 - add hl,bc - pop bc - dec b - jr nz,CopyScreenArea - ret - -Pointer_f45f9: ; f45f9 (3d:45f9) -; 16x7 (xy) - db $f4,$f4,$f4,$f4,$f4,$f4,$49,$f4,$72,$30,$f4,$f4,$f4,$f4,$f4,$f4 - db $fd,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0a,$0b,$f4,$0d,$0e,$0f - db $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f - db $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f - db $f4,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f - db $f4,$41,$42,$43,$44,$45,$46,$47,$48,$f4,$4a,$4b,$4c,$4d,$4e,$4f - db $f4,$6a,$6b,$6c,$6d,$f4,$f4,$f4,$f4,$f4,$f4,$6e,$6f,$70,$71,$f4 - -Pointer_f4669:: ; f4669 (3d:4669) - db $47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f,$5f - -Pointer_f4673:: ; f4673 (3d:4673) -; 7x4 (xy) - db $24,$25,$66,$67,$68,$69,$2a - db $50,$51,$52,$53,$54,$55,$56 - db $57,$58,$59,$5a,$5b,$5c,$5d - db $6d,$5e,$5f,$60,$61,$62,$63 - -Pointer_f468f:: ; f468f (3d:468f) -; 12x9 (xy) - db $80,$81,$82,$83,$00,$00,$00,$00,$84,$85,$86,$87 - db $88,$89,$8a,$8b,$8c,$8d,$8d,$8e,$8f,$8a,$90,$91 - db $00,$92,$93,$8a,$8a,$8a,$8a,$8a,$8a,$94,$95,$00 - db $00,$00,$97,$8a,$8a,$98,$99,$8a,$8a,$9a,$9b,$9c - db $00,$00,$9e,$9f,$a0,$a1,$a2,$a3,$a4,$a5,$a6,$8a - db $00,$a8,$a9,$aa,$8a,$ab,$ac,$8a,$ad,$ae,$af,$b0 - db $00,$b2,$b3,$b4,$8a,$8a,$8a,$8a,$b5,$b6,$b7,$b8 - db $00,$b9,$ba,$8a,$8a,$8a,$8a,$8a,$8a,$bb,$bc,$00 - db $00,$00,$bd,$8a,$8a,$8a,$8a,$8a,$8a,$be,$bf,$00 - -; f46f9 (3d:46f9) -PokemonLogoGraphics: INCBIN "gfx/pokemon_logo.2bpp" -YellowLogoGraphics: INCBIN "gfx/yellow_titlescreen.2bpp" - -INCLUDE "engine/bank3d/link_menu.asm" - -HandleMenuInputDouble:: ; f5a40 (3d:5a40) - xor a - ld [wPartyMenuAnimMonEnabled],a - -HandleMenuInputPokemonSelectionDouble:: ; f5a44 (3d:5a44) - ld a,[H_DOWNARROWBLINKCNT1] - push af - ld a,[H_DOWNARROWBLINKCNT2] - push af ; save existing values on stack - xor a - ld [H_DOWNARROWBLINKCNT1],a ; blinking down arrow timing value 1 - ld a,$06 - ld [H_DOWNARROWBLINKCNT2],a ; blinking down arrow timing value 2 -.loop1 - xor a - ld [wAnimCounter],a ; counter for pokemon shaking animation - call Func_f5ab0 - call JoypadLowSensitivity - ld a,[hJoy5] - and a ; was a key pressed? - jr nz,.keyPressed - pop af - ld [H_DOWNARROWBLINKCNT2],a - pop af - ld [H_DOWNARROWBLINKCNT1],a ; restore previous values - xor a - ld [wMenuWrappingEnabled],a ; disable menu wrapping - ret -.keyPressed - xor a - ld [wCheckFor180DegreeTurn],a - ld a,[hJoy5] - ld b,a - bit 6,a ; pressed Up key? - jr z,.checkIfDownPressed -.upPressed - ld a,[wCurrentMenuItem] ; selected menu item - and a ; already at the top of the menu? - jr z,.checkOtherKeys -.notAtTop - dec a - ld [wCurrentMenuItem],a ; move selected menu item up one space - jr .checkOtherKeys -.checkIfDownPressed - bit 7,a - jr z,.checkOtherKeys -.downPressed - ld a,[wCurrentMenuItem] - inc a - ld c,a - ld a,[wMaxMenuItem] - cp c - jr c,.checkOtherKeys - ld a,c - ld [wCurrentMenuItem],a -.checkOtherKeys - ld a,[wMenuWatchedKeys] - and b ; does the menu care about any of the pressed keys? - jp z,.loop1 -.checkIfAButtonOrBButtonPressed - ld a,[hJoy5] - and A_BUTTON | B_BUTTON - jr z,.skipPlayingSound -.AButtonOrBButtonPressed - ld a, $90 ; (SFX_02_40 - SFX_Headers_02) / 3 - call PlaySound ; play sound -.skipPlayingSound - pop af - ld [H_DOWNARROWBLINKCNT2],a - pop af - ld [H_DOWNARROWBLINKCNT1],a ; restore previous values - ld a,[hJoy5] - ret - -Func_f5ab0:: ; f5ab0 (3d:5ab0) - ld a,[wTopMenuItemY] - and a - jr z,.asm_f5ac0 - coord hl, 0,0 - ld bc,$14 -.loop - add hl,bc - dec a - jr nz,.loop -.asm_f5ac0 - ld a,[wTopMenuItemX] - ld b,$0 - ld c,a - add hl,bc - push hl - ld a,[wLastMenuItem] - and a - jr z,.asm_f5ad5 - ld bc,$28 -.loop2 - add hl,bc - dec a - jr nz,.loop2 -.asm_f5ad5 - ld a,[hl] - cp "▶" - jr nz,.asm_f5ade - ld a,[wTileBehindCursor] - ld [hl],a -.asm_f5ade - pop hl - ld a,[wCurrentMenuItem] - and a - jr z,.asm_f5aec - ld bc,$28 -.loop3 - add hl,bc - dec a - jr nz,.loop3 -.asm_f5aec - ld a,[hl] - cp "▶" - jr z,.asm_f5af4 - ld [wTileBehindCursor],a -.asm_f5af4 - ld a,"▶" - ld [hl],a - ld a,l - ld [wMenuCursorLocation],a - ld a,h - ld [wMenuCursorLocation+1],a - ld a,[wCurrentMenuItem] - ld [wLastMenuItem],a - ret - -Func_f5b06:: ; f5b06 (3d:5b06) - ld hl,wd728 - set 0,[hl] - ld hl,Text_f5b17 - call PrintText - ld hl,Text_f5b28 - jp PrintText - -Text_f5b17:: ; f5b17 (3d:5b17) - TX_FAR _UsedStrengthText ; 2d:417e - db $08 ; asm - ld a,[wcf91] - call PlayCry - call Delay3 - jp TextScriptEnd - -Text_f5b28:: ; f5b28 (3d:5b28) - TX_FAR _CanMoveBouldersText ; 2d:4193 - db "@" - -CheckForForcedBikeSurf:: ; f5b2d (3d:5b2d) - ld hl,wd728 - set 1,[hl] - ld a,[wd732] - bit 5,a - jr nz,.asm_f5b59 - ld a,[wCurMap] - cp SEAFOAM_ISLANDS_5 - ret nz - CheckBothEventsSet EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM4_BOULDER2_DOWN_HOLE - ret z - ld hl,CoordsData_f5b64 - call ArePlayerCoordsInArray - ret nc - ld hl,wd728 - res 1,[hl] - ld hl,CurrentTooFastText - jp PrintText -.asm_f5b59 - ld hl,wd728 - res 1,[hl] - ld hl,CyclingIsFunText - jp PrintText - -CoordsData_f5b64:: ; f5b64 (3d:5b64) - db 11,07 - db $ff - -CurrentTooFastText:: ; f5b67 (3d:5b67) - TX_FAR _CurrentTooFastText ; 2d:41ab - db "@" - -CyclingIsFunText:: ; f5b6c (3d:5b6c) - TX_FAR _CyclingIsFunText ; 2d:41ca - db "@" - -AddItemToInventory_:: ; f5b70 (3d:5b70) - ld a,[wItemQuantity] ; a = item quantity - push af - push bc - push de - push hl - push hl - ld d,50 ; PC box can hold 50 items - ld a,wNumBagItems & $FF - cp l - jr nz,.checkIfInventoryFull - ld a,wNumBagItems >> 8 - cp h - jr nz,.checkIfInventoryFull -; if the destination is the bag - ld d,20 ; bag can hold 20 items -.checkIfInventoryFull - ld a,[hl] - sub d - ld d,a - ld a,[hli] - and a - jr z,.addNewItem -.notAtEndOfInventory - ld a,[hli] - ld b,a ; b = ID of current item in table - ld a,[wcf91] ; a = ID of item being added - cp b ; does the current item in the table match the item being added? - jp z,.increaseItemQuantity ; if so, increase the item's quantity - inc hl -.loop - ld a,[hl] - cp a,$ff ; is it the end of the table? - jr nz, .notAtEndOfInventory -.addNewItem ; add an item not yet in the inventory - pop hl - ld a,d - and a ; is there room for a new item slot? - jr z,.done -; if there is room - inc [hl] ; increment the number of items in the inventory - ld a,[hl] ; the number of items will be the index of the new item - add a - dec a - ld c,a - ld b,0 - add hl,bc ; hl = address to store the item - ld a,[wcf91] - ld [hli],a ; store item ID - ld a,[wItemQuantity] - ld [hli],a ; store item quantity - ld [hl],$ff ; store terminator - jp .success -.increaseItemQuantity ; increase the quantity of an item already in the inventory - ld a,[wItemQuantity] - ld b,a ; b = quantity to add - ld a,[hl] ; a = existing item quantity - add b ; a = new item quantity - cp a,100 - jp c,.storeNewQuantity ; if the new quantity is less than 100, store it -; if the new quantity is greater than or equal to 100, -; try to max out the current slot and add the rest in a new slot - sub a,99 - ld [wItemQuantity],a ; a = amount left over (to put in the new slot) - ld a,d - and a ; is there room for a new item slot? - jr z,.increaseItemQuantityFailed -; if so, store 99 in the current slot and store the rest in a new slot - ld a,99 - ld [hli],a - jp .loop -.increaseItemQuantityFailed - pop hl - and a - jr .done -.storeNewQuantity - ld [hl],a - pop hl -.success - scf -.done - pop hl - pop de - pop bc - pop bc - ld a,b - ld [wItemQuantity],a ; restore the initial value from when the function was called - ret - -; function to remove an item (in varying quantities) from the player's bag or PC box -; INPUT: -; hl = address of inventory (either wNumBagItems or wNumBoxItems) -; [wWhichPokemon] = index (within the inventory) of the item to remove -; [wItemQuantity] = quantity to remove -RemoveItemFromInventory_: ; f5be1 (3d:5be1) - push hl - inc hl - ld a,[wWhichPokemon] ; index (within the inventory) of the item being removed - add a - add l - ld l,a - jr nc,.noCarry - inc h -.noCarry - inc hl - ld a,[wItemQuantity] ; quantity being removed - ld e,a - ld a,[hl] ; a = current quantity - sub e - ld [hld],a ; store new quantity - ld [wMaxItemQuantity],a - and a - jr nz,.skipMovingUpSlots -; if the remaining quantity is 0, -; remove the emptied item slot and move up all the following item slots -.moveSlotsUp - ld e,l - ld d,h - inc de - inc de ; de = address of the slot following the emptied one -.loop ; loop to move up the following slots - ld a,[de] - inc de - ld [hli],a - cp a,$ff - jr nz,.loop -; update menu info - xor a - ld [wListScrollOffset],a - ld [wCurrentMenuItem],a - ld [wBagSavedMenuItem],a - ld [wSavedListScrollOffset],a - pop hl - ld a,[hl] ; a = number of items in inventory - dec a ; decrement the number of items - ld [hl],a ; store new number of items - ld [wListCount],a - cp a,2 - jr c,.done - ld [wMaxMenuItem],a - jr .done -.skipMovingUpSlots - pop hl -.done - ret - -TrainerInfoTextBoxTileGraphics: INCBIN "gfx/trainer_info.2bpp" -TrainerInfoTextBoxTileGraphicsEnd: -BlankLeaderNames: INCBIN "gfx/blank_leader_names.2bpp" -CircleTile: INCBIN "gfx/circle_tile.2bpp" -BadgeNumbersTileGraphics: INCBIN "gfx/badge_numbers.2bpp" - -ReadSuperRodData:: ; f5ea4 (3d:5ea4) - ld a,[wCurMap] - ld c,a - ld hl,FishingSlots -.loop - ld a,[hli] - cp $ff - jr z,.notfound - cp c - jr z,.found - ld de,$8 - add hl,de - jr .loop -.found - call GenerateRandomFishingEncounter - ret -.notfound - ld de,$0 - ret - -GenerateRandomFishingEncounter: ; f5ec1 (3d:5ec1) - call Random - cp $66 - jr c,.asm_f5ed6 - inc hl - inc hl - cp $b2 - jr c,.asm_f5ed6 - inc hl - inc hl - cp $e5 - jr c,.asm_f5ed6 - inc hl - inc hl -.asm_f5ed6 - ld e,[hl] - inc hl - ld d,[hl] - ret - -INCLUDE "data/super_rod.asm" -INCLUDE "engine/bank3d/bank3d_battle.asm" -INCLUDE "engine/items/tm_prices.asm" -INCLUDE "engine/multiply_divide.asm" -INCLUDE "engine/give_pokemon.asm" -INCLUDE "engine/battle/get_trainer_name.asm" -INCLUDE "engine/bank3d/random.asm" -INCLUDE "engine/predefs.asm" \ No newline at end of file diff --git a/engine/bank3d/random.asm b/engine/bank3d/random.asm deleted file mode 100644 index ddf042df..00000000 --- a/engine/bank3d/random.asm +++ /dev/null @@ -1,13 +0,0 @@ -Random_:: ; f67dc (3d:67dc) -; Generate a random 16-bit value. - ld a, [rDIV] - ld b, a - ld a, [hRandomAdd] - adc b - ld [hRandomAdd], a - ld a, [rDIV] - ld b, a - ld a, [hRandomSub] - sbc b - ld [hRandomSub], a - ret diff --git a/engine/bank3f.asm b/engine/bank3f.asm new file mode 100644 index 00000000..1bc32483 --- /dev/null +++ b/engine/bank3f.asm @@ -0,0 +1,1750 @@ +INCLUDE "data/map_songs.asm" +INCLUDE "data/map_header_pointers.asm" +INCLUDE "data/map_header_banks.asm" + +Func_fc4dd:: ; fc4dd (3f:44dd) +; possibly to test if pika should be out? + ld a,[wd430] + bit 5,a + jr nz,.asm_fc4f8 ; 3f:44f8 + ld a,[wd430] + bit 7,a + jr nz,.asm_fc4f8 + call IsStarterPikachuInOurParty + jr nc,.asm_fc4f8 + ld a,[wWalkBikeSurfState] + and a + jr nz,.asm_fc4f8 + scf + ret +.asm_fc4f8 + and a + ret + +Func_fc4fa:: ; fc4fa (3f:44fa) + ld hl,wd430 + bit 4,[hl] + res 4,[hl] + jr nz,.asm_fc515 + call Func_1542 + call Func_fc523 + ld a,$ff + ld [wSpriteStateData1 + $f2],a + call Func_fcb84 + call Func_fc5bc + ret + +.asm_fc515 + call Func_fc53f + xor a + ld [wd431],a + ld a,[wSpriteStateData1 + $9] + ld [wSpriteStateData1 + $f9],a + ret + +Func_fc523:: ; fc523 (3f:4523) + ld hl,wSpriteStateData1 + $f0 + call Func_fc52c + ld hl,wSpriteStateData2 + $f0 +Func_fc52c:: ; fc52c (3f:4523) + ld bc,$10 + xor a + call FillMemory + ret + +Func_fc534:: ; fc534 (3f:4534) + call Func_fc53f + call Func_fc5bc + xor a + ld [wd431],a + ret + +Func_fc53f:: ; fc53f (3f:453f) + ld bc,wSpriteStateData1 + $f0 + ld a,[wYCoord] + add $4 + ld e,a + ld a,[wXCoord] + add $4 + ld d,a + ld a,[wd431] + and a + jr z,.asm_fc5aa + cp $1 + jr z,.asm_fc59e + cp $2 + jr z,.asm_fc584 + cp $3 + jr z,.asm_fc5aa + cp $4 + jr z,.asm_fc5a4 + cp $5 + jr z,.asm_fc5a7 + cp $6 + jr z,.asm_fc5a1 + cp $7 + jr z,.asm_fc572 + jr .asm_fc59e + +.asm_fc572 + ld a,[wSpriteStateData1 + $9] + and a ; SPRITE_FACING_DOWN + jr z,.asm_fc5a4 + cp SPRITE_FACING_UP + jr z,.asm_fc5a7 + cp SPRITE_FACING_LEFT + jr z,.asm_fc5a1 + cp SPRITE_FACING_RIGHT + jr z,.asm_fc59e +.asm_fc584 + ld a,[wSpriteStateData1 + $9] + and a + jr nz,.asm_fc58d + dec e + jr .asm_fc5aa +.asm_fc58d + cp SPRITE_FACING_UP + jr nz,.asm_fc594 + inc e + jr .asm_fc5aa +.asm_fc594 + cp SPRITE_FACING_LEFT + jr nz,.asm_fc59b + inc d + jr .asm_fc5aa +.asm_fc59b + dec d + jr .asm_fc5aa +.asm_fc59e + inc d + jr .asm_fc5aa +.asm_fc5a1 + dec d + jr .asm_fc5aa +.asm_fc5a4 + inc e + jr .asm_fc5aa +.asm_fc5a7 + dec e + jr .asm_fc5aa ; useless jr +.asm_fc5aa + ld hl,$104 + add hl,bc + ld [hl],e + inc hl + ld [hl],d + inc hl +Func_fc4b2:: ; fc4b2 (3f:44b2) + ld [hl],$fe + push hl + ld hl,wd472 + set 5,[hl] + pop hl + ret + +Func_fc5bc:: ; fc5bc (3f:45bc) + ld a,$49 + ld [wSpriteStateData1 + $f0],a + ld a,$ff + ld [wSpriteStateData1 + $f2],a + ld a,[wd431] + and a + jr z,.asm_fc5e4 + cp $1 + jr z,.asm_fc5e4 + cp $3 + jr z,.asm_fc5eb + cp $4 + jr z,.asm_fc5e4 + cp $6 + jr z,.asm_fc5e4 + cp $7 + jr z,.asm_fc5f1 + call Func_fccb2 + ret + +.asm_fc5e4 + ld a,[wSpriteStateData1 + $9] + ld [wSpriteStateData1 + $f9],a + ret +.asm_fc5eb + ld a,$0 + ld [wSpriteStateData1 + $f9],a + ret +.asm_fc5f1 + ld a,[wSpriteStateData1 + $9] + xor $4 + ld [wSpriteStateData1 + $f9],a + ret + +Func_fc5fa:: ; fc5fa (3f:45fa) + ld a,[wCurMap] + cp OAKS_LAB + jr z,.asm_fc63d + cp ROUTE_22_GATE + jr z,.asm_fc62d + cp MT_MOON_2 + jr z,.asm_fc635 + cp ROCK_TUNNEL_1 + jr z,.asm_fc645 + ld a,[wCurMap] + ld hl,Pointer_fc64b + call Func_1568 ; similar to IsInArray, but not the same + jr c,.asm_fc639 + ld a,[wCurMap] + ld hl,Pointer_fc653 + call Func_1568 + jr nc,.asm_fc641 + ld a,[wSpriteStateData1 + $9] + and a + jr nz,.asm_fc641 + ld a,$3 + jr .asm_fc647 + +.asm_fc62d + ld a,[wSpriteStateData1 + $9] + and a + jr z,.asm_fc645 + jr .asm_fc641 +.asm_fc635 + ld a,$3 + jr .asm_fc647 +.asm_fc639 + ld a,$4 + jr .asm_fc647 +.asm_fc63d + ld a,$6 + jr .asm_fc647 +.asm_fc641 + ld a,$1 + jr .asm_fc647 +.asm_fc645 + ld a,$3 +.asm_fc647 + ld [wd431],a + ret + +Pointer_fc64b:: ; fc64b (3f:464b) + db $c2,$4c,$4f,$ba,$be,$b8,$54,$ff + +Pointer_fc653:: ; fc653 (3f:4653) + db $2f,$e6,$3e,$5e,$80,$31,$a4,$ff + +Func_fc65b:: ; fc65b (3f:465b) + ld a,[wCurMap] + cp VIRIDIAN_FOREST_EXIT + jr z,.asm_fc673 + cp VIRIDIAN_FOREST_ENTRANCE + jr z,.asm_fc67c + ld a,[wCurMap] + ld hl,Pointer_fc68e + call Func_1568 + jr c,.asm_fc688 + jr .asm_fc684 +.asm_fc673 + ld a,[wSpriteStateData1 + $9] + cp SPRITE_FACING_UP + jr z,.asm_fc688 + jr .asm_fc684 +.asm_fc67c + ld a,[wSpriteStateData1 + $9] + and a ; SPRITE_FACING_DOWN + jr z,.asm_fc684 + jr .asm_fc688 +.asm_fc684 + ld a,$0 + jr .asm_fc68a +.asm_fc688 + ld a,$1 +.asm_fc68a + ld [wd431],a + ret + +Pointer_fc68e:: ; fc68e (3f:468e) + db $33,$dd,$df,$e0,$e1,$de,$ec,$7f,$a8,$a9,$aa,$ff + +Func_fc69a:: ; fc69a (3f:469a) + ld a,[wCurMap] + cp ROUTE_22_GATE + jr z,.asm_fc6a7 + cp ROUTE_2_GATE + jr z,.asm_fc6b0 + jr .asm_fc6bd +.asm_fc6a7 + ld a,[wSpriteStateData1 + $9] + cp SPRITE_FACING_UP + jr z,.asm_fc6b9 + jr .asm_fc6bd +.asm_fc6b0 + ld a,[wSpriteStateData1 + $9] + cp SPRITE_FACING_UP + jr z,.asm_fc6b9 + jr .asm_fc6bd +.asm_fc6b9 + ld a,$1 + jr .asm_fc6c1 +.asm_fc6bd + ld a,$3 + jr .asm_fc6c1 +.asm_fc6c1 + ld [wd431],a + ret + +Func_fc6c5:: ; fc6c5 (3f:46c5) + push hl + ld hl,wd430 + set 2,[hl] + pop hl + ret + +Func_fc6cd:: ; fc6cd (3f:46cd) + push hl + ld hl,wd430 + res 2,[hl] + pop hl + ret + +Func_fc6d5:: ; fc6d5 (3f:46d5) + call Func_fc6cd + call Func_fc727 + ret nc + push bc + call Func_fcd25 + pop bc + ret c + ld bc,wSpriteStateData1 + $f0 + ld hl,$1 + add hl,bc + bit 7,[hl] + jp nz,asm_fc745 + ld a,[wFontLoaded] + bit 0,a + jp nz,asm_fc76a + call Func_154a + jp nz,asm_fc76a + ld a,[hl] + and $7f + cp $a + jr c,.asm_fc704 + xor a +.asm_fc704 + add a + ld e,a + ld d,0 + ld hl,PointerTable_fc710 + add hl,de + ld a,[hli] + ld h,[hl] + ld l,a + jp hl + +PointerTable_fc710: ; fc710 (3f:4710) + dw Func_fc793 + dw Func_fc7aa + dw Func_fc803 + dw asm_fc9c3 + dw asm_fca1c + dw asm_fc9ee + dw asm_fc87f + dw asm_fc904 + dw asm_fc937 + dw asm_fc969 + dw Func_fc726 + +Func_fc726: ; fc726 (3f:4726) + ret + +Func_fc727: ; fc727 (3f:4727) + call Func_fc4dd + jr nc,.asm_fc73b + ld a,[wSpriteStateData1 + $f1] + and a + jr nz,.asm_fc739 + push bc + push hl + call Func_fc534 + pop hl + pop bc +.asm_fc739 + scf + ret +.asm_fc73b + ld hl,wSpriteStateData1 + $f2 + ld [hl],$ff + dec hl + ld [hl],$0 + xor a + ret +asm_fc745: ; fc745 (3f:4745) + ld hl,$1 + add hl,bc + res 7,[hl] + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],a + call Func_154a + jr nz,.asm_fc75f + ld a,[wSpriteStateData1 + $9] + xor $4 + ld hl,$9 + add hl,bc + ld [hl],a +.asm_fc75f + xor a + ld hl,$7 + add hl,bc + ld [hli],a + ld [hl],a + call Func_fca99 + ret +asm_fc76a: ; fc76a (3f:476a) + xor a + ld hl,$7 + add hl,bc + ld [hli],a + ld [hl],a + call Func_fca99 + call Func_fc82e + jr c,.asm_fc783 + push bc + callab InitializeSpriteScreenPosition + pop bc +.asm_fc783 + ld hl,$1 + add hl,bc + ld [hl],$1 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$0 + call Func_fcba1 + ret + +Func_fc793: ; fc793 (3f:4793) + call Func_fcba1 + push bc + callab InitializeSpriteScreenPosition + pop bc + ld hl,$2 + add hl,bc + ld [hl],$ff + dec hl + ld [hl],$1 + ret + +Func_fc7aa: ; fc7aa (3f:47aa) + call Func_fcc92 + jp c,Func_fc803 + dec a + ld l,a + ld h,$0 + add hl,hl + add hl,hl + ld de,Pointer_fc7e3 + add hl,de + ld d,h + ld e,l + ld a,[de] + inc de + ld hl,$9 + add hl,bc + ld [hl],a + ld a,[de] + inc de + ld hl,$5 + add hl,bc + ld [hl],a + dec hl + dec hl + ld a,[de] + ld [hl],a + inc de + ld a,[de] + ld hl,$1 + add hl,bc + ld [hl],a + cp $4 + jp z,Func_fca0a + call Func_fcd17 + jp c,Func_fc9df + jp Func_fc9b4 + +Pointer_fc7e3: ; fc7e3 (3f:47e3) + db $0,$0 + db $1,$3 + db $4,$0 + db $ff,$3 + db $8,$ff + db $0,$3 + db $c,$1 + db $0,$3 + db $0,$0 + db $1,$4 + db $4,$0 + db $ff,$4 + db $8,$ff + db $0,$4 + db $c,$1 + db $0,$4 + +Func_fc803: ; fc803 (3f:4803) + call Func_fcae2 + ret c + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + jr nz,.asm_fc823 + push hl + call Func_fccee + pop hl + cp $5 + jr nc,Func_fc842 + ld [hl],$20 + call Random + and $c + ld hl,$9 + add hl,bc + ld [hl],a +.asm_fc823 + xor a + ld hl,$7 + add hl,bc + ld [hli],a + ld [hl],a + call Func_fca99 + ret + +Func_fc82e: ; fc82e (3f:482e) + ld a,[wWalkCounter] + and a + ret z + scf + ret + +Func_fc835: ; fc835 (3f:4835) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$10 + ld hl,$1 + add hl,bc + ld [hl],$1 + ret + +Func_fc842: ; fc842 (3f:4842) + ld hl,$0 + push af + call Random + ld a,[hRandomAdd] + and %11 + ld e,a + ld d,$0 + ld hl,PointerTable_fc85a + add hl,de + add hl,de + ld a,[hli] + ld h,[hl] + ld l,a + pop af + jp hl + +PointerTable_fc85a: ; fc85a (3f:485a) + dw Func_fc862 + dw Func_fc8f8 + dw Func_fc92b + dw Func_fc95d + +Func_fc862: ; fc862 (3f:4862) + dec a + add a + add a + and $c + ld hl,$9 + add hl,bc + ld [hl],a + ld hl,$1 + add hl,bc + ld [hl],$6 + xor a + ld [wd432],a + ld [wd433],a + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$11 +asm_fc87f: ; fc87f (3f:487f) + ld a,[wd432] + ld e,a + ld a,[wd433] + ld d,a + call Func_fc82e + jr c,Func_fc8c7 + call Func_fc6c5 + ld hl,$4 + add hl,bc + ld a,[hl] + sub e + ld e,a + inc hl + inc hl + ld a,[hl] + sub d + ld d,a + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld a,[hl] + dec a + add a + add $d6 + ld l,a + ld a,$48 + adc $0 + ld h,a + ld a,[hli] + ld [wd432],a + add e + ld e,a + ld a,[hl] + ld [wd433],a + add d + ld d,a + ld hl,$4 + add hl,bc + ld [hl],e + inc hl + inc hl + ld [hl],d + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + jp Func_fc835 + +Func_fc8c7: ; fc8c7 (3f:48c7) + ld hl,$4 + add hl,bc + ld a,[hl] + sub e + ld [hl],a + inc hl + inc hl + ld a,[hl] + sub d + ld [hl],a + jp Func_fc835 + +Pointer_fc8d6: ; fc8d6 (3f:48d6) + db $0,$0,$fe,$1,$fc + db $2,$fe,$3,$0,$4 + db $fe,$3,$fc,$2,$fe + db $1,$0,$0,$fe,$ff + db $fc,$fe,$fe,$fd,$0 + db $fc,$fe,$fd,$fc,$fe + db $fe,$ff,$00,$00 + +Func_fc8f8: ; fc8f8 (3f:48f8) + ld hl,$1 + add hl,bc + ld [hl],$7 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$30 +asm_fc904: ; fc904 (3f:4904) + call Func_fc82e + jp c,Func_fc835 + call Func_fc6c5 + ld hl,$7 + add hl,bc + ld a,[hl] + inc a + cp $8 + ld [hl],a + jr nz,.asm_fc91f + xor a + ld [hli],a + ld a,[hl] + inc a + and %11 + ld [hl],a +.asm_fc91f + call Func_fca99 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + jp Func_fc835 + +Func_fc92b: ; fc92b (3f:492b) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$20 + ld hl,$1 + add hl,bc + ld [hl],$8 +asm_fc937: ; fc937 (3f:4937) + call Func_fc82e + jp c,Func_fc835 + call Func_fc6c5 + ld hl,$7 + add hl,bc + ld a,[hl] + inc a + cp $8 + ld [hl],a + jr nz,.asm_fc951 + xor a + ld [hli],a + ld a,[hl] + xor $1 + ld [hl],a +.asm_fc951 + call Func_fca99 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + jp Func_fc835 + +Func_fc95d: ; fc95d (3f:495d) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$20 + ld hl,$1 + add hl,bc + ld [hl],$9 +asm_fc969: ; fc969 (3f:4969) + call Func_fc82e + jp c,Func_fc835 + call Func_fc6c5 + ld hl,$7 + add hl,bc + ld a,[hl] + inc a + cp $8 + ld [hl],a + jr nz,.asm_fc988 + xor a + ld [hl],a + ld hl,$9 + add hl,bc + ld a,[hl] + call Func_fc994 + ld [hl],a +.asm_fc988 + call Func_fca99 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + jp Func_fc835 + +Func_fc994: ; fc994 (3f:4994) + push hl + ld hl,Pointer_fc9ac + ld d,a +.loop + ld a,[hli] + cp d + jr nz,.loop + ld a,[hl] + pop hl + ret + +Func_fc9a0: ; fc9a0 (3f:49a0) + push hl + ld hl,Pointer_fc9ac_End + ld d,a +.loop + ld a,[hld] + cp d + jr nz,.loop + ld a,[hl] + pop hl + ret + +Pointer_fc9ac: ; fc9ac (3f:49ac) + db SPRITE_FACING_DOWN,SPRITE_FACING_LEFT,SPRITE_FACING_UP,SPRITE_FACING_RIGHT + db SPRITE_FACING_DOWN,SPRITE_FACING_LEFT,SPRITE_FACING_UP,SPRITE_FACING_RIGHT +Pointer_fc9ac_End: +Func_fc9b4: ; fc9b4 (3f:49b4) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$8 + ld hl,$1 + add hl,bc + ld [hl],$3 + call Func_fca38 +asm_fc9c3: ; fc9c3 (3f:49c3) + call Func_fca4b + call Func_fca7e + call Func_fca99 + ld hl,$100 + add hl,bc + dec [hl] + ret nz + call Func_fca75 + call Func_fccb2 + ld hl,$1 + add hl,bc + ld [hl],$1 + ret + +Func_fc9df: ; fc9df (3f:49df) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$4 + ld hl,$1 + add hl,bc + ld [hl],$5 + call Func_fca38 +asm_fc9ee: ; fc9ee (3f:49ee) + call asm_fca59 + call Func_fca7e + call Func_fca99 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + call Func_fca75 + call Func_fccb2 + ld hl,$1 + add hl,bc + ld [hl],$1 + ret + +Func_fca0a: ; fca0a (3f:4a0a) + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + ld [hl],$8 + ld hl,$1 + add hl,bc + ld [hl],$4 + call Func_fca38 + call Func_fca38 +asm_fca1c: ; fca1c (3f:4a1c) + call asm_fca59 + call Func_fca7e + call Func_fca99 + ld hl,wSpriteStateData2 - wSpriteStateData1 + add hl,bc + dec [hl] + ret nz + call Func_fca75 + call Func_fccb2 + ld hl,$1 + add hl,bc + ld [hl],$1 + ret + +Func_fca38: ; fca38 (3f:4a38) + ld hl,$3 + add hl,bc + ld e,[hl] + inc hl + inc hl + ld d,[hl] + ld hl,$104 + add hl,bc + ld a,[hl] + add e + ld [hli],a + ld a,[hl] + add d + ld [hl],a + ret + +Func_fca4b: ; fca4b (3f:4a4b) + ld a,[wWalkBikeSurfState] + cp $1 + jr nz,Func_fca68 + ld a,[wd736] + bit 6,a + jr nz,Func_fca68 +asm_fca59: ; fca59 (3f:4a59) + ld hl,$3 + add hl,bc + ld a,[hli] + add a + add a + add [hl] + ld [hli],a + ld a,[hli] + add a + add a + add [hl] + ld [hl],a + ret + +Func_fca68: ; fca68 (3f:4a68) + ld hl,$3 + add hl,bc + ld a,[hli] + add a + add [hl] + ld [hli],a + ld a,[hli] + add a + add [hl] + ld [hli],a + ret + +Func_fca75: ; fca75 (3f:4a75) + ld hl,$3 + add hl,bc + xor a + ld [hli],a + inc hl + ld [hl],a + ret + +Func_fca7e: ; fca7e (3f:4a7e) + call Func_fcdad + ld d,$2 + jr nc,.asm_fca87 + ld d,$5 +.asm_fca87 + ld hl,$7 + add hl,bc + ld a,[hl] + inc a + cp d + jr nz,.asm_fca91 + xor a +.asm_fca91 + ld [hli],a + ret nz + ld a,[hl] + inc a + and $3 + ld [hl],a + ret + +Func_fca99: ; fca99 (3f:4a99) + ld a,[wd430] + bit 3,a + jr nz,.asm_fcad1 + ld hl,$10e + add hl,bc + ld a,[hl] + dec a + swap a + ld d,a + ld a,[wd736] + bit 7,a + jr nz,.asm_fcad8 + ld hl,$9 + add hl,bc + ld a,[hl] + or d + ld d,a + ld a,[wFontLoaded] + bit 0,a + jr z,.asm_fcac4 + call Func_fcae2 + ret c + jr .asm_fcacb +.asm_fcac4 + ld hl,$8 + add hl,bc + ld a,d + or [hl] + ld d,a +.asm_fcacb + ld hl,$2 + add hl,bc + ld [hl],d + ret +.asm_fcad1 + ld hl,$2 + add hl,bc + ld [hl],$ff + ret +.asm_fcad8 + ld a,[wSpriteStateData1 + $2] + and $f + or d + ld [wSpriteStateData1 + $f2],a + ret + +Func_fcae2: ; fcae2 (3f:4ae2) + ld hl,$104 + add hl,bc + ld a,[wYCoord] + add $4 + cp [hl] + jr nz,.asm_fcaff + inc hl + ld a,[wXCoord] + add $4 + cp [hl] + jr nz,.asm_fcaff + ld hl,$2 + add hl,bc + ld [hl],$ff + scf + ret +.asm_fcaff + and a + ret + +Func_fcb01: ; fcb01 (3f:4b01) + push bc + push de + push hl + ld bc,wSpriteStateData1 + $f0 + ld a,[wXCoord] + add $4 + ld d,a + ld a,[wYCoord] + add $4 + ld e,a + ld hl,$104 + add hl,bc + ld a,[hl] + sub e + and a + jr z,.asm_fcb30 + cp $ff + jr z,.asm_fcb26 + cp $1 + jr z,.asm_fcb26 + jr .asm_fcb48 +.asm_fcb26 + ld hl,$105 + add hl,bc + ld a,[hl] + sub d + jr z,.asm_fcb43 + jr .asm_fcb48 +.asm_fcb30 + ld hl,$105 + add hl,bc + ld a,[hl] + sub d + cp $ff + jr z,.asm_fcb43 + cp $1 + jr z,.asm_fcb43 + and a + jr z,.asm_fcb43 + jr .asm_fcb48 +.asm_fcb43 + pop hl + pop de + pop bc + scf + ret +.asm_fcb48 + pop hl + pop de + pop bc + xor a + ret + +Func_fcb4d: ; fcb4d (3f:4b4d) + call Func_fcb52 + ld e,a + ret + +Func_fcb52: ; fcb52 (3f:4b52) + ld bc,wSpriteStateData1 + $f0 + ld a,[wXCoord] + add $4 + ld d,a + ld a,[wYCoord] + add $4 + ld e,a + ld hl,$104 + add hl,bc + ld a,[hl] + cp e + jr z,Func_fcb71 + jr nc,.asm_fcb6e + ld a,$4 + ret +.asm_fcb6e + ld a,$0 + ret + +Func_fcb71: ; fcb71 (3f:4b71) + ld hl,$105 + add hl,bc + ld a,[hl] + cp d + jr z,.asm_fcb81 + jr nc,.asm_fcb7e + ld a,$8 + ret +.asm_fcb7e + ld a,$c + ret +.asm_fcb81 + ld a,$ff + ret + +Func_fcb84: ; fcb84 (3f:4b84) + push bc + ld hl,wd437 + ld [hl],$ff + inc hl + ld bc,$10 + xor a + call FillMemory + pop bc + ret + +Func_fcb94: ; fcb94 (3f:4b94) + ld hl,wd437 + inc [hl] + ld e,[hl] + ld d,0 + ld hl,wd438 + add hl,de + ld [hl],a + ret + +Func_fcba1: ; fcba1 (3f:4ba1) + call Func_fcb84 + call Func_fcbac + ret c + call Func_fcb94 + ret + +Func_fcbac: ; fcbac (3f:4bac) + ld bc,wSpriteStateData1 + $f0 + ld hl,$104 + add hl,bc + ld a,[wYCoord] + add $4 + sub [hl] + jr z,.asm_fcbd7 + jr c,.asm_fcbca + call Func_fcc01 + jr c,.asm_fcbc6 + ld a,$5 + and a + ret +.asm_fcbc6 + ld a,$1 + and a + ret +.asm_fcbca + call Func_fcc01 + jr c,.asm_fcbd3 + ld a,$6 + and a + ret +.asm_fcbd3 + ld a,$2 + and a + ret +.asm_fcbd7 + ld hl,$105 + add hl,bc + ld a,[wXCoord] + add $4 + sub [hl] + jr z,.asm_fcbff + jr c,.asm_fcbf2 + call Func_fcc01 + jr c,.asm_fcbee + ld a,$8 + and a + ret +.asm_fcbee + ld a,$4 + and a + ret +.asm_fcbf2 + call Func_fcc01 + jr c,.asm_fcbfb + ld a,$7 + and a + ret +.asm_fcbfb + ld a,$3 + and a + ret +.asm_fcbff + scf + ret + +Func_fcc01: ; fcc01 (3f:4c01) + jr nc,.asm_fcc05 + cpl + inc a +.asm_fcc05 + cp $2 + ret + +Func_fcc08:: ; fcc08 (3f:4c08) + call Func_fcc23 + ret nc + ld a,[wd736] + bit 6,a + jr nz,.asm_fcc1b + call Func_fcc42 + ret c + call Func_fcb94 + ret +.asm_fcc1b + call Func_fcc64 + ret c + call Func_fcb94 + ret + +Func_fcc23: ; fcc23 (3f:4c28) + ld a,[wd430] + bit 5,a + jr nz,.asm_fcc40 + ld a,[wd430] + bit 7,a + jr nz,.asm_fcc40 + ld a,[wd472] + bit 7,a + jr z,.asm_fcc40 + ld a,[wWalkBikeSurfState] + and a + jr nz,.asm_fcc40 + scf + ret +.asm_fcc40 + and a + ret + +Func_fcc42: ; fcc42 (3f:4c42) + xor a + ld a,[wPlayerDirection] + bit 3,a + jr nz,.asm_fcc58 + bit 2,a + jr nz,.asm_fcc5b + bit 1,a + jr nz,.asm_fcc5e + bit 0,a + jr nz,.asm_fcc61 + scf + ret +.asm_fcc58 + ld a,$2 + ret +.asm_fcc5b + ld a,$1 + ret +.asm_fcc5e + ld a,$3 + ret +.asm_fcc61 + ld a,$4 + ret + +Func_fcc64: ; fcc64 (3f:4c64) + ld hl,wd430 + bit 6,[hl] + jr z,.asm_fcc6e + res 6,[hl] + ret +.asm_fcc6e + set 6,[hl] + xor a + ld a,[wPlayerDirection] + bit 3,a + jr nz,.asm_fcc86 + bit 2,a + jr nz,.asm_fcc89 + bit 1,a + jr nz,.asm_fcc8c + bit 0,a + jr nz,.asm_fcc8f + scf + ret +.asm_fcc86 + ld a,$6 + ret +.asm_fcc89 + ld a,$5 + ret +.asm_fcc8c + ld a,$7 + ret +.asm_fcc8f + ld a,$8 + ret + +Func_fcc92: ; fcc92 (3f:4c92) + ld hl,wd437 + ld a,[hl] + cp $ff + jr z,.asm_fccb0 + and a + jr z,.asm_fccb0 + dec [hl] + ld e,a + ld d,0 + ld hl,wd438 + add hl,de + inc e + ld a,$ff +.asm_fcca8 + ld d,[hl] + ldd [hl],a + ld a,d + dec e + jr nz,.asm_fcca8 + and a + ret +.asm_fccb0 + scf + ret + +Func_fccb2:: ; fccb2 (3f:4cb2) + call Func_fcd01 + and a + jr z,.asm_fccbf + dec a + and $3 + add a + add a + jr .asm_fccea +.asm_fccbf + ld a,[wYCoord] + add $4 + ld d,a + ld a,[wXCoord] + add $4 + ld e,a + ld a,[wSpriteStateData2 + $f4] + cp d + jr z,.asm_fccd9 + ld a,SPRITE_FACING_DOWN + jr c,.asm_fccea + ld a,SPRITE_FACING_UP + jr .asm_fccea +.asm_fccd9 + ld a,[wSpriteStateData2 + $f5] + cp e + jr z,.asm_fcce7 + ld a,SPRITE_FACING_RIGHT + jr c,.asm_fccea + ld a,SPRITE_FACING_LEFT + jr .asm_fccea +.asm_fcce7 + ld a,[wSpriteStateData1 + $9] +.asm_fccea + ld [wSpriteStateData1 + $f9],a + ret + +Func_fccee: ; fccee (3f:4cee) + ld hl,wd437 + ld a,[hl] + cp $ff + jr z,.asm_fccff + ld e,a + ld d,0 + ld hl,wd438 + add hl,de + ld a,[hl] + ret +.asm_fccff + xor a + ret + +Func_fcd01: ; fcd01 (3f:4d01) + ld hl,wd437 + ld a,[hl] + cp $ff + jr z,.asm_fcd15 + and a + jr z,.asm_fcd15 + ld e,a + ld d,0 + ld hl,wd438 + add hl,de + ld a,[hl] + ret +.asm_fcd15 + xor a + ret + +Func_fcd17: ; fcd17 (3f:4d17) + ld a,[wd437] + cp $ff + ret z + cp $2 + jr nc,.asm_fcd23 + and a + ret +.asm_fcd23 + scf + ret + +Func_fcd25: ; fcd25 (3f:4d25) + ld h,wSpriteStateData2 / $100 + ld a,[H_CURRENTSPRITEOFFSET] + add $4 + ld l,a + ld b,[hl] + ld a,[wYCoord] + cp b + jr z,.asm_fcd3a + jr nc,.asm_fcd63 + add $8 + cp b + jr c,.asm_fcd63 +.asm_fcd3a + inc l + ld b,[hl] + ld a,[wXCoord] + cp b + jr z,.asm_fcd49 + jr nc,.asm_fcd63 + add $9 + cp b + jr c,.asm_fcd63 +.asm_fcd49 + call Func_fcd83 + ld d,$60 + ld a,[hli] + ld e,a + cp d + jr nc,.asm_fcd63 + ld a,[hld] + cp d + jr nc,.asm_fcd63 + ld bc,-20 + add hl,bc + ld a,[hli] + cp d + jr nc,.asm_fcd63 + ld a,[hl] + cp d + jr c,.asm_fcd6f +.asm_fcd63 + ld h,wSpriteStateData1 / $100 + ld a,[H_CURRENTSPRITEOFFSET] + add $2 + ld l,a + ld [hl],$ff + scf + jr .asm_fcd82 +.asm_fcd6f + ld h,wSpriteStateData2 / $100 + ld a,[H_CURRENTSPRITEOFFSET] + add $7 + ld l,a + ld a,[wGrassTile] + cp e + ld a,$0 + jr nz,.asm_fcd80 + ld a,$80 +.asm_fcd80 + ld [hl],a + and a +.asm_fcd82 + ret + +Func_fcd83: ; fcd83 (3f:4d83) + ld h,wSpriteStateData1 / $100 + ld a,[H_CURRENTSPRITEOFFSET] + add $4 + ld l,a + ld a,[hli] + add $4 + and $f0 + srl a + ld c,a + ld b,$0 + inc l + ld a,[hl] + add $2 + srl a + srl a + srl a + add SCREEN_WIDTH + ld d,0 + ld e,a + ld hl,wTileMap + rept 5 + add hl,bc + endr + add hl,de + ret + +Func_fcdad: ; fcdad (3f:4dad) + push bc + push af + ld a,[wPikachuHappiness] + cp $50 + pop bc + ld a,b + pop bc + ret + +IsStarterPikachuInOurParty:: ; fcdb8 (3f:4db8) + ld hl,wPartySpecies + ld de,wPartyMon1OTID + ld bc,wPartyMonOT + push hl +.loop + pop hl + ld a,[hli] + push hl + inc a + jr z,.noPlayerPikachu + cp PIKACHU + 1 + jr nz,.curMonNotPlayerPikachu + ld h,d + ld l,e + ld a,[wPlayerID] + cp [hl] + jr nz,.curMonNotPlayerPikachu + inc hl + ld a,[wPlayerID+1] + cp [hl] + jr nz,.curMonNotPlayerPikachu + push de + push bc + ld hl,wPlayerName + ld d,$6 ; possible player length - 1 +.nameCompareLoop + dec d + jr z,.sameOT + ld a,[bc] + inc bc + cp [hl] + inc hl + jr z,.nameCompareLoop + pop bc + pop de +.curMonNotPlayerPikachu + ld hl,wPartyMon2 - wPartyMon1 + add hl,de + ld d,h + ld e,l + ld hl,NAME_LENGTH + add hl,bc + ld b,h + ld c,l + jr .loop +.sameOT + pop bc + pop de + ld h,d + ld l,e + ld bc,-NAME_LENGTH + add hl,bc + ld a,[hli] + or [hl] + jr z,.noPlayerPikachu ; XXX how is this determined? + pop hl + scf + ret +.noPlayerPikachu + pop hl + and a + ret + +IsThisPartymonStarterPikachu_Box:: ; fce0d (3f:4e0d) + ld hl,wBoxMon1 + ld bc,wBoxMon2 - wBoxMon1 + ld de,wBoxMonOT + jr asm_fce21 + +IsThisPartymonStarterPikachu_Party:: ; fce18 (3f:4e18) +IsThisPartymonStarterPikachu:: + ld hl,wPartyMon1 + ld bc,wPartyMon2 - wPartyMon1 + ld de,wPartyMonOT +asm_fce21: ; fce21 (3f:4e21) + ld a,[wWhichPokemon] + call AddNTimes + ld a,[hl] + cp PIKACHU + jr nz,.notPlayerPikachu + ld bc,wPartyMon1OTID - wPartyMon1 + add hl,bc + ld a,[wPlayerID] + cp [hl] + jr nz,.notPlayerPikachu + inc hl + ld a,[wPlayerID+1] + cp [hl] + jr nz,.notPlayerPikachu + ld h,d + ld l,e + ld a,[wWhichPokemon] + ld bc,NAME_LENGTH + call AddNTimes + ld de,wPlayerName + ld b,$6 +.loop + dec b + jr z,.isPlayerPikachu + ld a,[de] + inc de + cp [hl] + inc hl + jr z,.loop +.notPlayerPikachu + and a + ret +.isPlayerPikachu + scf + ret + +Func_fce5a:: ; fce5a (3f:4e5a) + push de + call IsStarterPikachuInOurParty + pop de + ret nc + ld a,d + cp $80 + ld a,[wPikachuMood] + jr c,.asm_fce6c + cp d + jr c,.asm_fce6e + ret +.asm_fce6c + cp d + ret c +.asm_fce6e + ld a,d + ld [wPikachuMood],a + ret + +Func_fce73:: ; fce73 (3f:4e73) +; function to test if a pokemon is alive? + xor a + ld [wWhichPokemon],a + ld hl,wPartyCount +.loop + inc hl + ld a,[hl] + cp $ff + jr z,.asm_fcea9 + push hl + call IsThisPartymonStarterPikachu_Party + pop hl + jr nc,.asm_fce9e + ld a,[wWhichPokemon] + ld hl,wPartyMon1HP + ld bc,wPartyMon2 - wPartyMon1 + call AddNTimes + ld a,[hli] + or [hl] + ld d,a + inc hl + inc hl + ld a,[hl] + and a + jr nz,.asm_fcea7 + jr .asm_fcea9 +.asm_fce9e + ld a,[wWhichPokemon] + inc a + ld [wWhichPokemon],a + jr .loop +.asm_fcea7 + scf + ret +.asm_fcea9 + and a + ret + +Func_fceab:: ; fceab (3f:4eab) + ld hl,wPartySpecies + ld de,wPartyMon1Moves + ld bc,wPartyMonOT + push hl +.loop + pop hl + ld a,[hli] + push hl + inc a + jr z,.noSurfingPlayerPikachu + cp PIKACHU+1 + jr nz,.curMonNotSurfingPlayerPikachu + ld h,d + ld l,e + push hl + push bc + ld b,NUM_MOVES +.moveSearchLoop + ld a,[hli] + cp SURF + jr z,.foundSurfingPikachu + dec b + jr nz,.moveSearchLoop + pop bc + pop hl + jr .curMonNotSurfingPlayerPikachu +.foundSurfingPikachu + pop bc + pop hl + inc hl + inc hl + inc hl + inc hl + ld a,[wPlayerID] + cp [hl] + jr nz,.curMonNotSurfingPlayerPikachu + inc hl + ld a,[wPlayerID+1] + cp [hl] + jr nz,.curMonNotSurfingPlayerPikachu + push de + push bc + ld hl,wPlayerName + ld d,$6 +.nameCompareLoop + dec d + jr z,.foundSurfingPlayerPikachu + ld a,[bc] + inc bc + cp [hl] + inc hl + jr z,.nameCompareLoop + pop bc + pop de +.curMonNotSurfingPlayerPikachu + ld hl,wPartyMon2 - wPartyMon1 + add hl,de + ld d,h + ld e,l + ld hl,NAME_LENGTH + add hl,bc + ld b,h + ld c,l + jr .loop +.foundSurfingPlayerPikachu + pop bc + pop de + pop hl + scf + ret +.noSurfingPlayerPikachu + pop hl + and a + ret + +Func_fcf0c:: ; fcf0c (3f:4f0c) + dr $fcf0c,$fd001 +Func_fd001:: ; fd001 (3f:5001) + dr $fd001,$fd004 +Func_fd004:: ; fd004 (3f:5004) + dr $fd004,$fd0d0 +Func_fd0d0:: ; fd0d0 (3f:50d0) + dr $fd0d0,$fd252 +Func_fd252: ; fd252 (3f:5252) + dr $fd252,$fd2a1 +Func_fd2a1:: ; fd2a1 (3f:52a1) + dr $fd2a1,$fe66f + +OfficerJennySprite: INCBIN "gfx/sprites/officer_jenny.2bpp" +PikachuSprite: INCBIN "gfx/sprites/pikachu.2bpp" +SandshrewSprite: INCBIN "gfx/sprites/sandshrew.2bpp" +OddishSprite: INCBIN "gfx/sprites/oddish.2bpp" +BulbasaurSprite: INCBIN "gfx/sprites/bulbasaur.2bpp" +JigglypuffSprite: INCBIN "gfx/sprites/jigglypuff.2bpp" +Clefairy2Sprite: INCBIN "gfx/sprites/clefairy2.2bpp" +ChanseySprite: INCBIN "gfx/sprites/chansey.2bpp" +SurfingPikachuSprite: INCBIN "gfx/sprites/surfing_pikachu.2bpp" +JessieSprite: INCBIN "gfx/sprites/jessie.2bpp" +JamesSprite: INCBIN "gfx/sprites/james.2bpp" \ No newline at end of file diff --git a/engine/bank3f/data/map_header_banks.asm b/engine/bank3f/data/map_header_banks.asm deleted file mode 100644 index eeff1974..00000000 --- a/engine/bank3f/data/map_header_banks.asm +++ /dev/null @@ -1,252 +0,0 @@ -; see also MapHeaderPointers -MapHeaderBanks:: ; fc3e4 (3f:43e4) - dr $fc3e4,$fc4dd - ;db BANK(PalletTown_h) ;PALLET_TOWN - ;db BANK(ViridianCity_h) ; VIRIDIAN_CITY - ;db BANK(PewterCity_h) ; PEWTER_CITY - ;db BANK(CeruleanCity_h) ; CERULEAN_CITY - ;db BANK(LavenderTown_h) ; LAVENDER_TOWN - ;db BANK(VermilionCity_h) ; VERMILION_CITY - ;db BANK(CeladonCity_h) ; CELADON_CITY - ;db BANK(FuchsiaCity_h) ; FUCHSIA_CITY - ;db BANK(CinnabarIsland_h) ; CINNABAR_ISLAND - ;db BANK(IndigoPlateau_h) ; INDIGO_PLATEAU - ;db BANK(SaffronCity_h) ; SAFFRON_CITY - ;db $1 ; unused - ;db BANK(Route1_h) ; ROUTE_1 - ;db BANK(Route2_h) ; ROUTE_2 - ;db BANK(Route3_h) ; ROUTE_3 - ;db BANK(Route4_h) ; ROUTE_4 - ;db BANK(Route5_h) ; ROUTE_5 - ;db BANK(Route6_h) ; ROUTE_6 - ;db BANK(Route7_h) ; ROUTE_7 - ;db BANK(Route8_h) ; ROUTE_8 - ;db BANK(Route9_h) ; ROUTE_9 - ;db BANK(Route10_h) ; ROUTE_10 - ;db BANK(Route11_h) ; ROUTE_11 - ;db BANK(Route12_h) ; ROUTE_12 - ;db BANK(Route13_h) ; ROUTE_13 - ;db BANK(Route14_h) ; ROUTE_14 - ;db BANK(Route15_h) ; ROUTE_15 - ;db BANK(Route16_h) ; ROUTE_16 - ;db BANK(Route17_h) ; ROUTE_17 - ;db BANK(Route18_h) ; ROUTE_18 - ;db BANK(Route19_h) ; ROUTE_19 - ;db BANK(Route20_h) ; ROUTE_20 - ;db BANK(Route21_h) ; ROUTE_21 - ;db BANK(Route22_h) ; ROUTE_22 - ;db BANK(Route23_h) ; ROUTE_23 - ;db BANK(Route24_h) ; ROUTE_24 - ;db BANK(Route25_h) ; ROUTE_25 - ;db BANK(RedsHouse1F_h) - ;db BANK(RedsHouse2F_h) - ;db BANK(BluesHouse_h) - ;db BANK(OaksLab_h) - ;db BANK(ViridianPokecenter_h) - ;db BANK(ViridianMart_h) - ;db BANK(School_h) - ;db BANK(ViridianHouse_h) - ;db BANK(ViridianGym_h) - ;db BANK(DiglettsCaveRoute2_h) - ;db BANK(ViridianForestExit_h) - ;db BANK(Route2House_h) - ;db BANK(Route2Gate_h) - ;db BANK(ViridianForestEntrance_h) - ;db BANK(ViridianForest_h) - ;db BANK(Museum1F_h) - ;db BANK(Museum2F_h) - ;db BANK(PewterGym_h) - ;db BANK(PewterHouse1_h) - ;db BANK(PewterMart_h) - ;db BANK(PewterHouse2_h) - ;db BANK(PewterPokecenter_h) - ;db BANK(MtMoon1_h) - ;db BANK(MtMoon2_h) - ;db BANK(MtMoon3_h) - ;db BANK(CeruleanHouseTrashed_h) - ;db BANK(CeruleanHouse1_h) - ;db BANK(CeruleanPokecenter_h) - ;db BANK(CeruleanGym_h) - ;db BANK(BikeShop_h) - ;db BANK(CeruleanMart_h) - ;db BANK(MtMoonPokecenter_h) - ;db BANK(CeruleanHouseTrashed_h) - ;db BANK(Route5Gate_h) - ;db BANK(UndergroundPathEntranceRoute5_h) - ;db BANK(DayCareM_h) - ;db BANK(Route6Gate_h) - ;db BANK(UndergroundPathEntranceRoute6_h) - ;db BANK(UndergroundPathEntranceRoute6_h) ;FREEZE - ;db BANK(Route7Gate_h) - ;db BANK(UndergroundPathEntranceRoute7_h) - ;db BANK(UndergroundPathEntranceRoute7Copy_h) ;FREEZE - ;db BANK(Route8Gate_h) - ;db BANK(UndergroundPathEntranceRoute8_h) - ;db BANK(RockTunnelPokecenter_h) - ;db BANK(RockTunnel1_h) - ;db BANK(PowerPlant_h) - ;db BANK(Route11Gate_h) - ;db BANK(DiglettsCaveEntranceRoute11_h) - ;db BANK(Route11GateUpstairs_h) - ;db BANK(Route12Gate_h) - ;db BANK(BillsHouse_h) - ;db BANK(VermilionPokecenter_h) - ;db BANK(FanClub_h) - ;db BANK(VermilionMart_h) - ;db BANK(VermilionGym_h) - ;db BANK(VermilionHouse1_h) - ;db BANK(VermilionDock_h) - ;db BANK(SSAnne1_h) - ;db BANK(SSAnne2_h) - ;db BANK(SSAnne3_h) - ;db BANK(SSAnne4_h) - ;db BANK(SSAnne5_h) - ;db BANK(SSAnne6_h) - ;db BANK(SSAnne7_h) - ;db BANK(SSAnne8_h) - ;db BANK(SSAnne9_h) - ;db BANK(SSAnne10_h) - ;db $1D ;unused - ;db $1D ;unused - ;db $1D ;unused - ;db BANK(VictoryRoad1_h) - ;db $1D ;unused - ;db $1D ;unused - ;db $1D ;unused - ;db $1D ;unused - ;db BANK(Lance_h) - ;db $1D ;unused - ;db $1D ;unused - ;db $1D ;unused - ;db $1D ;unused - ;db BANK(HallofFameRoom_h) - ;db BANK(UndergroundPathNS_h) - ;db BANK(Gary_h) - ;db BANK(UndergroundPathWE_h) - ;db BANK(CeladonMart1_h) - ;db BANK(CeladonMart2_h) - ;db BANK(CeladonMart3_h) - ;db BANK(CeladonMart4_h) - ;db BANK(CeladonMartRoof_h) - ;db BANK(CeladonMartElevator_h) - ;db BANK(CeladonMansion1_h) - ;db BANK(CeladonMansion2_h) - ;db BANK(CeladonMansion3_h) - ;db BANK(CeladonMansion4_h) - ;db BANK(CeladonMansion5_h) - ;db BANK(CeladonPokecenter_h) - ;db BANK(CeladonGym_h) - ;db BANK(CeladonGameCorner_h) - ;db BANK(CeladonMart5_h) - ;db BANK(CeladonPrizeRoom_h) - ;db BANK(CeladonDiner_h) - ;db BANK(CeladonHouse_h) - ;db BANK(CeladonHotel_h) - ;db BANK(LavenderPokecenter_h) - ;db BANK(PokemonTower1_h) - ;db BANK(PokemonTower2_h) - ;db BANK(PokemonTower3_h) - ;db BANK(PokemonTower4_h) - ;db BANK(PokemonTower5_h) - ;db BANK(PokemonTower6_h) - ;db BANK(PokemonTower7_h) - ;db BANK(LavenderHouse1_h) - ;db BANK(LavenderMart_h) - ;db BANK(LavenderHouse2_h) - ;db BANK(FuchsiaMart_h) - ;db BANK(FuchsiaHouse1_h) - ;db BANK(FuchsiaPokecenter_h) - ;db BANK(FuchsiaHouse2_h) - ;db BANK(SafariZoneEntrance_h) - ;db BANK(FuchsiaGym_h) - ;db BANK(FuchsiaMeetingRoom_h) - ;db BANK(SeafoamIslands2_h) - ;db BANK(SeafoamIslands3_h) - ;db BANK(SeafoamIslands4_h) - ;db BANK(SeafoamIslands5_h) - ;db BANK(VermilionHouse2_h) - ;db BANK(FuchsiaHouse3_h) - ;db BANK(Mansion1_h) - ;db BANK(CinnabarGym_h) - ;db BANK(Lab1_h) - ;db BANK(Lab2_h) - ;db BANK(Lab3_h) - ;db BANK(Lab4_h) - ;db BANK(CinnabarPokecenter_h) - ;db BANK(CinnabarMart_h) - ;db BANK(CinnabarMart_h) - ;db BANK(IndigoPlateauLobby_h) - ;db BANK(CopycatsHouse1F_h) - ;db BANK(CopycatsHouse2F_h) - ;db BANK(FightingDojo_h) - ;db BANK(SaffronGym_h) - ;db BANK(SaffronHouse1_h) - ;db BANK(SaffronMart_h) - ;db BANK(SilphCo1_h) - ;db BANK(SaffronPokecenter_h) - ;db BANK(SaffronHouse2_h) - ;db BANK(Route15Gate_h) - ;db BANK(Route15GateUpstairs_h) - ;db BANK(Route16Gate_h) - ;db BANK(Route16GateUpstairs_h) - ;db BANK(Route16House_h) - ;db BANK(Route12House_h) - ;db BANK(Route18Gate_h) - ;db BANK(Route18GateUpstairs_h) - ;db BANK(SeafoamIslands1_h) - ;db BANK(Route22Gate_h) - ;db BANK(VictoryRoad2_h) - ;db BANK(Route12GateUpstairs_h) - ;db BANK(VermilionHouse3_h) - ;db BANK(DiglettsCave_h) - ;db BANK(VictoryRoad3_h) - ;db BANK(RocketHideout1_h) - ;db BANK(RocketHideout2_h) - ;db BANK(RocketHideout3_h) - ;db BANK(RocketHideout4_h) - ;db BANK(RocketHideoutElevator_h) - ;db $01 - ;db $01 - ;db $01 - ;db BANK(SilphCo2_h) - ;db BANK(SilphCo3_h) - ;db BANK(SilphCo4_h) - ;db BANK(SilphCo5_h) - ;db BANK(SilphCo6_h) - ;db BANK(SilphCo7_h) - ;db BANK(SilphCo8_h) - ;db BANK(Mansion2_h) - ;db BANK(Mansion3_h) - ;db BANK(Mansion4_h) - ;db BANK(SafariZoneEast_h) - ;db BANK(SafariZoneNorth_h) - ;db BANK(SafariZoneWest_h) - ;db BANK(SafariZoneCenter_h) - ;db BANK(SafariZoneRestHouse1_h) - ;db BANK(SafariZoneSecretHouse_h) - ;db BANK(SafariZoneRestHouse2_h) - ;db BANK(SafariZoneRestHouse3_h) - ;db BANK(SafariZoneRestHouse4_h) - ;db BANK(UnknownDungeon2_h) - ;db BANK(UnknownDungeon3_h) - ;db BANK(UnknownDungeon1_h) - ;db BANK(NameRater_h) - ;db BANK(CeruleanHouse2_h) - ;db $01 - ;db BANK(RockTunnel2_h) - ;db BANK(SilphCo9_h) - ;db BANK(SilphCo10_h) - ;db BANK(SilphCo11_h) - ;db BANK(SilphCoElevator_h) - ;db $11 - ;db $11 - ;db BANK(BattleCenterM_h) - ;db BANK(TradeCenterM_h) - ;db $11 - ;db $11 - ;db $11 - ;db $11 - ;db BANK(Lorelei_h) - ;db BANK(Bruno_h) - ;db BANK(Agatha_h) - ;db BANK(BeachHouse_h) \ No newline at end of file diff --git a/engine/bank3f/data/map_header_pointers.asm b/engine/bank3f/data/map_header_pointers.asm deleted file mode 100644 index c7dd0c9f..00000000 --- a/engine/bank3f/data/map_header_pointers.asm +++ /dev/null @@ -1,252 +0,0 @@ -; see also MapHeaderBanks -MapHeaderPointers:: ; fc1f2 (3f:41f2) - dr $fc1f2,$fc3e4 - ;dw PalletTown_h - ;dw ViridianCity_h - ;dw PewterCity_h - ;dw CeruleanCity_h - ;dw LavenderTown_h - ;dw VermilionCity_h - ;dw CeladonCity_h - ;dw FuchsiaCity_h - ;dw CinnabarIsland_h - ;dw IndigoPlateau_h - ;dw SaffronCity_h - ;dw SaffronCity_h - ;dw Route1_h - ;dw Route2_h - ;dw Route3_h - ;dw Route4_h - ;dw Route5_h - ;dw Route6_h - ;dw Route7_h - ;dw Route8_h - ;dw Route9_h - ;dw Route10_h - ;dw Route11_h - ;dw Route12_h - ;dw Route13_h - ;dw Route14_h - ;dw Route15_h - ;dw Route16_h - ;dw Route17_h - ;dw Route18_h - ;dw Route19_h - ;dw Route20_h - ;dw Route21_h - ;dw Route22_h - ;dw Route23_h - ;dw Route24_h - ;dw Route25_h - ;dw RedsHouse1F_h - ;dw RedsHouse2F_h - ;dw BluesHouse_h - ;dw OaksLab_h ;id=40 - ;dw ViridianPokecenter_h - ;dw ViridianMart_h - ;dw School_h - ;dw ViridianHouse_h - ;dw ViridianGym_h - ;dw DiglettsCaveRoute2_h - ;dw ViridianForestExit_h - ;dw Route2House_h - ;dw Route2Gate_h - ;dw ViridianForestEntrance_h ;id=50 - ;dw ViridianForest_h - ;dw Museum1F_h - ;dw Museum2F_h - ;dw PewterGym_h - ;dw PewterHouse1_h - ;dw PewterMart_h - ;dw PewterHouse2_h - ;dw PewterPokecenter_h - ;dw MtMoon1_h - ;dw MtMoon2_h ;id=60 - ;dw MtMoon3_h - ;dw CeruleanHouseTrashed_h - ;dw CeruleanHouse1_h - ;dw CeruleanPokecenter_h - ;dw CeruleanGym_h - ;dw BikeShop_h - ;dw CeruleanMart_h - ;dw MtMoonPokecenter_h - ;dw CeruleanHouseTrashed_h ; copy - ;dw Route5Gate_h - ;dw UndergroundPathEntranceRoute5_h - ;dw DayCareM_h - ;dw Route6Gate_h - ;dw UndergroundPathEntranceRoute6_h - ;dw UndergroundPathEntranceRoute6_h ; unused - ;dw Route7Gate_h - ;dw UndergroundPathEntranceRoute7_h - ;dw UndergroundPathEntranceRoute7Copy_h - ;dw Route8Gate_h - ;dw UndergroundPathEntranceRoute8_h ;id=80 - ;dw RockTunnelPokecenter_h - ;dw RockTunnel1_h - ;dw PowerPlant_h - ;dw Route11Gate_h - ;dw DiglettsCaveEntranceRoute11_h - ;dw Route11GateUpstairs_h - ;dw Route12Gate_h - ;dw BillsHouse_h - ;dw VermilionPokecenter_h - ;dw FanClub_h ;id=90 - ;dw VermilionMart_h - ;dw VermilionGym_h - ;dw VermilionHouse1_h - ;dw VermilionDock_h - ;dw SSAnne1_h - ;dw SSAnne2_h - ;dw SSAnne3_h - ;dw SSAnne4_h - ;dw SSAnne5_h - ;dw SSAnne6_h ;id=100 - ;dw SSAnne7_h - ;dw SSAnne8_h - ;dw SSAnne9_h - ;dw SSAnne10_h - ;dw Lance_h ; unused - ;dw Lance_h ; unused - ;dw Lance_h ; unused - ;dw VictoryRoad1_h - ;dw Lance_h ; unused - ;dw Lance_h ; unused ;id=110 - ;dw Lance_h ; unused - ;dw Lance_h ; unused - ;dw Lance_h - ;dw Lance_h ; unused - ;dw Lance_h ; unused - ;dw Lance_h ; unused - ;dw Lance_h ; unused - ;dw HallofFameRoom_h - ;dw UndergroundPathNS_h - ;dw Gary_h ;id=120 - ;dw UndergroundPathWE_h - ;dw CeladonMart1_h - ;dw CeladonMart2_h - ;dw CeladonMart3_h - ;dw CeladonMart4_h - ;dw CeladonMartRoof_h - ;dw CeladonMartElevator_h - ;dw CeladonMansion1_h - ;dw CeladonMansion2_h - ;dw CeladonMansion3_h ;id=130 - ;dw CeladonMansion4_h - ;dw CeladonMansion5_h - ;dw CeladonPokecenter_h - ;dw CeladonGym_h - ;dw CeladonGameCorner_h - ;dw CeladonMart5_h - ;dw CeladonPrizeRoom_h - ;dw CeladonDiner_h - ;dw CeladonHouse_h - ;dw CeladonHotel_h ;id=140 - ;dw LavenderPokecenter_h - ;dw PokemonTower1_h - ;dw PokemonTower2_h - ;dw PokemonTower3_h - ;dw PokemonTower4_h - ;dw PokemonTower5_h - ;dw PokemonTower6_h - ;dw PokemonTower7_h - ;dw LavenderHouse1_h - ;dw LavenderMart_h ;id=150 - ;dw LavenderHouse2_h - ;dw FuchsiaMart_h - ;dw FuchsiaHouse1_h - ;dw FuchsiaPokecenter_h - ;dw FuchsiaHouse2_h - ;dw SafariZoneEntrance_h - ;dw FuchsiaGym_h - ;dw FuchsiaMeetingRoom_h - ;dw SeafoamIslands2_h - ;dw SeafoamIslands3_h ;id=160 - ;dw SeafoamIslands4_h - ;dw SeafoamIslands5_h - ;dw VermilionHouse2_h - ;dw FuchsiaHouse3_h - ;dw Mansion1_h - ;dw CinnabarGym_h - ;dw Lab1_h - ;dw Lab2_h - ;dw Lab3_h - ;dw Lab4_h ;id=170 - ;dw CinnabarPokecenter_h - ;dw CinnabarMart_h - ;dw CinnabarMart_h ; unused - ;dw IndigoPlateauLobby_h - ;dw CopycatsHouse1F_h - ;dw CopycatsHouse2F_h - ;dw FightingDojo_h - ;dw SaffronGym_h - ;dw SaffronHouse1_h - ;dw SaffronMart_h ;id=180 - ;dw SilphCo1_h - ;dw SaffronPokecenter_h - ;dw SaffronHouse2_h - ;dw Route15Gate_h - ;dw Route15GateUpstairs_h - ;dw Route16Gate_h - ;dw Route16GateUpstairs_h - ;dw Route16House_h - ;dw Route12House_h - ;dw Route18Gate_h ;id=190 - ;dw Route18GateUpstairs_h - ;dw SeafoamIslands1_h - ;dw Route22Gate_h - ;dw VictoryRoad2_h - ;dw Route12GateUpstairs_h - ;dw VermilionHouse3_h - ;dw DiglettsCave_h - ;dw VictoryRoad3_h - ;dw RocketHideout1_h - ;dw RocketHideout2_h ;200 - ;dw RocketHideout3_h - ;dw RocketHideout4_h - ;dw RocketHideoutElevator_h - ;dw RocketHideoutElevator_h ; unused - ;dw RocketHideoutElevator_h ; unused - ;dw RocketHideoutElevator_h ; unused - ;dw SilphCo2_h - ;dw SilphCo3_h - ;dw SilphCo4_h - ;dw SilphCo5_h ;210 - ;dw SilphCo6_h - ;dw SilphCo7_h - ;dw SilphCo8_h - ;dw Mansion2_h - ;dw Mansion3_h - ;dw Mansion4_h - ;dw SafariZoneEast_h - ;dw SafariZoneNorth_h - ;dw SafariZoneWest_h - ;dw SafariZoneCenter_h ;220 - ;dw SafariZoneRestHouse1_h - ;dw SafariZoneSecretHouse_h - ;dw SafariZoneRestHouse2_h - ;dw SafariZoneRestHouse3_h - ;dw SafariZoneRestHouse4_h - ;dw UnknownDungeon2_h - ;dw UnknownDungeon3_h - ;dw UnknownDungeon1_h - ;dw NameRater_h - ;dw CeruleanHouse2_h - ;dw Route16Gate_h ; unused - ;dw RockTunnel2_h - ;dw SilphCo9_h - ;dw SilphCo10_h - ;dw SilphCo11_h - ;dw SilphCoElevator_h - ;dw SilphCo2_h ; unused - ;dw SilphCo2_h ; unused - ;dw BattleCenterM_h - ;dw TradeCenterM_h - ;dw SilphCo2_h ; unused - ;dw SilphCo2_h ; unused - ;dw SilphCo2_h ; unused - ;dw SilphCo2_h ; unused - ;dw Lorelei_h - ;dw Bruno_h - ;dw Agatha_h ;247 - ;dw BeachHouse_h \ No newline at end of file diff --git a/engine/bank3f/data/map_songs.asm b/engine/bank3f/data/map_songs.asm deleted file mode 100644 index b65822e7..00000000 --- a/engine/bank3f/data/map_songs.asm +++ /dev/null @@ -1,250 +0,0 @@ -MapSongBanks: ; fc000 (3f:4000) - db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ;PALLET_TOWN - db MUSIC_CITIES1, BANK(Music_Cities1) ; VIRIDIAN_CITY - db MUSIC_CITIES1, BANK(Music_Cities1) ; PEWTER_CITY - db MUSIC_CITIES2, BANK(Music_Cities2) ; CERULEAN_CITY - db MUSIC_LAVENDER, BANK(Music_Lavender) ; LAVENDER_TOWN - db MUSIC_VERMILION, BANK(Music_Vermilion) ; VERMILION_CITY - db MUSIC_CELADON, BANK(Music_Celadon) ; CELADON_CITY - db MUSIC_CITIES2, BANK(Music_Cities2) ; FUCHSIA_CITY - db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; CINNABAR_ISLAND - db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; INDIGO_PLATEAU - db MUSIC_CITIES1, BANK(Music_Cities1) ; SAFFRON_CITY - db MUSIC_CITIES1, BANK(Music_Cities1) ; unused - db MUSIC_ROUTES1, BANK(Music_Routes1) ; ROUTE_1 - db MUSIC_ROUTES1, BANK(Music_Routes1) ; ROUTE_2 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_3 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_4 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_5 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_6 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_7 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_8 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_9 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_10 - db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_11 - db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_12 - db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_13 - db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_14 - db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_15 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_16 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_17 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_18 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_19 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_20 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_21 - db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_22 - db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; ROUTE_23 - db MUSIC_ROUTES2, BANK(Music_Routes2) ; ROUTE_24 - db MUSIC_ROUTES2, BANK(Music_Routes2) ; ROUTE_25 - db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; RedsHouse1F - db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; RedsHouse2F - db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; BluesHouse - db MUSIC_OAKS_LAB, BANK(Music_OaksLab) ; OaksLab - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; ViridianPokecenter - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; ViridianMart - db MUSIC_CITIES1, BANK(Music_Cities1) ; School - db MUSIC_CITIES1, BANK(Music_Cities1) ; ViridianHouse - db MUSIC_GYM, BANK(Music_Gym) ; ViridianGym - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; DiglettsCaveRoute2 - db MUSIC_CITIES1, BANK(Music_Cities1) ; ViridianForestExit - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route2House - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route2Gate - db MUSIC_CITIES1, BANK(Music_Cities1) ; ViridianForestEntrance - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; ViridianForest - db MUSIC_CITIES1, BANK(Music_Cities1) ; Museum1F - db MUSIC_CITIES1, BANK(Music_Cities1) ; Museum2F - db MUSIC_GYM, BANK(Music_Gym) ; PewterGym - db MUSIC_CITIES1, BANK(Music_Cities1) ; PewterHouse1 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; PewterMart - db MUSIC_CITIES1, BANK(Music_Cities1) ; PewterHouse2 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; PewterPokecenter - db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; MtMoon1 - db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; MtMoon2 - db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; MtMoon3 - db MUSIC_CITIES2, BANK(Music_Cities2) ; CeruleanHouseTrashed - db MUSIC_CITIES2, BANK(Music_Cities2) ; CeruleanHouse1 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeruleanPokecenter - db MUSIC_GYM, BANK(Music_Gym) ; CeruleanGym - db MUSIC_CITIES2, BANK(Music_Cities2) ; BikeShop - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeruleanMart - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; MtMoonPokecenter - db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; CeruleanHouseTrashed - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route5Gate - db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundTunnelEntranceRoute5 - db MUSIC_CITIES1, BANK(Music_Cities1) ; DayCareM - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route6Gate - db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundTunnelEntranceRoute6 - db MUSIC_VERMILION, BANK(Music_Vermilion) ; FREEZE - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route7Gate - db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundPathEntranceRoute7 - db MUSIC_CELADON, BANK(Music_Celadon) ;FREEZE - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route8Gate - db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundPathEntranceRoute8 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; RockTunnelPokecenter - db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; RockTunnel1 - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; PowerPlant - db MUSIC_VERMILION, BANK(Music_Vermilion) ; Route11Gate - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; DiglettsCaveEntranceRoute11 - db MUSIC_VERMILION, BANK(Music_Vermilion) ; Route11GateUpstairs - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route12Gate - db MUSIC_CITIES2, BANK(Music_Cities2) ; BillsHouse - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; VermilionPokecenter - db MUSIC_VERMILION, BANK(Music_Vermilion) ; FanClub - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; VermilionMart - db MUSIC_GYM, BANK(Music_Gym) ; VermilionGym - db MUSIC_VERMILION, BANK(Music_Vermilion) ; VermilionHouse1 - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; VermilionDock - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne1 - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne2 - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne3 - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne4 - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne5 - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne6 - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne7 - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne8 - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne9 - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne10 - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ;unused - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ;unused - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused - db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; VictoryRoad1 - db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ;unused - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ;unused - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ;unused - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ;unused - db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; Lance - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused - db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused - db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; HallofFameRoom - db MUSIC_ROUTES1, BANK(Music_Routes1) ; UndergroundPathNS - db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; Gary - db MUSIC_ROUTES1, BANK(Music_Routes1) ; UndergroundPathWE - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart1 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart2 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart3 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart4 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMartRoof - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMartElevator - db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion1 - db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion2 - db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion3 - db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion4 - db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion5 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonPokecenter - db MUSIC_GYM, BANK(Music_Gym) ; CeladonGym - db MUSIC_GAME_CORNER, BANK(Music_GameCorner) ; CeladonGameCorner - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart5 - db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonPrizeRoom - db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonDiner - db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonHouse - db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonHotel - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; LavenderPokecenter - db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower1 - db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower2 - db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower3 - db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower4 - db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower5 - db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower6 - db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower7 - db MUSIC_LAVENDER, BANK(Music_Lavender) ; LavenderHouse1 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; LavenderMart - db MUSIC_LAVENDER, BANK(Music_Lavender) ; LavenderHouse2 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; FuchsiaMart - db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaHouse1 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; FuchsiaPokecenter - db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaHouse2 - db MUSIC_CITIES2, BANK(Music_Cities2) ; SafariZoneEntrance - db MUSIC_GYM, BANK(Music_Gym) ; FuchsiaGym - db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaMeetingRoom - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands2 - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands3 - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands4 - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands5 - db MUSIC_CITIES2, BANK(Music_Cities2) ; VermilionHouse2 - db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaHouse3 - db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion1 - db MUSIC_GYM, BANK(Music_Gym) ; CinnabarGym - db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab1 - db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab2 - db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab3 - db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab4 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CinnabarPokecenter - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CinnabarMart - db MUSIC_CINNABAR, BANK(Music_Cinnabar) - db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; IndigoPlateauLobby - db MUSIC_CITIES1, BANK(Music_Cities1) ; CopycatsHouse1F - db MUSIC_CITIES1, BANK(Music_Cities1) ; CopycatsHouse2F - db MUSIC_CITIES1, BANK(Music_Cities1) ; FightingDojo - db MUSIC_GYM, BANK(Music_Gym) ; SaffronGym - db MUSIC_CITIES1, BANK(Music_Cities1) ; SaffronHouse1 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; SaffronMart - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo1 - db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; SaffronPokecenter - db MUSIC_CITIES1, BANK(Music_Cities1) ; SaffronHouse2 - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route15Gate - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route15GateUpstairs - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route16Gate - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route16GateUpstairs - db MUSIC_CELADON, BANK(Music_Celadon) ; Route16House - db MUSIC_CELADON, BANK(Music_Celadon) ; Route12House - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route18Gate - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route18GateUpstairs - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands1 - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; Route22Gate - db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; VictoryRoad2 - db MUSIC_CITIES1, BANK(Music_Cities1) ; Route12GateUpstairs - db MUSIC_VERMILION, BANK(Music_Vermilion) ; VermilionHouse3 - db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; DiglettsCave - db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; VictoryRoad3 - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout1 - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout2 - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout3 - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout4 - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideoutElevator - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo2 - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo3 - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo4 - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo5 - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo6 - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo7 - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo8 - db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion2 - db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion3 - db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion4 - db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneEast - db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneNorth - db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneWest - db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneCenter - db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse1 - db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneSecretHouse - db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse2 - db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse3 - db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse4 - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; UnknownDungeon2 - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; UnknownDungeon3 - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; UnknownDungeon1 - db MUSIC_CITIES2, BANK(Music_Cities2) ; NameRater - db MUSIC_CITIES1, BANK(Music_Cities1) ; CeruleanHouse2 - db MUSIC_CINNABAR, BANK(Music_Cinnabar) - db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; RockTunnel2 - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo9 - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo10 - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo11 - db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCoElevator - db MUSIC_SILPH_CO, BANK(Music_SilphCo) - db MUSIC_SILPH_CO, BANK(Music_SilphCo) - db MUSIC_CELADON, BANK(Music_Celadon) ; BattleCenterM - db MUSIC_CELADON, BANK(Music_Celadon) ; TradeCenterM - db MUSIC_SILPH_CO, BANK(Music_SilphCo) - db MUSIC_SILPH_CO, BANK(Music_SilphCo) - db MUSIC_SILPH_CO, BANK(Music_SilphCo) - db MUSIC_SILPH_CO, BANK(Music_SilphCo) - db MUSIC_GYM, BANK(Music_Gym) ; Lorelei - db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; Bruno - db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; Agatha - db MUSIC_ROUTES3, BANK(Music_Routes3) ; BeachHouse \ No newline at end of file diff --git a/engine/bank3f/main.asm b/engine/bank3f/main.asm deleted file mode 100644 index 9552e07a..00000000 --- a/engine/bank3f/main.asm +++ /dev/null @@ -1,1750 +0,0 @@ -INCLUDE "engine/bank3f/data/map_songs.asm" -INCLUDE "engine/bank3f/data/map_header_pointers.asm" -INCLUDE "engine/bank3f/data/map_header_banks.asm" - -Func_fc4dd:: ; fc4dd (3f:44dd) -; possibly to test if pika should be out? - ld a,[wd430] - bit 5,a - jr nz,.asm_fc4f8 ; 3f:44f8 - ld a,[wd430] - bit 7,a - jr nz,.asm_fc4f8 - call IsStarterPikachuInOurParty - jr nc,.asm_fc4f8 - ld a,[wWalkBikeSurfState] - and a - jr nz,.asm_fc4f8 - scf - ret -.asm_fc4f8 - and a - ret - -Func_fc4fa:: ; fc4fa (3f:44fa) - ld hl,wd430 - bit 4,[hl] - res 4,[hl] - jr nz,.asm_fc515 - call Func_1542 - call Func_fc523 - ld a,$ff - ld [wSpriteStateData1 + $f2],a - call Func_fcb84 - call Func_fc5bc - ret - -.asm_fc515 - call Func_fc53f - xor a - ld [wd431],a - ld a,[wSpriteStateData1 + $9] - ld [wSpriteStateData1 + $f9],a - ret - -Func_fc523:: ; fc523 (3f:4523) - ld hl,wSpriteStateData1 + $f0 - call Func_fc52c - ld hl,wSpriteStateData2 + $f0 -Func_fc52c:: ; fc52c (3f:4523) - ld bc,$10 - xor a - call FillMemory - ret - -Func_fc534:: ; fc534 (3f:4534) - call Func_fc53f - call Func_fc5bc - xor a - ld [wd431],a - ret - -Func_fc53f:: ; fc53f (3f:453f) - ld bc,wSpriteStateData1 + $f0 - ld a,[wYCoord] - add $4 - ld e,a - ld a,[wXCoord] - add $4 - ld d,a - ld a,[wd431] - and a - jr z,.asm_fc5aa - cp $1 - jr z,.asm_fc59e - cp $2 - jr z,.asm_fc584 - cp $3 - jr z,.asm_fc5aa - cp $4 - jr z,.asm_fc5a4 - cp $5 - jr z,.asm_fc5a7 - cp $6 - jr z,.asm_fc5a1 - cp $7 - jr z,.asm_fc572 - jr .asm_fc59e - -.asm_fc572 - ld a,[wSpriteStateData1 + $9] - and a ; SPRITE_FACING_DOWN - jr z,.asm_fc5a4 - cp SPRITE_FACING_UP - jr z,.asm_fc5a7 - cp SPRITE_FACING_LEFT - jr z,.asm_fc5a1 - cp SPRITE_FACING_RIGHT - jr z,.asm_fc59e -.asm_fc584 - ld a,[wSpriteStateData1 + $9] - and a - jr nz,.asm_fc58d - dec e - jr .asm_fc5aa -.asm_fc58d - cp SPRITE_FACING_UP - jr nz,.asm_fc594 - inc e - jr .asm_fc5aa -.asm_fc594 - cp SPRITE_FACING_LEFT - jr nz,.asm_fc59b - inc d - jr .asm_fc5aa -.asm_fc59b - dec d - jr .asm_fc5aa -.asm_fc59e - inc d - jr .asm_fc5aa -.asm_fc5a1 - dec d - jr .asm_fc5aa -.asm_fc5a4 - inc e - jr .asm_fc5aa -.asm_fc5a7 - dec e - jr .asm_fc5aa ; useless jr -.asm_fc5aa - ld hl,$104 - add hl,bc - ld [hl],e - inc hl - ld [hl],d - inc hl -Func_fc4b2:: ; fc4b2 (3f:44b2) - ld [hl],$fe - push hl - ld hl,wd472 - set 5,[hl] - pop hl - ret - -Func_fc5bc:: ; fc5bc (3f:45bc) - ld a,$49 - ld [wSpriteStateData1 + $f0],a - ld a,$ff - ld [wSpriteStateData1 + $f2],a - ld a,[wd431] - and a - jr z,.asm_fc5e4 - cp $1 - jr z,.asm_fc5e4 - cp $3 - jr z,.asm_fc5eb - cp $4 - jr z,.asm_fc5e4 - cp $6 - jr z,.asm_fc5e4 - cp $7 - jr z,.asm_fc5f1 - call Func_fccb2 - ret - -.asm_fc5e4 - ld a,[wSpriteStateData1 + $9] - ld [wSpriteStateData1 + $f9],a - ret -.asm_fc5eb - ld a,$0 - ld [wSpriteStateData1 + $f9],a - ret -.asm_fc5f1 - ld a,[wSpriteStateData1 + $9] - xor $4 - ld [wSpriteStateData1 + $f9],a - ret - -Func_fc5fa:: ; fc5fa (3f:45fa) - ld a,[wCurMap] - cp OAKS_LAB - jr z,.asm_fc63d - cp ROUTE_22_GATE - jr z,.asm_fc62d - cp MT_MOON_2 - jr z,.asm_fc635 - cp ROCK_TUNNEL_1 - jr z,.asm_fc645 - ld a,[wCurMap] - ld hl,Pointer_fc64b - call Func_1568 ; similar to IsInArray, but not the same - jr c,.asm_fc639 - ld a,[wCurMap] - ld hl,Pointer_fc653 - call Func_1568 - jr nc,.asm_fc641 - ld a,[wSpriteStateData1 + $9] - and a - jr nz,.asm_fc641 - ld a,$3 - jr .asm_fc647 - -.asm_fc62d - ld a,[wSpriteStateData1 + $9] - and a - jr z,.asm_fc645 - jr .asm_fc641 -.asm_fc635 - ld a,$3 - jr .asm_fc647 -.asm_fc639 - ld a,$4 - jr .asm_fc647 -.asm_fc63d - ld a,$6 - jr .asm_fc647 -.asm_fc641 - ld a,$1 - jr .asm_fc647 -.asm_fc645 - ld a,$3 -.asm_fc647 - ld [wd431],a - ret - -Pointer_fc64b:: ; fc64b (3f:464b) - db $c2,$4c,$4f,$ba,$be,$b8,$54,$ff - -Pointer_fc653:: ; fc653 (3f:4653) - db $2f,$e6,$3e,$5e,$80,$31,$a4,$ff - -Func_fc65b:: ; fc65b (3f:465b) - ld a,[wCurMap] - cp VIRIDIAN_FOREST_EXIT - jr z,.asm_fc673 - cp VIRIDIAN_FOREST_ENTRANCE - jr z,.asm_fc67c - ld a,[wCurMap] - ld hl,Pointer_fc68e - call Func_1568 - jr c,.asm_fc688 - jr .asm_fc684 -.asm_fc673 - ld a,[wSpriteStateData1 + $9] - cp SPRITE_FACING_UP - jr z,.asm_fc688 - jr .asm_fc684 -.asm_fc67c - ld a,[wSpriteStateData1 + $9] - and a ; SPRITE_FACING_DOWN - jr z,.asm_fc684 - jr .asm_fc688 -.asm_fc684 - ld a,$0 - jr .asm_fc68a -.asm_fc688 - ld a,$1 -.asm_fc68a - ld [wd431],a - ret - -Pointer_fc68e:: ; fc68e (3f:468e) - db $33,$dd,$df,$e0,$e1,$de,$ec,$7f,$a8,$a9,$aa,$ff - -Func_fc69a:: ; fc69a (3f:469a) - ld a,[wCurMap] - cp ROUTE_22_GATE - jr z,.asm_fc6a7 - cp ROUTE_2_GATE - jr z,.asm_fc6b0 - jr .asm_fc6bd -.asm_fc6a7 - ld a,[wSpriteStateData1 + $9] - cp SPRITE_FACING_UP - jr z,.asm_fc6b9 - jr .asm_fc6bd -.asm_fc6b0 - ld a,[wSpriteStateData1 + $9] - cp SPRITE_FACING_UP - jr z,.asm_fc6b9 - jr .asm_fc6bd -.asm_fc6b9 - ld a,$1 - jr .asm_fc6c1 -.asm_fc6bd - ld a,$3 - jr .asm_fc6c1 -.asm_fc6c1 - ld [wd431],a - ret - -Func_fc6c5:: ; fc6c5 (3f:46c5) - push hl - ld hl,wd430 - set 2,[hl] - pop hl - ret - -Func_fc6cd:: ; fc6cd (3f:46cd) - push hl - ld hl,wd430 - res 2,[hl] - pop hl - ret - -Func_fc6d5:: ; fc6d5 (3f:46d5) - call Func_fc6cd - call Func_fc727 - ret nc - push bc - call Func_fcd25 - pop bc - ret c - ld bc,wSpriteStateData1 + $f0 - ld hl,$1 - add hl,bc - bit 7,[hl] - jp nz,asm_fc745 - ld a,[wFontLoaded] - bit 0,a - jp nz,asm_fc76a - call Func_154a - jp nz,asm_fc76a - ld a,[hl] - and $7f - cp $a - jr c,.asm_fc704 - xor a -.asm_fc704 - add a - ld e,a - ld d,0 - ld hl,PointerTable_fc710 - add hl,de - ld a,[hli] - ld h,[hl] - ld l,a - jp hl - -PointerTable_fc710: ; fc710 (3f:4710) - dw Func_fc793 - dw Func_fc7aa - dw Func_fc803 - dw asm_fc9c3 - dw asm_fca1c - dw asm_fc9ee - dw asm_fc87f - dw asm_fc904 - dw asm_fc937 - dw asm_fc969 - dw Func_fc726 - -Func_fc726: ; fc726 (3f:4726) - ret - -Func_fc727: ; fc727 (3f:4727) - call Func_fc4dd - jr nc,.asm_fc73b - ld a,[wSpriteStateData1 + $f1] - and a - jr nz,.asm_fc739 - push bc - push hl - call Func_fc534 - pop hl - pop bc -.asm_fc739 - scf - ret -.asm_fc73b - ld hl,wSpriteStateData1 + $f2 - ld [hl],$ff - dec hl - ld [hl],$0 - xor a - ret -asm_fc745: ; fc745 (3f:4745) - ld hl,$1 - add hl,bc - res 7,[hl] - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],a - call Func_154a - jr nz,.asm_fc75f - ld a,[wSpriteStateData1 + $9] - xor $4 - ld hl,$9 - add hl,bc - ld [hl],a -.asm_fc75f - xor a - ld hl,$7 - add hl,bc - ld [hli],a - ld [hl],a - call Func_fca99 - ret -asm_fc76a: ; fc76a (3f:476a) - xor a - ld hl,$7 - add hl,bc - ld [hli],a - ld [hl],a - call Func_fca99 - call Func_fc82e - jr c,.asm_fc783 - push bc - callab InitializeSpriteScreenPosition - pop bc -.asm_fc783 - ld hl,$1 - add hl,bc - ld [hl],$1 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$0 - call Func_fcba1 - ret - -Func_fc793: ; fc793 (3f:4793) - call Func_fcba1 - push bc - callab InitializeSpriteScreenPosition - pop bc - ld hl,$2 - add hl,bc - ld [hl],$ff - dec hl - ld [hl],$1 - ret - -Func_fc7aa: ; fc7aa (3f:47aa) - call Func_fcc92 - jp c,Func_fc803 - dec a - ld l,a - ld h,$0 - add hl,hl - add hl,hl - ld de,Pointer_fc7e3 - add hl,de - ld d,h - ld e,l - ld a,[de] - inc de - ld hl,$9 - add hl,bc - ld [hl],a - ld a,[de] - inc de - ld hl,$5 - add hl,bc - ld [hl],a - dec hl - dec hl - ld a,[de] - ld [hl],a - inc de - ld a,[de] - ld hl,$1 - add hl,bc - ld [hl],a - cp $4 - jp z,Func_fca0a - call Func_fcd17 - jp c,Func_fc9df - jp Func_fc9b4 - -Pointer_fc7e3: ; fc7e3 (3f:47e3) - db $0,$0 - db $1,$3 - db $4,$0 - db $ff,$3 - db $8,$ff - db $0,$3 - db $c,$1 - db $0,$3 - db $0,$0 - db $1,$4 - db $4,$0 - db $ff,$4 - db $8,$ff - db $0,$4 - db $c,$1 - db $0,$4 - -Func_fc803: ; fc803 (3f:4803) - call Func_fcae2 - ret c - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - dec [hl] - jr nz,.asm_fc823 - push hl - call Func_fccee - pop hl - cp $5 - jr nc,Func_fc842 - ld [hl],$20 - call Random - and $c - ld hl,$9 - add hl,bc - ld [hl],a -.asm_fc823 - xor a - ld hl,$7 - add hl,bc - ld [hli],a - ld [hl],a - call Func_fca99 - ret - -Func_fc82e: ; fc82e (3f:482e) - ld a,[wWalkCounter] - and a - ret z - scf - ret - -Func_fc835: ; fc835 (3f:4835) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$10 - ld hl,$1 - add hl,bc - ld [hl],$1 - ret - -Func_fc842: ; fc842 (3f:4842) - ld hl,$0 - push af - call Random - ld a,[hRandomAdd] - and %11 - ld e,a - ld d,$0 - ld hl,PointerTable_fc85a - add hl,de - add hl,de - ld a,[hli] - ld h,[hl] - ld l,a - pop af - jp hl - -PointerTable_fc85a: ; fc85a (3f:485a) - dw Func_fc862 - dw Func_fc8f8 - dw Func_fc92b - dw Func_fc95d - -Func_fc862: ; fc862 (3f:4862) - dec a - add a - add a - and $c - ld hl,$9 - add hl,bc - ld [hl],a - ld hl,$1 - add hl,bc - ld [hl],$6 - xor a - ld [wd432],a - ld [wd433],a - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$11 -asm_fc87f: ; fc87f (3f:487f) - ld a,[wd432] - ld e,a - ld a,[wd433] - ld d,a - call Func_fc82e - jr c,Func_fc8c7 - call Func_fc6c5 - ld hl,$4 - add hl,bc - ld a,[hl] - sub e - ld e,a - inc hl - inc hl - ld a,[hl] - sub d - ld d,a - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld a,[hl] - dec a - add a - add $d6 - ld l,a - ld a,$48 - adc $0 - ld h,a - ld a,[hli] - ld [wd432],a - add e - ld e,a - ld a,[hl] - ld [wd433],a - add d - ld d,a - ld hl,$4 - add hl,bc - ld [hl],e - inc hl - inc hl - ld [hl],d - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - dec [hl] - ret nz - jp Func_fc835 - -Func_fc8c7: ; fc8c7 (3f:48c7) - ld hl,$4 - add hl,bc - ld a,[hl] - sub e - ld [hl],a - inc hl - inc hl - ld a,[hl] - sub d - ld [hl],a - jp Func_fc835 - -Pointer_fc8d6: ; fc8d6 (3f:48d6) - db $0,$0,$fe,$1,$fc - db $2,$fe,$3,$0,$4 - db $fe,$3,$fc,$2,$fe - db $1,$0,$0,$fe,$ff - db $fc,$fe,$fe,$fd,$0 - db $fc,$fe,$fd,$fc,$fe - db $fe,$ff,$00,$00 - -Func_fc8f8: ; fc8f8 (3f:48f8) - ld hl,$1 - add hl,bc - ld [hl],$7 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$30 -asm_fc904: ; fc904 (3f:4904) - call Func_fc82e - jp c,Func_fc835 - call Func_fc6c5 - ld hl,$7 - add hl,bc - ld a,[hl] - inc a - cp $8 - ld [hl],a - jr nz,.asm_fc91f - xor a - ld [hli],a - ld a,[hl] - inc a - and %11 - ld [hl],a -.asm_fc91f - call Func_fca99 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - dec [hl] - ret nz - jp Func_fc835 - -Func_fc92b: ; fc92b (3f:492b) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$20 - ld hl,$1 - add hl,bc - ld [hl],$8 -asm_fc937: ; fc937 (3f:4937) - call Func_fc82e - jp c,Func_fc835 - call Func_fc6c5 - ld hl,$7 - add hl,bc - ld a,[hl] - inc a - cp $8 - ld [hl],a - jr nz,.asm_fc951 - xor a - ld [hli],a - ld a,[hl] - xor $1 - ld [hl],a -.asm_fc951 - call Func_fca99 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - dec [hl] - ret nz - jp Func_fc835 - -Func_fc95d: ; fc95d (3f:495d) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$20 - ld hl,$1 - add hl,bc - ld [hl],$9 -asm_fc969: ; fc969 (3f:4969) - call Func_fc82e - jp c,Func_fc835 - call Func_fc6c5 - ld hl,$7 - add hl,bc - ld a,[hl] - inc a - cp $8 - ld [hl],a - jr nz,.asm_fc988 - xor a - ld [hl],a - ld hl,$9 - add hl,bc - ld a,[hl] - call Func_fc994 - ld [hl],a -.asm_fc988 - call Func_fca99 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - dec [hl] - ret nz - jp Func_fc835 - -Func_fc994: ; fc994 (3f:4994) - push hl - ld hl,Pointer_fc9ac - ld d,a -.loop - ld a,[hli] - cp d - jr nz,.loop - ld a,[hl] - pop hl - ret - -Func_fc9a0: ; fc9a0 (3f:49a0) - push hl - ld hl,Pointer_fc9ac_End - ld d,a -.loop - ld a,[hld] - cp d - jr nz,.loop - ld a,[hl] - pop hl - ret - -Pointer_fc9ac: ; fc9ac (3f:49ac) - db SPRITE_FACING_DOWN,SPRITE_FACING_LEFT,SPRITE_FACING_UP,SPRITE_FACING_RIGHT - db SPRITE_FACING_DOWN,SPRITE_FACING_LEFT,SPRITE_FACING_UP,SPRITE_FACING_RIGHT -Pointer_fc9ac_End: -Func_fc9b4: ; fc9b4 (3f:49b4) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$8 - ld hl,$1 - add hl,bc - ld [hl],$3 - call Func_fca38 -asm_fc9c3: ; fc9c3 (3f:49c3) - call Func_fca4b - call Func_fca7e - call Func_fca99 - ld hl,$100 - add hl,bc - dec [hl] - ret nz - call Func_fca75 - call Func_fccb2 - ld hl,$1 - add hl,bc - ld [hl],$1 - ret - -Func_fc9df: ; fc9df (3f:49df) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$4 - ld hl,$1 - add hl,bc - ld [hl],$5 - call Func_fca38 -asm_fc9ee: ; fc9ee (3f:49ee) - call asm_fca59 - call Func_fca7e - call Func_fca99 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - dec [hl] - ret nz - call Func_fca75 - call Func_fccb2 - ld hl,$1 - add hl,bc - ld [hl],$1 - ret - -Func_fca0a: ; fca0a (3f:4a0a) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$8 - ld hl,$1 - add hl,bc - ld [hl],$4 - call Func_fca38 - call Func_fca38 -asm_fca1c: ; fca1c (3f:4a1c) - call asm_fca59 - call Func_fca7e - call Func_fca99 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - dec [hl] - ret nz - call Func_fca75 - call Func_fccb2 - ld hl,$1 - add hl,bc - ld [hl],$1 - ret - -Func_fca38: ; fca38 (3f:4a38) - ld hl,$3 - add hl,bc - ld e,[hl] - inc hl - inc hl - ld d,[hl] - ld hl,$104 - add hl,bc - ld a,[hl] - add e - ld [hli],a - ld a,[hl] - add d - ld [hl],a - ret - -Func_fca4b: ; fca4b (3f:4a4b) - ld a,[wWalkBikeSurfState] - cp $1 - jr nz,Func_fca68 - ld a,[wd736] - bit 6,a - jr nz,Func_fca68 -asm_fca59: ; fca59 (3f:4a59) - ld hl,$3 - add hl,bc - ld a,[hli] - add a - add a - add [hl] - ld [hli],a - ld a,[hli] - add a - add a - add [hl] - ld [hl],a - ret - -Func_fca68: ; fca68 (3f:4a68) - ld hl,$3 - add hl,bc - ld a,[hli] - add a - add [hl] - ld [hli],a - ld a,[hli] - add a - add [hl] - ld [hli],a - ret - -Func_fca75: ; fca75 (3f:4a75) - ld hl,$3 - add hl,bc - xor a - ld [hli],a - inc hl - ld [hl],a - ret - -Func_fca7e: ; fca7e (3f:4a7e) - call Func_fcdad - ld d,$2 - jr nc,.asm_fca87 - ld d,$5 -.asm_fca87 - ld hl,$7 - add hl,bc - ld a,[hl] - inc a - cp d - jr nz,.asm_fca91 - xor a -.asm_fca91 - ld [hli],a - ret nz - ld a,[hl] - inc a - and $3 - ld [hl],a - ret - -Func_fca99: ; fca99 (3f:4a99) - ld a,[wd430] - bit 3,a - jr nz,.asm_fcad1 - ld hl,$10e - add hl,bc - ld a,[hl] - dec a - swap a - ld d,a - ld a,[wd736] - bit 7,a - jr nz,.asm_fcad8 - ld hl,$9 - add hl,bc - ld a,[hl] - or d - ld d,a - ld a,[wFontLoaded] - bit 0,a - jr z,.asm_fcac4 - call Func_fcae2 - ret c - jr .asm_fcacb -.asm_fcac4 - ld hl,$8 - add hl,bc - ld a,d - or [hl] - ld d,a -.asm_fcacb - ld hl,$2 - add hl,bc - ld [hl],d - ret -.asm_fcad1 - ld hl,$2 - add hl,bc - ld [hl],$ff - ret -.asm_fcad8 - ld a,[wSpriteStateData1 + $2] - and $f - or d - ld [wSpriteStateData1 + $f2],a - ret - -Func_fcae2: ; fcae2 (3f:4ae2) - ld hl,$104 - add hl,bc - ld a,[wYCoord] - add $4 - cp [hl] - jr nz,.asm_fcaff - inc hl - ld a,[wXCoord] - add $4 - cp [hl] - jr nz,.asm_fcaff - ld hl,$2 - add hl,bc - ld [hl],$ff - scf - ret -.asm_fcaff - and a - ret - -Func_fcb01: ; fcb01 (3f:4b01) - push bc - push de - push hl - ld bc,wSpriteStateData1 + $f0 - ld a,[wXCoord] - add $4 - ld d,a - ld a,[wYCoord] - add $4 - ld e,a - ld hl,$104 - add hl,bc - ld a,[hl] - sub e - and a - jr z,.asm_fcb30 - cp $ff - jr z,.asm_fcb26 - cp $1 - jr z,.asm_fcb26 - jr .asm_fcb48 -.asm_fcb26 - ld hl,$105 - add hl,bc - ld a,[hl] - sub d - jr z,.asm_fcb43 - jr .asm_fcb48 -.asm_fcb30 - ld hl,$105 - add hl,bc - ld a,[hl] - sub d - cp $ff - jr z,.asm_fcb43 - cp $1 - jr z,.asm_fcb43 - and a - jr z,.asm_fcb43 - jr .asm_fcb48 -.asm_fcb43 - pop hl - pop de - pop bc - scf - ret -.asm_fcb48 - pop hl - pop de - pop bc - xor a - ret - -Func_fcb4d: ; fcb4d (3f:4b4d) - call Func_fcb52 - ld e,a - ret - -Func_fcb52: ; fcb52 (3f:4b52) - ld bc,wSpriteStateData1 + $f0 - ld a,[wXCoord] - add $4 - ld d,a - ld a,[wYCoord] - add $4 - ld e,a - ld hl,$104 - add hl,bc - ld a,[hl] - cp e - jr z,Func_fcb71 - jr nc,.asm_fcb6e - ld a,$4 - ret -.asm_fcb6e - ld a,$0 - ret - -Func_fcb71: ; fcb71 (3f:4b71) - ld hl,$105 - add hl,bc - ld a,[hl] - cp d - jr z,.asm_fcb81 - jr nc,.asm_fcb7e - ld a,$8 - ret -.asm_fcb7e - ld a,$c - ret -.asm_fcb81 - ld a,$ff - ret - -Func_fcb84: ; fcb84 (3f:4b84) - push bc - ld hl,wd437 - ld [hl],$ff - inc hl - ld bc,$10 - xor a - call FillMemory - pop bc - ret - -Func_fcb94: ; fcb94 (3f:4b94) - ld hl,wd437 - inc [hl] - ld e,[hl] - ld d,0 - ld hl,wd438 - add hl,de - ld [hl],a - ret - -Func_fcba1: ; fcba1 (3f:4ba1) - call Func_fcb84 - call Func_fcbac - ret c - call Func_fcb94 - ret - -Func_fcbac: ; fcbac (3f:4bac) - ld bc,wSpriteStateData1 + $f0 - ld hl,$104 - add hl,bc - ld a,[wYCoord] - add $4 - sub [hl] - jr z,.asm_fcbd7 - jr c,.asm_fcbca - call Func_fcc01 - jr c,.asm_fcbc6 - ld a,$5 - and a - ret -.asm_fcbc6 - ld a,$1 - and a - ret -.asm_fcbca - call Func_fcc01 - jr c,.asm_fcbd3 - ld a,$6 - and a - ret -.asm_fcbd3 - ld a,$2 - and a - ret -.asm_fcbd7 - ld hl,$105 - add hl,bc - ld a,[wXCoord] - add $4 - sub [hl] - jr z,.asm_fcbff - jr c,.asm_fcbf2 - call Func_fcc01 - jr c,.asm_fcbee - ld a,$8 - and a - ret -.asm_fcbee - ld a,$4 - and a - ret -.asm_fcbf2 - call Func_fcc01 - jr c,.asm_fcbfb - ld a,$7 - and a - ret -.asm_fcbfb - ld a,$3 - and a - ret -.asm_fcbff - scf - ret - -Func_fcc01: ; fcc01 (3f:4c01) - jr nc,.asm_fcc05 - cpl - inc a -.asm_fcc05 - cp $2 - ret - -Func_fcc08:: ; fcc08 (3f:4c08) - call Func_fcc23 - ret nc - ld a,[wd736] - bit 6,a - jr nz,.asm_fcc1b - call Func_fcc42 - ret c - call Func_fcb94 - ret -.asm_fcc1b - call Func_fcc64 - ret c - call Func_fcb94 - ret - -Func_fcc23: ; fcc23 (3f:4c28) - ld a,[wd430] - bit 5,a - jr nz,.asm_fcc40 - ld a,[wd430] - bit 7,a - jr nz,.asm_fcc40 - ld a,[wd472] - bit 7,a - jr z,.asm_fcc40 - ld a,[wWalkBikeSurfState] - and a - jr nz,.asm_fcc40 - scf - ret -.asm_fcc40 - and a - ret - -Func_fcc42: ; fcc42 (3f:4c42) - xor a - ld a,[wPlayerDirection] - bit 3,a - jr nz,.asm_fcc58 - bit 2,a - jr nz,.asm_fcc5b - bit 1,a - jr nz,.asm_fcc5e - bit 0,a - jr nz,.asm_fcc61 - scf - ret -.asm_fcc58 - ld a,$2 - ret -.asm_fcc5b - ld a,$1 - ret -.asm_fcc5e - ld a,$3 - ret -.asm_fcc61 - ld a,$4 - ret - -Func_fcc64: ; fcc64 (3f:4c64) - ld hl,wd430 - bit 6,[hl] - jr z,.asm_fcc6e - res 6,[hl] - ret -.asm_fcc6e - set 6,[hl] - xor a - ld a,[wPlayerDirection] - bit 3,a - jr nz,.asm_fcc86 - bit 2,a - jr nz,.asm_fcc89 - bit 1,a - jr nz,.asm_fcc8c - bit 0,a - jr nz,.asm_fcc8f - scf - ret -.asm_fcc86 - ld a,$6 - ret -.asm_fcc89 - ld a,$5 - ret -.asm_fcc8c - ld a,$7 - ret -.asm_fcc8f - ld a,$8 - ret - -Func_fcc92: ; fcc92 (3f:4c92) - ld hl,wd437 - ld a,[hl] - cp $ff - jr z,.asm_fccb0 - and a - jr z,.asm_fccb0 - dec [hl] - ld e,a - ld d,0 - ld hl,wd438 - add hl,de - inc e - ld a,$ff -.asm_fcca8 - ld d,[hl] - ldd [hl],a - ld a,d - dec e - jr nz,.asm_fcca8 - and a - ret -.asm_fccb0 - scf - ret - -Func_fccb2:: ; fccb2 (3f:4cb2) - call Func_fcd01 - and a - jr z,.asm_fccbf - dec a - and $3 - add a - add a - jr .asm_fccea -.asm_fccbf - ld a,[wYCoord] - add $4 - ld d,a - ld a,[wXCoord] - add $4 - ld e,a - ld a,[wSpriteStateData2 + $f4] - cp d - jr z,.asm_fccd9 - ld a,SPRITE_FACING_DOWN - jr c,.asm_fccea - ld a,SPRITE_FACING_UP - jr .asm_fccea -.asm_fccd9 - ld a,[wSpriteStateData2 + $f5] - cp e - jr z,.asm_fcce7 - ld a,SPRITE_FACING_RIGHT - jr c,.asm_fccea - ld a,SPRITE_FACING_LEFT - jr .asm_fccea -.asm_fcce7 - ld a,[wSpriteStateData1 + $9] -.asm_fccea - ld [wSpriteStateData1 + $f9],a - ret - -Func_fccee: ; fccee (3f:4cee) - ld hl,wd437 - ld a,[hl] - cp $ff - jr z,.asm_fccff - ld e,a - ld d,0 - ld hl,wd438 - add hl,de - ld a,[hl] - ret -.asm_fccff - xor a - ret - -Func_fcd01: ; fcd01 (3f:4d01) - ld hl,wd437 - ld a,[hl] - cp $ff - jr z,.asm_fcd15 - and a - jr z,.asm_fcd15 - ld e,a - ld d,0 - ld hl,wd438 - add hl,de - ld a,[hl] - ret -.asm_fcd15 - xor a - ret - -Func_fcd17: ; fcd17 (3f:4d17) - ld a,[wd437] - cp $ff - ret z - cp $2 - jr nc,.asm_fcd23 - and a - ret -.asm_fcd23 - scf - ret - -Func_fcd25: ; fcd25 (3f:4d25) - ld h,wSpriteStateData2 / $100 - ld a,[H_CURRENTSPRITEOFFSET] - add $4 - ld l,a - ld b,[hl] - ld a,[wYCoord] - cp b - jr z,.asm_fcd3a - jr nc,.asm_fcd63 - add $8 - cp b - jr c,.asm_fcd63 -.asm_fcd3a - inc l - ld b,[hl] - ld a,[wXCoord] - cp b - jr z,.asm_fcd49 - jr nc,.asm_fcd63 - add $9 - cp b - jr c,.asm_fcd63 -.asm_fcd49 - call Func_fcd83 - ld d,$60 - ld a,[hli] - ld e,a - cp d - jr nc,.asm_fcd63 - ld a,[hld] - cp d - jr nc,.asm_fcd63 - ld bc,-20 - add hl,bc - ld a,[hli] - cp d - jr nc,.asm_fcd63 - ld a,[hl] - cp d - jr c,.asm_fcd6f -.asm_fcd63 - ld h,wSpriteStateData1 / $100 - ld a,[H_CURRENTSPRITEOFFSET] - add $2 - ld l,a - ld [hl],$ff - scf - jr .asm_fcd82 -.asm_fcd6f - ld h,wSpriteStateData2 / $100 - ld a,[H_CURRENTSPRITEOFFSET] - add $7 - ld l,a - ld a,[wGrassTile] - cp e - ld a,$0 - jr nz,.asm_fcd80 - ld a,$80 -.asm_fcd80 - ld [hl],a - and a -.asm_fcd82 - ret - -Func_fcd83: ; fcd83 (3f:4d83) - ld h,wSpriteStateData1 / $100 - ld a,[H_CURRENTSPRITEOFFSET] - add $4 - ld l,a - ld a,[hli] - add $4 - and $f0 - srl a - ld c,a - ld b,$0 - inc l - ld a,[hl] - add $2 - srl a - srl a - srl a - add SCREEN_WIDTH - ld d,0 - ld e,a - ld hl,wTileMap - rept 5 - add hl,bc - endr - add hl,de - ret - -Func_fcdad: ; fcdad (3f:4dad) - push bc - push af - ld a,[wPikachuHappiness] - cp $50 - pop bc - ld a,b - pop bc - ret - -IsStarterPikachuInOurParty:: ; fcdb8 (3f:4db8) - ld hl,wPartySpecies - ld de,wPartyMon1OTID - ld bc,wPartyMonOT - push hl -.loop - pop hl - ld a,[hli] - push hl - inc a - jr z,.noPlayerPikachu - cp PIKACHU + 1 - jr nz,.curMonNotPlayerPikachu - ld h,d - ld l,e - ld a,[wPlayerID] - cp [hl] - jr nz,.curMonNotPlayerPikachu - inc hl - ld a,[wPlayerID+1] - cp [hl] - jr nz,.curMonNotPlayerPikachu - push de - push bc - ld hl,wPlayerName - ld d,$6 ; possible player length - 1 -.nameCompareLoop - dec d - jr z,.sameOT - ld a,[bc] - inc bc - cp [hl] - inc hl - jr z,.nameCompareLoop - pop bc - pop de -.curMonNotPlayerPikachu - ld hl,wPartyMon2 - wPartyMon1 - add hl,de - ld d,h - ld e,l - ld hl,NAME_LENGTH - add hl,bc - ld b,h - ld c,l - jr .loop -.sameOT - pop bc - pop de - ld h,d - ld l,e - ld bc,-NAME_LENGTH - add hl,bc - ld a,[hli] - or [hl] - jr z,.noPlayerPikachu ; XXX how is this determined? - pop hl - scf - ret -.noPlayerPikachu - pop hl - and a - ret - -IsThisPartymonStarterPikachu_Box:: ; fce0d (3f:4e0d) - ld hl,wBoxMon1 - ld bc,wBoxMon2 - wBoxMon1 - ld de,wBoxMonOT - jr asm_fce21 - -IsThisPartymonStarterPikachu_Party:: ; fce18 (3f:4e18) -IsThisPartymonStarterPikachu:: - ld hl,wPartyMon1 - ld bc,wPartyMon2 - wPartyMon1 - ld de,wPartyMonOT -asm_fce21: ; fce21 (3f:4e21) - ld a,[wWhichPokemon] - call AddNTimes - ld a,[hl] - cp PIKACHU - jr nz,.notPlayerPikachu - ld bc,wPartyMon1OTID - wPartyMon1 - add hl,bc - ld a,[wPlayerID] - cp [hl] - jr nz,.notPlayerPikachu - inc hl - ld a,[wPlayerID+1] - cp [hl] - jr nz,.notPlayerPikachu - ld h,d - ld l,e - ld a,[wWhichPokemon] - ld bc,NAME_LENGTH - call AddNTimes - ld de,wPlayerName - ld b,$6 -.loop - dec b - jr z,.isPlayerPikachu - ld a,[de] - inc de - cp [hl] - inc hl - jr z,.loop -.notPlayerPikachu - and a - ret -.isPlayerPikachu - scf - ret - -Func_fce5a:: ; fce5a (3f:4e5a) - push de - call IsStarterPikachuInOurParty - pop de - ret nc - ld a,d - cp $80 - ld a,[wPikachuMood] - jr c,.asm_fce6c - cp d - jr c,.asm_fce6e - ret -.asm_fce6c - cp d - ret c -.asm_fce6e - ld a,d - ld [wPikachuMood],a - ret - -Func_fce73:: ; fce73 (3f:4e73) -; function to test if a pokemon is alive? - xor a - ld [wWhichPokemon],a - ld hl,wPartyCount -.loop - inc hl - ld a,[hl] - cp $ff - jr z,.asm_fcea9 - push hl - call IsThisPartymonStarterPikachu_Party - pop hl - jr nc,.asm_fce9e - ld a,[wWhichPokemon] - ld hl,wPartyMon1HP - ld bc,wPartyMon2 - wPartyMon1 - call AddNTimes - ld a,[hli] - or [hl] - ld d,a - inc hl - inc hl - ld a,[hl] - and a - jr nz,.asm_fcea7 - jr .asm_fcea9 -.asm_fce9e - ld a,[wWhichPokemon] - inc a - ld [wWhichPokemon],a - jr .loop -.asm_fcea7 - scf - ret -.asm_fcea9 - and a - ret - -Func_fceab:: ; fceab (3f:4eab) - ld hl,wPartySpecies - ld de,wPartyMon1Moves - ld bc,wPartyMonOT - push hl -.loop - pop hl - ld a,[hli] - push hl - inc a - jr z,.noSurfingPlayerPikachu - cp PIKACHU+1 - jr nz,.curMonNotSurfingPlayerPikachu - ld h,d - ld l,e - push hl - push bc - ld b,NUM_MOVES -.moveSearchLoop - ld a,[hli] - cp SURF - jr z,.foundSurfingPikachu - dec b - jr nz,.moveSearchLoop - pop bc - pop hl - jr .curMonNotSurfingPlayerPikachu -.foundSurfingPikachu - pop bc - pop hl - inc hl - inc hl - inc hl - inc hl - ld a,[wPlayerID] - cp [hl] - jr nz,.curMonNotSurfingPlayerPikachu - inc hl - ld a,[wPlayerID+1] - cp [hl] - jr nz,.curMonNotSurfingPlayerPikachu - push de - push bc - ld hl,wPlayerName - ld d,$6 -.nameCompareLoop - dec d - jr z,.foundSurfingPlayerPikachu - ld a,[bc] - inc bc - cp [hl] - inc hl - jr z,.nameCompareLoop - pop bc - pop de -.curMonNotSurfingPlayerPikachu - ld hl,wPartyMon2 - wPartyMon1 - add hl,de - ld d,h - ld e,l - ld hl,NAME_LENGTH - add hl,bc - ld b,h - ld c,l - jr .loop -.foundSurfingPlayerPikachu - pop bc - pop de - pop hl - scf - ret -.noSurfingPlayerPikachu - pop hl - and a - ret - -Func_fcf0c:: ; fcf0c (3f:4f0c) - dr $fcf0c,$fd001 -Func_fd001:: ; fd001 (3f:5001) - dr $fd001,$fd004 -Func_fd004:: ; fd004 (3f:5004) - dr $fd004,$fd0d0 -Func_fd0d0:: ; fd0d0 (3f:50d0) - dr $fd0d0,$fd252 -Func_fd252: ; fd252 (3f:5252) - dr $fd252,$fd2a1 -Func_fd2a1:: ; fd2a1 (3f:52a1) - dr $fd2a1,$fe66f - -OfficerJennySprite: INCBIN "gfx/sprites/officer_jenny.2bpp" -PikachuSprite: INCBIN "gfx/sprites/pikachu.2bpp" -SandshrewSprite: INCBIN "gfx/sprites/sandshrew.2bpp" -OddishSprite: INCBIN "gfx/sprites/oddish.2bpp" -BulbasaurSprite: INCBIN "gfx/sprites/bulbasaur.2bpp" -JigglypuffSprite: INCBIN "gfx/sprites/jigglypuff.2bpp" -Clefairy2Sprite: INCBIN "gfx/sprites/clefairy2.2bpp" -ChanseySprite: INCBIN "gfx/sprites/chansey.2bpp" -SurfingPikachuSprite: INCBIN "gfx/sprites/surfing_pikachu.2bpp" -JessieSprite: INCBIN "gfx/sprites/jessie.2bpp" -JamesSprite: INCBIN "gfx/sprites/james.2bpp" \ No newline at end of file diff --git a/engine/battle/bank3d_battle.asm b/engine/battle/bank3d_battle.asm new file mode 100644 index 00000000..b9713cec --- /dev/null +++ b/engine/battle/bank3d_battle.asm @@ -0,0 +1,291 @@ +InitBattle: ; f5ff2 (3d:5ff2) + ld a, [wCurOpponent] + and a + jr z, asm_f6003 + +InitOpponent: ; f5ff8 (3d:5ff8) + ld a, [wCurOpponent] + ld [wcf91], a + ld [wEnemyMonSpecies2], a + jr asm_f601d +asm_f6003: ; f6003 (3d:6003) + ld a, [wd732] + bit 1, a + jr z, .asm_f600f + ld a, [hJoyHeld] + bit 1, a ; B button pressed? + ret nz +.asm_f600f + ld a, [wNumberOfNoRandomBattleStepsLeft] + and a + ret nz + callab TryDoWildEncounter + ret nz +asm_f601d: ; f601d (f:601d) + ld a, [wMapPalOffset] + push af + ld hl, wLetterPrintingDelayFlags + ld a, [hl] + push af + res 1, [hl] + call InitBattleVariables ; 3d:6236 + ld a, [wEnemyMonSpecies2] + sub $c8 + jp c, InitWildBattle + ld [wTrainerClass], a + call GetTrainerInformation + callab ReadTrainer + callab DoBattleTransitionAndInitBattleVariables + call _LoadTrainerPic ; 3d:615a + xor a + ld [wEnemyMonSpecies2], a + ld [$ffe1], a + dec a + ld [wAICount], a + coord hl, 12, 0 + predef CopyUncompressedPicToTilemap + ld a, $ff + ld [wEnemyMonPartyPos], a + ld a, $2 + ld [wIsInBattle], a + + ; Is this a major story battle? + ld a,[wLoneAttackNo] + and a + jp z,InitBattle_Common + callabd_ModifyPikachuHappiness PIKAHAPPY_GYMLEADER ; useless since already in bank3d + jp InitBattle_Common + +InitWildBattle: ; f607c (3d:607c) + ld a, $1 + ld [wIsInBattle], a + callab LoadEnemyMonData + callab DoBattleTransitionAndInitBattleVariables + ld a, [wCurOpponent] + cp MAROWAK + jr z, .isGhost + callab IsGhostBattle + jr nz, .isNoGhost +.isGhost + ld hl, wMonHSpriteDim + ld a, $66 + ld [hli], a ; write sprite dimensions + ld bc, GhostPic + ld a, c + ld [hli], a ; write front sprite pointer + ld [hl], b + ld hl, wEnemyMonNick ; set name to "GHOST" + ld a, "G" + ld [hli], a + ld a, "H" + ld [hli], a + ld a, "O" + ld [hli], a + ld a, "S" + ld [hli], a + ld a, "T" + ld [hli], a + ld [hl], "@" + ld a, [wcf91] + push af + ld a, MON_GHOST + ld [wcf91], a + ld de, vFrontPic + call LoadMonFrontSprite ; load ghost sprite + pop af + ld [wcf91], a + jr .spriteLoaded +.isNoGhost + ld de, vFrontPic + call LoadMonFrontSprite ; load mon sprite +.spriteLoaded + xor a + ld [wTrainerClass], a + ld [$ffe1], a + coord hl, 12, 0 + predef CopyUncompressedPicToTilemap + +; common code that executes after init battle code specific to trainer or wild battles +InitBattle_Common: ; f60eb (3d:60eb) + ld b, $0 + call RunPaletteCommand + callab SlidePlayerAndEnemySilhouettesOnScreen + xor a + ld [H_AUTOBGTRANSFERENABLED], a + ld hl, .emptyString + call PrintText + call SaveScreenTilesToBuffer1 + call ClearScreen + ld a, $98 + ld [$ffbd], a + ld a, $1 + ld [H_AUTOBGTRANSFERENABLED], a + call Delay3 + ld a, $9c + ld [$ffbd], a + call LoadScreenTilesFromBuffer1 + coord hl, 9, 7 + ld bc, $50a + call ClearScreenArea + coord hl, 1, 0 + ld bc, $40a + call ClearScreenArea + call ClearSprites + ld a, [wIsInBattle] + dec a ; is it a wild battle? + ld hl, DrawEnemyHUDAndHPBar + ld b,BANK(DrawEnemyHUDAndHPBar) + call z, Bankswitch ; draw enemy HUD and HP bar if it's a wild battle + callab StartBattle + callab EndOfBattle + pop af + ld [wLetterPrintingDelayFlags], a + pop af + ld [wMapPalOffset], a + ld a, [wSavedTilesetType] + ld [hTilesetType], a + scf + ret +.emptyString + db "@" + +_LoadTrainerPic: ; f615a (3d:615a) +; wd033-wd034 contain pointer to pic + ld a, [wTrainerPicPointer] ; wd033 + ld e, a + ld a, [wTrainerPicPointer + 1] ; wd034 + ld d, a ; de contains pointer to trainer pic + ld a, [wLinkState] + and a + ld a, Bank(TrainerPics) ; this is where all the trainer pics are (not counting Red's) + jr z, .loadSprite + ld a, Bank(RedPicFront) +.loadSprite + call UncompressSpriteFromDE + ld de, vFrontPic + ld a, $77 + ld c, a + jp LoadUncompressedSpriteData + +LoadMonBackPic: ; f6178 (3d:6178) +; Assumes the monster's attributes have +; been loaded with GetMonHeader. + ld a, [wBattleMonSpecies2] + ld [wcf91], a + coord hl, 1, 5 + ld bc,$708 + call ClearScreenArea + ld hl, wMonHBackSprite - wMonHeader + call UncompressMonSprite + predef ScaleSpriteByTwo + ld de, vBackPic + call InterlaceMergeSpriteBuffers ; combine the two buffers to a single 2bpp sprite + ld hl, vSprites + ld de, vBackPic + ld c, (2*SPRITEBUFFERSIZE)/16 ; count of 16-byte chunks to be copied + ld a, [H_LOADEDROMBANK] + ld b, a + jp CopyVideoData + +Func_f61a6: ; f61a6 (3d:f61a6) + ld a, [wPredefRegisters] + ld h, a + ld a, [wPredefRegisters + 1] + ld l, a + ld a, [$ffe1] + ld [H_DOWNARROWBLINKCNT1], a + ld b, $4c + ld a, [wIsInBattle] + and a + jr z, .asm_f61ef + add b + ld [hl], a + call Delay3 + ld bc, -41 + add hl, bc + ld a, $1 + ld [wNumMovesMinusOne], a + ld bc, $303 + predef CopyDownscaledMonTiles + ld c, $4 + call DelayFrames + ld bc, -41 + add hl, bc + xor a + ld [wNumMovesMinusOne], a + ld bc, $505 + predef CopyDownscaledMonTiles + ld c, $5 + call DelayFrames + ld bc, -41 + jr .asm_f61f2 +.asm_f61ef + ld bc, -123 +.asm_f61f2 + add hl, bc + ld a, [H_DOWNARROWBLINKCNT1] + add $31 + jr CopyUncompressedPicToHL + +Func_f61f9: ; f61f9 (3d:61f9) + ld a, [wPredefRegisters] + ld h, a + ld a, [wPredefRegisters + 1] + ld l, a + ld a, [$ffe1] +CopyUncompressedPicToHL: ; f6203 (3d:6203) + ld bc, $707 + ld de, $14 + push af + ld a, [W_SPRITEFLIPPED] + and a + jr nz, .asm_f6220 + pop af +.asm_f6211 + push bc + push hl +.asm_f6213 + ld [hl], a + add hl, de + inc a + dec c + jr nz, .asm_f6213 + pop hl + inc hl + pop bc + dec b + jr nz, .asm_f6211 + ret + +.asm_f6220 + push bc + ld b, $0 + dec c + add hl, bc + pop bc + pop af +.asm_f6227 + push bc + push hl +.asm_f6229 + ld [hl], a + add hl, de + inc a + dec c + jr nz, .asm_f6229 + pop hl + dec hl + pop bc + dec b + jr nz, .asm_f6227 + ret + +INCLUDE "engine/battle/init_battle_variables.asm" +INCLUDE "engine/battle/moveEffects/focus_energy_effect.asm" +INCLUDE "engine/battle/moveEffects/heal_effect.asm" +INCLUDE "engine/battle/moveEffects/transform_effect.asm" +INCLUDE "engine/battle/moveEffects/reflect_light_screen_effect.asm" +INCLUDE "engine/battle/moveEffects/mist_effect.asm" +INCLUDE "engine/battle/moveEffects/one_hit_ko_effect.asm" +INCLUDE "engine/battle/moveEffects/pay_day_effect.asm" +INCLUDE "engine/battle/moveEffects/paralyze_effect.asm" \ No newline at end of file diff --git a/engine/menu/link_menu.asm b/engine/menu/link_menu.asm new file mode 100644 index 00000000..73e19038 --- /dev/null +++ b/engine/menu/link_menu.asm @@ -0,0 +1,910 @@ +Func_f531b:: ; f531b (3d:531b) + ld c,$14 + call DelayFrames + ld a,$1 + ld [wBuffer],a + xor a + ld [wUnknownSerialFlag_d499],a + coord hl, 0,0 + lb bc, 4, 5 + call TextBoxBorder + ld de,Text_f5791 + coord hl, 1,2 + call PlaceString + coord hl, 8,0 + lb bc, 8, 10 + call TextBoxBorder + coord hl, 10,2 + ld de,Text_f579c + call PlaceString + coord hl, 0,10 + lb bc, 6, 18 + call TextBoxBorder + call UpdateSprites + xor a + ld [wUnusedCD37],a + ld [wd72d],a + ld [wd11e],a + ld hl,wTopMenuItemY + ld a,$2 + ld [hli],a + ld a,$9 + ld [hli],a + xor a + ld [hli],a + inc hl + ld a,$3 + ld [hli],a + ld a,$3 + ld [hli],a + xor a + ld [hl],a +.asm_f5377 + call Func_f56bd + call HandleMenuInput + and $3 + add a + add a + ld b,a + ld a,[wCurrentMenuItem] + cp $3 + jr nz,.asm_f5390 + bit 2,b + jr z,.asm_f5390 + dec a + ld b,$8 +.asm_f5390 + add b + add $c0 + ld [wLinkMenuSelectionSendBuffer],a + ld [wLinkMenuSelectionSendBuffer+1],a +.asm_f5399 + ld hl,wLinkMenuSelectionSendBuffer + ld a,[hl] + ld [hSerialSendData],a + call Serial_ExchangeByte + push af + ld hl,wLinkMenuSelectionSendBuffer + ld a,[hl] + ld [hSerialSendData],a + call Serial_ExchangeByte + pop bc + cp b + jr nz,.asm_f5399 + and $f0 + cp $c0 + jr nz,.asm_f5399 + ld a,b + and $c + jr nz,.asm_f53c4 + ld a,[wLinkMenuSelectionSendBuffer] + and $c + jr z,.asm_f5377 + jr .asm_f53df +.asm_f53c4 + ld a,[wLinkMenuSelectionSendBuffer] + and $c + jr z,.asm_f53d1 + ld a,[hSerialConnectionStatus] + cp $2 + jr z,.asm_f53df +.asm_f53d1 + ld a,$1 + ld [wd11e],a + ld a,b + ld [wLinkMenuSelectionSendBuffer],a + and $3 + ld [wCurrentMenuItem],a +.asm_f53df + call DelayFrame + call DelayFrame + ld hl,wLinkMenuSelectionSendBuffer + ld a,[hl] + ld [hSerialSendData],a + call Serial_ExchangeByte + call Serial_ExchangeByte + ld b,$14 +.loop + call DelayFrame + call Serial_SendZeroByte + dec b + jr nz,.loop + ld b,$7f + ld c,$7f + ld d,$7f + ld e,$ec + ld a,[wLinkMenuSelectionSendBuffer] + bit 3,a + jr nz,.asm_f541a + ld b,e + ld e,c + ld a,[wCurrentMenuItem] + and a + jr z,.asm_f541a + ld c,b + ld b,d + dec a + jr z,.asm_f541a + ld d,c + ld c,b +.asm_f541a + ld a,b + Coorda 9,2 + ld a,c + Coorda 9,4 + ld a,d + Coorda 9,6 + ld a,e + Coorda 9,8 + ld c,40 + call DelayFrames + ld a,[wLinkMenuSelectionSendBuffer] + bit 3,a + jr nz,asm_f547f + ld a,[wCurrentMenuItem] + cp $3 + jr z,asm_f547f + inc a + ld [wUnknownSerialFlag_d499],a + ld a,[wCurrentMenuItem] + ld hl,PointerTable_f5488 + ld c,a + ld b,$0 + add hl,bc + add hl,bc + ld a,[hli] + ld h,[hl] + ld l,a + ld de,.returnaddress + push de + jp hl +.returnaddress + ld [wLinkMenuSelectionSendBuffer],a + xor a + ld [wUnknownSerialCounter],a + ld [wUnknownSerialCounter+1],a + call Serial_SyncAndExchangeNybble + ld a,[wLinkMenuSelectionSendBuffer] + and a + jr nz,asm_f547c + ld a, [wLinkMenuSelectionReceiveBuffer] + and a + jr nz, Func_f5476 + xor a + ld [wUnknownSerialCounter],a + ld [wUnknownSerialCounter+1],a + and a + ret + +Func_f5476:: ; f5476 (3d:5476) + ld hl,ColosseumIneligibleText + call PrintText +asm_f547c:: ; f547c (3d:574c) + jp Func_f531b + +asm_f547f:: ; f547f (3d:547f) + xor a + ld [wUnknownSerialCounter],a + ld [wUnknownSerialCounter+1],a + scf + ret + +PointerTable_f5488:: ; f5488 (3d:5488) + dw PokeCup + dw PikaCup + dw PetitCup + +PokeCup:: ; f548e (3d:548e) + ld hl,wPartyCount + ld a,[hli] + cp $3 + jp nz,NotThreeMonsInParty + ld b,$3 +.loop + ld a,[hli] + cp MEW + jp z,MewInParty + dec b + jr nz,.loop + dec hl + dec hl + cp [hl] ; is third mon second mon? + jp z,DuplicateSpecies + dec hl ; wPartySpecies + cp [hl] ; is third mon first mon? + jp z,DuplicateSpecies + ld a,[hli] + cp [hl] ; is first mon second mon? + jp z,DuplicateSpecies + ld a,[wPartyMon1Level] + cp 56 + jp nc,LevelAbove55 + cp 50 + jp c,LevelUnder50 + ld b,a + ld a,[wPartyMon2Level] + cp 56 + jp nc,LevelAbove55 + cp 50 + jp c,LevelUnder50 + ld c,a + ld a,[wPartyMon3Level] + cp 56 + jp nc,LevelAbove55 + cp 50 + jp c,LevelUnder50 + add b + add c + cp 156 + jp nc,CombinedLevelsGreaterThan155 + xor a + ret + +PikaCup:: ; f54e4 (3d:54e4) + ld hl,wPartyCount + ld a,[hli] + cp $3 + jp nz,NotThreeMonsInParty + ld b,$3 +.loop + ld a,[hli] ; wPartySpecies + cp MEW + jp z,MewInParty + dec b + jr nz,.loop + dec hl + dec hl + cp [hl] ; is third mon second mon? + jp z,DuplicateSpecies + dec hl ; wPartySpecies + cp [hl] ; is third mon first mon? + jp z,DuplicateSpecies + ld a,[hli] + cp [hl] ; is first mon second mon? + jp z,DuplicateSpecies + ld a,[wPartyMon1Level] + cp 21 + jp nc,LevelAbove20 + cp 15 + jp c,LevelUnder15 + ld b,a + ld a,[wPartyMon2Level] + cp 21 + jp nc,LevelAbove20 + cp 15 + jp c,LevelUnder15 + ld c,a + ld a,[wPartyMon3Level] + cp 21 + jp nc,LevelAbove20 + cp 15 + jp c,LevelUnder15 + add b + add c + cp 51 + jp nc,CombinedLevelsAbove50 + xor a + ret + +PetitCup:: ; f553a (3d:553a) + ld hl,wPartyCount + ld a,[hli] + cp $3 + jp nz,NotThreeMonsInParty + ld b,$3 +.loop + ld a,[hli] + cp MEW + jp z,MewInParty + dec b + jr nz,.loop + dec hl + dec hl + cp [hl] ; is third mon second mon? + jp z,DuplicateSpecies + dec hl ; wPartySpecies + cp [hl] ; is third mon first mon? + jp z,DuplicateSpecies + ld a,[hli] + cp [hl] ; is first mon second mon? + jp z,DuplicateSpecies + dec hl + ld a,[hl] + ld [wcf91],a + push hl + callab Func_3b10f + pop hl + jp c,asm_f56ad + inc hl + ld a,[hl] + ld [wcf91],a + push hl + callab Func_3b10f + pop hl + jp c,asm_f56ad + inc hl + ld a,[hl] + ld [wcf91],a + push hl + callab Func_3b10f + pop hl + jp c,asm_f56ad + dec hl + dec hl + ld b,$3 +.bigloop + ld a,[hli] + push hl + push bc + push af + dec a + ld c,a + ld b,$0 + ld hl,PokedexEntryPointers + add hl,bc + add hl,bc + ld de,wcd6d + ld bc,$2 + ld a,BANK(PokedexEntryPointers) + call FarCopyData + ld hl,wcd6d + ld a,[hli] + ld h,[hl] + ld l,a + ld de,wcd6d + ld bc,$14 + ld a,BANK(PokedexEntryPointers) + call FarCopyData + ld hl,wcd6d +.loop2 + ld a,[hli] + cp "@" + jr nz,.loop2 + ld a,[hli] + cp $7 + jp nc,asm_f5689 + add a + add a + ld b,a + add a + add b + ld b,a + ld a,[hli] + add b + cp $51 + jp nc,asm_f5689 + ld a,[hli] + sub $b9 + ld a,[hl] + sbc $1 + jp nc,asm_f569b + pop af + pop bc + pop hl + dec b + jr nz,.bigloop + ld a,[wPartyMon1Level] + cp 31 + jp nc,LevelAbove30 + cp 25 + jp c,LevelUnder25 + ld b,a + ld a,[wPartyMon2Level] + cp 31 + jp nc,LevelAbove30 + cp 25 + jp c,LevelUnder25 + ld c,a + ld a,[wPartyMon3Level] + cp 31 + jp nc,LevelAbove30 + cp 25 + jp c,LevelUnder25 + add b + add c + cp 81 + jp nc,CombinedLevelsAbove80 + xor a + ret + +NotThreeMonsInParty:: ; f561d (3d:516d) + ld hl,Colosseum3MonsText + call PrintText + ld a,$1 + ret + +MewInParty:: ; f5626 (3d:f5626) + ld hl,ColosseumMewText + call PrintText + ld a,$2 + ret + +DuplicateSpecies:: ; f562f (3d:f562f) + ld hl,ColosseumDifferentMonsText + call PrintText + ld a,$3 + ret + +LevelAbove55:: ; f5638 (3d:5638) + ld hl,ColosseumMaxL55Text + call PrintText + ld a,$4 + ret + +LevelUnder50:: ; f5641 (3d:5641) + ld hl,ColosseumMinL50Text + call PrintText + ld a,$5 + ret + +CombinedLevelsGreaterThan155:: ; f5641 (3d:564a) + ld hl,ColosseumTotalL155Text + call PrintText + ld a,$6 + ret + +LevelAbove30:: ; f5653 (3d:5653) + ld hl,ColosseumMaxL30Text + call PrintText + ld a,$7 + ret + +LevelUnder25:: ; f565c (3d:565c) + ld hl,ColosseumMinL25Text + call PrintText + ld a,$8 + ret + +CombinedLevelsAbove80:: ; f5665 (3d:5665) + ld hl,ColosseumTotalL80Text + call PrintText + ld a,$9 + ret + +LevelAbove20:: ; f566e (3d:566e) + ld hl,ColosseumMaxL20Text + call PrintText + ld a,$a + ret + +LevelUnder15:: ; f5677 (3d:5677) + ld hl,ColosseumMinL15Text + call PrintText + ld a,$b + ret + +CombinedLevelsAbove50:: ; f5680 (3d:5680) + ld hl,ColosseumTotalL50Text + call PrintText + ld a,$c + ret + +asm_f5689:: ; f5689 (3d:5689) + pop af + pop bc + pop hl + ld [wd11e],a + call GetMonName + ld hl,ColosseumHeightText + call PrintText + ld a,$d + ret + +asm_f569b:: ; f569b (3d:569b) + pop af + pop bc + pop hl + ld [wd11e],a + call GetMonName + ld hl,ColosseumWeightText + call PrintText + ld a,$e + ret + +asm_f56ad:: ; f56ad (3d:56ad) + ld a,[hl] + ld [wd11e],a + call GetMonName + ld hl,ColosseumEvolvedText + call PrintText + ld a,$f + ret + +Func_f56bd:: ; f56bd (3d:56bd) + xor a + ld [H_AUTOBGTRANSFERENABLED],a + coord hl, 1,11 + lb bc, 6, 18 + call ClearScreenArea + ld a,[wCurrentMenuItem] + cp $3 + jr nc,.asm_f56e6 + ld hl,PointerTable_f56ee + ld a,[wCurrentMenuItem] + ld c,a + ld b,$0 + add hl,bc + add hl,bc + ld a,[hli] + ld h,[hl] + ld l,a + ld d,h + ld e,l + coord hl, 1,12 + call PlaceString +.asm_f56e6 + call Delay3 + ld a,$1 + ld [H_AUTOBGTRANSFERENABLED],a + ret + +PointerTable_f56ee:: ; f56ee (3d:56ee) + dw Text_f56f4 + dw Text_f5728 + dw Text_f575b + +Text_f56f4:: ; f56f4 (3d:56f4) + db "LVs of 3:50-55" + next "Sum of LVs:155 MAX" + next "MEW can't attend.@" + +Text_f5728:: ; f5728 (3d:5728) + db "LVs of 3:15-20" + next "Sum of LVs:50 MAX" + next "MEW can't attend.@" + +Text_f575b:: ; f575b (3d:575b) + db "3 Basic .LV25-30" + next "Sum of LVs:80 MAX" + next "6′8″ and 44lb MAX@" + +Text_f5791:: ; f5791 (3d:5791) + db "View" + next "Rules@" + +Text_f579c:: ; f579c (3d:579c) + db "# Cup" + next "Pika Cup" + next "Petit Cup" + next "CANCEL@" + +Colosseum3MonsText:: ; f57bc (3d:57bc) + TX_FAR _Colosseum3MonsText ; a0a2b + db "@" + +ColosseumMewText:: ; f57c1 (3d:57c1) + TX_FAR _ColosseumMewText ; a0a46 + db "@" + +ColosseumDifferentMonsText:: ; f57c6 (3d:57c6) + TX_FAR _ColosseumDifferentMonsText ; a0a5f + db "@" + +ColosseumMaxL55Text:: ; f57cb (3d:57cb) + TX_FAR _ColosseumMaxL55Text ; a0a81 + db "@" + +ColosseumMinL50Text:: ; f57d0 (3d:57d0) + TX_FAR _ColosseumMinL50Text ; a0a9a + db "@" + +ColosseumTotalL155Text:: ; f57d5 (3d:57d5) + TX_FAR _ColosseumTotalL155Text ; a0aba + db "@" + +ColosseumMaxL30Text:: ; f57da (3d:57da) + TX_FAR _ColosseumMaxL30Text ; a0ad9 + db "@" + +ColosseumMinL25Text:: ; f57df (3d:57df) + TX_FAR _ColosseumMinL25Text ; a0af2 + db "@" + +ColosseumTotalL80Text:: ; f57e4 (3d:57e4) + TX_FAR _ColosseumTotalL80Text ; a0b12 + db "@" + +ColosseumMaxL20Text:: ; f57e9 (3d:57e9) + TX_FAR _ColosseumMaxL20Text ; a0b30 + db "@" + +ColosseumMinL15Text:: ; f57ee (3d:57ee) + TX_FAR _ColosseumMinL15Text ; a0b49 + db "@" + +ColosseumTotalL50Text:: ; f57f3 (3d:57f3) + TX_FAR _ColosseumTotalL50Text ; a0b69 + db "@" + +ColosseumHeightText:: ; f57f8 (3d:57f8) + TX_FAR _ColosseumHeightText ; a0b87 + db "@" + +ColosseumWeightText:: ; f57fd (3d:57fd) + TX_FAR _ColosseumWeightText ; a0b9f + db "@" + +ColosseumEvolvedText:: ; f5802 (3d:5802) + TX_FAR _ColosseumEvolvedText ; a0bbb + db "@" + +ColosseumIneligibleText:: ; f5807 (3d:5807) + TX_FAR _ColosseumIneligibleText ; a0bd4 + db "@" + +LinkMenu: ; f580c (3d:580c) + xor a + ld [wLetterPrintingDelayFlags], a + ld hl, wd72e + set 6, [hl] + ld hl, TextTerminator_f5a16 + call PrintText + call SaveScreenTilesToBuffer1 + ld hl, ColosseumWhereToText + call PrintText + coord hl, 5, 3 + lb bc, 8, 13 + call TextBoxBorder + call UpdateSprites + coord hl, 7, 5 + ld de, TradeCenterText + call PlaceString + xor a + ld [wUnusedCD37], a + ld [wd72d], a + ld [wd11e], a + ld hl, wTopMenuItemY + ld a, $5 + ld [hli], a + ld a, $6 + ld [hli], a + xor a + ld [hli], a + inc hl + ld a, $3 + ld [hli], a + ld [hli], a + xor a + ld [hl], a +.waitForInputLoop + call HandleMenuInput + and A_BUTTON | B_BUTTON + add a + add a + ld b, a + ld a, [wCurrentMenuItem] + cp $3 + jr nz,.asm_f586b + bit 2,b + jr z,.asm_f586b + dec a + ld b,$8 +.asm_f586b + add b + add $d0 + ld [wLinkMenuSelectionSendBuffer], a + ld [wLinkMenuSelectionSendBuffer + 1], a +.exchangeMenuSelectionLoop + call Serial_ExchangeLinkMenuSelection + ld a, [wLinkMenuSelectionReceiveBuffer] + ld b, a + and $f0 + cp $d0 + jr z, .asm_f5c7d + ld a, [wLinkMenuSelectionReceiveBuffer + 1] + ld b, a + and $f0 + cp $d0 + jr nz, .exchangeMenuSelectionLoop +.asm_f5c7d + ld a, b + and $c ; did the enemy press A or B? + jr nz, .enemyPressedAOrB +; the enemy didn't press A or B + ld a, [wLinkMenuSelectionSendBuffer] + and $c ; did the player press A or B? + jr z, .waitForInputLoop ; if neither the player nor the enemy pressed A or B, try again + jr .doneChoosingMenuSelection ; if the player pressed A or B but the enemy didn't, use the player's selection +.enemyPressedAOrB + ld a, [wLinkMenuSelectionSendBuffer] + and $c ; did the player press A or B? + jr z, .useEnemyMenuSelection ; if the enemy pressed A or B but the player didn't, use the enemy's selection +; the enemy and the player both pressed A or B +; The gameboy that is clocking the connection wins. + ld a, [hSerialConnectionStatus] + cp USING_INTERNAL_CLOCK + jr z, .doneChoosingMenuSelection +.useEnemyMenuSelection + ld a, $1 + ld [wd11e], a + ld a, b + ld [wLinkMenuSelectionSendBuffer], a + and $3 + ld [wCurrentMenuItem], a ; wCurrentMenuItem +.doneChoosingMenuSelection + ld a, [hSerialConnectionStatus] + cp USING_INTERNAL_CLOCK + jr nz, .skipStartingTransfer + call DelayFrame + call DelayFrame + ld a, START_TRANSFER_INTERNAL_CLOCK + ld [rSC], a +.skipStartingTransfer + ld b, " " + ld c, " " + ld d, " " + ld e, "▷" + ld a, [wLinkMenuSelectionSendBuffer] + and (B_BUTTON << 2) ; was B button pressed? + jr nz, .updateCursorPosition +; A button was pressed + ld a, [wCurrentMenuItem] + cp $2 + jp z, .asm_f5963 + ld b, e + ld e, c + ld a, [wCurrentMenuItem] + and a + jr z, .updateCursorPosition + ld c, b + ld b, d + dec a + jr z, .updateCursorPosition + ld d, c + ld c, b +.updateCursorPosition + call Func_f59ec + call LoadScreenTilesFromBuffer1 + ld a, [wLinkMenuSelectionSendBuffer] + and (B_BUTTON << 2) ; was B button pressed? + jr nz, .choseCancel ; cancel if B pressed + ld a, [wCurrentMenuItem] + cp $2 + jr z, .choseCancel + xor a + ld [wWalkBikeSurfState], a ; start walking + ld a, [wCurrentMenuItem] + and a + ld a, COLOSSEUM + jr nz, .next + ld a, TRADE_CENTER +.next + ld [wd72d], a + ld hl, ColosseumPleaseWaitText + call PrintText + ld c, 50 + call DelayFrames + ld hl, wd732 + res 1, [hl] + ld a, [wAnimationID] + ld [wDestinationMap], a + callab SpecialWarpIn + ld c, 20 + call DelayFrames + xor a + ld [wMenuJoypadPollCount], a + ld [wSerialExchangeNybbleSendData], a + inc a ; LINK_STATE_IN_CABLE_CLUB + ld [wLinkState], a + ld [wEnteringCableClub], a + jpab SpecialEnterMap +.choseCancel + xor a + ld [wMenuJoypadPollCount], a + call Delay3 + callab CloseLinkConnection + ld hl, ColosseumCanceledText + call PrintText + ld hl, wd72e + res 6, [hl] + ret + +.asm_f5963 + ld a,[wd11e] + and a + jr nz,.asm_f5974 + ld b," " + ld c," " + ld d,"▷" + ld e," " + call Func_f59ec +.asm_f5974 + xor a + ld [wBuffer], a + ld a,$ff + ld [wSerialExchangeNybbleReceiveData],a + ld a, $b + ld [wLinkMenuSelectionSendBuffer], a + ld b,$78 +.loop + ld a,[hSerialConnectionStatus] + cp $2 + call z,DelayFrame + dec b + jr z,.asm_f59b2 + call Serial_ExchangeNybble + call DelayFrame + ld a,[wSerialExchangeNybbleReceiveData] + inc a + jr z,.loop + ld b,$f +.loop2 + call DelayFrame + call Serial_ExchangeNybble + dec b + jr nz,.loop2 + ld b,$f +.loop3 + call DelayFrame + call Serial_SendZeroByte + dec b + jr nz,.loop3 + jr .asm_f59d6 + +.asm_f59b2 + xor a + ld [wUnknownSerialCounter],a + ld [wUnknownSerialCounter+1],a + ld a,[wd11e] + and a + jr z,.asm_f59cd + ld b," " + ld c," " + ld d," " + ld e,"▷" + call Func_f59ec + jp .choseCancel + +.asm_f59cd + ld hl,ColosseumVersionText + call PrintText + jp .choseCancel + +.asm_f59d6 + ld b," " + ld c," " + ld d,"▷" + ld e," " + call Func_f59ec + call Func_f531b + jp c,.choseCancel + ld a,$f0 + jp .next + +Func_f59ec:: ; f59ec (3d:59ec) + ld a, b + Coorda 6, 5 + ld a, c + Coorda 6, 7 + ld a, d + Coorda 6, 9 + ld a, e + Coorda 6, 11 + ld c, 40 + call DelayFrames + ret + +ColosseumWhereToText: ; f5a02 (3d:5a02) + TX_FAR _ColosseumWhereToText + db "@" + +ColosseumPleaseWaitText: ; f5a07 (3d:5a07) + TX_FAR _ColosseumPleaseWaitText + db "@" + +ColosseumCanceledText: ; f5a0c (3d:5a0c) + TX_FAR _ColosseumCanceledText + db "@" + +ColosseumVersionText: ; f5a11 (3d:5a11) + TX_FAR _ColosseumVersionText ; 28:4c47 + db "@" + +TextTerminator_f5a16: ; f5a16 (3d:5a16) + db "@" + +TradeCenterText: ; f5a17 (3d:5a17) + db "TRADE CENTER" + next "COLOSSEUM" + next "COLOSSEUM2" + next "CANCEL@" \ No newline at end of file diff --git a/engine/overworld/advance_player_sprite.asm b/engine/overworld/advance_player_sprite.asm new file mode 100644 index 00000000..e02fb129 --- /dev/null +++ b/engine/overworld/advance_player_sprite.asm @@ -0,0 +1,241 @@ +_AdvancePlayerSprite:: ; f010c (3c:410c) + ld a,[wSpriteStateData1 + 3] ; delta Y + ld b,a + ld a,[wSpriteStateData1 + 5] ; delta X + ld c,a + ld hl,wWalkCounter ; walking animation counter + dec [hl] + jr nz,.afterUpdateMapCoords +; if it's the end of the animation, update the player's map coordinates + ld hl, wd430 + res 5, [hl] + ld a,[wYCoord] + add b + ld [wYCoord],a + ld a,[wXCoord] + add c + ld [wXCoord],a +.afterUpdateMapCoords + ld a,[wWalkCounter] ; walking animation counter + cp a,$07 + jp nz,.scrollBackgroundAndSprites +; if this is the first iteration of the animation + ld a,c + cp a,$01 + jr nz,.checkIfMovingWest +; moving east + ld a,[wMapViewVRAMPointer] + ld e,a + and $e0 + ld d,a + ld a,e + add $02 + and $1f + or d + ld [wMapViewVRAMPointer],a + jr .adjustXCoordWithinBlock +.checkIfMovingWest + cp a,$ff + jr nz,.checkIfMovingSouth +; moving west + ld a,[wMapViewVRAMPointer] + ld e,a + and a,$e0 + ld d,a + ld a,e + sub $02 + and $1f + or d + ld [wMapViewVRAMPointer],a + jr .adjustXCoordWithinBlock +.checkIfMovingSouth + ld a,b + cp a,$01 + jr nz,.checkIfMovingNorth +; moving south + ld a,[wMapViewVRAMPointer] + add $40 + ld [wMapViewVRAMPointer],a + jr nc,.adjustXCoordWithinBlock + ld a,[wMapViewVRAMPointer + 1] + inc a + and $03 + or $98 + ld [wMapViewVRAMPointer + 1],a + jr .adjustXCoordWithinBlock +.checkIfMovingNorth + cp a,$ff + jr nz,.adjustXCoordWithinBlock +; moving north + ld a,[wMapViewVRAMPointer] + sub $40 + ld [wMapViewVRAMPointer],a + jr nc,.adjustXCoordWithinBlock + ld a,[wMapViewVRAMPointer + 1] + dec a + and $03 + or $98 + ld [wMapViewVRAMPointer + 1],a +.adjustXCoordWithinBlock + ld a,c + and a + jr z,.pointlessJump ; mistake? +.pointlessJump + ld hl,wXBlockCoord + ld a,[hl] + add c + ld [hl],a + cp $02 + jr nz,.checkForMoveToWestBlock +; moved into the tile block to the east + xor a + ld [hl],a + ld hl,wXOffsetSinceLastSpecialWarp + inc [hl] + ld de,wCurrentTileBlockMapViewPointer + call MoveTileBlockMapPointerEast + jr .updateMapView +.checkForMoveToWestBlock + cp a,$ff + jr nz,.adjustYCoordWithinBlock +; moved into the tile block to the west + ld a,$1 + ld [hl],a + ld hl,wXOffsetSinceLastSpecialWarp + dec [hl] + ld de,wCurrentTileBlockMapViewPointer + call MoveTileBlockMapPointerWest + jr .updateMapView +.adjustYCoordWithinBlock + ld hl,wYBlockCoord + ld a,[hl] + add b + ld [hl],a + cp $2 + jr nz,.checkForMoveToNorthBlock +; moved into the tile block to the south + xor a + ld [hl],a + ld hl,wYOffsetSinceLastSpecialWarp + inc [hl] + ld de,wCurrentTileBlockMapViewPointer + ld a,[wCurMapWidth] + call MoveTileBlockMapPointerSouth + jr .updateMapView +.checkForMoveToNorthBlock + cp a,$ff + jr nz,.updateMapView +; moved into the tile block to the north + ld a,$1 + ld [hl],a + ld hl,wYOffsetSinceLastSpecialWarp + dec [hl] + ld de,wCurrentTileBlockMapViewPointer + ld a,[wCurMapWidth] + call MoveTileBlockMapPointerNorth +.updateMapView + call LoadCurrentMapView + ld a,[wSpriteStateData1 + 3] ; delta Y + cp $1 + jr nz,.checkIfMovingNorth2 +; if moving south + call ScheduleSouthRowRedraw + jr .scrollBackgroundAndSprites +.checkIfMovingNorth2 + cp $ff + jr nz,.checkIfMovingEast2 +; if moving north + call ScheduleNorthRowRedraw + jr .scrollBackgroundAndSprites +.checkIfMovingEast2 + ld a,[wSpriteStateData1 + 5] ; delta X + cp $1 + jr nz,.checkIfMovingWest2 +; if moving east + call ScheduleEastColumnRedraw + jr .scrollBackgroundAndSprites +.checkIfMovingWest2 + cp $ff + jr nz,.scrollBackgroundAndSprites +; if moving west + call ScheduleWestColumnRedraw +.scrollBackgroundAndSprites + ld a,[wSpriteStateData1 + 3] ; delta Y + add a + ld b,a + ld a,[wSpriteStateData1 + 5] ; delta X + add a + ld c,a +; shift all the sprites in the direction opposite of the player's motion +; so that the player appears to move relative to them + ld hl,wSpriteStateData1 + $14 + ld e,15 +.spriteShiftLoop + ld a,[hl] + sub b + ld [hli],a + inc l + ld a,[hl] + sub c + ld [hl],a + ld a,$0e + add l + ld l,a + dec e + jr nz,.spriteShiftLoop +.done + ld a,[hSCY] + add b + ld [hSCY],a ; update background scroll Y + ld a,[hSCX] + add c + ld [hSCX],a ; update background scroll X + ret + +MoveTileBlockMapPointerEast:: ; f0248 (3c:4248) + ld a,[de] + add $1 + ld [de],a + ret nc + inc de + ld a,[de] + inc a + ld [de],a + ret + +MoveTileBlockMapPointerWest:: ; f0252 (3c:4252) + ld a,[de] + sub $1 + ld [de],a + ret nc + inc de + ld a,[de] + dec a + ld [de],a + ret + +MoveTileBlockMapPointerSouth:: ; f025c (3c:425c) + add $6 + ld b,a + ld a,[de] + add b + ld [de],a + ret nc + inc de + ld a,[de] + inc a + ld [de],a + ret + +MoveTileBlockMapPointerNorth:: ; f0268 (3c:4268) + add $6 + ld b,a + ld a,[de] + sub b + ld [de],a + ret nc + inc de + ld a,[de] + dec a + ld [de],a + ret \ No newline at end of file diff --git a/engine/random.asm b/engine/random.asm index 2fc83f6f..ddf042df 100755 --- a/engine/random.asm +++ b/engine/random.asm @@ -1,4 +1,4 @@ -Random_:: +Random_:: ; f67dc (3d:67dc) ; Generate a random 16-bit value. ld a, [rDIV] ld b, a diff --git a/yellow/main.asm b/yellow/main.asm index 39f39df5..ccdb4240 100755 --- a/yellow/main.asm +++ b/yellow/main.asm @@ -4283,11 +4283,11 @@ FreezeEnemyTrainerSprite: ; eaa02 (3a:6a02) SECTION "bank3C",ROMX,BANK[$3C] -INCLUDE "engine/bank3c/main.asm" +INCLUDE "engine/bank3c.asm" SECTION "bank3D",ROMX,BANK[$3D] -INCLUDE "engine/bank3d/main.asm" +INCLUDE "engine/bank3d.asm" SECTION "bank3E",ROMX,BANK[$3E] @@ -4301,4 +4301,4 @@ YellowIntroGraphics: INCBIN "gfx/yellow_intro.2bpp" SECTION "bank3F",ROMX,BANK[$3F] -INCLUDE "engine/bank3f/main.asm" +INCLUDE "engine/bank3f.asm" -- cgit v1.2.3