diff options
author | luckytyphlosion <alan.rj.huang@gmail.com> | 2015-06-29 12:26:02 -0400 |
---|---|---|
committer | luckytyphlosion <alan.rj.huang@gmail.com> | 2015-06-29 12:26:02 -0400 |
commit | 8d1adbe2a946edf6c1b456b0c2ad04d1c9f41cd9 (patch) | |
tree | 47ef2660a899d4d7de03740d2a2fd40d12abc618 | |
parent | c3e09695f21cb6b77544c5cca6cbf439577f6ebd (diff) |
Bank3d documentation.
-rw-r--r-- | engine/bank3d/link_menu.asm | 897 | ||||
-rw-r--r-- | engine/bank3d/main.asm | 398 | ||||
-rw-r--r-- | engine/battle/common_text.asm | 56 | ||||
-rw-r--r-- | engine/battle/decrement_pp.asm | 4 | ||||
-rw-r--r-- | engine/battle/link_battle_versus_text.asm | 5 | ||||
-rwxr-xr-x | engine/battle/safari_zone.asm | 14 | ||||
-rw-r--r-- | engine/battle/scroll_draw_trainer_pic.asm | 4 | ||||
-rw-r--r-- | engine/battle/unused_stats_functions.asm | 4 |
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] |