summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluckytyphlosion <alan.rj.huang@gmail.com>2015-10-17 16:11:39 -0400
committerluckytyphlosion <alan.rj.huang@gmail.com>2015-10-17 16:11:39 -0400
commit35874024438c0a716ad3de8896207f02db56e7d1 (patch)
tree89687c9ebd659bc2fe3b861a0a0063dd350220e0
parentb59953dab1f782ff0dd08b57207bb29b9f4f4a67 (diff)
More bank3 documentation
Also misc. documentation in bank3c and bank3f
-rw-r--r--engine/bank3c/main.asm4
-rw-r--r--engine/bank3c/overworld.asm77
-rw-r--r--engine/bank3f/data/map_songs.asm500
-rwxr-xr-xengine/items/items.asm2
-rwxr-xr-xengine/overworld/cut.asm31
-rwxr-xr-xmain.asm59
-rwxr-xr-xyellow/main.asm890
7 files changed, 1192 insertions, 371 deletions
diff --git a/engine/bank3c/main.asm b/engine/bank3c/main.asm
index 5e74c61e..c967e93c 100644
--- a/engine/bank3c/main.asm
+++ b/engine/bank3c/main.asm
@@ -152,9 +152,7 @@ PikachuCriesPointerTable: ; f008e (3c:408e)
dbw BANK(PikachuCry41), PikachuCry41 ; 36:6746
dbw BANK(PikachuCry42), PikachuCry42 ; 38:6976
-_AdvancePlayerSprite:: ; f010c (3c:410c)
-;INCLUDE "engine/bank3c/overworld.asm"
- dr $f010c,$f0274
+INCLUDE "engine/bank3c/overworld.asm"
ResetStatusAndHalveMoneyOnBlackout:: ; f0274 (3c:4274)
; Reset player status on blackout.
diff --git a/engine/bank3c/overworld.asm b/engine/bank3c/overworld.asm
index 778244d6..d7e6274f 100644
--- a/engine/bank3c/overworld.asm
+++ b/engine/bank3c/overworld.asm
@@ -7,6 +7,8 @@ _AdvancePlayerSprite:: ; f010c (3c:410c)
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,[W_YCOORD]
add b
ld [W_YCOORD],a
@@ -24,11 +26,11 @@ _AdvancePlayerSprite:: ; f010c (3c:410c)
; moving east
ld a,[wMapViewVRAMPointer]
ld e,a
- and a,$e0
+ and $e0
ld d,a
ld a,e
- add a,$02
- and a,$1f
+ add $02
+ and $1f
or d
ld [wMapViewVRAMPointer],a
jr .adjustXCoordWithinBlock
@@ -41,8 +43,8 @@ _AdvancePlayerSprite:: ; f010c (3c:410c)
and a,$e0
ld d,a
ld a,e
- sub a,$02
- and a,$1f
+ sub $02
+ and $1f
or d
ld [wMapViewVRAMPointer],a
jr .adjustXCoordWithinBlock
@@ -52,13 +54,13 @@ _AdvancePlayerSprite:: ; f010c (3c:410c)
jr nz,.checkIfMovingNorth
; moving south
ld a,[wMapViewVRAMPointer]
- add a,$40
+ add $40
ld [wMapViewVRAMPointer],a
jr nc,.adjustXCoordWithinBlock
ld a,[wMapViewVRAMPointer + 1]
inc a
- and a,$03
- or a,$98
+ and $03
+ or $98
ld [wMapViewVRAMPointer + 1],a
jr .adjustXCoordWithinBlock
.checkIfMovingNorth
@@ -66,13 +68,13 @@ _AdvancePlayerSprite:: ; f010c (3c:410c)
jr nz,.adjustXCoordWithinBlock
; moving north
ld a,[wMapViewVRAMPointer]
- sub a,$40
+ sub $40
ld [wMapViewVRAMPointer],a
jr nc,.adjustXCoordWithinBlock
ld a,[wMapViewVRAMPointer + 1]
dec a
- and a,$03
- or a,$98
+ and $03
+ or $98
ld [wMapViewVRAMPointer + 1],a
.adjustXCoordWithinBlock
ld a,c
@@ -83,7 +85,7 @@ _AdvancePlayerSprite:: ; f010c (3c:410c)
ld a,[hl]
add c
ld [hl],a
- cp a,$02
+ cp $02
jr nz,.checkForMoveToWestBlock
; moved into the tile block to the east
xor a
@@ -97,7 +99,7 @@ _AdvancePlayerSprite:: ; f010c (3c:410c)
cp a,$ff
jr nz,.adjustYCoordWithinBlock
; moved into the tile block to the west
- ld a,$01
+ ld a,$1
ld [hl],a
ld hl,wXOffsetSinceLastSpecialWarp
dec [hl]
@@ -109,7 +111,7 @@ _AdvancePlayerSprite:: ; f010c (3c:410c)
ld a,[hl]
add b
ld [hl],a
- cp a,$02
+ cp $2
jr nz,.checkForMoveToNorthBlock
; moved into the tile block to the south
xor a
@@ -124,7 +126,7 @@ _AdvancePlayerSprite:: ; f010c (3c:410c)
cp a,$ff
jr nz,.updateMapView
; moved into the tile block to the north
- ld a,$01
+ ld a,$1
ld [hl],a
ld hl,wYOffsetSinceLastSpecialWarp
dec [hl]
@@ -134,49 +136,40 @@ _AdvancePlayerSprite:: ; f010c (3c:410c)
.updateMapView
call LoadCurrentMapView
ld a,[wSpriteStateData1 + 3] ; delta Y
- cp a,$01
+ cp $1
jr nz,.checkIfMovingNorth2
; if moving south
call ScheduleSouthRowRedraw
jr .scrollBackgroundAndSprites
.checkIfMovingNorth2
- cp a,$ff
+ cp $ff
jr nz,.checkIfMovingEast2
; if moving north
call ScheduleNorthRowRedraw
jr .scrollBackgroundAndSprites
.checkIfMovingEast2
ld a,[wSpriteStateData1 + 5] ; delta X
- cp a,$01
+ cp $1
jr nz,.checkIfMovingWest2
; if moving east
call ScheduleEastColumnRedraw
jr .scrollBackgroundAndSprites
.checkIfMovingWest2
- cp a,$ff
+ 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
- sla b
- sla c
- ld a,[hSCY]
- add b
- ld [hSCY],a ; update background scroll Y
- ld a,[hSCX]
- add c
- ld [hSCX],a ; update background scroll X
; 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 a,[W_NUMSPRITES] ; number of sprites
- and a ; are there any sprites?
- jr z,.done
- ld e,a
+ ld e,15
.spriteShiftLoop
ld a,[hl]
sub b
@@ -191,11 +184,17 @@ _AdvancePlayerSprite:: ; f010c (3c:410c)
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:: ; 0e65 (0:0e65)
+MoveTileBlockMapPointerEast:: ; f0248 (3c:4248)
ld a,[de]
- add a,$01
+ add $1
ld [de],a
ret nc
inc de
@@ -204,9 +203,9 @@ MoveTileBlockMapPointerEast:: ; 0e65 (0:0e65)
ld [de],a
ret
-MoveTileBlockMapPointerWest:: ; 0e6f (0:0e6f)
+MoveTileBlockMapPointerWest:: ; f0252 (3c:4252)
ld a,[de]
- sub a,$01
+ sub $1
ld [de],a
ret nc
inc de
@@ -215,8 +214,8 @@ MoveTileBlockMapPointerWest:: ; 0e6f (0:0e6f)
ld [de],a
ret
-MoveTileBlockMapPointerSouth:: ; 0e79 (0:0e79)
- add a,$06
+MoveTileBlockMapPointerSouth:: ; f025c (3c:425c)
+ add $6
ld b,a
ld a,[de]
add b
@@ -228,8 +227,8 @@ MoveTileBlockMapPointerSouth:: ; 0e79 (0:0e79)
ld [de],a
ret
-MoveTileBlockMapPointerNorth:: ; 0e85 (0:0e85)
- add a,$06
+MoveTileBlockMapPointerNorth:: ; f0268 (3c:4268)
+ add $6
ld b,a
ld a,[de]
sub b
diff --git a/engine/bank3f/data/map_songs.asm b/engine/bank3f/data/map_songs.asm
index ece6d321..b65822e7 100644
--- a/engine/bank3f/data/map_songs.asm
+++ b/engine/bank3f/data/map_songs.asm
@@ -1,252 +1,250 @@
MapSongBanks: ; fc000 (3f:4000)
- dr $fc000,$fc1f2
-
- ;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
+ 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/items/items.asm b/engine/items/items.asm
index 25c50b4f..533da448 100755
--- a/engine/items/items.asm
+++ b/engine/items/items.asm
@@ -709,7 +709,7 @@ ItemUseEvoStone: ; d7d0 (3:57d0)
ret
Func_d85d: ; d85d (3:585d)
- ld hl, Pointer_f1e5
+ ld hl, Pointer_3b1e5
ld a, [wLoadedMon]
dec a
ld c, a
diff --git a/engine/overworld/cut.asm b/engine/overworld/cut.asm
index 30aedbc1..276ec93e 100755
--- a/engine/overworld/cut.asm
+++ b/engine/overworld/cut.asm
@@ -1,4 +1,4 @@
-UsedCut: ; ef54 (3:6f54)
+UsedCut: ; edd1 (3:6dd1)
xor a
ld [wActionResultOrTookBattleTurn], a ; initialise to failure value
ld a, [W_CURMAPTILESET]
@@ -67,15 +67,16 @@ UsedCut: ; ef54 (3:6f54)
call UpdateSprites
jp RedrawMapView
-UsedCutText: ; eff2 (3:6ff2)
+UsedCutText: ; ee6f (3:6e6f)
TX_FAR _UsedCutText
db "@"
-InitCutAnimOAM: ; eff7 (3:6ff7)
+InitCutAnimOAM: ; ee74 (3:6e74)
xor a
ld [wWhichAnimationOffsets], a
- ld a, $e4
+ ld a, %11100100
ld [rOBP1], a
+ call UpdateGBCPal_OBP1
ld a, [wCutTile]
cp $52
jr z, .grass
@@ -111,22 +112,22 @@ InitCutAnimOAM: ; eff7 (3:6ff7)
jr nz, .loop
ret
-LoadCutGrassAnimationTilePattern: ; f04c (3:704c)
- ld de, AnimationTileset2 + $60 ; tile depicting a leaf
+LoadCutGrassAnimationTilePattern: ; eecc (3:6ecc)
+ ld de, AnimationTileset2 + $30 ; tile depicting a leaf
lb bc, BANK(AnimationTileset2), $01
jp CopyVideoData
-WriteCutOrBoulderDustAnimationOAMBlock: ; f055 (3:7055)
+WriteCutOrBoulderDustAnimationOAMBlock: ; eed5 (3:6ed5)
call GetCutOrBoulderDustAnimationOffsets
ld a, $9
ld de, CutOrBoulderDustAnimationTilesAndAttributes
jp WriteOAMBlock
-CutOrBoulderDustAnimationTilesAndAttributes: ; f060 (3:7060)
- db $FC,$10,$FD,$10
- db $FE,$10,$FF,$10
+CutOrBoulderDustAnimationTilesAndAttributes: ; eee0 (3:6ee0)
+ db $FC,$14,$FD,$14
+ db $FE,$14,$FF,$14
-GetCutOrBoulderDustAnimationOffsets: ; f068 (3:7068)
+GetCutOrBoulderDustAnimationOffsets: ; eee8 (3:6ee8)
ld hl, wSpriteStateData1 + 4
ld a, [hli] ; player's sprite screen Y position
ld b, a
@@ -157,14 +158,14 @@ GetCutOrBoulderDustAnimationOffsets: ; f068 (3:7068)
ld c, a
ret
-CutAnimationOffsets: ; f08f (3:708f)
+CutAnimationOffsets: ; ef0f (3:6f0f)
; Each pair represents the x and y pixels offsets from the player of where the cut tree animation should be drawn
db 8, 36 ; player is facing down
db 8, 4 ; player is facing up
db -8, 20 ; player is facing left
db 24, 20 ; player is facing right
-BoulderDustAnimationOffsets: ; f097 (3:7097)
+BoulderDustAnimationOffsets: ; ef17 (3:6f17)
; Each pair represents the x and y pixels offsets from the player of where the cut tree animation should be drawn
; These offsets represent 2 blocks away from the player
db 8, 52 ; player is facing down
@@ -172,7 +173,7 @@ BoulderDustAnimationOffsets: ; f097 (3:7097)
db -24, 20 ; player is facing left
db 40, 20 ; player is facing right
-ReplaceTreeTileBlock: ; f09f (3:709f)
+ReplaceTreeTileBlock: ; ef1f (3:6f1f)
; Determine the address of the tile block that contains the tile in front of the
; player (i.e. where the tree is) and replace it with the corresponding tile
; block that doesn't have the tree.
@@ -248,7 +249,7 @@ ReplaceTreeTileBlock: ; f09f (3:709f)
ld [hl], a
ret
-CutTreeBlockSwaps: ; f100 (3:7100)
+CutTreeBlockSwaps: ; ef80 (3:6f80)
; first byte = tileset block containing the cut tree
; second byte = corresponding tileset block after the cut animation happens
db $32, $6D
diff --git a/main.asm b/main.asm
index e02b5720..2b978922 100755
--- a/main.asm
+++ b/main.asm
@@ -2846,7 +2846,7 @@ DrawBadges: ; ea03 (3:6a03)
; call .DrawBadgeRow
; ret
-.DrawBadgeRow ; ea4c (3:6a4c)
+.DrawBadgeRow ; e8c9 (3:68c9)
; Draw 4 badges.
ld c, 4
@@ -2910,14 +2910,14 @@ DrawBadges: ; ea03 (3:6a03)
.FaceBadgeTiles
db $20, $28, $30, $38, $40, $48, $50, $58
-GymLeaderFaceAndBadgeTileGraphics: ; ea9e (3:6a9e)
+GymLeaderFaceAndBadgeTileGraphics: ; e91b (3:691b)
INCBIN "gfx/badges.2bpp"
; replaces a tile block with the one specified in [wNewTileBlockID]
; and redraws the map view if necessary
; b = Y
; c = X
-ReplaceTileBlock: ; ee9e (3:6e9e)
+ReplaceTileBlock: ; ed1b (3:6d1b)
call GetPredefRegisters
ld hl, wOverworldMap
ld a, [W_CURMAPWIDTH]
@@ -2961,7 +2961,7 @@ ReplaceTileBlock: ; ee9e (3:6e9e)
call CompareHLWithBC
ret c ; return if the replaced tile block is above the map view in memory
-RedrawMapView: ; eedc (3:6edc)
+RedrawMapView: ; ed59 (3:6d59)
ld a, [W_ISINBATTLE]
inc a
ret z
@@ -3032,7 +3032,7 @@ RedrawMapView: ; eedc (3:6edc)
ld [H_AUTOBGTRANSFERENABLED], a
ret
-CompareHLWithBC: ; ef4e (3:6f4e)
+CompareHLWithBC: ; edcb (3:6dcb)
ld a, h
sub b
ret nz
@@ -3042,7 +3042,7 @@ CompareHLWithBC: ; ef4e (3:6f4e)
INCLUDE "engine/overworld/cut.asm"
-MarkTownVisitedAndLoadMissableObjects: ; f113 (3:7113)
+MarkTownVisitedAndLoadMissableObjects: ; ef93 (3:6f93)
ld a, [W_CURMAP]
cp ROUTE_1
jr nc, .notInTown
@@ -3061,18 +3061,15 @@ MarkTownVisitedAndLoadMissableObjects: ; f113 (3:7113)
ld h, [hl]
; fall through
-LoadMissableObjects: ; f132 (3:7132)
+; LoadMissableObjects: ; efb2 (3:6fb2)
+; seems to not exist in yellow (predef replaced with something near TryPushingBoulder)
ld l, a
push hl
- ld de, MapHS00 ; calculate difference between out pointer and the base pointer
ld a, l
- sub e
- jr nc, .asm_f13c
- dec h
-.asm_f13c
+ sub MapHS00 & $ff ; calculate difference between out pointer and the base pointer
ld l, a
ld a, h
- sub d
+ sbc MapHS00 / $100
ld h, a
ld a, h
ld [H_DIVIDEND], a
@@ -3111,7 +3108,7 @@ LoadMissableObjects: ; f132 (3:7132)
ld [de], a ; write sentinel
ret
-InitializeMissableObjectsFlags: ; f175 (3:7175)
+InitializeMissableObjectsFlags: ; eff1 (3:6ff1)
ld hl, W_MISSABLEOBJECTFLAGS
ld bc, wMissableObjectFlagsEnd - W_MISSABLEOBJECTFLAGS
xor a
@@ -3142,7 +3139,7 @@ InitializeMissableObjectsFlags: ; f175 (3:7175)
jr .missableObjectsLoop
; tests if current sprite is a missable object that is hidden/has been removed
-IsObjectHidden: ; f1a6 (3:71a6)
+IsObjectHidden: ; f022 (3:7022)
ld a, [H_CURRENTSPRITEOFFSET]
swap a
ld b, a
@@ -3169,7 +3166,7 @@ IsObjectHidden: ; f1a6 (3:71a6)
; adds missable object (items, leg. pokemon, etc.) to the map
; [wMissableObjectIndex]: index of the missable object to be added (global index)
-ShowObject: ; f1c8 (3:71c8)
+ShowObject: ; f044 (3:7044)
ShowObject2:
ld hl, W_MISSABLEOBJECTFLAGS
ld a, [wMissableObjectIndex]
@@ -3180,7 +3177,7 @@ ShowObject2:
; removes missable object (items, leg. pokemon, etc.) from the map
; [wMissableObjectIndex]: index of the missable object to be removed (global index)
-HideObject: ; f1d7 (3:71d7)
+HideObject: ; f053 (3:7053)
ld hl, W_MISSABLEOBJECTFLAGS
ld a, [wMissableObjectIndex]
ld c, a
@@ -3188,7 +3185,7 @@ HideObject: ; f1d7 (3:71d7)
call MissableObjectFlagAction ; set "removed" flag
jp UpdateSprites
-MissableObjectFlagAction:
+MissableObjectFlagAction: ; f062 (3:7062)
; identical to FlagAction
push hl
@@ -3258,10 +3255,11 @@ MissableObjectFlagAction:
ld c, a
ret
-TryPushingBoulder: ; f225 (3:7225)
+TryPushingBoulder: ; f0a1 (3:70a1)
ld a, [wd728]
bit 0, a ; using Strength?
ret z
+; where LoadMissableObjects predef points to now
ld a, [wFlags_0xcd60]
bit 1, a ; has boulder dust animation from previous push played yet?
ret nz
@@ -3330,19 +3328,19 @@ TryPushingBoulder: ; f225 (3:7225)
set 1, [hl]
ret
-PushBoulderUpMovementData: ; f2ad (3:72ad)
+PushBoulderUpMovementData: ; f129 (3:7129)
db NPC_MOVEMENT_UP,$FF
-PushBoulderDownMovementData: ; f2af (3:72af)
+PushBoulderDownMovementData: ; f12b (3:712b)
db NPC_MOVEMENT_DOWN,$FF
-PushBoulderLeftMovementData: ; f2b1 (3:72b1)
+PushBoulderLeftMovementData: ; f12d (3:712d)
db NPC_MOVEMENT_LEFT,$FF
-PushBoulderRightMovementData: ; f2b3 (3:72b3)
+PushBoulderRightMovementData: ; f12f (3:712f)
db NPC_MOVEMENT_RIGHT,$FF
-DoBoulderDustAnimation: ; f2b5 (3:72b5)
+DoBoulderDustAnimation: ; f131 (3:7131)
ld a, [wd730]
bit 0, a
ret nz
@@ -3358,13 +3356,13 @@ DoBoulderDustAnimation: ; f2b5 (3:72b5)
ld a, SFX_CUT
jp PlaySound
-ResetBoulderPushFlags: ; f2dd (3:72dd)
+ResetBoulderPushFlags: ; f159 (3:7159)
ld hl, wFlags_0xcd60
res 1, [hl]
res 6, [hl]
ret
-_AddPartyMon: ; f2e5 (3:72e5)
+_AddPartyMon: ; f161 (3:7161)
; Adds a new mon to the player's or enemy's party.
; [wMonDataLocation] is used in an unusual way in this function.
; If the lower nybble is 0, the mon is added to the player's party, else the enemy's.
@@ -3536,6 +3534,11 @@ _AddPartyMon: ; f2e5 (3:72e5)
inc de
ld a, [hli] ; catch rate (held item in gen 2)
ld [de], a
+ cp KADABRA
+ jr nz, .skipGivingTwistedSpoon
+ ld a, $60 ; twistedspoon in gen 2
+ ld [de], a
+.skipGivingTwistedSpoon
ld hl, W_MONHMOVES
ld a, [hli]
inc de
@@ -3611,10 +3614,10 @@ _AddPartyMon: ; f2e5 (3:72e5)
scf
ret
-LoadMovePPs: ; f473 (3:7473)
+LoadMovePPs: ; f2f9 (3:72f9)
call GetPredefRegisters
; fallthrough
-AddPartyMon_WriteMovePP: ; f476 (3:7476)
+AddPartyMon_WriteMovePP: ; f2fc (3:72fc)
ld b, NUM_MOVES
.pploop
ld a, [hli] ; read move ID
diff --git a/yellow/main.asm b/yellow/main.asm
index 87964875..f11a90e4 100755
--- a/yellow/main.asm
+++ b/yellow/main.asm
@@ -73,15 +73,6 @@ _RemovePokemon: ; 7a0f (1:7a0f)
dr $7a0f,$7abf
_DisplayPokedex: ; 7c18 (1:7abf)
dr $7abf,$8000
-
-;SECTION "bank02",ROMX,BANK[$02]
-; dr $8000,$9064
-;PlayBattleMusic: ; 9064 (2:5064)
-; dr $9064,$909d
-;Music2_UpdateMusic: ; 909d (2:509d)
-; dr $909d,$984e
-;Func_984e: ; 984e (2:584e)
-; dr $984e,$c000
SECTION "bank03",ROMX,BANK[$03]
@@ -827,28 +818,864 @@ INCLUDE "data/wild_mons.asm"
INCLUDE "engine/items/items.asm"
DrawBadges: ; e880 (3:6880)
- dr $e880,$e91b
+; Draw 4x2 gym leader faces, with the faces replaced by
+; badges if they are owned. Used in the player status screen.
+
+; In Japanese versions, names are displayed above faces.
+; Instead of removing relevant code, the name graphics were erased.
+
+; Tile ids for face/badge graphics.
+ ld de, wBadgeOrFaceTiles
+ ld hl, .FaceBadgeTiles
+ ld bc, 8
+ call CopyData
+
+; Booleans for each badge.
+ ld hl, wTempObtainedBadgesBooleans
+ ld bc, 8
+ xor a
+ call FillMemory
+
+; Alter these based on owned badges.
+ ld de, wTempObtainedBadgesBooleans
+ ld hl, wBadgeOrFaceTiles
+ ld a, [W_OBTAINEDBADGES]
+ ld b, a
+ ld c, 8
+.CheckBadge
+ srl b
+ jr nc, .NextBadge
+ ld a, [hl]
+ add 4 ; Badge graphics are after each face
+ ld [hl], a
+ ld a, 1
+ ld [de], a
+.NextBadge
+ inc hl
+ inc de
+ dec c
+ jr nz, .CheckBadge
+
+; Draw two rows of badges.
+ ld hl, wBadgeNumberTile
+ ld a, $d8 ; [1]
+ ld [hli], a
+ ld [hl], $60 ; First name
+
+ coord hl, 2, 11
+ ld de, wTempObtainedBadgesBooleans
+ call .DrawBadgeRow
+
+ coord hl, 2, 14
+ ld de, wTempObtainedBadgesBooleans + 4
+; call .DrawBadgeRow
+; ret
+
+.DrawBadgeRow ; e8c9 (3:68c9)
+; Draw 4 badges.
+
+ ld c, 4
+.DrawBadge
+ push de
+ push hl
+
+; Badge no.
+ ld a, [wBadgeNumberTile]
+ ld [hli], a
+ inc a
+ ld [wBadgeNumberTile], a
+
+; Names aren't printed if the badge is owned.
+ ld a, [de]
+ and a
+ ld a, [wBadgeNameTile]
+ jr nz, .SkipName
+ call .PlaceTiles
+ jr .PlaceBadge
+
+.SkipName
+ inc a
+ inc a
+ inc hl
+
+.PlaceBadge
+ ld [wBadgeNameTile], a
+ ld de, SCREEN_WIDTH - 1
+ add hl, de
+ ld a, [wBadgeOrFaceTiles]
+ call .PlaceTiles
+ add hl, de
+ call .PlaceTiles
+
+; Shift badge array back one byte.
+ push bc
+ ld hl, wBadgeOrFaceTiles + 1
+ ld de, wBadgeOrFaceTiles
+ ld bc, 8
+ call CopyData
+ pop bc
+
+ pop hl
+ ld de, 4
+ add hl, de
+
+ pop de
+ inc de
+ dec c
+ jr nz, .DrawBadge
+ ret
+
+.PlaceTiles
+ ld [hli], a
+ inc a
+ ld [hl], a
+ inc a
+ ret
+
+.FaceBadgeTiles
+ db $20, $28, $30, $38, $40, $48, $50, $58
GymLeaderFaceAndBadgeTileGraphics: ; e91b (3:691b)
INCBIN "gfx/badges.2bpp"
- dr $ed1b,$ed59
+; replaces a tile block with the one specified in [wNewTileBlockID]
+; and redraws the map view if necessary
+; b = Y
+; c = X
+ReplaceTileBlock: ; ed1b (3:6d1b)
+ call GetPredefRegisters
+ ld hl, wOverworldMap
+ ld a, [W_CURMAPWIDTH]
+ add $6
+ ld e, a
+ ld d, $0
+ add hl, de
+ add hl, de
+ add hl, de
+ ld e, $3
+ add hl, de
+ ld e, a
+ ld a, b
+ and a
+ jr z, .addX
+; add width * Y
+.addWidthYTimesLoop
+ add hl, de
+ dec b
+ jr nz, .addWidthYTimesLoop
+.addX
+ add hl, bc ; add X
+ ld a, [wNewTileBlockID]
+ ld [hl], a
+ ld a, [wCurrentTileBlockMapViewPointer]
+ ld c, a
+ ld a, [wCurrentTileBlockMapViewPointer + 1]
+ ld b, a
+ call CompareHLWithBC
+ ret c ; return if the replaced tile block is below the map view in memory
+ push hl
+ ld l, e
+ ld h, $0
+ ld e, $6
+ ld d, h
+ add hl, hl
+ add hl, hl
+ add hl, de
+ add hl, bc
+ pop bc
+ call CompareHLWithBC
+ ret c ; return if the replaced tile block is above the map view in memory
+
RedrawMapView: ; ed59 (3:6d59)
- dr $ed59,$ef93
+ ld a, [W_ISINBATTLE]
+ inc a
+ ret z
+ ld a, [H_AUTOBGTRANSFERENABLED]
+ push af
+ ld a, [hTilesetType]
+ push af
+ xor a
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ld [hTilesetType], a ; no flower/water BG tile animations
+ call LoadCurrentMapView
+ call RunDefaultPaletteCommand
+ ld hl, wMapViewVRAMPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, -2 * 32
+ add hl, de
+ ld a, h
+ and $3
+ or $98
+ ld a, l
+ ld [wBuffer], a
+ ld a, h
+ ld [wBuffer + 1], a ; this copy of the address is not used
+ ld a, 2
+ ld [$ffbe], a
+ ld c, 9 ; number of rows of 2x2 tiles (this covers the whole screen)
+.redrawRowLoop
+ push bc
+ push hl
+ push hl
+ ld hl, wTileMap - 2 * SCREEN_WIDTH
+ ld de, SCREEN_WIDTH
+ ld a, [$ffbe]
+.calcWRAMAddrLoop
+ add hl, de
+ dec a
+ jr nz, .calcWRAMAddrLoop
+ call CopyToRedrawRowOrColumnSrcTiles
+ pop hl
+ ld de, $20
+ ld a, [$ffbe]
+ ld c, a
+.calcVRAMAddrLoop
+ add hl, de
+ ld a, h
+ and $3
+ or $98
+ dec c
+ jr nz, .calcVRAMAddrLoop
+ ld [hRedrawRowOrColumnDest + 1], a
+ ld a, l
+ ld [hRedrawRowOrColumnDest], a
+ ld a, REDRAW_ROW
+ ld [hRedrawRowOrColumnMode], a
+ call DelayFrame
+ ld hl, $ffbe
+ inc [hl]
+ inc [hl]
+ pop hl
+ pop bc
+ dec c
+ jr nz, .redrawRowLoop
+ pop af
+ ld [hTilesetType], a
+ pop af
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ret
+
+CompareHLWithBC: ; edcb (3:6dcb)
+ ld a, h
+ sub b
+ ret nz
+ ld a, l
+ sub c
+ ret
+
+INCLUDE "engine/overworld/cut.asm"
+
MarkTownVisitedAndLoadMissableObjects: ; ef93 (3:6f93)
- dr $ef93,$f0a1
+ ld a, [W_CURMAP]
+ cp ROUTE_1
+ jr nc, .notInTown
+ ld c, a
+ ld b, FLAG_SET
+ ld hl, W_TOWNVISITEDFLAG ; mark town as visited (for flying)
+ predef FlagActionPredef
+.notInTown
+ ld hl, MapHSPointers
+ ld a, [W_CURMAP]
+ ld b, $0
+ ld c, a
+ add hl, bc
+ add hl, bc
+ ld a, [hli] ; load missable objects pointer in hl
+ ld h, [hl]
+ ; fall through
+
+; LoadMissableObjects: ; efb2 (3:6fb2)
+; seems to not exist in yellow (predef replaced with something near TryPushingBoulder)
+ ld l, a
+ push hl
+ ld a, l
+ sub MapHS00 & $ff ; calculate difference between out pointer and the base pointer
+ ld l, a
+ ld a, h
+ sbc MapHS00 / $100
+ ld h, a
+ ld a, h
+ ld [H_DIVIDEND], a
+ ld a, l
+ ld [H_DIVIDEND+1], a
+ xor a
+ ld [H_DIVIDEND+2], a
+ ld [H_DIVIDEND+3], a
+ ld a, $3
+ ld [H_DIVISOR], a
+ ld b, $2
+ call Divide ; divide difference by 3, resulting in the global offset (number of missable items before ours)
+ ld a, [W_CURMAP]
+ ld b, a
+ ld a, [H_DIVIDEND+3]
+ ld c, a ; store global offset in c
+ ld de, W_MISSABLEOBJECTLIST
+ pop hl
+.writeMissableObjectsListLoop
+ ld a, [hli]
+ cp $ff
+ jr z, .done ; end of list
+ cp b
+ jr nz, .done ; not for current map anymore
+ ld a, [hli]
+ inc hl
+ ld [de], a ; write (map-local) sprite ID
+ inc de
+ ld a, c
+ inc c
+ ld [de], a ; write (global) missable object index
+ inc de
+ jr .writeMissableObjectsListLoop
+.done
+ ld a, $ff
+ ld [de], a ; write sentinel
+ ret
+
+InitializeMissableObjectsFlags: ; eff1 (3:6ff1)
+ ld hl, W_MISSABLEOBJECTFLAGS
+ ld bc, wMissableObjectFlagsEnd - W_MISSABLEOBJECTFLAGS
+ xor a
+ call FillMemory ; clear missable objects flags
+ ld hl, MapHS00
+ xor a
+ ld [wMissableObjectCounter], a
+.missableObjectsLoop
+ ld a, [hli]
+ cp $ff ; end of list
+ ret z
+ push hl
+ inc hl
+ ld a, [hl]
+ cp Hide
+ jr nz, .skip
+ ld hl, W_MISSABLEOBJECTFLAGS
+ ld a, [wMissableObjectCounter]
+ ld c, a
+ ld b, FLAG_SET
+ call MissableObjectFlagAction ; set flag if Item is hidden
+.skip
+ ld hl, wMissableObjectCounter
+ inc [hl]
+ pop hl
+ inc hl
+ inc hl
+ jr .missableObjectsLoop
+
+; tests if current sprite is a missable object that is hidden/has been removed
+IsObjectHidden: ; f022 (3:7022)
+ ld a, [H_CURRENTSPRITEOFFSET]
+ swap a
+ ld b, a
+ ld hl, W_MISSABLEOBJECTLIST
+.loop
+ ld a, [hli]
+ cp $ff
+ jr z, .notHidden ; not missable -> not hidden
+ cp b
+ ld a, [hli]
+ jr nz, .loop
+ ld c, a
+ ld b, FLAG_TEST
+ ld hl, W_MISSABLEOBJECTFLAGS
+ call MissableObjectFlagAction
+ ld a, c
+ and a
+ jr nz, .hidden
+.notHidden
+ xor a
+.hidden
+ ld [$ffe5], a
+ ret
+
+; adds missable object (items, leg. pokemon, etc.) to the map
+; [wMissableObjectIndex]: index of the missable object to be added (global index)
+ShowObject: ; f044 (3:7044)
+ShowObject2:
+ ld hl, W_MISSABLEOBJECTFLAGS
+ ld a, [wMissableObjectIndex]
+ ld c, a
+ ld b, FLAG_RESET
+ call MissableObjectFlagAction ; reset "removed" flag
+ jp UpdateSprites
+
+; removes missable object (items, leg. pokemon, etc.) from the map
+; [wMissableObjectIndex]: index of the missable object to be removed (global index)
+HideObject: ; f053 (3:7053)
+ ld hl, W_MISSABLEOBJECTFLAGS
+ ld a, [wMissableObjectIndex]
+ ld c, a
+ ld b, FLAG_SET
+ call MissableObjectFlagAction ; set "removed" flag
+ jp UpdateSprites
+
+MissableObjectFlagAction: ; f062 (3:7062)
+; identical to FlagAction
+
+ push hl
+ push de
+ push bc
+
+ ; bit
+ ld a, c
+ ld d, a
+ and 7
+ ld e, a
+
+ ; byte
+ ld a, d
+ srl a
+ srl a
+ srl a
+ add l
+ ld l, a
+ jr nc, .ok
+ inc h
+.ok
+
+ ; d = 1 << e (bitmask)
+ inc e
+ ld d, 1
+.shift
+ dec e
+ jr z, .shifted
+ sla d
+ jr .shift
+.shifted
+
+ ld a, b
+ and a
+ jr z, .reset
+ cp 2
+ jr z, .read
+
+.set
+ ld a, [hl]
+ ld b, a
+ ld a, d
+ or b
+ ld [hl], a
+ jr .done
+
+.reset
+ ld a, [hl]
+ ld b, a
+ ld a, d
+ xor $ff
+ and b
+ ld [hl], a
+ jr .done
+
+.read
+ ld a, [hl]
+ ld b, a
+ ld a, d
+ and b
+
+.done
+ pop bc
+ pop de
+ pop hl
+ ld c, a
+ ret
+
TryPushingBoulder: ; f0a1 (3:70a1)
- dr $f0a1,$f131
+ ld a, [wd728]
+ bit 0, a ; using Strength?
+ ret z
+; where LoadMissableObjects predef points to now
+ ld a, [wFlags_0xcd60]
+ bit 1, a ; has boulder dust animation from previous push played yet?
+ ret nz
+ xor a
+ ld [hSpriteIndexOrTextID], a
+ call IsSpriteInFrontOfPlayer
+ ld a, [hSpriteIndexOrTextID]
+ ld [wBoulderSpriteIndex], a
+ and a
+ jp z, ResetBoulderPushFlags
+ ld hl, wSpriteStateData1 + 1
+ ld d, $0
+ ld a, [hSpriteIndexOrTextID]
+ swap a
+ ld e, a
+ add hl, de
+ res 7, [hl]
+ call GetSpriteMovementByte2Pointer
+ ld a, [hl]
+ cp BOULDER_MOVEMENT_BYTE_2
+ jp nz, ResetBoulderPushFlags
+ ld hl, wFlags_0xcd60
+ bit 6, [hl]
+ set 6, [hl] ; indicate that the player has tried pushing
+ ret z ; the player must try pushing twice before the boulder will move
+ ld a, [hJoyHeld]
+ and D_RIGHT | D_LEFT | D_UP | D_DOWN
+ ret z
+ predef CheckForCollisionWhenPushingBoulder
+ ld a, [wTileInFrontOfBoulderAndBoulderCollisionResult]
+ and a ; was there a collision?
+ jp nz, ResetBoulderPushFlags
+ ld a, [hJoyHeld]
+ ld b, a
+ ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
+ cp SPRITE_FACING_UP
+ jr z, .pushBoulderUp
+ cp SPRITE_FACING_LEFT
+ jr z, .pushBoulderLeft
+ cp SPRITE_FACING_RIGHT
+ jr z, .pushBoulderRight
+.pushBoulderDown
+ bit 7, b
+ ret z
+ ld de, PushBoulderDownMovementData
+ jr .done
+.pushBoulderUp
+ bit 6, b
+ ret z
+ ld de, PushBoulderUpMovementData
+ jr .done
+.pushBoulderLeft
+ bit 5, b
+ ret z
+ ld de, PushBoulderLeftMovementData
+ jr .done
+.pushBoulderRight
+ bit 4, b
+ ret z
+ ld de, PushBoulderRightMovementData
+.done
+ call MoveSprite
+ ld a, SFX_PUSH_BOULDER
+ call PlaySound
+ ld hl, wFlags_0xcd60
+ set 1, [hl]
+ ret
+
+PushBoulderUpMovementData: ; f129 (3:7129)
+ db NPC_MOVEMENT_UP,$FF
+
+PushBoulderDownMovementData: ; f12b (3:712b)
+ db NPC_MOVEMENT_DOWN,$FF
+
+PushBoulderLeftMovementData: ; f12d (3:712d)
+ db NPC_MOVEMENT_LEFT,$FF
+
+PushBoulderRightMovementData: ; f12f (3:712f)
+ db NPC_MOVEMENT_RIGHT,$FF
+
DoBoulderDustAnimation: ; f131 (3:7131)
- dr $f131,$f161
+ ld a, [wd730]
+ bit 0, a
+ ret nz
+ callab AnimateBoulderDust
+ call DiscardButtonPresses
+ ld [wJoyIgnore], a
+ call ResetBoulderPushFlags
+ set 7, [hl]
+ ld a, [wBoulderSpriteIndex]
+ ld [H_SPRITEINDEX], a
+ call GetSpriteMovementByte2Pointer
+ ld [hl], $10
+ ld a, SFX_CUT
+ jp PlaySound
+
+ResetBoulderPushFlags: ; f159 (3:7159)
+ ld hl, wFlags_0xcd60
+ res 1, [hl]
+ res 6, [hl]
+ ret
+
_AddPartyMon: ; f161 (3:7161)
- dr $f161,$f1e5
-Pointer_f1e5: ; f1e5 (3:71e5)
- dr $f1e5,$f323
+; Adds a new mon to the player's or enemy's party.
+; [wMonDataLocation] is used in an unusual way in this function.
+; If the lower nybble is 0, the mon is added to the player's party, else the enemy's.
+; If the entire value is 0, then the player is allowed to name the mon.
+ ld de, wPartyCount
+ ld a, [wMonDataLocation]
+ and $f
+ jr z, .next
+ ld de, wEnemyPartyCount
+.next
+ ld a, [de]
+ inc a
+ cp PARTY_LENGTH + 1
+ ret nc ; return if the party is already full
+ ld [de], a
+ ld a, [de]
+ ld [hNewPartyLength], a
+ add e
+ ld e, a
+ jr nc, .noCarry
+ inc d
+.noCarry
+ ld a, [wcf91]
+ ld [de], a ; write species of new mon in party list
+ inc de
+ ld a, $ff ; terminator
+ ld [de], a
+ ld hl, wPartyMonOT
+ ld a, [wMonDataLocation]
+ and $f
+ jr z, .next2
+ ld hl, wEnemyMonOT
+.next2
+ ld a, [hNewPartyLength]
+ dec a
+ call SkipFixedLengthTextEntries
+ ld d, h
+ ld e, l
+ ld hl, wPlayerName
+ ld bc, NAME_LENGTH
+ call CopyData
+ ld a, [wMonDataLocation]
+ and a
+ jr nz, .skipNaming
+ ld hl, wPartyMonNicks
+ ld a, [hNewPartyLength]
+ dec a
+ call SkipFixedLengthTextEntries
+ ld a, NAME_MON_SCREEN
+ ld [wNamingScreenType], a
+ predef AskName
+.skipNaming
+ ld hl, wPartyMons
+ ld a, [wMonDataLocation]
+ and $f
+ jr z, .next3
+ ld hl, wEnemyMons
+.next3
+ ld a, [hNewPartyLength]
+ dec a
+ ld bc, wPartyMon2 - wPartyMon1
+ call AddNTimes
+ ld e, l
+ ld d, h
+ push hl
+ ld a, [wcf91]
+ ld [wd0b5], a
+ call GetMonHeader
+ ld hl, W_MONHEADER
+ ld a, [hli]
+ ld [de], a ; species
+ inc de
+ pop hl
+ push hl
+ ld a, [wMonDataLocation]
+ and $f
+ ld a, $98 ; set enemy trainer mon IVs to fixed average values
+ ld b, $88
+ jr nz, .next4
+
+; If the mon is being added to the player's party, update the pokedex.
+ ld a, [wcf91]
+ ld [wd11e], a
+ push de
+ predef IndexToPokedex
+ pop de
+ ld a, [wd11e]
+ dec a
+ ld c, a
+ ld b, FLAG_TEST
+ ld hl, wPokedexOwned
+ call FlagAction
+ ld a, c ; whether the mon was already flagged as owned
+ ld [wUnusedD153], a ; not read
+ ld a, [wd11e]
+ dec a
+ ld c, a
+ ld b, FLAG_SET
+ push bc
+ call FlagAction
+ pop bc
+ ld hl, wPokedexSeen
+ call FlagAction
+
+ pop hl
+ push hl
+
+ ld a, [W_ISINBATTLE]
+ and a ; is this a wild mon caught in battle?
+ jr nz, .copyEnemyMonData
+
+; Not wild.
+ call Random ; generate random IVs
+ ld b, a
+ call Random
+
+.next4
+ push bc
+ ld bc, wPartyMon1DVs - wPartyMon1
+ add hl, bc
+ pop bc
+ ld [hli], a
+ ld [hl], b ; write IVs
+ ld bc, (wPartyMon1HPExp - 1) - (wPartyMon1DVs + 1)
+ add hl, bc
+ ld a, 1
+ ld c, a
+ xor a
+ ld b, a
+ call CalcStat ; calc HP stat (set cur Hp to max HP)
+ ld a, [H_MULTIPLICAND+1]
+ ld [de], a
+ inc de
+ ld a, [H_MULTIPLICAND+2]
+ ld [de], a
+ inc de
+ xor a
+ ld [de], a ; box level
+ inc de
+ ld [de], a ; status ailments
+ inc de
+ jr .copyMonTypesAndMoves
+.copyEnemyMonData
+ ld bc, wEnemyMon1DVs - wEnemyMon1
+ add hl, bc
+ ld a, [wEnemyMonDVs] ; copy IVs from cur enemy mon
+ ld [hli], a
+ ld a, [wEnemyMonDVs + 1]
+ ld [hl], a
+ ld a, [wEnemyMonHP] ; copy HP from cur enemy mon
+ ld [de], a
+ inc de
+ ld a, [wEnemyMonHP+1]
+ ld [de], a
+ inc de
+ xor a
+ ld [de], a ; box level
+ inc de
+ ld a, [wEnemyMonStatus] ; copy status ailments from cur enemy mon
+ ld [de], a
+ inc de
+.copyMonTypesAndMoves
+ ld hl, W_MONHTYPES
+ ld a, [hli] ; type 1
+ ld [de], a
+ inc de
+ ld a, [hli] ; type 2
+ ld [de], a
+ inc de
+ ld a, [hli] ; catch rate (held item in gen 2)
+ ld [de], a
+ ld a, [wcf91]
+ cp KADABRA
+ jr nz, .skipGivingTwistedSpoon
+ ld a, $60 ; twistedspoon in gen 2
+ ld [de], a
+.skipGivingTwistedSpoon
+ ld hl, W_MONHMOVES
+ ld a, [hli]
+ inc de
+ push de
+ ld [de], a
+ ld a, [hli]
+ inc de
+ ld [de], a
+ ld a, [hli]
+ inc de
+ ld [de], a
+ ld a, [hli]
+ inc de
+ ld [de], a
+ push de
+ dec de
+ dec de
+ dec de
+ xor a
+ ld [wLearningMovesFromDayCare], a
+ predef WriteMonMoves
+ pop de
+ ld a, [wPlayerID] ; set trainer ID to player ID
+ inc de
+ ld [de], a
+ ld a, [wPlayerID + 1]
+ inc de
+ ld [de], a
+ push de
+ ld a, [W_CURENEMYLVL]
+ ld d, a
+ callab CalcExperience
+ pop de
+ inc de
+ ld a, [hExperience] ; write experience
+ ld [de], a
+ inc de
+ ld a, [hExperience + 1]
+ ld [de], a
+ inc de
+ ld a, [hExperience + 2]
+ ld [de], a
+ xor a
+ ld b, NUM_STATS * 2
+.writeEVsLoop ; set all EVs to 0
+ inc de
+ ld [de], a
+ dec b
+ jr nz, .writeEVsLoop
+ inc de
+ inc de
+ pop hl
+ call AddPartyMon_WriteMovePP
+ inc de
+ ld a, [W_CURENEMYLVL]
+ ld [de], a
+ inc de
+ ld a, [W_ISINBATTLE]
+ dec a
+ jr nz, .calcFreshStats
+ ld hl, wEnemyMonMaxHP
+ ld bc, $a
+ call CopyData ; copy stats of cur enemy mon
+ pop hl
+ jr .done
+.calcFreshStats
+ pop hl
+ ld bc, wPartyMon1HPExp - 1 - wPartyMon1
+ add hl, bc
+ ld b, $0
+ call CalcStats ; calculate fresh set of stats
+.done
+ scf
+ ret
+
+LoadMovePPs: ; f2f9 (3:72f9)
+ call GetPredefRegisters
+ ; fallthrough
+AddPartyMon_WriteMovePP: ; f2fc (3:72fc)
+ ld b, NUM_MOVES
+.pploop
+ ld a, [hli] ; read move ID
+ and a
+ jr z, .empty
+ dec a
+ push hl
+ push de
+ push bc
+ ld hl, Moves
+ ld bc, MoveEnd - Moves
+ call AddNTimes
+ ld de, wcd6d
+ ld a, BANK(Moves)
+ call FarCopyData
+ pop bc
+ pop de
+ pop hl
+ ld a, [wcd6d + 5] ; PP is byte 5 of move data
+.empty
+ inc de
+ ld [de], a
+ dec b
+ jr nz, .pploop ; there are still moves to read
+ ret
+
_AddEnemyMonToPlayerParty: ; f323 (3:7323)
dr $f323,$f3a4
Func_f3a4: ; f3a4 (3:73a4)
- dr $f3a4,$f9de
+ dr $f3a4,$f4ef
+FlagAction: ; f4ef (3:74ef)
+ dr $f4ef,$f9de
PrintBookshelfText: ; f9de (3:79de)
dr $f9de,$fad3
PokemonStuffText: ; fad3 (3:7ad3)
@@ -1399,7 +2226,9 @@ TryEvolvingMon:
EvolveTradeMon: ; 3adb8 (e:6db8)
dr $3adb8,$3b10f
Func_3b10f: ; 3b01f (e:710f)
- dr $3b10f,$3c000
+ dr $3b10f,$3b1e5
+Pointer_3b1e5: ; 3b1e5 (e:71e5)
+ dr $3b1e5,$3c000
SECTION "bank0F",ROMX,BANK[$0F]
@@ -1552,7 +2381,7 @@ SECTION "bank18",ROMX,BANK[$18]
SECTION "bank19",ROMX,BANK[$19]
-
+Overworld_GFX:
dr $64000,$68000
@@ -1604,7 +2433,7 @@ VendingMachineMenu: ; 74726 (1d:4726)
SECTION "bank1E",ROMX,BANK[$1E]
dr $78000,$78757
-AnimationTileset2: ; 78757 (1e:4857)
+AnimationTileset2: ; 78757 (1e:4757)
dr $78757,$79816
HideSubstituteShowMonAnim: ; 79816 (1e:5816)
dr $79816,$798b2
@@ -1613,7 +2442,11 @@ ReshowSubstituteAnim: ; 798b2 (1e:58b2)
AnimationTransformMon: ; 798c8 (1e:58c8)
dr $798c8,$798d4
ChangeMonPic: ; 798d4 (1e:58d4)
- dr $798d4,$7a19a
+ dr $798d4,$7a037
+AnimCut: ; 7a037 (1e:6037)
+ dr $7a037,$7a0fb
+AnimateBoulderDust: ; 7a0fb (1e:60fb)
+ dr $7a0fb,$7a19a
RedFishingTilesFront: INCBIN "gfx/red_fishing_tile_front.2bpp"
RedFishingTilesBack: INCBIN "gfx/red_fishing_tile_back.2bpp"
@@ -1804,14 +2637,3 @@ YellowIntroGraphics: INCBIN "gfx/yellow_intro.2bpp"
SECTION "bank3F",ROMX,BANK[$3F]
INCLUDE "engine/bank3f/main.asm"
-
-
-;IF DEF(_OPTION_BEACH_HOUSE)
-;SECTION "bank3C",ROMX[$4314],BANK[$3C]
-;
-;BeachHouse_GFX:
-; INCBIN "gfx/tilesets/beachhouse.2bpp"
-;
-;BeachHouse_Block:
-; INCBIN "gfx/blocksets/beachhouse.bst"
-;ENDC