summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluckytyphlosion <alan.rj.huang@gmail.com>2015-06-29 12:26:02 -0400
committerluckytyphlosion <alan.rj.huang@gmail.com>2015-06-29 12:26:02 -0400
commit8d1adbe2a946edf6c1b456b0c2ad04d1c9f41cd9 (patch)
tree47ef2660a899d4d7de03740d2a2fd40d12abc618
parentc3e09695f21cb6b77544c5cca6cbf439577f6ebd (diff)
Bank3d documentation.
-rw-r--r--engine/bank3d/link_menu.asm897
-rw-r--r--engine/bank3d/main.asm398
-rw-r--r--engine/battle/common_text.asm56
-rw-r--r--engine/battle/decrement_pp.asm4
-rw-r--r--engine/battle/link_battle_versus_text.asm5
-rwxr-xr-xengine/battle/safari_zone.asm14
-rw-r--r--engine/battle/scroll_draw_trainer_pic.asm4
-rw-r--r--engine/battle/unused_stats_functions.asm4
8 files changed, 1344 insertions, 38 deletions
diff --git a/engine/bank3d/link_menu.asm b/engine/bank3d/link_menu.asm
new file mode 100644
index 00000000..8777aef7
--- /dev/null
+++ b/engine/bank3d/link_menu.asm
@@ -0,0 +1,897 @@
+Func_f531b:: ; f531b (3d:531b)
+ ld c,$14
+ call DelayFrames
+ ld a,$1
+ ld [wBuffer],a
+ xor a
+ ld [wUnknownSerialFlag_d49a],a
+ hlCoord 0,0
+ ld bc,$405
+ call TextBoxBorder
+ ld de,Text_f5791
+ hlCoord 1,1
+ call PlaceString
+ hlCoord 8,0
+ ld bc,$80a
+ call TextBoxBorder
+ hlCoord 10,2
+ ld de,Text_f579c
+ call PlaceString
+ hlCoord 0,10
+ ld bc,$612
+ call TextBoxBorder
+ call UpdateSprites
+ xor a
+ ld [wcd37],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_d49a],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
+ xor a
+ ld [wUnknownSerialCounter],a
+ ld [wUnknownSerialCounter+1],a
+ and a
+ ret
+
+Func_f5476:: ; f5476 (3d:5476)
+ ld hl,Text_f5807
+ 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
+ ld a,[hli]
+.loop
+ 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,Pointer_4050b
+ add hl,bc
+ add hl,bc
+ ld de,wcd6d
+ ld bc,$2
+ ld a,BANK(Pointer_4050b)
+ call FarCopyData
+ ld hl,wcd6d
+ ld a,[hli]
+ ld h,[hl]
+ ld l,a
+ ld de,wcd6d
+ ld bc,$14
+ ld a,BANK(Pointer_4050b)
+ call FarCopyData
+ ld hl,wcd6d
+.loop
+ ld a,[hli]
+ cp "@"
+ jr nz,.loop
+ 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,Text_f57bc
+ call PrintText
+ ld a,$1
+ ret
+
+MewInParty:: ; f5626 (3d:f5626)
+ ld hl,Text_f57c1
+ call PrintText
+ ld a,$2
+ ret
+
+DuplicateSpecies:: ; f562f (3d:f562f)
+ ld hl,Text_f57c6
+ call PrintText
+ ld a,$3
+ ret
+
+LevelAbove55:: ; f5638 (3d:5638)
+ ld hl,Text_f57cb
+ call PrintText
+ ld a,$4
+ ret
+
+LevelUnder50:: ; f5641 (3d:5641)
+ ld hl,Text_f57d0
+ call PrintText
+ ld a,$5
+ ret
+
+CombinedLevelsGreaterThan155:: ; f5641 (3d:564a)
+ ld hl,Text_f57d5
+ call PrintText
+ ld a,$6
+ ret
+
+LevelAbove30:: ; f5653 (3d:5653)
+ ld hl,Text_f57da
+ call PrintText
+ ld a,$7
+ ret
+
+LevelUnder25:: ; f565c (3d:565c)
+ ld hl,Text_f57df
+ call PrintText
+ ld a,$8
+ ret
+
+CombinedLevelsAbove80:: ; f5665 (3d:5665)
+ ld hl,Text_f5665
+ call PrintText
+ ld a,$9
+ ret
+
+LevelAbove20:: ; f566e (3d:566e)
+ ld hl,Text_f57e9
+ call PrintText
+ ld a,$a
+ ret
+
+LevelUnder15:: ; f5677 (3d:5677)
+ ld hl,Text_f57ee
+ call PrintText
+ ld a,$b
+ ret
+
+CombinedLevelsAbove50:: ; f5680 (3d:5680)
+ ld hl,Text_f57f3
+ call PrintText
+ ld a,$c
+ ret
+
+asm_f5689:: ; f5689 (3d:5689)
+ pop af
+ pop bc
+ pop hl
+ ld [wd11e],a
+ call GetMonName
+ ld hl,Text_f57f8
+ call PrintText
+ ld a,$d
+ ret
+
+asm_f569b:: ; f569b (3d:569b)
+ pop af
+ pop bc
+ pop hl
+ ld [wd11e],a
+ call GetMonName
+ ld hl,Text_f57fd
+ call PrintText
+ ld a,$e
+ ret
+
+asm_f56ad:: ; f56ad (3d:56ad)
+ ld a,[hl]
+ ld [wd11e],a
+ call GetMonName
+ ld hl,Text_f5802
+ call PrintText
+ ld a,$f
+ ret
+
+Func_f56bd:: ; f56bd (3d:56bd)
+ xor a
+ ld [H_AUTOBGTRANSFERENABLED],a
+ hlCoord 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
+ hlCoord 1,12
+ call PlaceString
+ 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<pkmn>:50-55"
+ next "Sum of LVs:155 MAX"
+ next "MEW can't attend.@"
+
+Text_f5728:: ; f5728 (3d:5728)
+ db "LVs of 3<pkmn>:15-20"
+ next "Sum of LVs:50 MAX"
+ next "MEW can't attend.@"
+
+Text_f575b:: ; f575b (3d:575b)
+ db "3 Basic <pkmn>.LV25-30"
+ next "Sum of LVs:80 MAX"
+ next "6",$71,"8",$73," and 44lb MAX@" ; 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@"
+
+Text_f57bc:: ; f57bc (3d:57bc)
+ TX_FAR _Text_f57bc ; a0a2b
+ db "@"
+
+Text_f57c1:: ; f57c1 (3d:57c1)
+ TX_FAR _Text_f57c1 ; a0a46
+ db "@"
+
+Text_f57c6:: ; f57c6 (3d:57c6)
+ TX_FAR _Text_f57c6 ; a0a5f
+ db "@"
+
+Text_f57cb:: ; f57cb (3d:57cb)
+ TX_FAR _Text_f57cb ; a0a81
+ db "@"
+
+Text_f57d0:: ; f57d0 (3d:57d0)
+ TX_FAR _Text_f57d0 ; a0a9a
+ db "@"
+
+Text_f57d5:: ; f57d5 (3d:57d5)
+ TX_FAR _Text_f57d5 ; a0aba
+ db "@"
+
+Text_f57da:: ; f57da (3d:57da)
+ TX_FAR _Text_f57da ; a0ad9
+ db "@"
+
+Text_f57df:: ; f57df (3d:57df)
+ TX_FAR _Text_f57df ; a0af2
+ db "@"
+
+Text_f57e4:: ; f57e4 (3d:57e4)
+ TX_FAR _Text_f57e4 ; a0b12
+ db "@"
+
+Text_f57e9:: ; f57e9 (3d:57e9)
+ TX_FAR _Text_f57e9 ; a0b30
+ db "@"
+
+Text_f57ee:: ; f57ee (3d:57ee)
+ TX_FAR _Text_f57ee ; a0b49
+ db "@"
+
+Text_f57f3:: ; f57f3 (3d:57f3)
+ TX_FAR _Text_f57f3 ; a0b69
+ db "@"
+
+Text_f57f8:: ; f57f8 (3d:57f8)
+ TX_FAR _Text_f57f8 ; a0b87
+ db "@"
+
+Text_f57fd:: ; f57fd (3d:57fd)
+ TX_FAR _Text_f57fd ; a0b9f
+ db "@"
+
+Text_f5802:: ; f5802 (3d:5802)
+ TX_FAR _Text_f5802 ; a0bbb
+ db "@"
+
+Text_f5807:: ; f5807 (3d:5807)
+ TX_FAR _Text_f5807 ; a0bd4
+ db "@"
+
+LinkMenu: ; f580c (3d:580c)
+ xor a
+ ld [wd358], a
+ ld hl, wd72e
+ set 6, [hl]
+ ld hl, TextTerminator_6b20
+ call PrintText
+ call SaveScreenTilesToBuffer1
+ ld hl, WhereWouldYouLikeText
+ call PrintText
+ hlCoord 5, 5
+ ld bc, $80d
+ call TextBoxBorder
+ call UpdateSprites
+ hlCoord 7, 7
+ ld de, TradeCenterText
+ call PlaceString
+ xor a
+ ld [wcd37], 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
+ jr z, .updateCursorPosition
+ 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, TRADE_CENTER
+ jr nz, .next
+ ld a, BATTLE_CENTER
+.next
+ ld [wd72d], a
+ ld hl, PleaseWaitText
+ call PrintText
+ ld c, $32
+ call DelayFrames
+ ld hl, wd732
+ res 1, [hl]
+ ld a, [W_ANIMATIONID]
+ 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 [wcc47], a
+ ld hl,SpecialWarpIn
+ ld b,BANK(SpecialWarpIn)
+ jp Bankswitch
+.choseCancel
+ xor a
+ ld [wMenuJoypadPollCount], a
+ call Delay3
+ callab CloseLinkConnection
+ ld hl, LinkCanceledText
+ 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
+ xor a
+ ld [wBuffer], a
+ ld a,$ff
+ ld [wSerialExchangeNybbleReceiveData],a
+ ld b,$78
+.loop
+ ld a,[hSerialConnectionStatus]
+ cp $2
+ call z,DelayFrame
+ dec b
+ jr z,.asm_f59b2
+ call SerialExchange_Nybble
+ call DelayFrame
+ ld a,[wSerialExchangeNybbleReceiveData]
+ inc a
+ jr z,.loop
+.loop2
+ ld b,$f
+ call DelayFrame
+ call SerialExchange_Nybble
+ 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 .chooseCancel
+
+.asm_f59cd
+ ld hl,Text_f5a11
+ call PrintText
+ jp .chooseCancel
+
+.asm_f59d6
+ ld b,$7f
+ ld c,$7f
+ ld d,$ec
+ ld e,$7f
+ call Func_f59ec
+ call Func_f531b
+ jp c,.chooseCancel
+ ld a,$f0
+ jp .next
+
+Func_f59ec:: ; f59ec (3d:59ec)
+ ld a, b
+ Coorda 6, 7
+ ld a, c
+ Coorda 6, 9
+ ld a, d
+ Coorda 6, 11
+ ld c, 40
+ call DelayFrames
+ ret
+
+WhereWouldYouLikeText: ; f5a07 (3d:5a07)
+ TX_FAR _WhereWouldYouLikeText
+ db "@"
+
+PleaseWaitText: ; f5a0c (3d:5a0c)
+ TX_FAR _PleaseWaitText
+ db "@"
+
+LinkCanceledText: ; f5a11 (3d:5a11)
+ TX_FAR _LinkCanceledText
+ 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
new file mode 100644
index 00000000..9cf96ccd
--- /dev/null
+++ b/engine/bank3d/main.asm
@@ -0,0 +1,398 @@
+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)
+ hlCoord 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
+ 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"
+
+Func_f430a:: ; f430a (3d:430a)
+ ld a,d
+ cp $4
+ jr z,.asm_f4320
+ cp $6
+ jr z,.asm_f4320
+ push de
+ callab Func_fce18
+ pop de
+ ret nc
+ jr .asm_f432b
+.asm_f4320
+ push de
+ callab Func_fcdb8
+ pop de
+ ret nc
+ push de
+ ld e,$0
+ ld a,[wd470]
+ cp $64
+ jr c,.asm_f433b
+ inc e
+ cp $c8
+ jr c,.asm_f433b
+ inc e
+ ld c,d
+ dec c
+ ld b,$0
+ ld hl,Pointer_f4385
+ add hl,bc
+ add hl,bc
+ add hl,bc
+ ld d,$0
+ add hl,de
+ ld a,[hl]
+ cp $64
+ ld a,[wd470]
+ jr nc,.asm_f4357
+ add [hl]
+ jr nc,.asm_f435b
+ ld a,$ff
+ jr .asm_f435b
+.asm_f4357
+ add [hl]
+ jr c,.asm_f435b
+ xor a
+.asm_f435b
+ ld [wd470],a
+ pop de
+ dec d
+ ld hl,Pointer_f43a6
+ ld e,d
+ ld d,$0
+ add hl,de
+ ld a,[hl]
+ ld b,a
+ cp $80
+ jr z,.asm_f4384
+ ld a,[wd471]
+ jr c,.asm_f437d
+ cp b
+ jr nc,.asm_f4384
+ ld a,[wd49c]
+ and a
+ jr nz,.asm_f4384
+ jr .asm_f4380
+.asm_f437d
+ cp b
+ jr c,.asm_f4384
+.asm_f4380
+ ld a,b
+ ld [wd471],a
+ ret
+
+Pointer_f4385:: ; f4385 (3d:4385)
+ db $05,$03,$02,$05,$03,$02,$01,$01,$00,$03,$02,$01,$01,$01,$00,$02,$01,$01
+ db $fd,$fb,$ff,$ff,$ff,$fb,$fb,$f6,$fb,$fb,$f6,$f6,$f6,$ec
+
+Pointer_f43a6:: ; f43a6 (3d:43a6)
+ db $8a,$83,$80,$80,$94,$80,$62,$6c,$62,$6c
+ db $00
+
+; 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
+ ld de,vChars1+$fd0
+ ld bc,$30
+ ld a,BANK(YellowLogoGraphics)
+ call FarCopyData
+ ld hl,YellowLogoGraphics+$30
+ ld de,vChars1
+ ld bc,$400
+ ld a,BANK(YellowLogoGraphics)
+ call FarCopyData
+ ld hl,YellowLogoGraphics+$430
+ ld de,vChars1+$f00
+ ld bc,$c0
+ ld a,BANK(YellowLogoGraphics)
+ call FarCopyData
+ ret
+
+Func_f4578:: ; f4578 (3d:4578)
+ hlCoord 1,1
+ ld de,Pointer_f45f9
+ ld bc,7 << 8 | 16 ; 16x7 (xy)
+ call CopyScreenArea
+ ret
+
+Func_f4585:: ; f4585 (3d:4585)
+ hlCoord 5,3
+ ld de,Pointer_f4673
+ ld bc,4 << 8 | 7 ; 7x4 (xy)
+ call CopyScreenArea
+ hlCoord 8,7
+ ld [hl],$64
+ inc hl
+ ld [hl],$65
+ ret
+
+Func_f459a:: ; f459a (3d:459a)
+ hlCoord 3,7
+ ld de,Pointer_f468f
+ ld bc,9 << 8 | 12 ; 12x9 (xy)
+ call CopyScreenArea
+ hlCoord 15,9
+ ld [hl],$96
+ hlCoord 15,10
+ ld [hl],$9d
+ hlCoord 15,11
+ ld [hl],$a7
+ hlCoord 15,12
+ 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 [wd09b],a
+
+HandleMenuInputPokemonSelectionDouble:: ; 3aaf (0:3aaf)
+ 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
+ xor a
+ ld [wPartyMonAnimCounter],a ; counter for pokemon shaking animation
+ call Func_f5ab0
+ call Delay3
+ 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 [wcc4b],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 nc,.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,(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
+ xor a
+ ld [wMenuWrappingEnabled],a ; disable menu wrapping
+ ld a,[hJoy5]
+ ret
+
+Func_f5ab0:: ; f5ab0 (3d:5ab0)
+ ld a,[wTopMenuItemY]
+ and a
+ jr z,.asm_f5ac0
+ hlCoord 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
+ 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 \ No newline at end of file
diff --git a/engine/battle/common_text.asm b/engine/battle/common_text.asm
index 9a00bd98..d3200beb 100644
--- a/engine/battle/common_text.asm
+++ b/engine/battle/common_text.asm
@@ -1,4 +1,4 @@
-PrintBeginningBattleText: ; 58d99 (16:4d99)
+PrintBeginningBattleText: ; f4000 (3d:4000)
ld a, [W_ISINBATTLE] ; W_ISINBATTLE
dec a
jr nz, .trainerBattle
@@ -8,8 +8,20 @@ PrintBeginningBattleText: ; 58d99 (16:4d99)
cp LAVENDER_HOUSE_1
jr c, .pokemonTower
.notPokemonTower
+ ld a,[W_BATTLETYPE]
+ cp $4 ; new battle type?
+ jr nz,.notnewbattletype
+ callab Func_fd0d0
+ ld e,$24
+ jr c,.asm_f4026
+ ld e,$a
+.asm_f4026
+ callab Func_f0000
+ jr .continue
+.notnewbattletype
ld a, [wEnemyMonSpecies2]
call PlayCry
+.continue
ld hl, WildMonAppearedText
ld a, [W_MOVEMISSED] ; W_MOVEMISSED
and a
@@ -70,31 +82,31 @@ PrintBeginningBattleText: ; 58d99 (16:4d99)
.done
ret
-WildMonAppearedText: ; 58e3b (16:4e3b)
+WildMonAppearedText: ; f40c7 (3d:40c7)
TX_FAR _WildMonAppearedText
db "@"
-HookedMonAttackedText: ; 58e40 (16:4e40)
+HookedMonAttackedText: ; f40cc (3d:40cc)
TX_FAR _HookedMonAttackedText
db "@"
-EnemyAppearedText: ; 58e45 (16:4e45)
+EnemyAppearedText: ; f40d1 (3d:40d1)
TX_FAR _EnemyAppearedText
db "@"
-TrainerWantsToFightText: ; 58e4a (16:4e4a)
+TrainerWantsToFightText: ; f40d6 (3d:40d6)
TX_FAR _TrainerWantsToFightText
db "@"
-UnveiledGhostText: ; 58e4f (16:4e4f)
+UnveiledGhostText: ; f40db (3d:40db)
TX_FAR _UnveiledGhostText
db "@"
-GhostCantBeIDdText: ; 58e54 (16:4e54)
+GhostCantBeIDdText: ; f40e0 (3d:40e0)
TX_FAR _GhostCantBeIDdText
db "@"
-PrintSendOutMonMessage: ; 58e59 (16:4e59)
+PrintSendOutMonMessage: ; f40e0 (3d:40e5)
ld hl, wEnemyMonHP
ld a, [hli]
or [hl]
@@ -126,7 +138,7 @@ PrintSendOutMonMessage: ; 58e59 (16:4e59)
ld a, [H_QUOTIENT + 3] ; a = (enemy mon current HP * 25) / (enemy max HP / 4); this approximates the current percentage of max HP
ld hl, GoText ; 70% or greater
cp 70
- jr nc, .printText
+ jr nc, .printText
ld hl, DoItText ; 40% - 69%
cp 40
jr nc, .printText
@@ -137,38 +149,38 @@ PrintSendOutMonMessage: ; 58e59 (16:4e59)
.printText
jp PrintText
-GoText: ; 58eae (16:4eae)
+GoText: ; f413a (3d:413a)
TX_FAR _GoText
db $08 ; asm
jr PrintPlayerMon1Text
-DoItText: ; 58eb5 (16:4eb5)
+DoItText: ; f4141 (3d:4141)
TX_FAR _DoItText
db $08 ; asm
jr PrintPlayerMon1Text
-GetmText: ; 58ebc (16:4ebc)
+GetmText: ; f4148 (3d:4148)
TX_FAR _GetmText
db $08 ; asm
jr PrintPlayerMon1Text
-EnemysWeakText: ; 58ec3 (16:4ec3)
+EnemysWeakText: ; f414f (3d:414f)
TX_FAR _EnemysWeakText
db $08 ; asm
-PrintPlayerMon1Text:
+PrintPlayerMon1Text: ; f4154 (3d:4154)
ld hl, PlayerMon1Text
ret
-PlayerMon1Text: ; 58ecc (16:4ecc)
+PlayerMon1Text: ; f4158 (3d:4158)
TX_FAR _PlayerMon1Text
db "@"
-RetreatMon: ; 58ed1 (16:4ed1)
+RetreatMon: ; f415d (3d:415d)
ld hl, PlayerMon2Text
jp PrintText
-PlayerMon2Text: ; 58ed7 (16:4ed7)
+PlayerMon2Text: ; f4163 (3d:4163)
TX_FAR _PlayerMon2Text
db $08 ; asm
push de
@@ -214,25 +226,25 @@ PlayerMon2Text: ; 58ed7 (16:4ed7)
ld hl, GoodText
ret
-EnoughText: ; 58f25 (16:4f25)
+EnoughText: ; f41b1 (3d:41b1)
TX_FAR _EnoughText
db $08 ; asm
jr PrintComeBackText
-OKExclamationText: ; 58f2c (16:4f2c)
+OKExclamationText: ; f41b8 (3d:41b8)
TX_FAR _OKExclamationText
db $08 ; asm
jr PrintComeBackText
-GoodText: ; 58f33 (16:4f33)
+GoodText: ; f41bf (3d:41bf)
TX_FAR _GoodText
db $08 ; asm
jr PrintComeBackText
-PrintComeBackText: ; 58f3a (16:4f3a)
+PrintComeBackText: ; f41c6 (3d:41c6)
ld hl, ComeBackText
ret
-ComeBackText: ; 58f3e (16:4f3e)
+ComeBackText: ; f41ca (3d:41ca)
TX_FAR _ComeBackText
db "@"
diff --git a/engine/battle/decrement_pp.asm b/engine/battle/decrement_pp.asm
index ecf5040b..7774070c 100644
--- a/engine/battle/decrement_pp.asm
+++ b/engine/battle/decrement_pp.asm
@@ -1,4 +1,4 @@
-DecrementPP: ; 68000 (1a:4000)
+DecrementPP: ; f42db (3d:42db)
; after using a move, decrement pp in battle and (if not transformed?) in party
ld a, [de]
cp a, STRUGGLE
@@ -33,7 +33,7 @@ DecrementPP: ; 68000 (1a:4000)
ld a, [wPlayerMonNumber] ; which mon in party is active
ld bc, wPartyMon2 - wPartyMon1
call AddNTimes ; calculate address of the mon to modify
-.DecrementPP
+.DecrementPP ; f4301 (3d:4301)
ld a, [wPlayerMoveListIndex] ; which move (0, 1, 2, 3) did we use?
ld c, a
ld b, 0
diff --git a/engine/battle/link_battle_versus_text.asm b/engine/battle/link_battle_versus_text.asm
index 7320da29..d2dfe5c0 100644
--- a/engine/battle/link_battle_versus_text.asm
+++ b/engine/battle/link_battle_versus_text.asm
@@ -1,9 +1,8 @@
; display "[player] VS [enemy]" text box with pokeballs representing their parties next to the names
-DisplayLinkBattleVersusTextBox: ; 372d6 (d:72d6)
+DisplayLinkBattleVersusTextBox: ; f41cf (3d:41cf)
call LoadTextBoxTilePatterns
hlCoord 3, 4
- ld b, $7
- ld c, $c
+ ld b, $70c
call TextBoxBorder
hlCoord 4, 5
ld de, wPlayerName
diff --git a/engine/battle/safari_zone.asm b/engine/battle/safari_zone.asm
index 6b0e2220..e195966d 100755
--- a/engine/battle/safari_zone.asm
+++ b/engine/battle/safari_zone.asm
@@ -1,19 +1,19 @@
-PrintSafariZoneBattleText: ; 4277 (1:4277)
+PrintSafariZoneBattleText: ; 4111 (1:4111)
ld hl, wSafariBaitFactor
ld a, [hl]
and a
- jr z, .asm_4284
+ jr z, .asm_411e
dec [hl]
ld hl, SafariZoneEatingText
jr .asm_429f
-.asm_4284
+.asm_411e
dec hl
ld a, [hl]
and a
ret z
dec [hl]
ld hl, SafariZoneAngryText
- jr nz, .asm_429f
+ jr nz, .asm_4139
push hl
ld a, [wEnemyMonSpecies]
ld [wd0b5], a
@@ -21,16 +21,16 @@ PrintSafariZoneBattleText: ; 4277 (1:4277)
ld a, [W_MONHCATCHRATE]
ld [wEnemyMonCatchRate], a
pop hl
-.asm_429f
+.asm_4138
push hl
call LoadScreenTilesFromBuffer1
pop hl
jp PrintText
-SafariZoneEatingText: ; 42a7 (1:42a7)
+SafariZoneEatingText: ; 4141 (1:4141)
TX_FAR _SafariZoneEatingText
db "@"
-SafariZoneAngryText: ; 42ac (1:42ac)
+SafariZoneAngryText: ; 4146 (1:4146)
TX_FAR _SafariZoneAngryText
db "@"
diff --git a/engine/battle/scroll_draw_trainer_pic.asm b/engine/battle/scroll_draw_trainer_pic.asm
index 18df86e0..c6b69362 100644
--- a/engine/battle/scroll_draw_trainer_pic.asm
+++ b/engine/battle/scroll_draw_trainer_pic.asm
@@ -1,4 +1,4 @@
-_ScrollTrainerPicAfterBattle: ; 396d3 (e:56d3)
+_ScrollTrainerPicAfterBattle: ; f4259 (e:f4259)
; Load the enemy trainer's pic and scrolls it into
; the screen from the right.
xor a
@@ -32,7 +32,7 @@ _ScrollTrainerPicAfterBattle: ; 396d3 (e:56d3)
jr .scrollLoop
; write one 7-tile column of the trainer pic to the tilemap
-DrawTrainerPicColumn: ; 39707 (e:5707)
+DrawTrainerPicColumn: ; f428d (3d:428d)
push hl
push de
push bc
diff --git a/engine/battle/unused_stats_functions.asm b/engine/battle/unused_stats_functions.asm
index 23ddbc20..5b2e5e0e 100644
--- a/engine/battle/unused_stats_functions.asm
+++ b/engine/battle/unused_stats_functions.asm
@@ -1,5 +1,5 @@
; does nothing since no stats are ever selected (barring glitches)
-DoubleSelectedStats: ; 39680 (e:5680)
+DoubleSelectedStats: ; f4206 (3d:4206)
ld a, [H_WHOSETURN]
and a
ld a, [wPlayerStatsToDouble]
@@ -29,7 +29,7 @@ DoubleSelectedStats: ; 39680 (e:5680)
ret
; does nothing since no stats are ever selected (barring glitches)
-HalveSelectedStats: ; 396a7 (e:56a7)
+HalveSelectedStats: ; f422d (3d:422d)
ld a, [H_WHOSETURN]
and a
ld a, [wPlayerStatsToHalve]