diff options
author | xCrystal <rgr.crystal@gmail.com> | 2018-07-25 18:08:48 +0200 |
---|---|---|
committer | xCrystal <rgr.crystal@gmail.com> | 2018-07-25 18:08:48 +0200 |
commit | f10e8a01cb30cae510af5ea613031783b61e880f (patch) | |
tree | fb34f59373a759045bd5b56b3ee9344b63cde97a /src | |
parent | e10c10442021c525590af916829426497aba144d (diff) |
More duel related stuff
Diffstat (limited to 'src')
-rw-r--r-- | src/constants/duel_constants.asm | 4 | ||||
-rw-r--r-- | src/engine/bank01.asm | 302 | ||||
-rw-r--r-- | src/engine/bank03.asm | 2 | ||||
-rw-r--r-- | src/engine/home.asm | 409 | ||||
-rw-r--r-- | src/wram.asm | 32 |
5 files changed, 490 insertions, 259 deletions
diff --git a/src/constants/duel_constants.asm b/src/constants/duel_constants.asm index 9171854..fdd0966 100644 --- a/src/constants/duel_constants.asm +++ b/src/constants/duel_constants.asm @@ -81,8 +81,8 @@ DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA EQUS "LOW(wPlayerNumberOfPokemonInPlayA DUELVARS_ARENA_CARD_STATUS EQUS "LOW(wPlayerArenaCardStatus)" ; f0 DUELVARS_DUELIST_TYPE EQUS "LOW(wPlayerDuelistType)" ; f1 DUELVARS_ARENA_CARD_DISABLED_MOVE_INDEX EQUS "LOW(wPlayerArenaCardDisabledMoveIndex)" ; f2 -DUELVARS_ARENA_CARD_LAST_TURN_DAMAGE EQUS "LOW(wPlayerArenaCardLastTurnDamage)" ; f3 -DUELVARS_ARENA_CARD_LAST_TURN_STATUS EQUS "LOW(wPlayerArenaCardLastTurnStatus)" ; f5 +DUELVARS_ARENA_CARD_LAST_TURN_DAMAGE EQUS "LOW(wPlayerArenaCardLastTurnDamage)" ; f3 +DUELVARS_ARENA_CARD_LAST_TURN_STATUS EQUS "LOW(wPlayerArenaCardLastTurnStatus)" ; f5 ; card location constants (DUELVARS_CARD_LOCATIONS) CARD_LOCATION_DECK EQU $00 diff --git a/src/engine/bank01.asm b/src/engine/bank01.asm index 9108aaa..85c27e7 100644 --- a/src/engine/bank01.asm +++ b/src/engine/bank01.asm @@ -346,7 +346,7 @@ DuelMainInterface: ; 426d (1:426d) ; DUELIST_TYPE_AI_OPP xor a ld [wVBlankCounter], a - ld [wcbf9], a + ld [wSkipDuelistIsThinkingDelay], a ldtx hl, DuelistIsThinkingText call DrawWideTextBox_PrintTextNoDelay call Func_2bbf @@ -514,7 +514,7 @@ OpenActivePokemonScreen: ; 4376 (1:4376) DuelMenu_PkmnPower: ; 438e (1:438e) call $6431 jp c, DuelMainInterface - call Func_1730 + call UseAttackOrPokemonPower jp DuelMainInterface ; triggered by selecting the "Done" item in the duel menu @@ -949,7 +949,7 @@ Func_4673: ; 4673 (1:4673) ld hl, wcbc9 ld [hli], a ld [hl], $00 - call Func_627c + call PrintPlayAreaCardInformation xor a ld [wcbfb], a inc a @@ -1083,7 +1083,7 @@ DuelMenu_Attack: ; 46fc (1:46fc) ld a, $07 call DoPracticeDuelAction jp c, Func_4268 - call Func_1730 + call UseAttackOrPokemonPower jp c, DuelMainInterface ret @@ -1644,7 +1644,7 @@ DisplayPlayerDrawCardScreen: ; 4b2c (1:4b2c) ; display card detail when a card is drawn or played ; hl is text to display -; a is card index +; a is the card's deck index DisplayCardDetailScreen: ; 4b31 (1:4b31) call LoadCardDataToBuffer1_FromDeckIndex call _DisplayCardDetailScreen @@ -3291,7 +3291,7 @@ JPWriteByteToBGMap0: ; 5b7a (1:5b7a) Func_5c33: ; 5c33 (1:5c33 INCROM $5c33, $5e5f -; display the card details of the card index in wLoadedCard1 +; display the card details of the card in wLoadedCard1 ; print the text at hl _DisplayCardDetailScreen: ; 5e5f (1:5e5f) push hl @@ -3547,27 +3547,37 @@ PlayAreaScreenMenuFunction: ; 60ce (1:60ce) INCROM $60dd, $622a -Func_622a: ; 622a (1:622a) +; print a turn holder's play area Pokemon card's name, level, face down stage card, +; color symbol, status symbol (if any), pluspower/defender symbols (if any), +; attached energies (if any), HP bar, and the play area location (ACT/BPx indicator) +; input: + ; wcbc9: PLAY_AREA_* of the card to display the information of + ; wcbca: Y coordinate of where to print the card's information +; total space occupied is a rectangle of 20x3 tiles +PrintPlayAreaCardInformationAndLocation: ; 622a (1:622a) ld a, [wcbc9] add DUELVARS_ARENA_CARD call GetTurnDuelistVariable cp -1 ret z - call Func_627c + call PrintPlayAreaCardInformation + ; print the ACT/BPx indicator ld a, [wcbc9] add a add a ld e, a ld d, $00 - ld hl, UnknownData_6264 + ld hl, PlayAreaLocationTileNumbers add hl, de ldh a, [hWhoseTurn] cp PLAYER_TURN - jr z, .asm_624c + jr z, .write_tiles + ; move forward to the opponent's side tile numbers + ; they have black letters and white background instead of the other way around ld d, $0a -.asm_624c +.write_tiles ld a, [wcbca] - ld b, $01 + ld b, 1 ld c, a ld a, [hli] add d @@ -3583,11 +3593,25 @@ Func_622a: ; 622a (1:622a) ret ; 0x6264 -UnknownData_6264: ; 6264 (1:6264) - INCROM $6264, $627c - -Func_627c: ; 627c (1:627c) - call Func_62d5 +PlayAreaLocationTileNumbers: ; 6264 (1:6264) + db $e0, $e1, $e2, $00 ; ACT + db $e3, $e4, $e5, $00 ; BP1 + db $e3, $e4, $e6, $00 ; BP2 + db $e3, $e4, $e7, $00 ; BP3 + db $e3, $e4, $e8, $00 ; BP4 + db $e3, $e4, $e9, $00 ; BP5 + +; print a turn holder's play area Pokemon card's name, level, face down stage card, +; color symbol, status symbol (if any), pluspower/defender symbols (if any), +; attached energies (if any), and HP bar. +; input: + ; wcbc9: PLAY_AREA_* of the card to display the information of + ; wcbca: Y coordinate of where to print the card's information +; total space occupied is a rectangle of 20x3 tiles +PrintPlayAreaCardInformation: ; 627c (1:627c) + ; print name, level, color, stage, status, pluspower/defender + call PrintPlayAreaCardHeader + ; print the symbols of the attached energies ld a, [wcbc9] ld e, a ld a, [wcbca] @@ -3601,6 +3625,7 @@ Func_627c: ; 627c (1:627c) ld b, 5 ld a, SYM_E call WriteByteToBGMap0 + ; print the HP bar inc c ld a, SYM_HP call WriteByteToBGMap0 @@ -3635,7 +3660,13 @@ Func_627c: ; 627c (1:627c) ret ; 0x62d5 -Func_62d5: ; 62d5 (1:62d5) +; print a turn holder's play area Pokemon card's name, level, face down stage card, +; color symbol, status symbol (if any), and pluspower/defender symbols (if any). +; input: + ; wcbc9: PLAY_AREA_* of the card to display the information of + ; wcbca: Y coordinate of where to print the card's information +PrintPlayAreaCardHeader: ; 62d5 (1:62d5) + ; start by printing the Pokemon's name ld a, [wcbc9] add DUELVARS_ARENA_CARD call GetTurnDuelistVariable @@ -3644,6 +3675,8 @@ Func_62d5: ; 62d5 (1:62d5) ld e, a ld d, 4 call InitTextPrinting + ; copy the name to wDefaultText (max. 10 characters) + ; then call ProcessText with hl = wDefaultText ld hl, wLoadedCard1Name ld a, [hli] ld h, [hl] @@ -3654,6 +3687,8 @@ Func_62d5: ; 62d5 (1:62d5) call CopyTextData_FromTextID pop hl call ProcessText + + ; print the Pokemon's color and the level ld a, [wcbca] ld c, a ld b, 18 @@ -3669,6 +3704,8 @@ Func_62d5: ; 62d5 (1:62d5) ld b, 15 ld a, [wLoadedCard1Level] call WriteTwoDigitNumberInTxSymbolFormat + + ; print the 2x2 face down card image depending on the Pokemon's evolution stage ld a, [wcbc9] add DUELVARS_ARENA_CARD_STAGE call GetTurnDuelistVariable @@ -3691,18 +3728,20 @@ Func_62d5: ; 62d5 (1:62d5) ld a, [wConsole] cp CONSOLE_CGB jr nz, .not_cgb - ; in cgb, we have to take care of palettes too + ; in cgb, we have to take care of coloring it too ld a, [hl] lb hl, 0, 0 lb bc, 2, 2 call BankswitchVRAM1 call FillRectangle call BankswitchVRAM0 + .not_cgb + ; print the status condition symbol if any (only for the arena Pokemon card) ld hl, wcbc9 ld a, [hli] or a - jr nz, .asm_6376 + jr nz, .skip_status ld c, [hl] inc c inc c @@ -3714,7 +3753,9 @@ Func_62d5: ; 62d5 (1:62d5) call CheckPrintPoisoned inc b call CheckPrintDoublePoisoned -.asm_6376 + +.skip_status + ; finally check whether to print the Pluspower and/or Defender symbols ld a, [wcbc9] add DUELVARS_ARENA_CARD_ATTACHED_PLUSPOWER call GetTurnDuelistVariable @@ -3850,7 +3891,11 @@ PrintPlayAreaCardAttachedEnergies: ; 63e6 (1:63e6) INCROM $6423, $6510 -Func_6510: ; 6510 (1:6510) +; display the screen that prompts the player to use the selected card's +; Pokemon Power. Includes the card's information above, and the Pokemon Power's +; description below. +; input: hTempPlayAreaLocationOffset_ff9d +DisplayUsePokemonPowerScreen: ; 6510 (1:6510) ldh a, [hTempPlayAreaLocationOffset_ff9d] ld [wcbc9], a xor a @@ -3859,7 +3904,7 @@ Func_6510: ; 6510 (1:6510) call EmptyScreen call LoadDuelCardSymbolTiles call LoadDuelCheckPokemonScreenTiles - call Func_622a + call PrintPlayAreaCardInformationAndLocation lb de, 1, 4 call InitTextPrinting ld hl, wLoadedCard1Move1Name @@ -4065,14 +4110,19 @@ Func_6635: ; 6635 (1:6635) ret ; 0x666a -Func_666a: ; 666a (1:666a) +; display card detail when a trainer card is used, and print "Used xxx" +; hTempCardIndex_ff9f contains the card's deck index +DisplayUsedTrainerCardDetailScreen: ; 666a (1:666a) ldh a, [hTempCardIndex_ff9f] ldtx hl, UsedText call DisplayCardDetailScreen ret ; 0x6673 -Func_6673: ; 6673 (1:6673) +; prints the name and description of a trainer card, along with the +; "Used xxx" text in a text box. this function is used to show the player +; the information of a trainer card being used by the opponent. +PrintUsedTrainerCardDescription: ; 6673 (1:6673) call EmptyScreen call SetNoLineSeparation lb de, 1, 1 @@ -4176,7 +4226,9 @@ DuelDataToSave: ; 6729 (1:6729) INCROM $6747, $6785 -Func_6785: ; 6785 (1:6785) +; discard data of a duel that was saved by SaveDuelData, by setting the first byte +; of sCurrentDuelData to $00, and zeroing the checksum (next two bytes) +DiscardSavedDuelData: ; 6785 (1:6785) call EnableSRAM ld hl, sCurrentDuelData xor a @@ -4224,7 +4276,7 @@ Func_67b2: ; 67b2 (1:67b2) ; called multiple times during one ai turn AIMakeDecision: ; 67be (1:67be) ldh [hAIActionTableIndex], a - ld hl, wcbf9 + ld hl, wSkipDuelistIsThinkingDelay ld a, [hl] ld [hl], $0 or a @@ -4245,7 +4297,7 @@ AIMakeDecision: ; 67be (1:67be) ld hl, wAITurnEnded or [hl] jr nz, .turn_ended - ld a, [wcbf9] + ld a, [wSkipDuelistIsThinkingDelay] or a ret nz ld [wVBlankCounter], a @@ -4274,13 +4326,13 @@ AIActionTable: ; 695e (1:695e) dw AIAction_UseEnergyCard dw AIAction_TryRetreat dw AIAction_FinishedTurnNoAttack - dw AIAction_PlayNonPokemonCard + dw AIAction_UseTrainerCard dw AIAction_TryExecuteEffect dw AIAction_Attack dw AIAction_AttackEffect dw AIAction_AttackDamage dw AIAction_DrawCard - dw AIAction_PokemonPower + dw AIAction_UsePokemonPower dw AIAction_6b07 dw AIAction_ForceOpponentSwitchActive dw AIAction_NoAction @@ -4371,19 +4423,19 @@ AIAction_TryRetreat: ; 69ff (1:69ff) pop hl pop af push hl - call Func_6b7e + call LoadCardNameToTxRam2 pop hl - call Func_6b9e + call DrawWideTextBox_WaitForInput_Bank1 ret ; 0x6a23 -AIAction_PlayNonPokemonCard: ; 6a23 (1:6a23) +AIAction_UseTrainerCard: ; 6a23 (1:6a23) call LoadNonPokemonCardEffectCommands - call Func_666a - call Func_6673 + call DisplayUsedTrainerCardDetailScreen + call PrintUsedTrainerCardDescription call ExchangeRNG ld a, $01 - ld [wcbf9], a + ld [wSkipDuelistIsThinkingDelay], a ret ; 0x6a35 @@ -4412,7 +4464,7 @@ AIAction_Attack: ; 6a4e (1:6a4e) call CopyMoveDataAndDamage_FromDeckIndex call Func_16f6 ld a, $01 - ld [wcbf9], a + ld [wSkipDuelistIsThinkingDelay], a call CheckSandAttackOrSmokescreenSubstatus jr c, .has_status_effect ld a, DUELVARS_ARENA_CARD_STATUS @@ -4424,7 +4476,7 @@ AIAction_Attack: ; 6a4e (1:6a4e) ret .has_status_effect call DrawDuelMainScene - call Func_1b90 + call PrintPokemonsAttackText call WaitForWideTextBoxInput call ExchangeRNG call HandleSandAttackOrSmokescreenSubstatus @@ -4442,11 +4494,11 @@ AIAction_AttackEffect: ; 6a8c (1:6a8c) call CheckSelfConfusionDamage jr c, .confusion_damage call Func_6635 - call Func_1b90 + call PrintPokemonsAttackText call WaitForWideTextBoxInput call ExchangeRNG ld a, $01 - ld [wcbf9], a + ld [wSkipDuelistIsThinkingDelay], a ret .confusion_damage call DealConfusionDamageToSelf @@ -4479,26 +4531,26 @@ AIAction_ForceOpponentSwitchActive: ; 6aba (1:6aba) ret ; 0x6ad9 -AIAction_PokemonPower: ; 6ad9 (1:6ad9) +AIAction_UsePokemonPower: ; 6ad9 (1:6ad9) ldh a, [hTempCardIndex_ff9f] ld d, a ld e, $00 call CopyMoveDataAndDamage_FromDeckIndex ldh a, [hTemp_ffa0] ldh [hTempPlayAreaLocationOffset_ff9d], a - call Func_6510 + call DisplayUsePokemonPowerScreen ldh a, [hTempCardIndex_ff9f] - call Func_6b7e + call LoadCardNameToTxRam2 ld hl, wLoadedMoveName ld a, [hli] ld [wTxRam2_b], a ld a, [hl] ld [wTxRam2_b + 1], a ldtx hl, WillUseThePokemonPowerText - call Func_6b9e + call DrawWideTextBox_WaitForInput_Bank1 call ExchangeRNG ld a, $01 - ld [wcbf9], a + ld [wSkipDuelistIsThinkingDelay], a ret ; 0x6b07 @@ -4507,7 +4559,7 @@ AIAction_6b07: ; 6b07 (1:6b07) ld a, $03 call TryExecuteEffectCommandFunction ld a, $01 - ld [wcbf9], a + ld [wSkipDuelistIsThinkingDelay], a ret ; 0x6b15 @@ -4515,7 +4567,7 @@ AIAction_6b15: ; 6b15 (1:6b15) ld a, $04 call TryExecuteEffectCommandFunction ld a, $01 - ld [wcbf9], a + ld [wSkipDuelistIsThinkingDelay], a ret ; 0x6b20 @@ -4528,7 +4580,7 @@ AIAction_TossCoinATimes: ; 6b24 (1:6b24) call SerialRecv8Bytes call TossCoinATimes ld a, $01 - ld [wcbf9], a + ld [wSkipDuelistIsThinkingDelay], a ret ; 0x6b30 @@ -4550,7 +4602,7 @@ AIAction_6b3e: ; 6b3e (1:6b3e) and CNF_SLP_PRZ cp CONFUSED jr z, .asm_6b56 - call Func_1b90 + call PrintPokemonsAttackText call .asm_6b56 call WaitForWideTextBoxInput ret @@ -4577,7 +4629,9 @@ AIAction_NoAction: ; 6b7d (1:6b7d) ret ; 0x6b7e -Func_6b7e: ; 6b7e (1:6b7e) +; load the text ID of the card name with deck index given in a to TxRam2 +; also loads the card to wLoadedCard1 +LoadCardNameToTxRam2: ; 6b7e (1:6b7e) call LoadCardDataToBuffer1_FromDeckIndex ld a, [wLoadedCard1Name] ld [wTxRam2], a @@ -4586,7 +4640,9 @@ Func_6b7e: ; 6b7e (1:6b7e) ret ; 0x6b8e -Func_6b8e: ; 6b8e (1:6b8e) +; load the text ID of the card name with deck index given in a to TxRam2_b +; also loads the card to wLoadedCard1 +LoadCardNameToTxRam2_b: ; 6b8e (1:6b8e) call LoadCardDataToBuffer1_FromDeckIndex ld a, [wLoadedCard1Name] ld [wTxRam2_b], a @@ -4595,7 +4651,7 @@ Func_6b8e: ; 6b8e (1:6b8e) ret ; 0x6b9e -Func_6b9e: ; 6b9e (1:6b9e) +DrawWideTextBox_WaitForInput_Bank1: ; 6b9e (1:6b9e) call DrawWideTextBox_WaitForInput ret ; 0x6ba2 @@ -4660,6 +4716,8 @@ ConvertSpecialTrainerCardToPokemon: ; 6d84 (1:6d84) db UNABLE_RETREAT ; CARD_DATA_RETREAT_COST ds $0d ; PKMN_CARD_DATA_LENGTH - (CARD_DATA_RETREAT_COST + 1) +; this function applies status conditions to the defending Pokemon, +; returned by the effect functions in wEffectFunctionsFeedback Func_6df1: ; 6df1 (1:6df1) xor a ld [wPlayerArenaCardLastTurnStatus], a @@ -4674,19 +4732,19 @@ Func_6df1: ; 6df1 (1:6df1) add hl, de ld [hl], $00 call CheckNoDamageOrEffect - jr c, .asm_6e1b + jr c, .no_damage_or_effect ld hl, wEffectFunctionsFeedback -.asm_6e0f +.apply_status_loop ld a, [hli] or a - jr z, .asm_6e19 + jr z, .done ld d, a call ApplyStatusConditionToArenaPokemon - jr .asm_6e0f -.asm_6e19 + jr .apply_status_loop +.done scf ret -.asm_6e1b +.no_damage_or_effect ld a, l or h call nz, DrawWideTextBox_PrintText @@ -4729,6 +4787,7 @@ ApplyStatusConditionToArenaPokemon: ; 6e38 (1:6e38) ret ; 0x6e49 +Func_6e49: ; 6e49 (1:6e49) INCROM $6e49, $700a ; print one of the "There was no effect from" texts depending @@ -5092,7 +5151,132 @@ Func_7415: ; 7415 (1:7415) ret ; 0x741a - INCROM $741a, $7571 +Func_741a: ; 741a (1:741a) + ld hl, wEffectFunctionsFeedbackIndex + ld a, [hl] + or a + ret z + ld e, a + ld d, $00 + ld hl, wEffectFunctionsFeedback + add hl, de + ld [hl], $00 + ld hl, wEffectFunctionsFeedback +.loop + ld a, [hli] + or a + jr z, .done + ld d, a + inc hl + ld a, [hli] + ld e, $7e + cp ASLEEP + jr z, .got_anim + ld e, $7d + cp PARALYZED + jr z, .got_anim + ld e, $7b + cp POISONED + jr z, .got_anim + ld e, $7b + cp DOUBLE_POISONED + jr z, .got_anim + ld e, $7c + cp CONFUSED + jr nz, .loop + ldh a, [hWhoseTurn] + cp d + jr nz, .got_anim + ld e, $7f +.got_anim + ld a, e + ld [wLoadedMoveAnimation], a + xor a + ld [wd4b0], a + push hl + farcall $6, $4f9c + pop hl + jr .loop +.done + ret +; 0x7469 + +Func_7469: ; 7469 (1:7469) + push hl + push de + call Func_7494 + call Func_7484 + pop de + pop hl + call SubstractHP + ld a, [wcac2] + cp $01 + ret nz + push hl + push de + call DrawDuelHUDs + pop de + pop hl + ret +; 0x7484 + +Func_7484: ; 7484 (1:7484) + ld a, [wLoadedMoveAnimation] + or a + ret z + push de +.asm_748a + call DoFrame + call Func_3b52 + jr c, .asm_748a + pop de + ret +; 0x7494 + +Func_7494: ; 7494 (1:7494) + ldh a, [hWhoseTurn] + push af + push hl + push de + push bc + ld a, [wcc05] + ldh [hWhoseTurn], a + ld a, c + ld [wce81], a + ldh a, [hWhoseTurn] + cp h + jr z, .asm_74aa + set 7, b +.asm_74aa + ld a, b + ld [wce82], a + ld a, [wcc05] + ld [wce83], a + ld a, [wTempNonTurnDuelistCardID] + ld [wce84], a + ld hl, wce7f + ld [hl], e + inc hl + ld [hl], d + ld a, [wLoadedMoveAnimation] + cp $01 + jr nz, .asm_74d1 + ld a, e + cp $46 + jr c, .asm_74d1 + ld a, $02 + ld [wLoadedMoveAnimation], a +.asm_74d1 + farcall $6, $4f9c + pop bc + pop de + pop hl + pop af + ldh [hWhoseTurn], a + ret +; 0x74dc + + INCROM $74dc, $7571 Func_7571: ; 7571 (1:7571) INCROM $7571, $7576 diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm index 96d8694..ee5b5bc 100644 --- a/src/engine/bank03.asm +++ b/src/engine/bank03.asm @@ -1,7 +1,7 @@ LoadMap: ; c000 (3:4000) call DisableLCD call EnableSRAM - bank1call Func_6785 + bank1call DiscardSavedDuelData call DisableSRAM ld a, GAME_EVENT_OVERWORLD ld [wGameEvent], a diff --git a/src/engine/home.asm b/src/engine/home.asm index a96eba0..57956c0 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -43,7 +43,7 @@ Start: ; 0150 (0:0150) ld [rIE], a call ZeroRAM ld a, $1 - call BankswitchHome + call BankswitchROM xor a call BankswitchSRAM call BankswitchVRAM0 @@ -62,7 +62,7 @@ Start: ; 0150 (0:0150) call CopyDMAFunction call ValidateSRAM ld a, BANK(GameLoop) - call BankswitchHome + call BankswitchROM ld sp, $e000 jp GameLoop @@ -106,7 +106,7 @@ VBlankHandler: ; 019b (0:019b) res IN_VBLANK, [hl] .done pop af - call BankswitchHome + call BankswitchROM pop hl pop de pop bc @@ -137,10 +137,10 @@ TimerHandler: ; 01e6 (0:01e6) ldh a, [hBankROM] push af ld a, BANK(SoundTimerHandler) - call BankswitchHome + call BankswitchROM call SoundTimerHandler pop af - call BankswitchHome + call BankswitchROM ; clear in-timer flag ld hl, wReentrancyFlag res IN_TIMER, [hl] @@ -862,16 +862,16 @@ CallHL: ; 05c1 (0:05c1) jp hl ; 0x5c2 -; converts two one-digit numbers provided in a to text (ascii) format, +; converts the two-digit BCD number provided in a to text (ascii) format, ; writes them to [wStringBuffer] and [wStringBuffer + 1], and to the BGMap0 address at bc -WriteTwoOneDigitNumbers: ; 05c2 (0:05c2) +WriteTwoDigitBCDNumber: ; 05c2 (0:05c2) push hl push bc push de ld hl, wStringBuffer push hl push bc - call WriteNumbersInTextFormat + call WriteBCDNumberInTextFormat pop bc call BCCoordToBGMap0Address pop hl @@ -883,16 +883,16 @@ WriteTwoOneDigitNumbers: ; 05c2 (0:05c2) ret ; 0x5db -; converts a one-digit number provided in the lower nybble of a to text +; converts the one-digit BCD number provided in the lower nybble of a to text ; (ascii) format, and writes it to [wStringBuffer] and to the BGMap0 address at bc -WriteOneDigitNumber: ; 05db (0:05db) +WriteOneDigitBCDNumber: ; 05db (0:05db) push hl push bc push de ld hl, wStringBuffer push hl push bc - call WriteNumberInTextFormat + call WriteBCDDigitInTextFormat pop bc call BCCoordToBGMap0Address pop hl @@ -904,9 +904,9 @@ WriteOneDigitNumber: ; 05db (0:05db) ret ; 0x5f4 -; converts four one-digit numbers provided in h and l to text (ascii) format, +; converts the four-digit BCD number provided in h and l to text (ascii) format, ; writes them to [wStringBuffer] through [wStringBuffer + 3], and to the BGMap0 address at bc -WriteFourOneDigitNumbers: ; 05f4 (0:05f4) +WriteFourDigitBCDNumber: ; 05f4 (0:05f4) push hl push bc push de @@ -916,9 +916,9 @@ WriteFourOneDigitNumbers: ; 05f4 (0:05f4) push hl push bc ld a, d - call WriteNumbersInTextFormat + call WriteBCDNumberInTextFormat ld a, e - call WriteNumbersInTextFormat + call WriteBCDNumberInTextFormat pop bc call BCCoordToBGMap0Address pop hl @@ -930,20 +930,19 @@ WriteFourOneDigitNumbers: ; 05f4 (0:05f4) ret ; 0x614 -; given two one-digit numbers in the two nybbles of register a, +; given two BCD digits in the two nybbles of register a, ; write them in text (ascii) format to hl (most significant nybble first). ; numbers above 9 end up converted to half-width font tiles. -WriteNumbersInTextFormat: ; 0614 (0:0614) +WriteBCDNumberInTextFormat: ; 0614 (0:0614) push af swap a - call WriteNumberInTextFormat + call WriteBCDDigitInTextFormat pop af ; fallthrough -; given a one-digit number in the (lower nybble) of register a, -; write it in text (ascii) format to hl. -; numbers above 9 end up converted to half-width font tiles. -WriteNumberInTextFormat: +; given a BCD digit in the (lower nybble) of register a, write it in text (ascii) +; format to hl. numbers above 9 end up converted to half-width font tiles. +WriteBCDDigitInTextFormat: and $0f add "0" cp "9" + 1 @@ -1213,7 +1212,7 @@ CopyDataHLtoDE: ; 073c (0:073c) ; switch to rombank (a + top2 of h shifted down), ; set top2 of h to 01 (switchable ROM bank area), ; return old rombank id on top-of-stack -BankpushHome: ; 0745 (0:0745) +BankpushROM: ; 0745 (0:0745) push hl push bc push af @@ -1244,14 +1243,14 @@ BankpushHome: ; 0745 (0:0745) pop de pop af add b - call BankswitchHome + call BankswitchROM pop bc ret ; 0x76f ; switch to rombank a, ; return old rombank id on top-of-stack -BankpushHome2: ; 076f (0:076f) +BankpushROM2: ; 076f (0:076f) push hl push bc push af @@ -1274,18 +1273,18 @@ BankpushHome2: ; 076f (0:076f) ld h, d pop de pop af - call BankswitchHome + call BankswitchROM pop bc ret ; 0x78e ; restore rombank from top-of-stack -BankpopHome: ; 078e (0:078e) +BankpopROM: ; 078e (0:078e) push hl push de ld hl, sp+$7 ld a, [hld] - call BankswitchHome + call BankswitchROM dec hl ld d, [hl] dec hl @@ -1301,7 +1300,7 @@ BankpopHome: ; 078e (0:078e) ret ; switch ROM bank to a -BankswitchHome: ; 07a3 (0:07a3) +BankswitchROM: ; 07a3 (0:07a3) ldh [hBankROM], a ld [MBC3RomBank], a ret @@ -1780,7 +1779,7 @@ Bank1Call: ; 09ae (0:09ae) ; fallthrough Bank1Call_FarCall_Common: ; 09ce (0:09ce) - call BankswitchHome + call BankswitchROM ld hl, sp+$d inc de inc de @@ -1799,7 +1798,7 @@ SwitchToBankAtSP: ; 9dc (0:9dc) push hl ld hl, sp+$04 ld a, [hl] - call BankswitchHome + call BankswitchROM pop hl pop af inc sp @@ -2757,7 +2756,7 @@ Func_0f1d: ; 0f1d (0:0f1d) ret nc .asm_f27 ld a, $01 - call BankswitchHome + call BankswitchROM ld hl, wcbf7 ld a, [hli] ld h, [hl] @@ -2849,7 +2848,7 @@ SerialRecvDuelData: ; 0f9b (0:0f9b) ret ; 0xfac -; serial send 8 bytes at sp, sp-1, sp-2, sp-3, e, d, c, b +; serial send 8 bytes at f, a, l, h, e, d, c, b ; only during a duel against a link opponent SerialSend8Bytes: ; 0fac (0:0fac) push hl @@ -2902,7 +2901,7 @@ SerialSend8Bytes: ; 0fac (0:0fac) ret ; 0xfe9 -; serial recv 8 bytes to sp, sp-1, sp-2, sp-3, e, d, c, b +; serial recv 8 bytes to f, a, l, h, e, d, c, b SerialRecv8Bytes: ; 0fe9 (0:0fe9) ld hl, wTempSerialBuf ld bc, 8 @@ -4298,6 +4297,9 @@ GetNonTurnDuelistVariable: ; 1611 (0:1611) ret ; 0x161e +; when playing a Pokemon card, initializes some variables according to the +; card played, and checks if the played card has Pokemon Power to show it to +; the player, and possibly to use it if it triggers when the card is played. Func_161e: ; 161e (0:161e) ldh a, [hTempCardIndex_ff98] call ClearChangedTypesIfMuk @@ -4314,7 +4316,7 @@ Func_161e: ; 161e (0:161e) ld a, [wLoadedMoveCategory] cp POKEMON_POWER ret nz - call Func_6510 + call DisplayUsePokemonPowerScreen ldh a, [hTempCardIndex_ff98] call LoadCardDataToBuffer1_FromDeckIndex ld hl, wLoadedCard1Name @@ -4331,7 +4333,7 @@ Func_161e: ; 161e (0:161e) ld a, $01 ; check only Muk call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0 jr nc, .use_pokemon_power - call Func_6510 + call DisplayUsePokemonPowerScreen ldtx hl, UnableToUsePkmnPowerDueToToxicGasText call DrawWideTextBox_WaitForInput call ExchangeRNG @@ -4374,6 +4376,7 @@ Func_161e: ; 161e (0:161e) ; - e into wSelectedMoveIndex and d into hTempCardIndex_ff9f ; - Move1 (if e == 0) or Move2 (if e == 1) data into wLoadedMove ; - Also from that move, its Damage field into wDamage +; finally, clears wNoDamageOrEffect and wTempDamage_ccbf CopyMoveDataAndDamage_FromCardID: ; 16ad (0:16ad) push de push af @@ -4392,6 +4395,7 @@ CopyMoveDataAndDamage_FromCardID: ; 16ad (0:16ad) ; - e into wSelectedMoveIndex and d into hTempCardIndex_ff9f ; - Move1 (if e == 0) or Move2 (if e == 1) data into wLoadedMove ; - Also from that move, its Damage field into wDamage +; finally, clears wNoDamageOrEffect and wTempDamage_ccbf CopyMoveDataAndDamage_FromDeckIndex: ; 16c0 (0:16c0) ld a, e ld [wSelectedMoveIndex], a @@ -4430,6 +4434,7 @@ CopyMoveDataAndDamage: ; inits hTempCardIndex_ff9f and wTempTurnDuelistCardID to the turn holder's arena card, ; wTempNonTurnDuelistCardID to the non-turn holder's arena card, and zeroes other temp ; variables that only last between each two-player turn. +; this is called when a Pokemon card is played or when an attack is used Func_16f6: ; 16f6 (0:16f6) ld a, DUELVARS_ARENA_CARD call GetTurnDuelistVariable @@ -4448,14 +4453,15 @@ Func_16f6: ; 16f6 (0:16f6) ld [wccec], a ld [wEffectFunctionsFeedbackIndex], a ld [wcced], a - ld [wDamageToSelfMode], a + ld [wIsDamageToSelf], a ld [wccef], a ld [wccf0], a ld [wccf1], a bank1call ClearNonTurnTemporaryDuelvars_CopyStatus ret -Func_1730: ; 1730 (0:1730) +; use attack or Pokemon Power +UseAttackOrPokemonPower: ; 1730 (0:1730) ld a, [wSelectedMoveIndex] ld [wcc10], a ldh a, [hTempCardIndex_ff9f] @@ -4464,25 +4470,25 @@ Func_1730: ; 1730 (0:1730) ld [wcc12], a ld a, [wLoadedMoveCategory] cp POKEMON_POWER - jp z, Func_184b + jp z, UsePokemonPower call Func_16f6 ld a, $1 call TryExecuteEffectCommandFunction - jp c, Func_181e + jp c, DrawWideTextBox_WaitForInput_ReturnCarry call CheckSandAttackOrSmokescreenSubstatus jr c, .asm_1766 ld a, $2 call TryExecuteEffectCommandFunction - jp c, Func_1821 + jp c, ReturnCarry call Func_1874 jr .asm_1777 .asm_1766 call Func_1874 call HandleSandAttackOrSmokescreenSubstatus - jp c, Func_1823 + jp c, ClearNonTurnTemporaryDuelvars_ResetCarry ld a, $2 call TryExecuteEffectCommandFunction - jp c, Func_1821 + jp c, ReturnCarry .asm_1777 ld a, $9 call SetAIAction_SerialSendDuelData @@ -4490,7 +4496,7 @@ Func_1730: ; 1730 (0:1730) call TryExecuteEffectCommandFunction call CheckSelfConfusionDamage jp c, DealConfusionDamageToSelf - call Func_1b8d + call DrawDuelMainScene_PrintPokemonsAttackText call WaitForWideTextBoxInput call ExchangeRNG ld a, $5 @@ -4499,6 +4505,7 @@ Func_1730: ; 1730 (0:1730) call SetAIAction_SerialSendDuelData ; fallthrough +; deal attack damage Func_179a: ; 179a (0:179a) call Func_7415 ld a, [wLoadedMoveCategory] @@ -4525,9 +4532,9 @@ Func_179a: ; 179a (0:179a) call GetNonTurnDuelistVariable push de push hl - call $7494 - call $741a - call $7484 + call Func_7494 + call Func_741a + call Func_7484 pop hl pop de call SubstractHP @@ -4549,6 +4556,8 @@ Func_17ed: ; 17ed (0:17ed) ld [hl], a ld a, NO_DAMAGE_OR_EFFECT_AGILITY ld [wNoDamageOrEffect], a +; fallthrough + Func_17fb: ; 17fb (0:17fb) ld a, [wTempNonTurnDuelistCardID] push af @@ -4557,26 +4566,26 @@ Func_17fb: ; 17fb (0:17fb) pop af ld [wTempNonTurnDuelistCardID], a call HandleStrikesBack_AgainstResidualMove - bank1call $6df1 + bank1call Func_6df1 call Func_1bb4 - bank1call $7195 - call $6e49 + bank1call Func_7195 + call Func_6e49 or a ret -Func_1819: ; 1819 (0:1819) +DisplayUsePokemonPowerScreen_WaitForInput: ; 1819 (0:1819) push hl - call Func_6510 + call DisplayUsePokemonPowerScreen pop hl -Func_181e: ; 181e (0:181e) +DrawWideTextBox_WaitForInput_ReturnCarry: ; 181e (0:181e) call DrawWideTextBox_WaitForInput -Func_1821: ; 1821 (0:1821) +ReturnCarry: ; 1821 (0:1821) scf ret -Func_1823: ; 1823 (0:1823) +ClearNonTurnTemporaryDuelvars_ResetCarry: ; 1823 (0:1823) bank1call ClearNonTurnTemporaryDuelvars or a ret @@ -4584,7 +4593,7 @@ Func_1823: ; 1823 (0:1823) DealConfusionDamageToSelf: ; 1828 (0:1828) bank1call DrawDuelMainScene ld a, 1 - ld [wDamageToSelfMode], a + ld [wIsDamageToSelf], a ldtx hl, DamageToSelfDueToConfusionText call DrawWideTextBox_PrintText ld a, $75 @@ -4597,14 +4606,15 @@ DealConfusionDamageToSelf: ; 1828 (0:1828) or a ret -Func_184b: ; 184b (0:184b) +; use Pokemon Power +UsePokemonPower: ; 184b (0:184b) call Func_7415 ld a, $2 call TryExecuteEffectCommandFunction - jr c, Func_1819 + jr c, DisplayUsePokemonPowerScreen_WaitForInput ld a, $5 call TryExecuteEffectCommandFunction - jr c, Func_1821 + jr c, ReturnCarry ld a, $c call SetAIAction_SerialSendDuelData call ExchangeRNG @@ -4720,7 +4730,7 @@ UseTrainerCard: ; 18f9 (0:18f9) jr c, .done ld a, $06 call SetAIAction_SerialSendDuelData - call $666a + call DisplayUsedTrainerCardDetailScreen call ExchangeRNG ld a, $06 call TryExecuteEffectCommandFunction @@ -4739,7 +4749,7 @@ UseTrainerCard: ; 18f9 (0:18f9) ; 0x1944 ; loads the effect commands of a (trainer or energy) card with deck index (0-59) at hTempCardIndex_ff9f -; into wLoadedMoveEffectCommands +; into wLoadedMoveEffectCommands. in practice, only used for trainer cards LoadNonPokemonCardEffectCommands: ; 1944 (0:1944) ldh a, [hTempCardIndex_ff9f] call LoadCardDataToBuffer1_FromDeckIndex @@ -4758,6 +4768,8 @@ Func_1955: ; 1955 (0:1955) ld a, $7a ld [wLoadedMoveAnimation], a pop af +; fallthrough + ; this function appears to handle dealing damage to self due to confusion Func_195c: ; 195c (0:195c) ld hl, wDamage @@ -4778,7 +4790,7 @@ Func_195c: ; 195c (0:195c) ld b, $0 ld a, DUELVARS_ARENA_CARD_HP call GetTurnDuelistVariable - bank1call $7469 + bank1call Func_7469 call PrintKnockedOutIfHLZero pop af ld [wTempNonTurnDuelistCardID], a @@ -5003,7 +5015,8 @@ PrintKnockedOutIfHLZero: ; 1ad0 (0:1ad0) ret nz ; fallthrough -; print in a text box that the Pokemon card at wTempNonTurnDuelistCardID was knocked out and wait 40 frames +; print in a text box that the Pokemon card at wTempNonTurnDuelistCardID +; was knocked out and wait 40 frames PrintKnockedOut: ; 1ad3 (0:1ad3) ld a, [wTempNonTurnDuelistCardID] ld e, a @@ -5024,7 +5037,10 @@ PrintKnockedOut: ; 1ad3 (0:1ad3) ret ; 0x1af3 -; seems to be a function to deal damage to a card +; seems to be a function to deal damage to a card, but can be used +; to deal damage to a benched Pokemon. +; shows the defending player's play area screen when dealing the damage +; instead of the main duel interface, and has a fixed move animation Func_1af3: ; 1af3 (0:1af3) ld a, $78 ld [wLoadedMoveAnimation], a @@ -5052,7 +5068,7 @@ Func_1af3: ; 1af3 (0:1af3) ld a, [wTempPlayAreaLocationOffset_cceb] or a ; cp PLAY_AREA_ARENA jr nz, .next - ld a, [wDamageToSelfMode] + ld a, [wIsDamageToSelf] or a jr z, .turn_swapped ld b, CARD_LOCATION_ARENA @@ -5102,7 +5118,7 @@ Func_1af3: ; 1af3 (0:1af3) add DUELVARS_ARENA_CARD_HP call GetTurnDuelistVariable push af - bank1call $7469 + bank1call Func_7469 pop af or a jr z, .skip_knocked_out @@ -5117,15 +5133,24 @@ Func_1af3: ; 1af3 (0:1af3) ret ; 0x1b8d -Func_1b8d: ; 1b8d (0:1b8d) +; draw duel main scene, then print the "<Pokemon Lvxx>'s <attack>" text +; The Pokemon's name is the turn holder's arena Pokemon, and the +; attack's name is taken from wLoadedMoveName. +DrawDuelMainScene_PrintPokemonsAttackText: ; 1b8d (0:1b8d) bank1call DrawDuelMainScene -Func_1b90: ; 1b90 (0:1b90) +; fallthrough + +; print the "<Pokemon Lvxx>'s <attack>" text +; The Pokemon's name is the turn holder's arena Pokemon, and the +; attack's name is taken from wLoadedMoveName. +PrintPokemonsAttackText: ; 1b90 (0:1b90) ld a, DUELVARS_ARENA_CARD call GetTurnDuelistVariable call LoadCardDataToBuffer1_FromDeckIndex ld a, 18 call CopyCardNameAndLevel - ld [hl], $0 + ld [hl], TX_END + ; zero wTxRam2 so that the name & level text just loaded to wDefaultText is printed ld hl, wTxRam2 xor a ld [hli], a @@ -5134,14 +5159,14 @@ Func_1b90: ; 1b90 (0:1b90) ld [hli], a ; wTxRam2_b ld a, [wLoadedMoveName + 1] ld [hli], a - ldtx hl, PokemonsAttackText ; text when using an attack + ldtx hl, PokemonsAttackText call DrawWideTextBox_PrintText ret Func_1bb4: ; 1bb4 (0:1bb4) call Func_3b31 bank1call DrawDuelMainScene - call $503a + call DrawDuelHUDs xor a ldh [hTempPlayAreaLocationOffset_ff9d], a call Func_1bca @@ -6179,7 +6204,7 @@ LoadDuelFaceDownCardTiles: ; 20d8 (0:20d8) ld b, $10 jr LoadDuelCheckPokemonScreenTiles.got_num_tiles -; same as LoadDuelFaceDownCardTiles, plus also load the ACT / BP text tiles +; same as LoadDuelFaceDownCardTiles, plus also load the ACT / BPx tiles LoadDuelCheckPokemonScreenTiles: ; 20dc (0:20dc) ld b, $24 .got_num_tiles @@ -6229,10 +6254,10 @@ LoadSymbolsFont: ; 2119 (0:2119) ; copy b tiles from Gfx2:hl to de CopyFontsOrDuelGraphicsTiles: ; 2121 (0:2121) ld a, BANK(Fonts); BANK(DuelGraphics) - call BankpushHome + call BankpushROM ld c, TILE_SIZE call CopyGfxData - call BankpopHome + call BankpopROM ret ; 0x212f @@ -6290,7 +6315,7 @@ DrawDuelBoxMessage: ; 2167 (0:2167) LoadFullWidthFontTiles: ; 2189 (0:2189) ld hl, FullWidthFonts + $3cc tiles_1bpp - $4000 ld a, BANK(Fonts); BANK(DuelGraphics) - call BankpushHome + call BankpushROM push hl ld e, l ld d, h @@ -6301,7 +6326,7 @@ LoadFullWidthFontTiles: ; 2189 (0:2189) call Copy1bppTiles ld hl, v0Tiles1 call Copy1bppTiles - call BankpopHome + call BankpopROM ret ; 0x21ab @@ -6960,7 +6985,7 @@ CreateHalfWidthFontTile: ; 24ca (0:24ca) ldh a, [hBankROM] push af ld a, BANK(HalfWidthFont) - call BankswitchHome + call BankswitchROM ; write the right half of the tile (first character) to wTextTileBuffer + 2n push de ld a, e @@ -6983,7 +7008,7 @@ CreateHalfWidthFontTile: ; 24ca (0:24ca) ld [hli], a dec b jr nz, .loop - call BankpopHome + call BankpopROM pop bc ld de, wTextTileBuffer ret @@ -7045,7 +7070,7 @@ ConvertTileNumberToTileDataAddress: ; 2518 (0:2518) ; within the full-width font graphics (FullWidthFonts) in hl CreateFullWidthFontTile: ; 252e (0:252e) ld a, BANK(Fonts); BANK(DuelGraphics) - call BankpushHome + call BankpushROM ld de, wTextTileBuffer push de ld c, TILE_SIZE_1BPP @@ -7058,7 +7083,7 @@ CreateFullWidthFontTile: ; 252e (0:252e) dec c jr nz, .loop pop de - call BankpopHome + call BankpopROM ret ; given two text characters at de, use the char at e (first one) @@ -8144,7 +8169,7 @@ PrintYesOrNoItems: ; 2b66 (0:2b66) ContinueDuel: ; 2b70 (0:2b70) ld a, BANK(_ContinueDuel) - call BankswitchHome + call BankswitchROM jp _ContinueDuel ; 0x2b78 @@ -8226,7 +8251,7 @@ Func_2bdb: ; 2bdb (0:2bdb) ldh a, [hBankROM] push af ld a, $5 - call BankswitchHome + call BankswitchROM ld a, [wOpponentDeckID] ld l, a ld h, $0 @@ -8249,7 +8274,7 @@ Func_2bdb: ; 2bdb (0:2bdb) .asm_2c01 ld c, a pop af - call BankswitchHome + call BankswitchROM ld a, c ret @@ -8301,7 +8326,7 @@ ProcessTextFromID: ; 2c29 (0:2c29) call GetTextOffsetFromTextID call ProcessText pop af - call BankswitchHome + call BankswitchROM ret ; 0x2c37 @@ -8332,7 +8357,7 @@ CountLinesOfTextFromID: ; 2c37 (0:2c37) jr .char_loop .end pop af - call BankswitchHome + call BankswitchROM ld a, c inc a pop bc @@ -8417,7 +8442,7 @@ PrintScrollableText: ; 2c84 (0:2c84) jr .print_char_loop .asm_2cc3 pop af - call BankswitchHome + call BankswitchROM ret ; zero wWhichTextHeader, wWhichTxRam2 and wWhichTxRam3, and set hJapaneseSyllabary to TX_KATAKANA @@ -8467,7 +8492,7 @@ ReadTextHeader: ; 2cf3 (0:2cf3) ld a, [hli] ld [wFontWidth], a ld a, [hli] - call BankswitchHome + call BankswitchROM ld a, [hli] ld h, [hl] ld l, a @@ -8630,7 +8655,7 @@ GetTextOffsetFromTextID: ; 2ded (0:2ded) add hl, de set 6, h ; hl = (hl * 3) + $4000 ld a, BANK(TextOffsets) - call BankswitchHome + call BankswitchROM ld e, [hl] inc hl ld d, [hl] @@ -8642,7 +8667,7 @@ GetTextOffsetFromTextID: ; 2ded (0:2ded) rl h rla add BANK(TextOffsets) - call BankswitchHome + call BankswitchROM res 7, d set 6, d ; $4000 ≤ de ≤ $7fff ld l, e @@ -8701,7 +8726,7 @@ PrintText: ; 2e41 (0:2e41) call GetTextOffsetFromTextID call .print_text pop af - call BankswitchHome + call BankswitchROM ret .from_ram ld hl, wDefaultText @@ -8740,7 +8765,7 @@ PrintTextNoDelay: ; 2e76 (0:2e76) call ProcessTextHeader jr nc, .next_tile_loop pop af - call BankswitchHome + call BankswitchROM ret ; copies a text given its id at hl, to de @@ -8759,7 +8784,7 @@ CopyText: ; 2e89 (0:2e89) or a jr nz, .next_tile_loop pop af - call BankswitchHome + call BankswitchROM dec de ret .special @@ -8781,7 +8806,7 @@ CopyTextData_FromTextID: ; 2ea9 (0:2ea9) ldh a, [hff96] call CopyTextData pop af - call BankswitchHome + call BankswitchROM ret ; 0x2ebb @@ -8806,7 +8831,7 @@ LoadTxRam3: ; 2ec4 (0:2ec4) LoadCardDataToBuffer1_FromName: ; 2ecd (0:2ecd) ld hl, CardPointers + 2 ; skip first $0000 pointer ld a, BANK(CardPointers) - call BankpushHome2 + call BankpushROM2 .find_card_loop ld a, [hli] or [hl] @@ -8816,7 +8841,7 @@ LoadCardDataToBuffer1_FromName: ; 2ecd (0:2ecd) ld l, [hl] ld h, a ld a, BANK(CardPointers) - call BankpushHome2 + call BankpushROM2 ld bc, CARD_DATA_NAME add hl, bc ld a, [hli] @@ -8834,7 +8859,7 @@ LoadCardDataToBuffer1_FromName: ; 2ecd (0:2ecd) ld l, [hl] ld h, a ld a, BANK(CardPointers) - call BankpushHome2 + call BankpushROM2 ld de, wLoadedCard1 ld b, PKMN_CARD_DATA_LENGTH .copy_card_loop @@ -8845,7 +8870,7 @@ LoadCardDataToBuffer1_FromName: ; 2ecd (0:2ecd) jr nz, .copy_card_loop pop hl .done - call BankpopHome + call BankpopROM ret ; 0x2f0a @@ -8869,7 +8894,7 @@ LoadCardDataToHL_FromCardID: ; 2f14 (0:2f14) pop de jr c, .done ld a, BANK(CardPointers) - call BankpushHome2 + call BankpushROM2 ld b, PKMN_CARD_DATA_LENGTH .copy_card_data_loop ld a, [hli] @@ -8877,7 +8902,7 @@ LoadCardDataToHL_FromCardID: ; 2f14 (0:2f14) inc de dec b jr nz, .copy_card_data_loop - call BankpopHome + call BankpopROM or a .done pop bc @@ -8891,9 +8916,9 @@ GetCardType: ; 2f32 (0:2f32) call GetCardPointer jr c, .done ld a, BANK(CardPointers) - call BankpushHome2 + call BankpushROM2 ld l, [hl] - call BankpopHome + call BankpopROM ld a, l or a .done @@ -8906,13 +8931,13 @@ GetCardName: ; 2f45 (0:2f45) call GetCardPointer jr c, .done ld a, BANK(CardPointers) - call BankpushHome2 + call BankpushROM2 ld de, CARD_DATA_NAME add hl, de ld e, [hl] inc hl ld d, [hl] - call BankpopHome + call BankpopROM or a .done pop hl @@ -8927,14 +8952,14 @@ GetCardTypeRarityAndSet: ; 2f5d (0:2f5d) call GetCardPointer jr c, .done ld a, BANK(CardPointers) - call BankpushHome2 + call BankpushROM2 ld e, [hl] ; CARD_DATA_TYPE ld bc, CARD_DATA_RARITY add hl, bc ld b, [hl] ; CARD_DATA_RARITY inc hl ld c, [hl] ; CARD_DATA_SET - call BankpopHome + call BankpopROM ld a, e or a .done @@ -8961,11 +8986,11 @@ GetCardPointer: ; 2f7c (0:2f7c) ccf jr c, .out_of_bounds ld a, BANK(CardPointers) - call BankpushHome2 + call BankpushROM2 ld a, [hli] ld h, [hl] ld l, a - call BankpopHome + call BankpopROM or a .out_of_bounds pop bc @@ -8988,7 +9013,7 @@ LoadCardGfx: ; 2fa0 (0:2fa0) srl h ld a, BANK(CardGraphics) add h - call BankswitchHome + call BankswitchROM pop hl ; once we have the bank, get the pointer: multiply by 8 and discard the bank offset add hl, hl @@ -9006,16 +9031,16 @@ LoadCardGfx: ; 2fa0 (0:2fa0) dec b jr nz, .copy_card_palette pop af - call BankswitchHome + call BankswitchROM ret ; identical to CopyFontsOrDuelGraphicsTiles CopyFontsOrDuelGraphicsTiles2: ; 2fcb (0:2fcb) ld a, BANK(Fonts); BANK(DuelGraphics) - call BankpushHome + call BankpushROM ld c, TILE_SIZE call CopyGfxData - call BankpopHome + call BankpopROM ret ; Checks if the command type at a is one of the commands of the move or @@ -9042,14 +9067,14 @@ TryExecuteEffectCommandFunction: ; 2fd9 (0:2fd9) ldh a, [hBankROM] push af ld a, [wce22] - call BankswitchHome + call BankswitchROM or a call CallHL push af ; restore original bank and return pop bc pop af - call BankswitchHome + call BankswitchROM push bc pop af ret @@ -9071,7 +9096,7 @@ CheckMatchingCommand: ; 2ffe (0:2ffe) ldh a, [hBankROM] push af ld a, BANK(EffectCommands) - call BankswitchHome + call BankswitchROM ; store the bank number of command functions ($b) in wce22 ld a, $b ld [wce22], a @@ -9093,13 +9118,13 @@ CheckMatchingCommand: ; 2ffe (0:2ffe) ld l, a ; restore bank and return nc pop af - call BankswitchHome + call BankswitchROM or a ret ; restore bank and return c .no_more_commands pop af - call BankswitchHome + call BankswitchROM scf ret @@ -9112,7 +9137,7 @@ LoadDeck: ; 302c (0:302c) ldh a, [hBankROM] push af ld a, BANK(DeckPointers) - call BankswitchHome + call BankswitchROM add hl, hl ld de, DeckPointers add hl, de @@ -9124,13 +9149,13 @@ LoadDeck: ; 302c (0:302c) jr z, .null_pointer call CopyDeckData pop af - call BankswitchHome + call BankswitchROM pop hl or a ret .null_pointer pop af - call BankswitchHome + call BankswitchROM pop hl scf ret @@ -9204,23 +9229,23 @@ Func_3096: ; 3096 (0:3096) ldh a, [hBankROM] push af ld a, $2 - call BankswitchHome + call BankswitchROM call $4000 pop af - call BankswitchHome + call BankswitchROM ret Func_30a6: ; 30a6 (0:30a6) ldh a, [hBankROM] push af ld a, $6 - call BankswitchHome + call BankswitchROM ld a, $1 ld [wce60], a call $40d5 pop bc ld a, b - call BankswitchHome + call BankswitchROM ret Func_30bc: ; 30bc (0:30bc) @@ -9231,32 +9256,32 @@ Func_30bc: ; 30bc (0:30bc) ldh a, [hBankROM] push af ld a, $2 - call BankswitchHome + call BankswitchROM call $4211 call DrawWideTextBox pop af - call BankswitchHome + call BankswitchROM ret Func_30d7: ; 30d7 (0:30d7) ldh a, [hBankROM] push af ld a, $2 - call BankswitchHome + call BankswitchROM call $433c pop af - call BankswitchHome + call BankswitchROM ret Func_30e7: ; 30e7 (0:30e7) ldh a, [hBankROM] push af ld a, $2 - call BankswitchHome + call BankswitchROM call $4764 ld b, a pop af - call BankswitchHome + call BankswitchROM ld a, b ret @@ -9265,10 +9290,10 @@ Func_30f9: ; 30f9 (0:30f9) ldh a, [hBankROM] push af ld a, $2 - call BankswitchHome + call BankswitchROM call $4932 pop af - call BankswitchHome + call BankswitchROM ret Func_310a: ; 310a (0:310a) @@ -9276,20 +9301,20 @@ Func_310a: ; 310a (0:310a) ldh a, [hBankROM] push af ld a, $2 - call BankswitchHome + call BankswitchROM call $4aaa pop af - call BankswitchHome + call BankswitchROM ret Func_311d: ; 311d (0:311d) ldh a, [hBankROM] push af ld a, $2 - call BankswitchHome + call BankswitchROM call $4b85 pop af - call BankswitchHome + call BankswitchROM ret ; serial transfer-related @@ -9643,7 +9668,7 @@ HandleStrikesBack_AgainstDamagingMove: ; 3317 (0:3317) ld a, e or d ret z - ld a, [wDamageToSelfMode] + ld a, [wIsDamageToSelf] or a ret nz ld a, [wTempNonTurnDuelistCardID] @@ -9855,7 +9880,7 @@ HandleNoDamageOrEffectSubstatus: ; 3432 (0:3432) scf ret .neutralizing_shield - ld a, [wDamageToSelfMode] + ld a, [wIsDamageToSelf] or a ret nz ; prevent damage if attacked by a non-basic Pokemon @@ -10479,7 +10504,7 @@ Func_37a5: ; 37a5 (0:37a5) srl h ld a, BANK(CardGraphics) add h - call BankswitchHome + call BankswitchROM pop hl add hl, hl add hl, hl @@ -10488,7 +10513,7 @@ Func_37a5: ; 37a5 (0:37a5) set 6, h ; $4000 ≤ hl ≤ $7fff call Func_37c5 pop af - call BankswitchHome + call BankswitchROM ret ; 0x37c5 @@ -10559,19 +10584,19 @@ Func_380e: ; 380e (0:380e) ldh a, [hBankROM] push af ld a, BANK(SetScreenScrollWram) - call BankswitchHome + call BankswitchROM call SetScreenScrollWram call Func_c554 ld a, BANK(Func_1c610) - call BankswitchHome + call BankswitchROM call Func_1c610 call Func_3cb4 ld a, BANK(Func_804d8) - call BankswitchHome + call BankswitchROM call Func_804d8 call UpdateRNGSources pop af - call BankswitchHome + call BankswitchROM ret ; enable the play time counter and execute the game event at [wGameEvent]. @@ -10588,7 +10613,7 @@ ExecuteGameEvent: ; 383d (0:383d) jr .loop .restart pop af - call BankswitchHome + call BankswitchROM ret ; execute a game event at [wGameEvent] from GameEventPointerTable @@ -10632,7 +10657,7 @@ GameEvent_GiftCenter: ; 3876 (0:3876) ld [wd10e], a call ResumeSong pop af - call BankswitchHome + call BankswitchROM scf ret @@ -10765,10 +10790,10 @@ Func_395a: ; 395a (0:395a) ldh a, [hBankROM] push af ld a, [wd4c6] - call BankswitchHome + call BankswitchROM call CopyGfxData pop af - call BankswitchHome + call BankswitchROM ret Unknown_396b: ; 396b (0:396b) @@ -10801,10 +10826,10 @@ Func_3997: ; 3997 (0:3997) ldh a, [hBankROM] push af ld a, BANK(Func_1c056) - call BankswitchHome + call BankswitchROM call Func_1c056 pop af - call BankswitchHome + call BankswitchROM ret Func_39a7: ; 39a7 (0:39a7) @@ -10869,11 +10894,11 @@ Func_39ea: ; 39ea (0:39ea) ldh a, [hBankROM] push af ld a, $03 - call BankswitchHome + call BankswitchROM ld a, [bc] ld c, a pop af - call BankswitchHome + call BankswitchROM ld a, c pop bc ret @@ -10961,10 +10986,10 @@ Func_3a5e: ; 3a5e (0:3a5e) call Func_3abd jr nc, .asm_3ab3 ld a, BANK(Func_c653) - call BankswitchHome + call BankswitchROM call Func_c653 ld a, $4 - call BankswitchHome + call BankswitchROM ld a, [wd334] ld d, a .asm_3a79 @@ -10996,7 +11021,7 @@ Func_3a5e: ; 3a5e (0:3a5e) pop hl pop bc pop af - call BankswitchHome + call BankswitchROM scf ret .asm_3aab @@ -11007,7 +11032,7 @@ Func_3a5e: ; 3a5e (0:3a5e) jr .asm_3a79 .asm_3ab3 pop af - call BankswitchHome + call BankswitchROM ld l, $6 call $49c2 ret @@ -11030,12 +11055,12 @@ Func_3abd: ; 3abd (0:3abd) ldh a, [hBankROM] push af ld a, BANK(MapScripts) - call BankswitchHome + call BankswitchROM ld a, [hli] ld h, [hl] ld l, a pop af - call BankswitchHome + call BankswitchROM ld a, l or h jr nz, .asm_3ae5 @@ -11070,12 +11095,12 @@ RunOverworldScript: ; 3aed (0:3aed) ldh a, [hBankROM] push af ld a, BANK(OverworldScriptTable) - call BankswitchHome + call BankswitchROM ld a, [hli] ld h, [hl] ld l, a pop af - call BankswitchHome + call BankswitchROM pop bc jp hl ; 0x3b11 @@ -11084,10 +11109,10 @@ Func_3b11: ; 3b11 (0:3b11) ldh a, [hBankROM] push af ld a, $04 - call BankswitchHome + call BankswitchROM call $66d1 pop af - call BankswitchHome + call BankswitchROM ret ; 0x3b21 @@ -11095,17 +11120,17 @@ Func_3b21: ; 3b21 (0:3b21) ldh a, [hBankROM] push af ld a, $7 - call BankswitchHome + call BankswitchROM call $48bc pop af - call BankswitchHome + call BankswitchROM ret Func_3b31: ; 3b31 (0:3b31) ldh a, [hBankROM] push af ld a, $7 - call BankswitchHome + call BankswitchROM call $4b18 jr c, .asm_3b45 xor a @@ -11116,7 +11141,7 @@ Func_3b31: ; 3b31 (0:3b31) ld a, 1 ld [wVBlankOAMCopyToggle], a pop af - call BankswitchHome + call BankswitchROM ret Func_3b52: ; 3b52 (0:3b52) @@ -11146,7 +11171,7 @@ Func_3b6a: ; 3b6a (0:3b6a) push bc push de ld a, $7 - call BankswitchHome + call BankswitchROM ld a, [wd422] cp $61 jr nc, .asm_3b90 @@ -11167,7 +11192,7 @@ Func_3b6a: ; 3b6a (0:3b6a) pop bc pop hl pop af - call BankswitchHome + call BankswitchROM ret ; 0x3ba2 @@ -11175,11 +11200,11 @@ Func_3ba2: ; 3ba2 (0:3ba2) ldh a, [hBankROM] push af ld a, $07 - call BankswitchHome + call BankswitchROM call $4ac5 call Func_3cb4 pop af - call BankswitchHome + call BankswitchROM ret ; 0x3bb5 @@ -11189,11 +11214,11 @@ Func_3bb5: ; 3bb5 (0:3bb5) ldh a, [hBankROM] push af ld a, [wd4be] - call BankswitchHome + call BankswitchROM call Func_3cb4 call CallHL2 pop af - call BankswitchHome + call BankswitchROM ld a, $80 ld [wd4c0], a ret @@ -11219,10 +11244,10 @@ Func_3be4: ; 3be4 (0:3be4) ldh a, [hBankROM] push af ld a, [wd4c6] - call BankswitchHome + call BankswitchROM call Func_08de pop af - call BankswitchHome + call BankswitchROM ret ; 0x3bf5 @@ -11231,7 +11256,7 @@ Func_3bf5: ; 3bf5 (0:3bf5) push af push hl ld a, [wd4c6] - call BankswitchHome + call BankswitchROM ld a, [wd4c4] ld l, a ld a, [wd4c5] @@ -11239,7 +11264,7 @@ Func_3bf5: ; 3bf5 (0:3bf5) call CopyDataHLtoDE_SaveRegisters pop hl pop af - call BankswitchHome + call BankswitchROM ret ; 0x3c10 @@ -11288,13 +11313,13 @@ Func_3c2d: ; 3c2d (0:3c2d) push hl ld hl, sp+$05 ld a, [hl] - call BankswitchHome + call BankswitchROM pop hl ld a, [hl] ld hl, sp+$03 ld [hl], a pop af - call BankswitchHome + call BankswitchROM pop af pop hl ret @@ -11387,20 +11412,20 @@ Func_3ca4: ; 3ca4 (0:3ca4) ldh a, [hBankROM] push af ld a, BANK(Func_1296e) - call BankswitchHome + call BankswitchROM call Func_1296e pop af - call BankswitchHome + call BankswitchROM ret Func_3cb4: ; 3cb4 (0:3cb4) ldh a, [hBankROM] push af ld a, BANK(Func_12a21) - call BankswitchHome + call BankswitchROM call Func_12a21 pop af - call BankswitchHome + call BankswitchROM ret ; 0x3cc4 @@ -11409,7 +11434,7 @@ Func_3cc4: ; 3cc4 (0:3cc4) ldh a, [hBankROM] push af ld a, [wd5d6] - call BankswitchHome + call BankswitchROM ld a, [wd5d1] cp $f0 ld a, $00 @@ -11515,7 +11540,7 @@ Func_3cc4: ; 3cc4 (0:3cc4) jr nz, .asm_3ced .done pop af - call BankswitchHome + call BankswitchROM ret ; 0x3d72 @@ -11536,7 +11561,7 @@ Func_3d72: ; 3d72 (0:3d72) ld a, [wd4c5] ld h, a ld a, [wd4c6] - call BankswitchHome + call BankswitchROM ld a, [hli] push af ld a, [wd4ca] @@ -11555,7 +11580,7 @@ Func_3d72: ; 3d72 (0:3d72) ld bc, $000b add hl, bc ld [hli], a - call BankswitchHome + call BankswitchROM ld a, [de] ld [hli], a inc de @@ -11563,7 +11588,7 @@ Func_3d72: ; 3d72 (0:3d72) ld [hl], a pop hl pop af - call BankswitchHome + call BankswitchROM ret Func_3db7: ; 3db7 (0:3db7) @@ -11628,14 +11653,14 @@ Func_3df3: ; 3df3 (0:3df3) push af push hl ld a, BANK(Func_12c7f) - call BankswitchHome + call BankswitchROM ld hl, sp+$5 ld a, [hl] call Func_12c7f call FlushAllPalettes pop hl pop af - call BankswitchHome + call BankswitchROM pop af ld a, [wd61b] ret @@ -11650,10 +11675,10 @@ Func_3e17: ; 3e17 (0:3e17) ldh a, [hBankROM] push af ld a, $4 - call BankswitchHome + call BankswitchROM call $6fc6 pop af - call BankswitchHome + call BankswitchROM ret Func_3e2a: ; 3e2a (0:3e2a) @@ -11667,10 +11692,10 @@ Func_3e31: ; 3e31 (0:3e31) push af call Func_3cb4 ld a, $20 - call BankswitchHome + call BankswitchROM call $44d8 pop af - call BankswitchHome + call BankswitchROM ret ; 0x3e44 diff --git a/src/wram.asm b/src/wram.asm index 9cf0167..202dc6c 100644 --- a/src/wram.asm +++ b/src/wram.asm @@ -426,7 +426,8 @@ wTileMapFill:: ; cab6 wIE:: ; cab7 ds $1 -; incremented whenever the vblank handler ends. used to wait for it to end +; incremented whenever the vblank handler ends. used to wait for it to end, +; or to delay a specific amount of frames wVBlankCounter:: ; cab8 ds $1 @@ -739,7 +740,8 @@ wTempSerialBuf:: ; cbed wcbf7:: ; cbf7 ds $2 -wcbf9:: ; cbf9 +; when non-0, AIMakeDecision doesn't wait 60 frames and print DuelistIsThinkingText +wSkipDuelistIsThinkingDelay:: ; cbf9 ds $1 wcbfa:: ; cbfa @@ -921,7 +923,7 @@ wEffectFunctionsFeedback:: ; ccce ds $18 ; this is 1 (non-0) if dealing damage to self due to confusion -wDamageToSelfMode:: ; cce6 +wIsDamageToSelf:: ; cce6 ds $1 ds $2 @@ -1299,7 +1301,22 @@ wTempPokemonID_ce7c:: ; ce7c wce7e:: ; ce7e ds $1 - ds $22 +wce7f:: ; ce7f + ds $2 + +wce81:: ; ce81 + ds $1 + +wce82:: ; ce82 + ds $1 + +wce83:: ; ce83 + ds $1 + +wce84:: ; ce84 + ds $1 + + ds $1c wcea1:: ; cea1 ds $1 @@ -1846,7 +1863,12 @@ wd4ac:: ; d4ac wd4ad:: ; d4ad ds $1 - ds $10 + ds $2 + +wd4b0:: ; d4b0 + ds $1 + + ds $d wd4be:: ; d4be ds $1 |