From 2bbc1a63239201be8f1a7b360e81d19192093a8f Mon Sep 17 00:00:00 2001 From: xCrystal Date: Tue, 10 Apr 2018 16:25:35 +0200 Subject: Add leading zero to temporary bankX.asm filenames so they show up in order --- src/engine/bank01.asm | 3784 ++++++++++++++++++++++++++++++++++++++++++++++ src/engine/bank02.asm | 1076 +++++++++++++ src/engine/bank03.asm | 3225 +++++++++++++++++++++++++++++++++++++++ src/engine/bank04.asm | 1542 +++++++++++++++++++ src/engine/bank05.asm | 323 ++++ src/engine/bank06.asm | 328 ++++ src/engine/bank07.asm | 566 +++++++ src/engine/bank08.asm | 132 ++ src/engine/bank1.asm | 3784 ---------------------------------------------- src/engine/bank2.asm | 1076 ------------- src/engine/bank3.asm | 3225 --------------------------------------- src/engine/bank4.asm | 1542 ------------------- src/engine/bank5.asm | 323 ---- src/engine/bank6.asm | 328 ---- src/engine/bank7.asm | 566 ------- src/engine/bank8.asm | 132 -- src/macros/constants.asm | 2 +- src/main.asm | 40 +- 18 files changed, 10997 insertions(+), 10997 deletions(-) create mode 100644 src/engine/bank01.asm create mode 100644 src/engine/bank02.asm create mode 100644 src/engine/bank03.asm create mode 100644 src/engine/bank04.asm create mode 100644 src/engine/bank05.asm create mode 100644 src/engine/bank06.asm create mode 100644 src/engine/bank07.asm create mode 100644 src/engine/bank08.asm delete mode 100644 src/engine/bank1.asm delete mode 100644 src/engine/bank2.asm delete mode 100644 src/engine/bank3.asm delete mode 100644 src/engine/bank4.asm delete mode 100644 src/engine/bank5.asm delete mode 100644 src/engine/bank6.asm delete mode 100644 src/engine/bank7.asm delete mode 100644 src/engine/bank8.asm (limited to 'src') diff --git a/src/engine/bank01.asm b/src/engine/bank01.asm new file mode 100644 index 0000000..7933fc4 --- /dev/null +++ b/src/engine/bank01.asm @@ -0,0 +1,3784 @@ +; continuation of Bank0 Start +; supposed to be the main loop, but the game never returns from _GameLoop anyway +GameLoop: ; 4000 (1:4000) + di + ld sp, $e000 + call ResetSerial + call EnableInt_VBlank + call EnableInt_Timer + call EnableSRAM + ld a, [sa006] + ld [wTextSpeed], a + ld a, [sa009] + ld [wccf2], a + call DisableSRAM + ld a, $1 + ld [wUppercaseFlag], a + ei + farcall CommentedOut_1a6cc + ldh a, [hButtonsHeld] + cp A_BUTTON | B_BUTTON + jr z, .ask_erase_backup_ram + farcall _GameLoop + jr GameLoop +.ask_erase_backup_ram + call Func_405a + call EmptyScreen + ldtx hl, ResetBackUpRamText + call YesOrNoMenuWithText + jr c, .reset_game +; erase sram + call EnableSRAM + xor a + ld [sa000], a + call DisableSRAM +.reset_game + jp Reset + +Func_4050: ; 4050 (1:4050) + farcall Func_1996e + ld a, $1 + ld [wUppercaseFlag], a + ret + +Func_405a: ; 405a (1:405a) + xor a + ld [wTileMapFill], a + call DisableLCD + call LoadDuelHUDTiles + call SetDefaultPalettes + ld de, $387f + call Func_2275 + ret +; 0x406e + +CommentedOut_406e: ; 406e (1:406e) + ret +; 0x406f + +; try to resume a saved duel from the main menu +TryContinueDuel: ; 406f (1:406f) + call Func_420b + call $66e9 + ldtx hl, BackUpIsBrokenText + jr c, FailedToContinueDuel +; fallthrough + +ContinueDuel: ; 407a (1:407a) + ld hl, sp+$00 + ld a, l + ld [wDuelReturnAddress], a + ld a, h + ld [wDuelReturnAddress + 1], a + call ClearJoypad + ld a, [wDuelTheme] + call PlaySong + xor a + ld [wDuelFinished], a + call DuelMainInterface + jp StartDuel.begin_turn +; 0x4097 + +FailedToContinueDuel: ; 4097 (1:4097) + call DrawWideTextBox_WaitForInput + call ResetSerial + scf + ret +; 0x409f + +; this function begins the duel after the opponent's +; graphics, name and deck have been introduced +StartDuel: ; 409f (1:409f) + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + ld a, DUELIST_TYPE_PLAYER + ld [wPlayerDuelistType], a + ld a, [wcc19] + ld [wOpponentDeckID], a + call LoadPlayerDeck + call SwapTurn + call LoadOpponentDeck + call SwapTurn + jr .continue + + ld a, MUSIC_DUEL_THEME_1 + ld [wDuelTheme], a + ld hl, wOpponentName + xor a + ld [hli], a + ld [hl], a + ld [wIsPracticeDuel], a + +.continue + ld hl, sp+$0 + ld a, l + ld [wDuelReturnAddress], a + ld a, h + ld [wDuelReturnAddress + 1], a + xor a + ld [wCurrentDuelMenuItem], a + call Func_420b + ld a, [wcc18] + ld [wDuelInitialPrizes], a + call $70aa + ld a, [wDuelTheme] + call PlaySong + call Func_4b60 + ret c + +; the loop returns here after every turn switch +.main_duel_loop ; 40ee (1:40ee) + xor a + ld [wCurrentDuelMenuItem], a + call UpdateSubstatusConditions_StartOfTurn + call $54c8 + call HandleTurn + +.begin_turn + call Func_0f58 + ld a, [wDuelFinished] + or a + jr nz, .duel_finished + call UpdateSubstatusConditions_EndOfTurn + call $6baf + call Func_3b31 + call Func_0f58 + ld a, [wDuelFinished] + or a + jr nz, .duel_finished + ld hl, wDuelTurns + inc [hl] + ld a, [wDuelType] + cp DUELTYPE_PRACTICE + jr z, .practice_duel + +.next_turn + call SwapTurn + jr .main_duel_loop + +.practice_duel + ld a, [wIsPracticeDuel] + or a + jr z, .next_turn + ld a, [hl] + cp 15 ; the practice duel lasts 15 turns + jr c, .next_turn + xor a ; DUEL_WIN + ld [wDuelResult], a + ret + +.duel_finished + call ZeroObjectPositionsAndToggleOAMCopy + call EmptyScreen + ld a, BOXMSG_DECISION + call DrawDuelBoxMessage + ldtx hl, DecisionText + call DrawWideTextBox_WaitForInput + call EmptyScreen + ldh a, [hWhoseTurn] + push af + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + call Func_4a97 + call Func_4ad6 + pop af + ldh [hWhoseTurn], a + call Func_3b21 + ld a, [wDuelFinished] + cp TURN_PLAYER_WON + jr z, .active_duelist_won_battle + cp TURN_PLAYER_LOST + jr z, .active_duelist_lost_batte + ld a, $5f + ld c, MUSIC_DARK_DIDDLY + ldtx hl, DuelWasADrawText + jr .handle_duel_finished + +.active_duelist_won_battle + ldh a, [hWhoseTurn] + cp PLAYER_TURN + jr nz, .opponent_won_battle +.player_won_battle + xor a ; DUEL_WIN + ld [wDuelResult], a + ld a, $5d + ld c, MUSIC_MATCH_VICTORY + ldtx hl, WonDuelText + jr .handle_duel_finished + +.active_duelist_lost_batte + ldh a, [hWhoseTurn] + cp PLAYER_TURN + jr nz, .player_won_battle +.opponent_won_battle + ld a, DUEL_LOSS + ld [wDuelResult], a + ld a, $5e + ld c, MUSIC_MATCH_LOSS + ldtx hl, LostDuelText + +.handle_duel_finished + call Func_3b6a + ld a, c + call PlaySong + ld a, OPPONENT_TURN + ldh [hWhoseTurn], a + call DrawWideTextBox_PrintText + call EnableLCD +.wait_song + call DoFrame + call AssertSongFinished + or a + jr nz, .wait_song + ld a, [wDuelFinished] + cp TURN_PLAYER_TIED + jr z, .tied_battle + call Func_39fc + call WaitForWideTextBoxInput + call Func_3b31 + call ResetSerial + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + ret + +.tied_battle + call WaitForWideTextBoxInput + call Func_3b31 + ld a, [wDuelTheme] + call PlaySong + ldtx hl, StartSuddenDeathMatchText + call DrawWideTextBox_WaitForInput + ld a, 1 + ld [wDuelInitialPrizes], a + call $70aa + ld a, [wDuelType] + cp DUELTYPE_LINK + jr z, .link_duel + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + call Func_4b60 + jp .main_duel_loop + +.link_duel + call Func_0f58 + ld h, PLAYER_TURN + ld a, [wSerialOp] + cp $29 + jr z, .got_turn + ld h, OPPONENT_TURN + +.got_turn + ld a, h + ldh [hWhoseTurn], a + call Func_4b60 + jp nc, .main_duel_loop + ret +; 0x420b + +Func_420b: ; 420b (1:420b) + xor a + ld [wTileMapFill], a + call ZeroObjectPositionsAndToggleOAMCopy + call EmptyScreen + call LoadDuelHUDTiles + call SetDefaultPalettes + ld de, $389f + call Func_2275 + call EnableLCD + ret +; 0x4225 + +; handle the turn of the duelist identified by hWhoseTurn +HandleTurn: ; 4225 (1:4225) + ld a, DUELVARS_DUELIST_TYPE + call GetTurnDuelistVariable + ld [wDuelistType], a + ld a, [wDuelTurns] + cp 2 + jr c, .skip_let_evolve ; jump if it's the turn holder's first turn + call SetAllPlayAreaPokemonCanEvolve + +.skip_let_evolve + call Func_70e6 + call Func_4933 + call DrawCardFromDeck + jr nc, .deck_not_empty + ld a, TURN_PLAYER_LOST + ld [wDuelFinished], a + ret + +.deck_not_empty + ldh [hTempCardIndex_ff98], a + call AddCardToHand + ld a, [wDuelistType] + cp DUELIST_TYPE_PLAYER + jr z, HandleTurn_PlayerDrewCard + call SwapTurn + call IsClairvoyanceActive + call SwapTurn + call c, DisplayPlayerDrawCardScreen + jr DuelMainInterface + +; display the animation of the player drawing the card at hTempCardIndex_ff98 +; save duel state to SRAM, and fall through to DuelMainInterface to effectively +; begin the turn +HandleTurn_PlayerDrewCard: + call DisplayPlayerDrawCardScreen + call SaveDuelStateToSRAM +; fallthrough + +Func_4268: + ld a, $06 + call DoPracticeDuelAction +; fallthrough + +; print the main interface during a duel, including background, Pokemon, HUDs and a text box. +; the bottom text box changes depending on whether the turn belongs to the player (show the duel menu), +; an AI opponent (print "Waiting..." and a reduced menu) or a link opponent (print " is thinking"). +DuelMainInterface: ; 426d (1:426d) + call DrawDuelMainScene + ld a, [wDuelistType] + cp DUELIST_TYPE_PLAYER + jr z, PrintDuelMenu + cp DUELIST_TYPE_LINK_OPP + jp z, $6911 + ; DUELIST_TYPE_AI_OPP + xor a + ld [wVBlankCtr], a + ld [wcbf9], a + ldtx hl, DuelistIsThinkingText + call DrawWideTextBox_PrintTextNoDelay + call Func_2bbf + ld a, $ff + ld [wcc11], a + ld [wcc10], a + ret + +PrintDuelMenu: ; 4295 (1:4295) + call DrawWideTextBox + ld hl, $54e9 + call Func_2c08 +.asm_429e + call $669d + ld a, [wDuelFinished] + or a + ret nz + ld a, [wCurrentDuelMenuItem] + call SetMenuItem +; fallthrough + +HandleDuelMenuInputAndShortcuts: + call DoFrame + ldh a, [hButtonsHeld] + and B_BUTTON + jr z, .b_not_held + ldh a, [hButtonsPressed] + bit D_UP_F, a + jr nz, DuelMenuShortcut_OpponentPlayArea + bit D_DOWN_F, a + jr nz, DuelMenuShortcut_PlayerPlayArea + bit D_LEFT_F, a + jr nz, DuelMenuShortcut_PlayerDiscardPile + bit D_RIGHT_F, a + jr nz, DuelMenuShortcut_OpponentDiscardPile + bit START_F, a + jp nz, DuelMenuShortcut_OpponentActivePokemon + +.b_not_held + ldh a, [hButtonsPressed] + and START + jp nz, DuelMenuShortcut_PlayerActivePokemon + ldh a, [hButtonsPressed] + bit SELECT_F, a + jp nz, DuelMenuShortcut_BothActivePokemon + ld a, [wcbe7] + or a + jr nz, HandleDuelMenuInputAndShortcuts + call HandleDuelMenuInput + ld a, e + ld [wCurrentDuelMenuItem], a + jr nc, HandleDuelMenuInputAndShortcuts + ldh a, [hCurrentMenuItem] + ld hl, DuelMenuFunctionTable + jp JumpToFunctionInTable + +DuelMenuFunctionTable: ; 42f1 (1:42f1) + dw DuelMenu_Hand + dw DuelMenu_Attack + dw DuelMenu_Check + dw DuelMenu_PkmnPower + dw DuelMenu_Retreat + dw DuelMenu_Done + +Func_42fd: ; 42fd (1:42fd) + call DrawCardFromDeck + call nc, AddCardToHand + ld a, $0b + call SetDuelAIAction + jp PrintDuelMenu.asm_429e +; 0x430b + +; triggered by pressing B + UP in the duel menu +DuelMenuShortcut_OpponentPlayArea: ; 430b (1:430b) + call OpenOpponentPlayAreaScreen + jp DuelMainInterface + +; triggered by pressing B + DOWN in the duel menu +DuelMenuShortcut_PlayerPlayArea: ; 4311 (1:4311) + call OpenPlayAreaScreen + jp DuelMainInterface + +; triggered by pressing B + LEFT in the duel menu +DuelMenuShortcut_OpponentDiscardPile: ; 4317 (1:4317) + call OpenOpponentDiscardPileScreen + jp c, PrintDuelMenu + jp DuelMainInterface + +; triggered by pressing B + RIGHT in the duel menu +DuelMenuShortcut_PlayerDiscardPile: ; 4320 (1:4320) + call OpenPlayerDiscardPileScreen + jp c, PrintDuelMenu + jp DuelMainInterface + +; draw the opponent's play area screen +OpenOpponentPlayAreaScreen: ; 4329 (1:4329) + call SwapTurn + call OpenPlayAreaScreen + call SwapTurn + ret + +; draw the turn holder's play area screen +OpenPlayAreaScreen: ; 4333 (1:4333) + call HasAlivePokemonInPlayArea + jp OpenPlayAreaScreenForViewing + +; draw the opponent's discard pile screen +OpenOpponentDiscardPileScreen: ; 4339 (1:4339) + call SwapTurn + call OpenDiscardPileScreen + jp SwapTurn + +; draw the player's discard pile screen +OpenPlayerDiscardPileScreen: ; 4342 (1:4342) + jp OpenDiscardPileScreen + +Func_4345: ; 4345 (1:4345) + call SwapTurn + call Func_434e + jp SwapTurn +; 0x434e + +Func_434e: ; 434e (1:434e) + call CreateHandCardList + jr c, .no_cards_in_hand + call DrawCardListScreenLayout + ld a, START + A_BUTTON + ld [wcbd6], a + jp Func_55f0 +.no_cards_in_hand + ldtx hl, NoCardsInHandText + jp DrawWideTextBox_WaitForInput +; 0x4364 + +; triggered by pressing B + START in the duel menu +DuelMenuShortcut_OpponentActivePokemon: ; 4364 (1:4364) + call SwapTurn + call OpenActivePokemonScreen + call SwapTurn + jp DuelMainInterface +; 0x4370 + +; triggered by pressing START in the duel menu +DuelMenuShortcut_PlayerActivePokemon: ; 4370 (1:4370) + call OpenActivePokemonScreen + jp DuelMainInterface +; 0x4376 + +; draw the turn holder's active Pokemon screen if it exists +OpenActivePokemonScreen: ; 4376 (1:4376) + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + cp -1 + ret z + call GetCardIDFromDeckIndex + call LoadCardDataToBuffer1_FromCardID + ld hl, wcbc9 + xor a + ld [hli], a + ld [hl], a + call Func_576a + ret +; 0x438e + +; triggered by selecting the "Pkmn Power" item in the duel menu +DuelMenu_PkmnPower: ; 438e (1:438e) + call $6431 + jp c, DuelMainInterface + call Func_1730 + jp DuelMainInterface + +; triggered by selecting the "Done" item in the duel menu +DuelMenu_Done: ; 439a (1:439a) + ld a, $08 + call DoPracticeDuelAction + jp c, Func_4268 + ld a, $05 + call SetDuelAIAction + call $717a + ret + +; triggered by selecting the "Retreat" item in the duel menu +DuelMenu_Retreat: ; 43ab (1:43ab) + ld a, DUELVARS_ARENA_CARD_STATUS + call GetTurnDuelistVariable + and CNF_SLP_PRZ + cp CONFUSED + ldh [hTemp_ffa0], a + jr nz, Func_43f1 + ld a, [wcc0c] + or a + jr nz, Func_43e8 + call $45bb + jr c, Func_441f + call $4611 + jr c, Func_441c + ldtx hl, SelectPkmnOnBenchToSwitchWithActiveText + call DrawWideTextBox_WaitForInput + call OpenPlayAreaScreenForSelection + jr c, Func_441c + ld [wBenchSelectedPokemon], a + ld a, [wBenchSelectedPokemon] + ldh [hTempPlayAreaLocationOffset_ffa1], a + ld a, $04 + call SetDuelAIAction + call $657a + jr nc, Func_441c + call DrawDuelMainScene + +Func_43e8: ; 43e8 + ldtx hl, UnableToRetreatText + call DrawWideTextBox_WaitForInput + jp PrintDuelMenu + +Func_43f1: ; 43f1 (1:43f1) + call $45bb + jr c, Func_441f + call $4611 + jr c, Func_441c + call $6558 + ldtx hl, SelectPkmnOnBenchToSwitchWithActiveText + call DrawWideTextBox_WaitForInput + call OpenPlayAreaScreenForSelection + ld [wBenchSelectedPokemon], a + ldh [hTempPlayAreaLocationOffset_ffa1], a + push af + call $6564 + pop af + jp c, DuelMainInterface + ld a, $04 + call SetDuelAIAction + call $657a + +Func_441c: ; 441c (1:441c) + jp DuelMainInterface + +Func_441f: ; 441f (1:441f) + call DrawWideTextBox_WaitForInput + jp PrintDuelMenu + +; triggered by selecting the "Hand" item in the duel menu +DuelMenu_Hand: ; 4425 (1:4425) + ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND + call GetTurnDuelistVariable + or a + jr nz, OpenPlayerHandScreen + ldtx hl, NoCardsInHandText + call DrawWideTextBox_WaitForInput + jp PrintDuelMenu + +; draw the screen for the player's hand and handle user input to for example check +; a card or attempt to use a card, playing the card if possible in that case. +OpenPlayerHandScreen: ; 4436 (1:4436) + call CreateHandCardList + call DrawCardListScreenLayout + ldtx hl, PleaseSelectHandText + call SetCardListInfoBoxText + ld a, $1 + ld [wcbde], a +.handle_input + call Func_55f0 + push af + ld a, [wcbdf] + or a + call nz, SortHandCardsByID + pop af + jp c, DuelMainInterface + ldh a, [hTempCardIndex_ff98] + call LoadCardDataToBuffer1_FromDeckIndex + ld a, [wLoadedCard1Type] + ld c, a + bit TYPE_TRAINER_F, c + jr nz, .trainer_card + bit TYPE_ENERGY_F, c + jr nz, UseEnergyCard + call UsePokemonCard + jr c, ReloadCardListScreen ; jump if card not played + jp DuelMainInterface +.trainer_card + call UseTrainerCard + jr c, ReloadCardListScreen ; jump if card not played + jp DuelMainInterface + +; use the energy card with deck index at hTempCardIndex_ff98 +; c contains the type of energy card being played +UseEnergyCard: ; 4477 (1:4477) + ld a, c + cp TYPE_ENERGY_WATER + jr nz, .not_water_energy + call IsRainDanceActive + jr c, .rain_dance_active + +.not_water_energy + ld a, [wAlreadyPlayedEnergy] + or a + jr nz, .already_played_energy + call HasAlivePokemonInPlayArea + call OpenPlayAreaScreenForSelection ; choose card to play energy card on + jp c, DuelMainInterface ; exit if no card was chosen +.play_energy_set_played + ld a, $1 + ld [wAlreadyPlayedEnergy], a +.play_energy + ldh a, [hTempPlayAreaLocationOffset_ff9d] + ldh [hTempPlayAreaLocationOffset_ffa1], a + ld e, a + ldh a, [hTempCardIndex_ff98] + ldh [hTemp_ffa0], a + call PutHandCardInPlayArea + call $61b8 + ld a, $3 + call SetDuelAIAction + call $68e4 + jp DuelMainInterface + +.rain_dance_active + call HasAlivePokemonInPlayArea + call OpenPlayAreaScreenForSelection ; choose card to play energy card on + jp c, DuelMainInterface ; exit if no card was chosen + call CheckRainDanceScenario + jr c, .play_energy + ld a, [wAlreadyPlayedEnergy] + or a + jr z, .play_energy_set_played + ldtx hl, MayOnlyAttachOneEnergyCardText + call DrawWideTextBox_WaitForInput + jp OpenPlayerHandScreen + +.already_played_energy + ldtx hl, MayOnlyAttachOneEnergyCardText + call DrawWideTextBox_WaitForInput +; fallthrough + +; reload the card list screen after the card trying to play couldn't be played +ReloadCardListScreen: ; 44d2 (1:44d2) + call CreateHandCardList + ; skip doing the things that have already been done when initially opened + call DrawCardListScreenLayout.draw + jp OpenPlayerHandScreen.handle_input +; 0x44db + +; use a basic Pokemon card on the arena or bench, or place an stage 1 or 2 +; Pokemon card over a Pokemon card already in play to evolve it. +; the card to use is loaded in wLoadedCard1 and its deck index is at hTempCardIndex_ff98. +; return nc if the card was played, carry if it wasn't. +UsePokemonCard: ; 44db (1:44db) + ld a, [wLoadedCard1Stage] + or a ; BASIC + jr nz, .try_evolve ; jump if the card being played is a Stage 1 or 2 Pokemon + ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA + call GetTurnDuelistVariable + cp MAX_PLAY_AREA_POKEMON + jr nc, .no_space + ldh a, [hTempCardIndex_ff98] + ldh [hTemp_ffa0], a + call PutHandPokemonCardInPlayArea + ldh [hTempPlayAreaLocationOffset_ff9d], a + add DUELVARS_ARENA_CARD_STAGE + call GetTurnDuelistVariable + ld [hl], BASIC + ld a, $01 + call SetDuelAIAction + ldh a, [hTempCardIndex_ff98] + call LoadCardDataToBuffer1_FromDeckIndex + ld a, 20 + call CopyCardNameAndLevel + ld [hl], $00 + ld hl, $0000 + call LoadTxRam2 + ldtx hl, PlacedOnTheBenchText + call DrawWideTextBox_WaitForInput + call Func_161e + or a + ret +.no_space + ldtx hl, NoSpaceOnTheBenchText + call DrawWideTextBox_WaitForInput + scf + ret +.try_evolve + ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA + call GetTurnDuelistVariable + ld c, a + ldh a, [hTempCardIndex_ff98] + ld d, a + ld e, PLAY_AREA_ARENA + push de + push bc +.next_play_area_pkmn + push de + call CheckIfCanEvolveInto + pop de + jr nc, .can_evolve + inc e + dec c + jr nz, .next_play_area_pkmn + pop bc + pop de +.find_cant_evolve_reason_loop + push de + call CheckIfCanEvolveInto + pop de + ldtx hl, CantEvolvePokemonInSameTurnItsPlacedText + jr nz, .cant_same_turn + inc e + dec c + jr nz, .find_cant_evolve_reason_loop + ldtx hl, NoPokemonCapableOfEvolvingText +.cant_same_turn + ; don't bother opening the selection screen if there are no pokemon capable of evolving + call DrawWideTextBox_WaitForInput + scf + ret +.can_evolve + pop bc + pop de + call IsPrehistoricPowerActive + jr c, .prehistoric_power + call HasAlivePokemonInPlayArea +.try_evolve_loop + call OpenPlayAreaScreenForSelection + jr c, .done + ldh a, [hTempCardIndex_ff98] + ldh [hTemp_ffa0], a + ldh a, [hTempPlayAreaLocationOffset_ff9d] + ldh [hTempPlayAreaLocationOffset_ffa1], a + call EvolvePokemonCard + jr c, .try_evolve_loop ; jump if evolution wasn't successsful somehow + ld a, $02 + call SetDuelAIAction + call $61b8 + call $68fa + call Func_161e +.done + or a + ret +.prehistoric_power + call DrawWideTextBox_WaitForInput + scf + ret +; 0x4585 + +; triggered by selecting the "Check" item in the duel menu +DuelMenu_Check: ; 4585 (1:4585) + call Func_3b31 + call Func_3096 + jp DuelMainInterface + +; triggered by pressing SELECT in the duel menu +DuelMenuShortcut_BothActivePokemon:: ; 458e (1:458e) + call Func_3b31 + call Func_4597 + jp DuelMainInterface +; 0x4597 + +Func_4597: ; 4597 (1:4597) + call Func_30a6 + ret c + call Func_45a9 + ret c + call SwapTurn + call Func_45a9 + call SwapTurn + ret +; 0x45a9 + +Func_45a9: ; 45a9 (1:45a9) + call HasAlivePokemonInPlayArea + ld a, $02 + ld [wcbd4], a + call OpenPlayAreaScreenForViewing + ldh a, [hButtonsPressed] + and B_BUTTON + ret z + scf + ret +; 0x45bb + + INCROM $45bb, $46fc + +; triggered by selecting the "Attack" item in the duel menu +DuelMenu_Attack: ; 46fc (1:46fc) + call HandleCantAttackSubstatus + jr c, .alert_cant_attack_and_cancel_menu + call CheckIfActiveCardParalyzedOrAsleep + jr nc, .can_attack +.alert_cant_attack_and_cancel_menu + call DrawWideTextBox_WaitForInput + jp PrintDuelMenu + +.can_attack + xor a + ld [wSelectedDuelSubMenuItem], a +.try_open_attack_menu + call LoadPokemonMovesToDuelTempList + or a + jr nz, .open_attack_menu + ldtx hl, NoSelectableAttackText + call DrawWideTextBox_WaitForInput + jp PrintDuelMenu + +.open_attack_menu + push af + ld a, [wSelectedDuelSubMenuItem] + ld hl, AttackMenuParameters + call InitializeMenuParameters + pop af + ld [wNumMenuItems], a + ldh a, [hWhoseTurn] + ld h, a + ld l, DUELVARS_ARENA_CARD + ld a, [hl] + call LoadCardDataToBuffer1_FromDeckIndex + +.wait_for_input + call DoFrame + ldh a, [hButtonsPressed] + and START + jr nz, .display_selected_move_info + call HandleMenuInput + jr nc, .wait_for_input + cp -1 ; was B pressed? + jp z, PrintDuelMenu + ld [wSelectedDuelSubMenuItem], a + call CheckIfEnoughEnergies + jr nc, .enough_energy + ldtx hl, NotEnoughEnergyCardsText + call DrawWideTextBox_WaitForInput + jr .try_open_attack_menu + +.enough_energy + ldh a, [hCurrentMenuItem] + add a + ld e, a + ld d, $00 + ld hl, wDuelTempList + add hl, de + ld d, [hl] ; card index within the deck (0 to 59) + inc hl + ld e, [hl] ; attack index (0 or 1) + call CopyMoveDataAndDamage_FromDeckIndex + call HandleAmnesiaSubstatus + jr c, .cannot_use_due_to_amnesia + ld a, $07 + call DoPracticeDuelAction + jp c, Func_4268 + call Func_1730 + jp c, DuelMainInterface + ret + +.cannot_use_due_to_amnesia + call DrawWideTextBox_WaitForInput + jr .try_open_attack_menu + +.display_selected_move_info + call Func_478b + call DrawDuelMainScene + jp .try_open_attack_menu + +Func_478b: ; 478b (1:478b) + ld a, CARDPAGE_POKEMON_OVERVIEW + ld [wCardPageNumber], a + xor a + ld [wcbc9], a + call EmptyScreen + call Func_3b31 + ld de, v0Tiles1 + $20 tiles + call LoadLoaded1CardGfx + call SetOBP1OrSGB3ToCardPalette + call SetBGP6OrSGB3ToCardPalette + call FlushAllPalettesOrSendPal23Packet + lb de, $38, $30 ; X Position and Y Position of top-left corner + call PlaceCardImageOAM + lb de, 6, 4 + call ApplyBGP6OrSGB3ToCardImage + ldh a, [hCurrentMenuItem] + ld [wSelectedDuelSubMenuItem], a + add a + ld e, a + ld d, $00 + ld hl, wDuelTempList + 1 + add hl, de + ld a, [hl] + or a + jr nz, .asm_47c9 + xor a + jr .asm_47cb + +.asm_47c9 + ld a, $02 + +.asm_47cb + ld [wcc04], a + +.asm_47ce + call Func_47ec + call EnableLCD + +.asm_47d4 + call DoFrame + ldh a, [hButtonsPressed2] + and D_RIGHT | D_LEFT + jr nz, .asm_47ce + ldh a, [hButtonsPressed] + and A_BUTTON | B_BUTTON + jr z, .asm_47d4 + ret + +AttackMenuParameters: + db 1, 13 ; cursor x, cursor y + db 2 ; y displacement between items + db 2 ; number of items + db $0f ; cursor tile number + db $00 ; tile behind cursor + dw $0000 ; function pointer if non-0 + +Func_47ec: ; $47ec (1:47ec) + ld a, [wcc04] + ld hl, $47f5 + jp JumpToFunctionInTable + +PtrTable_47f5: ; $47f5 (1:47f5) + dw Func_47fd + dw Func_4802 + dw Func_480d + dw Func_4812 + +Func_47fd: ; $47fd (1:47fd) + call $5d1f + jr Func_481b + +Func_4802: ; $4802 (1:4802) + ld hl, wLoadedCard1Move1Description + 2 + ld a, [hli] + or [hl] + ret z + call $5d27 + jr Func_481b + +Func_480d: ; $480d (1:480d) + call $5d2f + jr Func_481b + +Func_4812: ; $4812 (1:4812) + ld hl, wLoadedCard1Move2Description + 2 + ld a, [hli] + or [hl] + ret z + call $5d37 + +Func_481b: ; $481b (1:481b) + ld hl, wcc04 + ld a, $01 + xor [hl] + ld [hl], a + ret + +; copies the following to the wDuelTempList buffer: +; if pokemon's second moveslot is empty: , 0 +; else: , 0, , 1 +LoadPokemonMovesToDuelTempList: ; 4823 (1:4823) + call DrawWideTextBox + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + ldh [hTempCardIndex_ff98], a + call LoadCardDataToBuffer1_FromDeckIndex + ld c, $00 + ld b, $0d + ld hl, wDuelTempList + xor a + ld [wCardPageNumber], a + ld de, wLoadedCard1Move1Name + call CheckIfMoveExists + jr c, .check_for_second_attack_slot + ldh a, [hTempCardIndex_ff98] + ld [hli], a + xor a + ld [hli], a + inc c + push hl + push bc + ld e, b + ld hl, wLoadedCard1Move1Name + call $5c33 + pop bc + pop hl + inc b + inc b + +.check_for_second_attack_slot + ld de, wLoadedCard1Move2Name + call CheckIfMoveExists + jr c, .finish_loading_attacks + ldh a, [hTempCardIndex_ff98] + ld [hli], a + ld a, $01 + ld [hli], a + inc c + push hl + push bc + ld e, b + ld hl, wLoadedCard1Move2Name + call $5c33 + pop bc + pop hl + +.finish_loading_attacks + ld a, c + ret + +; given de = wLoadedCard*Move*Name, return carry if the move is a +; Pkmn Power or the moveslot is empty. +CheckIfMoveExists: ; 4872 (1:4872) + push hl + push de + push bc + ld a, [de] + ld c, a + inc de + ld a, [de] + or c + jr z, .return_no_move_found + ld hl, CARD_DATA_MOVE1_CATEGORY - (CARD_DATA_MOVE1_NAME + 1) + add hl, de + ld a, [hl] + and $ff ^ RESIDUAL + cp POKEMON_POWER + jr z, .return_no_move_found + or a +.return + pop bc + pop de + pop hl + ret +.return_no_move_found + scf + jr .return + +; check if the arena pokemon card has enough energy attached to it +; in order to use the selected move. +; returns: carry if not enough energy, nc if enough energy. +CheckIfEnoughEnergies: ; 488f (1:488f) + push hl + push bc + ld e, $0 + call GetPlayAreaCardAttachedEnergies + call HandleEnergyBurn + ldh a, [hCurrentMenuItem] + add a + ld e, a + ld d, $0 + ld hl, wDuelTempList + add hl, de + ld d, [hl] ; card index within the deck (0 to 59) + inc hl + ld e, [hl] ; attack index (0 or 1) + call _CheckIfEnoughEnergies + pop bc + pop hl + ret +; 0x48ac + +; check if a pokemon card has enough energy attached to it in order to use a move +; input: +; d = card index within the deck (0 to 59) +; e = attack index (0 or 1) +; wAttachedEnergies and wTotalAttachedEnergies +; returns: carry if not enough energy, nc if enough energy. +_CheckIfEnoughEnergies: ; 48ac (1:48ac) + push de + ld a, d + call LoadCardDataToBuffer1_FromDeckIndex + pop bc + push bc + ld de, wLoadedCard1Move1Energy + ld a, c + or a + jr z, .got_move + ld de, wLoadedCard1Move2Energy + +.got_move + ld hl, CARD_DATA_MOVE1_NAME - CARD_DATA_MOVE1_ENERGY + add hl, de + ld a, [hli] + or [hl] + jr z, .not_usable_or_not_enough_energies + ld hl, CARD_DATA_MOVE1_CATEGORY - CARD_DATA_MOVE1_ENERGY + add hl, de + ld a, [hl] + cp POKEMON_POWER + jr z, .not_usable_or_not_enough_energies + xor a + ld [wAttachedEnergiesAccum], a + ld hl, wAttachedEnergies + ld c, (NUM_COLORED_TYPES) / 2 + +.next_energy_type_pair + ld a, [de] + swap a + call CheckIfEnoughEnergiesOfType + jr c, .not_usable_or_not_enough_energies + ld a, [de] + call CheckIfEnoughEnergiesOfType + jr c, .not_usable_or_not_enough_energies + inc de + dec c + jr nz, .next_energy_type_pair + ld a, [de] ; colorless energy + swap a + and $f + ld b, a + ld a, [wAttachedEnergiesAccum] + ld c, a + ld a, [wTotalAttachedEnergies] + sub c + cp b + jr c, .not_usable_or_not_enough_energies + or a +.done + pop de + ret + +.not_usable_or_not_enough_energies + scf + jr .done +; 0x4900 + +; given the amount of energies of a specific type required for an attack in the +; lower nybble of register a, test if the pokemon card has enough energies of that type +; to use the move. Return carry if not enough energy, nc if enough energy. +CheckIfEnoughEnergiesOfType: ; 4900 (1:4900) + and $f + push af + push hl + ld hl, wAttachedEnergiesAccum + add [hl] + ld [hl], a ; accumulate the amount of energies required + pop hl + pop af + jr z, .enough_energies ; jump if no energies of this type are required + cp [hl] + ; jump if the energies required of this type are not more than the amount attached + jr z, .enough_energies + jr c, .enough_energies + inc hl + scf + ret + +.enough_energies + inc hl + or a + ret +; 0x4918 + +; return carry and the corresponding text in hl if the turn holder's +; arena Pokemon card is paralyzed or asleep. +CheckIfActiveCardParalyzedOrAsleep: ; 4918 (1:4918) + ld a, DUELVARS_ARENA_CARD_STATUS + call GetTurnDuelistVariable + and CNF_SLP_PRZ + cp PARALYZED + jr z, .paralyzed + cp ASLEEP + jr z, .asleep + or a + ret +.paralyzed + ldtx hl, UnableDueToParalysisText + jr .return_with_status_condition +.asleep + ldtx hl, UnableDueToSleepText +.return_with_status_condition + scf + ret + +; this handles drawing a card at the beginning of the turn among other things +Func_4933: ; 4933 (1:4933) + ld a, $01 + push hl + push de + push bc + ld [wcbe8], a + xor a + ld [wcbe9], a + ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK + call GetTurnDuelistVariable + ld a, DECK_SIZE + sub [hl] + ld hl, wcbe8 + cp [hl] + jr nc, .has_cards_left + ld [hl], a +.has_cards_left + ld a, [wcac2] + cp $07 + jr z, .asm_495f + cp $09 + jr z, .asm_495f + call EmptyScreen + call Func_4a97 +.asm_495f + ld a, $07 + ld [wcac2], a + call Func_49ca + ld a, [wcbe8] + or a + jr nz, .can_draw + ldtx hl, NoCardsInDeckCannotDraw + call DrawWideTextBox_WaitForInput + jr .done +.can_draw + ld l, a + ld h, 0 + call LoadTxRam3 + ldtx hl, DrawCardsFromTheDeck + call DrawWideTextBox_PrintText + call EnableLCD +.asm_4984 + call Func_49a8 + ld hl, wcbe9 + inc [hl] + call Func_49ed + ld a, [wcbe9] + ld hl, wcbe8 + cp [hl] + jr c, .asm_4984 + ld c, 30 +.asm_4999 + call DoFrame + call Func_67b2 + jr c, .done + dec c + jr nz, .asm_4999 +.done + pop bc + pop de + pop hl + ret +; 0x49a8 + +Func_49a8: ; 49a8 (1:49a8) + call Func_3b21 + ld e, $56 + ldh a, [hWhoseTurn] + cp PLAYER_TURN + jr z, .asm_49b5 + ld e, $57 +.asm_49b5 + ld a, e + call Func_3b6a +.asm_49b9 + call DoFrame + call Func_67b2 + jr c, .asm_49c6 + call Func_3b52 + jr c, .asm_49b9 +.asm_49c6 + call Func_3b31 + ret +; 0x49ca + +Func_49ca: ; 49ca (1:49ca) + call LoadDuelDrawCardsScreenTiles + ld hl, $4a35 + call WriteDataBlocksToBGMap0 + ld a, [wConsole] + cp CONSOLE_CGB + jr nz, .not_cgb + call BankswitchVRAM1 + ld hl, $4a6e + call WriteDataBlocksToBGMap0 + call BankswitchVRAM0 +.not_cgb + call Func_49ed.player_turn + call Func_49ed.opponent_turn + ret +; 0x49ed + +Func_49ed: ; 49ed (1:49ed) + ldh a, [hWhoseTurn] + cp PLAYER_TURN + jr nz, .opponent_turn +.player_turn + ld a, [wPlayerNumberOfCardsInHand] + ld hl, wcbe9 + add [hl] + ld d, a + ld a, DECK_SIZE + ld hl, wPlayerNumberOfCardsNotInDeck + sub [hl] + ld hl, wcbe9 + sub [hl] + ld e, a + ld a, d + lb bc, 16, 10 + call $65b7 + ld a, e + lb bc, 10, 10 + jp $65b7 +.opponent_turn + ld a, [wOpponentNumberOfCardsInHand] + ld hl, wcbe9 + add [hl] + ld d, a + ld a, DECK_SIZE + ld hl, wOpponentNumberOfCardsNotInDeck + sub [hl] + ld hl, wcbe9 + sub [hl] + ld e, a + ld a, d + lb bc, 5, 3 + call $65b7 + ld a, e + lb bc, 11, 3 + jp $65b7 +; 0x4a35 + + INCROM $4a35, $4a97 + +Func_4a97: ; 4a97 (1:4a97) + call LoadDuelHUDTiles + ld de, wDefaultText + push de + call CopyPlayerName + lb de, 0, 11 + call Func_22ae + pop hl + call Func_21c5 + ld bc, $5 + call Func_3e10 + ld de, wDefaultText + push de + call CopyOpponentName + pop hl + call Func_23c1 + push hl + add SCREEN_WIDTH + ld d, a + ld e, 0 + call Func_22ae + pop hl + call Func_21c5 + ld a, [wOpponentPortrait] + ld bc, $d01 + call Func_3e2a + call DrawDuelHorizontalSeparator + ret +; 0x4ad6 + +Func_4ad6: ; 4ad6 (1:4ad6) + lb de, 8, 8 + call Func_4ae9 + call SwapTurn + lb de, 1, 1 + call Func_4ae9 + call SwapTurn + ret +; 0x4ae9 + +Func_4ae9: ; 4ae9 (1:4ae9) + call $5f4a + ld hl, $7b + call Func_2c1b + call $5f50 + ld c, e + ld a, d + add $07 + ld b, a + inc a + inc a + ld d, a + call CountPrizes + call .asm_4b22 + inc e + inc c + ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA + call GetTurnDuelistVariable + ld hl, $7d + or a + jr nz, .pkmn_in_play_area + ld hl, $7c +.pkmn_in_play_area + dec d + call Func_2c1b + inc e + inc d + inc c + ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK + call GetTurnDuelistVariable + ld a, DECK_SIZE + sub [hl] +.asm_4b22 + call $65b7 + ld hl, $7e + call Func_2c1b + ret +; 0x4b2c + +; display the animation of the player drawing the card at hTempCardIndex_ff98 +DisplayPlayerDrawCardScreen: ; 4b2c (1:4b2c) + ldtx hl, YouDrewText + ldh a, [hTempCardIndex_ff98] + call LoadCardDataToBuffer1_FromDeckIndex + call _DisplayPlayerDrawCardScreen + ret +; 0x4b38 + +Func_4b38: ; 4b38 (1:4b38) + ld a, [wDuelTempList] + cp $ff + ret z + call DrawCardListScreenLayout + call CountCardsInDuelTempList ; list length + ld hl, CardListParameters ; other list params + lb de, 0, 0 ; initial page scroll offset, initial item (in the visible page) + call PrintCardListItems + ldtx hl, TheCardYouReceivedText + lb de, 1, 1 + call Func_22ae + call PrintTextNoDelay + ldtx hl, YouReceivedTheseCardsText + call DrawWideTextBox_WaitForInput + ret +; 0x4b60 + +Func_4b60: ; 4b60 (1:4b60) + call $7107 + call SwapTurn + call $7107 + call SwapTurn + call $4e84 + call $4d97 + ldh [hTemp_ffa0], a + call SwapTurn + call $4d97 + call SwapTurn + ld c, a + ldh a, [hTemp_ffa0] + ld b, a + and c + jr nz, .asm_4bd0 + ld a, b + or c + jr z, .asm_4bb2 + ld a, b + or a + jr nz, .asm_4b9c +.asm_4b8c + call $4df3 + call $7107 + call $4e6e + call $4d97 + jr c, .asm_4b8c + jr .asm_4bd0 + +.asm_4b9c + call SwapTurn +.asm_4b9f + call $4df3 + call $7107 + call $4e6e + call $4d97 + jr c, .asm_4b9f + call SwapTurn + jr .asm_4bd0 + +.asm_4bb2 + ldtx hl, NeitherPlayerHasBasicPkmnText + call DrawWideTextBox_WaitForInput + call $4e06 + call $7107 + call SwapTurn + call $4e06 + call $7107 + call SwapTurn + call $4dfc + jp Func_4b60 + +.asm_4bd0 + ldh a, [hWhoseTurn] + push af + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + call Func_4cd5 + call SwapTurn + call Func_4cd5 + call SwapTurn + jp c, $4c77 + call Func_311d + ldtx hl, PlacingThePrizesText + call DrawWideTextBox_WaitForInput + call Func_0f58 + ld a, [wDuelInitialPrizes] + ld l, a + ld h, 0 + call LoadTxRam3 + ldtx hl, PleasePlacePrizesText + call DrawWideTextBox_PrintText + call EnableLCD + call $4c7c + call WaitForWideTextBoxInput + pop af + ldh [hWhoseTurn], a + call $7133 + call SwapTurn + call $7133 + call SwapTurn + call EmptyScreen + ld a, BOXMSG_COIN_TOSS + call DrawDuelBoxMessage + ldtx hl, CoinTossToDetermineWhoFirstText + call DrawWideTextBox_WaitForInput + ldh a, [hWhoseTurn] + cp PLAYER_TURN + jr nz, .asm_4c52 + ld de, wDefaultText + call CopyPlayerName + ld hl, $0000 + call LoadTxRam2 + ldtx hl, YouPlayFirstText + ldtx de, IfHeadPlayerPlaysFirstText + call TossCoin + jr c, .asm_4c4a + call SwapTurn + ldtx hl, YouPlaySecondText + +.asm_4c4a + call DrawWideTextBox_WaitForInput + call Func_0f58 + or a + ret + +.asm_4c52 + ld de, wDefaultText + call CopyOpponentName + ld hl, $0000 + call LoadTxRam2 + ldtx hl, YouPlaySecondText + ldtx de, IfHeadPlayerPlaysFirstText + call TossCoin + jr c, .asm_4c6f + call SwapTurn + ldtx hl, YouPlayFirstText + +.asm_4c6f + call DrawWideTextBox_WaitForInput + call Func_0f58 + or a + ret +; 0x4c77 + + INCROM $4c77, $4cd5 + +; Select Basic Pokemon From Hand +Func_4cd5: ; 4cd5 (1:4cd5) + ld a, DUELVARS_DUELIST_TYPE + call GetTurnDuelistVariable + cp DUELIST_TYPE_PLAYER + jr z, .asm_4d15 + cp DUELIST_TYPE_LINK_OPP + jr z, .asm_4cec + push af + push hl + call Func_2bc3 + pop hl + pop af + ld [hl], a + or a + ret + +.asm_4cec + ldtx hl, TransmitingDataText + call DrawWideTextBox_PrintText + call Func_0f58 + ld hl, wPlayerCardLocations + ld de, wOpponentCardLocations + ld c, $80 + call Func_0e63 + jr c, .asm_4d12 + ld c, $80 + call Func_0e63 + jr c, .asm_4d12 + ld a, DUELVARS_DUELIST_TYPE + call GetTurnDuelistVariable + ld [hl], DUELIST_TYPE_LINK_OPP + or a + ret + +.asm_4d12 + jp DuelTransmissionError + +.asm_4d15 + call EmptyScreen + ld a, BOXMSG_ARENA_POKEMON + call DrawDuelBoxMessage + ldtx hl, ChooseBasicPkmnToPlaceInArenaText + call DrawWideTextBox_WaitForInput + ld a, $1 + call DoPracticeDuelAction +.asm_4d28 + xor a + ld hl, $006e + call $5502 + jr c, .asm_4d28 + ldh a, [hTempCardIndex_ff98] + call LoadCardDataToBuffer1_FromDeckIndex + ld a, $2 + call DoPracticeDuelAction + jr c, .asm_4d28 + ldh a, [hTempCardIndex_ff98] + call PutHandPokemonCardInPlayArea + ldh a, [hTempCardIndex_ff98] + ld hl, $0062 + call $4b31 + jr .asm_4d4c + +.asm_4d4c + call EmptyScreen + ld a, BOXMSG_BENCH_POKEMON + call DrawDuelBoxMessage + ldtx hl, ChooseUpTo5BasicPkmnToPlaceOnBenchText + call Func_2c73 + ld a, $3 + call DoPracticeDuelAction +.asm_4d5f + ld a, $1 + ld hl, $006f + call $5502 + jr c, .asm_4d8e + ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA + call GetTurnDuelistVariable + cp MAX_PLAY_AREA_POKEMON + jr nc, .asm_4d86 + ldh a, [hTempCardIndex_ff98] + call PutHandPokemonCardInPlayArea + ldh a, [hTempCardIndex_ff98] + ld hl, $0061 + call $4b31 + ld a, $5 + call DoPracticeDuelAction + jr .asm_4d5f + +.asm_4d86 + ldtx hl, NoSpaceOnTheBenchText + call DrawWideTextBox_WaitForInput + jr .asm_4d5f + +.asm_4d8e + ld a, $4 + call DoPracticeDuelAction + jr c, .asm_4d5f + or a + ret +; 0x4d97 + + INCROM $4d97, $4e40 + +Func_4e40: ; 4e40 (1:4e40) + call CreateHandCardList + call EmptyScreen + call LoadDuelCardSymbolTiles + lb de, 0, 0 + lb bc, 20, 13 + call DrawRegularTextBox + call CountCardsInDuelTempList ; list length + ld hl, CardListParameters ; other list params + lb de, 0, 0 ; initial page scroll offset, initial item (in the visible page) + call PrintCardListItems + ldtx hl, DuelistHandText + lb de, 1, 1 + call Func_22ae + call PrintTextNoDelay + call EnableLCD + ret +; 0x4e6e + + INCROM $4e6e, $4f9d + +; draw the main scene during a duel, except the contents of the bottom text box, +; which depend on the type of duelist holding the turn. +; includes the background, both arena Pokemon, and both HUDs. +DrawDuelMainScene: ; 4f9d (1:4f9d) + ld a, DUELVARS_DUELIST_TYPE + call GetTurnDuelistVariable + cp DUELIST_TYPE_PLAYER + jr z, .draw + ldh a, [hWhoseTurn] + push af + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + call .draw + pop af + ldh [hWhoseTurn], a + ret +.draw +; first, load the graphics and draw the background scene + ld a, [wcac2] + cp $01 + ret z + call ZeroObjectPositionsAndToggleOAMCopy + call EmptyScreen + call LoadDuelHUDTiles + ld a, $01 + ld [wcac2], a + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + ld de, v0Tiles1 + $50 tiles + call LoadPlayAreaCardGfx + call SetBGP7OrSGB2ToCardPalette + call SwapTurn + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + ld de, v0Tiles1 + $20 tiles + call LoadPlayAreaCardGfx + call SetBGP6OrSGB3ToCardPalette + call FlushAllPalettesOrSendPal23Packet + call SwapTurn +; next, draw the Pokemon in the arena +;.place_player_arena_pkmn + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + cp -1 + jr z, .place_opponent_arena_pkmn + ld a, $d0 ; v0Tiles1 + $50 tiles + lb hl, 6, 1 + lb de, 0, 5 + lb bc, 8, 6 + call FillRectangle + call ApplyBGP7OrSGB2ToCardImage +.place_opponent_arena_pkmn + call SwapTurn + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + cp -1 + jr z, .place_other_elements + ld a, $a0 ; v0Tiles1 + $20 tiles + lb hl, 6, 1 + lb de, 12, 1 + lb bc, 8, 6 + call FillRectangle + call ApplyBGP6OrSGB3ToCardImage +.place_other_elements + call SwapTurn + ld hl, DuelEAndHPTileData + call WriteDataBlocksToBGMap0 + call DrawDuelHorizontalSeparator + call DrawDuelHUDs + call DrawWideTextBox + call EnableLCD + ret +; 0x503a + +; draws the main elements of the main duel interface, including HUDs, HPs, card names +; and color symbols, attached cards, and other information, of both duelists. +DrawDuelHUDs: ; 503a (1:503a) + ld a, DUELVARS_DUELIST_TYPE + call GetTurnDuelistVariable + cp DUELIST_TYPE_PLAYER + jr z, .draw_hud + ldh a, [hWhoseTurn] + push af + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + call .draw_hud + pop af + ldh [hWhoseTurn], a + ret +.draw_hud + lb de, 1, 11 ; coordinates for player's arena card name and info icons + lb bc, 11, 8 ; coordinates for player's attached energies and HP bar + call DrawDuelHUD + lb bc, 8, 5 + ld a, DUELVARS_ARENA_CARD_STATUS + call GetTurnDuelistVariable + call CheckPrintCnfSlpPrz + inc c + call CheckPrintPoisoned + inc c + call CheckPrintDoublePoisoned + call SwapTurn + lb de, 7, 0 ; coordinates for opponent's arena card name and info icons + lb bc, 3, 1 ; coordinates for opponent's attached energies and HP bar + call GetNonTurnDuelistVariable + call DrawDuelHUD + lb bc, 11, 6 + ld a, DUELVARS_ARENA_CARD_STATUS + call GetTurnDuelistVariable + call CheckPrintCnfSlpPrz + dec c + call CheckPrintPoisoned + dec c + call CheckPrintDoublePoisoned + call SwapTurn + ret +; 0x5093 + +DrawDuelHUD: ; 5093 (1:5093) + ld hl, wcbc9 + ld [hl], b + inc hl + ld [hl], c ; save coordinates for the HP bar + push de ; save coordinates for the arena card name + ld d, 1 ; opponent's info icons start in the second tile to the right + ld a, e + or a + jr z, .go + ld d, 15 ; player's info icons start in the 15th tile to the right +.go + push de + pop bc + + ; print the Pkmn icon along with the no. of play area Pokemon + ld a, LOW("") + call WriteByteToBGMap0 + inc b + ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA + call GetTurnDuelistVariable + add LOW("<0>") - 1 + call WriteByteToBGMap0 + inc b + + ; print the Prize icon along with the no. of prizes yet to draw + ld a, LOW("") + call WriteByteToBGMap0 + inc b + call CountPrizes + add LOW("<0>") + call WriteByteToBGMap0 + + ; print the arena Pokemon card name and level text + pop de + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + cp -1 + ret z + call LoadCardDataToBuffer1_FromDeckIndex + push de + ld a, 32 + call CopyCardNameAndLevel + ld [hl], TX_END + + ; print the arena Pokemon card color symbol just before the name + pop de + ld a, e + or a + jr nz, .print_color_icon + ld hl, wDefaultText + call Func_23c1 + add SCREEN_WIDTH + ld d, a +.print_color_icon + call Func_22ae + ld hl, wDefaultText + call Func_21c5 + push de + pop bc + call GetArenaCardColor + inc a ; TX_SYMBOL color tiles start at 1 + dec b ; place the color symbol one tile to the left of the start of the card's name + call JPWriteByteToBGMap0 + + ; print attached energies + ld hl, wcbc9 + ld b, [hl] + inc hl + ld c, [hl] + lb de, 9, PLAY_AREA_ARENA + call PrintPlayAreaCardAttachedEnergies + + ; print HP bar + ld a, DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + call LoadCardDataToBuffer1_FromDeckIndex + ld a, [wLoadedCard1HP] + ld d, a ; max HP + ld a, DUELVARS_ARENA_CARD_HP + call GetTurnDuelistVariable + ld e, a ; cur HP + call DrawHPBar + ld hl, wcbc9 + ld b, [hl] + inc hl + ld c, [hl] + inc c + call BCCoordToBGMap0Address + push de + ld hl, wDefaultText + ld b, HP_BAR_LENGTH / 2 ; first row of the HP bar + call SafeCopyDataHLtoDE + pop de + ld hl, BG_MAP_WIDTH + add hl, de + ld e, l + ld d, h + ld hl, wDefaultText + HP_BAR_LENGTH / 2 + ld b, HP_BAR_LENGTH / 2 ; second row of the HP bar + call SafeCopyDataHLtoDE + + ; print number of attached Pluspower and Defender with respective icon, if any + ld hl, wcbc9 + ld a, [hli] + add 6 + ld b, a + ld c, [hl] + inc c + ld a, DUELVARS_ARENA_CARD_ATTACHED_PLUSPOWER + call GetTurnDuelistVariable + or a + jr z, .check_defender + ld a, LOW("") + call WriteByteToBGMap0 + inc b + ld a, [hl] ; number of attached Pluspower + add LOW("<0>") + call WriteByteToBGMap0 + dec b +.check_defender + ld a, DUELVARS_ARENA_CARD_ATTACHED_DEFENDER + call GetTurnDuelistVariable + or a + jr z, .done + inc c + ld a, LOW("") + call WriteByteToBGMap0 + inc b + ld a, [hl] ; number of attached Defender + add LOW("<0>") + call WriteByteToBGMap0 +.done + ret +; 0x516f + +; draws an horizonal line that separates the arena side of each duelist +; also colorizes the line on CGB +DrawDuelHorizontalSeparator: ; 516f (1:516f) + ld hl, DuelHorizontalSeparatorTileData + call WriteDataBlocksToBGMap0 + ld a, [wConsole] + cp CONSOLE_CGB + ret nz + call BankswitchVRAM1 + ld hl, DuelHorizontalSeparatorCGBPalData + call WriteDataBlocksToBGMap0 + call BankswitchVRAM0 + ret +; 0x5188 + +DuelEAndHPTileData: ; 5188 (1:5188) +; x, y, tiles[], 0 + db 1, 1, LOW(""), 0 + db 1, 2, LOW(""), 0 + db 9, 8, LOW(""), 0 + db 9, 9, LOW(""), 0 + db $ff +; 0x5199 + +DuelHorizontalSeparatorTileData: ; 5199 (1:5199) +; x, y, tiles[], 0 + db 0, 4, $37, $37, $37, $37, $37, $37, $37, $37, $37, $31, $32, 0 + db 9, 5, $33, $34, 0 + db 9, 6, $33, $34, 0 + db 9, 7, $35, $36, $37, $37, $37, $37, $37, $37, $37, $37, $37, 0 + db $ff +; 0x51c0 + +DuelHorizontalSeparatorCGBPalData: ; 51c0 (1:51c0) +; x, y, tiles[], 0 + db 0, 4, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, 0 + db 9, 5, $02, $02, 0 + db 9, 6, $02, $02, 0 + db 9, 7, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, 0 + db $ff +; 0x51e7 + +; if this is a practice duel, execute the practice duel action at wPracticeDuelAction +DoPracticeDuelAction: ; 51e7 (1:51e7) + ld [wPracticeDuelAction], a + ld a, [wIsPracticeDuel] + or a + ret z + ld a, [wPracticeDuelAction] + ld hl, PracticeDuelActionTable + jp JumpToFunctionInTable +; 0x51f8 + +PracticeDuelActionTable:: ; 51f8 (1:51f8) + dw $0000 + dw Func_520e + dw Func_521a + dw Func_522a + dw Func_5236 + dw Func_5245 + dw Func_5256 + dw Func_5278 + dw Func_5284 + dw Func_529b + dw Func_52b0 +; 0x520e + +Func_520e: ; 520e (1:520e) + call Func_4e40 + call EnableLCD + ldtx hl, Text01a4 + jp Func_52bc +; 0x521a + +Func_521a: ; 521a (1:521a) + ld a, [wLoadedCard1ID] + cp GOLDEEN + ret z + ldtx hl, Text01a5 + ldtx de, DrMasonText + scf + jp Func_52bc +; 0x522a + +Func_522a: ; 522a (1:522a) + call Func_4e40 + call EnableLCD + ldtx hl, Text01a6 + jp Func_52bc +; 0x5236 + +Func_5236: ; 5236 (1:5236) + ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA + call GetTurnDuelistVariable + cp 2 + ret z + ldtx hl, Text01a7 + scf + jp Func_52bc +; 0x5245 + +Func_5245: ; 5245 (1:5245) + call Func_4e40 + call EnableLCD + ld a, $ff + ld [wcc00], a + ldtx hl, Text01a8 + jp Func_52bc +; 0x5256 + +Func_5256: ; 5256 (1:5256) + call $5351 + call EnableLCD + ld a, [wDuelTurns] + ld hl, wcc00 + cp [hl] + ld [hl], a + ld a, $00 + jp nz, $5382 + ldtx de, DrMasonText + ldtx hl, Text01d9 + call Func_2c62.asm_2c67 + call YesOrNoMenu + jp $5382 +; 0x5278 + +Func_5278: ; 5278 (1:5278) + ld a, [wDuelTurns] + srl a + ld hl, $541f + call JumpToFunctionInTable + ret nc +; fallthrough + +Func_5284: ; 5284 (1:5284) + ldtx hl, Text01da + call Func_52bc + ld a, $02 + call BankswitchSRAM + ld de, $bc00 + call $66ff + xor a + call BankswitchSRAM + scf + ret +; 0x529b + +Func_529b: ; 529b (1:529b) + ld a, [wDuelTurns] + cp 7 + jr z, .asm_52a4 + or a + ret +.asm_52a4 + call $5351 + call EnableLCD + ld hl, $5346 + jp $5396 +; 0x52b0 + +Func_52b0: ; 52b0 (1:52b0) + ldh a, [hTempPlayAreaLocationOffset_ff9d] + cp PLAY_AREA_BENCH_1 + ret z + call $5fd9 + ldtx hl, Text01d7 + scf +; fallthrough + +Func_52bc: ; 52bc (1:52bc) + push af + ldtx de, DrMasonText + call Func_2c62 + pop af + ret +; 0x52c5 + + INCROM $52c5, $5550 + +; draw the turn holder's discard pile screen +OpenDiscardPileScreen: ; 5550 (1:5550) + call CreateDiscardPileCardList + jr c, .discard_pile_empty + call DrawCardListScreenLayout + call SetDiscardPileScreenTexts + ld a, START + A_BUTTON + ld [wcbd6], a + call Func_55f0 + or a + ret +.discard_pile_empty + ldtx hl, TheDiscardPileHasNoCardsText + call DrawWideTextBox_WaitForInput + scf + ret +; 0x556d + +; set wCardListHeaderText and SetCardListInfoBoxText to the text +; that correspond to the Discard Pile screen +SetDiscardPileScreenTexts: ; 556d (1:556d) + ldtx de, YourDiscardPileText + ldh a, [hWhoseTurn] + cp PLAYER_TURN + jr z, .got_header_text + ldtx de, OpponentsDiscardPileText +.got_header_text + ldtx hl, ChooseTheCardYouWishToExamineText + call SetCardListHeaderText + ret +; 0x5580 + +SetCardListHeaderText: ; 5580 (1:5580) + ld a, e + ld [wCardListHeaderText], a + ld a, d + ld [wCardListHeaderText + 1], a +; fallthrough + +SetCardListInfoBoxText: ; 5588 (1:5588) + ld a, l + ld [wCardListInfoBoxText], a + ld a, h + ld [wCardListInfoBoxText + 1], a + ret +; 0x5591 + +Func_5591: ; 5591 (1:5591) + call DrawCardListScreenLayout + ld a, $02 + ld [wcbde], a + ret +; 0x559a + +; draw the layout of the screen that displays the player's Hand card list or a +; Discard Pile card list, including a bottom-right image of the current card. +; since this loads the text for the Hand card list screen, SetDiscardPileScreenTexts +; is called after this if the screen corresponds to a Discard Pile list. +DrawCardListScreenLayout: ; 559a (1:559a) + xor a + ld hl, wSelectedDuelSubMenuItem + ld [hli], a + ld [hl], a + ld [wcbdf], a + ld hl, wcbd8 + ld [hli], a + ld [hl], a + ld [wcbde], a + ld a, START + ld [wcbd6], a + ld hl, wCardListInfoBoxText + ld [hl], LOW(PleaseSelectHandText_) + inc hl + ld [hl], HIGH(PleaseSelectHandText_) + inc hl ; wCardListHeaderText + ld [hl], LOW(DuelistHandText_) + inc hl + ld [hl], HIGH(DuelistHandText_) +.draw + call ZeroObjectPositionsAndToggleOAMCopy + call EmptyScreen + call LoadDuelHUDTiles + call LoadDuelCardSymbolTiles + ; draw the surrounding box + lb de, 0, 0 + lb bc, 20, 13 + call DrawRegularTextBox + ; draw the image of the selected card + ld a, $a0 + lb hl, 6, 1 + lb de, 12, 12 + lb bc, 8, 6 + call FillRectangle + call ApplyBGP6OrSGB3ToCardImage + call Func_5744 + ld a, [wDuelTempList] + cp $ff + scf + ret z + or a + ret +; 0x55f0 + +Func_55f0: ; 55f0 (1:55f0) + call DrawNarrowTextBox + call Func_56a0 +.asm_55f6 + call CountCardsInDuelTempList ; list length + ld hl, wSelectedDuelSubMenuItem + ld e, [hl] ; initial item (in the visible page) + inc hl + ld d, [hl] ; initial page scroll offset + ld hl, CardListParameters ; other list params + call PrintCardListItems + call DrawSelectedCard + call EnableLCD +.asm_560b + call DoFrame + call Func_5690 + call HandleCardListInput + jr nc, .asm_560b + ld hl, wSelectedDuelSubMenuItem + ld [hl], e + inc hl + ld [hl], d + ldh a, [hButtonsPressed] + ld b, a + bit SELECT_F, b + jr nz, .asm_563b + bit B_BUTTON_F, b + jr nz, .asm_568c + ld a, [wcbd6] + and b + jr nz, .asm_5654 + ldh a, [hCurrentMenuItem] + call GetCardInDuelTempList_OnlyDeckIndex + call $56c2 + jr c, Func_55f0 + ldh a, [hTempCardIndex_ff98] + or a + ret +.asm_563b + ld a, [wcbdf] + or a + jr nz, .asm_560b + call SortCardsInDuelTempListByID + xor a + ld hl, wSelectedDuelSubMenuItem + ld [hli], a + ld [hl], a + ld a, $01 + ld [wcbdf], a + call EraseCursor + jr .asm_55f6 +.asm_5654 + ldh a, [hCurrentMenuItem] + call GetCardInDuelTempList + call LoadCardDataToBuffer1_FromDeckIndex + call $5762 + ldh a, [hButtonsPressed2] + bit D_UP_F, a + jr nz, .asm_566f + bit D_DOWN_F, a + jr nz, .asm_5677 + call DrawCardListScreenLayout.draw + jp Func_55f0 +.asm_566f + ldh a, [hCurrentMenuItem] + or a + jr z, .asm_5654 + dec a + jr .asm_5681 +.asm_5677 + call CountCardsInDuelTempList + ld b, a + ldh a, [hCurrentMenuItem] + inc a + cp b + jr nc, .asm_5654 +.asm_5681 + ldh [hCurrentMenuItem], a + ld hl, wSelectedDuelSubMenuItem + ld [hl], $00 + inc hl + ld [hl], a + jr .asm_5654 +.asm_568c + ldh a, [hCurrentMenuItem] + scf + ret +; 0x5690 + +Func_5690: ; 5690 (1:5690) + ldh a, [hButtonsPressed2] + and D_PAD + ret z + ld a, $01 + ldh [hffb0], a + call Func_56a0 + xor a + ldh [hffb0], a + ret +; 0x56a0 + +Func_56a0: ; 56a0 (1:56a0) + lb de, 1, 14 + call AdjustCoordinatesForWindow + call Func_22ae + ld hl, wCardListInfoBoxText + ld a, [hli] + ld h, [hl] + ld l, a + call PrintTextNoDelay + ld hl, wCardListHeaderText + ld a, [hli] + ld h, [hl] + ld l, a + lb de, 1, 1 + call Func_22ae + call PrintTextNoDelay + ret +; 0x56c2 + + INCROM $56c2, $5710 + +CardListParameters: ; 5710 (1;5710) + db 1, 3 ; cursor x, cursor y + db 4 ; item x + db $0e + db 5 ; number of items selectable without scrolling + db $0f ; cursor tile number + db $00 ; tile behind cursor + dw $5719 ; function pointer if non-0 +; 0x5719 + + INCROM $5719, $5744 + +Func_5744: ; 5744 (1:5744) + ld hl, wcbd8 + jp CallIndirect +; 0x574a + + INCROM $574a, $576a + +Func_576a: ; 576a (1:576a) + ld a, B_BUTTON + ld [wcbd7], a + ld a, $01 + jr Func_5779 + +Func_5773: ; 5773 (1:5773) + ld a, B_BUTTON + ld [wcbd7], a + xor a +; fallthrough + +Func_5779: ; 5779 (1:5779) + ld [wcbd1], a + call ZeroObjectPositionsAndToggleOAMCopy + call EmptyScreen + call Func_3b31 + call LoadDuelCardSymbolTiles + ld de, v0Tiles1 + $20 tiles + call LoadLoaded1CardGfx + call SetOBP1OrSGB3ToCardPalette + call SetBGP6OrSGB3ToCardPalette + call FlushAllPalettesOrSendPal23Packet + lb de, $38, $30 ; X Position and Y Position of top-left corner + call PlaceCardImageOAM + lb de, 6, 4 + call ApplyBGP6OrSGB3ToCardImage + xor a + ld [wCardPageNumber], a +.asm_57a7 + call Func_5898 + jr c, .asm_57cc + call EnableLCD +.asm_57af + call DoFrame + ldh a, [hButtonsPressed2] + ld b, a + ld a, [wcbd7] + and b + jr nz, .asm_57cc + ldh a, [hButtonsPressed] + and START + A_BUTTON + jr nz, .asm_57a7 + ldh a, [hButtonsPressed] + and D_RIGHT + D_LEFT + jr z, .asm_57af + call Func_57cd + jr .asm_57af +.asm_57cc + ret +; 0x57cd + +Func_57cd: ; 57cd (1:57cd) + bit D_LEFT_F, a + jr nz, .left +;.right + call Func_5898 + call c, Func_589c + ret +.left + call Func_5892 + call c, Func_589c + ret +; 0x57df + + INCROM $57df, $5892 + +Func_5892: ; 5892 (1:5892) + call Func_5911 + jr nc, Func_589c + ret + +Func_5898: ; 5898 (1:5898) + call Func_58e2 + ret c +; fallthrough + +Func_589c: ; 589c (1:589c) + ld a, [wCardPageNumber] + ld hl, CardPagePointerTable + call JumpToFunctionInTable + call EnableLCD + or a + ret +; 0x58aa + +; load the tiles and palette of the card selected in card list screen +DrawSelectedCard: ; 58aa (1:58aa) + ldh a, [hCurrentMenuItem] + call GetCardInDuelTempList + call LoadCardDataToBuffer1_FromCardID + ld de, v0Tiles1 + $20 tiles + call LoadLoaded1CardGfx + ld de, $c0c ; useless + call SetBGP6OrSGB3ToCardPalette + call FlushAllPalettesOrSendPal23Packet + ret +; 0x58c2 + +CardPagePointerTable: ; 58c2 (1:58c2) + dw DrawDuelMainScene + dw $5b7d ; CARDPAGE_POKEMON_OVERVIEW + dw $5d1f ; CARDPAGE_POKEMON_MOVE1_1 + dw $5d27 ; CARDPAGE_POKEMON_MOVE1_2 + dw $5d2f ; CARDPAGE_POKEMON_MOVE2_1 + dw $5d37 ; CARDPAGE_POKEMON_MOVE2_2 + dw $5d54 ; CARDPAGE_POKEMON_DESCRIPTION + dw DrawDuelMainScene + dw DrawDuelMainScene + dw $5e28 ; CARDPAGE_ENERGY + dw $5e28 ; CARDPAGE_ENERGY + 1 + dw DrawDuelMainScene + dw DrawDuelMainScene + dw $5e1c ; CARDPAGE_TRAINER_1 + dw $5e22 ; CARDPAGE_TRAINER_2 + dw DrawDuelMainScene +; 0x58e2 + +Func_58e2: ; 58e2 (1:58e2) + ld a, [wCardPageNumber] + or a + jr nz, .asm_58ff + ld a, [wLoadedCard1Type] + ld b, a + ld a, CARDPAGE_ENERGY + bit TYPE_ENERGY_F, b + jr nz, .set_card_page_nc + ld a, CARDPAGE_TRAINER_1 + bit TYPE_TRAINER_F, b + jr nz, .set_card_page_nc + ld a, CARDPAGE_POKEMON_OVERVIEW +.set_card_page_nc + ld [wCardPageNumber], a + or a + ret +.asm_58ff + ld hl, wCardPageNumber + inc [hl] + ld a, [hl] + call Func_5930 + jr c, .set_card_page_c + or a + ret nz + jr .asm_58ff +.set_card_page_c + ld [wCardPageNumber], a + ret +; 0x5911 + +Func_5911: ; 5911 (1:5911) + ld hl, wCardPageNumber + dec [hl] + ld a, [hl] + call Func_5930 + jr c, .asm_591f + or a + ret nz + jr Func_5911 +.asm_591f + ld [wCardPageNumber], a +.asm_5922 + call Func_5930 + or a + jr nz, .asm_592e + ld hl, wCardPageNumber + dec [hl] + jr .asm_5922 +.asm_592e + scf + ret +; 0x5930 + +Func_5930: ; 5930 (1:5930) + ld hl, CardPagePointerTable2 + jp JumpToFunctionInTable +; 0x5936 + +CardPagePointerTable2: ; 5936 (1:5936) + dw $5956 + dw $595a ; CARDPAGE_POKEMON_OVERVIEW + dw $595e ; CARDPAGE_POKEMON_MOVE1_1 + dw $5963 ; CARDPAGE_POKEMON_MOVE1_2 + dw $5968 ; CARDPAGE_POKEMON_MOVE2_1 + dw $596d ; CARDPAGE_POKEMON_MOVE2_2 + dw $595a ; CARDPAGE_POKEMON_DESCRIPTION + dw $5973 + dw $5977 + dw $597b ; CARDPAGE_ENERGY + dw $597f ; CARDPAGE_ENERGY + 1 + dw $5984 + dw $5988 + dw $597b ; CARDPAGE_TRAINER_1 + dw $597f ; CARDPAGE_TRAINER_2 + dw $598c +; 0x5956 + + INCROM $5956, $5990 + +ZeroObjectPositionsAndToggleOAMCopy: ; 5990 (1:5990) + call ZeroObjectPositions + ld a, $01 + ld [wVBlankOAMCopyToggle], a + ret +; 0x5999 + +; place OAM for a 8x6 image, using object size 8x16 and obj palette 1. +; d, e: X Position and Y Position of the top-left corner. +; starting tile number is $a0 (v0Tiles1 + $20 tiles). +; used to draw the image of a card in the check card screens. +PlaceCardImageOAM: ; 5999 (1:5999) + call Set_OBJ_8x16 + ld l, $a0 + ld c, 8 ; number of rows +.next_column + ld b, 3 ; number of columns + push de +.next_row + push bc + ld c, l ; tile number + ld b, 1 ; attributes (palette) + call SetOneObjectAttributes + pop bc + inc l + inc l ; next 8x16 tile + ld a, 16 + add e ; Y Position += 16 (next 8x16 row) + ld e, a + dec b + jr nz, .next_row + pop de + ld a, 8 + add d ; X Position += 8 (next 8x16 column) + ld d, a + dec c + jr nz, .next_column + ld a, $01 + ld [wVBlankOAMCopyToggle], a + ret +; 0x59c2 + +; given the deck index of a card in the play area (i.e. -1 indicates empty) +; load the graphics (tiles and palette) of the card to de +LoadPlayAreaCardGfx: ; 59c2 (1:59c2) + cp -1 + ret z + push de + call LoadCardDataToBuffer1_FromDeckIndex + pop de +; fallthrough + +; load the graphics (tiles and palette) of the card loaded in wLoadedCard1 to de +LoadLoaded1CardGfx: ; 59ca (1:59ca) + ld hl, wLoadedCard1Gfx + ld a, [hli] + ld h, [hl] + ld l, a + lb bc, $30, TILE_SIZE + call LoadCardGfx + ret +; 0x59d7 + +SetBGP7OrSGB2ToCardPalette: ; 59d7 (1:59d7) + ld a, [wConsole] + or a ; CONSOLE_DMG + ret z + cp CONSOLE_SGB + jr z, .sgb + ld a, $07 ; CGB BG Palette 7 + call CopyCGBCardPalette + ret +.sgb + ld hl, wCardPalette + ld de, wTempSGBPacket + 1 ; PAL Packet color #0 (PAL23's SGB2) + ld b, CGB_PAL_SIZE +.copy_pal_loop + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .copy_pal_loop + ret +; 0x59f5 + +SetBGP6OrSGB3ToCardPalette: ; 59f5 (1:59f5) + ld a, [wConsole] + or a ; CONSOLE_DMG + ret z + cp CONSOLE_SGB + jr z, SetSGB3ToCardPalette + ld a, $06 ; CGB BG Palette 6 + call CopyCGBCardPalette + ret + +SetSGB3ToCardPalette: ; 5a04 (1:5a04) + ld hl, wCardPalette + 2 + ld de, wTempSGBPacket + 9 ; Pal Packet color #4 (PAL23's SGB3) + ld b, 6 + jr SetBGP7OrSGB2ToCardPalette.copy_pal_loop +; 0x5a0e + +SetOBP1OrSGB3ToCardPalette: ; 5a0e (1:5a0e) + ld a, $e4 + ld [wOBP0], a + ld a, [wConsole] + or a ; CONSOLE_DMG + ret z + cp CONSOLE_SGB + jr z, SetSGB3ToCardPalette + ld a, $09 ; CGB Object Palette 1 +; fallthrough + +CopyCGBCardPalette: ; 5a1e (1:5a1e) + add a + add a + add a ; a *= CGB_PAL_SIZE + ld e, a + ld d, $00 + ld hl, wBackgroundPalettesCGB ; wObjectPalettesCGB - 8 palettes + add hl, de + ld de, wCardPalette + ld b, CGB_PAL_SIZE +.copy_pal_loop + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .copy_pal_loop + ret +; 0x5a34 + +FlushAllPalettesOrSendPal23Packet: ; 5a34 (1:5a34) + ld a, [wConsole] + or a ; CONSOLE_DMG + ret z + cp CONSOLE_SGB + jr z, .sgb + call SetFlushAllPalettes + ret +.sgb +; sgb PAL23, 1 ; sgb_command, length +; rgb 28, 28, 24 +; colors 1-7 carried over + ld a, PAL23 << 3 + 1 + ld hl, wTempSGBPacket + ld [hli], a + ld a, $9c + ld [hli], a + ld a, $63 + ld [hld], a + dec hl + xor a + ld [wTempSGBPacket + $f], a + call SendSGB + ret +; 0x5a56 + +ApplyBGP6OrSGB3ToCardImage: ; 5a56 (1:5a56) + ld a, [wConsole] + or a ; CONSOLE_DMG + ret z + cp CONSOLE_SGB + jr z, .sgb + ld a, $06 ; CGB BG Palette 6 + call ApplyCardCGBAttributes + ret +.sgb + ld a, 3 << 0 + 3 << 2 ; Color Palette Designation +; fallthrough + +SendCardAttrBlkPacket: ; 5a67 (1:5a67) + call CreateCardAttrBlkPacket + call SendSGB + ret +; 0x5a6e + +ApplyBGP7OrSGB2ToCardImage: ; 5a6e (1:5a6e) + ld a, [wConsole] + or a ; CONSOLE_DMG + ret z + cp CONSOLE_SGB + jr z, .sgb + ld a, $07 ; CGB BG Palette 7 + call ApplyCardCGBAttributes + ret +.sgb + ld a, 2 << 0 + 2 << 2 ; Color Palette Designation + jr SendCardAttrBlkPacket +; 0x5a81 + +Func_5a81: ; 5a81 (1:5a81) + ld a, [wConsole] + or a ; CONSOLE_DMG + ret z + cp CONSOLE_SGB + jr z, .sgb + lb de, 0, 5 + call ApplyBGP7OrSGB2ToCardImage + lb de, 12, 1 + call ApplyBGP6OrSGB3ToCardImage + ret +.sgb + ld a, 2 << 0 + 2 << 2 ; Data Set #1: Color Palette Designation + lb de, 0, 5 ; Data Set #1: X, Y + call CreateCardAttrBlkPacket + push hl + ld a, 2 + ld [wTempSGBPacket + 1], a ; set number of data sets to 2 + ld hl, wTempSGBPacket + 8 + ld a, 3 << 0 + 3 << 2 ; Data Set #2: Color Palette Designation + lb de, 12, 1 ; Data Set #2: X, Y + call CreateCardAttrBlkPacket_DataSet + pop hl + call SendSGB + ret +; 0x5ab5 + +CreateCardAttrBlkPacket: ; 5ab5 (1:5ab5) +; sgb ATTR_BLK, 1 ; sgb_command, length +; db 1 ; number of data sets + ld hl, wTempSGBPacket + push hl + ld [hl], ATTR_BLK << 3 + 1 + inc hl + ld [hl], 1 + inc hl + call CreateCardAttrBlkPacket_DataSet + xor a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + pop hl + ret +; 0x5ac9 + +CreateCardAttrBlkPacket_DataSet: ; 5ac9 (1:5ac9) +; Control Code, Color Palette Designation, X1, Y1, X2, Y2 +; db ATTR_BLK_CTRL_INSIDE + ATTR_BLK_CTRL_LINE, a, d, e, d+7, e+5 ; data set 1 + ld [hl], ATTR_BLK_CTRL_INSIDE + ATTR_BLK_CTRL_LINE + inc hl + ld [hl], a + inc hl + ld [hl], d + inc hl + ld [hl], e + inc hl + ld a, 7 + add d + ld [hli], a + ld a, 5 + add e + ld [hli], a + ret +; 0x5adb + +; given the 8x6 card image with coordinates at de, fill its BGMap attributes with a +ApplyCardCGBAttributes: ; 5adb (1:5adb) + call BankswitchVRAM1 + lb hl, 0, 0 + lb bc, 8, 6 + call FillRectangle + call BankswitchVRAM0 + ret +; 0x5aeb + +; set the default game palettes for all three systems +; BGP and OBP0 on DMG +; SGB0 and SGB1 on SGB +; BGP0 to BGP5 and OBP1 on CGB +SetDefaultPalettes: ; 5aeb (1:5aeb) + ld a, [wConsole] + cp CONSOLE_SGB + jr z, .sgb + cp CONSOLE_CGB + jr z, .cgb + ld a, $e4 + ld [wOBP0], a + ld [wBGP], a + ld a, $01 ; equivalent to FLUSH_ONE + ld [wFlushPaletteFlags], a + ret +.cgb + ld a, $04 + ld [wTextBoxFrameType], a + ld de, CGBDefaultPalettes + ld hl, wBackgroundPalettesCGB + ld c, 5 palettes + call .copy_de_to_hl + ld de, CGBDefaultPalettes + ld hl, wObjectPalettesCGB + ld c, CGB_PAL_SIZE + call .copy_de_to_hl + call SetFlushAllPalettes + ret +.sgb + ld a, $04 + ld [wTextBoxFrameType], a + ld a, PAL01 << 3 + 1 + ld hl, wTempSGBPacket + push hl + ld [hli], a + ld de, Pal01Packet_Default + ld c, $0e + call .copy_de_to_hl + ld [hl], c + pop hl + call SendSGB + ret + +.copy_de_to_hl + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .copy_de_to_hl + ret +; 0x5b44 + +CGBDefaultPalettes: +; BGP0 and OBP0 + rgb 28, 28, 24 + rgb 21, 21, 16 + rgb 10, 10, 8 + rgb 0, 0, 0 +; BGP1 + rgb 28, 28, 24 + rgb 30, 29, 0 + rgb 30, 3, 0 + rgb 0, 0, 0 +; BGP2 + rgb 28, 28, 24 + rgb 0, 18, 0 + rgb 12, 11, 20 + rgb 0, 0, 0 +; BGP3 + rgb 28, 28, 24 + rgb 22, 0 ,22 + rgb 27, 7, 3 + rgb 0, 0, 0 +; BGP4 + rgb 28, 28, 24 + rgb 26, 10, 0 + rgb 28, 0, 0 + rgb 0, 0, 0 + +; first and last byte of the packet not contained here (see SetDefaultPalettes.sgb) +Pal01Packet_Default: +; SGB0 + rgb 28, 28, 24 + rgb 21, 21, 16 + rgb 10, 10, 8 + rgb 0, 0, 0 +; SGB1 + rgb 26, 10, 0 + rgb 28, 0, 0 + rgb 0, 0, 0 + +JPWriteByteToBGMap0: ; 5b7a (1:5b7a) + jp WriteByteToBGMap0 +; 0x5b7d + + INCROM $5b7d, $5e5f + +; display the animation of the player drawing the card loaded in wLoadedCard1 +; print the text at hl (which is YouDrewText) +_DisplayPlayerDrawCardScreen: ; 5e5f (1:5e5f) + push hl + call DrawLargePictureOfCard + ld a, 18 + call CopyCardNameAndLevel + ld [hl], TX_END + ld hl, 0 + call LoadTxRam2 + pop hl + call DrawWideTextBox_WaitForInput + ret +; 0x5e75 + +; draw a large picture of the card loaded in wLoadedCard1, including its image +; and a header indicating the type of card (TRAINER, ENERGY, PoKéMoN) +DrawLargePictureOfCard: ; 5e75 (1:5e75) + call ZeroObjectPositionsAndToggleOAMCopy + call EmptyScreen + call LoadDuelHUDTiles + call SetDefaultPalettes + ld a, $08 + ld [wcac2], a + call LoadCardOrDuelMenuBorderTiles + ld e, HEADER_TRAINER + ld a, [wLoadedCard1Type] + cp TYPE_TRAINER + jr z, .draw + ld e, HEADER_ENERGY + and TYPE_ENERGY + jr nz, .draw + ld e, HEADER_POKEMON +.draw + ld a, e + call LoadCardTypeHeaderTiles + ld de, v0Tiles1 + $20 tiles + call LoadLoaded1CardGfx + call SetBGP6OrSGB3ToCardPalette + call FlushAllPalettesOrSendPal23Packet + ld hl, LargeCardTileData + call WriteDataBlocksToBGMap0 + lb de, 6, 3 + call ApplyBGP6OrSGB3ToCardImage + ret +; 0x5eb7 + +LargeCardTileData: ; 5eb7 (1:5eb7) + db 5, 0, $d0, $d4, $d4, $d4, $d4, $d4, $d4, $d4, $d4, $d1, 0 ; top border + db 5, 1, $d6, $e0, $e1, $e2, $e3, $e4, $e5, $e6, $e7, $d7, 0 ; header top + db 5, 2, $d6, $e8, $e9, $ea, $eb, $ec, $ed, $ee, $ef, $d7, 0 ; header bottom + db 5, 3, $d6, $a0, $a6, $ac, $b2, $b8, $be, $c4, $ca, $d7, 0 ; image + db 5, 4, $d6, $a1, $a7, $ad, $b3, $b9, $bf, $c5, $cb, $d7, 0 ; image + db 5, 5, $d6, $a2, $a8, $ae, $b4, $ba, $c0, $c6, $cc, $d7, 0 ; image + db 5, 6, $d6, $a3, $a9, $af, $b5, $bb, $c1, $c7, $cd, $d7, 0 ; image + db 5, 7, $d6, $a4, $aa, $b0, $b6, $bc, $c2, $c8, $ce, $d7, 0 ; image + db 5, 8, $d6, $a5, $ab, $b1, $b7, $bd, $c3, $c9, $cf, $d7, 0 ; image + db 5, 9, $d6, 0 ; empty line 1 (left) + db 14, 9, $d7, 0 ; empty line 1 (right) + db 5, 10, $d6, 0 ; empty line 2 (left) + db 14, 10, $d7, 0 ; empty line 2 (right) + db 5, 11, $d2, $d5, $d5, $d5, $d5, $d5, $d5, $d5, $d5, $d3, 0 ; bottom border + db $ff +; 0x5f4a + + INCROM $5f4a, $5fdd + +; return carry if the turn holder has any Pokemon with non-zero HP in the play area. +; return how many Pokemon with non-zero HP in b. +HasAlivePokemonInPlayArea: ; 5fdd (1:5fdd) + xor a + ld [wcbd2], a + ld b, a + ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA + call GetTurnDuelistVariable + sub b + ld c, a + ld a, DUELVARS_ARENA_CARD_HP + add b + call GetTurnDuelistVariable + ld b, 0 + inc c + xor a + ld [wcbd3], a + ld [wcbd4], a + jr .next_pkmn +.loop + ld a, [hli] + or a + jr z, .next_pkmn ; jump if this play area Pokemon has 0 HP + inc b +.next_pkmn + dec c + jr nz, .loop + ld a, b + or a + ret nz + scf + ret +; 0x6008 + +OpenPlayAreaScreenForViewing: ; 6008 (1:6008) + ld a, START + A_BUTTON + jr _OpenPlayAreaScreen + +OpenPlayAreaScreenForSelection: ; 600c (1:600c) + ld a, START +; fallthrough + +_OpenPlayAreaScreen: ; 600e (1:600e) + ld [wcbd6], a + ldh a, [hTempCardIndex_ff98] + push af + ld a, [wcbd3] + or a + jr nz, .asm_6034 + xor a + ld [wSelectedDuelSubMenuItem], a + inc a + ld [wcbd3], a +.asm_6022 + call ZeroObjectPositionsAndToggleOAMCopy + call EmptyScreen + call LoadDuelCardSymbolTiles + call LoadDuelCheckPokemonScreenTiles + call $61c7 + call EnableLCD +.asm_6034 + ld hl, MenuParameters_60be + ld a, [wcbd2] + or a + jr z, .asm_6040 + ld hl, MenuParameters_60c6 +.asm_6040 + ld a, [wSelectedDuelSubMenuItem] + call InitializeMenuParameters + ld a, [wcbc8] + ld [wNumMenuItems], a +.asm_604c + call DoFrame + call $60dd + jr nc, .asm_6061 + cp $02 + jp z, $60ac + pop af + ldh [hTempCardIndex_ff98], a + ld a, [wcbd4] + jr OpenPlayAreaScreenForSelection +.asm_6061 + call HandleMenuInput + jr nc, .asm_604c + ld a, e + ld [wSelectedDuelSubMenuItem], a + ld a, [wcbd2] + add e + ld [wcbc9], a + ld a, [wcbd6] + ld b, a + ldh a, [hButtonsPressed] + and b + jr z, .asm_6091 + ld a, [wcbc9] + add DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + cp -1 + jr z, .asm_6022 + call GetCardIDFromDeckIndex + call LoadCardDataToBuffer1_FromCardID + call Func_576a + jr .asm_6022 +.asm_6091 + ld a, [wcbd2] + ld c, a + ldh a, [hCurrentMenuItem] + add c + ldh [hTempPlayAreaLocationOffset_ff9d], a + ldh a, [hCurrentMenuItem] + cp $ff + jr z, .asm_60b5 + ldh a, [hTempPlayAreaLocationOffset_ff9d] + add DUELVARS_ARENA_CARD_HP + call GetTurnDuelistVariable + or a + jr nz, .asm_60ac + jr .asm_6034 +.asm_60ac + pop af + ldh [hTempCardIndex_ff98], a + ldh a, [hTempPlayAreaLocationOffset_ff9d] + ldh [hCurrentMenuItem], a + or a + ret +.asm_60b5 + pop af + ldh [hTempCardIndex_ff98], a + ldh a, [hTempPlayAreaLocationOffset_ff9d] + ldh [hCurrentMenuItem], a + scf + ret +; 0x60be + +MenuParameters_60be: ; 60be (1:60be) + db 0, 0 ; cursor x, cursor y + db 3 ; y displacement between items + db 6 ; number of items + db $0f ; cursor tile number + db $00 ; tile behind cursor + dw $60ce ; function pointer if non-0 + +MenuParameters_60c6: ; 60c6 (1:60c6) + db 0, 3 ; cursor x, cursor y + db 3 ; y displacement between items + db 6 ; number of items + db $0f ; cursor tile number + db $00 ; tile behind cursor + dw $60ce ; function pointer if non-0 + + INCROM $60ce, $63bb + +; given a card's status in a, print the Poison symbol at bc if it's poisoned +CheckPrintPoisoned: ; 63bb (1:63bb) + push af + and POISONED + jr z, .print +.poison + ld a, LOW("") +.print + call WriteByteToBGMap0 + pop af + ret +; 0x63c7 + +; given a card's status in a, print the Poison symbol at bc if it's double poisoned +CheckPrintDoublePoisoned: ; 63c7 (1:63c7) + push af + and DOUBLE_POISONED - POISONED + jr nz, CheckPrintPoisoned.poison ; double poison (print a second symbol) + jr CheckPrintPoisoned.print ; not double poisoned +; 0x63ce + +; given a card's status in a, print the Confusion, Sleep, or Paralysis symbol at bc +; for each of those status that is active +CheckPrintCnfSlpPrz: ; 63ce (1:63ce) + push af + push hl + push de + and CNF_SLP_PRZ + ld e, a + ld d, $00 + ld hl, .status_symbols + add hl, de + ld a, [hl] + call WriteByteToBGMap0 + pop de + pop hl + pop af + ret + +.status_symbols + ; NO_STATUS, CONFUSED, ASLEEP, PARALYZED + db LOW("< >"), LOW(""), LOW(""), LOW("") +; 0x63e6 + +; print the symbols of the attached energies of a turn holder's play area card +; input: +; - e: PLAY_AREA_* +; - b, c: where to print (x, y) +; - wAttachedEnergies and wTotalAttachedEnergies +PrintPlayAreaCardAttachedEnergies: ; 63e6 (1:63e6) + push bc + call GetPlayAreaCardAttachedEnergies + ld hl, wDefaultText + push hl + ld c, NUM_TYPES + xor a +.empty_loop + ld [hli], a + dec c + jr nz, .empty_loop + pop hl + ld de, wAttachedEnergies + lb bc, LOW(""), NUM_TYPES - 1 +.next_color + ld a, [de] ; energy count of current color + inc de + inc a + jr .check_amount +.has_energy + ld [hl], b + inc hl +.check_amount + dec a + jr nz, .has_energy + inc b + dec c + jr nz, .next_color + ld a, [wTotalAttachedEnergies] + cp 9 + jr c, .place_tiles + ld a, LOW("<+>") + ld [wDefaultText + 7], a +.place_tiles + pop bc + call BCCoordToBGMap0Address + ld hl, wDefaultText + ld b, NUM_TYPES + call SafeCopyDataHLtoDE + ret +; 0x6423 + + INCROM $6423, $6614 + +; input d, e: max. HP, current HP +DrawHPBar: ; 6614 (1:6614) + ld a, MAX_HP + ld c, LOW("< >") + call .fill_hp_bar ; empty bar + ld a, d + ld c, LOW("<🌕>") + call .fill_hp_bar ; fill (max. HP) with HP counters + ld a, d + sub e + ld c, LOW("<🌑>") + ; fill (max. HP - current HP) with damaged HP counters +.fill_hp_bar + or a + ret z + ld hl, wDefaultText + ld b, HP_BAR_LENGTH +.tile_loop + ld [hl], c + inc hl + dec b + ret z + sub MAX_HP / HP_BAR_LENGTH + jr nz, .tile_loop + ret +; 0x6635 + + INCROM $6635, $6785 + +Func_6785: ; 6785 (1:6785) + call EnableSRAM + ld hl, $bc00 + xor a + ld [hli], a + ld [hli], a + ld [hl], a + call DisableSRAM + ret +; 0x6793 + +; loads player deck from SRAM to wPlayerDeck +LoadPlayerDeck: ; 6793 (1:6793) + call EnableSRAM + ld a, [$b700] + ld l, a + ld h, $54 + call HtimesL + ld de, sDeck1Cards + add hl, de + ld de, wPlayerDeck + ld c, DECK_SIZE +.next_card_loop + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .next_card_loop + call DisableSRAM + ret +; 0x67b2 + +Func_67b2: ; 67b2 (1:67b2) + ld a, [wccf2] + or a + ret z + ldh a, [hButtonsHeld] + and B_BUTTON + ret z + scf + ret +; 0x67be + +; related to ai taking their turn in a duel +; called multiple times during one ai turn +AIMakeDecision: ; 67be (1:67be) + ldh [hAIActionTableIndex], a + ld hl, wcbf9 + ld a, [hl] + ld [hl], $0 + or a + jr nz, .skip_delay +.delay_loop + call DoFrame + ld a, [wVBlankCtr] + cp $3c + jr c, .delay_loop + +.skip_delay + ldh a, [hAIActionTableIndex] + ld hl, wcbe1 + ld [hl], $0 + ld hl, AIActionTable + call JumpToFunctionInTable + ld a, [wDuelFinished] + ld hl, wcbe1 + or [hl] + jr nz, .turn_ended + ld a, [wcbf9] + or a + ret nz + ld [wVBlankCtr], a + ldtx hl, DuelistIsThinkingText + call DrawWideTextBox_PrintTextNoDelay + or a + ret + +.turn_ended + scf + ret +; 0x67fb + + INCROM $67fb, $695e + +AIActionTable: ; 695e (1:695e) + dw DuelTransmissionError + dw $69e0 + dw $69c5 + dw AIUseEnergyCard + dw $69ff + dw $6993 + dw $6a23 + dw $6a35 + dw $6a4e + dw $6a8c + dw $6ab1 + dw $698c + dw $6ad9 + dw $6b07 + dw $6aba + dw $6b7d + dw $6b7d + dw $6b24 + dw $6b30 + dw $6b7d + dw $6b3e + dw $6b15 + dw $6b20 + + INCROM $698c, $69a5 + +AIUseEnergyCard: ; 69a5 (1:69a5) + ldh a, [hTempPlayAreaLocationOffset_ffa1] + ldh [hTempPlayAreaLocationOffset_ff9d], a + ld e, a + ldh a, [hTemp_ffa0] + ldh [hTempCardIndex_ff98], a + call PutHandCardInPlayArea + ldh a, [hTemp_ffa0] + call LoadCardDataToBuffer1_FromDeckIndex + call DrawLargePictureOfCard + call $68e4 + ld a, $1 + ld [wAlreadyPlayedEnergy], a + call DrawDuelMainScene + ret +; 0x69c5 + + INCROM $69c5, $6d84 + +; converts clefairy doll/mysterious fossil to pokemon card +ConvertTrainerCardToPokemon: ; 6d84 (1:6d84) + ld c, a + ld a, [hl] + cp TYPE_TRAINER + ret nz + push hl + ldh a, [hWhoseTurn] + ld h, a + ld l, c + ld a, [hl] + and TYPE_TRAINER + pop hl + ret z + ld a, e + cp MYSTERIOUS_FOSSIL + jr nz, .check_for_clefairy_doll + ld a, d + cp $00 + jr z, .start_ram_data_overwrite + ret +.check_for_clefairy_doll + cp CLEFAIRY_DOLL + ret nz + ld a, d + cp $00 + ret nz +.start_ram_data_overwrite + push de + ld [hl], COLORLESS + ld bc, CARD_DATA_HP + add hl, bc + ld de, .data_to_overwrite + ld c, CARD_DATA_UNKNOWN2 - CARD_DATA_HP +.loop + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .loop + pop de + ret + +.data_to_overwrite + db 10 ; CARD_DATA_HP + ds $07 ; CARD_DATA_MOVE1_NAME - (CARD_DATA_HP + 1) + tx DiscardName ; CARD_DATA_MOVE1_NAME + tx DiscardDescription ; CARD_DATA_MOVE1_DESCRIPTION + ds $03 ; CARD_DATA_MOVE1_CATEGORY - (CARD_DATA_MOVE1_DESCRIPTION + 2) + db POKEMON_POWER ; CARD_DATA_MOVE1_CATEGORY + dw TrainerCardAsPokemonEffectCommands ; CARD_DATA_MOVE1_EFFECT_COMMANDS + ds $18 ; CARD_DATA_RETREAT_COST - (CARD_DATA_MOVE1_EFFECT_COMMANDS + 2) + db UNABLE_RETREAT ; CARD_DATA_RETREAT_COST + ds $0d ; PKMN_CARD_DATA_LENGTH - (CARD_DATA_RETREAT_COST + 1) + + INCROM $6df1, $70e6 + +Func_70e6: ; 70e6 (1:70e6) + xor a + ld [wAlreadyPlayedEnergy], a + ld [wcc0c], a + ld [wGotHeadsFromSandAttackOrSmokescreenCheck], a + ldh a, [hWhoseTurn] + ld [wcc05], a + ret +; 0x70f6 + +SetAllPlayAreaPokemonCanEvolve: ; 70f6 (1:70f6) + ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA + call GetTurnDuelistVariable + ld c, a + ld l, DUELVARS_ARENA_CARD_FLAGS_C2 +.next_pkmn_loop + res 5, [hl] + set CAN_EVOLVE_THIS_TURN_F, [hl] + inc l + dec c + jr nz, .next_pkmn_loop + ret +; 0x7107 + +; initializes duel variables such as cards in deck and in hand, or Pokemon in play area +; player turn: [c200, c2ff] +; opponent turn: [c300, c3ff] +InitializeDuelVariables: ; 7107 (1:7107) + ldh a, [hWhoseTurn] + ld h, a + ld l, DUELVARS_DUELIST_TYPE + ld a, [hl] + push hl + push af + xor a + ld l, a +.zero_duel_variables_loop + ld [hl], a + inc l + jr nz, .zero_duel_variables_loop + pop af + pop hl + ld [hl], a + lb bc, DUELVARS_CARD_LOCATIONS, DECK_SIZE + ld l, DUELVARS_DECK_CARDS +.init_duel_variables_loop +; zero card locations and cards in hand, and init order of cards in deck + push hl + ld [hl], b + ld l, b + ld [hl], $0 + pop hl + inc l + inc b + dec c + jr nz, .init_duel_variables_loop + ld l, DUELVARS_ARENA_CARD + ld c, 1 + MAX_BENCH_POKEMON + 1 +.init_play_area +; initialize to $ff card in arena as well as cards in bench (plus a terminator) + ld [hl], $ff + inc l + dec c + jr nz, .init_play_area + ret +; 0x7133 + + INCROM $7133, $71ad + +_TossCoin: ; 71ad (1:71ad) + ld [wcd9c], a + ld a, [wcac2] + cp $6 + jr z, .asm_71c1 + xor a + ld [wcd9f], a + call EmptyScreen + call LoadDuelCoinTossResultTiles + +.asm_71c1 + ld a, [wcd9f] + or a + jr nz, .asm_71ec + ld a, $6 + ld [wcac2], a + ld de, $000c + ld bc, $1406 + ld hl, $0000 + call DrawLabeledTextBox + call EnableLCD + ld de, $010e + ld a, $13 + call Func_22a6 + ld hl, wCoinTossScreenTextID + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + +.asm_71ec + ld hl, wCoinTossScreenTextID + xor a + ld [hli], a + ld [hl], a + call EnableLCD + ld a, DUELVARS_DUELIST_TYPE + call GetTurnDuelistVariable + ld [wcd9e], a + call Func_0f58 + xor a + ld [wcd9d], a + +.asm_7204 + ld a, [wcd9c] + cp $2 + jr c, .asm_7223 + ld bc, $0f0b + ld a, [wcd9f] + inc a + call $65b7 + ld b, 17 + ld a, $2e + call WriteByteToBGMap0 + inc b + ld a, [wcd9c] + call $65b7 + +.asm_7223 + call Func_3b21 + ld a, $58 + call Func_3b6a + ld a, [wcd9e] + or a + jr z, .asm_7236 + call $7324 + jr .asm_723c + +.asm_7236 + call WaitForWideTextBoxInput + call $72ff + +.asm_723c + call Func_3b21 + ld d, $5a + ld e, $0 + call UpdateRNGSources + rra + jr c, .asm_724d + ld d, $59 + ld e, $1 + +.asm_724d + ld a, d + call Func_3b6a + ld a, [wcd9e] + or a + jr z, .asm_725e + ld a, e + call $7310 + ld e, a + jr .asm_726c + +.asm_725e + push de + call DoFrame + call Func_3b52 + pop de + jr c, .asm_725e + ld a, e + call $72ff + +.asm_726c + ld b, $5c + ld c, $34 + ld a, e + or a + jr z, .asm_727c + ld b, $5b + ld c, $30 + ld hl, wcd9d + inc [hl] + +.asm_727c + ld a, b + call Func_3b6a + ld a, [wcd9e] + or a + jr z, .asm_728a + ld a, $1 + xor e + ld e, a + +.asm_728a + ld d, $54 + ld a, e + or a + jr nz, .asm_7292 + ld d, $55 + +.asm_7292 + ld a, d + call PlaySFX + ld a, [wcd9c] + dec a + jr z, .asm_72b9 + ld a, c + push af + ld e, $0 + ld a, [wcd9f] +.asm_72a3 + cp $a + jr c, .asm_72ad + inc e + inc e + sub $a + jr .asm_72a3 + +.asm_72ad + add a + ld d, a + lb bc, 2, 2 + lb hl, 1, 2 + pop af + call FillRectangle + +.asm_72b9 + ld hl, wcd9f + inc [hl] + ld a, [wcd9e] + or a + jr z, .asm_72dc + ld a, [hl] + ld hl, wcd9c + cp [hl] + call z, WaitForWideTextBoxInput + call $7324 + ld a, [wcd9c] + ld hl, wcd9d + or [hl] + jr nz, .asm_72e2 + call z, WaitForWideTextBoxInput + jr .asm_72e2 + +.asm_72dc + call WaitForWideTextBoxInput + call $72ff + +.asm_72e2 + call Func_3b31 + ld a, [wcd9f] + ld hl, wcd9c + cp [hl] + jp c, .asm_7204 + call Func_0f58 + call Func_3b31 + call Func_3b21 + ld a, [wcd9d] + or a + ret z + scf + ret +; 0x72ff + + INCROM $72ff, $7354 + +BuildVersion: ; 7354 (1:7354) + db "VER 12/20 09:36",TX_END + + INCROM $7364, $7571 + +Func_7571: ; 7571 (1:7571) + INCROM $7571, $7576 + +Func_7576: ; 7576 (1:7576) + farcall $6, $591f + ret +; 0x757b + + INCROM $757b, $758f + +Func_758f: ; 758f (1:758f) + INCROM $758f, $7594 + +Func_7594: ; 7594 (1:7594) + farcall $6, $661f + ret +; 0x7599 + + INCROM $7599, $8000 \ No newline at end of file diff --git a/src/engine/bank02.asm b/src/engine/bank02.asm new file mode 100644 index 0000000..e9f2868 --- /dev/null +++ b/src/engine/bank02.asm @@ -0,0 +1,1076 @@ + INCROM $8000, $8cd4 + +Func_8cd4: ; 8cd4 (2:4cd4) + push bc + call EnableSRAM + ld b, $3c +.asm_8cda + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .asm_8cda + xor a + ld [hl], a + call DisableSRAM + pop bc + ret +; 0x8ce7 + + INCROM $8ce7, $8cf9 + +Func_8cf9: ; 8cf9 (2:4cf9) + call EnableSRAM + xor a + ld hl, $b703 + ld [hli], a + inc a + ld [hli], a + ld [hli], a + ld [hl], a + ld [$b701], a + call DisableSRAM +Func_8d0b: ; 8d0b (2:4d0b) + ld hl, Unknown_8d15 + ld de, $9380 + call Func_92ad + ret + +Unknown_8d15: ; 8d15 (2:4d15) + INCROM $8d15, $8d56 + +Func_8d56: ; 8d56 (2:4d56) + xor a + ld [wTileMapFill], a + call EmptyScreen + call ZeroObjectPositions + ld a, $1 + ld [wVBlankOAMCopyToggle], a + call LoadDuelHUDTiles + call LoadDuelCardSymbolTiles + call Func_8d0b + bank1call SetDefaultPalettes + ld de, $3cbf + call Func_2275 + ret +; 0x8d78 + + INCROM $8d78, $8d9d + +Func_8d9d: ; 8d9d (2:4d9d) + ld de, wcfd1 + ld b, $7 +.asm_8da2 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_8da2 + ret + +Unknown_8da9: ; 8da9 (2:4da9) + INCROM $8da9, $8db0 + +Func_8db0: ; 8db0 (2:4db0) + ld hl, Unknown_8da9 + call Func_8d9d + ld a, $ff + call Func_9168 + xor a + +Func_8dbc: ; 8dbc (2:4dbc) + ld hl, Unknown_8de2 + call InitializeMenuParameters + ldtx hl, PleaseSelectDeckText + call DrawWideTextBox_PrintText +.asm_8dc8 + call DoFrame + jr c, Func_8dbc + call Func_8dea + jr c, Func_8dbc + call HandleMenuInput + jr nc, .asm_8dc8 + ldh a, [hCurrentMenuItem] + cp $ff + ret z + ld [wceb1], a + jp Func_8e42 + +Unknown_8de2: ; 8de2 (2:4de2) + INCROM $8de2, $8dea + +Func_8dea: ; 8dea (2:4dea) + ldh a, [hButtonsPressed2] + and START + ret z + ld a, [wCurMenuItem] + ld [wceb1], a + call Func_8ff2 + jp nc, Func_8e05 + ld a, $ff + call Func_90fb + call Func_8fe8 + scf + ret + +Func_8e05: ; 8e05 (2:4e05) + ld a, $1 + call Func_90fb + call GetPointerToDeckCards + push hl + call GetPointerToDeckName + pop de + call Func_8e1f + ld a, $ff + call Func_9168 + ld a, [wceb1] + scf + ret + +Func_8e1f: ; 8e1f (2:4e1f) + push de + ld de, wcfb9 + call Func_92b4 + pop de + ld hl, wcf17 + call Func_8cd4 + ld a, $9 + ld hl, wcebb + call Func_9843 + ld a, $3c + ld [wcecc], a + ld hl, wcebb + ld [hl], a + call Func_9e41 + ret + +Func_8e42: ; 8e42 (2:4e42) + call DrawWideTextBox + ld hl, Unknown_9027 + call Func_2c08 + call Func_905a +.asm_8e4e + call DoFrame + call Func_9065 + jp nc, .asm_8e4e + cp $ff + jr nz, .asm_8e64 + call Func_90d8 + ld a, [wceb1] + jp Func_8dbc +.asm_8e64 + ld a, [wceaf] + or a + jp nz, Func_8f8a + ld a, [wceb0] + or a + jp nz, .asm_8ecf + call GetPointerToDeckCards + ld e, l + ld d, h + ld hl, wcf17 + call Func_8cd4 + ld a, $14 + ld hl, wcfb9 + call Func_9843 + ld de, wcfb9 + call GetPointerToDeckName + call Func_92b4 + call Func_9345 + jr nc, .asm_8ec4 + call EnableSRAM + ld hl, wcf17 + call Func_910a + call GetPointerToDeckCards + call Func_9152 + ld e, l + ld d, h + ld hl, wcf17 + ld b, $3c +.asm_8ea9 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_8ea9 + call GetPointerToDeckName + ld d, h + ld e, l + ld hl, wcfb9 + call Func_92ad + call GetPointerToDeckName + ld a, [hl] + call DisableSRAM + or a + jr z, .asm_8edb +.asm_8ec4 + ld a, $ff + call Func_9168 + ld a, [wceb1] + jp Func_8dbc +.asm_8ecf + call Func_8ff2 + jp nc, .asm_8edb + call Func_8fe8 + jp Func_8dbc +.asm_8edb + ld a, $14 + ld hl, wcfb9 + call Func_9843 + ld de, wcfb9 + call GetPointerToDeckName + call Func_92b4 + call Func_8f05 + call GetPointerToDeckName + ld d, h + ld e, l + ld hl, wcfb9 + call Func_92b4 + ld a, $ff + call Func_9168 + ld a, [wceb1] + jp Func_8dbc + +Func_8f05: ; 8f05 (2:4f05) + ld a, [wceb1] + or a + jr nz, .asm_8f10 + ld hl, Unknown_a763 + jr .asm_8f23 +.asm_8f10 + dec a + jr nz, .asm_8f18 + ld hl, Unknown_a76c + jr .asm_8f23 +.asm_8f18 + dec a + jr nz, .asm_8f20 + ld hl, Unknown_a775 + jr .asm_8f23 +.asm_8f20 + ld hl, Unknown_a77e +.asm_8f23 + ld a, $14 + ld bc, $0401 + ld de, wcfb9 + farcall Func_1ad89 + ld a, [wcfb9] + or a + ret nz + call Func_8f38 + ret + +Func_8f38: ; 8f38 (2:4f38) + ld hl, $b701 + call EnableSRAM + ld a, [hli] + ld h, [hl] + call DisableSRAM + ld l, a + ld de, wDefaultText + call TwoByteNumberToText + ld hl, wcfb9 + ld [hl], $6 + inc hl + ld [hl], $44 + inc hl + ld [hl], $65 + inc hl + ld [hl], $63 + inc hl + ld [hl], $6b + inc hl + ld [hl], $20 + inc hl + ld de, $c592 + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hli], a + xor a + ld [hl], a + ld hl, $b701 + call EnableSRAM + ld e, [hl] + inc hl + ld d, [hl] + ld a, $3 + cp d + jr nz, .asm_8f82 + ld a, $e7 + cp e + jr nz, .asm_8f82 + ld de, $0000 +.asm_8f82 + inc de + ld [hl], d + dec hl + ld [hl], e + call DisableSRAM + ret + +Func_8f8a: ; 8f8a (2:4f8a) + ld a, [wceb0] + or a + jp nz, Func_9026 + call Func_8ff2 + jp nc, Func_8f9d + call Func_8fe8 + jp Func_8dbc + +Func_8f9d: ; 8f9d (2:4f9d) + call EnableSRAM + ld a, [$b700] + call DisableSRAM + ld h, $3 + ld l, a + call HtimesL + ld e, l + inc e + ld d, 2 + xor a + lb hl, 0, 0 + lb bc, 2, 2 + call FillRectangle + ld a, [wceb1] + call EnableSRAM + ld [$b700], a + call DisableSRAM + call Func_9326 + call GetPointerToDeckName + call EnableSRAM + call Func_9253 + call DisableSRAM + xor a + ld [wTxRam2], a + ld [wTxRam2 + 1], a + ldtx hl, ChosenAsDuelingDeckText + call DrawWideTextBox_WaitForInput + ld a, [wceb1] + jp Func_8dbc + +Func_8fe8: ; 8fe8 (2:4fe8) + ldtx hl, ThereIsNoDeckHereText + call DrawWideTextBox_WaitForInput + ld a, [wceb1] + ret + +Func_8ff2: ; 8ff2 (2:4ff2) + ld a, [wceb1] + ld hl, wceb2 + ld b, $0 + ld c, a + add hl, bc + ld a, [hl] + or a + ret nz + scf + ret +; 0x9001 + + INCROM $9001, $9026 + +Func_9026: ; 9026 (2:5026) + ret + +Unknown_9027: ; 9027 (2:5027) + INCROM $9027, $9038 + +; return, in hl, the pointer to sDeckXName where X is [wceb1] + 1 +GetPointerToDeckName: ; 9038 (2:5038) + ld a, [wceb1] + ld h, a + ld l, sDeck2Name - sDeck1Name + call HtimesL + push de + ld de, sDeck1Name + add hl, de + pop de + ret + +; return, in hl, the pointer to sDeckXCards where X is [wceb1] + 1 +GetPointerToDeckCards: ; 9048 (2:5048) + push af + ld a, [wceb1] + ld h, a + ld l, sDeck2Cards - sDeck1Cards + call HtimesL + push de + ld de, sDeck1Cards + add hl, de + pop de + pop af + ret + +Func_905a: ; 905a (2:505a) + xor a + ld [wceaf], a + ld [wceb0], a + ld [wcea3], a + ret + +Func_9065: ; 9065 (2:5065) + xor a + ld [wcfe3], a + ld a, [wceaf] + ld d, a + ld a, [wceb0] + ld e, a + ldh a, [hButtonsPressed2] + or a + jr z, .asm_90a6 + bit D_LEFT_F, a + jr nz, .asm_907e + bit D_RIGHT_F, a + jr z, .asm_9084 +.asm_907e + ld a, d + xor $1 + ld d, a + jr .asm_9090 +.asm_9084 + bit D_UP_F, a + jr nz, .asm_908c + bit D_DOWN_F, a + jr z, .asm_90a6 +.asm_908c + ld a, e + xor $1 + ld e, a +.asm_9090 + ld a, $1 + ld [wcfe3], a + push de + call Func_90d8 + pop de + ld a, d + ld [wceaf], a + ld a, e + ld [wceb0], a + xor a + ld [wcea3], a +.asm_90a6 + ldh a, [hButtonsPressed] + and A_BUTTON | B_BUTTON + jr z, .asm_90c1 + and A_BUTTON + jr nz, .asm_90b7 + ld a, $ff + call Func_90fb + scf + ret +.asm_90b7 + call Func_90f7 + ld a, $1 + call Func_90fb + scf + ret +.asm_90c1 + ld a, [wcfe3] + or a + jr z, .asm_90ca + call PlaySFX +.asm_90ca + ld hl, wcea3 + ld a, [hl] + inc [hl] + and $f + ret nz + ld a, $f + bit 4, [hl] + jr z, asm_90da +Func_90d8: ; 90d8 (2:50d8) + ld a, $0 +asm_90da + ld e, a + ld a, $a + ld l, a + ld a, [wceaf] + ld h, a + call HtimesL + ld a, l + add $1 + ld b, a + ld a, [wceb0] + sla a + add $e + ld c, a + ld a, e + call WriteByteToBGMap0 + or a + ret + +Func_90f7: ; 90f7 (2:50f7) + ld a, $f + jr asm_90da + +Func_90fb: ; 90fb (2:50fb) + push af + inc a + jr z, .asm_9103 + ld a, $2 + jr .asm_9105 +.asm_9103 + ld a, $3 +.asm_9105 + call PlaySFX + pop af + ret + +Func_910a: ; 910a (2:510a) + push hl + ld b, $0 + ld d, $3c +.asm_910f + ld a, [hli] + or a + jr z, .asm_911e + ld c, a + push hl + ld hl, sCardCollection + add hl, bc + dec [hl] + pop hl + dec d + jr nz, .asm_910f +.asm_911e + pop hl + ret +; 0x9120 + + INCROM $9120, $9152 + +Func_9152: ; 9152 (2:5152) + push hl + ld b, $0 + ld d, $3c +.asm_9157 + ld a, [hli] + or a + jr z, .asm_9166 + ld c, a + push hl + ld hl, sCardCollection + add hl, bc + inc [hl] + pop hl + dec d + jr nz, .asm_9157 +.asm_9166 + pop hl + ret + +Func_9168: ; 9168 (2:5168) + ld [hffb5], a + call Func_8d56 + ld de, $0000 + ld bc, $1404 + call DrawRegularTextBox + ld de, $0003 + ld bc, $1404 + call DrawRegularTextBox + ld de, $0006 + ld bc, $1404 + call DrawRegularTextBox + ld de, $0009 + ld bc, $1404 + call DrawRegularTextBox + ld hl, Unknown_9242 + call Func_2c08 + ld a, $4 + ld hl, wceb2 + call Func_9843 + ld a, [hffb5] + bit 0, a + jr z, .asm_91b0 + ld hl, sDeck1Name + ld de, $0602 + call Func_926e +.asm_91b0 + ld hl, sDeck1Cards + call Func_9314 + jr c, .asm_91bd + ld a, $1 + ld [wceb2], a +.asm_91bd + ld a, [hffb5] + bit 1, a + jr z, .asm_91cd + ld hl, sDeck2Name + ld de, $0605 + call Func_926e +.asm_91cd + ld hl, sDeck2Cards + call Func_9314 + jr c, .asm_91da + ld a, $1 + ld [wceb3], a +.asm_91da + ld a, [hffb5] + bit 2, a + jr z, .asm_91ea + ld hl, sDeck3Name + ld de, $0608 + call Func_926e +.asm_91ea + ld hl, sDeck3Cards + call Func_9314 + jr c, .asm_91f7 + ld a, $1 + ld [wceb4], a +.asm_91f7 + ld a, [hffb5] + bit 3, a + jr z, .asm_9207 + ld hl, sDeck4Name + ld de, $060b + call Func_926e +.asm_9207 + ld hl, sDeck4Cards + call Func_9314 + jr c, .asm_9214 + ld a, $1 + ld [wceb5], a +.asm_9214 + call EnableSRAM + ld a, [$b700] + ld c, a + ld b, $0 + ld d, $2 +.asm_921f + ld hl, wceb2 + add hl, bc + ld a, [hl] + or a + jr nz, .asm_9234 + inc c + ld a, $4 + cp c + jr nz, .asm_921f + ld c, $0 + dec d + jr z, .asm_9234 + jr .asm_921f +.asm_9234 + ld a, c + ld [$b700], a + call DisableSRAM + call Func_9326 + call EnableLCD + ret + +Unknown_9242: ; 9242 (2:5242) + INCROM $9242, $9253 + +Func_9253: ; 9253 (2:5253) + ld de, wDefaultText + call Func_92ad + ld hl, wDefaultText + call Func_23c1 + ld b, $0 + ld hl, wDefaultText + add hl, bc + ld d, h + ld e, l + ld hl, Unknown_92a7 + call Func_92ad + ret + +Func_926e: ; 926e (2:526e) + push hl + call Func_9314 + pop hl + jr c, .asm_929c + push de + ld de, wDefaultText + call Func_92b4 + ld hl, wDefaultText + call Func_23c1 + ld b, $0 + ld hl, wDefaultText + add hl, bc + ld d, h + ld e, l + ld hl, Unknown_92a7 + call Func_92ad + pop de + ld hl, wDefaultText + call Func_22ae + call Func_21c5 + or a + ret +.asm_929c + call Func_22ae + ldtx hl, NewDeckText + call Func_2c29 + scf + ret + +Unknown_92a7: ; 92a7 (2:52a7) + INCROM $92a7, $92ad + +Func_92ad: ; 92ad (2:52ad) + ld a, [hli] + ld [de], a + or a + ret z + inc de + jr Func_92ad + +Func_92b4: ; 92b4 (2:52b4) + call EnableSRAM + call Func_92ad + call DisableSRAM + ret +; 0x92be + + INCROM $92be, $9314 + +Func_9314: ; 9314 (2:5314) + ld bc, $0018 + add hl, bc + call EnableSRAM + ld a, [hl] + call DisableSRAM + or a + jr nz, .asm_9324 + scf + ret +.asm_9324 + or a + ret + +Func_9326: ; 9326 (2:5326) + call EnableSRAM + ld a, [$b700] + call DisableSRAM + ld h, 3 + ld l, a + call HtimesL + ld e, l + inc e + ld d, 2 + ld a, $38 + lb hl, 1, 2 + lb bc, 2, 2 + call FillRectangle + ret + +Func_9345: ; 9345 (2:5345) + INCROM $9345, $9843 + +Func_9843: ; 9843 (2:5843) + INCROM $9843, $9e41 + +Func_9e41: ; 9e41 (2:5e41) + INCROM $9e41, $a288 + +Func_a288: ; a288 (2:6288) + INCROM $a288, $a763 + +Unknown_a763: ; a763 (2:6763) + INCROM $a763, $a76c + +Unknown_a76c: ; a76c (2:676c) + INCROM $a76c, $a775 + +Unknown_a775: ; a775 (2:6775) + INCROM $a775, $a77e + +Unknown_a77e: ; a77e (2:677e) + INCROM $a77e, $b177 + +Func_b177: ; b177 (2:7177) + INCROM $b177, $b19d + +Func_b19d: ; b19d (2:719d) + xor a + ld [wcea1], a + ld de, CheckForCGB + ld hl, wd0a2 + ld [hl], e + inc hl + ld [hl], d + call $7379 + ld a, $3c + ld [wd0a5], a + xor a +.asm_b1b3 + ld hl, $76fb + call $5a6d + call $7704 + call $7545 + ldtx hl, PleaseSelectDeckText + call DrawWideTextBox_PrintText + ld de, $0224 ; PleaseSelectDeckText? + call $7285 + call $729f + jr c, .asm_b1b3 + cp $ff + ret z + ld b, a + ld a, [wcea1] + add b + ld [wd088], a + call Func_905a + call DrawWideTextBox + ld hl, $7274 + call Func_2c08 + call DoFrame + call Func_9065 + jp nc, $71e7 + cp $ff + jr nz, .asm_b1fa + ld a, [wd086] + jp $71b3 + +.asm_b1fa + ld a, [wceb0] + sla a + ld hl, wceaf + add [hl] + or a + jr nz, .asm_b22c + call $735b + jr nc, .asm_b216 + call $7592 + ld a, [wd086] + jp c, $71b3 + jr .asm_b25e + +.asm_b216 + ld hl, $0272 + call YesOrNoMenuWithText + ld a, [wd086] + jr c, .asm_b1b3 + call $7592 + ld a, [wd086] + jp c, $71b3 + jr .asm_b25e + +.asm_b22c + cp $1 + jr nz, .asm_b24c + call $735b + jr c, .asm_b240 + call $76ca + ld a, [wd086] + jp c, $71b3 + jr .asm_b25e + +.asm_b240 + ld hl, WaitForVBlank + call DrawWideTextBox_WaitForInput + ld a, [wd086] + jp $71b3 + +.asm_b24c + cp $2 + jr nz, .asm_b273 + call $735b + jr c, .asm_b240 + call $77c6 + ld a, [wd086] + jp nc, $71b3 + +.asm_b25e + ld a, [wd087] + ld [wcea1], a + call $7379 + call $7704 + call $7545 + ld a, [wd086] + jp $71b3 + +.asm_b273 + ret +; 0xb274 + + INCROM $b274, $ba04 + +Func_ba04: ; ba04 (2:7a04) + ld a, [wd0a9] + ld hl, $7b83 + sla a + ld c, a + ld b, $0 + add hl, bc + ld de, wd0a2 + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + xor a + ld [wcea1], a + call $7b97 + ld a, $5 + ld [wd0a5], a + xor a + ld hl, $7b6e + call InitializeMenuParameters + ldtx hl, PleaseSelectDeckText + call DrawWideTextBox_PrintText + ld a, $5 + ld [wcea9], a + ld hl, $73fe + ld d, h + ld a, l + ld hl, wcece + ld [hli], a + ld [hl], d +.asm_ba40 + call DoFrame + call HandleMenuInput + jr c, .asm_baa3 + ldh a, [hButtonsPressed2] + and D_UP | D_DOWN + jr z, .asm_ba4e + +.asm_ba4e + ldh a, [hButtonsPressed2] + and START + jr z, .asm_ba40 + ld a, [wcea1] + ld [wd087], a + ld b, a + ld a, [wCurMenuItem] + ld [wd086], a + add b + ld c, a + inc a + or $80 + ld [wceb1], a + sla c + ld b, $0 + ld hl, wd00d + add hl, bc + call $7653 + ld a, [hli] + ld h, [hl] + ld l, a + push hl + ld bc, $0018 + add hl, bc + ld d, h + ld e, l + ld a, [hl] + pop hl + call $7644 + or a + jr z, .asm_ba40 + ld a, $1 + call Func_90fb + call $7653 + call Func_8e1f + call $7644 + ld a, [wd087] + ld [wcea1], a + call $7b97 + ld a, [wd086] + jp $7a25 + +.asm_baa3 + call DrawCursor2 + ld a, [wcea1] + ld [wd087], a + ld a, [wCurMenuItem] + ld [wd086], a + ldh a, [hCurrentMenuItem] + cp $ff + jp z, $7b0d + ld [wd088], a + call Func_905a + xor a + ld [wce5e], a + call DrawWideTextBox + ld hl, $7b76 + call Func_2c08 + call DoFrame + call $46ac + jp nc, $7acc + cp $ff + jr nz, .asm_badf + ld a, [wd086] + jp $7a25 + +.asm_badf + ld a, [wceb0] + sla a + ld hl, wceaf + add [hl] + or a + jr nz, .asm_bb09 + call $7653 + call $77c6 + call $7644 + ld a, [wd086] + jp nc, $7a25 + ld a, [wd087] + ld [wcea1], a + call $7b97 + ld a, [wd086] + jp $7a25 + +.asm_bb09 + cp $1 + jr nz, .asm_bb12 + xor a + ld [wd0a4], a + ret + +.asm_bb12 + ld a, [wcea1] + ld [wd087], a + ld b, a + ld a, [wCurMenuItem] + ld [wd086], a + add b + ld c, a + ld [wceb1], a + sla c + ld b, $0 + ld hl, wd00d + add hl, bc + push hl + ld hl, wd0aa + add hl, bc + ld bc, wcfda + ld a, [hli] + ld [bc], a + inc bc + ld a, [hl] + ld [bc], a + pop hl + call $7653 + ld a, [hli] + ld h, [hl] + ld l, a + push hl + ld bc, $0018 + add hl, bc + ld d, h + ld e, l + ld a, [hl] + pop hl + call $7644 + or a + jp z, $7a40 + ld a, $1 + call Func_90fb + call $7653 + xor a + call $6dfe + call $7644 + ld a, [wd087] + ld [wcea1], a + call $7b97 + ld a, [wd086] + jp $7a25 +; 0xbb6e + + INCROM $bb6e, $c000 diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm new file mode 100644 index 0000000..e53fc38 --- /dev/null +++ b/src/engine/bank03.asm @@ -0,0 +1,3225 @@ +LoadMap: ; c000 (3:4000) + call DisableLCD + call EnableSRAM + bank1call Func_6785 + call DisableSRAM + ld a, GAME_EVENT_OVERWORLD + ld [wGameEvent], a + xor a + ld [wd10f], a + ld [wd110], a + ld [wMatchStartTheme], a + farcall Func_10a9b + call Func_c1a4 + call ZeroObjectPositions + xor a + ld [wTileMapFill], a + call LoadDuelHUDTiles + call Set_OBJ_8x8 + xor a + ld [wcd08], a + xor a + ld [wd291], a +.asm_c037 + farcall Func_10ab4 + call Func_c1a4 + call Func_c241 + call EmptyScreen + call Func_3ca0 + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + farcall Func_1c440 + ld a, [wd0bb] + ld [wCurMap], a + ld a, [wd0bc] + ld [wPlayerXCoord], a + ld a, [wd0bd] + ld [wPlayerYCoord], a + call Func_c36a + call Func_c184 + call Func_c49c + farcall Func_80000 + call Func_c4b9 + call Func_c943 + call Func_c158 + farcall Func_80480 + call Func_c199 + xor a + ld [wd0b4], a + ld [wd0c1], a + call Func_39fc + farcall Func_10af9 + call Func_c141 + call Func_c17a +.asm_c092 + call DoFrameIfLCDEnabled + call SetScreenScroll + call Func_c0ce + ld hl, wd0b4 + ld a, [hl] + and $d0 + jr z, .asm_c092 + call DoFrameIfLCDEnabled + ld hl, wd0b4 + ld a, [hl] + bit 4, [hl] + jr z, .asm_c0b6 + ld a, $c + call PlaySFX + jp .asm_c037 +.asm_c0b6 + farcall Func_10ab4 + call Func_c1a0 + ld a, [wMatchStartTheme] + or a + jr z, .asm_c0ca + call Func_c280 + farcall Duel_Init +.asm_c0ca + call Func_c280 + ret + +Func_c0ce: ; c0ce (3:40ce) + ld a, [wd0bf] + res 7, a + rlca + add LOW(PointerTable_c0e0) + ld l, a + ld a, HIGH(PointerTable_c0e0) + adc $0 + ld h, a + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +PointerTable_c0e0: ; c0e0 (3:40e0) + dw Func_c0e8 + dw Func_c0ed + dw Func_c0f1 + dw Func_c10a + +Func_c0e8: ; c0e8 (3:40e8) + farcall Func_10e55 + ret + +Func_c0ed: ; c0ed (3:40ed) + call Func_c510 + ret + +Func_c0f1: ; c0f1 (3:40f1) + ld a, [wd3b6] + ld [wd3aa], a + farcall Func_1c768 + ld a, c + ld [wd0c6], a + ld a, b + ld [wd0c7], a + ld a, $3 + ld [wd0bf], a + jr Func_c10a + +Func_c10a: ; c10a (3:410a) + ld hl, wd0c6 + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +; closes dialogue window. seems to be for other things as well. +CloseDialogueBox: ; c111 (3:4111) + ld a, [wd0c1] + bit 0, a + call nz, Func_c135 + ld a, [wd0c1] + bit 1, a + jr z, .asm_c12a + ld a, [wd3b6] + ld [wd3aa], a + farcall Func_1c5e9 +.asm_c12a + xor a + ld [wd0c1], a + ld a, [wd0c0] + ld [wd0bf], a + ret + +Func_c135: ; c135 (3:4135) + push hl + farcall Func_80028 + ld hl, wd0c1 + res 0, [hl] + pop hl + ret + +Func_c141: ; c141 (3:4141) + ld hl, wd0c2 + ld a, [hl] + or a + ret z + push af + xor a + ld [hl], a + pop af + dec a + ld hl, PointerTable_c152 + jp JumpToFunctionInTable + +PointerTable_c152: ; c152 (3:4152) + dw Func_c9bc + dw Func_fc2b + dw Func_fcad + +Func_c158: ; c158 (3:4158) + ld a, [wd0c2] + cp $1 + ret nz + ld a, [wd0c4] + ld [wd3ab], a + call Func_39c3 + jr c, .asm_c179 + ld a, [wd3aa] + ld l, $4 + call Func_39ad + ld a, [wd0c5] + ld [hl], a + farcall Func_1c58e +.asm_c179 + ret + +Func_c17a: ; c17a (3:417a) + ld a, [wd0bf] + cp $3 + ret z + call Func_c9b8 + ret + +Func_c184: ; c184 (3:4184) + push bc + ld c, $1 + ld a, [wCurMap] + cp OVERWORLD_MAP + jr nz, .asm_c190 + ld c, $0 +.asm_c190 + ld a, c + ld [wd0bf], a + ld [wd0c0], a + pop bc + ret + +Func_c199: ; c199 (3:4199) + ld hl, Func_380e + call SetDoFrameFunction + ret + +Func_c1a0: ; c1a0 (3:41a0) + call ResetDoFrameFunction + ret + +Func_c1a4: ; c1a4 (3:41a4) + xor a + call SetBGP + xor a + call SetOBP0 + xor a + call SetOBP1 + ret + +Func_c1b1: ; c1b1 (3:41b1) + ld a, $c + ld [wd32e], a + ld a, $0 + ld [wd0bb], a + ld a, $c + ld [wd0bc], a + ld a, $c + ld [wd0bd], a + ld a, $2 + ld [wd0be], a + call Func_c9cb + call Func_c9dd + farcall Func_80b7a + farcall Func_1c82e + farcall Func_131b3 + xor a + ld [wPlayTimeCounter + 0], a + ld [wPlayTimeCounter + 1], a + ld [wPlayTimeCounter + 2], a + ld [wPlayTimeCounter + 3], a + ld [wPlayTimeCounter + 4], a + ret + +Func_c1ed: ; c1ed (3:41ed) + call Func_c9cb + farcall Func_11416 + call Func_c9dd + ret + +Func_c1f8: ; c1f8 (3:41f8) + xor a + ld [wd0b8], a + ld [wd0b9], a + ld [wd0ba], a + ld [wd11b], a + ld [wd0c2], a + ld [wd111], a + ld [wd112], a + ld [wd3b8], a + call EnableSRAM + ld a, [sa007] + ld [wd421], a + ld a, [sa006] + ld [wTextSpeed], a + call DisableSRAM + farcall Func_10756 + ret + +Func_c228: ; c228 (3:4228) + ld a, [wCurMap] + ld [wd0bb], a + ld a, [wPlayerXCoord] + ld [wd0bc], a + ld a, [wPlayerYCoord] + ld [wd0bd], a + ld a, [wd334] + ld [wd0be], a + ret + +Func_c241: ; c241 (3:4241) + push hl + push bc + push de + ld de, $307f + call Func_2275 + call Func_c258 + pop de + pop bc + pop hl + ret + +Func_c251: ; c251 (3:4251) + ldh a, [hffb0] + push af + ld a, $1 + jr asm_c25d + +Func_c258: ; c258 (3:4258) + ldh a, [hffb0] + push af + ld a, $2 +asm_c25d + ldh [hffb0], a + push hl + call Func_c268 + pop hl + pop af + ldh [hffb0], a + ret + +Func_c268: ; c268 (3:4268) + ld hl, Unknown_c27c +.asm_c26b + push hl + ld a, [hli] + ld h, [hl] + ld l, a + or h + jr z, .asm_c27a + call Func_2c29 + pop hl + inc hl + inc hl + jr .asm_c26b +.asm_c27a + pop hl + ret + +Unknown_c27c: ; c27c (3:427c) + INCROM $c27c, $c280 + +Func_c280: ; c280 (3:4280) + call Func_c228 + call Func_3ca0 + call ZeroObjectPositions + ld hl, wVBlankOAMCopyToggle + inc [hl] + call EnableLCD + call DoFrameIfLCDEnabled + call DisableLCD + farcall Func_12871 + ret + +Func_c29b: ; c29b (3:429b) + push hl + ld hl, wd0c1 + or [hl] + ld [hl], a + pop hl + ret + +Func_c2a3: ; c2a3 (3:42a3) + push hl + push bc + push de + call Func_c335 + farcall Func_10ab4 + ld a, $80 + call Func_c29b + ld de, $307f + call Func_2275 + farcall Func_12ba7 + call Func_3ca0 + call ZeroObjectPositions + ld a, $1 + ld [wVBlankOAMCopyToggle], a + call EnableLCD + call DoFrameIfLCDEnabled + call DisableLCD + pop de + pop bc + pop hl + ret + +Func_c2d4: ; c2d4 (3:42d4) + xor a + ld [wd10f], a + ld [wd110], a + +Func_c2db: ; c2db (3:42db) + push hl + push bc + push de + call DisableLCD + call Set_OBJ_8x8 + call Func_3ca0 + farcall Func_12bcd + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + call Func_c241 + call EmptyScreen + ld a, [wd111] + push af + farcall Func_80000 + pop af + ld [wd111], a + ld hl, wd0c1 + res 0, [hl] + call Func_c34e + farcall Func_12c5e + farcall Func_1c6f8 + ld hl, wd0c1 + res 7, [hl] + ld hl, wd10f + ld a, [hli] + or [hl] + jr z, .asm_c323 + ld a, [hld] + ld l, [hl] + ld h, a + call Func_3c45 +.asm_c323 + farcall Func_10af9 + pop de + pop bc + pop hl + ret + +Func_c32b: ; c32b (3:432b) + ld a, l + ld [wd10f], a + ld a, h + ld [wd110], a + jr Func_c2db + +Func_c335: ; c335 (3:4335) + ld a, [wOBP0] + ld [wd10c], a + ld a, [wOBP1] + ld [wd10d], a + ld hl, wObjectPalettesCGB + ld de, wd0cc + ld bc, 8 palettes + call CopyDataHLtoDE_SaveRegisters + ret + +Func_c34e: ; c34e (3:434e) + ld a, [wd10c] + ld [wOBP0], a + ld a, [wd10d] + ld [wOBP1], a + ld hl, wd0cc + ld de, wObjectPalettesCGB + ld bc, 8 palettes + call CopyDataHLtoDE_SaveRegisters + call SetFlushAllPalettes + ret + +Func_c36a: ; c36a (3:436a) + xor a + ld [wd323], a + ld a, [wCurMap] + cp POKEMON_DOME_ENTRANCE + jr nz, .asm_c379 + xor a + ld [wd324], a +.asm_c379 + ret +; 0xc37a + + INCROM $c37a, $c41c + +Func_c41c: ; c41c (3:441c) + ld a, [wd332] + sub $40 + ld [wSCXBuffer], a + ld a, [wd333] + sub $40 + ld [wSCYBuffer], a + call Func_c430 + ret + +Func_c430: ; c430 (3:4430) + push bc + ld a, [wd237] + sla a + sla a + sla a + ld b, a + ld a, [wSCXBuffer] + cp $b1 + jr c, .asm_c445 + xor a + jr .asm_c449 +.asm_c445 + cp b + jr c, .asm_c449 + ld a, b +.asm_c449 + ld [wSCXBuffer], a + ld a, [wd238] + sla a + sla a + sla a + ld b, a + ld a, [wSCYBuffer] + cp $b9 + jr c, .asm_c460 + xor a + jr .asm_c464 +.asm_c460 + cp b + jr c, .asm_c464 + ld a, b +.asm_c464 + ld [wSCYBuffer], a + pop bc + ret + +Func_c469: ; c469 (3:4469) + ld a, [wSCXBuffer] + add $4 + and $f8 + rrca + rrca + rrca + ld [wd233], a + ld a, [wSCYBuffer] + add $4 + and $f8 + rrca + rrca + rrca + ld [wd234], a + ret + +SetScreenScrollWram: ; c484 (3:4484) + ld a, [wSCXBuffer] + ld [wSCX], a + ld a, [wSCYBuffer] + ld [wSCY], a + ret + +SetScreenScroll: ; c491 (3:4491) + ld a, [wSCX] + ldh [hSCX], a + ld a, [wSCY] + ldh [hSCY], a + ret + +Func_c49c: ; c49c (3:449c) + ld a, [wPlayerXCoord] + and $1f + ld [wPlayerXCoord], a + rlca + rlca + rlca + ld [wd332], a + ld a, [wPlayerYCoord] + and $1f + ld [wPlayerYCoord], a + rlca + rlca + rlca + ld [wd333], a + ret + +Func_c4b9: ; c4b9 (3:44b9) + xor a + ld [wd4ca], a + ld [wd4cb], a + ld a, $1d + farcall Func_80418 + ld b, $0 + ld a, [wConsole] + cp $2 + jr nz, .asm_c4d1 + ld b, $1e +.asm_c4d1 + ld a, b + ld [wd337], a + ld a, $0 + farcall Func_1299f + ld a, [wWhichSprite] + ld [wd336], a + ld b, $2 + ld a, [wCurMap] + cp OVERWORLD_MAP + jr z, .asm_c4ee + ld a, [wd0be] + ld b, a +.asm_c4ee + ld a, b + ld [wd334], a + call Func_c5e9 + ld a, [wCurMap] + cp OVERWORLD_MAP + call nz, Func_c6f7 + xor a + ld [wd335], a + ld [wd338], a + ld a, [wCurMap] + cp OVERWORLD_MAP + jr nz, .asm_c50f + farcall Func_10fde +.asm_c50f + ret + +Func_c510: ; c510 (3:4510) + ld a, [wd336] + ld [wWhichSprite], a + ld a, [wd335] + bit 4, a + ret nz + bit 0, a + call z, Func_c5ac + ld a, [wd335] + or a + jr z, .asm_c535 + bit 0, a + call nz, Func_c66c + ld a, [wd335] + bit 1, a + call nz, Func_c6dc + ret +.asm_c535 + ldh a, [hButtonsPressed] + and START + call nz, Func_c74d + ret + +Func_c53d: ; c53d (3:453d) + ld a, [wd336] + ld [wWhichSprite], a + ld a, [wd335] + bit 0, a + call nz, Func_c687 + ld a, [wd335] + bit 1, a + call nz, Func_c6dc + ret + +Func_c554: ; c554 (3:4554) + ld a, [wd336] + ld [wWhichSprite], a + ld a, [wCurMap] + cp OVERWORLD_MAP + jr nz, .asm_c566 + farcall Func_10e28 + ret +.asm_c566 + push hl + push bc + push de + call Func_c58b + ld a, [wSCXBuffer] + ld d, a + ld a, [wSCYBuffer] + ld e, a + ld c, SPRITE_ANIM_COORD_X + call GetSpriteAnimBufferProperty + ld a, [wd332] + sub d + add $8 + ld [hli], a + ld a, [wd333] + sub e + add $10 + ld [hli], a + pop de + pop bc + pop hl + ret + +Func_c58b: ; c58b (3:458b) + push hl + ld a, [wPlayerXCoord] + ld b, a + ld a, [wPlayerYCoord] + ld c, a + call GetFloorObjectFromPos + and $10 + push af + ld c, SPRITE_ANIM_FIELD_0F + call GetSpriteAnimBufferProperty + pop af + ld a, [hl] + jr z, .asm_c5a7 + or $80 + jr .asm_c5a9 +.asm_c5a7 + and $7f +.asm_c5a9 + ld [hl], a + pop hl + ret + +Func_c5ac: ; c5ac (3:45ac) + ldh a, [hButtonsHeld] + and D_PAD + jr z, .asm_c5bf + call Func_c5cb + call Func_c5fe + ld a, [wd335] + and $1 + jr nz, .asm_c5ca +.asm_c5bf + ldh a, [hButtonsPressed] + and A_BUTTON + jr z, .asm_c5ca + call Func_c71e + jr .asm_c5ca +.asm_c5ca + ret + +Func_c5cb: ; c5cb (3:45cb) + call Func_c5d5 +Func_c5ce: ; c5ce (3:45ce) + ld [wd334], a + call Func_c5e9 + ret + +Func_c5d5: ; c5d5 (3:45d5) + push hl + ld hl, Unknown_c5e5 + or a + jr z, .asm_c5e2 +.asm_c5dc + rlca + jr c, .asm_c5e2 + inc hl + jr .asm_c5dc +.asm_c5e2 + ld a, [hl] + pop hl + ret + +Unknown_c5e5: ; c5e5 (3:45e5) + db $02,$00,$03,$01 + +Func_c5e9: ; c5e9 (3:45e9) + push bc + ld a, [wd336] + ld [wWhichSprite], a + ld a, [wd337] + ld b, a + ld a, [wd334] + add b + farcall Func_12ab5 + pop bc + ret + +Func_c5fe: ; c5fe (3:45fe) + push bc + call Func_c653 + call AttemptScriptedMovement + pop bc + ret + +StartScriptedMovement: ; c607 (3:4607) + push bc + ld a, [wd336] + ld [wWhichSprite], a + ld a, [wd339] + call FindScriptedMovementWithOffset + call AttemptScriptedMovement + pop bc + ret + +; bc is the location the player is being scripted to move towards. +AttemptScriptedMovement: ; c619 (3:4619) + push hl + push bc + ld a, b + cp $1f + jr nc, .quit_movement + ld a, c + cp $1f + jr nc, .quit_movement + call GetFloorObjectFromPos + and $40 | $80 ; the two impassable objects found in the floor map + jr nz, .quit_movement + ld a, b + ld [wPlayerXCoord], a + ld a, c + ld [wPlayerYCoord], a + ld a, [wd335] ; I believe everything starting here is animation related. + or $1 + ld [wd335], a + ld a, $10 + ld [wd338], a + ld c, SPRITE_ANIM_FIELD_0F + call GetSpriteAnimBufferProperty + set 2, [hl] + ld c, SPRITE_ANIM_MOVEMENT_COUNTER + call GetSpriteAnimBufferProperty + ld a, $4 + ld [hl], a +.quit_movement + pop bc + pop hl + ret + +Func_c653: ; c653 (3:4653) + ld a, [wd334] + +FindScriptedMovementWithOffset: ; c656 (3:4656) + rlca + ld c, a + ld b, $0 + push hl + ld hl, ScriptedMovementOffsetTable + add hl, bc + ld a, [wPlayerXCoord] + add [hl] + ld b, a + inc hl + ld a, [wPlayerYCoord] + add [hl] + ld c, a + pop hl + ret + +Func_c66c: ; c66c (3:466c) + push hl + push bc + ld c, $1 + ldh a, [hButtonsHeld] + bit B_BUTTON_F, a + jr z, .asm_c67e + ld a, [wd338] + cp $2 + jr c, .asm_c67e + inc c +.asm_c67e + ld a, [wd334] + call Func_c694 + pop bc + pop hl + ret + +Func_c687: ; c687 (3:4687) + push bc + ld a, [wd33a] + ld c, a + ld a, [wd339] + call Func_c694 + pop bc + ret + +Func_c694: ; c694 (3:4694) + push hl + push bc + push bc + rlca + ld c, a + ld b, $0 + ld hl, Unknown_396b + add hl, bc + pop bc +.asm_c6a0 + push hl + ld a, [hli] + or a + call nz, Func_c6cc + ld a, [hli] + or a + call nz, Func_c6d4 + pop hl + ld a, [wd338] + dec a + ld [wd338], a + jr z, .asm_c6b8 + dec c + jr nz, .asm_c6a0 +.asm_c6b8 + ld a, [wd338] + or a + jr nz, .asm_c6c3 + ld hl, wd335 + set 1, [hl] +.asm_c6c3 + call Func_c41c + call Func_c469 + pop bc + pop hl + ret + +Func_c6cc: ; c6cc (3:46cc) + push hl + ld hl, wd332 + add [hl] + ld [hl], a + pop hl + ret + +Func_c6d4: ; c6d4 (3:46d4) + push hl + ld hl, wd333 + add [hl] + ld [hl], a + pop hl + ret + +Func_c6dc: ; c6dc (3:46dc) + push hl + ld hl, wd335 + res 0, [hl] + res 1, [hl] + call Func_c6f7 + call Func_3997 + call Func_c70d + ld a, [wd0bf] + cp $1 + call z, Func_c9c0 + pop hl + ret + +Func_c6f7: ; c6f7 (3:46f7) + ld a, [wd336] + ld [wWhichSprite], a + ld c, SPRITE_ANIM_FIELD_0F + call GetSpriteAnimBufferProperty + res 2, [hl] + ld c, SPRITE_ANIM_MOVEMENT_COUNTER + call GetSpriteAnimBufferProperty + ld a, $ff + ld [hl], a + ret + +Func_c70d: ; c70d (3:470d) + push hl + ld hl, wd0bb + ld a, [wCurMap] + cp [hl] + jr z, .asm_c71c + ld hl, wd0b4 + set 4, [hl] +.asm_c71c + pop hl + ret + +Func_c71e: ; c71e (3:471e) + ld a, $ff + ld [wd3b6], a + call Func_c653 + call GetFloorObjectFromPos + and $40 + jr z, .asm_c73d + farcall Func_1c72e + jr c, .asm_c73d + ld a, [wd3aa] + ld [wd3b6], a + ld a, $2 + jr .asm_c748 +.asm_c73d + call Func_3a5e + jr nc, .asm_c746 + ld a, $3 + jr .asm_c748 +.asm_c746 + or a + ret +.asm_c748 + ld [wd0bf], a + scf + ret + +Func_c74d: ; c74d (3:474d) + push hl + push bc + push de + call MainMenu_c75a + call CloseDialogueBox + pop de + pop bc + pop hl + ret + +MainMenu_c75a: ; c75a (3:475a) + call PauseSong + ld a, MUSIC_PAUSE_MENU + call PlaySong + call Func_c797 +.asm_c765 + ld a, $1 + call Func_c29b +.asm_c76a + call DoFrameIfLCDEnabled + call HandleMenuInput + jr nc, .asm_c76a + ld a, e + ld [wd0b8], a + ldh a, [hCurrentMenuItem] + cp e + jr nz, .asm_c793 + cp $5 + jr z, .asm_c793 + call Func_c2a3 + ld a, [wd0b8] + ld hl, PointerTable_c7a2 + call JumpToFunctionInTable + ld hl, Func_c797 + call Func_c32b + jr .asm_c765 +.asm_c793 + call ResumeSong + ret + +Func_c797: ; c797 (3:4797) + ld a, [wd0b8] + ld hl, Unknown_cd98 + farcall Func_111e9 + ret + +PointerTable_c7a2: ; c7a2 (3:47a2) + dw Func_c7ae + dw Func_c7b3 + dw Func_c7b8 + dw Func_c7cc + dw Func_c7e0 + dw Func_c7e5 + +Func_c7ae: ; c7ae (3:47ae) + farcall Func_10059 + ret + +Func_c7b3: ; c7b3 (3:47b3) + farcall Func_100a2 + ret + +Func_c7b8: ; c7b8 (3:47b8) + xor a + ldh [hSCX], a + ldh [hSCY], a + call Set_OBJ_8x16 + farcall Func_1288c + farcall Func_8db0 + call Set_OBJ_8x8 + ret + +Func_c7cc: ; c7cc (3:47cc) + xor a + ldh [hSCX], a + ldh [hSCY], a + call Set_OBJ_8x16 + farcall Func_1288c + farcall Func_a288 + call Set_OBJ_8x8 + ret + +Func_c7e0: ; c7e0 (3:47e0) + farcall Func_10548 + ret + +Func_c7e5: ; c7e5 (3:47e5) + farcall Func_103d2 + ret + +PC_c7ea: ; c7ea (3:47ea) + ld a, MUSIC_PC_MAIN_MENU + call PlaySong + call Func_c241 + call $4915 + call DoFrameIfLCDEnabled + ldtx hl, TurnedPCOnText + call Func_2c73 + call $484e +.asm_c801 + ld a, $1 + call Func_c29b +.asm_c806 + call DoFrameIfLCDEnabled + call HandleMenuInput + jr nc, .asm_c806 + ld a, e + ld [wd0b9], a + ldh a, [hCurrentMenuItem] + cp e + jr nz, .asm_c82f + cp $4 + jr z, .asm_c82f + call Func_c2a3 + ld a, [wd0b9] + ld hl, $4846 + call JumpToFunctionInTable + ld hl, $484e + call Func_c32b + jr .asm_c801 +.asm_c82f + call Func_c135 + call DoFrameIfLCDEnabled + ldtx hl, TurnedPCOffText + call Func_c891 + call CloseDialogueBox + xor a + ld [wd112], a + call Func_39fc + ret +; 0xc846 + + INCROM $c846, $c891 + +Func_c891: ; c891 (3:4891) + push hl + ld a, [wd0c1] + bit 0, a + jr z, .asm_c8a1 + ld hl, wd3b9 + ld a, [hli] + or [hl] + call nz, Func_c135 + +.asm_c8a1 + xor a + ld hl, wd3b9 + ld [hli], a + ld [hl], a + pop hl + ld a, $1 + call Func_c29b + call Func_c241 + call $4915 + call DoFrameIfLCDEnabled + call Func_2c73 + ret + +Func_c8ba: ; c8ba (3:48ba) + ld a, e + or d + jr z, Func_c891 + push hl + ld a, [wd0c1] + bit 0, a + jr z, .asm_c8d4 + ld hl, wd3b9 + ld a, [hli] + cp e + jr nz, .asm_c8d1 + ld a, [hl] + cp d + jr z, .asm_c8d4 + +.asm_c8d1 + call Func_c135 + +.asm_c8d4 + ld hl, wd3b9 + ld [hl], e + inc hl + ld [hl], d + pop hl + ld a, $1 + call Func_c29b + call Func_c241 + call $4915 + call DoFrameIfLCDEnabled + call $2c62 + ret +; 0xc8ed + +Func_c8ed: ; c8ed (3:c8ed) + push hl + push bc + push de + push hl + ld a, $1 + call Func_c29b + call $4915 + call DoFrameIfLCDEnabled + pop hl + ld a, l + or h + jr z, .asm_c90e + push hl + xor a + ld hl, wd3b9 + ld [hli], a + ld [hl], a + pop hl + call YesOrNoMenuWithText + jr .asm_c911 + +.asm_c90e + call YesOrNoMenu + +.asm_c911 + pop de + pop bc + pop hl + ret + +Func_c915: ; c915 (3:4915) + push bc + push de + ld de, $000c + ld bc, $1406 + call AdjustCoordinatesForWindow + call $43ca + pop de + pop bc + ret + +Func_c926: ; c926 (3:4926) + push bc + call Func_39c3 + ld a, [wd3aa] + ld [wd3b6], a + farcall Func_1c768 + pop bc + +Func_c935: ; c935 (3:4935) + push hl + ld hl, wd0c6 + ld [hl], c + inc hl + ld [hl], b + ld a, $3 + ld [wd0bf], a + pop hl + ret + +Func_c943: ; c943 (3:4943) + push hl + push bc + push de + ld l, $0 + call Func_3abd + jr nc, .asm_c98f +.asm_c94d + ld a, l + ld [wd4c4], a + ld a, h + ld [wd4c5], a + ld a, $4 + ld [wd4c6], a + ld de, wd3ab + ld bc, $0006 + call Func_3bf5 + ld a, [wd3ab] + or a + jr z, .asm_c98f + push hl + ld a, [wd3af] + ld l, a + ld a, [wd3b0] + ld h, a + or l + jr z, .asm_c97a + call Func_3c45 + jr nc, .asm_c988 +.asm_c97a + ld a, [wd3ab] + farcall Func_11857 + call Func_c998 + farcall Func_1c485 +.asm_c988 + pop hl + ld bc, $0006 + add hl, bc + jr .asm_c94d +.asm_c98f + ld l, $2 + call Func_c9c2 + pop de + pop bc + pop hl + ret + +Func_c998: ; c998 (3:4998) + ld a, [wd3ab] + cp $22 + ret nz + ld a, [wd3d0] + or a + ret z + ld b, $4 + ld a, [wConsole] + cp $2 + jr nz, .asm_c9ae + ld b, $e +.asm_c9ae + ld a, b + ld [wd3b1], a + ld a, $0 + ld [wd3b2], a + ret + +Func_c9b8: ; c9b8 (3:49b8) + ld l, $8 + jr Func_c9c2 + +Func_c9bc: ; c9bc (3:49bc) + ld l, $a + jr Func_c9c2 + +Func_c9c0: ; c9c0 (3:49c0) + ld l, $c + +Func_c9c2: ; c9c2 (3:49c2) + call Func_3abd + ret nc + jp hl + +Func_c9c7: ; c9c7 (3:49c7) + ld l, $e + jr Func_c9c2 + +Func_c9cb: ; c9cb (3:49cb) + push hl + push bc + ld hl, wEventFlags + ld bc, $0040 +.asm_c9d3 + xor a + ld [hli], a + dec bc + ld a, b + or c + jr nz, .asm_c9d3 + pop bc + pop hl + ret + +Func_c9dd: ; c9dd (3:49dd) + xor a + ld [wd411], a + call Func_c9e8 + call Func_ca0e + ret + +Func_c9e8: ; c9e8 (3:49e8) + ld c, $0 + call Func_ca69 + db $13 + cp $2 + jr c, .asm_ca04 +.asm_c9f2 + call UpdateRNGSources + and $3 + ld c, a + ld b, $0 + ld hl, Unknown_ca0a + add hl, bc + ld a, [wd0bb] + cp [hl] + jr z, .asm_c9f2 +.asm_ca04 + ld a, c + call Func_ca8f + db $34 + ret + +Unknown_ca0a: ; ca0a (3:4a04) + INCROM $ca0a, $ca0e + +Func_ca0e: ; ca0e (3:4a0e) + ld a, [wd32e] + cp $b + jr z, .asm_ca68 + call Func_ca69 + db $22 + or a + jr nz, .asm_ca4a + call Func_ca69 + db $40 + cp $7 + jr z, .asm_ca68 + or a + jr z, .asm_ca33 + cp $2 + jr z, .asm_ca62 + ld c, $1 + call Func_ca8f + db $40 + jr .asm_ca62 +.asm_ca33 + call Func_ca69 + db $3f + cp $7 + jr z, .asm_ca68 + or a + jr z, .asm_ca68 + cp $2 + jr z, .asm_ca68 + ld c, $1 + call Func_ca8f + db $3f + jr .asm_ca68 +.asm_ca4a + call UpdateRNGSources + ld c, $1 + and $3 + or a + jr z, .asm_ca56 + ld c, $0 +.asm_ca56 + call Func_ca8f + db $41 + jr .asm_ca5c +.asm_ca5c + ld c, $7 + call Func_ca8f + db $40 +.asm_ca62 + ld c, $7 + call Func_ca8f + db $3f +.asm_ca68 + ret + +Func_ca69: ; ca69 (3:4a69) + call Func_cab3 +CheckIfEventFlagSet: ; ca6c (3:4a6c) + push hl + push bc + call GetEventFlagMod + ld c, [hl] + ld a, [wd3d1] +.asm_ca75 + bit 0, a + jr nz, .asm_ca7f + srl a + srl c + jr .asm_ca75 +.asm_ca7f + and c + pop bc + pop hl + or a + ret +; 0xca84 + + INCROM $ca84, $ca8f + +Func_ca8f: ; ca8f (3:4a8f) + call Func_cab3 + +; a - pointer on table for cb1d, c - set or reset control bit +ModifyEventFlags: ; ca92 (3:4a92) + push hl + push bc + call GetEventFlagMod + ld a, [wd3d1] +.asm_ca9a + bit 0, a + jr nz, .asm_caa4 + srl a + sla c + jr .asm_ca9a +.asm_caa4 + ld a, [wd3d1] + and c + ld c, a + ld a, [wd3d1] + cpl + and [hl] + or c + ld [hl], a + pop bc + pop hl + ret + +Func_cab3: ; cab3 (3:4ab3) + push hl + ld hl, sp+$4 + push bc + ld c, [hl] + inc hl + ld b, [hl] + ld a, [bc] + inc bc + ld [hl], b + dec hl + ld [hl], c + pop bc + pop hl + ret +; 0xcac2 + + INCROM $cac2, $cac5 + +SetEventFlags: ; cac5 (3:4ac5) + push bc + ld c, $ff + call ModifyEventFlags + pop bc + ret +; 0xcacd + + INCROM $cacd, $cad0 + +Func_cad0: ; cad0 (3:4ad0) + push bc + ld c, $0 + call ModifyEventFlags + pop bc + ret + +Func_cad8: ; cad8 (3:4ad8) + push hl + push bc + ld hl, $4b15 + ld bc, $0008 +.asm_cae0 + ld a, [hli] + call CheckIfEventFlagSet + jr z, .asm_cae7 + inc b + +.asm_cae7 + dec c + jr nz, .asm_cae0 + ld c, b + call Func_ca8f + ld l, $79 + push af + cp $8 + jr nc, .asm_caff + cp $7 + jr nc, .asm_cb05 + cp $3 + jr nc, .asm_cb0b + jr .asm_cb11 + +.asm_caff + ld a, $c + farcall $4, $4a70 + +.asm_cb05 + ld a, $b + farcall $4, $4a70 + +.asm_cb0b + ld a, $a + farcall $4, $4a70 + +.asm_cb11 + pop af + pop bc + pop hl + ret +; 0xcb15 + + INCROM $cb15, $cb1d + +GetEventFlagMod: ; cb1d (3:4b1d) + push bc + ld c, a + ld b, $0 + sla c + rl b + ld hl, EventFlagMods + add hl, bc + ld a, [hli] + ld c, a + ld a, [hl] + ld [wd3d1], a + ld b, $0 + ld hl, wEventFlags + add hl, bc + pop bc + ret + +; offset - bytes to set or reset +EventFlagMods: ; cb37 (3:4b37) + INCROM $cb37, $cc32 + +Func_cc32: ; cc32 (3:4c32) + push hl + ld hl, wd0c8 + ld e, [hl] + inc hl + ld d, [hl] + pop hl + call Func_c8ba + ret +; 0xcc3e + + INCROM $cc3e, $cc42 + +; called when pressing a in front of an object. creates a pointer to the data right after an RST20 +; was called, then runs RunOverworldScript to handle that data +RST20: ; cc42 (3:4c42) + pop hl + ld a, l + ld [wOWScriptPointer], a + ld a, h + ld [wOWScriptPointer+1], a + xor a + ld [wBreakOWScriptLoop], a +.asm_cc4f + call RunOverworldScript + ld a, [wBreakOWScriptLoop] ; if you break out, it jumps + or a + jr z, .asm_cc4f + ld hl, wOWScriptPointer + ld a, [hli] + ld c, a + ld b, [hl] + push bc + ret + +IncreaseOWScriptPointerBy1: ; cc60 (3:4c60) + ld a, 1 + jr IncreaseOWScriptPointer +IncreaseOWScriptPointerBy2: ; cc64 (3:4c64) + ld a, 2 + jr IncreaseOWScriptPointer +IncreaseOWScriptPointerBy4: ; cc68 (3:4c68) + ld a, 4 + jr IncreaseOWScriptPointer +IncreaseOWScriptPointerBy5: ; cc6c (3:4c6c) + ld a, 5 + jr IncreaseOWScriptPointer +IncreaseOWScriptPointerBy6: ; cc70 (3:4c70) + ld a, 6 + jr IncreaseOWScriptPointer +IncreaseOWScriptPointerBy7: ; cc74 (3:4c74) + ld a, 7 + jr IncreaseOWScriptPointer +IncreaseOWScriptPointerBy3: ; cc78 (3:4c78) + ld a, 3 + +IncreaseOWScriptPointer: ; cc7a (3:4c7a) + ld c, a + ld a, [wOWScriptPointer] + add c + ld [wOWScriptPointer], a + ld a, [wOWScriptPointer+1] + adc 0 + ld [wOWScriptPointer+1], a + ret + +SetOWScriptPointer: ; cc8b (3:4c8b) + ld hl, wOWScriptPointer + ld [hl], c + inc hl + ld [hl], b + ret +; 0xcc92 + + INCROM $cc92, $cc96 + +GetOWSArgs1AfterPointer: ; cc96 (3:4c96) + ld a, $1 + jr GetOWSArgsAfterPointer + +GetOWSArgs2AfterPointer: ; cc9a (3:4c9a) + ld a, $2 + jr GetOWSArgsAfterPointer +GetOWSArgs3AfterPointer: ; cc9e (3:4c9e) + ld a, $3 + +GetOWSArgsAfterPointer: ; cca0 (3:4ca0) + push hl + ld l, a + ld a, [wOWScriptPointer] + add l + ld l, a + ld a, [wOWScriptPointer+1] + adc $0 + ld h, a + ld a, [hli] + ld c, a + ld b, [hl] + pop hl + or b + ret + +Func_ccb3: ; ccb3 (3:4cb3) + ld a, $ff + ld [wd415], a + ret + +Func_ccb9: ; ccb9 (3:4cb9) + xor a + ld [wd415], a + ret + +OWScript_EndScriptLoop1: ; ccbe (3:4cbe) +OWScript_EndScriptLoop2: ; ccbe (3:4cbe) +OWScript_EndScriptLoop3: ; ccbe (3:4cbe) +OWScript_EndScriptLoop4: ; ccbe (3:4cbe) +OWScript_EndScriptLoop5: ; ccbe (3:4cbe) +OWScript_EndScriptLoop6: ; ccbe (3:4cbe) +OWScript_EndScriptLoop7: ; ccbe (3:4cbe) +OWScript_EndScriptLoop8: ; ccbe (3:4cbe) +OWScript_EndScriptLoop9: ; ccbe (3:4cbe) +OWScript_EndScriptLoop10: ; ccbe (3:4cbe) + ld a, $01 + ld [wBreakOWScriptLoop], a + jp IncreaseOWScriptPointerBy1 + +OWScript_CloseTextBox: ; ccc6 (3:4cc6) + call CloseDialogueBox + jp IncreaseOWScriptPointerBy1 + +OWScript_EndScriptCloseText: ; cccc (3:4ccc) + call OWScript_CloseTextBox + call OWScript_EndScriptLoop1 + pop hl + ret + +; args: 2-Text String Index +OWScript_PrintTextString: ; ccd4 (3:4cd4) + ld l, c + ld h, b + call Func_cc32 + jp IncreaseOWScriptPointerBy3 + +Func_ccdc: ; ccdc (3:4cdc) + ld l, c + ld h, b + call Func_c891 + jp IncreaseOWScriptPointerBy3 + +Func_cce4: ; cce4 (3:4ce4) + ld a, $1 + ld [wcd9a], a + +; Asks the player a question then jumps if they answer yes +OWScript_AskQuestionJump: ; cce9 (3:4ce9) + ld l, c + ld h, b + call Func_c8ed + ld a, [hCurrentMenuItem] + ld [wd415], a + jr c, .asm_ccfe + call GetOWSArgs3AfterPointer + jr z, .asm_ccfe + jp SetOWScriptPointer + +.asm_ccfe + jp IncreaseOWScriptPointerBy5 + +; args - prize cards, deck id, duel theme index +; sets a battle up, doesn't start until we break out of the script system. +OWScript_StartBattle: ; cd01 (3:4d01) + call Func_cd66 + ld a, [wd3b6] + ld l, $0 + call Func_39ad + ld a, [hl] + farcall Func_118d3 + ld a, [wcc19] + cp $ff + jr nz, .asm_cd26 + ld a, [wd695] + ld c, a + ld b, $0 + ld hl, $4d63 + add hl, bc + ld a, [hl] + ld [wcc19], a +.asm_cd26 + ld a, [wd3b6] + ld l, $0 + call Func_39ad + ld a, [hl] +asm_cd2f + ld [wd0c4], a + ld [wcc14], a + push af + farcall Func_1c557 + ld [wd0c5], a + pop af + farcall Func_118a7 + ld a, GAME_EVENT_DUEL + ld [wGameEvent], a + ld hl, wd0b4 + set 6, [hl] + jp IncreaseOWScriptPointerBy4 + +Func_cd4f: ; cd4f (3:4d4f) + call Func_cd66 + ld a, [wd696] + farcall Func_118bf + ld a, $16 + ld [wMatchStartTheme], a + ld a, [wd696] + jr asm_cd2f + +Unknown_dd63: ; cd4f (3:4d4f) + INCROM $cd63, $cd66 + +Func_cd66: ; cd66 (3:4d66) + ld a, c + ld [wcc18], a + ld a, b + ld [wcc19], a + call GetOWSArgs3AfterPointer + ld a, c + ld [wDuelTheme], a + ret + +Func_cd76: ; cd76 (3:4d76) + ld a, GAME_EVENT_BATTLE_CENTER + ld [wGameEvent], a + ld hl, wd0b4 + set 6, [hl] + jp IncreaseOWScriptPointerBy1 + +Func_cd83: ; cd83 (3:4d83) + ld a, [wd415] + or a + jr nz, .asm_cd8c + call GetOWSArgs3AfterPointer +.asm_cd8c + ld l, c + ld h, b + call Func_cc32 + jp IncreaseOWScriptPointerBy5 + +Func_cd94: ; cd94 (3:4d94) + call Func_ca69 + ld b, h +Unknown_cd98: + dec a + and $3 + add a + inc a + call GetOWSArgsAfterPointer + ld l, c + ld h, b + call Func_cc32 + jp IncreaseOWScriptPointerBy7 + +Func_cda8: ; cda8 (3:4da8) + ld a, [wd415] + or a + jr nz, .asm_cdb1 + call GetOWSArgs3AfterPointer +.asm_cdb1 + ld l, c + ld h, b + call Func_c891 + jp IncreaseOWScriptPointerBy5 + +OWScript_PrintTextCloseBox: ; cdb9 (3:4db9) + ld l, c + ld h, b + call Func_cc32 + call CloseDialogueBox + ld a, $1 + ld [wBreakOWScriptLoop], a + call IncreaseOWScriptPointerBy3 + pop hl + ret + +Func_cdcb: ; cdcb (3:4dcb) + ld a, [wd3b6] + ld [wd3aa], a +Func_4dd1: ; cdd1 (3:4dd1) + farcall Func_1c50a + jp IncreaseOWScriptPointerBy1 + +Func_cdd8: ; cdd8 (3:4dd8) + ld a, [wd3aa] + push af + ld a, [wd3ab] + push af + ld a, [wd696] + ld [wd3ab], a + call Func_39c3 + call Func_4dd1 + pop af + ld [wd3ab], a + pop af + ld [wd3aa], a + ret + +Func_cdf5: ; cdf5 (3:4df5) + ld a, [wd3aa] + push af + ld a, [wd3ab] + push af + ld a, [wd696] + ld [wd3ab], a + ld a, c + ld [wd3ac], a + ld a, b + ld [wd3ad], a + ld a, $2 + ld [wd3ae], a + ld a, [wd3ab] + farcall Func_11857 + farcall Func_1c485 + pop af + ld [wd3ab], a + pop af + ld [wd3aa], a + jp IncreaseOWScriptPointerBy3 + +Func_ce26: ; ce26 (3:4e26) + ld a, [wd3b6] + ld [wd3aa], a + farcall Func_1c455 + rlca + add c + ld l, a + ld a, b + adc $0 + ld h, a + ld c, [hl] + inc hl + ld b, [hl] + +Func_ce3a: ; ce3a (3:4e3a) + farcall Func_1c78d +.asm_ce3e + call DoFrameIfLCDEnabled + farcall Func_1c7de + jr nz, .asm_ce3e + jp IncreaseOWScriptPointerBy3 + +Func_ce4a: ; ce4a (3:4e4a) + ld a, [wd3b6] + ld [wd3aa], a + jr Func_ce3a + +Func_ce52: ; ce52 (3:4e52) + ld a, [wd3aa] + push af + ld a, [wd3ab] + push af + ld a, [wd696] +asm_ce5d + ld [wd3ab], a + call Func_39c3 + call Func_ce3a + pop af + ld [wd3ab], a + pop af + ld [wd3aa], a + ret + +Func_ce6f: ; ce6f (3:4e6f) + ld a, [wd3aa] + push af + ld a, [wd3ab] + push af + ld a, c + push af + call GetOWSArgs2AfterPointer + push bc + call IncreaseOWScriptPointerBy1 + pop bc + pop af + jr asm_ce5d + +Func_ce84: ; ce84 (3:4e84) + call Func_c135 + jp IncreaseOWScriptPointerBy1 + +; args: booster pack index, booster pack index, booster pack index +OWScript_GiveBoosterPacks: ; ce8a (3:4e8a) + xor a + ld [wd117], a + push bc + call Func_c2a3 + pop bc + push bc + ld a, c + farcall BoosterPack_1031b + ld a, 1 + ld [wd117], a + pop bc + ld a, b + cp $ff + jr z, .asm_ceb4 + farcall BoosterPack_1031b + call GetOWSArgs3AfterPointer + ld a, c + cp $ff + jr z, .asm_ceb4 + farcall BoosterPack_1031b +.asm_ceb4 + call Func_c2d4 + jp IncreaseOWScriptPointerBy4 + +Func_ceba: ; ceba (3:4eba) + xor a + ld [wd117], a + call Func_c2a3 + ld hl, $4edd +.asm_cec4 + ld a, [hl] + cp $ff + jr z, .asm_ced7 + push hl + farcall BoosterPack_1031b + ld a, $1 + ld [wd117], a + pop hl + inc hl + jr .asm_cec4 +.asm_ced7 + call Func_c2d4 + jp IncreaseOWScriptPointerBy1 +; 0xcedd + + INCROM $cedd, $cee2 + +Func_cee2: ; cee2 (3:4ee2) + call Func_c2a3 + ld a, c + cp $ff + jr z, .asm_cf09 + or a + jr nz, .asm_cef0 + ld a, [wd697] + +.asm_cef0 + push af + farcall Func_10000 + farcall Func_10031 + pop af + bank1call Func_7594 + call Func_c1a4 + call DoFrameIfLCDEnabled + call Func_c2d4 + jp IncreaseOWScriptPointerBy2 + +.asm_cf09 + xor a + jr .asm_cef0 + +Func_cf0c: ; cf0c (3:4f0c) + ld a, c + call GetCardCountInCollectionAndDecks + jr asm_cf16 + +Func_cf12: ; cf12 (3:4f12) + ld a, c + call GetCardCountInCollection + +asm_cf16 + or a + jr nz, asm_cf1f + +asm_cf19 + call Func_ccb9 + jp IncreaseOWScriptPointerBy4 + +asm_cf1f + call Func_ccb3 + call GetOWSArgs2AfterPointer + jr z, asm_cf2a + jp SetOWScriptPointer + +asm_cf2a + jp IncreaseOWScriptPointerBy4 + +Func_cf2d: ; cf2d (3:4f2d) + push bc + call IncreaseOWScriptPointerBy1 + pop bc + call GetRawAmountOfCardsOwned + ld a, h + cp b + jr nz, .asm_cf3b + ld a, l + cp c + +.asm_cf3b + jr nc, asm_cf1f + jr asm_cf19 + +Func_cf3f: ; cf3f (3:4f3f) + ld a, c + or a + jr nz, .asm_cf46 + ld a, [wd697] + +.asm_cf46 + call AddCardToCollection + jp IncreaseOWScriptPointerBy2 + +Func_cf4c: ; cf4c (3:4f4c) + ld a, c + call RemoveCardFromCollection + jp IncreaseOWScriptPointerBy2 + +Func_cf53: ; cf53 (3:4f53) + ld c, $1 + ld b, $0 +.asm_cf57 + ld a, c + call GetCardCountInCollection + add b + ld b, a + inc c + ld a, c + cp $8 + jr c, .asm_cf57 + ld a, b + or a + jr nz, Func_cf6d +Func_cf67: ; cf67 (3:4f67) + call Func_ccb9 + jp IncreaseOWScriptPointerBy3 + +Func_cf6d: ; cf6d (3:4f6d) + call Func_ccb3 + call GetOWSArgs1AfterPointer + jr z, .asm_cf78 + jp SetOWScriptPointer + +.asm_cf78 + jp IncreaseOWScriptPointerBy3 + +Func_cf7b: ; cf7b (3:4f7b) + ld c, $1 +.asm_cf7d + push bc + ld a, c + call GetCardCountInCollection + jr c, .asm_cf8c + ld b, a +.asm_cf85 + ld a, c + call RemoveCardFromCollection + dec b + jr nz, .asm_cf85 + +.asm_cf8c + pop bc + inc c + ld a, c + cp $8 + jr c, .asm_cf7d + jp IncreaseOWScriptPointerBy1 + +; This function doesn't look like a valid function, but it's pointed to in the table. +Func_cf96: ; cf96 (3:4f96) + ld c, $0 + call Func_ca69 + ld de, $28b7 + ld hl, $08fe + jr c, .asm_cfa4 + inc c + +.asm_cfa4 + call Func_ca69 + rla + cp $8 + jr c, .asm_cfad + inc c + +.asm_cfad + call Func_ca69 +.asm_cfb0 + jr nz, .asm_cfb0 + ld [$0138], sp + inc c + ld a, c + rlca + add $3 + call GetOWSArgsAfterPointer + jp SetOWScriptPointer + +Func_cfc0: ; cfc0 (3:4fc0) + call GetOWSArgs1AfterPointer + jp SetOWScriptPointer + +Func_cfc6: ; cfc6 (3:4fc6) + ld a, [wd3b6] + ld [wd3aa], a + ld a, c + farcall Func_1c52e + jp IncreaseOWScriptPointerBy2 + +Func_cfd4: ; cfd4 (3:4fd4) + call Func_ca69 + dec l + ld b, a +.asm_cfd9 + ld a, $5 + call Random + ld e, $1 + ld c, a + push bc + or a + jr z, .asm_cfea +.asm_cfe5 + sla e + dec c + jr nz, .asm_cfe5 + +.asm_cfea + ld a, e + and b + pop bc + jr nz, .asm_cfd9 + ld a, e + or b + push bc + ld c, a + call Func_ca8f + dec l + pop bc + ld b, $0 + ld hl, $5006 + add hl, bc + ld c, [hl] + call Func_ca8f + dec hl + jp IncreaseOWScriptPointerBy1 + + INCROM $d006, $d00b + +Func_d00b: ; d00b (3:500b) + sla c + ld b, $0 + ld hl, wTxRam2 + add hl, bc + push hl + call Func_ca69 + dec hl + ld e, a + ld d, $0 + call GetCardName + pop hl + ld [hl], e + inc hl + ld [hl], d + jp IncreaseOWScriptPointerBy2 + +Func_d025: ; d025 (3:5025) + call Func_ca69 + dec hl + call GetCardCountInCollectionAndDecks + jp c, Func_cf67 + jp Func_cf6d + +Func_d032: ; d032 (3:5032) + call Func_ca69 + dec hl + call GetCardCountInCollection + jp c, Func_cf67 + jp Func_cf6d + +Func_d03f: ; d03f (3:503f) + call Func_ca69 + dec hl + call RemoveCardFromCollection + jp IncreaseOWScriptPointerBy1 + +OWScript_ScriptJump: ; d049 (3:5049) + call GetOWSArgs1AfterPointer + jp SetOWScriptPointer + +Func_d04f: ; d04f (3:504f) + call Func_cad8 + jp IncreaseOWScriptPointerBy1 + +Func_d055: ; d055 (3:5055) + ld a, c + call Func_c5ce + jp IncreaseOWScriptPointerBy2 + + +OWScript_MovePlayer: ; 505c (3:505c) + ld a, c + ld [wd339], a + ld a, b + ld [wd33a], a + call StartScriptedMovement +.asm_d067 + call DoFrameIfLCDEnabled + call SetScreenScroll + call Func_c53d + ld a, [wd335] + and $03 + jr nz, .asm_d067 + call DoFrameIfLCDEnabled + call SetScreenScroll + jp IncreaseOWScriptPointerBy3 + +Func_d080: ; d080 (3:5080) + ld a, c + farcall Func_11893 + jp IncreaseOWScriptPointerBy2 + +Func_d088: ; d088 (3:5088) + ld a, c + ld [wd3ab], a + call GetOWSArgs2AfterPointer + call Func_c926 + jp IncreaseOWScriptPointerBy4 + +Func_d095: ; d095 (3:5095) + ld a, [wd3b6] + ld [wd3aa], a + push bc + call GetOWSArgs3AfterPointer + ld a, [wd3b6] + ld l, $5 + call Func_39ad + res 4, [hl] + ld a, [hl] + or c + ld [hl], a + pop bc + ld e, c + ld a, [wConsole] + cp $2 + jr nz, .asm_d0b6 + ld e, b + +.asm_d0b6 + ld a, e + farcall Func_1c57b + jp IncreaseOWScriptPointerBy4 + +Func_d0be: ; d0be (3:50be) + ld a, [wd3b6] + ld [wd3aa], a + ld a, c + ld c, b + ld b, a + farcall Func_1c461 + jp IncreaseOWScriptPointerBy3 + +Func_d0ce: ; d0ce (3:50ce) + push bc + call DoFrameIfLCDEnabled + pop bc + dec c + jr nz, Func_d0ce + jp IncreaseOWScriptPointerBy2 + +Func_d0d9: ; d0d9 (3:50d9) + ld a, [wd3b6] + ld [wd3aa], a + ld d, c + ld e, b + farcall Func_1c477 + ld a, e + cp c + jp nz, Func_d48a + ld a, d + cp b + jp nz, Func_d48a + jp Func_d490 + +Func_d0f2: ; d0f2 (3:50f2) + ld a, [wPlayerXCoord] + cp c + jp nz, Func_d48a + ld a, [wPlayerYCoord] + cp b + jp nz, Func_d48a + jp Func_d490 + +Func_d103: ; d103 (3:5103) + ld a, [wd3aa] + push af + ld a, [wd3ab] + push af + ld a, c + ld [wd3ab], a + call Func_39c3 + jr c, .asm_d119 + call $54d1 + jr .asm_d11c + +.asm_d119 + call $54e6 + +.asm_d11c + pop af + ld [wd3ab], a + pop af + ld [wd3aa], a + ret + +Func_d125: ; d125 (3:5125) + ld a, c + push af + call Func_c2a3 + pop af + farcall Medal_1029e + call Func_c2d4 + jp IncreaseOWScriptPointerBy2 + +Func_d135: ; d135 (3:5135) + sla c + ld b, $0 + ld hl, wTxRam2 + add hl, bc + push hl + ld a, [wd32e] + rlca + ld c, a + ld b, $0 + ld hl, $5151 + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + pop hl + ld [hl], e + inc hl + ld [hl], d + jp IncreaseOWScriptPointerBy2 + + INCROM $d153, $d16b + +Func_d16b: ; d16b (3:516b) + ld hl, wd0c8 + ld e, [hl] + inc hl + ld d, [hl] + push de + sla c + ld b, $0 + ld hl, wTxRam2 + add hl, bc + push hl + ld a, [wd696] + farcall Func_11893 + pop hl + ld a, [wd0c8] + ld [hli], a + ld a, [wd0c9] + ld [hl], a + pop de + ld hl, wd0c8 + ld [hl], e + inc hl + ld [hl], d + jp IncreaseOWScriptPointerBy2 + +Func_d195: ; d195 (3:5195) + ld a, [wd3ab] + push af + call Func_ca69 + ld b, l + inc a + ld c, a + call Func_ca8f + ld b, l + call Func_f580 + pop af + ld [wd3ab], a + jp IncreaseOWScriptPointerBy1 + +Func_d1ad: ; d1ad (3:51ad) + call MainMenu_c75a + jp IncreaseOWScriptPointerBy1 + +Func_d1b3: ; d1b3 (3:51b3) + call Func_ca69 + ld b, h + dec a + cp $2 + jr c, .asm_d1c3 + ld a, $d + call Random + add $2 + +.asm_d1c3 + ld hl, $51dc +asm_d1c6 + ld e, a + add a + add e + ld e, a + ld d, $0 + add hl, de + ld a, [hli] + ld [wd697], a + ld a, [hli] + ld [wTxRam2], a + ld a, [hl] + ld [wTxRam2 + 1], a + jp IncreaseOWScriptPointerBy1 + + INCROM $d1dc, $d209 + +Func_d209: ; d209 (3:5209) + call Func_ca69 + ld [hl], c + ld e, a +.asm_d20e + call UpdateRNGSources + ld d, $8 + and $3 + ld c, a + ld b, a +.asm_d217 + jr z, .asm_d21e + srl d + dec b + jr .asm_d217 + +.asm_d21e + ld a, d + and e + jr nz, .asm_d20e + push bc + ld b, $0 + ld hl, $5240 + add hl, bc + ld a, [hl] + call SetEventFlags + pop bc + ld hl, $5234 + ld a, c + jr asm_d1c6 + + INCROM $d234, $d244 + +Func_d244: ; d244 (3:5244) + ld a, c + farcall Func_80ba4 + jp IncreaseOWScriptPointerBy2 + +Func_d24c: ; d24c (3:524c) + ld hl, $525e + xor a + call Func_d28c + ld a, [wd695] + ld c, a + call Func_ca8f + halt + jp IncreaseOWScriptPointerBy1 + + INCROM $d25e, $d271 + +Func_d271: ; d271 (3:5271) + ld hl, $527b + xor a + call Func_d28c + jp IncreaseOWScriptPointerBy1 +; 0xd27b + + INCROM $d27b, $d28c + +Func_d28c: ; d28c (3:528c) + ld [wd416], a + push hl + call Func_c241 + call Func_c915 + call DoFrameIfLCDEnabled + pop hl + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + push hl + ld h, [hl] + ld l, a + or h + jr z, .asm_d2a8 + call Func_c8ba + +.asm_d2a8 + ld a, $1 + call Func_c29b + pop hl + inc hl + ld a, [hli] + push hl + ld h, [hl] + ld l, a + ld a, [wd416] + farcall Func_111e9 + pop hl + inc hl + ld a, [hli] + ld [wd417], a + push hl + +.asm_d2c1 + call DoFrameIfLCDEnabled + call HandleMenuInput + jr nc, .asm_d2c1 + ld a, [hCurrentMenuItem] + cp e + jr z, .asm_d2d9 + ld a, [wd417] + or a + jr z, .asm_d2c1 + ld e, a + ld [hCurrentMenuItem], a + +.asm_d2d9 + pop hl + ld a, [hli] + push hl + ld h, [hl] + ld l, a + ld a, e + ld [hl], a + add a + ld c, a + ld b, $0 + pop hl + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + or h + jr z, .asm_d2f5 + add hl, bc + ld a, [hli] + ld [wTxRam2], a + ld a, [hl] + ld [wTxRam2 + 1], a + +.asm_d2f5 + ret + +Func_d2f6: ; d2f6 (3:52f6) + ld hl, $530c + xor a + call Func_d28c + ld a, [wd694] + ld c, a + call Func_ca8f + ld [hl], l + xor a + ld [wd694], a + jp IncreaseOWScriptPointerBy1 +; 0xd30c + + INCROM $d30c, $d317 + +Func_d317: ; d317 (3:5317) + ld hl, $532b + ld a, [wd694] + call Func_d28c + ld a, [wd694] + ld c, a + call Func_ca8f + ld [hl], l + jp IncreaseOWScriptPointerBy1 + + + INCROM $d32b, $d336 + +DeckMachine_d336: ; d336 (3:5336) + push bc + call Func_c2a3 + call PauseSong + ld a, MUSIC_DECK_MACHINE + call PlaySong + call EmptyScreen + xor a + ldh [hSCX], a + ldh [hSCY], a + farcall Func_1288c + call EnableLCD + pop bc + ld a, c + or a + jr z, .asm_d360 + dec a + ld [wd0a9], a + farcall Func_ba04 + jr .asm_d364 +.asm_d360 + farcall Func_b19d +.asm_d364 + call ResumeSong + call Func_c2d4 + jp IncreaseOWScriptPointerBy2 + +Func_d36d: ; d36d (3:536d) + ld a, [wOWScriptPointer] + ld l, a + ld a, [wOWScriptPointer+1] + ld h, a + inc hl + ld a, [hli] + ld a, [hli] + ld [wd0bb], a + ld a, [hli] + ld [wd0bc], a + ld a, [hli] + ld [wd0bd], a + ld a, [hli] + ld [wd0be], a + ld hl, wd0b4 + set 4, [hl] + jp IncreaseOWScriptPointerBy6 + +Func_d38f: ; d38f (3:538f) + farcall Func_10c96 + jp IncreaseOWScriptPointerBy2 + +Func_d396: ; d396 (3:5396) + farcall Func_1157c + jp IncreaseOWScriptPointerBy2 + +Func_d39d: ; d39d (3:539d) + ld a, c + or a + jr nz, .asm_d3ac + farcall Func_10dba + ld c, a + call Func_ca8f + ld [hl], d + jr .asm_d3b6 + +.asm_d3ac + ld a, GAME_EVENT_GIFT_CENTER + ld [wGameEvent], a + ld hl, wd0b4 + set 6, [hl] + +.asm_d3b6 + jp IncreaseOWScriptPointerBy2 + +Func_d3b9: ; d3b9 (3:53b9) + call Func_3917 + ld a, GAME_EVENT_CREDITS + ld [wGameEvent], a + ld hl, wd0b4 + set 6, [hl] + jp IncreaseOWScriptPointerBy1 + +Func_d3c9: ; d3c9 (3:53c9) + ld a, c + farcall Func_10a70 + jp IncreaseOWScriptPointerBy2 + +Func_d3d1: ; d3d1 (3:53d1) + jp IncreaseOWScriptPointerBy1 + +Func_d3d4: ; d3d4 (3:53d4) + ld a, [wd693] + bank1call Func_7576 + jp IncreaseOWScriptPointerBy1 + + INCROM $d3dd, $d3e0 + +Func_d3e0: ; d3e0 (3:53e0) + ld a, $1 + ld [wd32e], a + farcall Func_11024 +.asm_d3e9 + call DoFrameIfLCDEnabled + farcall Func_11060 + ld a, [wd33e] + cp $2 + jr nz, .asm_d3e9 + farcall Func_10f2e + jp IncreaseOWScriptPointerBy1 + +Func_d3fe: ; d3fe (3:53fe) + ld a, c + ld [wd112], a + call PlaySong + jp IncreaseOWScriptPointerBy2 + +Func_d408: ; d408 (3:5408) + ld a, c + ld [wd111], a + jp IncreaseOWScriptPointerBy2 + +Func_d40f: ; d40f (3:540f) + ld a, c + call Func_3c83 + jp IncreaseOWScriptPointerBy2 + +Func_d416: ; d416 (3:5416) + ld a, c + call PlaySFX + jp IncreaseOWScriptPointerBy2 + +Func_d41d: ; d41d (3:541d) + call Func_39fc + jp IncreaseOWScriptPointerBy1 + +Func_d423: ; d423 (3:5423) + call PauseSong + jp IncreaseOWScriptPointerBy1 + +Func_d429: ; d429 (3:5429) + call ResumeSong + jp IncreaseOWScriptPointerBy1 + +Func_d42f: ; d42f (3:542f) + call Func_3c96 + jp IncreaseOWScriptPointerBy1 + +Func_d435: ; d435 (3:5435) + ld a, c + farcall Func_1c83d + jp IncreaseOWScriptPointerBy2 + +Func_d43d: ; d43d (3:543d) + ld a, GAME_EVENT_CHALLENGE_MACHINE + ld [wGameEvent], a + ld hl, wd0b4 + set 6, [hl] + jp IncreaseOWScriptPointerBy1 + +OWScript_CustomModifyEventFlags: ; d44a (3:544a) + ld a, c + ld c, b + call ModifyEventFlags + jp IncreaseOWScriptPointerBy3 + +Func_d452: ; d452 (3:5452) + ld a, c + push af + call CheckIfEventFlagSet + inc a + ld c, a + pop af + call ModifyEventFlags + jp IncreaseOWScriptPointerBy2 + +Func_d460: ; d460 (3:5460) + ld a, c + call CheckIfEventFlagSet + or a + jr z, asm_d46d +asm_d467 + call Func_ccb9 + jp IncreaseOWScriptPointerBy4 + +asm_d46d + call Func_ccb3 + call GetOWSArgs2AfterPointer + jr z, .asm_d478 + jp SetOWScriptPointer + +.asm_d478 + jp IncreaseOWScriptPointerBy4 + +OWScript_JumpIfFlagSet: ; d47b (3:547b) + ld a, c + call CheckIfEventFlagSet + or a + jr nz, asm_d46d + jr asm_d467 + +Func_d484: ; d484 (3:5484) + call Func_d4b6 + cp c + jr z, Func_d490 + +Func_d48a: ; d48a (3:548a) + call Func_ccb9 + jp IncreaseOWScriptPointerBy5 + +Func_d490: ; d490 (3:5490) + call Func_ccb3 + call GetOWSArgs3AfterPointer + jr z, .asm_d49b + jp SetOWScriptPointer + +.asm_d49b + jp IncreaseOWScriptPointerBy5 + +Func_d49e: ; d49e (3:549e) + call Func_d4b6 + cp c + jr nz, Func_d490 + jr Func_d48a + +Func_d4a6: ; d4a6 (3:54a6) + call Func_d4b6 + cp c + jr nc, Func_d490 + jr Func_d48a + +Func_d4ae: ; d4ae (3:54ae) + call Func_d4b6 + cp c + jr c, Func_d490 ; 0xd4b2 $dc + jr Func_d48a ; 0xd4b4 $d4 + +Func_d4b6: ; d4b6 (3:54b6) + ld a, c + ld c, b + call CheckIfEventFlagSet + ret + +OWScript_SetEventFlags: ; d4bc (3:54bc) + ld a, c + call SetEventFlags + jp IncreaseOWScriptPointerBy2 + +Func_d4c3: ; d4c3 (3:54c3) + ld a, c + call Func_cad0 + jp IncreaseOWScriptPointerBy2 + +Func_d4ca: ; d4ca (3:54ca) + ld a, c + call CheckIfEventFlagSet + or a + jr z, asm_d4e6 +Func_d4d1: + call Func_ccb3 + call GetOWSArgs2AfterPointer + jr z, .asm_d4dc + jp SetOWScriptPointer +.asm_d4dc + jp IncreaseOWScriptPointerBy4 + +OWScript_JumpIfFlagNotSet: + ld a, c + call CheckIfEventFlagSet + or a + jr z, Func_d4d1 +asm_d4e6 + call Func_ccb9 + jp IncreaseOWScriptPointerBy4 +; 0xd4ec + + INCROM $d4ec, $d753 + +OWSequence_d753: ; d753 (3:5753) + start_script + run_script OWScript_MovePlayer + db $00 + db $02 + run_script OWScript_MovePlayer + db $00 + db $02 + run_script OWScript_MovePlayer + db $00 + db $02 + run_script OWScript_MovePlayer + db $00 + db $02 + run_script OWScript_MovePlayer + db $00 + db $02 + run_script OWScript_MovePlayer + db $00 + db $02 + run_script OWScript_MovePlayer + db $00 + db $02 + run_script OWScript_MovePlayer + db $00 + db $02 + run_script OWScript_MovePlayer + db $00 + db $02 + run_script OWScript_PrintTextString + tx Text05e3 + run_script OWScript_CloseTextBox + run_script Func_d088 + db $07 + db $79 + db $57 + run_script OWScript_EndScriptLoop1 + ret + + start_script + run_script Func_ce4a + db $80 + db $58 + db $02 + + ; there's more to this script but it hasn't been disassembled yet + + INCROM $d77e, $e13f + +WaterClubMovePlayer: ; e13f (3:613f) + ld a, [wPlayerYCoord] + cp $8 + ret nz + call Func_ca69 + inc sp + cp $2 + ret nc + ld a, $21 + ld [wd3ab], a + ld bc, OWSequence_NotReadyToSeeAmy + jp Func_c926 + +WaterClubAfterDuel: ;e157 (3:6157) + ld hl, .after_duel_table + call FindEndOfBattleScript + ret + +.after_duel_table + dw $1f1f + dw OWSequence_BeatSara + dw OWSequence_LostToSara + + dw $2020 + dw OWSequence_BeatAmanda + dw OWSequence_LostToAmanda + + dw $2121 + dw $626c + dw $6260 + + dw $2222 + dw $6322 + dw $6344 + db $00 + +OWSequence_Sara: ; e177 (3:6177) + start_script + run_script OWScript_PrintTextString + tx Text042c + run_script OWScript_AskQuestionJump + tx Text042d + dw .yes_duel + run_script OWScript_PrintTextString + tx Text042e + run_script OWScript_EndScriptCloseText +.yes_duel + run_script OWScript_PrintTextString + tx Text042f + run_script OWScript_StartBattle + db 2 + db WATERFRONT_POKEMON_DECK_ID ; 6189 + db MUSIC_DUEL_THEME_1 + run_script OWScript_EndScriptCloseText + +OWSequence_BeatSara: ; e18c (3:618c) + start_script + run_script OWScript_SetEventFlags + db FLAG_BEAT_SARA + run_script OWScript_PrintTextString + tx Text0430 + run_script OWScript_GiveBoosterPacks + db BOOSTER_COLOSSEUM_WATER + db BOOSTER_COLOSSEUM_WATER + db NO_BOOSTER + run_script OWScript_PrintTextString + tx Text0431 + run_script OWScript_EndScriptCloseText + +OWSequence_LostToSara: ; e19a (03:619a) + start_script + run_script OWScript_PrintTextCloseBox + tx Text0432 + +OWSequence_Amanda: ; e19e (03:619e) + start_script + run_script OWScript_PrintTextString + tx Text0433 + run_script OWScript_AskQuestionJump + tx Text0434 + dw .yes_duel + run_script OWScript_PrintTextString + tx Text0435 + run_script OWScript_EndScriptCloseText +.yes_duel + run_script OWScript_PrintTextString + tx Text0436 + run_script OWScript_StartBattle + db 03 + db LONELY_FRIENDS_DECK_ID + db MUSIC_DUEL_THEME_1 + run_script OWScript_EndScriptCloseText + +OWSequence_BeatAmanda: ; e1b3 (03:61b3) + start_script + run_script OWScript_SetEventFlags + db FLAG_BEAT_AMANDA + run_script OWScript_PrintTextString + tx Text0437 + run_script OWScript_GiveBoosterPacks + db BOOSTER_MYSTERY_LIGHTNING_COLORLESS + db BOOSTER_MYSTERY_LIGHTNING_COLORLESS + db NO_BOOSTER + run_script OWScript_PrintTextString + tx Text0438 + run_script OWScript_EndScriptCloseText + +OWSequence_LostToAmanda: ; e1c1 (03:61c1) + start_script + run_script OWScript_PrintTextCloseBox + tx Text0439 + +OWSequence_NotReadyToSeeAmy: + INCROM $e1c5, $e21c + +OWSequence_Joshua: + start_script + run_script OWScript_JumpIfFlagNotSet + db FLAG_BEAT_AMANDA + dw .sara_and_amanda_not_beaten + run_script OWScript_JumpIfFlagNotSet + db FLAG_BEAT_SARA + dw .sara_and_amanda_not_beaten + run_script OWScript_ScriptJump + dw .beat_sara_and_amanda +.sara_and_amanda_not_beaten + run_script OWScript_CustomModifyEventFlags + db $33 ; offset on flagmod table + db $01 ; the control bit + run_script OWScript_PrintTextString + tx Text043b + run_script OWScript_EndScriptCloseText +.beat_sara_and_amanda + run_script OWScript_JumpIfFlagSet + db $33 + dw $623c + run_script OWScript_CustomModifyEventFlags + db $33 + db $01 + run_script OWScript_PrintTextString + tx Text043b + run_script OWScript_PrintTextString + tx Text043c + run_script Func_d484 + db $33 + db $01 + + INCROM $e23f, $e52c + +FindEndOfBattleScript: ; e52c (3:652c) + ld c, $0 + ld a, [wDuelResult] + or a ; cp DUEL_WIN + jr z, .player_won + ld c, $2 + +.player_won + ld a, [wd0c4] + ld b, a + ld de, $0005 +.check_enemy_byte_loop + ld a, [hli] + or a + ret z + cp b + jr z, .found_enemy + add hl, de + jr .check_enemy_byte_loop + +.found_enemy + ld a, [hli] + ld [wd3ab], a + ld b, $0 + add hl, bc + ld c, [hl] + inc hl + ld b, [hl] + jp Func_c926 +; 0xe553 + + INCROM $e553, $f580 + +Func_f580: ; f580 (3:7580) + call Func_ca69 + ld b, h + cp $3 + jr z, .asm_f596 + call Func_ca69 + ld b, l + cp $3 + ld d, $18 + jr nz, .asm_f598 + ld a, $2 + jr .asm_f5ac + +.asm_f596 + ld d, $19 + +.asm_f598 + ld a, d + call Random + ld c, a + call $75cc + jr c, .asm_f598 + call $75d4 + ld b, $0 + ld hl, $75b3 + add hl, bc + ld a, [hl] + +.asm_f5ac + ld [wd3ab], a + ld [wd696], a + ret +; 0xf5b3 + + INCROM $f5b3, $fc2b + +Func_fc2b: ; fc2b (3:7c2b) + ld a, [wDuelResult] + cp 2 + jr c, .asm_fc34 + ld a, $2 +.asm_fc34 + rlca + ld c, a + ld b, $0 + ld hl, PointerTable_fc4c + add hl, bc + ld c, [hl] + inc hl + ld b, [hl] + ld a, $b0 + ld [wd0c8], a + ld a, $3 + ld [wd0c9], a + jp Func_c935 + +PointerTable_fc4c: ; fc4c (3:7c4c) + dw Unknown_fc64 + dw Unknown_fc68 + dw Unknown_fc60 + + INCROM $fc52, $fc60 + +Unknown_fc60: ; fc60 (3:7c60) + INCROM $fc60, $fc64 + +Unknown_fc64: ; fc64 (3:7c64) + INCROM $fc64, $fc68 + +Unknown_fc68: ; fc68 (3:7c68) + INCROM $fc68, $fcad + +Func_fcad: ; fcad (3:7cad) + INCROM $fcad, $10000 diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm new file mode 100644 index 0000000..5140705 --- /dev/null +++ b/src/engine/bank04.asm @@ -0,0 +1,1542 @@ +Func_10000: ; 10000 (4:4000) + ld a, $0 + ld [wTileMapFill], a + call EmptyScreen + call LoadDuelHUDTiles + ld de, $307f + call Func_2275 + call Set_OBJ_8x8 + xor a + ldh [hSCX], a + ldh [hSCY], a + ld a, [wLCDC] + bit 7, a + jr nz, .asm_10025 + xor a + ld [rSCX], a + ld [rSCY], a + +.asm_10025 + call Func_1288c + call ZeroObjectPositions + ld a, $1 + ld [wVBlankOAMCopyToggle], a + ret + +Func_10031: ; 10031 (4:4031) + ldh a, [hBankSRAM] + push af + ld a, $1 + call BankswitchSRAM + call $4cbb + call DisableSRAM + call $4b28 + call SetFlushAllPalettes + call EnableLCD + call DoFrameIfLCDEnabled + call $4cea + call SetFlushAllPalettes + pop af + call BankswitchSRAM + call DisableSRAM + ret + +Func_10059: ; 10059 (4:4059) + INCROM $10059, $100a2 + +Func_100a2: ; 100a2 (4:40a2) + INCROM $100a2, $1029e + +Medal_1029e: ; 1029e (4:429e) + sub $8 + ld c, a + ld [wd115], a + ld a, [wd291] + push af + push bc + call PauseSong + ld a, MUSIC_STOP + call PlaySong + farcall Func_70000 + call DisableLCD + call $4000 + ld a, $fa + ld [wd114], a + call $410c + pop bc + ld a, c + add a + ld c, a + ld b, $0 + ld hl, Unknown_1030b + add hl, bc + ld a, [hli] + ld [wTxRam2], a + ld a, [hl] + ld [wTxRam2 + 1], a + call $4031 + ld a, MUSIC_MEDAL + call PlaySong + ld a, $ff + ld [wd116], a +.asm_102e2 + call DoFrameIfLCDEnabled + ld a, [wd116] + inc a + ld [wd116], a + and $f + jr nz, .asm_102e2 + call $4197 + ld a, [wd116] + cp $e0 + jr nz, .asm_102e2 + ldtx hl, WonTheMedalText + call Func_2c73 + call Func_3c96 + call ResumeSong + pop af + ld [wd291], a + ret + +Unknown_1030b: ; 1030b (4:430b) + INCROM $1030b, $1031b + +BoosterPack_1031b: ; 1031b (4:431b) + ld c, a + ld a, [wd291] + push af + push bc + call DisableLCD + call $4000 + xor a + ld [wTextBoxFrameType], a + pop bc + push bc + ld b, $0 + ld hl, $43a5 + add hl, bc + ld a, [hl] + ld c, a + add a + add a + ld c, a + ld hl, $43c2 + add hl, bc + ld a, [hli] + push hl + ld bc, $0600 + call $70ca + pop hl + ld a, [hli] + ld [wTxRam3], a + xor a + ld [wTxRam3 + 1], a + ld a, [hli] + ld [wTxRam2], a + ld a, [hl] + ld [wTxRam2 + 1], a + call $4031 + call PauseSong + ld a, MUSIC_BOOSTER_PACK + call PlaySong + pop bc + ld a, c + farcall GenerateBoosterPack + ldtx hl, ReceivedBoosterPackText + ld a, [wd117] + cp $1 + jr nz, .asm_10373 + ldtx hl, AndAnotherBoosterPackText +.asm_10373 + call Func_2c73 + call Func_3c96 + call ResumeSong + ldtx hl, CheckedCardsInBoosterPackText + call Func_2c73 + call DisableLCD + call Func_1288c + call ZeroObjectPositions + ld a, $1 + ld [wVBlankOAMCopyToggle], a + ld a, $4 + ld [wTextBoxFrameType], a + farcall $1, $7599 + farcall Func_c1a4 + call DoFrameIfLCDEnabled + pop af + ld [wd291], a + ret +; 0x103a5 + + INCROM $103a5, $103d2 + +Func_103d2: ; 103d2 (4:43d2) + INCROM $103d2, $103d3 + +Duel_Init: ; 103d3 (4:43d3) + ld a, [wd291] + push af + call DisableLCD + call $4000 + ld a, $4 + ld [wTextBoxFrameType], a + lb de, 0, 12 + lb bc, 20, 6 + call DrawRegularTextBox + ld a, [wcc19] + add a + add a + ld c, a + ld b, $0 + ld hl, $445b + add hl, bc + ld a, [hli] + ld [wTxRam2], a + ld a, [hli] + ld [wTxRam2 + 1], a + push hl + ld a, [wOpponentName] + ld [wTxRam2_b], a + ld a, [wOpponentName + 1] + ld [wTxRam2_b + 1], a + ld hl, $4451 + call $51b3 ; LoadDuelistName + pop hl + ld a, [hli] + ld [wTxRam2], a + ld c, a + ld a, [hli] + ld [wTxRam2 + 1], a + or c + jr z, .asm_10425 + ld hl, $4456 + call $51b3 ; LoadDeckName + +.asm_10425 + ld bc, $0703 + ld a, [wOpponentPortrait] + call Func_3e2a ; LoadDuelistPortrait + ld a, [wMatchStartTheme] + call PlaySong + call $4031 + call DoFrameIfLCDEnabled + lb bc, $2f, $1d ; cursor tile, tile behind cursor + lb de, 18, 17 ; x, y + call SetCursorParametersForTextBox + call WaitForButtonAorB ; wait for the user to press a or b + call Func_3c96 + call Func_10ab4 ; fade out + pop af + ld [wd291], a + ret +; 0x10451 + + INCROM $10451, $10548 + +Func_10548: ; 10548 (4:4548) + INCROM $10548, $10756 + +Func_10756: ; 10756 (4:4756) + INCROM $10756, $10a70 + +Func_10a70: ; 10a70 (4:4a70) + push hl + push bc + push de + ld b, a + ld c, $f + ld hl, wPCPacks +.asm_10a79 + ld a, [hli] + and $7f + cp b + jr z, .asm_10a97 + dec c + jr nz, .asm_10a79 + ld c, $f + ld hl, wPCPacks +.asm_10a87 + ld a, [hl] + and $7f + jr z, .asm_10a93 + inc hl + dec c + jr nz, .asm_10a87 + debug_ret + jr .asm_10a97 + +.asm_10a93 + ld a, b + or $80 + ld [hl], a + +.asm_10a97 + pop de + pop bc + pop hl + ret + +Func_10a9b: ; 10a9b (4:4a9b) + INCROM $10a9b, $10ab4 + +Func_10ab4: ; 10ab4 (4:4ab4) + INCROM $10ab4, $10af9 + +Func_10af9: ; 10af9 (4:4af9) + INCROM $10af9, $10c96 + +Func_10c96: ; 10c96 (4:4c96) + ldh a, [hBankSRAM] + push af + push bc + ld a, $1 + call BankswitchSRAM + call $4cbb + call Func_10ab4 + pop bc + ld a, c + or a + jr nz, .asm_10cb0 + call $4cea + call Func_10af9 + +.asm_10cb0 + call EnableLCD + pop af + call BankswitchSRAM + call DisableSRAM + ret +; 0x10cbb + + INCROM $10cbb, $10dba + +Func_10dba: ; 10dba (4:4dba) + ld a, $1 + farcall Func_c29b + ld a, [wd0ba] + ld hl, $4e17 + farcall Func_111e9 +.asm_10dca + call DoFrameIfLCDEnabled + call HandleMenuInput + jr nc, .asm_10dca + ld a, e + ld [wd0ba], a + ldh a, [hCurrentMenuItem] + cp e + jr z, .asm_10ddd + ld a, $4 + +.asm_10ddd + ld [wd10e], a + push af + ld hl, $4df0 + call JumpToFunctionInTable + farcall Func_c135 + call DoFrameIfLCDEnabled + pop af + ret +; 0x10df0 + + INCROM $10df0, $10e28 + +Func_10e28: ; 10e28 (4:4e28) + INCROM $10e28, $10e55 + +Func_10e55: ; 10e55 (4:4e55) + ld a, [wd336] + ld [wWhichSprite], a + ld a, [wd33e] + or a + jr nz, .asm_10e65 + call Func_10e71 + ret +.asm_10e65 + cp $2 + jr z, .asm_10e6d + call Func_11060 + ret +.asm_10e6d + call LoadOverworldMapSelection + ret + +Func_10e71: ; 10e71 (4:4e71) + ldh a, [hButtonsPressed] + and D_PAD + jr z, .asm_10e83 + farcall Func_c5d5 + ld [wd334], a + call Func_10e97 + jr .asm_10e96 +.asm_10e83 + ldh a, [hButtonsPressed] + and A_BUTTON + jr z, .asm_10e96 + ld a, $2 + call PlaySFX + call Func_11016 + call Func_11024 + jr .asm_10e96 +.asm_10e96 + ret + +Func_10e97: ; 10e97 (4:4e97) + push hl + pop hl + ld a, [wd32e] + rlca + rlca + ld c, a + ld a, [wd334] + add c + ld c, a + ld b, $0 + ld hl, Unknown_10ebc + add hl, bc + ld a, [hl] + or a + jr z, .asm_10eb9 + ld [wd32e], a + call Func_10f2e + ld a, $1 + call PlaySFX +.asm_10eb9 + pop bc + pop hl + ret + +Unknown_10ebc: ; 10ebc (4:4ebc) + INCROM $10ebc, $10efd + +Func_10efd: ; 10efd (4:4efd) + push hl + push de + rlca + ld e, a + ld d, $0 + ld hl, Unknown_10f14 + add hl, de + pop de + ld a, [hli] + add $8 + add d + ld d, a + ld a, [hl] + add $10 + add e + ld e, a + pop hl + ret + +Unknown_10f14: ; 10f14 (4:4f14) + INCROM $10f14, $10f2e + +Func_10f2e: ; 10f2e (4:4f2e) + push hl + push de + lb de, 1, 1 + call Func_22ae + call Func_10f4a + rlca + ld e, a + ld d, $0 + ld hl, Unknown_397b + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call Func_2c29 + pop de + pop hl + ret + +Func_10f4a: ; 10f4a (4:4f4a) + push bc + ld a, [wd32e] + cp $2 + jr nz, .asm_10f5f + ld c, a + ld a, $1e + farcall CheckIfEventFlagSet + or a + ld a, c + jr nz, .asm_10f5f + ld a, $d +.asm_10f5f + pop bc + ret + +LoadOverworldMapSelection: ; 10f61 (4:4f61) + push hl + push bc + ld a, [wd32e] + rlca + rlca + ld c, a + ld b, $0 + ld hl, OverworldMapIndexes + add hl, bc + ld a, [hli] + ld [wd0bb], a + ld a, [hli] + ld [wd0bc], a + ld a, [hli] + ld [wd0bd], a + ld a, $0 + ld [wd0be], a + ld hl, wd0b4 + set 4, [hl] + pop bc + pop hl + ret + +INCLUDE "data/overworld_indexes.asm" + +Func_10fbc: ; 10fbc (4:4fbc) + ld a, $25 + farcall Func_1299f + ld c, SPRITE_ANIM_COORD_X + call GetSpriteAnimBufferProperty + ld a, $80 + ld [hli], a + ld a, $10 + ld [hl], a + ld b, $34 + ld a, [wConsole] + cp CONSOLE_CGB + jr nz, .asm_10fd8 + ld b, $37 +.asm_10fd8 + ld a, b + farcall Func_12ab5 + ret + +Func_10fde: ; 10fde (4:4fde) + ld a, [wd32e] + ld [wd33d], a + xor a + ld [wd33e], a + ld a, $25 + call Func_1299f + ld a, [wWhichSprite] + ld [wd33b], a + ld b, $35 + ld a, [wConsole] + cp $2 + jr nz, .asm_10ffe + ld b, $38 +.asm_10ffe + ld a, b + ld [wd33c], a + call Func_12ab5 + ld a, $3e + farcall CheckIfEventFlagSet + or a + jr nz, .asm_11015 + ld c, SPRITE_ANIM_FIELD_0F + call GetSpriteAnimBufferProperty + set 7, [hl] +.asm_11015 + ret + +Func_11016: ; 11016 (4:5016) + ld a, [wd33b] + ld [wWhichSprite], a + ld a, [wd33c] + inc a + call Func_12ab5 + ret + +Func_11024: ; 11024 (4:5024) + ld a, $57 + call PlaySFX + ld a, [wd336] + ld [wWhichSprite], a + ld c, SPRITE_ANIM_FIELD_0F + call GetSpriteAnimBufferProperty + set 2, [hl] + ld hl, Unknown_1229f + ld a, [wd33d] + dec a + add a + ld c, a + ld b, $0 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wd32e] + dec a + add a + ld c, a + ld b, $0 + add hl, bc + ld a, [hli] + ld [wd33f], a + ld a, [hl] + ld [wd340], a + ld a, $1 + ld [wd33e], a + xor a + ld [wd341], a + ret + +Func_11060: ; 11060 (4:5060) + ld a, [wd336] + ld [wWhichSprite], a + ld a, [wd341] + or a + jp nz, Func_11184 + ld a, [wd33f] + ld l, a + ld a, [wd340] + ld h, a + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + and b + cp $ff + jr z, .asm_110a0 + ld a, c + or b + jr nz, .asm_11094 + ld a, [wd33d] + ld e, a + ld a, [wd32e] + cp e + jr z, .asm_110a0 + ld de, $0000 + call Func_10efd + ld b, d + ld c, e +.asm_11094 + ld a, l + ld [wd33f], a + ld a, h + ld [wd340], a + call Func_110a6 + ret +.asm_110a0 + ld a, $2 + ld [wd33e], a + ret + +Func_110a6: ; 110a6 (4:50a6) + push hl + push bc + ld c, SPRITE_ANIM_COORD_X + call GetSpriteAnimBufferProperty + pop bc + ld a, b + sub [hl] + ld [wd343], a + ld a, $0 + sbc $0 + ld [wd344], a + inc hl + ld a, c + sub [hl] + ld [wd345], a + ld a, $0 + sbc $0 + ld [wd346], a + ld a, [wd343] + ld b, a + ld a, [wd344] + bit 7, a + jr z, .asm_110d8 + ld a, [wd343] + cpl + inc a + ld b, a +.asm_110d8 + ld a, [wd345] + ld c, a + ld a, [wd346] + bit 7, a + jr z, .asm_110e9 + ld a, [wd345] + cpl + inc a + ld c, a +.asm_110e9 + ld a, b + cp c + jr c, .asm_110f2 + call Func_11102 + jr .asm_110f5 +.asm_110f2 + call Func_1113e +.asm_110f5 + xor a + ld [wd347], a + ld [wd348], a + farcall Func_c5e9 + pop hl + ret + +Func_11102: ; 11102 (4:5102) + ld a, b + ld [wd341], a + ld e, a + ld d, $0 + ld hl, wd343 + xor a + ld [hli], a + bit 7, [hl] + jr z, .asm_11115 + dec a + jr .asm_11116 +.asm_11115 + inc a +.asm_11116 + ld [hl], a + ld b, c + ld c, $0 + call DivideBCbyDE + ld a, [wd346] + bit 7, a + jr z, .asm_11127 + call Func_11179 +.asm_11127 + ld a, c + ld [wd345], a + ld a, b + ld [wd346], a + ld hl, wd344 + ld a, $1 + bit 7, [hl] + jr z, .asm_1113a + ld a, $3 +.asm_1113a + ld [wd334], a + ret + +Func_1113e: ; 1113e (4:513e) + ld a, c + ld [wd341], a + ld e, a + ld d, $0 + ld hl, wd345 + xor a + ld [hli], a + bit 7, [hl] + jr z, .asm_11151 + dec a + jr .asm_11152 +.asm_11151 + inc a +.asm_11152 + ld [hl], a + ld c, $0 + call DivideBCbyDE + ld a, [wd344] + bit 7, a + jr z, .asm_11162 + call Func_11179 +.asm_11162 + ld a, c + ld [wd343], a + ld a, b + ld [wd344], a + ld hl, wd346 + ld a, $2 + bit 7, [hl] + jr z, .asm_11175 + ld a, $0 +.asm_11175 + ld [wd334], a + ret + +Func_11179: ; 11179 (4:5179) + ld a, c + cpl + add $1 + ld c, a + ld a, b + cpl + adc $0 + ld b, a + ret + +Func_11184: ; 11184 (4:5184) + ld a, [wd347] + ld d, a + ld a, [wd348] + ld e, a + ld c, SPRITE_ANIM_COORD_X + call GetSpriteAnimBufferProperty + ld a, [wd343] + add d + ld d, a + ld a, [wd344] + adc [hl] + ld [hl], a + inc hl + ld a, [wd345] + add e + ld e, a + ld a, [wd346] + adc [hl] + ld [hl], a + ld a, d + ld [wd347], a + ld a, e + ld [wd348], a + ld hl, wd341 + dec [hl] + ret +; 0x111b3 + + INCROM $111b3, $111e9 + +Func_111e9: ; 111e9 (4:51e9) + INCROM $111e9, $1124d + +Func_1124d: ; 1124d (4:524d) + INCROM $1124d, $11320 + +Func_11320: ; 11320 (4:5320) + INCROM $11320, $11343 + +Func_11343: ; 11343 (4:5343) + INCROM $11343, $11416 + +Func_11416: ; 11416 (4:5416) + INCROM $11416, $11430 + +Func_11430: ; 11430 (4:5430) + INCROM $11430, $1157c + +Func_1157c: ; 1157c (4:557c) + ld a, c + or a + jr nz, .asm_11586 + farcall Func_c228 + jr .asm_1159f + +.asm_11586 + ld a, $2 + ld [wd0bc], a + ld a, $4 + ld [wd0bd], a + ld a, $2 + ld [wd0be], a + ld a, $1 + ld [wd0bb], a + ld a, $1 + ld [wd32e], a + +.asm_1159f + call $5238 + ret +; 0x115a3 + +Func_115a3: ; 115a3 (4:55a3) + INCROM $115a3, $1162a + +INCLUDE "data/map_scripts.asm" + +; loads a pointer into hl found on PointerTable_118f5 +Func_1184a: ; 1184a (4:584a) + ; this may have been a macro + rlca + add LOW(PointerTable_118f5) + ld l, a + ld a, HIGH(PointerTable_118f5) + adc $00 + ld h, a + ld a, [hli] + ld h, [hl] + ld l, a + ret + +Func_11857: ; 11857 (4:5857) + push hl + push bc + call Func_1184a + ld a, [hli] + ld [wd3ab], a + ld a, [hli] + ld [wd3b3], a + ld a, [hli] + ld [wd3b1], a + ld a, [hli] + push af + ld a, [hli] + ld [wd3b2], a + pop bc + ld a, [wConsole] + cp $2 + jr nz, .asm_1187a + ld a, b + ld [wd3b1], a +.asm_1187a + pop bc + pop hl + ret + +; this appears to find data about the NPC we're talking to +Func_1187d: ; 1187d (4:587d) + push hl + call Func_1184a + ld bc, $5 + add hl, bc + ld c, [hl] + inc hl + ld b, [hl] + inc hl + ld a, [hli] + ld [wd0c8], a + ld a, [hli] + ld [wd0c9], a + pop hl + ret + +Func_11893: ; 11893 (4:5893) + push hl + push bc + call Func_1184a + ld bc, $0007 + add hl, bc + ld a, [hli] + ld [wd0c8], a + ld a, [hli] + ld [wd0c9], a + pop bc + pop hl + ret + +Func_118a7: ; 118a7 (4:58a7) + push hl + push bc + call Func_1184a + ld bc, $0007 + add hl, bc + ld a, [hli] + ld [wOpponentName], a + ld a, [hli] + ld [wOpponentName + 1], a + ld a, [hli] + ld [wOpponentPortrait], a + pop bc + pop hl + ret + +Func_118bf: ; 118bf (4:58bf) + push hl + push bc + call Func_1184a + ld bc, $000a + add hl, bc + ld a, [hli] + ld [wcc19], a + ld a, [hli] + ld [wDuelTheme], a + pop bc + pop hl + ret + +Func_118d3: ; 118d3 (4:58d3) + push hl + push bc + push af + call Func_1184a + ld bc, $000c + add hl, bc + ld a, [hli] + ld [wMatchStartTheme], a + pop af + cp $2 + jr nz, .asm_118f2 + ld a, [wCurMap] + cp $20 + jr nz, .asm_118f2 + ld a, $17 + ld [wMatchStartTheme], a + +.asm_118f2 + pop bc + pop hl + ret + +INCLUDE "data/npcs.asm" + +Func_11f4e: ; 11f4e (4:5f4e) + INCROM $11f4e, $1217b + +OverworldScriptTable: ; 1217b (4:617b) + dw OWScript_EndScriptLoop1 + dw OWScript_CloseTextBox + dw OWScript_PrintTextString + dw Func_ccdc + dw OWScript_AskQuestionJump + dw OWScript_StartBattle + dw Func_cd83 + dw Func_cda8 + dw OWScript_PrintTextCloseBox + dw Func_cdcb + dw Func_ce26 + dw Func_ce84 + dw OWScript_GiveBoosterPacks + dw Func_cf0c + dw Func_cf12 + dw Func_cf3f + dw Func_cf4c + dw Func_cf53 + dw Func_cf7b + dw Func_cf2d + dw Func_cf96 + dw Func_cfc6 + dw Func_cfd4 + dw Func_d00b + dw Func_d025 + dw Func_d032 + dw Func_d03f + dw OWScript_ScriptJump + dw Func_d04f + dw Func_d055 + dw OWScript_MovePlayer + dw Func_cee2 + dw Func_d080 + dw Func_d088 + dw Func_d095 + dw Func_d0be + dw Func_d0ce + dw Func_d0d9 + dw Func_d0f2 + dw Func_ce4a + dw Func_ceba + dw Func_d103 + dw Func_d125 + dw Func_d135 + dw Func_d16b + dw Func_cd4f + dw Func_cd94 + dw Func_ce52 + dw Func_cdd8 + dw Func_cdf5 + dw Func_d195 + dw Func_d1ad + dw Func_d1b3 + dw OWScript_EndScriptCloseText + dw Func_d244 + dw Func_d24c + dw DeckMachine_d336 + dw Func_d271 + dw Func_d36d + dw Func_ce6f + dw Func_d209 + dw Func_d38f + dw Func_d396 + dw Func_cd76 + dw Func_d39d + dw Func_d3b9 + dw Func_d3c9 + dw Func_d3d1 + dw Func_d3d4 + dw Func_d3e0 + dw Func_d3fe + dw Func_d408 + dw Func_d40f + dw Func_d416 + dw Func_d423 + dw Func_d429 + dw Func_d41d + dw Func_d42f + dw Func_d435 + dw Func_cce4 + dw Func_d2f6 + dw Func_d317 + dw Func_d43d + dw OWScript_EndScriptLoop2 + dw OWScript_EndScriptLoop3 + dw OWScript_EndScriptLoop4 + dw OWScript_EndScriptLoop5 + dw OWScript_EndScriptLoop6 + dw OWScript_CustomModifyEventFlags + dw Func_d460 + dw OWScript_JumpIfFlagSet + dw Func_d484 + dw Func_d49e + dw Func_d4a6 + dw Func_d4ae + dw OWScript_SetEventFlags + dw Func_d4c3 + dw Func_d4ca + dw OWScript_JumpIfFlagNotSet + dw Func_d452 + dw OWScript_EndScriptLoop7 + dw OWScript_EndScriptLoop8 + dw OWScript_EndScriptLoop9 + dw OWScript_EndScriptLoop10 + + INCROM $1224b, $1229f + +Unknown_1229f: ; 1229f (4:629f) + INCROM $1229f, $126d1 + +; usually, the game doesn't loop here at all, since as soon as a main menu option +; is selected, there is no need to come back to the menu. +; the only exception is after returning from Card Pop! +_GameLoop: ; 126d1 (4:66d1) + call ZeroObjectPositions + ld hl, wVBlankOAMCopyToggle + inc [hl] + farcall Func_70018 + ld a, $ff + ld [wd627], a +.main_menu_loop + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + farcall Func_c1f8 + farcall Func_1d078 + ld a, [wd628] + ld hl, MainMenuFunctionTable + call JumpToFunctionInTable + jr c, .main_menu_loop ; return to main menu + jr _GameLoop ; virtually restart game + +; this is never reached + scf + ret + +MainMenuFunctionTable: + dw MainMenu_CardPop + dw MainMenu_ContinueFromDiary + dw MainMenu_NewGame + dw MainMenu_ContinueDuel + +MainMenu_NewGame: ; 12704 (4:6704) + farcall Func_c1b1 + call Func_128a9 + farcall Func_1996e + call EnableSRAM + ld a, [sa007] + ld [wd421], a + ld a, [sa006] + ld [wTextSpeed], a + call DisableSRAM + ld a, MUSIC_STOP + call PlaySong + farcall Func_70000 + ld a, $9 + ld [wd111], a + call Func_39fc + farcall Func_1d306 + ld a, GAME_EVENT_OVERWORLD + ld [wGameEvent], a + farcall $03, ExecuteGameEvent + or a + ret + +MainMenu_ContinueFromDiary: ; 12741 (4:6741) + ld a, MUSIC_STOP + call PlaySong + call Func_11320 + jr nc, MainMenu_NewGame + farcall Func_c1ed + farcall Func_70000 + call EnableSRAM + xor a + ld [$ba44], a + call DisableSRAM + ld a, GAME_EVENT_OVERWORLD + ld [wGameEvent], a + farcall $03, ExecuteGameEvent + or a + ret + +MainMenu_CardPop: ; 12768 (4:6768) + ld a, MUSIC_CARD_POP + call PlaySong + bank1call Func_7571 + farcall Func_c1a4 + call DoFrameIfLCDEnabled + ld a, MUSIC_STOP + call PlaySong + scf + ret + +MainMenu_ContinueDuel: ; 1277e (4:677e) + ld a, MUSIC_STOP + call PlaySong + farcall Func_c9cb + farcall $04, Func_3a40 + farcall Func_70000 + ld a, GAME_EVENT_CONTINUE_DUEL + ld [wGameEvent], a + farcall $03, ExecuteGameEvent + or a + ret +; 0x1279a + + INCROM $1279a, $12871 + +Func_12871: ; 12871 (4:6871) + INCROM $12871, $1288c + +Func_1288c: ; 1288c (4:688c) + INCROM $1288c, $128a9 + +Func_128a9: ; 128a9 (4:68a9) + INCROM $128a9, $1296e + +Func_1296e: ; 1296e (4:696e) + INCROM $1296e, $1299f + +Func_1299f: ; 1299f (4:699f) + push af + ld a, [wd5d7] + or a + jr z, .asm_129a8 + pop af + ret +.asm_129a8 + pop af + push bc + push hl + call Func_12c05 + ld [wd5d3], a + xor a + ld [wWhichSprite], a + call Func_3db7 + ld bc, $0010 +.asm_129bb + ld a, [hl] + or a + jr z, .asm_129cf + add hl, bc + ld a, [wWhichSprite] + inc a + ld [wWhichSprite], a + cp $10 + jr nz, .asm_129bb + debug_ret + scf + jr .asm_129d6 +.asm_129cf + ld a, $1 + ld [hl], a + call Func_129d9 + or a +.asm_129d6 + pop hl + pop bc + ret + +Func_129d9: ; 129d9 (4:69d9) + push hl + push bc + push hl + inc hl + ld c, $f + xor a +.asm_129e0 + ld [hli], a + dec c + jr nz, .asm_129e0 + pop hl + ld bc, $0004 + add hl, bc + ld a, [wd5d3] + ld [hli], a + ld a, $ff + ld [hl], a + ld bc, $0009 + add hl, bc + ld a, $ff + ld [hl], a + pop bc + pop hl + ret +; 0x129fa + + INCROM $129fa, $12a21 + +Func_12a21: ; 12a21 (4:6a21) + INCROM $12a21, $12ab5 + +Func_12ab5: ; 12ab5 (4:6ab5) + push hl + push af + ld c, SPRITE_ANIM_FIELD_05 + call GetSpriteAnimBufferProperty + pop af + cp [hl] + pop hl + ret z + push hl + call Func_12ae2 + call Func_12b13 + pop hl + ret +; 0x12ac9 + + INCROM $12ac9, $12ae2 + +Func_12ae2: ; 12ae2 (4:6ae2) + push bc + push af + call Func_3db7 + pop af + push hl + ld bc, $0005 + add hl, bc + ld [hli], a + push hl + ld l, $6 + farcall Func_8020f + farcall Func_80229 + pop hl + ld a, [wd4c6] + ld [hli], a + ld a, [wd4c4] + ld [hli], a + ld c, a + ld a, [wd4c5] + ld [hli], a + ld b, a + ld a, $3 + add c + ld [hli], a + ld a, $0 + adc b + ld [hli], a + pop hl + pop bc + ret + +Func_12b13: ; 12b13 (4:6b13) + push bc + push de + push hl +.asm_12b16 + push hl + ld bc, $0006 + add hl, bc + ld a, [hli] + ld [wd4c6], a + inc hl + inc hl + ld a, [hl] + ld [wd4c4], a + add $4 + ld [hli], a + ld a, [hl] + ld [wd4c5], a + adc $0 + ld [hl], a + ld de, wd23e + ld bc, $0004 + call Func_3bf5 + pop hl + ld de, wd23e + ld a, [de] + call Func_12b6a + inc de + ld a, [de] + call Func_12b89 + jr c, .asm_12b16 + inc de + ld bc, $0002 + add hl, bc + push hl + ld bc, $000d + add hl, bc + ld b, [hl] + pop hl + ld a, [de] + bit 0, b + jr z, .asm_12b5a + cpl + inc a +.asm_12b5a + add [hl] + ld [hli], a + inc de + ld a, [de] + bit 1, b + jr z, .asm_12b64 + cpl + inc a +.asm_12b64 + add [hl] + ld [hl], a + pop hl + pop de + pop bc + ret + +Func_12b6a: ; 12b6a (4:6b6a) + ld [wd4ca], a + push hl + push bc + push de + push hl + ld bc, $0006 + add hl, bc + ld a, [hli] + ld [wd4c6], a + ld a, [hli] + ld [wd4c4], a + ld a, [hli] + ld [wd4c5], a + pop hl + call Func_3d72 + pop de + pop bc + pop hl + ret + +Func_12b89: ; 12b89 (4:6b89) + push hl + push bc + ld bc, $000e + add hl, bc + ld [hl], a + or a + jr nz, .asm_12ba4 + ld bc, $fff9 + add hl, bc + ld a, [hli] + add $3 + ld c, a + ld a, [hli] + adc $0 + ld b, a + ld a, c + ld [hli], a + ld a, b + ld [hl], a + scf +.asm_12ba4 + pop bc + pop hl + ret + +Func_12ba7: ; 12ba7 (4:6ba7) + INCROM $12ba7, $12bcd + +Func_12bcd: ; 12bcd (4:6bcd) + INCROM $12bcd, $12c05 + +Func_12c05: ; 12c05 (4:6c05) + push hl + push bc + push de + ld b, a + ld d, $0 + ld a, [wd618] + ld c, a + ld hl, wd5d8 + or a + jr z, .asm_12c22 +.asm_12c15 + inc hl + ld a, [hl] + cp b + jr z, .asm_12c3a + inc hl + ld a, [hli] + add [hl] + ld d, a + inc hl + dec c + jr nz, .asm_12c15 +.asm_12c22 + ld a, [wd618] + cp $10 + jr nc, .asm_12c48 + inc a + ld [wd618], a + inc hl + push hl + ld a, b + ld [hli], a + call Func_12c4f + push af + ld a, d + ld [hli], a + pop af + ld [hl], a + pop hl +.asm_12c3a + dec hl + inc [hl] + inc hl + inc hl + ld a, [hli] + add [hl] + cp $81 + jr nc, .asm_12c48 + ld a, d + or a + jr .asm_12c4b +.asm_12c48 + debug_ret + xor a + scf +.asm_12c4b + pop de + pop bc + pop hl + ret + +Func_12c4f: ; 12c4f (4:6c4f) + push af + xor a + ld [wd4cb], a + ld a, d + ld [wd4ca], a + pop af + farcall Func_8025b + ret + +Func_12c5e: ; 12c5e (4:6c5e) + INCROM $12c5e, $12c7f + +Func_12c7f: ; 12c7f (4:6c7f) + INCROM $12c7f, $131b3 + +Func_131b3: ; 131b3 (4:71b3) + INCROM $131b3, $131d3 + +Func_131d3: ; 131d3 (4:71d3) + INCROM $131d3, $1344d + +Func_1344d: ; 1344d (4:744d) + call PauseSong + ld a, MUSIC_MEDAL + call PlaySong + ldtx hl, DefeatedFiveOpponentsText + call Func_2c73 + call Func_3c96 + call ResumeSong + ret +; 0x13462 + + INCROM $13462, $13485 + +Func_13485: ; 13485 (4:7485) + call EnableSRAM + ld a, [$ba68] + or a + ret z + ld a, [$ba56] + ld [wTxRam3], a + ld a, [$ba57] + ld [wTxRam3 + 1], a + call DisableSRAM + call PauseSong + ld a, MUSIC_MEDAL + call PlaySong + ldtx hl, ConsecutiveWinRecordIncreasedText + call Func_2c73 + call Func_3c96 + call ResumeSong + ret +; 0x134b1 + + INCROM $134b1, $14000 diff --git a/src/engine/bank05.asm b/src/engine/bank05.asm new file mode 100644 index 0000000..0fd6f82 --- /dev/null +++ b/src/engine/bank05.asm @@ -0,0 +1,323 @@ +PointerTable_14000: ; 14000 (05:4000) + dw $47bd ; SAMS_PRACTICE_DECK + dw PointerTable_14668 ; PRACTICE_PLAYER_DECK + dw PointerTable_14668 ; SAMS_NORMAL_DECK + dw PointerTable_14668 ; CHARMANDER_AND_FRIENDS_DECK + dw PointerTable_14668 ; CHARMANDER_EXTRA_DECK + dw PointerTable_14668 ; SQUIRTLE_AND_FRIENDS_DECK + dw PointerTable_14668 ; SQUIRTLE_EXTRA_DECK + dw PointerTable_14668 ; BULBASAUR_AND_FRIENDS_DECK + dw PointerTable_14668 ; BULBASAUR_EXTRA_DECK + dw PointerTable_14668 ; LIGHTNING_AND_FIRE_DECK + dw PointerTable_14668 ; WATER_AND_FIGHTING_DECK + dw PointerTable_14668 ; GRASS_AND_PSYCHIC_DECK + dw $49e8 ; LEGENDARY_MOLTRES_DECK + dw $4b0f ; LEGENDARY_ZAPDOS_DECK + dw $4c0b ; LEGENDARY_ARTICUNO_DECK + dw $4d60 ; LEGENDARY_DRAGONITE_DECK + dw $4e89 ; FIRST_STRIKE_DECK + dw $4f0e ; ROCK_CRUSHER_DECK + dw $4f8f ; GO_GO_RAIN_DANCE_DECK + dw $5019 ; ZAPPING_SELFDESTRUCT_DECK + dw $509b ; FLOWER_POWER_DECK + dw $5122 ; STRANGE_PSYSHOCK_DECK + dw $51ad ; WONDERS_OF_SCIENCE_DECK + dw $5232 ; FIRE_CHARGE_DECK + dw $52bd ; IM_RONALD_DECK + dw $534b ; POWERFUL_RONALD_DECK + dw $53e8 ; INVINCIBLE_RONALD_DECK + dw $546f ; LEGENDARY_RONALD_DECK + dw $48dc ; MUSCLES_FOR_BRAINS_DECK + dw PointerTable_14668 ; HEATED_BATTLE_DECK + dw PointerTable_14668 ; LOVE_TO_BATTLE_DECK + dw PointerTable_14668 ; EXCAVATION_DECK + dw PointerTable_14668 ; BLISTERING_POKEMON_DECK + dw PointerTable_14668 ; HARD_POKEMON_DECK + dw PointerTable_14668 ; WATERFRONT_POKEMON_DECK + dw PointerTable_14668 ; LONELY_FRIENDS_DECK + dw PointerTable_14668 ; SOUND_OF_THE_WAVES_DECK + dw PointerTable_14668 ; PIKACHU_DECK + dw PointerTable_14668 ; BOOM_BOOM_SELFDESTRUCT_DECK + dw PointerTable_14668 ; POWER_GENERATOR_DECK + dw PointerTable_14668 ; ETCETERA_DECK + dw PointerTable_14668 ; FLOWER_GARDEN_DECK + dw PointerTable_14668 ; KALEIDOSCOPE_DECK + dw PointerTable_14668 ; GHOST_DECK + dw PointerTable_14668 ; NAP_TIME_DECK + dw PointerTable_14668 ; STRANGE_POWER_DECK + dw PointerTable_14668 ; FLYIN_POKEMON_DECK + dw PointerTable_14668 ; LOVELY_NIDORAN_DECK + dw PointerTable_14668 ; POISON_DECK + dw PointerTable_14668 ; ANGER_DECK + dw PointerTable_14668 ; FLAMETHROWER_DECK + dw PointerTable_14668 ; RESHUFFLE_DECK + dw $48dc ; IMAKUNI_DECK +; 1406a + + INCROM $1406a, $14226 + +Func_14226: ; 14226 (5:4226) + call CreateHandCardList + ld hl, wDuelTempList +.check_for_next_pokemon + ld a, [hli] + ldh [hTempCardIndex_ff98], a + cp $ff + ret z + call LoadCardDataToBuffer1_FromDeckIndex + ld a, [wLoadedCard1Type] + cp TYPE_ENERGY + jr nc, .check_for_next_pokemon + ld a, [wLoadedCard1Stage] + or a + jr nz, .check_for_next_pokemon + push hl + ldh a, [hTempCardIndex_ff98] + call PutHandPokemonCardInPlayArea + pop hl + jr .check_for_next_pokemon +; 0x1424b + + INCROM $1424b, $14663 + +Func_14663: ; 14663 (5:4663) + farcall Func_200e5 + ret + +; GENERAL DECK POINTER LIST - Not sure on all of these. +; This is an example of an AI pointer table, there's one for each AI type. +PointerTable_14668: ; 14668 (05:4668) + dw Func_14674 ; not used + dw Func_14674 ; general AI for battles + dw Func_14678 ; basic pokemon placement / cheater shuffling on better AI + dw Func_1467f + dw Func_14683 + dw Func_14687 + +; when battle AI gets called +Func_14674: ; 14674 (5:4674) + call Func_1468b + ret + +Func_14678: ; 14678 (5:4678) + call Func_15636 + call $4226 + ret + +Func_1467f: ; 1467f (5:467f) + call $5b72 + ret + +Func_14683: ; 14683 (5:4683) + call $5b72 + ret + +Func_14687: ; 14687 (5:4687) + call $41e5 + ret + +; AI for general decks i think +Func_1468b: ; 1468b (5:468b) + call Func_15649 + ld a, $1 + call Func_14663 + farcall $8, $67d3 + jp nc, $4776 + farcall $8, $6790 + farcall $8, $66a3 + farcall $8, $637f + ret c + farcall $8, $662d + ld a, $2 + call Func_14663 + ld a, $3 + call Func_14663 + ld a, $4 + call Func_14663 + call $5eae + ret c + ld a, $5 + call Func_14663 + ld a, $6 + call Func_14663 + ld a, $7 + call Func_14663 + ld a, $8 + call Func_14663 + call $4786 + ld a, $a + call Func_14663 + ld a, $b + call Func_14663 + ld a, $c + call Func_14663 + ld a, [wAlreadyPlayedEnergy] + or a + jr nz, .asm_146ed + call $64e8 + +.asm_146ed + call $5eae + farcall $8, $66a3 + farcall $8, $637f + ret c + farcall $8, $6790 + ld a, $d + farcall $8, $619b + ld a, $d + call Func_14663 + ld a, $f + call Func_14663 + ld a, [wce20] + and $4 + jr z, .asm_14776 + ld a, $1 + call Func_14663 + ld a, $2 + call Func_14663 + ld a, $3 + call Func_14663 + ld a, $4 + call Func_14663 + call $5eae + ret c + ld a, $5 + call Func_14663 + ld a, $6 + call Func_14663 + ld a, $7 + call Func_14663 + ld a, $8 + call Func_14663 + call $4786 + ld a, $a + call Func_14663 + ld a, $b + call Func_14663 + ld a, $c + call Func_14663 + ld a, [wAlreadyPlayedEnergy] + or a + jr nz, .asm_1475b + call $64e8 + +.asm_1475b + call $5eae + farcall $8, $66a3 + farcall $8, $637f + ret c + farcall $8, $6790 + ld a, $d + farcall $8, $619b + ld a, $d + call Func_14663 + +.asm_14776 + ld a, $e + farcall $8, $619b + call $69f8 + ret c + ld a, $5 + bank1call $67be + ret +; 0x14786 + + + INCROM $14786, $15636 +Func_15636: ; 15636 (5:5636) + ld a, $10 + ld hl, wcda5 + call ZeroData + ld a, $5 + ld [wcda6], a + ld a, $ff + ld [wcda5], a + ret + +Func_15649: ; 15649 (5:5649) + ld a, [wcda6] + inc a + ld [wcda6], a + xor a + ld [wce20], a + ld [wcddb], a + ld [wcddc], a + ld [wce03], a + ld a, [wcc10] + cp $ff + jr z, .asm_156b1 + or a + jr z, .asm_156b1 + ld a, [wcc11] + cp $ff + jr z, .asm_156b1 + call SwapTurn + call GetCardIDFromDeckIndex + call SwapTurn + ld a, e + cp MEWTWO1 ; I believe this is a check for Mewtwo1's Barrier move + jr nz, .asm_156b1 + ld a, [wcda7] + bit 7, a + jr nz, .asm_156aa + inc a + ld [wcda7], a + cp $3 + jr c, .asm_156c2 + ld a, DUELVARS_ARENA_CARD + call GetNonTurnDuelistVariable + call SwapTurn + call GetCardIDFromDeckIndex + call SwapTurn + ld a, e + cp MEWTWO1 + jr nz, .asm_156a4 + farcall $8, $67a9 + jr nc, .asm_156aa + +.asm_156a4 + xor a + ld [wcda7], a + jr .asm_156c2 + +.asm_156aa + ld a, $80 + ld [wcda7], a + jr .asm_156c2 + +.asm_156b1 + ld a, [wcda7] + bit 7, a + jr z, .asm_156be + inc a + ld [wcda7], a + jr .asm_156c2 + +.asm_156be + xor a + ld [wcda7], a + +.asm_156c2 + ret +; 0x156c3 + + INCROM $156c3, $1575e + +; zeroes a bytes starting at hl +ZeroData: ; 1575e (5:575e) + push af + push bc + push hl + ld b, a + xor a +.clear_loop + ld [hli], a + dec b + jr nz, .clear_loop + pop hl + pop bc + pop af + ret +; 0x1576b + + INCROM $1576b, $18000 diff --git a/src/engine/bank06.asm b/src/engine/bank06.asm new file mode 100644 index 0000000..1a85a24 --- /dev/null +++ b/src/engine/bank06.asm @@ -0,0 +1,328 @@ +_CopyCardNameAndLevel: ; 18000 (6:4000) + push bc + push de + ld [wcd9b], a + ld hl, wLoadedCard1Name + ld a, [hli] + ld h, [hl] + ld l, a + ld de, wDefaultText + push de + call CopyText ; copy card name to wDefaultText + pop hl + ld a, [hli] + cp TX_START + jp z, Func_18086 + ld a, [wcd9b] + ld c, a + ld a, [wLoadedCard1Type] + cp TYPE_ENERGY + jr nc, .level_done ; jump if energy or trainer + ld a, [wLoadedCard1Level] + or a + jr z, .level_done + inc c + inc c + ld a, [wLoadedCard1Level] + cp 10 + jr c, .level_done + inc c ; second digit +.level_done + ld hl, wLoadedCard1Name + ld a, [hli] + ld h, [hl] + ld l, a + ld de, wDefaultText + push de + call CopyText + pop hl + push de + ld e, c + call Func_23c1 + add e + ld c, a + pop hl + push hl +.fill_loop + ld a, $70 + ld [hli], a + dec c + jr nz, .fill_loop + ld [hl], TX_END + pop hl + ld a, [wLoadedCard1Type] + cp TYPE_ENERGY + jr nc, .done + ld a, [wLoadedCard1Level] + or a + jr z, .done + ld a, TX_SYMBOL + ld [hli], a + ld [hl], LOW("") + inc hl + ld a, [wLoadedCard1Level] + cp 10 + jr c, .one_digit + ld [hl], TX_SYMBOL + inc hl + ld b, LOW("<0>") - 1 +.first_digit_loop + inc b + sub 10 + jr nc, .first_digit_loop + add 10 + ld [hl], b ; first digit + inc hl +.one_digit + ld [hl], TX_SYMBOL + inc hl + add LOW("<0>") + ld [hl], a ; last (or only) digit + inc hl +.done + pop de + pop bc + ret +; 0x18086 + +Func_18086: ; 18086 (6:4086) + ld a, [wcd9b] + inc a + add a + ld b, a + ld hl, wDefaultText +.find_end_text_loop + dec b + ld a, [hli] + or a ; TX_END + jr nz, .find_end_text_loop + dec hl + ld a, [wLoadedCard1Type] + cp TYPE_ENERGY + jr nc, .level_done + ld a, [wLoadedCard1Level] + or a + jr z, .level_done + ld c, a + ld a, " " + ld [hli], a + dec b + ld a, "L" + ld [hli], a + dec b + ld a, "v" + ld [hli], a + dec b + ld a, c + cp 10 + jr c, .got_level + push bc + ld b, "0" - 1 +.first_digit_loop + inc b + sub 10 + jr nc, .first_digit_loop + add 10 + ld [hl], b ; first digit + inc hl + pop bc + ld c, a + dec b +.got_level + ld a, c + add "0" + ld [hli], a ; last (or only) digit + dec b +.level_done + push hl + ld a, " " +.fill_spaces_loop + ld [hli], a + dec b + jr nz, .fill_spaces_loop + ld [hl], TX_END + pop hl + pop de + pop bc + ret +; 0x180d5 + + INCROM $180d5, $186f7 + +INCLUDE "data/effect_commands.asm" + + INCROM $18f9c, $1996e + +Func_1996e: ; 1996e (6:596e) + call EnableSRAM + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + ld hl, sCardCollection + ld bc, $1607 +.asm_1997b + xor a + ld [hli], a + dec bc + ld a, c + or b + jr nz, .asm_1997b + ld a, $5 + ld hl, sa350 + call Func_199e0 + ld a, $7 + ld hl, sa3a4 + call Func_199e0 + ld a, $9 + ld hl, sa3f8 + call Func_199e0 + call EnableSRAM + ld hl, sCardCollection + ld a, CARD_NOT_OWNED +.asm_199a2 + ld [hl], a + inc l + jr nz, .asm_199a2 + ld hl, $bc00 + xor a + ld [hli], a + ld [hli], a + ld [hl], a + ld hl, $bb00 + ld c, $10 +.asm_199b2 + ld [hl], $0 + ld de, $0010 + add hl, de + dec c + jr nz, .asm_199b2 + ld a, $2 + ld [sa003], a + ld a, $2 + ld [sa006], a + ld [wTextSpeed], a + xor a + ld [sa007], a + ld [sa009], a + ld [sa004], a + ld [sa005], a + ld [sa00a], a + farcall Func_8cf9 + call DisableSRAM + ret + +Func_199e0: ; 199e0 (6:59e0) + push de + push bc + push hl + call LoadDeck + jr c, .asm_19a0e + call Func_19a12 + pop hl + call EnableSRAM + push hl + ld de, wDefaultText +.asm_199f3 + ld a, [de] + inc de + ld [hli], a + or a + jr nz, .asm_199f3 + pop hl + push hl + ld de, $0018 + add hl, de + ld de, wPlayerDeck + ld c, $3c +.asm_19a04 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_19a04 + call DisableSRAM + or a +.asm_19a0e + pop hl + pop bc + pop de + ret + +Func_19a12: ; 19a12 (6:5a12) + ld hl, wcce9 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, wDefaultText + call CopyText + ret +; 0x19a1f + + INCROM $19a1f, $1a61f + +Func_1a61f: ; 1a61f (6:661f) + push af + ld de, $389f + call Func_2275 + pop af + or a + jr nz, .asm_1a640 + ld a, $40 + call $663b + ld a, $5f + call $663b + ld a, $76 + call $663b + ld a, $c1 + ldtx hl, ReceivedLegendaryCardText + jr .asm_1a660 +.asm_1a640 + ldtx hl, ReceivedCardText + cp $1e + jr z, .asm_1a660 + cp $43 + jr z, .asm_1a660 + ldtx hl, ReceivedPromotionalFlyingPikachuText + cp $64 + jr z, .asm_1a660 + ldtx hl, ReceivedPromotionalSurfingPikachuText + cp $65 + jr z, .asm_1a660 + cp $66 + jr z, .asm_1a660 + ldtx hl, ReceivedPromotionalCardText +.asm_1a660 + push hl + ld e, a + ld d, $0 + call LoadCardDataToBuffer1_FromCardID + call PauseSong + ld a, MUSIC_MEDAL + call PlaySong + ld hl, wLoadedCard1Name + ld a, [hli] + ld h, [hl] + ld l, a + bank1call LoadTxRam2 ; switch to bank 1, but call a home func + ld a, PLAYER_TURN + ldh [hWhoseTurn], a + pop hl + bank1call $5e5f +.asm_1a680 + call AssertSongFinished + or a + jr nz, .asm_1a680 + call ResumeSong + bank1call $5773 + ret +; 0x1a68d + + INCROM $1a68d, $1a6cc + +CommentedOut_1a6cc: ; 1a6cc (6:66cc) + ret +; 0x1a6cd + + INCROM $1a6cd, $1ad89 + +Func_1ad89: ; 1ad89 (6:6d89) + INCROM $1ad89, $1c000 diff --git a/src/engine/bank07.asm b/src/engine/bank07.asm new file mode 100644 index 0000000..725b51b --- /dev/null +++ b/src/engine/bank07.asm @@ -0,0 +1,566 @@ + INCROM $1c000, $1c056 + +Func_1c056: ; 1c056 (7:4056) + push hl + push bc + push de + ld a, [wCurMap] + add a + ld c, a + ld b, $0 + ld hl, WarpDataPointers + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld bc, $0005 + ld a, [wPlayerXCoord] + ld d, a + ld a, [wPlayerYCoord] + ld e, a +.asm_1c072 + ld a, [hli] + or [hl] + jr z, .asm_1c095 + ld a, [hld] + cp e + jr nz, .asm_1c07e + ld a, [hl] + cp d + jr z, .asm_1c081 +.asm_1c07e + add hl, bc + jr .asm_1c072 +.asm_1c081 + inc hl + inc hl + ld a, [hli] + ld [wd0bb], a + ld a, [hli] + ld [wd0bc], a + ld a, [hli] + ld [wd0bd], a + ld a, [wd334] + ld [wd0be], a +.asm_1c095 + pop de + pop bc + pop hl + ret + +INCLUDE "data/warps.asm" + +Func_1c33b: ; 1c33b (7:433b) + push hl + push bc + push de + ld a, [wCurMap] + add a + ld c, a + add a + add c + ld c, a + ld b, $0 + ld hl, MapSongs + add hl, bc + ld a, [hli] + ld [wd131], a + ld a, [hli] + ld c, a + ld a, [hli] + ld [wd28f], a + ld a, [hli] + ld [wd132], a + ld a, [hli] + ld [wd290], a + ld a, [hli] + ld [wd111], a + ld a, [wConsole] + cp $2 + jr nz, .asm_1c370 + ld a, c + or a + jr z, .asm_1c370 + ld [wd131], a +.asm_1c370 + pop de + pop bc + pop hl + ret + +INCLUDE "data/map_songs.asm" + +Func_1c440: ; 1c440 (7:4440) + INCROM $1c440, $1c455 + +Func_1c455: ; 1c455 (7:4455) + push hl + ld a, [wd3aa] + ld l, $4 + call Func_39ad + ld a, [hl] + pop hl + ret + +Func_1c461: ; 1c461 (7:4461) + push hl + push bc + call Func_1c719 + ld a, [wd3aa] + ld l, $2 + call Func_39ad + ld a, b + ld [hli], a + ld [hl], c + call $46e3 + pop bc + pop hl + ret + +Func_1c477: ; 1c477 (7:4477) + push hl + ld a, [wd3aa] + ld l, $2 + call Func_39ad + ld a, [hli] + ld b, a + ld c, [hl] + pop hl + ret + +Func_1c485: ; 1c485 (7:4485) + INCROM $1c485, $1c50a + +Func_1c50a: ; 1c50a (7:450a) + push hl + call Func_1c719 + ld a, [wd3aa] + call Func_39a7 + ld a, [hl] + or a + jr z, .asm_1c52c + call $44fa + jr nc, .asm_1c521 + xor a + ld [wd3b8], a + +.asm_1c521 + xor a + ld [hli], a + ld a, [hl] + farcall $4, $69fd + ld hl, wd349 + dec [hl] + +.asm_1c52c + pop hl + ret + +Func_1c52e: ; 1c52e (7:452e) + push hl + push af + ld a, [wd3aa] + ld l, $7 + call Func_39ad + pop af + ld [hl], a + call Func_1c5e9 + pop hl + ret + +Func_1c53f: ; 1c53f (7:453f) + push hl + push bc + ld a, [wd3aa] + ld l, $4 + call Func_39ad + ld a, [hl] + ld bc, $0003 + add hl, bc + ld [hl], a + push af + call Func_1c5e9 + pop af + pop bc + pop hl + ret + +Func_1c557: ; 1c557 (7:4557) + push bc + ld c, a + ld a, [wd3aa] + push af + ld a, [wd3ab] + push af + ld a, c + ld [wd3ab], a + ld c, $0 + call Func_39c3 + jr c, .asm_1c570 + call Func_1c53f + ld c, a + +.asm_1c570 + pop af + ld [wd3ab], a + pop af + ld [wd3aa], a + ld a, c + pop bc + ret + +Func_1c57b: ; 1c57b (7:457b) + push hl + push bc + push af + ld a, [wd3aa] + ld l, $6 + call Func_39ad + pop af + ld [hl], a + call Func_1c58e + pop bc + pop hl + ret + +Func_1c58e: ; 1c58e (7:458e) + INCROM $1c58e, $1c5e9 + +Func_1c5e9: ; 1c5e9 (7:45e9) + INCROM $1c5e9, $1c610 + +Func_1c610: ; 1c610 (7:4610) + INCROM $1c610, $1c6f8 + +Func_1c6f8: ; 1c6f8 (7:46f8) + INCROM $1c6f8, $1c719 + +Func_1c719: ; 1c719 (7:4719) + push hl + push bc + ld a, [wd3aa] + ld l, $2 + call Func_39ad + ld a, [hli] + ld b, a + ld c, [hl] + ld a, $40 + call $3937 + pop bc + pop hl + ret + +Func_1c72e: ; 1c72e (7:472e) + INCROM $1c72e, $1c768 + +Func_1c768: ; 1c768 (7:4768) + push hl + ld a, [wd3aa] + ld l, $04 + call Func_39ad + ld a, [wd334] + xor $02 + ld [hl], a + call Func_1c58e + ld a, $02 + farcall Func_c29b + ld a, [wd3aa] + call Func_39a7 + ld a, [hl] + farcall Func_1187d + pop hl + ret + +Func_1c78d: ; 1c78d (7:478d) + push hl + ld a, [wd3aa] + ld l, $5 + call Func_39ad + set 5, [hl] + ld a, [wd3aa] + ld l, $8 + call Func_39ad + xor a + ld [hli], a +.asm_1c7a2 + ld [hl], c + inc hl + ld [hl], b + dec hl + call $39ea + cp $f0 + jr nc, .asm_1c7bb + push af + and $7f + call $45ff + pop af + bit 7, a + jr z, .asm_1c7dc + inc bc + jr .asm_1c7a2 + +.asm_1c7bb + cp $ff + jr z, .asm_1c7d2 + inc bc + call $39ea + push hl + ld l, a + ld h, $0 + bit 7, l + jr z, .asm_1c7cc + dec h + +.asm_1c7cc + add hl, bc + ld c, l + ld b, h + pop hl + jr .asm_1c7a2 + +.asm_1c7d2 + ld a, [wd3aa] + ld l, $5 + call Func_39ad + res 5, [hl] + +.asm_1c7dc + pop hl + ret + +Func_1c7de: ; 1c7de (7:47de) + ld a, [wc3b7] + and $20 + ret +; 0x1c7e4 + + INCROM $1c7e4, $1c82e + +Func_1c82e: ; 1c82e (7:482e) + INCROM $1c82e, $1c83d + +Func_1c83d: ; 1c83d (7:483d) + push hl + push bc + ld b, a + ld c, $a + ld hl, wd3bb +.asm_1c845 + ld a, [hl] + or a + jr z, .asm_1c853 + cp b + jr z, .asm_1c855 + inc hl + dec c + jr nz, .asm_1c845 + debug_ret + jr .asm_1c855 + +.asm_1c853 + ld a, b + ld [hl], a + +.asm_1c855 + pop bc + pop hl + ret +; 0x1c858 + + INCROM $1c858, $1d078 + +Func_1d078: ; 1d078 (7:5078) + ld a, [wd627] + or a + jr z, .asm_1d0c7 +.asm_1d07e + ld a, MUSIC_STOP + call PlaySong + call Func_3ca0 + call $5335 + call $53ce + xor a + ld [wd635], a + ld a, $3c + ld [wd626], a +.asm_1d095 + call DoFrameIfLCDEnabled + call UpdateRNGSources + call $5614 + ld hl, wd635 + inc [hl] + call AssertSongFinished + or a + jr nz, .asm_1d0ae + farcall Func_10ab4 + jr .asm_1d07e +.asm_1d0ae + ld hl, wd626 + ld a, [hl] + or a + jr z, .asm_1d0b8 + dec [hl] + jr .asm_1d095 +.asm_1d0b8 + ldh a, [hButtonsPressed] + and A_BUTTON | START + jr z, .asm_1d095 + ld a, $2 + call PlaySFX + farcall Func_10ab4 + +.asm_1d0c7 + call $50fa + call $511c + ld a, [wd628] + cp $2 + jr nz, .asm_1d0db + call $5289 + jr c, Func_1d078 + jr .asm_1d0e7 +.asm_1d0db + ld a, [wd628] + cp $1 + jr nz, .asm_1d0e7 + call $52b8 + jr c, Func_1d078 +.asm_1d0e7 + ld a, [wd628] + cp $0 + jr nz, .asm_1d0f3 + call $52dd + jr c, Func_1d078 +.asm_1d0f3 + call ResetDoFrameFunction + call Func_3ca0 + ret +; 0x1d0fa + + INCROM $1d0fa, $1d11c + +Func_1d11c: ; 1d11c (7:511c) + ld a, MUSIC_PC_MAIN_MENU + call PlaySong + call DisableLCD + farcall $4, $4000 + ld de, $308f + call Func_2275 + call Func_3ca0 + xor a + ld [wcd08], a + call $51e1 + call $517f + ld a, $ff + ld [wd626], a + ld a, [wd627] + cp $4 + jr c, .asm_1d14f + ld a, [wd624] + or a + jr z, .asm_1d14f + ld a, $1 +.asm_1d14f + ld hl, wd636 + farcall Func_111e9 + farcall $4, $4031 +.asm_1d15a + call DoFrameIfLCDEnabled + call UpdateRNGSources + call HandleMenuInput + push af + call $51e9 + pop af + jr nc, .asm_1d15a + ldh a, [hCurrentMenuItem] + cp e + jr nz, .asm_1d15a + ld [wd627], a + ld a, [wd624] + or a + jr nz, .asm_1d17a + inc e + inc e +.asm_1d17a + ld a, e + ld [wd628], a + ret +; 0x1d17f + + INCROM $1d17f, $1d306 + +Func_1d306: ; 1d306 (7:5306) + INCROM $1d306, $1d386 + +Titlescreen_1d386: ; 1d386 (7:5386) + call AssertSongFinished + or a + jr nz, .asm_1d39f + call DisableLCD + ld a, MUSIC_TITLESCREEN + call PlaySong + ld bc, $0000 + ld a, $0 + call Func_3df3 + call Func_1d59c +.asm_1d39f + call Func_3ca0 + call Func_1d3a9 + call EnableLCD + ret + +Func_1d3a9: ; 1d3a9 (7:53a9) + INCROM $1d3a9, $1d42e + +Func_1d42e: ; 1d42e (7:542e) + INCROM $1d42e, $1d519 + +Titlescreen_1d519: ; 1d519 (7:5519) + ld a, MUSIC_TITLESCREEN + call PlaySong + call Func_1d42e + scf + ret +; 0x1d523 + + INCROM $1d523, $1d59c + +Func_1d59c: ; 1d59c (7:559c) + INCROM $1d59c, $1d6ad + +Credits_1d6ad: ; 1d6ad (7:56ad) + ld a, MUSIC_STOP + call PlaySong + call $5705 + call $4858 + xor a + ld [wd324], a + ld a, MUSIC_CREDITS + call PlaySong + farcall $4, $4031 + call $57fc +.asm_1d6c8 + call DoFrameIfLCDEnabled + call $5765 + call $580b + ld a, [wd633] + cp $ff + jr nz, .asm_1d6c8 + call Func_3c96 + ld a, $8 + farcall $4, $6863 + ld a, MUSIC_STOP + call PlaySong + farcall Func_10ab4 + call Func_3ca4 + call Set_WD_off + call $5758 + call EnableLCD + call DoFrameIfLCDEnabled + call DisableLCD + ld hl, wLCDC + set 1, [hl] + call ResetDoFrameFunction + ret +; 0x1d705 + + INCROM $1d705, $1e1c4 diff --git a/src/engine/bank08.asm b/src/engine/bank08.asm new file mode 100644 index 0000000..ca52ca5 --- /dev/null +++ b/src/engine/bank08.asm @@ -0,0 +1,132 @@ + INCROM $20000, $200e5 + +; 0 - e4 is a big set of data, seems to be one entry for each card + +Func_200e5: ; 200e5 (8:40e5) + ld [wce18], a + call CreateHandCardList + ld hl, wDuelTempList + ld de, wTempHandCardList + call CopyBuffer + ld hl, wTempHandCardList + ld a, [hli] + ld [wce16], a + cp $ff + ret z + push hl + ld a, [wce18] + ld d, a + ld hl, $4000 +.asm_4106 + xor a + ld [wce21], a + ld a, [hli] + cp $ff + jp z, $41b1 + cp d + jp nz, .incHL5 + ld a, [hli] + ld [wce17], a + ld a, [wce16] + call LoadCardDataToBuffer1_FromDeckIndex + cp $d2 + jr nz, .asm_2012b + ld b, a + ld a, [wce20] + and $2 + jr nz, .incHL4 + ld a, b + +.asm_2012b + ld b, a + ld a, [wce17] + cp b + jr nz, .incHL4 + push hl + push de + ld a, [wce16] + ldh [hTempCardIndex_ff9f], a + bank1call CheckCantUseTrainerDueToHeadache + jp c, $41a8 + call LoadNonPokemonCardEffectCommands + ld a, $1 + call TryExecuteEffectCommandFunction + jp c, $41a8 + farcall $5, $743b + jr c, .asm_201a8 + pop de + pop hl + push hl + call CallIndirect + pop hl + jr nc, .incHL4 + inc hl + inc hl + ld [wce19], a + push de + push hl + ld a, [wce16] + ldh [hTempCardIndex_ff9f], a + ld a, $6 + bank1call $67be + pop hl + pop de + jr c, .incHL2 + push hl + call CallIndirect + pop hl + inc hl + inc hl + ld a, [wce20] + ld b, a + ld a, [wce21] + or b + ld [wce20], a + pop hl + and $8 + jp z, $40f7 + call CreateHandCardList + ld hl, wDuelTempList + ld de, wTempHandCardList + call $697b + ld hl, wTempHandCardList + ld a, [wce20] + and $f7 + ld [wce20], a + jp $40f7 + +.incHL5 + inc hl + +.incHL4 + inc hl + inc hl + +.incHL2 + inc hl + inc hl + jp .asm_4106 + +.asm_201a8 + pop de + pop hl + inc hl + inc hl + inc hl + inc hl + jp .asm_4106 +; 0x201b1 + + INCROM $201b1, $2297b + +; copies $ff terminated buffer from hl to de +CopyBuffer: ; 2297b (8:697b) + ld a, [hli] + ld [de], a + cp $ff + ret z + inc de + jr CopyBuffer +; 0x22983 + + INCROM $22983, $24000 diff --git a/src/engine/bank1.asm b/src/engine/bank1.asm deleted file mode 100644 index 7933fc4..0000000 --- a/src/engine/bank1.asm +++ /dev/null @@ -1,3784 +0,0 @@ -; continuation of Bank0 Start -; supposed to be the main loop, but the game never returns from _GameLoop anyway -GameLoop: ; 4000 (1:4000) - di - ld sp, $e000 - call ResetSerial - call EnableInt_VBlank - call EnableInt_Timer - call EnableSRAM - ld a, [sa006] - ld [wTextSpeed], a - ld a, [sa009] - ld [wccf2], a - call DisableSRAM - ld a, $1 - ld [wUppercaseFlag], a - ei - farcall CommentedOut_1a6cc - ldh a, [hButtonsHeld] - cp A_BUTTON | B_BUTTON - jr z, .ask_erase_backup_ram - farcall _GameLoop - jr GameLoop -.ask_erase_backup_ram - call Func_405a - call EmptyScreen - ldtx hl, ResetBackUpRamText - call YesOrNoMenuWithText - jr c, .reset_game -; erase sram - call EnableSRAM - xor a - ld [sa000], a - call DisableSRAM -.reset_game - jp Reset - -Func_4050: ; 4050 (1:4050) - farcall Func_1996e - ld a, $1 - ld [wUppercaseFlag], a - ret - -Func_405a: ; 405a (1:405a) - xor a - ld [wTileMapFill], a - call DisableLCD - call LoadDuelHUDTiles - call SetDefaultPalettes - ld de, $387f - call Func_2275 - ret -; 0x406e - -CommentedOut_406e: ; 406e (1:406e) - ret -; 0x406f - -; try to resume a saved duel from the main menu -TryContinueDuel: ; 406f (1:406f) - call Func_420b - call $66e9 - ldtx hl, BackUpIsBrokenText - jr c, FailedToContinueDuel -; fallthrough - -ContinueDuel: ; 407a (1:407a) - ld hl, sp+$00 - ld a, l - ld [wDuelReturnAddress], a - ld a, h - ld [wDuelReturnAddress + 1], a - call ClearJoypad - ld a, [wDuelTheme] - call PlaySong - xor a - ld [wDuelFinished], a - call DuelMainInterface - jp StartDuel.begin_turn -; 0x4097 - -FailedToContinueDuel: ; 4097 (1:4097) - call DrawWideTextBox_WaitForInput - call ResetSerial - scf - ret -; 0x409f - -; this function begins the duel after the opponent's -; graphics, name and deck have been introduced -StartDuel: ; 409f (1:409f) - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - ld a, DUELIST_TYPE_PLAYER - ld [wPlayerDuelistType], a - ld a, [wcc19] - ld [wOpponentDeckID], a - call LoadPlayerDeck - call SwapTurn - call LoadOpponentDeck - call SwapTurn - jr .continue - - ld a, MUSIC_DUEL_THEME_1 - ld [wDuelTheme], a - ld hl, wOpponentName - xor a - ld [hli], a - ld [hl], a - ld [wIsPracticeDuel], a - -.continue - ld hl, sp+$0 - ld a, l - ld [wDuelReturnAddress], a - ld a, h - ld [wDuelReturnAddress + 1], a - xor a - ld [wCurrentDuelMenuItem], a - call Func_420b - ld a, [wcc18] - ld [wDuelInitialPrizes], a - call $70aa - ld a, [wDuelTheme] - call PlaySong - call Func_4b60 - ret c - -; the loop returns here after every turn switch -.main_duel_loop ; 40ee (1:40ee) - xor a - ld [wCurrentDuelMenuItem], a - call UpdateSubstatusConditions_StartOfTurn - call $54c8 - call HandleTurn - -.begin_turn - call Func_0f58 - ld a, [wDuelFinished] - or a - jr nz, .duel_finished - call UpdateSubstatusConditions_EndOfTurn - call $6baf - call Func_3b31 - call Func_0f58 - ld a, [wDuelFinished] - or a - jr nz, .duel_finished - ld hl, wDuelTurns - inc [hl] - ld a, [wDuelType] - cp DUELTYPE_PRACTICE - jr z, .practice_duel - -.next_turn - call SwapTurn - jr .main_duel_loop - -.practice_duel - ld a, [wIsPracticeDuel] - or a - jr z, .next_turn - ld a, [hl] - cp 15 ; the practice duel lasts 15 turns - jr c, .next_turn - xor a ; DUEL_WIN - ld [wDuelResult], a - ret - -.duel_finished - call ZeroObjectPositionsAndToggleOAMCopy - call EmptyScreen - ld a, BOXMSG_DECISION - call DrawDuelBoxMessage - ldtx hl, DecisionText - call DrawWideTextBox_WaitForInput - call EmptyScreen - ldh a, [hWhoseTurn] - push af - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - call Func_4a97 - call Func_4ad6 - pop af - ldh [hWhoseTurn], a - call Func_3b21 - ld a, [wDuelFinished] - cp TURN_PLAYER_WON - jr z, .active_duelist_won_battle - cp TURN_PLAYER_LOST - jr z, .active_duelist_lost_batte - ld a, $5f - ld c, MUSIC_DARK_DIDDLY - ldtx hl, DuelWasADrawText - jr .handle_duel_finished - -.active_duelist_won_battle - ldh a, [hWhoseTurn] - cp PLAYER_TURN - jr nz, .opponent_won_battle -.player_won_battle - xor a ; DUEL_WIN - ld [wDuelResult], a - ld a, $5d - ld c, MUSIC_MATCH_VICTORY - ldtx hl, WonDuelText - jr .handle_duel_finished - -.active_duelist_lost_batte - ldh a, [hWhoseTurn] - cp PLAYER_TURN - jr nz, .player_won_battle -.opponent_won_battle - ld a, DUEL_LOSS - ld [wDuelResult], a - ld a, $5e - ld c, MUSIC_MATCH_LOSS - ldtx hl, LostDuelText - -.handle_duel_finished - call Func_3b6a - ld a, c - call PlaySong - ld a, OPPONENT_TURN - ldh [hWhoseTurn], a - call DrawWideTextBox_PrintText - call EnableLCD -.wait_song - call DoFrame - call AssertSongFinished - or a - jr nz, .wait_song - ld a, [wDuelFinished] - cp TURN_PLAYER_TIED - jr z, .tied_battle - call Func_39fc - call WaitForWideTextBoxInput - call Func_3b31 - call ResetSerial - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - ret - -.tied_battle - call WaitForWideTextBoxInput - call Func_3b31 - ld a, [wDuelTheme] - call PlaySong - ldtx hl, StartSuddenDeathMatchText - call DrawWideTextBox_WaitForInput - ld a, 1 - ld [wDuelInitialPrizes], a - call $70aa - ld a, [wDuelType] - cp DUELTYPE_LINK - jr z, .link_duel - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - call Func_4b60 - jp .main_duel_loop - -.link_duel - call Func_0f58 - ld h, PLAYER_TURN - ld a, [wSerialOp] - cp $29 - jr z, .got_turn - ld h, OPPONENT_TURN - -.got_turn - ld a, h - ldh [hWhoseTurn], a - call Func_4b60 - jp nc, .main_duel_loop - ret -; 0x420b - -Func_420b: ; 420b (1:420b) - xor a - ld [wTileMapFill], a - call ZeroObjectPositionsAndToggleOAMCopy - call EmptyScreen - call LoadDuelHUDTiles - call SetDefaultPalettes - ld de, $389f - call Func_2275 - call EnableLCD - ret -; 0x4225 - -; handle the turn of the duelist identified by hWhoseTurn -HandleTurn: ; 4225 (1:4225) - ld a, DUELVARS_DUELIST_TYPE - call GetTurnDuelistVariable - ld [wDuelistType], a - ld a, [wDuelTurns] - cp 2 - jr c, .skip_let_evolve ; jump if it's the turn holder's first turn - call SetAllPlayAreaPokemonCanEvolve - -.skip_let_evolve - call Func_70e6 - call Func_4933 - call DrawCardFromDeck - jr nc, .deck_not_empty - ld a, TURN_PLAYER_LOST - ld [wDuelFinished], a - ret - -.deck_not_empty - ldh [hTempCardIndex_ff98], a - call AddCardToHand - ld a, [wDuelistType] - cp DUELIST_TYPE_PLAYER - jr z, HandleTurn_PlayerDrewCard - call SwapTurn - call IsClairvoyanceActive - call SwapTurn - call c, DisplayPlayerDrawCardScreen - jr DuelMainInterface - -; display the animation of the player drawing the card at hTempCardIndex_ff98 -; save duel state to SRAM, and fall through to DuelMainInterface to effectively -; begin the turn -HandleTurn_PlayerDrewCard: - call DisplayPlayerDrawCardScreen - call SaveDuelStateToSRAM -; fallthrough - -Func_4268: - ld a, $06 - call DoPracticeDuelAction -; fallthrough - -; print the main interface during a duel, including background, Pokemon, HUDs and a text box. -; the bottom text box changes depending on whether the turn belongs to the player (show the duel menu), -; an AI opponent (print "Waiting..." and a reduced menu) or a link opponent (print " is thinking"). -DuelMainInterface: ; 426d (1:426d) - call DrawDuelMainScene - ld a, [wDuelistType] - cp DUELIST_TYPE_PLAYER - jr z, PrintDuelMenu - cp DUELIST_TYPE_LINK_OPP - jp z, $6911 - ; DUELIST_TYPE_AI_OPP - xor a - ld [wVBlankCtr], a - ld [wcbf9], a - ldtx hl, DuelistIsThinkingText - call DrawWideTextBox_PrintTextNoDelay - call Func_2bbf - ld a, $ff - ld [wcc11], a - ld [wcc10], a - ret - -PrintDuelMenu: ; 4295 (1:4295) - call DrawWideTextBox - ld hl, $54e9 - call Func_2c08 -.asm_429e - call $669d - ld a, [wDuelFinished] - or a - ret nz - ld a, [wCurrentDuelMenuItem] - call SetMenuItem -; fallthrough - -HandleDuelMenuInputAndShortcuts: - call DoFrame - ldh a, [hButtonsHeld] - and B_BUTTON - jr z, .b_not_held - ldh a, [hButtonsPressed] - bit D_UP_F, a - jr nz, DuelMenuShortcut_OpponentPlayArea - bit D_DOWN_F, a - jr nz, DuelMenuShortcut_PlayerPlayArea - bit D_LEFT_F, a - jr nz, DuelMenuShortcut_PlayerDiscardPile - bit D_RIGHT_F, a - jr nz, DuelMenuShortcut_OpponentDiscardPile - bit START_F, a - jp nz, DuelMenuShortcut_OpponentActivePokemon - -.b_not_held - ldh a, [hButtonsPressed] - and START - jp nz, DuelMenuShortcut_PlayerActivePokemon - ldh a, [hButtonsPressed] - bit SELECT_F, a - jp nz, DuelMenuShortcut_BothActivePokemon - ld a, [wcbe7] - or a - jr nz, HandleDuelMenuInputAndShortcuts - call HandleDuelMenuInput - ld a, e - ld [wCurrentDuelMenuItem], a - jr nc, HandleDuelMenuInputAndShortcuts - ldh a, [hCurrentMenuItem] - ld hl, DuelMenuFunctionTable - jp JumpToFunctionInTable - -DuelMenuFunctionTable: ; 42f1 (1:42f1) - dw DuelMenu_Hand - dw DuelMenu_Attack - dw DuelMenu_Check - dw DuelMenu_PkmnPower - dw DuelMenu_Retreat - dw DuelMenu_Done - -Func_42fd: ; 42fd (1:42fd) - call DrawCardFromDeck - call nc, AddCardToHand - ld a, $0b - call SetDuelAIAction - jp PrintDuelMenu.asm_429e -; 0x430b - -; triggered by pressing B + UP in the duel menu -DuelMenuShortcut_OpponentPlayArea: ; 430b (1:430b) - call OpenOpponentPlayAreaScreen - jp DuelMainInterface - -; triggered by pressing B + DOWN in the duel menu -DuelMenuShortcut_PlayerPlayArea: ; 4311 (1:4311) - call OpenPlayAreaScreen - jp DuelMainInterface - -; triggered by pressing B + LEFT in the duel menu -DuelMenuShortcut_OpponentDiscardPile: ; 4317 (1:4317) - call OpenOpponentDiscardPileScreen - jp c, PrintDuelMenu - jp DuelMainInterface - -; triggered by pressing B + RIGHT in the duel menu -DuelMenuShortcut_PlayerDiscardPile: ; 4320 (1:4320) - call OpenPlayerDiscardPileScreen - jp c, PrintDuelMenu - jp DuelMainInterface - -; draw the opponent's play area screen -OpenOpponentPlayAreaScreen: ; 4329 (1:4329) - call SwapTurn - call OpenPlayAreaScreen - call SwapTurn - ret - -; draw the turn holder's play area screen -OpenPlayAreaScreen: ; 4333 (1:4333) - call HasAlivePokemonInPlayArea - jp OpenPlayAreaScreenForViewing - -; draw the opponent's discard pile screen -OpenOpponentDiscardPileScreen: ; 4339 (1:4339) - call SwapTurn - call OpenDiscardPileScreen - jp SwapTurn - -; draw the player's discard pile screen -OpenPlayerDiscardPileScreen: ; 4342 (1:4342) - jp OpenDiscardPileScreen - -Func_4345: ; 4345 (1:4345) - call SwapTurn - call Func_434e - jp SwapTurn -; 0x434e - -Func_434e: ; 434e (1:434e) - call CreateHandCardList - jr c, .no_cards_in_hand - call DrawCardListScreenLayout - ld a, START + A_BUTTON - ld [wcbd6], a - jp Func_55f0 -.no_cards_in_hand - ldtx hl, NoCardsInHandText - jp DrawWideTextBox_WaitForInput -; 0x4364 - -; triggered by pressing B + START in the duel menu -DuelMenuShortcut_OpponentActivePokemon: ; 4364 (1:4364) - call SwapTurn - call OpenActivePokemonScreen - call SwapTurn - jp DuelMainInterface -; 0x4370 - -; triggered by pressing START in the duel menu -DuelMenuShortcut_PlayerActivePokemon: ; 4370 (1:4370) - call OpenActivePokemonScreen - jp DuelMainInterface -; 0x4376 - -; draw the turn holder's active Pokemon screen if it exists -OpenActivePokemonScreen: ; 4376 (1:4376) - ld a, DUELVARS_ARENA_CARD - call GetTurnDuelistVariable - cp -1 - ret z - call GetCardIDFromDeckIndex - call LoadCardDataToBuffer1_FromCardID - ld hl, wcbc9 - xor a - ld [hli], a - ld [hl], a - call Func_576a - ret -; 0x438e - -; triggered by selecting the "Pkmn Power" item in the duel menu -DuelMenu_PkmnPower: ; 438e (1:438e) - call $6431 - jp c, DuelMainInterface - call Func_1730 - jp DuelMainInterface - -; triggered by selecting the "Done" item in the duel menu -DuelMenu_Done: ; 439a (1:439a) - ld a, $08 - call DoPracticeDuelAction - jp c, Func_4268 - ld a, $05 - call SetDuelAIAction - call $717a - ret - -; triggered by selecting the "Retreat" item in the duel menu -DuelMenu_Retreat: ; 43ab (1:43ab) - ld a, DUELVARS_ARENA_CARD_STATUS - call GetTurnDuelistVariable - and CNF_SLP_PRZ - cp CONFUSED - ldh [hTemp_ffa0], a - jr nz, Func_43f1 - ld a, [wcc0c] - or a - jr nz, Func_43e8 - call $45bb - jr c, Func_441f - call $4611 - jr c, Func_441c - ldtx hl, SelectPkmnOnBenchToSwitchWithActiveText - call DrawWideTextBox_WaitForInput - call OpenPlayAreaScreenForSelection - jr c, Func_441c - ld [wBenchSelectedPokemon], a - ld a, [wBenchSelectedPokemon] - ldh [hTempPlayAreaLocationOffset_ffa1], a - ld a, $04 - call SetDuelAIAction - call $657a - jr nc, Func_441c - call DrawDuelMainScene - -Func_43e8: ; 43e8 - ldtx hl, UnableToRetreatText - call DrawWideTextBox_WaitForInput - jp PrintDuelMenu - -Func_43f1: ; 43f1 (1:43f1) - call $45bb - jr c, Func_441f - call $4611 - jr c, Func_441c - call $6558 - ldtx hl, SelectPkmnOnBenchToSwitchWithActiveText - call DrawWideTextBox_WaitForInput - call OpenPlayAreaScreenForSelection - ld [wBenchSelectedPokemon], a - ldh [hTempPlayAreaLocationOffset_ffa1], a - push af - call $6564 - pop af - jp c, DuelMainInterface - ld a, $04 - call SetDuelAIAction - call $657a - -Func_441c: ; 441c (1:441c) - jp DuelMainInterface - -Func_441f: ; 441f (1:441f) - call DrawWideTextBox_WaitForInput - jp PrintDuelMenu - -; triggered by selecting the "Hand" item in the duel menu -DuelMenu_Hand: ; 4425 (1:4425) - ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND - call GetTurnDuelistVariable - or a - jr nz, OpenPlayerHandScreen - ldtx hl, NoCardsInHandText - call DrawWideTextBox_WaitForInput - jp PrintDuelMenu - -; draw the screen for the player's hand and handle user input to for example check -; a card or attempt to use a card, playing the card if possible in that case. -OpenPlayerHandScreen: ; 4436 (1:4436) - call CreateHandCardList - call DrawCardListScreenLayout - ldtx hl, PleaseSelectHandText - call SetCardListInfoBoxText - ld a, $1 - ld [wcbde], a -.handle_input - call Func_55f0 - push af - ld a, [wcbdf] - or a - call nz, SortHandCardsByID - pop af - jp c, DuelMainInterface - ldh a, [hTempCardIndex_ff98] - call LoadCardDataToBuffer1_FromDeckIndex - ld a, [wLoadedCard1Type] - ld c, a - bit TYPE_TRAINER_F, c - jr nz, .trainer_card - bit TYPE_ENERGY_F, c - jr nz, UseEnergyCard - call UsePokemonCard - jr c, ReloadCardListScreen ; jump if card not played - jp DuelMainInterface -.trainer_card - call UseTrainerCard - jr c, ReloadCardListScreen ; jump if card not played - jp DuelMainInterface - -; use the energy card with deck index at hTempCardIndex_ff98 -; c contains the type of energy card being played -UseEnergyCard: ; 4477 (1:4477) - ld a, c - cp TYPE_ENERGY_WATER - jr nz, .not_water_energy - call IsRainDanceActive - jr c, .rain_dance_active - -.not_water_energy - ld a, [wAlreadyPlayedEnergy] - or a - jr nz, .already_played_energy - call HasAlivePokemonInPlayArea - call OpenPlayAreaScreenForSelection ; choose card to play energy card on - jp c, DuelMainInterface ; exit if no card was chosen -.play_energy_set_played - ld a, $1 - ld [wAlreadyPlayedEnergy], a -.play_energy - ldh a, [hTempPlayAreaLocationOffset_ff9d] - ldh [hTempPlayAreaLocationOffset_ffa1], a - ld e, a - ldh a, [hTempCardIndex_ff98] - ldh [hTemp_ffa0], a - call PutHandCardInPlayArea - call $61b8 - ld a, $3 - call SetDuelAIAction - call $68e4 - jp DuelMainInterface - -.rain_dance_active - call HasAlivePokemonInPlayArea - call OpenPlayAreaScreenForSelection ; choose card to play energy card on - jp c, DuelMainInterface ; exit if no card was chosen - call CheckRainDanceScenario - jr c, .play_energy - ld a, [wAlreadyPlayedEnergy] - or a - jr z, .play_energy_set_played - ldtx hl, MayOnlyAttachOneEnergyCardText - call DrawWideTextBox_WaitForInput - jp OpenPlayerHandScreen - -.already_played_energy - ldtx hl, MayOnlyAttachOneEnergyCardText - call DrawWideTextBox_WaitForInput -; fallthrough - -; reload the card list screen after the card trying to play couldn't be played -ReloadCardListScreen: ; 44d2 (1:44d2) - call CreateHandCardList - ; skip doing the things that have already been done when initially opened - call DrawCardListScreenLayout.draw - jp OpenPlayerHandScreen.handle_input -; 0x44db - -; use a basic Pokemon card on the arena or bench, or place an stage 1 or 2 -; Pokemon card over a Pokemon card already in play to evolve it. -; the card to use is loaded in wLoadedCard1 and its deck index is at hTempCardIndex_ff98. -; return nc if the card was played, carry if it wasn't. -UsePokemonCard: ; 44db (1:44db) - ld a, [wLoadedCard1Stage] - or a ; BASIC - jr nz, .try_evolve ; jump if the card being played is a Stage 1 or 2 Pokemon - ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA - call GetTurnDuelistVariable - cp MAX_PLAY_AREA_POKEMON - jr nc, .no_space - ldh a, [hTempCardIndex_ff98] - ldh [hTemp_ffa0], a - call PutHandPokemonCardInPlayArea - ldh [hTempPlayAreaLocationOffset_ff9d], a - add DUELVARS_ARENA_CARD_STAGE - call GetTurnDuelistVariable - ld [hl], BASIC - ld a, $01 - call SetDuelAIAction - ldh a, [hTempCardIndex_ff98] - call LoadCardDataToBuffer1_FromDeckIndex - ld a, 20 - call CopyCardNameAndLevel - ld [hl], $00 - ld hl, $0000 - call LoadTxRam2 - ldtx hl, PlacedOnTheBenchText - call DrawWideTextBox_WaitForInput - call Func_161e - or a - ret -.no_space - ldtx hl, NoSpaceOnTheBenchText - call DrawWideTextBox_WaitForInput - scf - ret -.try_evolve - ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA - call GetTurnDuelistVariable - ld c, a - ldh a, [hTempCardIndex_ff98] - ld d, a - ld e, PLAY_AREA_ARENA - push de - push bc -.next_play_area_pkmn - push de - call CheckIfCanEvolveInto - pop de - jr nc, .can_evolve - inc e - dec c - jr nz, .next_play_area_pkmn - pop bc - pop de -.find_cant_evolve_reason_loop - push de - call CheckIfCanEvolveInto - pop de - ldtx hl, CantEvolvePokemonInSameTurnItsPlacedText - jr nz, .cant_same_turn - inc e - dec c - jr nz, .find_cant_evolve_reason_loop - ldtx hl, NoPokemonCapableOfEvolvingText -.cant_same_turn - ; don't bother opening the selection screen if there are no pokemon capable of evolving - call DrawWideTextBox_WaitForInput - scf - ret -.can_evolve - pop bc - pop de - call IsPrehistoricPowerActive - jr c, .prehistoric_power - call HasAlivePokemonInPlayArea -.try_evolve_loop - call OpenPlayAreaScreenForSelection - jr c, .done - ldh a, [hTempCardIndex_ff98] - ldh [hTemp_ffa0], a - ldh a, [hTempPlayAreaLocationOffset_ff9d] - ldh [hTempPlayAreaLocationOffset_ffa1], a - call EvolvePokemonCard - jr c, .try_evolve_loop ; jump if evolution wasn't successsful somehow - ld a, $02 - call SetDuelAIAction - call $61b8 - call $68fa - call Func_161e -.done - or a - ret -.prehistoric_power - call DrawWideTextBox_WaitForInput - scf - ret -; 0x4585 - -; triggered by selecting the "Check" item in the duel menu -DuelMenu_Check: ; 4585 (1:4585) - call Func_3b31 - call Func_3096 - jp DuelMainInterface - -; triggered by pressing SELECT in the duel menu -DuelMenuShortcut_BothActivePokemon:: ; 458e (1:458e) - call Func_3b31 - call Func_4597 - jp DuelMainInterface -; 0x4597 - -Func_4597: ; 4597 (1:4597) - call Func_30a6 - ret c - call Func_45a9 - ret c - call SwapTurn - call Func_45a9 - call SwapTurn - ret -; 0x45a9 - -Func_45a9: ; 45a9 (1:45a9) - call HasAlivePokemonInPlayArea - ld a, $02 - ld [wcbd4], a - call OpenPlayAreaScreenForViewing - ldh a, [hButtonsPressed] - and B_BUTTON - ret z - scf - ret -; 0x45bb - - INCROM $45bb, $46fc - -; triggered by selecting the "Attack" item in the duel menu -DuelMenu_Attack: ; 46fc (1:46fc) - call HandleCantAttackSubstatus - jr c, .alert_cant_attack_and_cancel_menu - call CheckIfActiveCardParalyzedOrAsleep - jr nc, .can_attack -.alert_cant_attack_and_cancel_menu - call DrawWideTextBox_WaitForInput - jp PrintDuelMenu - -.can_attack - xor a - ld [wSelectedDuelSubMenuItem], a -.try_open_attack_menu - call LoadPokemonMovesToDuelTempList - or a - jr nz, .open_attack_menu - ldtx hl, NoSelectableAttackText - call DrawWideTextBox_WaitForInput - jp PrintDuelMenu - -.open_attack_menu - push af - ld a, [wSelectedDuelSubMenuItem] - ld hl, AttackMenuParameters - call InitializeMenuParameters - pop af - ld [wNumMenuItems], a - ldh a, [hWhoseTurn] - ld h, a - ld l, DUELVARS_ARENA_CARD - ld a, [hl] - call LoadCardDataToBuffer1_FromDeckIndex - -.wait_for_input - call DoFrame - ldh a, [hButtonsPressed] - and START - jr nz, .display_selected_move_info - call HandleMenuInput - jr nc, .wait_for_input - cp -1 ; was B pressed? - jp z, PrintDuelMenu - ld [wSelectedDuelSubMenuItem], a - call CheckIfEnoughEnergies - jr nc, .enough_energy - ldtx hl, NotEnoughEnergyCardsText - call DrawWideTextBox_WaitForInput - jr .try_open_attack_menu - -.enough_energy - ldh a, [hCurrentMenuItem] - add a - ld e, a - ld d, $00 - ld hl, wDuelTempList - add hl, de - ld d, [hl] ; card index within the deck (0 to 59) - inc hl - ld e, [hl] ; attack index (0 or 1) - call CopyMoveDataAndDamage_FromDeckIndex - call HandleAmnesiaSubstatus - jr c, .cannot_use_due_to_amnesia - ld a, $07 - call DoPracticeDuelAction - jp c, Func_4268 - call Func_1730 - jp c, DuelMainInterface - ret - -.cannot_use_due_to_amnesia - call DrawWideTextBox_WaitForInput - jr .try_open_attack_menu - -.display_selected_move_info - call Func_478b - call DrawDuelMainScene - jp .try_open_attack_menu - -Func_478b: ; 478b (1:478b) - ld a, CARDPAGE_POKEMON_OVERVIEW - ld [wCardPageNumber], a - xor a - ld [wcbc9], a - call EmptyScreen - call Func_3b31 - ld de, v0Tiles1 + $20 tiles - call LoadLoaded1CardGfx - call SetOBP1OrSGB3ToCardPalette - call SetBGP6OrSGB3ToCardPalette - call FlushAllPalettesOrSendPal23Packet - lb de, $38, $30 ; X Position and Y Position of top-left corner - call PlaceCardImageOAM - lb de, 6, 4 - call ApplyBGP6OrSGB3ToCardImage - ldh a, [hCurrentMenuItem] - ld [wSelectedDuelSubMenuItem], a - add a - ld e, a - ld d, $00 - ld hl, wDuelTempList + 1 - add hl, de - ld a, [hl] - or a - jr nz, .asm_47c9 - xor a - jr .asm_47cb - -.asm_47c9 - ld a, $02 - -.asm_47cb - ld [wcc04], a - -.asm_47ce - call Func_47ec - call EnableLCD - -.asm_47d4 - call DoFrame - ldh a, [hButtonsPressed2] - and D_RIGHT | D_LEFT - jr nz, .asm_47ce - ldh a, [hButtonsPressed] - and A_BUTTON | B_BUTTON - jr z, .asm_47d4 - ret - -AttackMenuParameters: - db 1, 13 ; cursor x, cursor y - db 2 ; y displacement between items - db 2 ; number of items - db $0f ; cursor tile number - db $00 ; tile behind cursor - dw $0000 ; function pointer if non-0 - -Func_47ec: ; $47ec (1:47ec) - ld a, [wcc04] - ld hl, $47f5 - jp JumpToFunctionInTable - -PtrTable_47f5: ; $47f5 (1:47f5) - dw Func_47fd - dw Func_4802 - dw Func_480d - dw Func_4812 - -Func_47fd: ; $47fd (1:47fd) - call $5d1f - jr Func_481b - -Func_4802: ; $4802 (1:4802) - ld hl, wLoadedCard1Move1Description + 2 - ld a, [hli] - or [hl] - ret z - call $5d27 - jr Func_481b - -Func_480d: ; $480d (1:480d) - call $5d2f - jr Func_481b - -Func_4812: ; $4812 (1:4812) - ld hl, wLoadedCard1Move2Description + 2 - ld a, [hli] - or [hl] - ret z - call $5d37 - -Func_481b: ; $481b (1:481b) - ld hl, wcc04 - ld a, $01 - xor [hl] - ld [hl], a - ret - -; copies the following to the wDuelTempList buffer: -; if pokemon's second moveslot is empty: , 0 -; else: , 0, , 1 -LoadPokemonMovesToDuelTempList: ; 4823 (1:4823) - call DrawWideTextBox - ld a, DUELVARS_ARENA_CARD - call GetTurnDuelistVariable - ldh [hTempCardIndex_ff98], a - call LoadCardDataToBuffer1_FromDeckIndex - ld c, $00 - ld b, $0d - ld hl, wDuelTempList - xor a - ld [wCardPageNumber], a - ld de, wLoadedCard1Move1Name - call CheckIfMoveExists - jr c, .check_for_second_attack_slot - ldh a, [hTempCardIndex_ff98] - ld [hli], a - xor a - ld [hli], a - inc c - push hl - push bc - ld e, b - ld hl, wLoadedCard1Move1Name - call $5c33 - pop bc - pop hl - inc b - inc b - -.check_for_second_attack_slot - ld de, wLoadedCard1Move2Name - call CheckIfMoveExists - jr c, .finish_loading_attacks - ldh a, [hTempCardIndex_ff98] - ld [hli], a - ld a, $01 - ld [hli], a - inc c - push hl - push bc - ld e, b - ld hl, wLoadedCard1Move2Name - call $5c33 - pop bc - pop hl - -.finish_loading_attacks - ld a, c - ret - -; given de = wLoadedCard*Move*Name, return carry if the move is a -; Pkmn Power or the moveslot is empty. -CheckIfMoveExists: ; 4872 (1:4872) - push hl - push de - push bc - ld a, [de] - ld c, a - inc de - ld a, [de] - or c - jr z, .return_no_move_found - ld hl, CARD_DATA_MOVE1_CATEGORY - (CARD_DATA_MOVE1_NAME + 1) - add hl, de - ld a, [hl] - and $ff ^ RESIDUAL - cp POKEMON_POWER - jr z, .return_no_move_found - or a -.return - pop bc - pop de - pop hl - ret -.return_no_move_found - scf - jr .return - -; check if the arena pokemon card has enough energy attached to it -; in order to use the selected move. -; returns: carry if not enough energy, nc if enough energy. -CheckIfEnoughEnergies: ; 488f (1:488f) - push hl - push bc - ld e, $0 - call GetPlayAreaCardAttachedEnergies - call HandleEnergyBurn - ldh a, [hCurrentMenuItem] - add a - ld e, a - ld d, $0 - ld hl, wDuelTempList - add hl, de - ld d, [hl] ; card index within the deck (0 to 59) - inc hl - ld e, [hl] ; attack index (0 or 1) - call _CheckIfEnoughEnergies - pop bc - pop hl - ret -; 0x48ac - -; check if a pokemon card has enough energy attached to it in order to use a move -; input: -; d = card index within the deck (0 to 59) -; e = attack index (0 or 1) -; wAttachedEnergies and wTotalAttachedEnergies -; returns: carry if not enough energy, nc if enough energy. -_CheckIfEnoughEnergies: ; 48ac (1:48ac) - push de - ld a, d - call LoadCardDataToBuffer1_FromDeckIndex - pop bc - push bc - ld de, wLoadedCard1Move1Energy - ld a, c - or a - jr z, .got_move - ld de, wLoadedCard1Move2Energy - -.got_move - ld hl, CARD_DATA_MOVE1_NAME - CARD_DATA_MOVE1_ENERGY - add hl, de - ld a, [hli] - or [hl] - jr z, .not_usable_or_not_enough_energies - ld hl, CARD_DATA_MOVE1_CATEGORY - CARD_DATA_MOVE1_ENERGY - add hl, de - ld a, [hl] - cp POKEMON_POWER - jr z, .not_usable_or_not_enough_energies - xor a - ld [wAttachedEnergiesAccum], a - ld hl, wAttachedEnergies - ld c, (NUM_COLORED_TYPES) / 2 - -.next_energy_type_pair - ld a, [de] - swap a - call CheckIfEnoughEnergiesOfType - jr c, .not_usable_or_not_enough_energies - ld a, [de] - call CheckIfEnoughEnergiesOfType - jr c, .not_usable_or_not_enough_energies - inc de - dec c - jr nz, .next_energy_type_pair - ld a, [de] ; colorless energy - swap a - and $f - ld b, a - ld a, [wAttachedEnergiesAccum] - ld c, a - ld a, [wTotalAttachedEnergies] - sub c - cp b - jr c, .not_usable_or_not_enough_energies - or a -.done - pop de - ret - -.not_usable_or_not_enough_energies - scf - jr .done -; 0x4900 - -; given the amount of energies of a specific type required for an attack in the -; lower nybble of register a, test if the pokemon card has enough energies of that type -; to use the move. Return carry if not enough energy, nc if enough energy. -CheckIfEnoughEnergiesOfType: ; 4900 (1:4900) - and $f - push af - push hl - ld hl, wAttachedEnergiesAccum - add [hl] - ld [hl], a ; accumulate the amount of energies required - pop hl - pop af - jr z, .enough_energies ; jump if no energies of this type are required - cp [hl] - ; jump if the energies required of this type are not more than the amount attached - jr z, .enough_energies - jr c, .enough_energies - inc hl - scf - ret - -.enough_energies - inc hl - or a - ret -; 0x4918 - -; return carry and the corresponding text in hl if the turn holder's -; arena Pokemon card is paralyzed or asleep. -CheckIfActiveCardParalyzedOrAsleep: ; 4918 (1:4918) - ld a, DUELVARS_ARENA_CARD_STATUS - call GetTurnDuelistVariable - and CNF_SLP_PRZ - cp PARALYZED - jr z, .paralyzed - cp ASLEEP - jr z, .asleep - or a - ret -.paralyzed - ldtx hl, UnableDueToParalysisText - jr .return_with_status_condition -.asleep - ldtx hl, UnableDueToSleepText -.return_with_status_condition - scf - ret - -; this handles drawing a card at the beginning of the turn among other things -Func_4933: ; 4933 (1:4933) - ld a, $01 - push hl - push de - push bc - ld [wcbe8], a - xor a - ld [wcbe9], a - ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK - call GetTurnDuelistVariable - ld a, DECK_SIZE - sub [hl] - ld hl, wcbe8 - cp [hl] - jr nc, .has_cards_left - ld [hl], a -.has_cards_left - ld a, [wcac2] - cp $07 - jr z, .asm_495f - cp $09 - jr z, .asm_495f - call EmptyScreen - call Func_4a97 -.asm_495f - ld a, $07 - ld [wcac2], a - call Func_49ca - ld a, [wcbe8] - or a - jr nz, .can_draw - ldtx hl, NoCardsInDeckCannotDraw - call DrawWideTextBox_WaitForInput - jr .done -.can_draw - ld l, a - ld h, 0 - call LoadTxRam3 - ldtx hl, DrawCardsFromTheDeck - call DrawWideTextBox_PrintText - call EnableLCD -.asm_4984 - call Func_49a8 - ld hl, wcbe9 - inc [hl] - call Func_49ed - ld a, [wcbe9] - ld hl, wcbe8 - cp [hl] - jr c, .asm_4984 - ld c, 30 -.asm_4999 - call DoFrame - call Func_67b2 - jr c, .done - dec c - jr nz, .asm_4999 -.done - pop bc - pop de - pop hl - ret -; 0x49a8 - -Func_49a8: ; 49a8 (1:49a8) - call Func_3b21 - ld e, $56 - ldh a, [hWhoseTurn] - cp PLAYER_TURN - jr z, .asm_49b5 - ld e, $57 -.asm_49b5 - ld a, e - call Func_3b6a -.asm_49b9 - call DoFrame - call Func_67b2 - jr c, .asm_49c6 - call Func_3b52 - jr c, .asm_49b9 -.asm_49c6 - call Func_3b31 - ret -; 0x49ca - -Func_49ca: ; 49ca (1:49ca) - call LoadDuelDrawCardsScreenTiles - ld hl, $4a35 - call WriteDataBlocksToBGMap0 - ld a, [wConsole] - cp CONSOLE_CGB - jr nz, .not_cgb - call BankswitchVRAM1 - ld hl, $4a6e - call WriteDataBlocksToBGMap0 - call BankswitchVRAM0 -.not_cgb - call Func_49ed.player_turn - call Func_49ed.opponent_turn - ret -; 0x49ed - -Func_49ed: ; 49ed (1:49ed) - ldh a, [hWhoseTurn] - cp PLAYER_TURN - jr nz, .opponent_turn -.player_turn - ld a, [wPlayerNumberOfCardsInHand] - ld hl, wcbe9 - add [hl] - ld d, a - ld a, DECK_SIZE - ld hl, wPlayerNumberOfCardsNotInDeck - sub [hl] - ld hl, wcbe9 - sub [hl] - ld e, a - ld a, d - lb bc, 16, 10 - call $65b7 - ld a, e - lb bc, 10, 10 - jp $65b7 -.opponent_turn - ld a, [wOpponentNumberOfCardsInHand] - ld hl, wcbe9 - add [hl] - ld d, a - ld a, DECK_SIZE - ld hl, wOpponentNumberOfCardsNotInDeck - sub [hl] - ld hl, wcbe9 - sub [hl] - ld e, a - ld a, d - lb bc, 5, 3 - call $65b7 - ld a, e - lb bc, 11, 3 - jp $65b7 -; 0x4a35 - - INCROM $4a35, $4a97 - -Func_4a97: ; 4a97 (1:4a97) - call LoadDuelHUDTiles - ld de, wDefaultText - push de - call CopyPlayerName - lb de, 0, 11 - call Func_22ae - pop hl - call Func_21c5 - ld bc, $5 - call Func_3e10 - ld de, wDefaultText - push de - call CopyOpponentName - pop hl - call Func_23c1 - push hl - add SCREEN_WIDTH - ld d, a - ld e, 0 - call Func_22ae - pop hl - call Func_21c5 - ld a, [wOpponentPortrait] - ld bc, $d01 - call Func_3e2a - call DrawDuelHorizontalSeparator - ret -; 0x4ad6 - -Func_4ad6: ; 4ad6 (1:4ad6) - lb de, 8, 8 - call Func_4ae9 - call SwapTurn - lb de, 1, 1 - call Func_4ae9 - call SwapTurn - ret -; 0x4ae9 - -Func_4ae9: ; 4ae9 (1:4ae9) - call $5f4a - ld hl, $7b - call Func_2c1b - call $5f50 - ld c, e - ld a, d - add $07 - ld b, a - inc a - inc a - ld d, a - call CountPrizes - call .asm_4b22 - inc e - inc c - ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA - call GetTurnDuelistVariable - ld hl, $7d - or a - jr nz, .pkmn_in_play_area - ld hl, $7c -.pkmn_in_play_area - dec d - call Func_2c1b - inc e - inc d - inc c - ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK - call GetTurnDuelistVariable - ld a, DECK_SIZE - sub [hl] -.asm_4b22 - call $65b7 - ld hl, $7e - call Func_2c1b - ret -; 0x4b2c - -; display the animation of the player drawing the card at hTempCardIndex_ff98 -DisplayPlayerDrawCardScreen: ; 4b2c (1:4b2c) - ldtx hl, YouDrewText - ldh a, [hTempCardIndex_ff98] - call LoadCardDataToBuffer1_FromDeckIndex - call _DisplayPlayerDrawCardScreen - ret -; 0x4b38 - -Func_4b38: ; 4b38 (1:4b38) - ld a, [wDuelTempList] - cp $ff - ret z - call DrawCardListScreenLayout - call CountCardsInDuelTempList ; list length - ld hl, CardListParameters ; other list params - lb de, 0, 0 ; initial page scroll offset, initial item (in the visible page) - call PrintCardListItems - ldtx hl, TheCardYouReceivedText - lb de, 1, 1 - call Func_22ae - call PrintTextNoDelay - ldtx hl, YouReceivedTheseCardsText - call DrawWideTextBox_WaitForInput - ret -; 0x4b60 - -Func_4b60: ; 4b60 (1:4b60) - call $7107 - call SwapTurn - call $7107 - call SwapTurn - call $4e84 - call $4d97 - ldh [hTemp_ffa0], a - call SwapTurn - call $4d97 - call SwapTurn - ld c, a - ldh a, [hTemp_ffa0] - ld b, a - and c - jr nz, .asm_4bd0 - ld a, b - or c - jr z, .asm_4bb2 - ld a, b - or a - jr nz, .asm_4b9c -.asm_4b8c - call $4df3 - call $7107 - call $4e6e - call $4d97 - jr c, .asm_4b8c - jr .asm_4bd0 - -.asm_4b9c - call SwapTurn -.asm_4b9f - call $4df3 - call $7107 - call $4e6e - call $4d97 - jr c, .asm_4b9f - call SwapTurn - jr .asm_4bd0 - -.asm_4bb2 - ldtx hl, NeitherPlayerHasBasicPkmnText - call DrawWideTextBox_WaitForInput - call $4e06 - call $7107 - call SwapTurn - call $4e06 - call $7107 - call SwapTurn - call $4dfc - jp Func_4b60 - -.asm_4bd0 - ldh a, [hWhoseTurn] - push af - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - call Func_4cd5 - call SwapTurn - call Func_4cd5 - call SwapTurn - jp c, $4c77 - call Func_311d - ldtx hl, PlacingThePrizesText - call DrawWideTextBox_WaitForInput - call Func_0f58 - ld a, [wDuelInitialPrizes] - ld l, a - ld h, 0 - call LoadTxRam3 - ldtx hl, PleasePlacePrizesText - call DrawWideTextBox_PrintText - call EnableLCD - call $4c7c - call WaitForWideTextBoxInput - pop af - ldh [hWhoseTurn], a - call $7133 - call SwapTurn - call $7133 - call SwapTurn - call EmptyScreen - ld a, BOXMSG_COIN_TOSS - call DrawDuelBoxMessage - ldtx hl, CoinTossToDetermineWhoFirstText - call DrawWideTextBox_WaitForInput - ldh a, [hWhoseTurn] - cp PLAYER_TURN - jr nz, .asm_4c52 - ld de, wDefaultText - call CopyPlayerName - ld hl, $0000 - call LoadTxRam2 - ldtx hl, YouPlayFirstText - ldtx de, IfHeadPlayerPlaysFirstText - call TossCoin - jr c, .asm_4c4a - call SwapTurn - ldtx hl, YouPlaySecondText - -.asm_4c4a - call DrawWideTextBox_WaitForInput - call Func_0f58 - or a - ret - -.asm_4c52 - ld de, wDefaultText - call CopyOpponentName - ld hl, $0000 - call LoadTxRam2 - ldtx hl, YouPlaySecondText - ldtx de, IfHeadPlayerPlaysFirstText - call TossCoin - jr c, .asm_4c6f - call SwapTurn - ldtx hl, YouPlayFirstText - -.asm_4c6f - call DrawWideTextBox_WaitForInput - call Func_0f58 - or a - ret -; 0x4c77 - - INCROM $4c77, $4cd5 - -; Select Basic Pokemon From Hand -Func_4cd5: ; 4cd5 (1:4cd5) - ld a, DUELVARS_DUELIST_TYPE - call GetTurnDuelistVariable - cp DUELIST_TYPE_PLAYER - jr z, .asm_4d15 - cp DUELIST_TYPE_LINK_OPP - jr z, .asm_4cec - push af - push hl - call Func_2bc3 - pop hl - pop af - ld [hl], a - or a - ret - -.asm_4cec - ldtx hl, TransmitingDataText - call DrawWideTextBox_PrintText - call Func_0f58 - ld hl, wPlayerCardLocations - ld de, wOpponentCardLocations - ld c, $80 - call Func_0e63 - jr c, .asm_4d12 - ld c, $80 - call Func_0e63 - jr c, .asm_4d12 - ld a, DUELVARS_DUELIST_TYPE - call GetTurnDuelistVariable - ld [hl], DUELIST_TYPE_LINK_OPP - or a - ret - -.asm_4d12 - jp DuelTransmissionError - -.asm_4d15 - call EmptyScreen - ld a, BOXMSG_ARENA_POKEMON - call DrawDuelBoxMessage - ldtx hl, ChooseBasicPkmnToPlaceInArenaText - call DrawWideTextBox_WaitForInput - ld a, $1 - call DoPracticeDuelAction -.asm_4d28 - xor a - ld hl, $006e - call $5502 - jr c, .asm_4d28 - ldh a, [hTempCardIndex_ff98] - call LoadCardDataToBuffer1_FromDeckIndex - ld a, $2 - call DoPracticeDuelAction - jr c, .asm_4d28 - ldh a, [hTempCardIndex_ff98] - call PutHandPokemonCardInPlayArea - ldh a, [hTempCardIndex_ff98] - ld hl, $0062 - call $4b31 - jr .asm_4d4c - -.asm_4d4c - call EmptyScreen - ld a, BOXMSG_BENCH_POKEMON - call DrawDuelBoxMessage - ldtx hl, ChooseUpTo5BasicPkmnToPlaceOnBenchText - call Func_2c73 - ld a, $3 - call DoPracticeDuelAction -.asm_4d5f - ld a, $1 - ld hl, $006f - call $5502 - jr c, .asm_4d8e - ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA - call GetTurnDuelistVariable - cp MAX_PLAY_AREA_POKEMON - jr nc, .asm_4d86 - ldh a, [hTempCardIndex_ff98] - call PutHandPokemonCardInPlayArea - ldh a, [hTempCardIndex_ff98] - ld hl, $0061 - call $4b31 - ld a, $5 - call DoPracticeDuelAction - jr .asm_4d5f - -.asm_4d86 - ldtx hl, NoSpaceOnTheBenchText - call DrawWideTextBox_WaitForInput - jr .asm_4d5f - -.asm_4d8e - ld a, $4 - call DoPracticeDuelAction - jr c, .asm_4d5f - or a - ret -; 0x4d97 - - INCROM $4d97, $4e40 - -Func_4e40: ; 4e40 (1:4e40) - call CreateHandCardList - call EmptyScreen - call LoadDuelCardSymbolTiles - lb de, 0, 0 - lb bc, 20, 13 - call DrawRegularTextBox - call CountCardsInDuelTempList ; list length - ld hl, CardListParameters ; other list params - lb de, 0, 0 ; initial page scroll offset, initial item (in the visible page) - call PrintCardListItems - ldtx hl, DuelistHandText - lb de, 1, 1 - call Func_22ae - call PrintTextNoDelay - call EnableLCD - ret -; 0x4e6e - - INCROM $4e6e, $4f9d - -; draw the main scene during a duel, except the contents of the bottom text box, -; which depend on the type of duelist holding the turn. -; includes the background, both arena Pokemon, and both HUDs. -DrawDuelMainScene: ; 4f9d (1:4f9d) - ld a, DUELVARS_DUELIST_TYPE - call GetTurnDuelistVariable - cp DUELIST_TYPE_PLAYER - jr z, .draw - ldh a, [hWhoseTurn] - push af - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - call .draw - pop af - ldh [hWhoseTurn], a - ret -.draw -; first, load the graphics and draw the background scene - ld a, [wcac2] - cp $01 - ret z - call ZeroObjectPositionsAndToggleOAMCopy - call EmptyScreen - call LoadDuelHUDTiles - ld a, $01 - ld [wcac2], a - ld a, DUELVARS_ARENA_CARD - call GetTurnDuelistVariable - ld de, v0Tiles1 + $50 tiles - call LoadPlayAreaCardGfx - call SetBGP7OrSGB2ToCardPalette - call SwapTurn - ld a, DUELVARS_ARENA_CARD - call GetTurnDuelistVariable - ld de, v0Tiles1 + $20 tiles - call LoadPlayAreaCardGfx - call SetBGP6OrSGB3ToCardPalette - call FlushAllPalettesOrSendPal23Packet - call SwapTurn -; next, draw the Pokemon in the arena -;.place_player_arena_pkmn - ld a, DUELVARS_ARENA_CARD - call GetTurnDuelistVariable - cp -1 - jr z, .place_opponent_arena_pkmn - ld a, $d0 ; v0Tiles1 + $50 tiles - lb hl, 6, 1 - lb de, 0, 5 - lb bc, 8, 6 - call FillRectangle - call ApplyBGP7OrSGB2ToCardImage -.place_opponent_arena_pkmn - call SwapTurn - ld a, DUELVARS_ARENA_CARD - call GetTurnDuelistVariable - cp -1 - jr z, .place_other_elements - ld a, $a0 ; v0Tiles1 + $20 tiles - lb hl, 6, 1 - lb de, 12, 1 - lb bc, 8, 6 - call FillRectangle - call ApplyBGP6OrSGB3ToCardImage -.place_other_elements - call SwapTurn - ld hl, DuelEAndHPTileData - call WriteDataBlocksToBGMap0 - call DrawDuelHorizontalSeparator - call DrawDuelHUDs - call DrawWideTextBox - call EnableLCD - ret -; 0x503a - -; draws the main elements of the main duel interface, including HUDs, HPs, card names -; and color symbols, attached cards, and other information, of both duelists. -DrawDuelHUDs: ; 503a (1:503a) - ld a, DUELVARS_DUELIST_TYPE - call GetTurnDuelistVariable - cp DUELIST_TYPE_PLAYER - jr z, .draw_hud - ldh a, [hWhoseTurn] - push af - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - call .draw_hud - pop af - ldh [hWhoseTurn], a - ret -.draw_hud - lb de, 1, 11 ; coordinates for player's arena card name and info icons - lb bc, 11, 8 ; coordinates for player's attached energies and HP bar - call DrawDuelHUD - lb bc, 8, 5 - ld a, DUELVARS_ARENA_CARD_STATUS - call GetTurnDuelistVariable - call CheckPrintCnfSlpPrz - inc c - call CheckPrintPoisoned - inc c - call CheckPrintDoublePoisoned - call SwapTurn - lb de, 7, 0 ; coordinates for opponent's arena card name and info icons - lb bc, 3, 1 ; coordinates for opponent's attached energies and HP bar - call GetNonTurnDuelistVariable - call DrawDuelHUD - lb bc, 11, 6 - ld a, DUELVARS_ARENA_CARD_STATUS - call GetTurnDuelistVariable - call CheckPrintCnfSlpPrz - dec c - call CheckPrintPoisoned - dec c - call CheckPrintDoublePoisoned - call SwapTurn - ret -; 0x5093 - -DrawDuelHUD: ; 5093 (1:5093) - ld hl, wcbc9 - ld [hl], b - inc hl - ld [hl], c ; save coordinates for the HP bar - push de ; save coordinates for the arena card name - ld d, 1 ; opponent's info icons start in the second tile to the right - ld a, e - or a - jr z, .go - ld d, 15 ; player's info icons start in the 15th tile to the right -.go - push de - pop bc - - ; print the Pkmn icon along with the no. of play area Pokemon - ld a, LOW("") - call WriteByteToBGMap0 - inc b - ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA - call GetTurnDuelistVariable - add LOW("<0>") - 1 - call WriteByteToBGMap0 - inc b - - ; print the Prize icon along with the no. of prizes yet to draw - ld a, LOW("") - call WriteByteToBGMap0 - inc b - call CountPrizes - add LOW("<0>") - call WriteByteToBGMap0 - - ; print the arena Pokemon card name and level text - pop de - ld a, DUELVARS_ARENA_CARD - call GetTurnDuelistVariable - cp -1 - ret z - call LoadCardDataToBuffer1_FromDeckIndex - push de - ld a, 32 - call CopyCardNameAndLevel - ld [hl], TX_END - - ; print the arena Pokemon card color symbol just before the name - pop de - ld a, e - or a - jr nz, .print_color_icon - ld hl, wDefaultText - call Func_23c1 - add SCREEN_WIDTH - ld d, a -.print_color_icon - call Func_22ae - ld hl, wDefaultText - call Func_21c5 - push de - pop bc - call GetArenaCardColor - inc a ; TX_SYMBOL color tiles start at 1 - dec b ; place the color symbol one tile to the left of the start of the card's name - call JPWriteByteToBGMap0 - - ; print attached energies - ld hl, wcbc9 - ld b, [hl] - inc hl - ld c, [hl] - lb de, 9, PLAY_AREA_ARENA - call PrintPlayAreaCardAttachedEnergies - - ; print HP bar - ld a, DUELVARS_ARENA_CARD - call GetTurnDuelistVariable - call LoadCardDataToBuffer1_FromDeckIndex - ld a, [wLoadedCard1HP] - ld d, a ; max HP - ld a, DUELVARS_ARENA_CARD_HP - call GetTurnDuelistVariable - ld e, a ; cur HP - call DrawHPBar - ld hl, wcbc9 - ld b, [hl] - inc hl - ld c, [hl] - inc c - call BCCoordToBGMap0Address - push de - ld hl, wDefaultText - ld b, HP_BAR_LENGTH / 2 ; first row of the HP bar - call SafeCopyDataHLtoDE - pop de - ld hl, BG_MAP_WIDTH - add hl, de - ld e, l - ld d, h - ld hl, wDefaultText + HP_BAR_LENGTH / 2 - ld b, HP_BAR_LENGTH / 2 ; second row of the HP bar - call SafeCopyDataHLtoDE - - ; print number of attached Pluspower and Defender with respective icon, if any - ld hl, wcbc9 - ld a, [hli] - add 6 - ld b, a - ld c, [hl] - inc c - ld a, DUELVARS_ARENA_CARD_ATTACHED_PLUSPOWER - call GetTurnDuelistVariable - or a - jr z, .check_defender - ld a, LOW("") - call WriteByteToBGMap0 - inc b - ld a, [hl] ; number of attached Pluspower - add LOW("<0>") - call WriteByteToBGMap0 - dec b -.check_defender - ld a, DUELVARS_ARENA_CARD_ATTACHED_DEFENDER - call GetTurnDuelistVariable - or a - jr z, .done - inc c - ld a, LOW("") - call WriteByteToBGMap0 - inc b - ld a, [hl] ; number of attached Defender - add LOW("<0>") - call WriteByteToBGMap0 -.done - ret -; 0x516f - -; draws an horizonal line that separates the arena side of each duelist -; also colorizes the line on CGB -DrawDuelHorizontalSeparator: ; 516f (1:516f) - ld hl, DuelHorizontalSeparatorTileData - call WriteDataBlocksToBGMap0 - ld a, [wConsole] - cp CONSOLE_CGB - ret nz - call BankswitchVRAM1 - ld hl, DuelHorizontalSeparatorCGBPalData - call WriteDataBlocksToBGMap0 - call BankswitchVRAM0 - ret -; 0x5188 - -DuelEAndHPTileData: ; 5188 (1:5188) -; x, y, tiles[], 0 - db 1, 1, LOW(""), 0 - db 1, 2, LOW(""), 0 - db 9, 8, LOW(""), 0 - db 9, 9, LOW(""), 0 - db $ff -; 0x5199 - -DuelHorizontalSeparatorTileData: ; 5199 (1:5199) -; x, y, tiles[], 0 - db 0, 4, $37, $37, $37, $37, $37, $37, $37, $37, $37, $31, $32, 0 - db 9, 5, $33, $34, 0 - db 9, 6, $33, $34, 0 - db 9, 7, $35, $36, $37, $37, $37, $37, $37, $37, $37, $37, $37, 0 - db $ff -; 0x51c0 - -DuelHorizontalSeparatorCGBPalData: ; 51c0 (1:51c0) -; x, y, tiles[], 0 - db 0, 4, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, 0 - db 9, 5, $02, $02, 0 - db 9, 6, $02, $02, 0 - db 9, 7, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, 0 - db $ff -; 0x51e7 - -; if this is a practice duel, execute the practice duel action at wPracticeDuelAction -DoPracticeDuelAction: ; 51e7 (1:51e7) - ld [wPracticeDuelAction], a - ld a, [wIsPracticeDuel] - or a - ret z - ld a, [wPracticeDuelAction] - ld hl, PracticeDuelActionTable - jp JumpToFunctionInTable -; 0x51f8 - -PracticeDuelActionTable:: ; 51f8 (1:51f8) - dw $0000 - dw Func_520e - dw Func_521a - dw Func_522a - dw Func_5236 - dw Func_5245 - dw Func_5256 - dw Func_5278 - dw Func_5284 - dw Func_529b - dw Func_52b0 -; 0x520e - -Func_520e: ; 520e (1:520e) - call Func_4e40 - call EnableLCD - ldtx hl, Text01a4 - jp Func_52bc -; 0x521a - -Func_521a: ; 521a (1:521a) - ld a, [wLoadedCard1ID] - cp GOLDEEN - ret z - ldtx hl, Text01a5 - ldtx de, DrMasonText - scf - jp Func_52bc -; 0x522a - -Func_522a: ; 522a (1:522a) - call Func_4e40 - call EnableLCD - ldtx hl, Text01a6 - jp Func_52bc -; 0x5236 - -Func_5236: ; 5236 (1:5236) - ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA - call GetTurnDuelistVariable - cp 2 - ret z - ldtx hl, Text01a7 - scf - jp Func_52bc -; 0x5245 - -Func_5245: ; 5245 (1:5245) - call Func_4e40 - call EnableLCD - ld a, $ff - ld [wcc00], a - ldtx hl, Text01a8 - jp Func_52bc -; 0x5256 - -Func_5256: ; 5256 (1:5256) - call $5351 - call EnableLCD - ld a, [wDuelTurns] - ld hl, wcc00 - cp [hl] - ld [hl], a - ld a, $00 - jp nz, $5382 - ldtx de, DrMasonText - ldtx hl, Text01d9 - call Func_2c62.asm_2c67 - call YesOrNoMenu - jp $5382 -; 0x5278 - -Func_5278: ; 5278 (1:5278) - ld a, [wDuelTurns] - srl a - ld hl, $541f - call JumpToFunctionInTable - ret nc -; fallthrough - -Func_5284: ; 5284 (1:5284) - ldtx hl, Text01da - call Func_52bc - ld a, $02 - call BankswitchSRAM - ld de, $bc00 - call $66ff - xor a - call BankswitchSRAM - scf - ret -; 0x529b - -Func_529b: ; 529b (1:529b) - ld a, [wDuelTurns] - cp 7 - jr z, .asm_52a4 - or a - ret -.asm_52a4 - call $5351 - call EnableLCD - ld hl, $5346 - jp $5396 -; 0x52b0 - -Func_52b0: ; 52b0 (1:52b0) - ldh a, [hTempPlayAreaLocationOffset_ff9d] - cp PLAY_AREA_BENCH_1 - ret z - call $5fd9 - ldtx hl, Text01d7 - scf -; fallthrough - -Func_52bc: ; 52bc (1:52bc) - push af - ldtx de, DrMasonText - call Func_2c62 - pop af - ret -; 0x52c5 - - INCROM $52c5, $5550 - -; draw the turn holder's discard pile screen -OpenDiscardPileScreen: ; 5550 (1:5550) - call CreateDiscardPileCardList - jr c, .discard_pile_empty - call DrawCardListScreenLayout - call SetDiscardPileScreenTexts - ld a, START + A_BUTTON - ld [wcbd6], a - call Func_55f0 - or a - ret -.discard_pile_empty - ldtx hl, TheDiscardPileHasNoCardsText - call DrawWideTextBox_WaitForInput - scf - ret -; 0x556d - -; set wCardListHeaderText and SetCardListInfoBoxText to the text -; that correspond to the Discard Pile screen -SetDiscardPileScreenTexts: ; 556d (1:556d) - ldtx de, YourDiscardPileText - ldh a, [hWhoseTurn] - cp PLAYER_TURN - jr z, .got_header_text - ldtx de, OpponentsDiscardPileText -.got_header_text - ldtx hl, ChooseTheCardYouWishToExamineText - call SetCardListHeaderText - ret -; 0x5580 - -SetCardListHeaderText: ; 5580 (1:5580) - ld a, e - ld [wCardListHeaderText], a - ld a, d - ld [wCardListHeaderText + 1], a -; fallthrough - -SetCardListInfoBoxText: ; 5588 (1:5588) - ld a, l - ld [wCardListInfoBoxText], a - ld a, h - ld [wCardListInfoBoxText + 1], a - ret -; 0x5591 - -Func_5591: ; 5591 (1:5591) - call DrawCardListScreenLayout - ld a, $02 - ld [wcbde], a - ret -; 0x559a - -; draw the layout of the screen that displays the player's Hand card list or a -; Discard Pile card list, including a bottom-right image of the current card. -; since this loads the text for the Hand card list screen, SetDiscardPileScreenTexts -; is called after this if the screen corresponds to a Discard Pile list. -DrawCardListScreenLayout: ; 559a (1:559a) - xor a - ld hl, wSelectedDuelSubMenuItem - ld [hli], a - ld [hl], a - ld [wcbdf], a - ld hl, wcbd8 - ld [hli], a - ld [hl], a - ld [wcbde], a - ld a, START - ld [wcbd6], a - ld hl, wCardListInfoBoxText - ld [hl], LOW(PleaseSelectHandText_) - inc hl - ld [hl], HIGH(PleaseSelectHandText_) - inc hl ; wCardListHeaderText - ld [hl], LOW(DuelistHandText_) - inc hl - ld [hl], HIGH(DuelistHandText_) -.draw - call ZeroObjectPositionsAndToggleOAMCopy - call EmptyScreen - call LoadDuelHUDTiles - call LoadDuelCardSymbolTiles - ; draw the surrounding box - lb de, 0, 0 - lb bc, 20, 13 - call DrawRegularTextBox - ; draw the image of the selected card - ld a, $a0 - lb hl, 6, 1 - lb de, 12, 12 - lb bc, 8, 6 - call FillRectangle - call ApplyBGP6OrSGB3ToCardImage - call Func_5744 - ld a, [wDuelTempList] - cp $ff - scf - ret z - or a - ret -; 0x55f0 - -Func_55f0: ; 55f0 (1:55f0) - call DrawNarrowTextBox - call Func_56a0 -.asm_55f6 - call CountCardsInDuelTempList ; list length - ld hl, wSelectedDuelSubMenuItem - ld e, [hl] ; initial item (in the visible page) - inc hl - ld d, [hl] ; initial page scroll offset - ld hl, CardListParameters ; other list params - call PrintCardListItems - call DrawSelectedCard - call EnableLCD -.asm_560b - call DoFrame - call Func_5690 - call HandleCardListInput - jr nc, .asm_560b - ld hl, wSelectedDuelSubMenuItem - ld [hl], e - inc hl - ld [hl], d - ldh a, [hButtonsPressed] - ld b, a - bit SELECT_F, b - jr nz, .asm_563b - bit B_BUTTON_F, b - jr nz, .asm_568c - ld a, [wcbd6] - and b - jr nz, .asm_5654 - ldh a, [hCurrentMenuItem] - call GetCardInDuelTempList_OnlyDeckIndex - call $56c2 - jr c, Func_55f0 - ldh a, [hTempCardIndex_ff98] - or a - ret -.asm_563b - ld a, [wcbdf] - or a - jr nz, .asm_560b - call SortCardsInDuelTempListByID - xor a - ld hl, wSelectedDuelSubMenuItem - ld [hli], a - ld [hl], a - ld a, $01 - ld [wcbdf], a - call EraseCursor - jr .asm_55f6 -.asm_5654 - ldh a, [hCurrentMenuItem] - call GetCardInDuelTempList - call LoadCardDataToBuffer1_FromDeckIndex - call $5762 - ldh a, [hButtonsPressed2] - bit D_UP_F, a - jr nz, .asm_566f - bit D_DOWN_F, a - jr nz, .asm_5677 - call DrawCardListScreenLayout.draw - jp Func_55f0 -.asm_566f - ldh a, [hCurrentMenuItem] - or a - jr z, .asm_5654 - dec a - jr .asm_5681 -.asm_5677 - call CountCardsInDuelTempList - ld b, a - ldh a, [hCurrentMenuItem] - inc a - cp b - jr nc, .asm_5654 -.asm_5681 - ldh [hCurrentMenuItem], a - ld hl, wSelectedDuelSubMenuItem - ld [hl], $00 - inc hl - ld [hl], a - jr .asm_5654 -.asm_568c - ldh a, [hCurrentMenuItem] - scf - ret -; 0x5690 - -Func_5690: ; 5690 (1:5690) - ldh a, [hButtonsPressed2] - and D_PAD - ret z - ld a, $01 - ldh [hffb0], a - call Func_56a0 - xor a - ldh [hffb0], a - ret -; 0x56a0 - -Func_56a0: ; 56a0 (1:56a0) - lb de, 1, 14 - call AdjustCoordinatesForWindow - call Func_22ae - ld hl, wCardListInfoBoxText - ld a, [hli] - ld h, [hl] - ld l, a - call PrintTextNoDelay - ld hl, wCardListHeaderText - ld a, [hli] - ld h, [hl] - ld l, a - lb de, 1, 1 - call Func_22ae - call PrintTextNoDelay - ret -; 0x56c2 - - INCROM $56c2, $5710 - -CardListParameters: ; 5710 (1;5710) - db 1, 3 ; cursor x, cursor y - db 4 ; item x - db $0e - db 5 ; number of items selectable without scrolling - db $0f ; cursor tile number - db $00 ; tile behind cursor - dw $5719 ; function pointer if non-0 -; 0x5719 - - INCROM $5719, $5744 - -Func_5744: ; 5744 (1:5744) - ld hl, wcbd8 - jp CallIndirect -; 0x574a - - INCROM $574a, $576a - -Func_576a: ; 576a (1:576a) - ld a, B_BUTTON - ld [wcbd7], a - ld a, $01 - jr Func_5779 - -Func_5773: ; 5773 (1:5773) - ld a, B_BUTTON - ld [wcbd7], a - xor a -; fallthrough - -Func_5779: ; 5779 (1:5779) - ld [wcbd1], a - call ZeroObjectPositionsAndToggleOAMCopy - call EmptyScreen - call Func_3b31 - call LoadDuelCardSymbolTiles - ld de, v0Tiles1 + $20 tiles - call LoadLoaded1CardGfx - call SetOBP1OrSGB3ToCardPalette - call SetBGP6OrSGB3ToCardPalette - call FlushAllPalettesOrSendPal23Packet - lb de, $38, $30 ; X Position and Y Position of top-left corner - call PlaceCardImageOAM - lb de, 6, 4 - call ApplyBGP6OrSGB3ToCardImage - xor a - ld [wCardPageNumber], a -.asm_57a7 - call Func_5898 - jr c, .asm_57cc - call EnableLCD -.asm_57af - call DoFrame - ldh a, [hButtonsPressed2] - ld b, a - ld a, [wcbd7] - and b - jr nz, .asm_57cc - ldh a, [hButtonsPressed] - and START + A_BUTTON - jr nz, .asm_57a7 - ldh a, [hButtonsPressed] - and D_RIGHT + D_LEFT - jr z, .asm_57af - call Func_57cd - jr .asm_57af -.asm_57cc - ret -; 0x57cd - -Func_57cd: ; 57cd (1:57cd) - bit D_LEFT_F, a - jr nz, .left -;.right - call Func_5898 - call c, Func_589c - ret -.left - call Func_5892 - call c, Func_589c - ret -; 0x57df - - INCROM $57df, $5892 - -Func_5892: ; 5892 (1:5892) - call Func_5911 - jr nc, Func_589c - ret - -Func_5898: ; 5898 (1:5898) - call Func_58e2 - ret c -; fallthrough - -Func_589c: ; 589c (1:589c) - ld a, [wCardPageNumber] - ld hl, CardPagePointerTable - call JumpToFunctionInTable - call EnableLCD - or a - ret -; 0x58aa - -; load the tiles and palette of the card selected in card list screen -DrawSelectedCard: ; 58aa (1:58aa) - ldh a, [hCurrentMenuItem] - call GetCardInDuelTempList - call LoadCardDataToBuffer1_FromCardID - ld de, v0Tiles1 + $20 tiles - call LoadLoaded1CardGfx - ld de, $c0c ; useless - call SetBGP6OrSGB3ToCardPalette - call FlushAllPalettesOrSendPal23Packet - ret -; 0x58c2 - -CardPagePointerTable: ; 58c2 (1:58c2) - dw DrawDuelMainScene - dw $5b7d ; CARDPAGE_POKEMON_OVERVIEW - dw $5d1f ; CARDPAGE_POKEMON_MOVE1_1 - dw $5d27 ; CARDPAGE_POKEMON_MOVE1_2 - dw $5d2f ; CARDPAGE_POKEMON_MOVE2_1 - dw $5d37 ; CARDPAGE_POKEMON_MOVE2_2 - dw $5d54 ; CARDPAGE_POKEMON_DESCRIPTION - dw DrawDuelMainScene - dw DrawDuelMainScene - dw $5e28 ; CARDPAGE_ENERGY - dw $5e28 ; CARDPAGE_ENERGY + 1 - dw DrawDuelMainScene - dw DrawDuelMainScene - dw $5e1c ; CARDPAGE_TRAINER_1 - dw $5e22 ; CARDPAGE_TRAINER_2 - dw DrawDuelMainScene -; 0x58e2 - -Func_58e2: ; 58e2 (1:58e2) - ld a, [wCardPageNumber] - or a - jr nz, .asm_58ff - ld a, [wLoadedCard1Type] - ld b, a - ld a, CARDPAGE_ENERGY - bit TYPE_ENERGY_F, b - jr nz, .set_card_page_nc - ld a, CARDPAGE_TRAINER_1 - bit TYPE_TRAINER_F, b - jr nz, .set_card_page_nc - ld a, CARDPAGE_POKEMON_OVERVIEW -.set_card_page_nc - ld [wCardPageNumber], a - or a - ret -.asm_58ff - ld hl, wCardPageNumber - inc [hl] - ld a, [hl] - call Func_5930 - jr c, .set_card_page_c - or a - ret nz - jr .asm_58ff -.set_card_page_c - ld [wCardPageNumber], a - ret -; 0x5911 - -Func_5911: ; 5911 (1:5911) - ld hl, wCardPageNumber - dec [hl] - ld a, [hl] - call Func_5930 - jr c, .asm_591f - or a - ret nz - jr Func_5911 -.asm_591f - ld [wCardPageNumber], a -.asm_5922 - call Func_5930 - or a - jr nz, .asm_592e - ld hl, wCardPageNumber - dec [hl] - jr .asm_5922 -.asm_592e - scf - ret -; 0x5930 - -Func_5930: ; 5930 (1:5930) - ld hl, CardPagePointerTable2 - jp JumpToFunctionInTable -; 0x5936 - -CardPagePointerTable2: ; 5936 (1:5936) - dw $5956 - dw $595a ; CARDPAGE_POKEMON_OVERVIEW - dw $595e ; CARDPAGE_POKEMON_MOVE1_1 - dw $5963 ; CARDPAGE_POKEMON_MOVE1_2 - dw $5968 ; CARDPAGE_POKEMON_MOVE2_1 - dw $596d ; CARDPAGE_POKEMON_MOVE2_2 - dw $595a ; CARDPAGE_POKEMON_DESCRIPTION - dw $5973 - dw $5977 - dw $597b ; CARDPAGE_ENERGY - dw $597f ; CARDPAGE_ENERGY + 1 - dw $5984 - dw $5988 - dw $597b ; CARDPAGE_TRAINER_1 - dw $597f ; CARDPAGE_TRAINER_2 - dw $598c -; 0x5956 - - INCROM $5956, $5990 - -ZeroObjectPositionsAndToggleOAMCopy: ; 5990 (1:5990) - call ZeroObjectPositions - ld a, $01 - ld [wVBlankOAMCopyToggle], a - ret -; 0x5999 - -; place OAM for a 8x6 image, using object size 8x16 and obj palette 1. -; d, e: X Position and Y Position of the top-left corner. -; starting tile number is $a0 (v0Tiles1 + $20 tiles). -; used to draw the image of a card in the check card screens. -PlaceCardImageOAM: ; 5999 (1:5999) - call Set_OBJ_8x16 - ld l, $a0 - ld c, 8 ; number of rows -.next_column - ld b, 3 ; number of columns - push de -.next_row - push bc - ld c, l ; tile number - ld b, 1 ; attributes (palette) - call SetOneObjectAttributes - pop bc - inc l - inc l ; next 8x16 tile - ld a, 16 - add e ; Y Position += 16 (next 8x16 row) - ld e, a - dec b - jr nz, .next_row - pop de - ld a, 8 - add d ; X Position += 8 (next 8x16 column) - ld d, a - dec c - jr nz, .next_column - ld a, $01 - ld [wVBlankOAMCopyToggle], a - ret -; 0x59c2 - -; given the deck index of a card in the play area (i.e. -1 indicates empty) -; load the graphics (tiles and palette) of the card to de -LoadPlayAreaCardGfx: ; 59c2 (1:59c2) - cp -1 - ret z - push de - call LoadCardDataToBuffer1_FromDeckIndex - pop de -; fallthrough - -; load the graphics (tiles and palette) of the card loaded in wLoadedCard1 to de -LoadLoaded1CardGfx: ; 59ca (1:59ca) - ld hl, wLoadedCard1Gfx - ld a, [hli] - ld h, [hl] - ld l, a - lb bc, $30, TILE_SIZE - call LoadCardGfx - ret -; 0x59d7 - -SetBGP7OrSGB2ToCardPalette: ; 59d7 (1:59d7) - ld a, [wConsole] - or a ; CONSOLE_DMG - ret z - cp CONSOLE_SGB - jr z, .sgb - ld a, $07 ; CGB BG Palette 7 - call CopyCGBCardPalette - ret -.sgb - ld hl, wCardPalette - ld de, wTempSGBPacket + 1 ; PAL Packet color #0 (PAL23's SGB2) - ld b, CGB_PAL_SIZE -.copy_pal_loop - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .copy_pal_loop - ret -; 0x59f5 - -SetBGP6OrSGB3ToCardPalette: ; 59f5 (1:59f5) - ld a, [wConsole] - or a ; CONSOLE_DMG - ret z - cp CONSOLE_SGB - jr z, SetSGB3ToCardPalette - ld a, $06 ; CGB BG Palette 6 - call CopyCGBCardPalette - ret - -SetSGB3ToCardPalette: ; 5a04 (1:5a04) - ld hl, wCardPalette + 2 - ld de, wTempSGBPacket + 9 ; Pal Packet color #4 (PAL23's SGB3) - ld b, 6 - jr SetBGP7OrSGB2ToCardPalette.copy_pal_loop -; 0x5a0e - -SetOBP1OrSGB3ToCardPalette: ; 5a0e (1:5a0e) - ld a, $e4 - ld [wOBP0], a - ld a, [wConsole] - or a ; CONSOLE_DMG - ret z - cp CONSOLE_SGB - jr z, SetSGB3ToCardPalette - ld a, $09 ; CGB Object Palette 1 -; fallthrough - -CopyCGBCardPalette: ; 5a1e (1:5a1e) - add a - add a - add a ; a *= CGB_PAL_SIZE - ld e, a - ld d, $00 - ld hl, wBackgroundPalettesCGB ; wObjectPalettesCGB - 8 palettes - add hl, de - ld de, wCardPalette - ld b, CGB_PAL_SIZE -.copy_pal_loop - ld a, [de] - inc de - ld [hli], a - dec b - jr nz, .copy_pal_loop - ret -; 0x5a34 - -FlushAllPalettesOrSendPal23Packet: ; 5a34 (1:5a34) - ld a, [wConsole] - or a ; CONSOLE_DMG - ret z - cp CONSOLE_SGB - jr z, .sgb - call SetFlushAllPalettes - ret -.sgb -; sgb PAL23, 1 ; sgb_command, length -; rgb 28, 28, 24 -; colors 1-7 carried over - ld a, PAL23 << 3 + 1 - ld hl, wTempSGBPacket - ld [hli], a - ld a, $9c - ld [hli], a - ld a, $63 - ld [hld], a - dec hl - xor a - ld [wTempSGBPacket + $f], a - call SendSGB - ret -; 0x5a56 - -ApplyBGP6OrSGB3ToCardImage: ; 5a56 (1:5a56) - ld a, [wConsole] - or a ; CONSOLE_DMG - ret z - cp CONSOLE_SGB - jr z, .sgb - ld a, $06 ; CGB BG Palette 6 - call ApplyCardCGBAttributes - ret -.sgb - ld a, 3 << 0 + 3 << 2 ; Color Palette Designation -; fallthrough - -SendCardAttrBlkPacket: ; 5a67 (1:5a67) - call CreateCardAttrBlkPacket - call SendSGB - ret -; 0x5a6e - -ApplyBGP7OrSGB2ToCardImage: ; 5a6e (1:5a6e) - ld a, [wConsole] - or a ; CONSOLE_DMG - ret z - cp CONSOLE_SGB - jr z, .sgb - ld a, $07 ; CGB BG Palette 7 - call ApplyCardCGBAttributes - ret -.sgb - ld a, 2 << 0 + 2 << 2 ; Color Palette Designation - jr SendCardAttrBlkPacket -; 0x5a81 - -Func_5a81: ; 5a81 (1:5a81) - ld a, [wConsole] - or a ; CONSOLE_DMG - ret z - cp CONSOLE_SGB - jr z, .sgb - lb de, 0, 5 - call ApplyBGP7OrSGB2ToCardImage - lb de, 12, 1 - call ApplyBGP6OrSGB3ToCardImage - ret -.sgb - ld a, 2 << 0 + 2 << 2 ; Data Set #1: Color Palette Designation - lb de, 0, 5 ; Data Set #1: X, Y - call CreateCardAttrBlkPacket - push hl - ld a, 2 - ld [wTempSGBPacket + 1], a ; set number of data sets to 2 - ld hl, wTempSGBPacket + 8 - ld a, 3 << 0 + 3 << 2 ; Data Set #2: Color Palette Designation - lb de, 12, 1 ; Data Set #2: X, Y - call CreateCardAttrBlkPacket_DataSet - pop hl - call SendSGB - ret -; 0x5ab5 - -CreateCardAttrBlkPacket: ; 5ab5 (1:5ab5) -; sgb ATTR_BLK, 1 ; sgb_command, length -; db 1 ; number of data sets - ld hl, wTempSGBPacket - push hl - ld [hl], ATTR_BLK << 3 + 1 - inc hl - ld [hl], 1 - inc hl - call CreateCardAttrBlkPacket_DataSet - xor a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - pop hl - ret -; 0x5ac9 - -CreateCardAttrBlkPacket_DataSet: ; 5ac9 (1:5ac9) -; Control Code, Color Palette Designation, X1, Y1, X2, Y2 -; db ATTR_BLK_CTRL_INSIDE + ATTR_BLK_CTRL_LINE, a, d, e, d+7, e+5 ; data set 1 - ld [hl], ATTR_BLK_CTRL_INSIDE + ATTR_BLK_CTRL_LINE - inc hl - ld [hl], a - inc hl - ld [hl], d - inc hl - ld [hl], e - inc hl - ld a, 7 - add d - ld [hli], a - ld a, 5 - add e - ld [hli], a - ret -; 0x5adb - -; given the 8x6 card image with coordinates at de, fill its BGMap attributes with a -ApplyCardCGBAttributes: ; 5adb (1:5adb) - call BankswitchVRAM1 - lb hl, 0, 0 - lb bc, 8, 6 - call FillRectangle - call BankswitchVRAM0 - ret -; 0x5aeb - -; set the default game palettes for all three systems -; BGP and OBP0 on DMG -; SGB0 and SGB1 on SGB -; BGP0 to BGP5 and OBP1 on CGB -SetDefaultPalettes: ; 5aeb (1:5aeb) - ld a, [wConsole] - cp CONSOLE_SGB - jr z, .sgb - cp CONSOLE_CGB - jr z, .cgb - ld a, $e4 - ld [wOBP0], a - ld [wBGP], a - ld a, $01 ; equivalent to FLUSH_ONE - ld [wFlushPaletteFlags], a - ret -.cgb - ld a, $04 - ld [wTextBoxFrameType], a - ld de, CGBDefaultPalettes - ld hl, wBackgroundPalettesCGB - ld c, 5 palettes - call .copy_de_to_hl - ld de, CGBDefaultPalettes - ld hl, wObjectPalettesCGB - ld c, CGB_PAL_SIZE - call .copy_de_to_hl - call SetFlushAllPalettes - ret -.sgb - ld a, $04 - ld [wTextBoxFrameType], a - ld a, PAL01 << 3 + 1 - ld hl, wTempSGBPacket - push hl - ld [hli], a - ld de, Pal01Packet_Default - ld c, $0e - call .copy_de_to_hl - ld [hl], c - pop hl - call SendSGB - ret - -.copy_de_to_hl - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .copy_de_to_hl - ret -; 0x5b44 - -CGBDefaultPalettes: -; BGP0 and OBP0 - rgb 28, 28, 24 - rgb 21, 21, 16 - rgb 10, 10, 8 - rgb 0, 0, 0 -; BGP1 - rgb 28, 28, 24 - rgb 30, 29, 0 - rgb 30, 3, 0 - rgb 0, 0, 0 -; BGP2 - rgb 28, 28, 24 - rgb 0, 18, 0 - rgb 12, 11, 20 - rgb 0, 0, 0 -; BGP3 - rgb 28, 28, 24 - rgb 22, 0 ,22 - rgb 27, 7, 3 - rgb 0, 0, 0 -; BGP4 - rgb 28, 28, 24 - rgb 26, 10, 0 - rgb 28, 0, 0 - rgb 0, 0, 0 - -; first and last byte of the packet not contained here (see SetDefaultPalettes.sgb) -Pal01Packet_Default: -; SGB0 - rgb 28, 28, 24 - rgb 21, 21, 16 - rgb 10, 10, 8 - rgb 0, 0, 0 -; SGB1 - rgb 26, 10, 0 - rgb 28, 0, 0 - rgb 0, 0, 0 - -JPWriteByteToBGMap0: ; 5b7a (1:5b7a) - jp WriteByteToBGMap0 -; 0x5b7d - - INCROM $5b7d, $5e5f - -; display the animation of the player drawing the card loaded in wLoadedCard1 -; print the text at hl (which is YouDrewText) -_DisplayPlayerDrawCardScreen: ; 5e5f (1:5e5f) - push hl - call DrawLargePictureOfCard - ld a, 18 - call CopyCardNameAndLevel - ld [hl], TX_END - ld hl, 0 - call LoadTxRam2 - pop hl - call DrawWideTextBox_WaitForInput - ret -; 0x5e75 - -; draw a large picture of the card loaded in wLoadedCard1, including its image -; and a header indicating the type of card (TRAINER, ENERGY, PoKéMoN) -DrawLargePictureOfCard: ; 5e75 (1:5e75) - call ZeroObjectPositionsAndToggleOAMCopy - call EmptyScreen - call LoadDuelHUDTiles - call SetDefaultPalettes - ld a, $08 - ld [wcac2], a - call LoadCardOrDuelMenuBorderTiles - ld e, HEADER_TRAINER - ld a, [wLoadedCard1Type] - cp TYPE_TRAINER - jr z, .draw - ld e, HEADER_ENERGY - and TYPE_ENERGY - jr nz, .draw - ld e, HEADER_POKEMON -.draw - ld a, e - call LoadCardTypeHeaderTiles - ld de, v0Tiles1 + $20 tiles - call LoadLoaded1CardGfx - call SetBGP6OrSGB3ToCardPalette - call FlushAllPalettesOrSendPal23Packet - ld hl, LargeCardTileData - call WriteDataBlocksToBGMap0 - lb de, 6, 3 - call ApplyBGP6OrSGB3ToCardImage - ret -; 0x5eb7 - -LargeCardTileData: ; 5eb7 (1:5eb7) - db 5, 0, $d0, $d4, $d4, $d4, $d4, $d4, $d4, $d4, $d4, $d1, 0 ; top border - db 5, 1, $d6, $e0, $e1, $e2, $e3, $e4, $e5, $e6, $e7, $d7, 0 ; header top - db 5, 2, $d6, $e8, $e9, $ea, $eb, $ec, $ed, $ee, $ef, $d7, 0 ; header bottom - db 5, 3, $d6, $a0, $a6, $ac, $b2, $b8, $be, $c4, $ca, $d7, 0 ; image - db 5, 4, $d6, $a1, $a7, $ad, $b3, $b9, $bf, $c5, $cb, $d7, 0 ; image - db 5, 5, $d6, $a2, $a8, $ae, $b4, $ba, $c0, $c6, $cc, $d7, 0 ; image - db 5, 6, $d6, $a3, $a9, $af, $b5, $bb, $c1, $c7, $cd, $d7, 0 ; image - db 5, 7, $d6, $a4, $aa, $b0, $b6, $bc, $c2, $c8, $ce, $d7, 0 ; image - db 5, 8, $d6, $a5, $ab, $b1, $b7, $bd, $c3, $c9, $cf, $d7, 0 ; image - db 5, 9, $d6, 0 ; empty line 1 (left) - db 14, 9, $d7, 0 ; empty line 1 (right) - db 5, 10, $d6, 0 ; empty line 2 (left) - db 14, 10, $d7, 0 ; empty line 2 (right) - db 5, 11, $d2, $d5, $d5, $d5, $d5, $d5, $d5, $d5, $d5, $d3, 0 ; bottom border - db $ff -; 0x5f4a - - INCROM $5f4a, $5fdd - -; return carry if the turn holder has any Pokemon with non-zero HP in the play area. -; return how many Pokemon with non-zero HP in b. -HasAlivePokemonInPlayArea: ; 5fdd (1:5fdd) - xor a - ld [wcbd2], a - ld b, a - ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA - call GetTurnDuelistVariable - sub b - ld c, a - ld a, DUELVARS_ARENA_CARD_HP - add b - call GetTurnDuelistVariable - ld b, 0 - inc c - xor a - ld [wcbd3], a - ld [wcbd4], a - jr .next_pkmn -.loop - ld a, [hli] - or a - jr z, .next_pkmn ; jump if this play area Pokemon has 0 HP - inc b -.next_pkmn - dec c - jr nz, .loop - ld a, b - or a - ret nz - scf - ret -; 0x6008 - -OpenPlayAreaScreenForViewing: ; 6008 (1:6008) - ld a, START + A_BUTTON - jr _OpenPlayAreaScreen - -OpenPlayAreaScreenForSelection: ; 600c (1:600c) - ld a, START -; fallthrough - -_OpenPlayAreaScreen: ; 600e (1:600e) - ld [wcbd6], a - ldh a, [hTempCardIndex_ff98] - push af - ld a, [wcbd3] - or a - jr nz, .asm_6034 - xor a - ld [wSelectedDuelSubMenuItem], a - inc a - ld [wcbd3], a -.asm_6022 - call ZeroObjectPositionsAndToggleOAMCopy - call EmptyScreen - call LoadDuelCardSymbolTiles - call LoadDuelCheckPokemonScreenTiles - call $61c7 - call EnableLCD -.asm_6034 - ld hl, MenuParameters_60be - ld a, [wcbd2] - or a - jr z, .asm_6040 - ld hl, MenuParameters_60c6 -.asm_6040 - ld a, [wSelectedDuelSubMenuItem] - call InitializeMenuParameters - ld a, [wcbc8] - ld [wNumMenuItems], a -.asm_604c - call DoFrame - call $60dd - jr nc, .asm_6061 - cp $02 - jp z, $60ac - pop af - ldh [hTempCardIndex_ff98], a - ld a, [wcbd4] - jr OpenPlayAreaScreenForSelection -.asm_6061 - call HandleMenuInput - jr nc, .asm_604c - ld a, e - ld [wSelectedDuelSubMenuItem], a - ld a, [wcbd2] - add e - ld [wcbc9], a - ld a, [wcbd6] - ld b, a - ldh a, [hButtonsPressed] - and b - jr z, .asm_6091 - ld a, [wcbc9] - add DUELVARS_ARENA_CARD - call GetTurnDuelistVariable - cp -1 - jr z, .asm_6022 - call GetCardIDFromDeckIndex - call LoadCardDataToBuffer1_FromCardID - call Func_576a - jr .asm_6022 -.asm_6091 - ld a, [wcbd2] - ld c, a - ldh a, [hCurrentMenuItem] - add c - ldh [hTempPlayAreaLocationOffset_ff9d], a - ldh a, [hCurrentMenuItem] - cp $ff - jr z, .asm_60b5 - ldh a, [hTempPlayAreaLocationOffset_ff9d] - add DUELVARS_ARENA_CARD_HP - call GetTurnDuelistVariable - or a - jr nz, .asm_60ac - jr .asm_6034 -.asm_60ac - pop af - ldh [hTempCardIndex_ff98], a - ldh a, [hTempPlayAreaLocationOffset_ff9d] - ldh [hCurrentMenuItem], a - or a - ret -.asm_60b5 - pop af - ldh [hTempCardIndex_ff98], a - ldh a, [hTempPlayAreaLocationOffset_ff9d] - ldh [hCurrentMenuItem], a - scf - ret -; 0x60be - -MenuParameters_60be: ; 60be (1:60be) - db 0, 0 ; cursor x, cursor y - db 3 ; y displacement between items - db 6 ; number of items - db $0f ; cursor tile number - db $00 ; tile behind cursor - dw $60ce ; function pointer if non-0 - -MenuParameters_60c6: ; 60c6 (1:60c6) - db 0, 3 ; cursor x, cursor y - db 3 ; y displacement between items - db 6 ; number of items - db $0f ; cursor tile number - db $00 ; tile behind cursor - dw $60ce ; function pointer if non-0 - - INCROM $60ce, $63bb - -; given a card's status in a, print the Poison symbol at bc if it's poisoned -CheckPrintPoisoned: ; 63bb (1:63bb) - push af - and POISONED - jr z, .print -.poison - ld a, LOW("") -.print - call WriteByteToBGMap0 - pop af - ret -; 0x63c7 - -; given a card's status in a, print the Poison symbol at bc if it's double poisoned -CheckPrintDoublePoisoned: ; 63c7 (1:63c7) - push af - and DOUBLE_POISONED - POISONED - jr nz, CheckPrintPoisoned.poison ; double poison (print a second symbol) - jr CheckPrintPoisoned.print ; not double poisoned -; 0x63ce - -; given a card's status in a, print the Confusion, Sleep, or Paralysis symbol at bc -; for each of those status that is active -CheckPrintCnfSlpPrz: ; 63ce (1:63ce) - push af - push hl - push de - and CNF_SLP_PRZ - ld e, a - ld d, $00 - ld hl, .status_symbols - add hl, de - ld a, [hl] - call WriteByteToBGMap0 - pop de - pop hl - pop af - ret - -.status_symbols - ; NO_STATUS, CONFUSED, ASLEEP, PARALYZED - db LOW("< >"), LOW(""), LOW(""), LOW("") -; 0x63e6 - -; print the symbols of the attached energies of a turn holder's play area card -; input: -; - e: PLAY_AREA_* -; - b, c: where to print (x, y) -; - wAttachedEnergies and wTotalAttachedEnergies -PrintPlayAreaCardAttachedEnergies: ; 63e6 (1:63e6) - push bc - call GetPlayAreaCardAttachedEnergies - ld hl, wDefaultText - push hl - ld c, NUM_TYPES - xor a -.empty_loop - ld [hli], a - dec c - jr nz, .empty_loop - pop hl - ld de, wAttachedEnergies - lb bc, LOW(""), NUM_TYPES - 1 -.next_color - ld a, [de] ; energy count of current color - inc de - inc a - jr .check_amount -.has_energy - ld [hl], b - inc hl -.check_amount - dec a - jr nz, .has_energy - inc b - dec c - jr nz, .next_color - ld a, [wTotalAttachedEnergies] - cp 9 - jr c, .place_tiles - ld a, LOW("<+>") - ld [wDefaultText + 7], a -.place_tiles - pop bc - call BCCoordToBGMap0Address - ld hl, wDefaultText - ld b, NUM_TYPES - call SafeCopyDataHLtoDE - ret -; 0x6423 - - INCROM $6423, $6614 - -; input d, e: max. HP, current HP -DrawHPBar: ; 6614 (1:6614) - ld a, MAX_HP - ld c, LOW("< >") - call .fill_hp_bar ; empty bar - ld a, d - ld c, LOW("<🌕>") - call .fill_hp_bar ; fill (max. HP) with HP counters - ld a, d - sub e - ld c, LOW("<🌑>") - ; fill (max. HP - current HP) with damaged HP counters -.fill_hp_bar - or a - ret z - ld hl, wDefaultText - ld b, HP_BAR_LENGTH -.tile_loop - ld [hl], c - inc hl - dec b - ret z - sub MAX_HP / HP_BAR_LENGTH - jr nz, .tile_loop - ret -; 0x6635 - - INCROM $6635, $6785 - -Func_6785: ; 6785 (1:6785) - call EnableSRAM - ld hl, $bc00 - xor a - ld [hli], a - ld [hli], a - ld [hl], a - call DisableSRAM - ret -; 0x6793 - -; loads player deck from SRAM to wPlayerDeck -LoadPlayerDeck: ; 6793 (1:6793) - call EnableSRAM - ld a, [$b700] - ld l, a - ld h, $54 - call HtimesL - ld de, sDeck1Cards - add hl, de - ld de, wPlayerDeck - ld c, DECK_SIZE -.next_card_loop - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .next_card_loop - call DisableSRAM - ret -; 0x67b2 - -Func_67b2: ; 67b2 (1:67b2) - ld a, [wccf2] - or a - ret z - ldh a, [hButtonsHeld] - and B_BUTTON - ret z - scf - ret -; 0x67be - -; related to ai taking their turn in a duel -; called multiple times during one ai turn -AIMakeDecision: ; 67be (1:67be) - ldh [hAIActionTableIndex], a - ld hl, wcbf9 - ld a, [hl] - ld [hl], $0 - or a - jr nz, .skip_delay -.delay_loop - call DoFrame - ld a, [wVBlankCtr] - cp $3c - jr c, .delay_loop - -.skip_delay - ldh a, [hAIActionTableIndex] - ld hl, wcbe1 - ld [hl], $0 - ld hl, AIActionTable - call JumpToFunctionInTable - ld a, [wDuelFinished] - ld hl, wcbe1 - or [hl] - jr nz, .turn_ended - ld a, [wcbf9] - or a - ret nz - ld [wVBlankCtr], a - ldtx hl, DuelistIsThinkingText - call DrawWideTextBox_PrintTextNoDelay - or a - ret - -.turn_ended - scf - ret -; 0x67fb - - INCROM $67fb, $695e - -AIActionTable: ; 695e (1:695e) - dw DuelTransmissionError - dw $69e0 - dw $69c5 - dw AIUseEnergyCard - dw $69ff - dw $6993 - dw $6a23 - dw $6a35 - dw $6a4e - dw $6a8c - dw $6ab1 - dw $698c - dw $6ad9 - dw $6b07 - dw $6aba - dw $6b7d - dw $6b7d - dw $6b24 - dw $6b30 - dw $6b7d - dw $6b3e - dw $6b15 - dw $6b20 - - INCROM $698c, $69a5 - -AIUseEnergyCard: ; 69a5 (1:69a5) - ldh a, [hTempPlayAreaLocationOffset_ffa1] - ldh [hTempPlayAreaLocationOffset_ff9d], a - ld e, a - ldh a, [hTemp_ffa0] - ldh [hTempCardIndex_ff98], a - call PutHandCardInPlayArea - ldh a, [hTemp_ffa0] - call LoadCardDataToBuffer1_FromDeckIndex - call DrawLargePictureOfCard - call $68e4 - ld a, $1 - ld [wAlreadyPlayedEnergy], a - call DrawDuelMainScene - ret -; 0x69c5 - - INCROM $69c5, $6d84 - -; converts clefairy doll/mysterious fossil to pokemon card -ConvertTrainerCardToPokemon: ; 6d84 (1:6d84) - ld c, a - ld a, [hl] - cp TYPE_TRAINER - ret nz - push hl - ldh a, [hWhoseTurn] - ld h, a - ld l, c - ld a, [hl] - and TYPE_TRAINER - pop hl - ret z - ld a, e - cp MYSTERIOUS_FOSSIL - jr nz, .check_for_clefairy_doll - ld a, d - cp $00 - jr z, .start_ram_data_overwrite - ret -.check_for_clefairy_doll - cp CLEFAIRY_DOLL - ret nz - ld a, d - cp $00 - ret nz -.start_ram_data_overwrite - push de - ld [hl], COLORLESS - ld bc, CARD_DATA_HP - add hl, bc - ld de, .data_to_overwrite - ld c, CARD_DATA_UNKNOWN2 - CARD_DATA_HP -.loop - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .loop - pop de - ret - -.data_to_overwrite - db 10 ; CARD_DATA_HP - ds $07 ; CARD_DATA_MOVE1_NAME - (CARD_DATA_HP + 1) - tx DiscardName ; CARD_DATA_MOVE1_NAME - tx DiscardDescription ; CARD_DATA_MOVE1_DESCRIPTION - ds $03 ; CARD_DATA_MOVE1_CATEGORY - (CARD_DATA_MOVE1_DESCRIPTION + 2) - db POKEMON_POWER ; CARD_DATA_MOVE1_CATEGORY - dw TrainerCardAsPokemonEffectCommands ; CARD_DATA_MOVE1_EFFECT_COMMANDS - ds $18 ; CARD_DATA_RETREAT_COST - (CARD_DATA_MOVE1_EFFECT_COMMANDS + 2) - db UNABLE_RETREAT ; CARD_DATA_RETREAT_COST - ds $0d ; PKMN_CARD_DATA_LENGTH - (CARD_DATA_RETREAT_COST + 1) - - INCROM $6df1, $70e6 - -Func_70e6: ; 70e6 (1:70e6) - xor a - ld [wAlreadyPlayedEnergy], a - ld [wcc0c], a - ld [wGotHeadsFromSandAttackOrSmokescreenCheck], a - ldh a, [hWhoseTurn] - ld [wcc05], a - ret -; 0x70f6 - -SetAllPlayAreaPokemonCanEvolve: ; 70f6 (1:70f6) - ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA - call GetTurnDuelistVariable - ld c, a - ld l, DUELVARS_ARENA_CARD_FLAGS_C2 -.next_pkmn_loop - res 5, [hl] - set CAN_EVOLVE_THIS_TURN_F, [hl] - inc l - dec c - jr nz, .next_pkmn_loop - ret -; 0x7107 - -; initializes duel variables such as cards in deck and in hand, or Pokemon in play area -; player turn: [c200, c2ff] -; opponent turn: [c300, c3ff] -InitializeDuelVariables: ; 7107 (1:7107) - ldh a, [hWhoseTurn] - ld h, a - ld l, DUELVARS_DUELIST_TYPE - ld a, [hl] - push hl - push af - xor a - ld l, a -.zero_duel_variables_loop - ld [hl], a - inc l - jr nz, .zero_duel_variables_loop - pop af - pop hl - ld [hl], a - lb bc, DUELVARS_CARD_LOCATIONS, DECK_SIZE - ld l, DUELVARS_DECK_CARDS -.init_duel_variables_loop -; zero card locations and cards in hand, and init order of cards in deck - push hl - ld [hl], b - ld l, b - ld [hl], $0 - pop hl - inc l - inc b - dec c - jr nz, .init_duel_variables_loop - ld l, DUELVARS_ARENA_CARD - ld c, 1 + MAX_BENCH_POKEMON + 1 -.init_play_area -; initialize to $ff card in arena as well as cards in bench (plus a terminator) - ld [hl], $ff - inc l - dec c - jr nz, .init_play_area - ret -; 0x7133 - - INCROM $7133, $71ad - -_TossCoin: ; 71ad (1:71ad) - ld [wcd9c], a - ld a, [wcac2] - cp $6 - jr z, .asm_71c1 - xor a - ld [wcd9f], a - call EmptyScreen - call LoadDuelCoinTossResultTiles - -.asm_71c1 - ld a, [wcd9f] - or a - jr nz, .asm_71ec - ld a, $6 - ld [wcac2], a - ld de, $000c - ld bc, $1406 - ld hl, $0000 - call DrawLabeledTextBox - call EnableLCD - ld de, $010e - ld a, $13 - call Func_22a6 - ld hl, wCoinTossScreenTextID - ld a, [hli] - ld h, [hl] - ld l, a - call PrintText - -.asm_71ec - ld hl, wCoinTossScreenTextID - xor a - ld [hli], a - ld [hl], a - call EnableLCD - ld a, DUELVARS_DUELIST_TYPE - call GetTurnDuelistVariable - ld [wcd9e], a - call Func_0f58 - xor a - ld [wcd9d], a - -.asm_7204 - ld a, [wcd9c] - cp $2 - jr c, .asm_7223 - ld bc, $0f0b - ld a, [wcd9f] - inc a - call $65b7 - ld b, 17 - ld a, $2e - call WriteByteToBGMap0 - inc b - ld a, [wcd9c] - call $65b7 - -.asm_7223 - call Func_3b21 - ld a, $58 - call Func_3b6a - ld a, [wcd9e] - or a - jr z, .asm_7236 - call $7324 - jr .asm_723c - -.asm_7236 - call WaitForWideTextBoxInput - call $72ff - -.asm_723c - call Func_3b21 - ld d, $5a - ld e, $0 - call UpdateRNGSources - rra - jr c, .asm_724d - ld d, $59 - ld e, $1 - -.asm_724d - ld a, d - call Func_3b6a - ld a, [wcd9e] - or a - jr z, .asm_725e - ld a, e - call $7310 - ld e, a - jr .asm_726c - -.asm_725e - push de - call DoFrame - call Func_3b52 - pop de - jr c, .asm_725e - ld a, e - call $72ff - -.asm_726c - ld b, $5c - ld c, $34 - ld a, e - or a - jr z, .asm_727c - ld b, $5b - ld c, $30 - ld hl, wcd9d - inc [hl] - -.asm_727c - ld a, b - call Func_3b6a - ld a, [wcd9e] - or a - jr z, .asm_728a - ld a, $1 - xor e - ld e, a - -.asm_728a - ld d, $54 - ld a, e - or a - jr nz, .asm_7292 - ld d, $55 - -.asm_7292 - ld a, d - call PlaySFX - ld a, [wcd9c] - dec a - jr z, .asm_72b9 - ld a, c - push af - ld e, $0 - ld a, [wcd9f] -.asm_72a3 - cp $a - jr c, .asm_72ad - inc e - inc e - sub $a - jr .asm_72a3 - -.asm_72ad - add a - ld d, a - lb bc, 2, 2 - lb hl, 1, 2 - pop af - call FillRectangle - -.asm_72b9 - ld hl, wcd9f - inc [hl] - ld a, [wcd9e] - or a - jr z, .asm_72dc - ld a, [hl] - ld hl, wcd9c - cp [hl] - call z, WaitForWideTextBoxInput - call $7324 - ld a, [wcd9c] - ld hl, wcd9d - or [hl] - jr nz, .asm_72e2 - call z, WaitForWideTextBoxInput - jr .asm_72e2 - -.asm_72dc - call WaitForWideTextBoxInput - call $72ff - -.asm_72e2 - call Func_3b31 - ld a, [wcd9f] - ld hl, wcd9c - cp [hl] - jp c, .asm_7204 - call Func_0f58 - call Func_3b31 - call Func_3b21 - ld a, [wcd9d] - or a - ret z - scf - ret -; 0x72ff - - INCROM $72ff, $7354 - -BuildVersion: ; 7354 (1:7354) - db "VER 12/20 09:36",TX_END - - INCROM $7364, $7571 - -Func_7571: ; 7571 (1:7571) - INCROM $7571, $7576 - -Func_7576: ; 7576 (1:7576) - farcall $6, $591f - ret -; 0x757b - - INCROM $757b, $758f - -Func_758f: ; 758f (1:758f) - INCROM $758f, $7594 - -Func_7594: ; 7594 (1:7594) - farcall $6, $661f - ret -; 0x7599 - - INCROM $7599, $8000 \ No newline at end of file diff --git a/src/engine/bank2.asm b/src/engine/bank2.asm deleted file mode 100644 index e9f2868..0000000 --- a/src/engine/bank2.asm +++ /dev/null @@ -1,1076 +0,0 @@ - INCROM $8000, $8cd4 - -Func_8cd4: ; 8cd4 (2:4cd4) - push bc - call EnableSRAM - ld b, $3c -.asm_8cda - ld a, [de] - inc de - ld [hli], a - dec b - jr nz, .asm_8cda - xor a - ld [hl], a - call DisableSRAM - pop bc - ret -; 0x8ce7 - - INCROM $8ce7, $8cf9 - -Func_8cf9: ; 8cf9 (2:4cf9) - call EnableSRAM - xor a - ld hl, $b703 - ld [hli], a - inc a - ld [hli], a - ld [hli], a - ld [hl], a - ld [$b701], a - call DisableSRAM -Func_8d0b: ; 8d0b (2:4d0b) - ld hl, Unknown_8d15 - ld de, $9380 - call Func_92ad - ret - -Unknown_8d15: ; 8d15 (2:4d15) - INCROM $8d15, $8d56 - -Func_8d56: ; 8d56 (2:4d56) - xor a - ld [wTileMapFill], a - call EmptyScreen - call ZeroObjectPositions - ld a, $1 - ld [wVBlankOAMCopyToggle], a - call LoadDuelHUDTiles - call LoadDuelCardSymbolTiles - call Func_8d0b - bank1call SetDefaultPalettes - ld de, $3cbf - call Func_2275 - ret -; 0x8d78 - - INCROM $8d78, $8d9d - -Func_8d9d: ; 8d9d (2:4d9d) - ld de, wcfd1 - ld b, $7 -.asm_8da2 - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .asm_8da2 - ret - -Unknown_8da9: ; 8da9 (2:4da9) - INCROM $8da9, $8db0 - -Func_8db0: ; 8db0 (2:4db0) - ld hl, Unknown_8da9 - call Func_8d9d - ld a, $ff - call Func_9168 - xor a - -Func_8dbc: ; 8dbc (2:4dbc) - ld hl, Unknown_8de2 - call InitializeMenuParameters - ldtx hl, PleaseSelectDeckText - call DrawWideTextBox_PrintText -.asm_8dc8 - call DoFrame - jr c, Func_8dbc - call Func_8dea - jr c, Func_8dbc - call HandleMenuInput - jr nc, .asm_8dc8 - ldh a, [hCurrentMenuItem] - cp $ff - ret z - ld [wceb1], a - jp Func_8e42 - -Unknown_8de2: ; 8de2 (2:4de2) - INCROM $8de2, $8dea - -Func_8dea: ; 8dea (2:4dea) - ldh a, [hButtonsPressed2] - and START - ret z - ld a, [wCurMenuItem] - ld [wceb1], a - call Func_8ff2 - jp nc, Func_8e05 - ld a, $ff - call Func_90fb - call Func_8fe8 - scf - ret - -Func_8e05: ; 8e05 (2:4e05) - ld a, $1 - call Func_90fb - call GetPointerToDeckCards - push hl - call GetPointerToDeckName - pop de - call Func_8e1f - ld a, $ff - call Func_9168 - ld a, [wceb1] - scf - ret - -Func_8e1f: ; 8e1f (2:4e1f) - push de - ld de, wcfb9 - call Func_92b4 - pop de - ld hl, wcf17 - call Func_8cd4 - ld a, $9 - ld hl, wcebb - call Func_9843 - ld a, $3c - ld [wcecc], a - ld hl, wcebb - ld [hl], a - call Func_9e41 - ret - -Func_8e42: ; 8e42 (2:4e42) - call DrawWideTextBox - ld hl, Unknown_9027 - call Func_2c08 - call Func_905a -.asm_8e4e - call DoFrame - call Func_9065 - jp nc, .asm_8e4e - cp $ff - jr nz, .asm_8e64 - call Func_90d8 - ld a, [wceb1] - jp Func_8dbc -.asm_8e64 - ld a, [wceaf] - or a - jp nz, Func_8f8a - ld a, [wceb0] - or a - jp nz, .asm_8ecf - call GetPointerToDeckCards - ld e, l - ld d, h - ld hl, wcf17 - call Func_8cd4 - ld a, $14 - ld hl, wcfb9 - call Func_9843 - ld de, wcfb9 - call GetPointerToDeckName - call Func_92b4 - call Func_9345 - jr nc, .asm_8ec4 - call EnableSRAM - ld hl, wcf17 - call Func_910a - call GetPointerToDeckCards - call Func_9152 - ld e, l - ld d, h - ld hl, wcf17 - ld b, $3c -.asm_8ea9 - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .asm_8ea9 - call GetPointerToDeckName - ld d, h - ld e, l - ld hl, wcfb9 - call Func_92ad - call GetPointerToDeckName - ld a, [hl] - call DisableSRAM - or a - jr z, .asm_8edb -.asm_8ec4 - ld a, $ff - call Func_9168 - ld a, [wceb1] - jp Func_8dbc -.asm_8ecf - call Func_8ff2 - jp nc, .asm_8edb - call Func_8fe8 - jp Func_8dbc -.asm_8edb - ld a, $14 - ld hl, wcfb9 - call Func_9843 - ld de, wcfb9 - call GetPointerToDeckName - call Func_92b4 - call Func_8f05 - call GetPointerToDeckName - ld d, h - ld e, l - ld hl, wcfb9 - call Func_92b4 - ld a, $ff - call Func_9168 - ld a, [wceb1] - jp Func_8dbc - -Func_8f05: ; 8f05 (2:4f05) - ld a, [wceb1] - or a - jr nz, .asm_8f10 - ld hl, Unknown_a763 - jr .asm_8f23 -.asm_8f10 - dec a - jr nz, .asm_8f18 - ld hl, Unknown_a76c - jr .asm_8f23 -.asm_8f18 - dec a - jr nz, .asm_8f20 - ld hl, Unknown_a775 - jr .asm_8f23 -.asm_8f20 - ld hl, Unknown_a77e -.asm_8f23 - ld a, $14 - ld bc, $0401 - ld de, wcfb9 - farcall Func_1ad89 - ld a, [wcfb9] - or a - ret nz - call Func_8f38 - ret - -Func_8f38: ; 8f38 (2:4f38) - ld hl, $b701 - call EnableSRAM - ld a, [hli] - ld h, [hl] - call DisableSRAM - ld l, a - ld de, wDefaultText - call TwoByteNumberToText - ld hl, wcfb9 - ld [hl], $6 - inc hl - ld [hl], $44 - inc hl - ld [hl], $65 - inc hl - ld [hl], $63 - inc hl - ld [hl], $6b - inc hl - ld [hl], $20 - inc hl - ld de, $c592 - ld a, [de] - inc de - ld [hli], a - ld a, [de] - inc de - ld [hli], a - ld a, [de] - ld [hli], a - xor a - ld [hl], a - ld hl, $b701 - call EnableSRAM - ld e, [hl] - inc hl - ld d, [hl] - ld a, $3 - cp d - jr nz, .asm_8f82 - ld a, $e7 - cp e - jr nz, .asm_8f82 - ld de, $0000 -.asm_8f82 - inc de - ld [hl], d - dec hl - ld [hl], e - call DisableSRAM - ret - -Func_8f8a: ; 8f8a (2:4f8a) - ld a, [wceb0] - or a - jp nz, Func_9026 - call Func_8ff2 - jp nc, Func_8f9d - call Func_8fe8 - jp Func_8dbc - -Func_8f9d: ; 8f9d (2:4f9d) - call EnableSRAM - ld a, [$b700] - call DisableSRAM - ld h, $3 - ld l, a - call HtimesL - ld e, l - inc e - ld d, 2 - xor a - lb hl, 0, 0 - lb bc, 2, 2 - call FillRectangle - ld a, [wceb1] - call EnableSRAM - ld [$b700], a - call DisableSRAM - call Func_9326 - call GetPointerToDeckName - call EnableSRAM - call Func_9253 - call DisableSRAM - xor a - ld [wTxRam2], a - ld [wTxRam2 + 1], a - ldtx hl, ChosenAsDuelingDeckText - call DrawWideTextBox_WaitForInput - ld a, [wceb1] - jp Func_8dbc - -Func_8fe8: ; 8fe8 (2:4fe8) - ldtx hl, ThereIsNoDeckHereText - call DrawWideTextBox_WaitForInput - ld a, [wceb1] - ret - -Func_8ff2: ; 8ff2 (2:4ff2) - ld a, [wceb1] - ld hl, wceb2 - ld b, $0 - ld c, a - add hl, bc - ld a, [hl] - or a - ret nz - scf - ret -; 0x9001 - - INCROM $9001, $9026 - -Func_9026: ; 9026 (2:5026) - ret - -Unknown_9027: ; 9027 (2:5027) - INCROM $9027, $9038 - -; return, in hl, the pointer to sDeckXName where X is [wceb1] + 1 -GetPointerToDeckName: ; 9038 (2:5038) - ld a, [wceb1] - ld h, a - ld l, sDeck2Name - sDeck1Name - call HtimesL - push de - ld de, sDeck1Name - add hl, de - pop de - ret - -; return, in hl, the pointer to sDeckXCards where X is [wceb1] + 1 -GetPointerToDeckCards: ; 9048 (2:5048) - push af - ld a, [wceb1] - ld h, a - ld l, sDeck2Cards - sDeck1Cards - call HtimesL - push de - ld de, sDeck1Cards - add hl, de - pop de - pop af - ret - -Func_905a: ; 905a (2:505a) - xor a - ld [wceaf], a - ld [wceb0], a - ld [wcea3], a - ret - -Func_9065: ; 9065 (2:5065) - xor a - ld [wcfe3], a - ld a, [wceaf] - ld d, a - ld a, [wceb0] - ld e, a - ldh a, [hButtonsPressed2] - or a - jr z, .asm_90a6 - bit D_LEFT_F, a - jr nz, .asm_907e - bit D_RIGHT_F, a - jr z, .asm_9084 -.asm_907e - ld a, d - xor $1 - ld d, a - jr .asm_9090 -.asm_9084 - bit D_UP_F, a - jr nz, .asm_908c - bit D_DOWN_F, a - jr z, .asm_90a6 -.asm_908c - ld a, e - xor $1 - ld e, a -.asm_9090 - ld a, $1 - ld [wcfe3], a - push de - call Func_90d8 - pop de - ld a, d - ld [wceaf], a - ld a, e - ld [wceb0], a - xor a - ld [wcea3], a -.asm_90a6 - ldh a, [hButtonsPressed] - and A_BUTTON | B_BUTTON - jr z, .asm_90c1 - and A_BUTTON - jr nz, .asm_90b7 - ld a, $ff - call Func_90fb - scf - ret -.asm_90b7 - call Func_90f7 - ld a, $1 - call Func_90fb - scf - ret -.asm_90c1 - ld a, [wcfe3] - or a - jr z, .asm_90ca - call PlaySFX -.asm_90ca - ld hl, wcea3 - ld a, [hl] - inc [hl] - and $f - ret nz - ld a, $f - bit 4, [hl] - jr z, asm_90da -Func_90d8: ; 90d8 (2:50d8) - ld a, $0 -asm_90da - ld e, a - ld a, $a - ld l, a - ld a, [wceaf] - ld h, a - call HtimesL - ld a, l - add $1 - ld b, a - ld a, [wceb0] - sla a - add $e - ld c, a - ld a, e - call WriteByteToBGMap0 - or a - ret - -Func_90f7: ; 90f7 (2:50f7) - ld a, $f - jr asm_90da - -Func_90fb: ; 90fb (2:50fb) - push af - inc a - jr z, .asm_9103 - ld a, $2 - jr .asm_9105 -.asm_9103 - ld a, $3 -.asm_9105 - call PlaySFX - pop af - ret - -Func_910a: ; 910a (2:510a) - push hl - ld b, $0 - ld d, $3c -.asm_910f - ld a, [hli] - or a - jr z, .asm_911e - ld c, a - push hl - ld hl, sCardCollection - add hl, bc - dec [hl] - pop hl - dec d - jr nz, .asm_910f -.asm_911e - pop hl - ret -; 0x9120 - - INCROM $9120, $9152 - -Func_9152: ; 9152 (2:5152) - push hl - ld b, $0 - ld d, $3c -.asm_9157 - ld a, [hli] - or a - jr z, .asm_9166 - ld c, a - push hl - ld hl, sCardCollection - add hl, bc - inc [hl] - pop hl - dec d - jr nz, .asm_9157 -.asm_9166 - pop hl - ret - -Func_9168: ; 9168 (2:5168) - ld [hffb5], a - call Func_8d56 - ld de, $0000 - ld bc, $1404 - call DrawRegularTextBox - ld de, $0003 - ld bc, $1404 - call DrawRegularTextBox - ld de, $0006 - ld bc, $1404 - call DrawRegularTextBox - ld de, $0009 - ld bc, $1404 - call DrawRegularTextBox - ld hl, Unknown_9242 - call Func_2c08 - ld a, $4 - ld hl, wceb2 - call Func_9843 - ld a, [hffb5] - bit 0, a - jr z, .asm_91b0 - ld hl, sDeck1Name - ld de, $0602 - call Func_926e -.asm_91b0 - ld hl, sDeck1Cards - call Func_9314 - jr c, .asm_91bd - ld a, $1 - ld [wceb2], a -.asm_91bd - ld a, [hffb5] - bit 1, a - jr z, .asm_91cd - ld hl, sDeck2Name - ld de, $0605 - call Func_926e -.asm_91cd - ld hl, sDeck2Cards - call Func_9314 - jr c, .asm_91da - ld a, $1 - ld [wceb3], a -.asm_91da - ld a, [hffb5] - bit 2, a - jr z, .asm_91ea - ld hl, sDeck3Name - ld de, $0608 - call Func_926e -.asm_91ea - ld hl, sDeck3Cards - call Func_9314 - jr c, .asm_91f7 - ld a, $1 - ld [wceb4], a -.asm_91f7 - ld a, [hffb5] - bit 3, a - jr z, .asm_9207 - ld hl, sDeck4Name - ld de, $060b - call Func_926e -.asm_9207 - ld hl, sDeck4Cards - call Func_9314 - jr c, .asm_9214 - ld a, $1 - ld [wceb5], a -.asm_9214 - call EnableSRAM - ld a, [$b700] - ld c, a - ld b, $0 - ld d, $2 -.asm_921f - ld hl, wceb2 - add hl, bc - ld a, [hl] - or a - jr nz, .asm_9234 - inc c - ld a, $4 - cp c - jr nz, .asm_921f - ld c, $0 - dec d - jr z, .asm_9234 - jr .asm_921f -.asm_9234 - ld a, c - ld [$b700], a - call DisableSRAM - call Func_9326 - call EnableLCD - ret - -Unknown_9242: ; 9242 (2:5242) - INCROM $9242, $9253 - -Func_9253: ; 9253 (2:5253) - ld de, wDefaultText - call Func_92ad - ld hl, wDefaultText - call Func_23c1 - ld b, $0 - ld hl, wDefaultText - add hl, bc - ld d, h - ld e, l - ld hl, Unknown_92a7 - call Func_92ad - ret - -Func_926e: ; 926e (2:526e) - push hl - call Func_9314 - pop hl - jr c, .asm_929c - push de - ld de, wDefaultText - call Func_92b4 - ld hl, wDefaultText - call Func_23c1 - ld b, $0 - ld hl, wDefaultText - add hl, bc - ld d, h - ld e, l - ld hl, Unknown_92a7 - call Func_92ad - pop de - ld hl, wDefaultText - call Func_22ae - call Func_21c5 - or a - ret -.asm_929c - call Func_22ae - ldtx hl, NewDeckText - call Func_2c29 - scf - ret - -Unknown_92a7: ; 92a7 (2:52a7) - INCROM $92a7, $92ad - -Func_92ad: ; 92ad (2:52ad) - ld a, [hli] - ld [de], a - or a - ret z - inc de - jr Func_92ad - -Func_92b4: ; 92b4 (2:52b4) - call EnableSRAM - call Func_92ad - call DisableSRAM - ret -; 0x92be - - INCROM $92be, $9314 - -Func_9314: ; 9314 (2:5314) - ld bc, $0018 - add hl, bc - call EnableSRAM - ld a, [hl] - call DisableSRAM - or a - jr nz, .asm_9324 - scf - ret -.asm_9324 - or a - ret - -Func_9326: ; 9326 (2:5326) - call EnableSRAM - ld a, [$b700] - call DisableSRAM - ld h, 3 - ld l, a - call HtimesL - ld e, l - inc e - ld d, 2 - ld a, $38 - lb hl, 1, 2 - lb bc, 2, 2 - call FillRectangle - ret - -Func_9345: ; 9345 (2:5345) - INCROM $9345, $9843 - -Func_9843: ; 9843 (2:5843) - INCROM $9843, $9e41 - -Func_9e41: ; 9e41 (2:5e41) - INCROM $9e41, $a288 - -Func_a288: ; a288 (2:6288) - INCROM $a288, $a763 - -Unknown_a763: ; a763 (2:6763) - INCROM $a763, $a76c - -Unknown_a76c: ; a76c (2:676c) - INCROM $a76c, $a775 - -Unknown_a775: ; a775 (2:6775) - INCROM $a775, $a77e - -Unknown_a77e: ; a77e (2:677e) - INCROM $a77e, $b177 - -Func_b177: ; b177 (2:7177) - INCROM $b177, $b19d - -Func_b19d: ; b19d (2:719d) - xor a - ld [wcea1], a - ld de, CheckForCGB - ld hl, wd0a2 - ld [hl], e - inc hl - ld [hl], d - call $7379 - ld a, $3c - ld [wd0a5], a - xor a -.asm_b1b3 - ld hl, $76fb - call $5a6d - call $7704 - call $7545 - ldtx hl, PleaseSelectDeckText - call DrawWideTextBox_PrintText - ld de, $0224 ; PleaseSelectDeckText? - call $7285 - call $729f - jr c, .asm_b1b3 - cp $ff - ret z - ld b, a - ld a, [wcea1] - add b - ld [wd088], a - call Func_905a - call DrawWideTextBox - ld hl, $7274 - call Func_2c08 - call DoFrame - call Func_9065 - jp nc, $71e7 - cp $ff - jr nz, .asm_b1fa - ld a, [wd086] - jp $71b3 - -.asm_b1fa - ld a, [wceb0] - sla a - ld hl, wceaf - add [hl] - or a - jr nz, .asm_b22c - call $735b - jr nc, .asm_b216 - call $7592 - ld a, [wd086] - jp c, $71b3 - jr .asm_b25e - -.asm_b216 - ld hl, $0272 - call YesOrNoMenuWithText - ld a, [wd086] - jr c, .asm_b1b3 - call $7592 - ld a, [wd086] - jp c, $71b3 - jr .asm_b25e - -.asm_b22c - cp $1 - jr nz, .asm_b24c - call $735b - jr c, .asm_b240 - call $76ca - ld a, [wd086] - jp c, $71b3 - jr .asm_b25e - -.asm_b240 - ld hl, WaitForVBlank - call DrawWideTextBox_WaitForInput - ld a, [wd086] - jp $71b3 - -.asm_b24c - cp $2 - jr nz, .asm_b273 - call $735b - jr c, .asm_b240 - call $77c6 - ld a, [wd086] - jp nc, $71b3 - -.asm_b25e - ld a, [wd087] - ld [wcea1], a - call $7379 - call $7704 - call $7545 - ld a, [wd086] - jp $71b3 - -.asm_b273 - ret -; 0xb274 - - INCROM $b274, $ba04 - -Func_ba04: ; ba04 (2:7a04) - ld a, [wd0a9] - ld hl, $7b83 - sla a - ld c, a - ld b, $0 - add hl, bc - ld de, wd0a2 - ld a, [hli] - ld [de], a - inc de - ld a, [hl] - ld [de], a - xor a - ld [wcea1], a - call $7b97 - ld a, $5 - ld [wd0a5], a - xor a - ld hl, $7b6e - call InitializeMenuParameters - ldtx hl, PleaseSelectDeckText - call DrawWideTextBox_PrintText - ld a, $5 - ld [wcea9], a - ld hl, $73fe - ld d, h - ld a, l - ld hl, wcece - ld [hli], a - ld [hl], d -.asm_ba40 - call DoFrame - call HandleMenuInput - jr c, .asm_baa3 - ldh a, [hButtonsPressed2] - and D_UP | D_DOWN - jr z, .asm_ba4e - -.asm_ba4e - ldh a, [hButtonsPressed2] - and START - jr z, .asm_ba40 - ld a, [wcea1] - ld [wd087], a - ld b, a - ld a, [wCurMenuItem] - ld [wd086], a - add b - ld c, a - inc a - or $80 - ld [wceb1], a - sla c - ld b, $0 - ld hl, wd00d - add hl, bc - call $7653 - ld a, [hli] - ld h, [hl] - ld l, a - push hl - ld bc, $0018 - add hl, bc - ld d, h - ld e, l - ld a, [hl] - pop hl - call $7644 - or a - jr z, .asm_ba40 - ld a, $1 - call Func_90fb - call $7653 - call Func_8e1f - call $7644 - ld a, [wd087] - ld [wcea1], a - call $7b97 - ld a, [wd086] - jp $7a25 - -.asm_baa3 - call DrawCursor2 - ld a, [wcea1] - ld [wd087], a - ld a, [wCurMenuItem] - ld [wd086], a - ldh a, [hCurrentMenuItem] - cp $ff - jp z, $7b0d - ld [wd088], a - call Func_905a - xor a - ld [wce5e], a - call DrawWideTextBox - ld hl, $7b76 - call Func_2c08 - call DoFrame - call $46ac - jp nc, $7acc - cp $ff - jr nz, .asm_badf - ld a, [wd086] - jp $7a25 - -.asm_badf - ld a, [wceb0] - sla a - ld hl, wceaf - add [hl] - or a - jr nz, .asm_bb09 - call $7653 - call $77c6 - call $7644 - ld a, [wd086] - jp nc, $7a25 - ld a, [wd087] - ld [wcea1], a - call $7b97 - ld a, [wd086] - jp $7a25 - -.asm_bb09 - cp $1 - jr nz, .asm_bb12 - xor a - ld [wd0a4], a - ret - -.asm_bb12 - ld a, [wcea1] - ld [wd087], a - ld b, a - ld a, [wCurMenuItem] - ld [wd086], a - add b - ld c, a - ld [wceb1], a - sla c - ld b, $0 - ld hl, wd00d - add hl, bc - push hl - ld hl, wd0aa - add hl, bc - ld bc, wcfda - ld a, [hli] - ld [bc], a - inc bc - ld a, [hl] - ld [bc], a - pop hl - call $7653 - ld a, [hli] - ld h, [hl] - ld l, a - push hl - ld bc, $0018 - add hl, bc - ld d, h - ld e, l - ld a, [hl] - pop hl - call $7644 - or a - jp z, $7a40 - ld a, $1 - call Func_90fb - call $7653 - xor a - call $6dfe - call $7644 - ld a, [wd087] - ld [wcea1], a - call $7b97 - ld a, [wd086] - jp $7a25 -; 0xbb6e - - INCROM $bb6e, $c000 diff --git a/src/engine/bank3.asm b/src/engine/bank3.asm deleted file mode 100644 index e53fc38..0000000 --- a/src/engine/bank3.asm +++ /dev/null @@ -1,3225 +0,0 @@ -LoadMap: ; c000 (3:4000) - call DisableLCD - call EnableSRAM - bank1call Func_6785 - call DisableSRAM - ld a, GAME_EVENT_OVERWORLD - ld [wGameEvent], a - xor a - ld [wd10f], a - ld [wd110], a - ld [wMatchStartTheme], a - farcall Func_10a9b - call Func_c1a4 - call ZeroObjectPositions - xor a - ld [wTileMapFill], a - call LoadDuelHUDTiles - call Set_OBJ_8x8 - xor a - ld [wcd08], a - xor a - ld [wd291], a -.asm_c037 - farcall Func_10ab4 - call Func_c1a4 - call Func_c241 - call EmptyScreen - call Func_3ca0 - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - farcall Func_1c440 - ld a, [wd0bb] - ld [wCurMap], a - ld a, [wd0bc] - ld [wPlayerXCoord], a - ld a, [wd0bd] - ld [wPlayerYCoord], a - call Func_c36a - call Func_c184 - call Func_c49c - farcall Func_80000 - call Func_c4b9 - call Func_c943 - call Func_c158 - farcall Func_80480 - call Func_c199 - xor a - ld [wd0b4], a - ld [wd0c1], a - call Func_39fc - farcall Func_10af9 - call Func_c141 - call Func_c17a -.asm_c092 - call DoFrameIfLCDEnabled - call SetScreenScroll - call Func_c0ce - ld hl, wd0b4 - ld a, [hl] - and $d0 - jr z, .asm_c092 - call DoFrameIfLCDEnabled - ld hl, wd0b4 - ld a, [hl] - bit 4, [hl] - jr z, .asm_c0b6 - ld a, $c - call PlaySFX - jp .asm_c037 -.asm_c0b6 - farcall Func_10ab4 - call Func_c1a0 - ld a, [wMatchStartTheme] - or a - jr z, .asm_c0ca - call Func_c280 - farcall Duel_Init -.asm_c0ca - call Func_c280 - ret - -Func_c0ce: ; c0ce (3:40ce) - ld a, [wd0bf] - res 7, a - rlca - add LOW(PointerTable_c0e0) - ld l, a - ld a, HIGH(PointerTable_c0e0) - adc $0 - ld h, a - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -PointerTable_c0e0: ; c0e0 (3:40e0) - dw Func_c0e8 - dw Func_c0ed - dw Func_c0f1 - dw Func_c10a - -Func_c0e8: ; c0e8 (3:40e8) - farcall Func_10e55 - ret - -Func_c0ed: ; c0ed (3:40ed) - call Func_c510 - ret - -Func_c0f1: ; c0f1 (3:40f1) - ld a, [wd3b6] - ld [wd3aa], a - farcall Func_1c768 - ld a, c - ld [wd0c6], a - ld a, b - ld [wd0c7], a - ld a, $3 - ld [wd0bf], a - jr Func_c10a - -Func_c10a: ; c10a (3:410a) - ld hl, wd0c6 - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -; closes dialogue window. seems to be for other things as well. -CloseDialogueBox: ; c111 (3:4111) - ld a, [wd0c1] - bit 0, a - call nz, Func_c135 - ld a, [wd0c1] - bit 1, a - jr z, .asm_c12a - ld a, [wd3b6] - ld [wd3aa], a - farcall Func_1c5e9 -.asm_c12a - xor a - ld [wd0c1], a - ld a, [wd0c0] - ld [wd0bf], a - ret - -Func_c135: ; c135 (3:4135) - push hl - farcall Func_80028 - ld hl, wd0c1 - res 0, [hl] - pop hl - ret - -Func_c141: ; c141 (3:4141) - ld hl, wd0c2 - ld a, [hl] - or a - ret z - push af - xor a - ld [hl], a - pop af - dec a - ld hl, PointerTable_c152 - jp JumpToFunctionInTable - -PointerTable_c152: ; c152 (3:4152) - dw Func_c9bc - dw Func_fc2b - dw Func_fcad - -Func_c158: ; c158 (3:4158) - ld a, [wd0c2] - cp $1 - ret nz - ld a, [wd0c4] - ld [wd3ab], a - call Func_39c3 - jr c, .asm_c179 - ld a, [wd3aa] - ld l, $4 - call Func_39ad - ld a, [wd0c5] - ld [hl], a - farcall Func_1c58e -.asm_c179 - ret - -Func_c17a: ; c17a (3:417a) - ld a, [wd0bf] - cp $3 - ret z - call Func_c9b8 - ret - -Func_c184: ; c184 (3:4184) - push bc - ld c, $1 - ld a, [wCurMap] - cp OVERWORLD_MAP - jr nz, .asm_c190 - ld c, $0 -.asm_c190 - ld a, c - ld [wd0bf], a - ld [wd0c0], a - pop bc - ret - -Func_c199: ; c199 (3:4199) - ld hl, Func_380e - call SetDoFrameFunction - ret - -Func_c1a0: ; c1a0 (3:41a0) - call ResetDoFrameFunction - ret - -Func_c1a4: ; c1a4 (3:41a4) - xor a - call SetBGP - xor a - call SetOBP0 - xor a - call SetOBP1 - ret - -Func_c1b1: ; c1b1 (3:41b1) - ld a, $c - ld [wd32e], a - ld a, $0 - ld [wd0bb], a - ld a, $c - ld [wd0bc], a - ld a, $c - ld [wd0bd], a - ld a, $2 - ld [wd0be], a - call Func_c9cb - call Func_c9dd - farcall Func_80b7a - farcall Func_1c82e - farcall Func_131b3 - xor a - ld [wPlayTimeCounter + 0], a - ld [wPlayTimeCounter + 1], a - ld [wPlayTimeCounter + 2], a - ld [wPlayTimeCounter + 3], a - ld [wPlayTimeCounter + 4], a - ret - -Func_c1ed: ; c1ed (3:41ed) - call Func_c9cb - farcall Func_11416 - call Func_c9dd - ret - -Func_c1f8: ; c1f8 (3:41f8) - xor a - ld [wd0b8], a - ld [wd0b9], a - ld [wd0ba], a - ld [wd11b], a - ld [wd0c2], a - ld [wd111], a - ld [wd112], a - ld [wd3b8], a - call EnableSRAM - ld a, [sa007] - ld [wd421], a - ld a, [sa006] - ld [wTextSpeed], a - call DisableSRAM - farcall Func_10756 - ret - -Func_c228: ; c228 (3:4228) - ld a, [wCurMap] - ld [wd0bb], a - ld a, [wPlayerXCoord] - ld [wd0bc], a - ld a, [wPlayerYCoord] - ld [wd0bd], a - ld a, [wd334] - ld [wd0be], a - ret - -Func_c241: ; c241 (3:4241) - push hl - push bc - push de - ld de, $307f - call Func_2275 - call Func_c258 - pop de - pop bc - pop hl - ret - -Func_c251: ; c251 (3:4251) - ldh a, [hffb0] - push af - ld a, $1 - jr asm_c25d - -Func_c258: ; c258 (3:4258) - ldh a, [hffb0] - push af - ld a, $2 -asm_c25d - ldh [hffb0], a - push hl - call Func_c268 - pop hl - pop af - ldh [hffb0], a - ret - -Func_c268: ; c268 (3:4268) - ld hl, Unknown_c27c -.asm_c26b - push hl - ld a, [hli] - ld h, [hl] - ld l, a - or h - jr z, .asm_c27a - call Func_2c29 - pop hl - inc hl - inc hl - jr .asm_c26b -.asm_c27a - pop hl - ret - -Unknown_c27c: ; c27c (3:427c) - INCROM $c27c, $c280 - -Func_c280: ; c280 (3:4280) - call Func_c228 - call Func_3ca0 - call ZeroObjectPositions - ld hl, wVBlankOAMCopyToggle - inc [hl] - call EnableLCD - call DoFrameIfLCDEnabled - call DisableLCD - farcall Func_12871 - ret - -Func_c29b: ; c29b (3:429b) - push hl - ld hl, wd0c1 - or [hl] - ld [hl], a - pop hl - ret - -Func_c2a3: ; c2a3 (3:42a3) - push hl - push bc - push de - call Func_c335 - farcall Func_10ab4 - ld a, $80 - call Func_c29b - ld de, $307f - call Func_2275 - farcall Func_12ba7 - call Func_3ca0 - call ZeroObjectPositions - ld a, $1 - ld [wVBlankOAMCopyToggle], a - call EnableLCD - call DoFrameIfLCDEnabled - call DisableLCD - pop de - pop bc - pop hl - ret - -Func_c2d4: ; c2d4 (3:42d4) - xor a - ld [wd10f], a - ld [wd110], a - -Func_c2db: ; c2db (3:42db) - push hl - push bc - push de - call DisableLCD - call Set_OBJ_8x8 - call Func_3ca0 - farcall Func_12bcd - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - call Func_c241 - call EmptyScreen - ld a, [wd111] - push af - farcall Func_80000 - pop af - ld [wd111], a - ld hl, wd0c1 - res 0, [hl] - call Func_c34e - farcall Func_12c5e - farcall Func_1c6f8 - ld hl, wd0c1 - res 7, [hl] - ld hl, wd10f - ld a, [hli] - or [hl] - jr z, .asm_c323 - ld a, [hld] - ld l, [hl] - ld h, a - call Func_3c45 -.asm_c323 - farcall Func_10af9 - pop de - pop bc - pop hl - ret - -Func_c32b: ; c32b (3:432b) - ld a, l - ld [wd10f], a - ld a, h - ld [wd110], a - jr Func_c2db - -Func_c335: ; c335 (3:4335) - ld a, [wOBP0] - ld [wd10c], a - ld a, [wOBP1] - ld [wd10d], a - ld hl, wObjectPalettesCGB - ld de, wd0cc - ld bc, 8 palettes - call CopyDataHLtoDE_SaveRegisters - ret - -Func_c34e: ; c34e (3:434e) - ld a, [wd10c] - ld [wOBP0], a - ld a, [wd10d] - ld [wOBP1], a - ld hl, wd0cc - ld de, wObjectPalettesCGB - ld bc, 8 palettes - call CopyDataHLtoDE_SaveRegisters - call SetFlushAllPalettes - ret - -Func_c36a: ; c36a (3:436a) - xor a - ld [wd323], a - ld a, [wCurMap] - cp POKEMON_DOME_ENTRANCE - jr nz, .asm_c379 - xor a - ld [wd324], a -.asm_c379 - ret -; 0xc37a - - INCROM $c37a, $c41c - -Func_c41c: ; c41c (3:441c) - ld a, [wd332] - sub $40 - ld [wSCXBuffer], a - ld a, [wd333] - sub $40 - ld [wSCYBuffer], a - call Func_c430 - ret - -Func_c430: ; c430 (3:4430) - push bc - ld a, [wd237] - sla a - sla a - sla a - ld b, a - ld a, [wSCXBuffer] - cp $b1 - jr c, .asm_c445 - xor a - jr .asm_c449 -.asm_c445 - cp b - jr c, .asm_c449 - ld a, b -.asm_c449 - ld [wSCXBuffer], a - ld a, [wd238] - sla a - sla a - sla a - ld b, a - ld a, [wSCYBuffer] - cp $b9 - jr c, .asm_c460 - xor a - jr .asm_c464 -.asm_c460 - cp b - jr c, .asm_c464 - ld a, b -.asm_c464 - ld [wSCYBuffer], a - pop bc - ret - -Func_c469: ; c469 (3:4469) - ld a, [wSCXBuffer] - add $4 - and $f8 - rrca - rrca - rrca - ld [wd233], a - ld a, [wSCYBuffer] - add $4 - and $f8 - rrca - rrca - rrca - ld [wd234], a - ret - -SetScreenScrollWram: ; c484 (3:4484) - ld a, [wSCXBuffer] - ld [wSCX], a - ld a, [wSCYBuffer] - ld [wSCY], a - ret - -SetScreenScroll: ; c491 (3:4491) - ld a, [wSCX] - ldh [hSCX], a - ld a, [wSCY] - ldh [hSCY], a - ret - -Func_c49c: ; c49c (3:449c) - ld a, [wPlayerXCoord] - and $1f - ld [wPlayerXCoord], a - rlca - rlca - rlca - ld [wd332], a - ld a, [wPlayerYCoord] - and $1f - ld [wPlayerYCoord], a - rlca - rlca - rlca - ld [wd333], a - ret - -Func_c4b9: ; c4b9 (3:44b9) - xor a - ld [wd4ca], a - ld [wd4cb], a - ld a, $1d - farcall Func_80418 - ld b, $0 - ld a, [wConsole] - cp $2 - jr nz, .asm_c4d1 - ld b, $1e -.asm_c4d1 - ld a, b - ld [wd337], a - ld a, $0 - farcall Func_1299f - ld a, [wWhichSprite] - ld [wd336], a - ld b, $2 - ld a, [wCurMap] - cp OVERWORLD_MAP - jr z, .asm_c4ee - ld a, [wd0be] - ld b, a -.asm_c4ee - ld a, b - ld [wd334], a - call Func_c5e9 - ld a, [wCurMap] - cp OVERWORLD_MAP - call nz, Func_c6f7 - xor a - ld [wd335], a - ld [wd338], a - ld a, [wCurMap] - cp OVERWORLD_MAP - jr nz, .asm_c50f - farcall Func_10fde -.asm_c50f - ret - -Func_c510: ; c510 (3:4510) - ld a, [wd336] - ld [wWhichSprite], a - ld a, [wd335] - bit 4, a - ret nz - bit 0, a - call z, Func_c5ac - ld a, [wd335] - or a - jr z, .asm_c535 - bit 0, a - call nz, Func_c66c - ld a, [wd335] - bit 1, a - call nz, Func_c6dc - ret -.asm_c535 - ldh a, [hButtonsPressed] - and START - call nz, Func_c74d - ret - -Func_c53d: ; c53d (3:453d) - ld a, [wd336] - ld [wWhichSprite], a - ld a, [wd335] - bit 0, a - call nz, Func_c687 - ld a, [wd335] - bit 1, a - call nz, Func_c6dc - ret - -Func_c554: ; c554 (3:4554) - ld a, [wd336] - ld [wWhichSprite], a - ld a, [wCurMap] - cp OVERWORLD_MAP - jr nz, .asm_c566 - farcall Func_10e28 - ret -.asm_c566 - push hl - push bc - push de - call Func_c58b - ld a, [wSCXBuffer] - ld d, a - ld a, [wSCYBuffer] - ld e, a - ld c, SPRITE_ANIM_COORD_X - call GetSpriteAnimBufferProperty - ld a, [wd332] - sub d - add $8 - ld [hli], a - ld a, [wd333] - sub e - add $10 - ld [hli], a - pop de - pop bc - pop hl - ret - -Func_c58b: ; c58b (3:458b) - push hl - ld a, [wPlayerXCoord] - ld b, a - ld a, [wPlayerYCoord] - ld c, a - call GetFloorObjectFromPos - and $10 - push af - ld c, SPRITE_ANIM_FIELD_0F - call GetSpriteAnimBufferProperty - pop af - ld a, [hl] - jr z, .asm_c5a7 - or $80 - jr .asm_c5a9 -.asm_c5a7 - and $7f -.asm_c5a9 - ld [hl], a - pop hl - ret - -Func_c5ac: ; c5ac (3:45ac) - ldh a, [hButtonsHeld] - and D_PAD - jr z, .asm_c5bf - call Func_c5cb - call Func_c5fe - ld a, [wd335] - and $1 - jr nz, .asm_c5ca -.asm_c5bf - ldh a, [hButtonsPressed] - and A_BUTTON - jr z, .asm_c5ca - call Func_c71e - jr .asm_c5ca -.asm_c5ca - ret - -Func_c5cb: ; c5cb (3:45cb) - call Func_c5d5 -Func_c5ce: ; c5ce (3:45ce) - ld [wd334], a - call Func_c5e9 - ret - -Func_c5d5: ; c5d5 (3:45d5) - push hl - ld hl, Unknown_c5e5 - or a - jr z, .asm_c5e2 -.asm_c5dc - rlca - jr c, .asm_c5e2 - inc hl - jr .asm_c5dc -.asm_c5e2 - ld a, [hl] - pop hl - ret - -Unknown_c5e5: ; c5e5 (3:45e5) - db $02,$00,$03,$01 - -Func_c5e9: ; c5e9 (3:45e9) - push bc - ld a, [wd336] - ld [wWhichSprite], a - ld a, [wd337] - ld b, a - ld a, [wd334] - add b - farcall Func_12ab5 - pop bc - ret - -Func_c5fe: ; c5fe (3:45fe) - push bc - call Func_c653 - call AttemptScriptedMovement - pop bc - ret - -StartScriptedMovement: ; c607 (3:4607) - push bc - ld a, [wd336] - ld [wWhichSprite], a - ld a, [wd339] - call FindScriptedMovementWithOffset - call AttemptScriptedMovement - pop bc - ret - -; bc is the location the player is being scripted to move towards. -AttemptScriptedMovement: ; c619 (3:4619) - push hl - push bc - ld a, b - cp $1f - jr nc, .quit_movement - ld a, c - cp $1f - jr nc, .quit_movement - call GetFloorObjectFromPos - and $40 | $80 ; the two impassable objects found in the floor map - jr nz, .quit_movement - ld a, b - ld [wPlayerXCoord], a - ld a, c - ld [wPlayerYCoord], a - ld a, [wd335] ; I believe everything starting here is animation related. - or $1 - ld [wd335], a - ld a, $10 - ld [wd338], a - ld c, SPRITE_ANIM_FIELD_0F - call GetSpriteAnimBufferProperty - set 2, [hl] - ld c, SPRITE_ANIM_MOVEMENT_COUNTER - call GetSpriteAnimBufferProperty - ld a, $4 - ld [hl], a -.quit_movement - pop bc - pop hl - ret - -Func_c653: ; c653 (3:4653) - ld a, [wd334] - -FindScriptedMovementWithOffset: ; c656 (3:4656) - rlca - ld c, a - ld b, $0 - push hl - ld hl, ScriptedMovementOffsetTable - add hl, bc - ld a, [wPlayerXCoord] - add [hl] - ld b, a - inc hl - ld a, [wPlayerYCoord] - add [hl] - ld c, a - pop hl - ret - -Func_c66c: ; c66c (3:466c) - push hl - push bc - ld c, $1 - ldh a, [hButtonsHeld] - bit B_BUTTON_F, a - jr z, .asm_c67e - ld a, [wd338] - cp $2 - jr c, .asm_c67e - inc c -.asm_c67e - ld a, [wd334] - call Func_c694 - pop bc - pop hl - ret - -Func_c687: ; c687 (3:4687) - push bc - ld a, [wd33a] - ld c, a - ld a, [wd339] - call Func_c694 - pop bc - ret - -Func_c694: ; c694 (3:4694) - push hl - push bc - push bc - rlca - ld c, a - ld b, $0 - ld hl, Unknown_396b - add hl, bc - pop bc -.asm_c6a0 - push hl - ld a, [hli] - or a - call nz, Func_c6cc - ld a, [hli] - or a - call nz, Func_c6d4 - pop hl - ld a, [wd338] - dec a - ld [wd338], a - jr z, .asm_c6b8 - dec c - jr nz, .asm_c6a0 -.asm_c6b8 - ld a, [wd338] - or a - jr nz, .asm_c6c3 - ld hl, wd335 - set 1, [hl] -.asm_c6c3 - call Func_c41c - call Func_c469 - pop bc - pop hl - ret - -Func_c6cc: ; c6cc (3:46cc) - push hl - ld hl, wd332 - add [hl] - ld [hl], a - pop hl - ret - -Func_c6d4: ; c6d4 (3:46d4) - push hl - ld hl, wd333 - add [hl] - ld [hl], a - pop hl - ret - -Func_c6dc: ; c6dc (3:46dc) - push hl - ld hl, wd335 - res 0, [hl] - res 1, [hl] - call Func_c6f7 - call Func_3997 - call Func_c70d - ld a, [wd0bf] - cp $1 - call z, Func_c9c0 - pop hl - ret - -Func_c6f7: ; c6f7 (3:46f7) - ld a, [wd336] - ld [wWhichSprite], a - ld c, SPRITE_ANIM_FIELD_0F - call GetSpriteAnimBufferProperty - res 2, [hl] - ld c, SPRITE_ANIM_MOVEMENT_COUNTER - call GetSpriteAnimBufferProperty - ld a, $ff - ld [hl], a - ret - -Func_c70d: ; c70d (3:470d) - push hl - ld hl, wd0bb - ld a, [wCurMap] - cp [hl] - jr z, .asm_c71c - ld hl, wd0b4 - set 4, [hl] -.asm_c71c - pop hl - ret - -Func_c71e: ; c71e (3:471e) - ld a, $ff - ld [wd3b6], a - call Func_c653 - call GetFloorObjectFromPos - and $40 - jr z, .asm_c73d - farcall Func_1c72e - jr c, .asm_c73d - ld a, [wd3aa] - ld [wd3b6], a - ld a, $2 - jr .asm_c748 -.asm_c73d - call Func_3a5e - jr nc, .asm_c746 - ld a, $3 - jr .asm_c748 -.asm_c746 - or a - ret -.asm_c748 - ld [wd0bf], a - scf - ret - -Func_c74d: ; c74d (3:474d) - push hl - push bc - push de - call MainMenu_c75a - call CloseDialogueBox - pop de - pop bc - pop hl - ret - -MainMenu_c75a: ; c75a (3:475a) - call PauseSong - ld a, MUSIC_PAUSE_MENU - call PlaySong - call Func_c797 -.asm_c765 - ld a, $1 - call Func_c29b -.asm_c76a - call DoFrameIfLCDEnabled - call HandleMenuInput - jr nc, .asm_c76a - ld a, e - ld [wd0b8], a - ldh a, [hCurrentMenuItem] - cp e - jr nz, .asm_c793 - cp $5 - jr z, .asm_c793 - call Func_c2a3 - ld a, [wd0b8] - ld hl, PointerTable_c7a2 - call JumpToFunctionInTable - ld hl, Func_c797 - call Func_c32b - jr .asm_c765 -.asm_c793 - call ResumeSong - ret - -Func_c797: ; c797 (3:4797) - ld a, [wd0b8] - ld hl, Unknown_cd98 - farcall Func_111e9 - ret - -PointerTable_c7a2: ; c7a2 (3:47a2) - dw Func_c7ae - dw Func_c7b3 - dw Func_c7b8 - dw Func_c7cc - dw Func_c7e0 - dw Func_c7e5 - -Func_c7ae: ; c7ae (3:47ae) - farcall Func_10059 - ret - -Func_c7b3: ; c7b3 (3:47b3) - farcall Func_100a2 - ret - -Func_c7b8: ; c7b8 (3:47b8) - xor a - ldh [hSCX], a - ldh [hSCY], a - call Set_OBJ_8x16 - farcall Func_1288c - farcall Func_8db0 - call Set_OBJ_8x8 - ret - -Func_c7cc: ; c7cc (3:47cc) - xor a - ldh [hSCX], a - ldh [hSCY], a - call Set_OBJ_8x16 - farcall Func_1288c - farcall Func_a288 - call Set_OBJ_8x8 - ret - -Func_c7e0: ; c7e0 (3:47e0) - farcall Func_10548 - ret - -Func_c7e5: ; c7e5 (3:47e5) - farcall Func_103d2 - ret - -PC_c7ea: ; c7ea (3:47ea) - ld a, MUSIC_PC_MAIN_MENU - call PlaySong - call Func_c241 - call $4915 - call DoFrameIfLCDEnabled - ldtx hl, TurnedPCOnText - call Func_2c73 - call $484e -.asm_c801 - ld a, $1 - call Func_c29b -.asm_c806 - call DoFrameIfLCDEnabled - call HandleMenuInput - jr nc, .asm_c806 - ld a, e - ld [wd0b9], a - ldh a, [hCurrentMenuItem] - cp e - jr nz, .asm_c82f - cp $4 - jr z, .asm_c82f - call Func_c2a3 - ld a, [wd0b9] - ld hl, $4846 - call JumpToFunctionInTable - ld hl, $484e - call Func_c32b - jr .asm_c801 -.asm_c82f - call Func_c135 - call DoFrameIfLCDEnabled - ldtx hl, TurnedPCOffText - call Func_c891 - call CloseDialogueBox - xor a - ld [wd112], a - call Func_39fc - ret -; 0xc846 - - INCROM $c846, $c891 - -Func_c891: ; c891 (3:4891) - push hl - ld a, [wd0c1] - bit 0, a - jr z, .asm_c8a1 - ld hl, wd3b9 - ld a, [hli] - or [hl] - call nz, Func_c135 - -.asm_c8a1 - xor a - ld hl, wd3b9 - ld [hli], a - ld [hl], a - pop hl - ld a, $1 - call Func_c29b - call Func_c241 - call $4915 - call DoFrameIfLCDEnabled - call Func_2c73 - ret - -Func_c8ba: ; c8ba (3:48ba) - ld a, e - or d - jr z, Func_c891 - push hl - ld a, [wd0c1] - bit 0, a - jr z, .asm_c8d4 - ld hl, wd3b9 - ld a, [hli] - cp e - jr nz, .asm_c8d1 - ld a, [hl] - cp d - jr z, .asm_c8d4 - -.asm_c8d1 - call Func_c135 - -.asm_c8d4 - ld hl, wd3b9 - ld [hl], e - inc hl - ld [hl], d - pop hl - ld a, $1 - call Func_c29b - call Func_c241 - call $4915 - call DoFrameIfLCDEnabled - call $2c62 - ret -; 0xc8ed - -Func_c8ed: ; c8ed (3:c8ed) - push hl - push bc - push de - push hl - ld a, $1 - call Func_c29b - call $4915 - call DoFrameIfLCDEnabled - pop hl - ld a, l - or h - jr z, .asm_c90e - push hl - xor a - ld hl, wd3b9 - ld [hli], a - ld [hl], a - pop hl - call YesOrNoMenuWithText - jr .asm_c911 - -.asm_c90e - call YesOrNoMenu - -.asm_c911 - pop de - pop bc - pop hl - ret - -Func_c915: ; c915 (3:4915) - push bc - push de - ld de, $000c - ld bc, $1406 - call AdjustCoordinatesForWindow - call $43ca - pop de - pop bc - ret - -Func_c926: ; c926 (3:4926) - push bc - call Func_39c3 - ld a, [wd3aa] - ld [wd3b6], a - farcall Func_1c768 - pop bc - -Func_c935: ; c935 (3:4935) - push hl - ld hl, wd0c6 - ld [hl], c - inc hl - ld [hl], b - ld a, $3 - ld [wd0bf], a - pop hl - ret - -Func_c943: ; c943 (3:4943) - push hl - push bc - push de - ld l, $0 - call Func_3abd - jr nc, .asm_c98f -.asm_c94d - ld a, l - ld [wd4c4], a - ld a, h - ld [wd4c5], a - ld a, $4 - ld [wd4c6], a - ld de, wd3ab - ld bc, $0006 - call Func_3bf5 - ld a, [wd3ab] - or a - jr z, .asm_c98f - push hl - ld a, [wd3af] - ld l, a - ld a, [wd3b0] - ld h, a - or l - jr z, .asm_c97a - call Func_3c45 - jr nc, .asm_c988 -.asm_c97a - ld a, [wd3ab] - farcall Func_11857 - call Func_c998 - farcall Func_1c485 -.asm_c988 - pop hl - ld bc, $0006 - add hl, bc - jr .asm_c94d -.asm_c98f - ld l, $2 - call Func_c9c2 - pop de - pop bc - pop hl - ret - -Func_c998: ; c998 (3:4998) - ld a, [wd3ab] - cp $22 - ret nz - ld a, [wd3d0] - or a - ret z - ld b, $4 - ld a, [wConsole] - cp $2 - jr nz, .asm_c9ae - ld b, $e -.asm_c9ae - ld a, b - ld [wd3b1], a - ld a, $0 - ld [wd3b2], a - ret - -Func_c9b8: ; c9b8 (3:49b8) - ld l, $8 - jr Func_c9c2 - -Func_c9bc: ; c9bc (3:49bc) - ld l, $a - jr Func_c9c2 - -Func_c9c0: ; c9c0 (3:49c0) - ld l, $c - -Func_c9c2: ; c9c2 (3:49c2) - call Func_3abd - ret nc - jp hl - -Func_c9c7: ; c9c7 (3:49c7) - ld l, $e - jr Func_c9c2 - -Func_c9cb: ; c9cb (3:49cb) - push hl - push bc - ld hl, wEventFlags - ld bc, $0040 -.asm_c9d3 - xor a - ld [hli], a - dec bc - ld a, b - or c - jr nz, .asm_c9d3 - pop bc - pop hl - ret - -Func_c9dd: ; c9dd (3:49dd) - xor a - ld [wd411], a - call Func_c9e8 - call Func_ca0e - ret - -Func_c9e8: ; c9e8 (3:49e8) - ld c, $0 - call Func_ca69 - db $13 - cp $2 - jr c, .asm_ca04 -.asm_c9f2 - call UpdateRNGSources - and $3 - ld c, a - ld b, $0 - ld hl, Unknown_ca0a - add hl, bc - ld a, [wd0bb] - cp [hl] - jr z, .asm_c9f2 -.asm_ca04 - ld a, c - call Func_ca8f - db $34 - ret - -Unknown_ca0a: ; ca0a (3:4a04) - INCROM $ca0a, $ca0e - -Func_ca0e: ; ca0e (3:4a0e) - ld a, [wd32e] - cp $b - jr z, .asm_ca68 - call Func_ca69 - db $22 - or a - jr nz, .asm_ca4a - call Func_ca69 - db $40 - cp $7 - jr z, .asm_ca68 - or a - jr z, .asm_ca33 - cp $2 - jr z, .asm_ca62 - ld c, $1 - call Func_ca8f - db $40 - jr .asm_ca62 -.asm_ca33 - call Func_ca69 - db $3f - cp $7 - jr z, .asm_ca68 - or a - jr z, .asm_ca68 - cp $2 - jr z, .asm_ca68 - ld c, $1 - call Func_ca8f - db $3f - jr .asm_ca68 -.asm_ca4a - call UpdateRNGSources - ld c, $1 - and $3 - or a - jr z, .asm_ca56 - ld c, $0 -.asm_ca56 - call Func_ca8f - db $41 - jr .asm_ca5c -.asm_ca5c - ld c, $7 - call Func_ca8f - db $40 -.asm_ca62 - ld c, $7 - call Func_ca8f - db $3f -.asm_ca68 - ret - -Func_ca69: ; ca69 (3:4a69) - call Func_cab3 -CheckIfEventFlagSet: ; ca6c (3:4a6c) - push hl - push bc - call GetEventFlagMod - ld c, [hl] - ld a, [wd3d1] -.asm_ca75 - bit 0, a - jr nz, .asm_ca7f - srl a - srl c - jr .asm_ca75 -.asm_ca7f - and c - pop bc - pop hl - or a - ret -; 0xca84 - - INCROM $ca84, $ca8f - -Func_ca8f: ; ca8f (3:4a8f) - call Func_cab3 - -; a - pointer on table for cb1d, c - set or reset control bit -ModifyEventFlags: ; ca92 (3:4a92) - push hl - push bc - call GetEventFlagMod - ld a, [wd3d1] -.asm_ca9a - bit 0, a - jr nz, .asm_caa4 - srl a - sla c - jr .asm_ca9a -.asm_caa4 - ld a, [wd3d1] - and c - ld c, a - ld a, [wd3d1] - cpl - and [hl] - or c - ld [hl], a - pop bc - pop hl - ret - -Func_cab3: ; cab3 (3:4ab3) - push hl - ld hl, sp+$4 - push bc - ld c, [hl] - inc hl - ld b, [hl] - ld a, [bc] - inc bc - ld [hl], b - dec hl - ld [hl], c - pop bc - pop hl - ret -; 0xcac2 - - INCROM $cac2, $cac5 - -SetEventFlags: ; cac5 (3:4ac5) - push bc - ld c, $ff - call ModifyEventFlags - pop bc - ret -; 0xcacd - - INCROM $cacd, $cad0 - -Func_cad0: ; cad0 (3:4ad0) - push bc - ld c, $0 - call ModifyEventFlags - pop bc - ret - -Func_cad8: ; cad8 (3:4ad8) - push hl - push bc - ld hl, $4b15 - ld bc, $0008 -.asm_cae0 - ld a, [hli] - call CheckIfEventFlagSet - jr z, .asm_cae7 - inc b - -.asm_cae7 - dec c - jr nz, .asm_cae0 - ld c, b - call Func_ca8f - ld l, $79 - push af - cp $8 - jr nc, .asm_caff - cp $7 - jr nc, .asm_cb05 - cp $3 - jr nc, .asm_cb0b - jr .asm_cb11 - -.asm_caff - ld a, $c - farcall $4, $4a70 - -.asm_cb05 - ld a, $b - farcall $4, $4a70 - -.asm_cb0b - ld a, $a - farcall $4, $4a70 - -.asm_cb11 - pop af - pop bc - pop hl - ret -; 0xcb15 - - INCROM $cb15, $cb1d - -GetEventFlagMod: ; cb1d (3:4b1d) - push bc - ld c, a - ld b, $0 - sla c - rl b - ld hl, EventFlagMods - add hl, bc - ld a, [hli] - ld c, a - ld a, [hl] - ld [wd3d1], a - ld b, $0 - ld hl, wEventFlags - add hl, bc - pop bc - ret - -; offset - bytes to set or reset -EventFlagMods: ; cb37 (3:4b37) - INCROM $cb37, $cc32 - -Func_cc32: ; cc32 (3:4c32) - push hl - ld hl, wd0c8 - ld e, [hl] - inc hl - ld d, [hl] - pop hl - call Func_c8ba - ret -; 0xcc3e - - INCROM $cc3e, $cc42 - -; called when pressing a in front of an object. creates a pointer to the data right after an RST20 -; was called, then runs RunOverworldScript to handle that data -RST20: ; cc42 (3:4c42) - pop hl - ld a, l - ld [wOWScriptPointer], a - ld a, h - ld [wOWScriptPointer+1], a - xor a - ld [wBreakOWScriptLoop], a -.asm_cc4f - call RunOverworldScript - ld a, [wBreakOWScriptLoop] ; if you break out, it jumps - or a - jr z, .asm_cc4f - ld hl, wOWScriptPointer - ld a, [hli] - ld c, a - ld b, [hl] - push bc - ret - -IncreaseOWScriptPointerBy1: ; cc60 (3:4c60) - ld a, 1 - jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy2: ; cc64 (3:4c64) - ld a, 2 - jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy4: ; cc68 (3:4c68) - ld a, 4 - jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy5: ; cc6c (3:4c6c) - ld a, 5 - jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy6: ; cc70 (3:4c70) - ld a, 6 - jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy7: ; cc74 (3:4c74) - ld a, 7 - jr IncreaseOWScriptPointer -IncreaseOWScriptPointerBy3: ; cc78 (3:4c78) - ld a, 3 - -IncreaseOWScriptPointer: ; cc7a (3:4c7a) - ld c, a - ld a, [wOWScriptPointer] - add c - ld [wOWScriptPointer], a - ld a, [wOWScriptPointer+1] - adc 0 - ld [wOWScriptPointer+1], a - ret - -SetOWScriptPointer: ; cc8b (3:4c8b) - ld hl, wOWScriptPointer - ld [hl], c - inc hl - ld [hl], b - ret -; 0xcc92 - - INCROM $cc92, $cc96 - -GetOWSArgs1AfterPointer: ; cc96 (3:4c96) - ld a, $1 - jr GetOWSArgsAfterPointer - -GetOWSArgs2AfterPointer: ; cc9a (3:4c9a) - ld a, $2 - jr GetOWSArgsAfterPointer -GetOWSArgs3AfterPointer: ; cc9e (3:4c9e) - ld a, $3 - -GetOWSArgsAfterPointer: ; cca0 (3:4ca0) - push hl - ld l, a - ld a, [wOWScriptPointer] - add l - ld l, a - ld a, [wOWScriptPointer+1] - adc $0 - ld h, a - ld a, [hli] - ld c, a - ld b, [hl] - pop hl - or b - ret - -Func_ccb3: ; ccb3 (3:4cb3) - ld a, $ff - ld [wd415], a - ret - -Func_ccb9: ; ccb9 (3:4cb9) - xor a - ld [wd415], a - ret - -OWScript_EndScriptLoop1: ; ccbe (3:4cbe) -OWScript_EndScriptLoop2: ; ccbe (3:4cbe) -OWScript_EndScriptLoop3: ; ccbe (3:4cbe) -OWScript_EndScriptLoop4: ; ccbe (3:4cbe) -OWScript_EndScriptLoop5: ; ccbe (3:4cbe) -OWScript_EndScriptLoop6: ; ccbe (3:4cbe) -OWScript_EndScriptLoop7: ; ccbe (3:4cbe) -OWScript_EndScriptLoop8: ; ccbe (3:4cbe) -OWScript_EndScriptLoop9: ; ccbe (3:4cbe) -OWScript_EndScriptLoop10: ; ccbe (3:4cbe) - ld a, $01 - ld [wBreakOWScriptLoop], a - jp IncreaseOWScriptPointerBy1 - -OWScript_CloseTextBox: ; ccc6 (3:4cc6) - call CloseDialogueBox - jp IncreaseOWScriptPointerBy1 - -OWScript_EndScriptCloseText: ; cccc (3:4ccc) - call OWScript_CloseTextBox - call OWScript_EndScriptLoop1 - pop hl - ret - -; args: 2-Text String Index -OWScript_PrintTextString: ; ccd4 (3:4cd4) - ld l, c - ld h, b - call Func_cc32 - jp IncreaseOWScriptPointerBy3 - -Func_ccdc: ; ccdc (3:4cdc) - ld l, c - ld h, b - call Func_c891 - jp IncreaseOWScriptPointerBy3 - -Func_cce4: ; cce4 (3:4ce4) - ld a, $1 - ld [wcd9a], a - -; Asks the player a question then jumps if they answer yes -OWScript_AskQuestionJump: ; cce9 (3:4ce9) - ld l, c - ld h, b - call Func_c8ed - ld a, [hCurrentMenuItem] - ld [wd415], a - jr c, .asm_ccfe - call GetOWSArgs3AfterPointer - jr z, .asm_ccfe - jp SetOWScriptPointer - -.asm_ccfe - jp IncreaseOWScriptPointerBy5 - -; args - prize cards, deck id, duel theme index -; sets a battle up, doesn't start until we break out of the script system. -OWScript_StartBattle: ; cd01 (3:4d01) - call Func_cd66 - ld a, [wd3b6] - ld l, $0 - call Func_39ad - ld a, [hl] - farcall Func_118d3 - ld a, [wcc19] - cp $ff - jr nz, .asm_cd26 - ld a, [wd695] - ld c, a - ld b, $0 - ld hl, $4d63 - add hl, bc - ld a, [hl] - ld [wcc19], a -.asm_cd26 - ld a, [wd3b6] - ld l, $0 - call Func_39ad - ld a, [hl] -asm_cd2f - ld [wd0c4], a - ld [wcc14], a - push af - farcall Func_1c557 - ld [wd0c5], a - pop af - farcall Func_118a7 - ld a, GAME_EVENT_DUEL - ld [wGameEvent], a - ld hl, wd0b4 - set 6, [hl] - jp IncreaseOWScriptPointerBy4 - -Func_cd4f: ; cd4f (3:4d4f) - call Func_cd66 - ld a, [wd696] - farcall Func_118bf - ld a, $16 - ld [wMatchStartTheme], a - ld a, [wd696] - jr asm_cd2f - -Unknown_dd63: ; cd4f (3:4d4f) - INCROM $cd63, $cd66 - -Func_cd66: ; cd66 (3:4d66) - ld a, c - ld [wcc18], a - ld a, b - ld [wcc19], a - call GetOWSArgs3AfterPointer - ld a, c - ld [wDuelTheme], a - ret - -Func_cd76: ; cd76 (3:4d76) - ld a, GAME_EVENT_BATTLE_CENTER - ld [wGameEvent], a - ld hl, wd0b4 - set 6, [hl] - jp IncreaseOWScriptPointerBy1 - -Func_cd83: ; cd83 (3:4d83) - ld a, [wd415] - or a - jr nz, .asm_cd8c - call GetOWSArgs3AfterPointer -.asm_cd8c - ld l, c - ld h, b - call Func_cc32 - jp IncreaseOWScriptPointerBy5 - -Func_cd94: ; cd94 (3:4d94) - call Func_ca69 - ld b, h -Unknown_cd98: - dec a - and $3 - add a - inc a - call GetOWSArgsAfterPointer - ld l, c - ld h, b - call Func_cc32 - jp IncreaseOWScriptPointerBy7 - -Func_cda8: ; cda8 (3:4da8) - ld a, [wd415] - or a - jr nz, .asm_cdb1 - call GetOWSArgs3AfterPointer -.asm_cdb1 - ld l, c - ld h, b - call Func_c891 - jp IncreaseOWScriptPointerBy5 - -OWScript_PrintTextCloseBox: ; cdb9 (3:4db9) - ld l, c - ld h, b - call Func_cc32 - call CloseDialogueBox - ld a, $1 - ld [wBreakOWScriptLoop], a - call IncreaseOWScriptPointerBy3 - pop hl - ret - -Func_cdcb: ; cdcb (3:4dcb) - ld a, [wd3b6] - ld [wd3aa], a -Func_4dd1: ; cdd1 (3:4dd1) - farcall Func_1c50a - jp IncreaseOWScriptPointerBy1 - -Func_cdd8: ; cdd8 (3:4dd8) - ld a, [wd3aa] - push af - ld a, [wd3ab] - push af - ld a, [wd696] - ld [wd3ab], a - call Func_39c3 - call Func_4dd1 - pop af - ld [wd3ab], a - pop af - ld [wd3aa], a - ret - -Func_cdf5: ; cdf5 (3:4df5) - ld a, [wd3aa] - push af - ld a, [wd3ab] - push af - ld a, [wd696] - ld [wd3ab], a - ld a, c - ld [wd3ac], a - ld a, b - ld [wd3ad], a - ld a, $2 - ld [wd3ae], a - ld a, [wd3ab] - farcall Func_11857 - farcall Func_1c485 - pop af - ld [wd3ab], a - pop af - ld [wd3aa], a - jp IncreaseOWScriptPointerBy3 - -Func_ce26: ; ce26 (3:4e26) - ld a, [wd3b6] - ld [wd3aa], a - farcall Func_1c455 - rlca - add c - ld l, a - ld a, b - adc $0 - ld h, a - ld c, [hl] - inc hl - ld b, [hl] - -Func_ce3a: ; ce3a (3:4e3a) - farcall Func_1c78d -.asm_ce3e - call DoFrameIfLCDEnabled - farcall Func_1c7de - jr nz, .asm_ce3e - jp IncreaseOWScriptPointerBy3 - -Func_ce4a: ; ce4a (3:4e4a) - ld a, [wd3b6] - ld [wd3aa], a - jr Func_ce3a - -Func_ce52: ; ce52 (3:4e52) - ld a, [wd3aa] - push af - ld a, [wd3ab] - push af - ld a, [wd696] -asm_ce5d - ld [wd3ab], a - call Func_39c3 - call Func_ce3a - pop af - ld [wd3ab], a - pop af - ld [wd3aa], a - ret - -Func_ce6f: ; ce6f (3:4e6f) - ld a, [wd3aa] - push af - ld a, [wd3ab] - push af - ld a, c - push af - call GetOWSArgs2AfterPointer - push bc - call IncreaseOWScriptPointerBy1 - pop bc - pop af - jr asm_ce5d - -Func_ce84: ; ce84 (3:4e84) - call Func_c135 - jp IncreaseOWScriptPointerBy1 - -; args: booster pack index, booster pack index, booster pack index -OWScript_GiveBoosterPacks: ; ce8a (3:4e8a) - xor a - ld [wd117], a - push bc - call Func_c2a3 - pop bc - push bc - ld a, c - farcall BoosterPack_1031b - ld a, 1 - ld [wd117], a - pop bc - ld a, b - cp $ff - jr z, .asm_ceb4 - farcall BoosterPack_1031b - call GetOWSArgs3AfterPointer - ld a, c - cp $ff - jr z, .asm_ceb4 - farcall BoosterPack_1031b -.asm_ceb4 - call Func_c2d4 - jp IncreaseOWScriptPointerBy4 - -Func_ceba: ; ceba (3:4eba) - xor a - ld [wd117], a - call Func_c2a3 - ld hl, $4edd -.asm_cec4 - ld a, [hl] - cp $ff - jr z, .asm_ced7 - push hl - farcall BoosterPack_1031b - ld a, $1 - ld [wd117], a - pop hl - inc hl - jr .asm_cec4 -.asm_ced7 - call Func_c2d4 - jp IncreaseOWScriptPointerBy1 -; 0xcedd - - INCROM $cedd, $cee2 - -Func_cee2: ; cee2 (3:4ee2) - call Func_c2a3 - ld a, c - cp $ff - jr z, .asm_cf09 - or a - jr nz, .asm_cef0 - ld a, [wd697] - -.asm_cef0 - push af - farcall Func_10000 - farcall Func_10031 - pop af - bank1call Func_7594 - call Func_c1a4 - call DoFrameIfLCDEnabled - call Func_c2d4 - jp IncreaseOWScriptPointerBy2 - -.asm_cf09 - xor a - jr .asm_cef0 - -Func_cf0c: ; cf0c (3:4f0c) - ld a, c - call GetCardCountInCollectionAndDecks - jr asm_cf16 - -Func_cf12: ; cf12 (3:4f12) - ld a, c - call GetCardCountInCollection - -asm_cf16 - or a - jr nz, asm_cf1f - -asm_cf19 - call Func_ccb9 - jp IncreaseOWScriptPointerBy4 - -asm_cf1f - call Func_ccb3 - call GetOWSArgs2AfterPointer - jr z, asm_cf2a - jp SetOWScriptPointer - -asm_cf2a - jp IncreaseOWScriptPointerBy4 - -Func_cf2d: ; cf2d (3:4f2d) - push bc - call IncreaseOWScriptPointerBy1 - pop bc - call GetRawAmountOfCardsOwned - ld a, h - cp b - jr nz, .asm_cf3b - ld a, l - cp c - -.asm_cf3b - jr nc, asm_cf1f - jr asm_cf19 - -Func_cf3f: ; cf3f (3:4f3f) - ld a, c - or a - jr nz, .asm_cf46 - ld a, [wd697] - -.asm_cf46 - call AddCardToCollection - jp IncreaseOWScriptPointerBy2 - -Func_cf4c: ; cf4c (3:4f4c) - ld a, c - call RemoveCardFromCollection - jp IncreaseOWScriptPointerBy2 - -Func_cf53: ; cf53 (3:4f53) - ld c, $1 - ld b, $0 -.asm_cf57 - ld a, c - call GetCardCountInCollection - add b - ld b, a - inc c - ld a, c - cp $8 - jr c, .asm_cf57 - ld a, b - or a - jr nz, Func_cf6d -Func_cf67: ; cf67 (3:4f67) - call Func_ccb9 - jp IncreaseOWScriptPointerBy3 - -Func_cf6d: ; cf6d (3:4f6d) - call Func_ccb3 - call GetOWSArgs1AfterPointer - jr z, .asm_cf78 - jp SetOWScriptPointer - -.asm_cf78 - jp IncreaseOWScriptPointerBy3 - -Func_cf7b: ; cf7b (3:4f7b) - ld c, $1 -.asm_cf7d - push bc - ld a, c - call GetCardCountInCollection - jr c, .asm_cf8c - ld b, a -.asm_cf85 - ld a, c - call RemoveCardFromCollection - dec b - jr nz, .asm_cf85 - -.asm_cf8c - pop bc - inc c - ld a, c - cp $8 - jr c, .asm_cf7d - jp IncreaseOWScriptPointerBy1 - -; This function doesn't look like a valid function, but it's pointed to in the table. -Func_cf96: ; cf96 (3:4f96) - ld c, $0 - call Func_ca69 - ld de, $28b7 - ld hl, $08fe - jr c, .asm_cfa4 - inc c - -.asm_cfa4 - call Func_ca69 - rla - cp $8 - jr c, .asm_cfad - inc c - -.asm_cfad - call Func_ca69 -.asm_cfb0 - jr nz, .asm_cfb0 - ld [$0138], sp - inc c - ld a, c - rlca - add $3 - call GetOWSArgsAfterPointer - jp SetOWScriptPointer - -Func_cfc0: ; cfc0 (3:4fc0) - call GetOWSArgs1AfterPointer - jp SetOWScriptPointer - -Func_cfc6: ; cfc6 (3:4fc6) - ld a, [wd3b6] - ld [wd3aa], a - ld a, c - farcall Func_1c52e - jp IncreaseOWScriptPointerBy2 - -Func_cfd4: ; cfd4 (3:4fd4) - call Func_ca69 - dec l - ld b, a -.asm_cfd9 - ld a, $5 - call Random - ld e, $1 - ld c, a - push bc - or a - jr z, .asm_cfea -.asm_cfe5 - sla e - dec c - jr nz, .asm_cfe5 - -.asm_cfea - ld a, e - and b - pop bc - jr nz, .asm_cfd9 - ld a, e - or b - push bc - ld c, a - call Func_ca8f - dec l - pop bc - ld b, $0 - ld hl, $5006 - add hl, bc - ld c, [hl] - call Func_ca8f - dec hl - jp IncreaseOWScriptPointerBy1 - - INCROM $d006, $d00b - -Func_d00b: ; d00b (3:500b) - sla c - ld b, $0 - ld hl, wTxRam2 - add hl, bc - push hl - call Func_ca69 - dec hl - ld e, a - ld d, $0 - call GetCardName - pop hl - ld [hl], e - inc hl - ld [hl], d - jp IncreaseOWScriptPointerBy2 - -Func_d025: ; d025 (3:5025) - call Func_ca69 - dec hl - call GetCardCountInCollectionAndDecks - jp c, Func_cf67 - jp Func_cf6d - -Func_d032: ; d032 (3:5032) - call Func_ca69 - dec hl - call GetCardCountInCollection - jp c, Func_cf67 - jp Func_cf6d - -Func_d03f: ; d03f (3:503f) - call Func_ca69 - dec hl - call RemoveCardFromCollection - jp IncreaseOWScriptPointerBy1 - -OWScript_ScriptJump: ; d049 (3:5049) - call GetOWSArgs1AfterPointer - jp SetOWScriptPointer - -Func_d04f: ; d04f (3:504f) - call Func_cad8 - jp IncreaseOWScriptPointerBy1 - -Func_d055: ; d055 (3:5055) - ld a, c - call Func_c5ce - jp IncreaseOWScriptPointerBy2 - - -OWScript_MovePlayer: ; 505c (3:505c) - ld a, c - ld [wd339], a - ld a, b - ld [wd33a], a - call StartScriptedMovement -.asm_d067 - call DoFrameIfLCDEnabled - call SetScreenScroll - call Func_c53d - ld a, [wd335] - and $03 - jr nz, .asm_d067 - call DoFrameIfLCDEnabled - call SetScreenScroll - jp IncreaseOWScriptPointerBy3 - -Func_d080: ; d080 (3:5080) - ld a, c - farcall Func_11893 - jp IncreaseOWScriptPointerBy2 - -Func_d088: ; d088 (3:5088) - ld a, c - ld [wd3ab], a - call GetOWSArgs2AfterPointer - call Func_c926 - jp IncreaseOWScriptPointerBy4 - -Func_d095: ; d095 (3:5095) - ld a, [wd3b6] - ld [wd3aa], a - push bc - call GetOWSArgs3AfterPointer - ld a, [wd3b6] - ld l, $5 - call Func_39ad - res 4, [hl] - ld a, [hl] - or c - ld [hl], a - pop bc - ld e, c - ld a, [wConsole] - cp $2 - jr nz, .asm_d0b6 - ld e, b - -.asm_d0b6 - ld a, e - farcall Func_1c57b - jp IncreaseOWScriptPointerBy4 - -Func_d0be: ; d0be (3:50be) - ld a, [wd3b6] - ld [wd3aa], a - ld a, c - ld c, b - ld b, a - farcall Func_1c461 - jp IncreaseOWScriptPointerBy3 - -Func_d0ce: ; d0ce (3:50ce) - push bc - call DoFrameIfLCDEnabled - pop bc - dec c - jr nz, Func_d0ce - jp IncreaseOWScriptPointerBy2 - -Func_d0d9: ; d0d9 (3:50d9) - ld a, [wd3b6] - ld [wd3aa], a - ld d, c - ld e, b - farcall Func_1c477 - ld a, e - cp c - jp nz, Func_d48a - ld a, d - cp b - jp nz, Func_d48a - jp Func_d490 - -Func_d0f2: ; d0f2 (3:50f2) - ld a, [wPlayerXCoord] - cp c - jp nz, Func_d48a - ld a, [wPlayerYCoord] - cp b - jp nz, Func_d48a - jp Func_d490 - -Func_d103: ; d103 (3:5103) - ld a, [wd3aa] - push af - ld a, [wd3ab] - push af - ld a, c - ld [wd3ab], a - call Func_39c3 - jr c, .asm_d119 - call $54d1 - jr .asm_d11c - -.asm_d119 - call $54e6 - -.asm_d11c - pop af - ld [wd3ab], a - pop af - ld [wd3aa], a - ret - -Func_d125: ; d125 (3:5125) - ld a, c - push af - call Func_c2a3 - pop af - farcall Medal_1029e - call Func_c2d4 - jp IncreaseOWScriptPointerBy2 - -Func_d135: ; d135 (3:5135) - sla c - ld b, $0 - ld hl, wTxRam2 - add hl, bc - push hl - ld a, [wd32e] - rlca - ld c, a - ld b, $0 - ld hl, $5151 - add hl, bc - ld e, [hl] - inc hl - ld d, [hl] - pop hl - ld [hl], e - inc hl - ld [hl], d - jp IncreaseOWScriptPointerBy2 - - INCROM $d153, $d16b - -Func_d16b: ; d16b (3:516b) - ld hl, wd0c8 - ld e, [hl] - inc hl - ld d, [hl] - push de - sla c - ld b, $0 - ld hl, wTxRam2 - add hl, bc - push hl - ld a, [wd696] - farcall Func_11893 - pop hl - ld a, [wd0c8] - ld [hli], a - ld a, [wd0c9] - ld [hl], a - pop de - ld hl, wd0c8 - ld [hl], e - inc hl - ld [hl], d - jp IncreaseOWScriptPointerBy2 - -Func_d195: ; d195 (3:5195) - ld a, [wd3ab] - push af - call Func_ca69 - ld b, l - inc a - ld c, a - call Func_ca8f - ld b, l - call Func_f580 - pop af - ld [wd3ab], a - jp IncreaseOWScriptPointerBy1 - -Func_d1ad: ; d1ad (3:51ad) - call MainMenu_c75a - jp IncreaseOWScriptPointerBy1 - -Func_d1b3: ; d1b3 (3:51b3) - call Func_ca69 - ld b, h - dec a - cp $2 - jr c, .asm_d1c3 - ld a, $d - call Random - add $2 - -.asm_d1c3 - ld hl, $51dc -asm_d1c6 - ld e, a - add a - add e - ld e, a - ld d, $0 - add hl, de - ld a, [hli] - ld [wd697], a - ld a, [hli] - ld [wTxRam2], a - ld a, [hl] - ld [wTxRam2 + 1], a - jp IncreaseOWScriptPointerBy1 - - INCROM $d1dc, $d209 - -Func_d209: ; d209 (3:5209) - call Func_ca69 - ld [hl], c - ld e, a -.asm_d20e - call UpdateRNGSources - ld d, $8 - and $3 - ld c, a - ld b, a -.asm_d217 - jr z, .asm_d21e - srl d - dec b - jr .asm_d217 - -.asm_d21e - ld a, d - and e - jr nz, .asm_d20e - push bc - ld b, $0 - ld hl, $5240 - add hl, bc - ld a, [hl] - call SetEventFlags - pop bc - ld hl, $5234 - ld a, c - jr asm_d1c6 - - INCROM $d234, $d244 - -Func_d244: ; d244 (3:5244) - ld a, c - farcall Func_80ba4 - jp IncreaseOWScriptPointerBy2 - -Func_d24c: ; d24c (3:524c) - ld hl, $525e - xor a - call Func_d28c - ld a, [wd695] - ld c, a - call Func_ca8f - halt - jp IncreaseOWScriptPointerBy1 - - INCROM $d25e, $d271 - -Func_d271: ; d271 (3:5271) - ld hl, $527b - xor a - call Func_d28c - jp IncreaseOWScriptPointerBy1 -; 0xd27b - - INCROM $d27b, $d28c - -Func_d28c: ; d28c (3:528c) - ld [wd416], a - push hl - call Func_c241 - call Func_c915 - call DoFrameIfLCDEnabled - pop hl - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - push hl - ld h, [hl] - ld l, a - or h - jr z, .asm_d2a8 - call Func_c8ba - -.asm_d2a8 - ld a, $1 - call Func_c29b - pop hl - inc hl - ld a, [hli] - push hl - ld h, [hl] - ld l, a - ld a, [wd416] - farcall Func_111e9 - pop hl - inc hl - ld a, [hli] - ld [wd417], a - push hl - -.asm_d2c1 - call DoFrameIfLCDEnabled - call HandleMenuInput - jr nc, .asm_d2c1 - ld a, [hCurrentMenuItem] - cp e - jr z, .asm_d2d9 - ld a, [wd417] - or a - jr z, .asm_d2c1 - ld e, a - ld [hCurrentMenuItem], a - -.asm_d2d9 - pop hl - ld a, [hli] - push hl - ld h, [hl] - ld l, a - ld a, e - ld [hl], a - add a - ld c, a - ld b, $0 - pop hl - inc hl - ld a, [hli] - ld h, [hl] - ld l, a - or h - jr z, .asm_d2f5 - add hl, bc - ld a, [hli] - ld [wTxRam2], a - ld a, [hl] - ld [wTxRam2 + 1], a - -.asm_d2f5 - ret - -Func_d2f6: ; d2f6 (3:52f6) - ld hl, $530c - xor a - call Func_d28c - ld a, [wd694] - ld c, a - call Func_ca8f - ld [hl], l - xor a - ld [wd694], a - jp IncreaseOWScriptPointerBy1 -; 0xd30c - - INCROM $d30c, $d317 - -Func_d317: ; d317 (3:5317) - ld hl, $532b - ld a, [wd694] - call Func_d28c - ld a, [wd694] - ld c, a - call Func_ca8f - ld [hl], l - jp IncreaseOWScriptPointerBy1 - - - INCROM $d32b, $d336 - -DeckMachine_d336: ; d336 (3:5336) - push bc - call Func_c2a3 - call PauseSong - ld a, MUSIC_DECK_MACHINE - call PlaySong - call EmptyScreen - xor a - ldh [hSCX], a - ldh [hSCY], a - farcall Func_1288c - call EnableLCD - pop bc - ld a, c - or a - jr z, .asm_d360 - dec a - ld [wd0a9], a - farcall Func_ba04 - jr .asm_d364 -.asm_d360 - farcall Func_b19d -.asm_d364 - call ResumeSong - call Func_c2d4 - jp IncreaseOWScriptPointerBy2 - -Func_d36d: ; d36d (3:536d) - ld a, [wOWScriptPointer] - ld l, a - ld a, [wOWScriptPointer+1] - ld h, a - inc hl - ld a, [hli] - ld a, [hli] - ld [wd0bb], a - ld a, [hli] - ld [wd0bc], a - ld a, [hli] - ld [wd0bd], a - ld a, [hli] - ld [wd0be], a - ld hl, wd0b4 - set 4, [hl] - jp IncreaseOWScriptPointerBy6 - -Func_d38f: ; d38f (3:538f) - farcall Func_10c96 - jp IncreaseOWScriptPointerBy2 - -Func_d396: ; d396 (3:5396) - farcall Func_1157c - jp IncreaseOWScriptPointerBy2 - -Func_d39d: ; d39d (3:539d) - ld a, c - or a - jr nz, .asm_d3ac - farcall Func_10dba - ld c, a - call Func_ca8f - ld [hl], d - jr .asm_d3b6 - -.asm_d3ac - ld a, GAME_EVENT_GIFT_CENTER - ld [wGameEvent], a - ld hl, wd0b4 - set 6, [hl] - -.asm_d3b6 - jp IncreaseOWScriptPointerBy2 - -Func_d3b9: ; d3b9 (3:53b9) - call Func_3917 - ld a, GAME_EVENT_CREDITS - ld [wGameEvent], a - ld hl, wd0b4 - set 6, [hl] - jp IncreaseOWScriptPointerBy1 - -Func_d3c9: ; d3c9 (3:53c9) - ld a, c - farcall Func_10a70 - jp IncreaseOWScriptPointerBy2 - -Func_d3d1: ; d3d1 (3:53d1) - jp IncreaseOWScriptPointerBy1 - -Func_d3d4: ; d3d4 (3:53d4) - ld a, [wd693] - bank1call Func_7576 - jp IncreaseOWScriptPointerBy1 - - INCROM $d3dd, $d3e0 - -Func_d3e0: ; d3e0 (3:53e0) - ld a, $1 - ld [wd32e], a - farcall Func_11024 -.asm_d3e9 - call DoFrameIfLCDEnabled - farcall Func_11060 - ld a, [wd33e] - cp $2 - jr nz, .asm_d3e9 - farcall Func_10f2e - jp IncreaseOWScriptPointerBy1 - -Func_d3fe: ; d3fe (3:53fe) - ld a, c - ld [wd112], a - call PlaySong - jp IncreaseOWScriptPointerBy2 - -Func_d408: ; d408 (3:5408) - ld a, c - ld [wd111], a - jp IncreaseOWScriptPointerBy2 - -Func_d40f: ; d40f (3:540f) - ld a, c - call Func_3c83 - jp IncreaseOWScriptPointerBy2 - -Func_d416: ; d416 (3:5416) - ld a, c - call PlaySFX - jp IncreaseOWScriptPointerBy2 - -Func_d41d: ; d41d (3:541d) - call Func_39fc - jp IncreaseOWScriptPointerBy1 - -Func_d423: ; d423 (3:5423) - call PauseSong - jp IncreaseOWScriptPointerBy1 - -Func_d429: ; d429 (3:5429) - call ResumeSong - jp IncreaseOWScriptPointerBy1 - -Func_d42f: ; d42f (3:542f) - call Func_3c96 - jp IncreaseOWScriptPointerBy1 - -Func_d435: ; d435 (3:5435) - ld a, c - farcall Func_1c83d - jp IncreaseOWScriptPointerBy2 - -Func_d43d: ; d43d (3:543d) - ld a, GAME_EVENT_CHALLENGE_MACHINE - ld [wGameEvent], a - ld hl, wd0b4 - set 6, [hl] - jp IncreaseOWScriptPointerBy1 - -OWScript_CustomModifyEventFlags: ; d44a (3:544a) - ld a, c - ld c, b - call ModifyEventFlags - jp IncreaseOWScriptPointerBy3 - -Func_d452: ; d452 (3:5452) - ld a, c - push af - call CheckIfEventFlagSet - inc a - ld c, a - pop af - call ModifyEventFlags - jp IncreaseOWScriptPointerBy2 - -Func_d460: ; d460 (3:5460) - ld a, c - call CheckIfEventFlagSet - or a - jr z, asm_d46d -asm_d467 - call Func_ccb9 - jp IncreaseOWScriptPointerBy4 - -asm_d46d - call Func_ccb3 - call GetOWSArgs2AfterPointer - jr z, .asm_d478 - jp SetOWScriptPointer - -.asm_d478 - jp IncreaseOWScriptPointerBy4 - -OWScript_JumpIfFlagSet: ; d47b (3:547b) - ld a, c - call CheckIfEventFlagSet - or a - jr nz, asm_d46d - jr asm_d467 - -Func_d484: ; d484 (3:5484) - call Func_d4b6 - cp c - jr z, Func_d490 - -Func_d48a: ; d48a (3:548a) - call Func_ccb9 - jp IncreaseOWScriptPointerBy5 - -Func_d490: ; d490 (3:5490) - call Func_ccb3 - call GetOWSArgs3AfterPointer - jr z, .asm_d49b - jp SetOWScriptPointer - -.asm_d49b - jp IncreaseOWScriptPointerBy5 - -Func_d49e: ; d49e (3:549e) - call Func_d4b6 - cp c - jr nz, Func_d490 - jr Func_d48a - -Func_d4a6: ; d4a6 (3:54a6) - call Func_d4b6 - cp c - jr nc, Func_d490 - jr Func_d48a - -Func_d4ae: ; d4ae (3:54ae) - call Func_d4b6 - cp c - jr c, Func_d490 ; 0xd4b2 $dc - jr Func_d48a ; 0xd4b4 $d4 - -Func_d4b6: ; d4b6 (3:54b6) - ld a, c - ld c, b - call CheckIfEventFlagSet - ret - -OWScript_SetEventFlags: ; d4bc (3:54bc) - ld a, c - call SetEventFlags - jp IncreaseOWScriptPointerBy2 - -Func_d4c3: ; d4c3 (3:54c3) - ld a, c - call Func_cad0 - jp IncreaseOWScriptPointerBy2 - -Func_d4ca: ; d4ca (3:54ca) - ld a, c - call CheckIfEventFlagSet - or a - jr z, asm_d4e6 -Func_d4d1: - call Func_ccb3 - call GetOWSArgs2AfterPointer - jr z, .asm_d4dc - jp SetOWScriptPointer -.asm_d4dc - jp IncreaseOWScriptPointerBy4 - -OWScript_JumpIfFlagNotSet: - ld a, c - call CheckIfEventFlagSet - or a - jr z, Func_d4d1 -asm_d4e6 - call Func_ccb9 - jp IncreaseOWScriptPointerBy4 -; 0xd4ec - - INCROM $d4ec, $d753 - -OWSequence_d753: ; d753 (3:5753) - start_script - run_script OWScript_MovePlayer - db $00 - db $02 - run_script OWScript_MovePlayer - db $00 - db $02 - run_script OWScript_MovePlayer - db $00 - db $02 - run_script OWScript_MovePlayer - db $00 - db $02 - run_script OWScript_MovePlayer - db $00 - db $02 - run_script OWScript_MovePlayer - db $00 - db $02 - run_script OWScript_MovePlayer - db $00 - db $02 - run_script OWScript_MovePlayer - db $00 - db $02 - run_script OWScript_MovePlayer - db $00 - db $02 - run_script OWScript_PrintTextString - tx Text05e3 - run_script OWScript_CloseTextBox - run_script Func_d088 - db $07 - db $79 - db $57 - run_script OWScript_EndScriptLoop1 - ret - - start_script - run_script Func_ce4a - db $80 - db $58 - db $02 - - ; there's more to this script but it hasn't been disassembled yet - - INCROM $d77e, $e13f - -WaterClubMovePlayer: ; e13f (3:613f) - ld a, [wPlayerYCoord] - cp $8 - ret nz - call Func_ca69 - inc sp - cp $2 - ret nc - ld a, $21 - ld [wd3ab], a - ld bc, OWSequence_NotReadyToSeeAmy - jp Func_c926 - -WaterClubAfterDuel: ;e157 (3:6157) - ld hl, .after_duel_table - call FindEndOfBattleScript - ret - -.after_duel_table - dw $1f1f - dw OWSequence_BeatSara - dw OWSequence_LostToSara - - dw $2020 - dw OWSequence_BeatAmanda - dw OWSequence_LostToAmanda - - dw $2121 - dw $626c - dw $6260 - - dw $2222 - dw $6322 - dw $6344 - db $00 - -OWSequence_Sara: ; e177 (3:6177) - start_script - run_script OWScript_PrintTextString - tx Text042c - run_script OWScript_AskQuestionJump - tx Text042d - dw .yes_duel - run_script OWScript_PrintTextString - tx Text042e - run_script OWScript_EndScriptCloseText -.yes_duel - run_script OWScript_PrintTextString - tx Text042f - run_script OWScript_StartBattle - db 2 - db WATERFRONT_POKEMON_DECK_ID ; 6189 - db MUSIC_DUEL_THEME_1 - run_script OWScript_EndScriptCloseText - -OWSequence_BeatSara: ; e18c (3:618c) - start_script - run_script OWScript_SetEventFlags - db FLAG_BEAT_SARA - run_script OWScript_PrintTextString - tx Text0430 - run_script OWScript_GiveBoosterPacks - db BOOSTER_COLOSSEUM_WATER - db BOOSTER_COLOSSEUM_WATER - db NO_BOOSTER - run_script OWScript_PrintTextString - tx Text0431 - run_script OWScript_EndScriptCloseText - -OWSequence_LostToSara: ; e19a (03:619a) - start_script - run_script OWScript_PrintTextCloseBox - tx Text0432 - -OWSequence_Amanda: ; e19e (03:619e) - start_script - run_script OWScript_PrintTextString - tx Text0433 - run_script OWScript_AskQuestionJump - tx Text0434 - dw .yes_duel - run_script OWScript_PrintTextString - tx Text0435 - run_script OWScript_EndScriptCloseText -.yes_duel - run_script OWScript_PrintTextString - tx Text0436 - run_script OWScript_StartBattle - db 03 - db LONELY_FRIENDS_DECK_ID - db MUSIC_DUEL_THEME_1 - run_script OWScript_EndScriptCloseText - -OWSequence_BeatAmanda: ; e1b3 (03:61b3) - start_script - run_script OWScript_SetEventFlags - db FLAG_BEAT_AMANDA - run_script OWScript_PrintTextString - tx Text0437 - run_script OWScript_GiveBoosterPacks - db BOOSTER_MYSTERY_LIGHTNING_COLORLESS - db BOOSTER_MYSTERY_LIGHTNING_COLORLESS - db NO_BOOSTER - run_script OWScript_PrintTextString - tx Text0438 - run_script OWScript_EndScriptCloseText - -OWSequence_LostToAmanda: ; e1c1 (03:61c1) - start_script - run_script OWScript_PrintTextCloseBox - tx Text0439 - -OWSequence_NotReadyToSeeAmy: - INCROM $e1c5, $e21c - -OWSequence_Joshua: - start_script - run_script OWScript_JumpIfFlagNotSet - db FLAG_BEAT_AMANDA - dw .sara_and_amanda_not_beaten - run_script OWScript_JumpIfFlagNotSet - db FLAG_BEAT_SARA - dw .sara_and_amanda_not_beaten - run_script OWScript_ScriptJump - dw .beat_sara_and_amanda -.sara_and_amanda_not_beaten - run_script OWScript_CustomModifyEventFlags - db $33 ; offset on flagmod table - db $01 ; the control bit - run_script OWScript_PrintTextString - tx Text043b - run_script OWScript_EndScriptCloseText -.beat_sara_and_amanda - run_script OWScript_JumpIfFlagSet - db $33 - dw $623c - run_script OWScript_CustomModifyEventFlags - db $33 - db $01 - run_script OWScript_PrintTextString - tx Text043b - run_script OWScript_PrintTextString - tx Text043c - run_script Func_d484 - db $33 - db $01 - - INCROM $e23f, $e52c - -FindEndOfBattleScript: ; e52c (3:652c) - ld c, $0 - ld a, [wDuelResult] - or a ; cp DUEL_WIN - jr z, .player_won - ld c, $2 - -.player_won - ld a, [wd0c4] - ld b, a - ld de, $0005 -.check_enemy_byte_loop - ld a, [hli] - or a - ret z - cp b - jr z, .found_enemy - add hl, de - jr .check_enemy_byte_loop - -.found_enemy - ld a, [hli] - ld [wd3ab], a - ld b, $0 - add hl, bc - ld c, [hl] - inc hl - ld b, [hl] - jp Func_c926 -; 0xe553 - - INCROM $e553, $f580 - -Func_f580: ; f580 (3:7580) - call Func_ca69 - ld b, h - cp $3 - jr z, .asm_f596 - call Func_ca69 - ld b, l - cp $3 - ld d, $18 - jr nz, .asm_f598 - ld a, $2 - jr .asm_f5ac - -.asm_f596 - ld d, $19 - -.asm_f598 - ld a, d - call Random - ld c, a - call $75cc - jr c, .asm_f598 - call $75d4 - ld b, $0 - ld hl, $75b3 - add hl, bc - ld a, [hl] - -.asm_f5ac - ld [wd3ab], a - ld [wd696], a - ret -; 0xf5b3 - - INCROM $f5b3, $fc2b - -Func_fc2b: ; fc2b (3:7c2b) - ld a, [wDuelResult] - cp 2 - jr c, .asm_fc34 - ld a, $2 -.asm_fc34 - rlca - ld c, a - ld b, $0 - ld hl, PointerTable_fc4c - add hl, bc - ld c, [hl] - inc hl - ld b, [hl] - ld a, $b0 - ld [wd0c8], a - ld a, $3 - ld [wd0c9], a - jp Func_c935 - -PointerTable_fc4c: ; fc4c (3:7c4c) - dw Unknown_fc64 - dw Unknown_fc68 - dw Unknown_fc60 - - INCROM $fc52, $fc60 - -Unknown_fc60: ; fc60 (3:7c60) - INCROM $fc60, $fc64 - -Unknown_fc64: ; fc64 (3:7c64) - INCROM $fc64, $fc68 - -Unknown_fc68: ; fc68 (3:7c68) - INCROM $fc68, $fcad - -Func_fcad: ; fcad (3:7cad) - INCROM $fcad, $10000 diff --git a/src/engine/bank4.asm b/src/engine/bank4.asm deleted file mode 100644 index 5140705..0000000 --- a/src/engine/bank4.asm +++ /dev/null @@ -1,1542 +0,0 @@ -Func_10000: ; 10000 (4:4000) - ld a, $0 - ld [wTileMapFill], a - call EmptyScreen - call LoadDuelHUDTiles - ld de, $307f - call Func_2275 - call Set_OBJ_8x8 - xor a - ldh [hSCX], a - ldh [hSCY], a - ld a, [wLCDC] - bit 7, a - jr nz, .asm_10025 - xor a - ld [rSCX], a - ld [rSCY], a - -.asm_10025 - call Func_1288c - call ZeroObjectPositions - ld a, $1 - ld [wVBlankOAMCopyToggle], a - ret - -Func_10031: ; 10031 (4:4031) - ldh a, [hBankSRAM] - push af - ld a, $1 - call BankswitchSRAM - call $4cbb - call DisableSRAM - call $4b28 - call SetFlushAllPalettes - call EnableLCD - call DoFrameIfLCDEnabled - call $4cea - call SetFlushAllPalettes - pop af - call BankswitchSRAM - call DisableSRAM - ret - -Func_10059: ; 10059 (4:4059) - INCROM $10059, $100a2 - -Func_100a2: ; 100a2 (4:40a2) - INCROM $100a2, $1029e - -Medal_1029e: ; 1029e (4:429e) - sub $8 - ld c, a - ld [wd115], a - ld a, [wd291] - push af - push bc - call PauseSong - ld a, MUSIC_STOP - call PlaySong - farcall Func_70000 - call DisableLCD - call $4000 - ld a, $fa - ld [wd114], a - call $410c - pop bc - ld a, c - add a - ld c, a - ld b, $0 - ld hl, Unknown_1030b - add hl, bc - ld a, [hli] - ld [wTxRam2], a - ld a, [hl] - ld [wTxRam2 + 1], a - call $4031 - ld a, MUSIC_MEDAL - call PlaySong - ld a, $ff - ld [wd116], a -.asm_102e2 - call DoFrameIfLCDEnabled - ld a, [wd116] - inc a - ld [wd116], a - and $f - jr nz, .asm_102e2 - call $4197 - ld a, [wd116] - cp $e0 - jr nz, .asm_102e2 - ldtx hl, WonTheMedalText - call Func_2c73 - call Func_3c96 - call ResumeSong - pop af - ld [wd291], a - ret - -Unknown_1030b: ; 1030b (4:430b) - INCROM $1030b, $1031b - -BoosterPack_1031b: ; 1031b (4:431b) - ld c, a - ld a, [wd291] - push af - push bc - call DisableLCD - call $4000 - xor a - ld [wTextBoxFrameType], a - pop bc - push bc - ld b, $0 - ld hl, $43a5 - add hl, bc - ld a, [hl] - ld c, a - add a - add a - ld c, a - ld hl, $43c2 - add hl, bc - ld a, [hli] - push hl - ld bc, $0600 - call $70ca - pop hl - ld a, [hli] - ld [wTxRam3], a - xor a - ld [wTxRam3 + 1], a - ld a, [hli] - ld [wTxRam2], a - ld a, [hl] - ld [wTxRam2 + 1], a - call $4031 - call PauseSong - ld a, MUSIC_BOOSTER_PACK - call PlaySong - pop bc - ld a, c - farcall GenerateBoosterPack - ldtx hl, ReceivedBoosterPackText - ld a, [wd117] - cp $1 - jr nz, .asm_10373 - ldtx hl, AndAnotherBoosterPackText -.asm_10373 - call Func_2c73 - call Func_3c96 - call ResumeSong - ldtx hl, CheckedCardsInBoosterPackText - call Func_2c73 - call DisableLCD - call Func_1288c - call ZeroObjectPositions - ld a, $1 - ld [wVBlankOAMCopyToggle], a - ld a, $4 - ld [wTextBoxFrameType], a - farcall $1, $7599 - farcall Func_c1a4 - call DoFrameIfLCDEnabled - pop af - ld [wd291], a - ret -; 0x103a5 - - INCROM $103a5, $103d2 - -Func_103d2: ; 103d2 (4:43d2) - INCROM $103d2, $103d3 - -Duel_Init: ; 103d3 (4:43d3) - ld a, [wd291] - push af - call DisableLCD - call $4000 - ld a, $4 - ld [wTextBoxFrameType], a - lb de, 0, 12 - lb bc, 20, 6 - call DrawRegularTextBox - ld a, [wcc19] - add a - add a - ld c, a - ld b, $0 - ld hl, $445b - add hl, bc - ld a, [hli] - ld [wTxRam2], a - ld a, [hli] - ld [wTxRam2 + 1], a - push hl - ld a, [wOpponentName] - ld [wTxRam2_b], a - ld a, [wOpponentName + 1] - ld [wTxRam2_b + 1], a - ld hl, $4451 - call $51b3 ; LoadDuelistName - pop hl - ld a, [hli] - ld [wTxRam2], a - ld c, a - ld a, [hli] - ld [wTxRam2 + 1], a - or c - jr z, .asm_10425 - ld hl, $4456 - call $51b3 ; LoadDeckName - -.asm_10425 - ld bc, $0703 - ld a, [wOpponentPortrait] - call Func_3e2a ; LoadDuelistPortrait - ld a, [wMatchStartTheme] - call PlaySong - call $4031 - call DoFrameIfLCDEnabled - lb bc, $2f, $1d ; cursor tile, tile behind cursor - lb de, 18, 17 ; x, y - call SetCursorParametersForTextBox - call WaitForButtonAorB ; wait for the user to press a or b - call Func_3c96 - call Func_10ab4 ; fade out - pop af - ld [wd291], a - ret -; 0x10451 - - INCROM $10451, $10548 - -Func_10548: ; 10548 (4:4548) - INCROM $10548, $10756 - -Func_10756: ; 10756 (4:4756) - INCROM $10756, $10a70 - -Func_10a70: ; 10a70 (4:4a70) - push hl - push bc - push de - ld b, a - ld c, $f - ld hl, wPCPacks -.asm_10a79 - ld a, [hli] - and $7f - cp b - jr z, .asm_10a97 - dec c - jr nz, .asm_10a79 - ld c, $f - ld hl, wPCPacks -.asm_10a87 - ld a, [hl] - and $7f - jr z, .asm_10a93 - inc hl - dec c - jr nz, .asm_10a87 - debug_ret - jr .asm_10a97 - -.asm_10a93 - ld a, b - or $80 - ld [hl], a - -.asm_10a97 - pop de - pop bc - pop hl - ret - -Func_10a9b: ; 10a9b (4:4a9b) - INCROM $10a9b, $10ab4 - -Func_10ab4: ; 10ab4 (4:4ab4) - INCROM $10ab4, $10af9 - -Func_10af9: ; 10af9 (4:4af9) - INCROM $10af9, $10c96 - -Func_10c96: ; 10c96 (4:4c96) - ldh a, [hBankSRAM] - push af - push bc - ld a, $1 - call BankswitchSRAM - call $4cbb - call Func_10ab4 - pop bc - ld a, c - or a - jr nz, .asm_10cb0 - call $4cea - call Func_10af9 - -.asm_10cb0 - call EnableLCD - pop af - call BankswitchSRAM - call DisableSRAM - ret -; 0x10cbb - - INCROM $10cbb, $10dba - -Func_10dba: ; 10dba (4:4dba) - ld a, $1 - farcall Func_c29b - ld a, [wd0ba] - ld hl, $4e17 - farcall Func_111e9 -.asm_10dca - call DoFrameIfLCDEnabled - call HandleMenuInput - jr nc, .asm_10dca - ld a, e - ld [wd0ba], a - ldh a, [hCurrentMenuItem] - cp e - jr z, .asm_10ddd - ld a, $4 - -.asm_10ddd - ld [wd10e], a - push af - ld hl, $4df0 - call JumpToFunctionInTable - farcall Func_c135 - call DoFrameIfLCDEnabled - pop af - ret -; 0x10df0 - - INCROM $10df0, $10e28 - -Func_10e28: ; 10e28 (4:4e28) - INCROM $10e28, $10e55 - -Func_10e55: ; 10e55 (4:4e55) - ld a, [wd336] - ld [wWhichSprite], a - ld a, [wd33e] - or a - jr nz, .asm_10e65 - call Func_10e71 - ret -.asm_10e65 - cp $2 - jr z, .asm_10e6d - call Func_11060 - ret -.asm_10e6d - call LoadOverworldMapSelection - ret - -Func_10e71: ; 10e71 (4:4e71) - ldh a, [hButtonsPressed] - and D_PAD - jr z, .asm_10e83 - farcall Func_c5d5 - ld [wd334], a - call Func_10e97 - jr .asm_10e96 -.asm_10e83 - ldh a, [hButtonsPressed] - and A_BUTTON - jr z, .asm_10e96 - ld a, $2 - call PlaySFX - call Func_11016 - call Func_11024 - jr .asm_10e96 -.asm_10e96 - ret - -Func_10e97: ; 10e97 (4:4e97) - push hl - pop hl - ld a, [wd32e] - rlca - rlca - ld c, a - ld a, [wd334] - add c - ld c, a - ld b, $0 - ld hl, Unknown_10ebc - add hl, bc - ld a, [hl] - or a - jr z, .asm_10eb9 - ld [wd32e], a - call Func_10f2e - ld a, $1 - call PlaySFX -.asm_10eb9 - pop bc - pop hl - ret - -Unknown_10ebc: ; 10ebc (4:4ebc) - INCROM $10ebc, $10efd - -Func_10efd: ; 10efd (4:4efd) - push hl - push de - rlca - ld e, a - ld d, $0 - ld hl, Unknown_10f14 - add hl, de - pop de - ld a, [hli] - add $8 - add d - ld d, a - ld a, [hl] - add $10 - add e - ld e, a - pop hl - ret - -Unknown_10f14: ; 10f14 (4:4f14) - INCROM $10f14, $10f2e - -Func_10f2e: ; 10f2e (4:4f2e) - push hl - push de - lb de, 1, 1 - call Func_22ae - call Func_10f4a - rlca - ld e, a - ld d, $0 - ld hl, Unknown_397b - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call Func_2c29 - pop de - pop hl - ret - -Func_10f4a: ; 10f4a (4:4f4a) - push bc - ld a, [wd32e] - cp $2 - jr nz, .asm_10f5f - ld c, a - ld a, $1e - farcall CheckIfEventFlagSet - or a - ld a, c - jr nz, .asm_10f5f - ld a, $d -.asm_10f5f - pop bc - ret - -LoadOverworldMapSelection: ; 10f61 (4:4f61) - push hl - push bc - ld a, [wd32e] - rlca - rlca - ld c, a - ld b, $0 - ld hl, OverworldMapIndexes - add hl, bc - ld a, [hli] - ld [wd0bb], a - ld a, [hli] - ld [wd0bc], a - ld a, [hli] - ld [wd0bd], a - ld a, $0 - ld [wd0be], a - ld hl, wd0b4 - set 4, [hl] - pop bc - pop hl - ret - -INCLUDE "data/overworld_indexes.asm" - -Func_10fbc: ; 10fbc (4:4fbc) - ld a, $25 - farcall Func_1299f - ld c, SPRITE_ANIM_COORD_X - call GetSpriteAnimBufferProperty - ld a, $80 - ld [hli], a - ld a, $10 - ld [hl], a - ld b, $34 - ld a, [wConsole] - cp CONSOLE_CGB - jr nz, .asm_10fd8 - ld b, $37 -.asm_10fd8 - ld a, b - farcall Func_12ab5 - ret - -Func_10fde: ; 10fde (4:4fde) - ld a, [wd32e] - ld [wd33d], a - xor a - ld [wd33e], a - ld a, $25 - call Func_1299f - ld a, [wWhichSprite] - ld [wd33b], a - ld b, $35 - ld a, [wConsole] - cp $2 - jr nz, .asm_10ffe - ld b, $38 -.asm_10ffe - ld a, b - ld [wd33c], a - call Func_12ab5 - ld a, $3e - farcall CheckIfEventFlagSet - or a - jr nz, .asm_11015 - ld c, SPRITE_ANIM_FIELD_0F - call GetSpriteAnimBufferProperty - set 7, [hl] -.asm_11015 - ret - -Func_11016: ; 11016 (4:5016) - ld a, [wd33b] - ld [wWhichSprite], a - ld a, [wd33c] - inc a - call Func_12ab5 - ret - -Func_11024: ; 11024 (4:5024) - ld a, $57 - call PlaySFX - ld a, [wd336] - ld [wWhichSprite], a - ld c, SPRITE_ANIM_FIELD_0F - call GetSpriteAnimBufferProperty - set 2, [hl] - ld hl, Unknown_1229f - ld a, [wd33d] - dec a - add a - ld c, a - ld b, $0 - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [wd32e] - dec a - add a - ld c, a - ld b, $0 - add hl, bc - ld a, [hli] - ld [wd33f], a - ld a, [hl] - ld [wd340], a - ld a, $1 - ld [wd33e], a - xor a - ld [wd341], a - ret - -Func_11060: ; 11060 (4:5060) - ld a, [wd336] - ld [wWhichSprite], a - ld a, [wd341] - or a - jp nz, Func_11184 - ld a, [wd33f] - ld l, a - ld a, [wd340] - ld h, a - ld a, [hli] - ld b, a - ld a, [hli] - ld c, a - and b - cp $ff - jr z, .asm_110a0 - ld a, c - or b - jr nz, .asm_11094 - ld a, [wd33d] - ld e, a - ld a, [wd32e] - cp e - jr z, .asm_110a0 - ld de, $0000 - call Func_10efd - ld b, d - ld c, e -.asm_11094 - ld a, l - ld [wd33f], a - ld a, h - ld [wd340], a - call Func_110a6 - ret -.asm_110a0 - ld a, $2 - ld [wd33e], a - ret - -Func_110a6: ; 110a6 (4:50a6) - push hl - push bc - ld c, SPRITE_ANIM_COORD_X - call GetSpriteAnimBufferProperty - pop bc - ld a, b - sub [hl] - ld [wd343], a - ld a, $0 - sbc $0 - ld [wd344], a - inc hl - ld a, c - sub [hl] - ld [wd345], a - ld a, $0 - sbc $0 - ld [wd346], a - ld a, [wd343] - ld b, a - ld a, [wd344] - bit 7, a - jr z, .asm_110d8 - ld a, [wd343] - cpl - inc a - ld b, a -.asm_110d8 - ld a, [wd345] - ld c, a - ld a, [wd346] - bit 7, a - jr z, .asm_110e9 - ld a, [wd345] - cpl - inc a - ld c, a -.asm_110e9 - ld a, b - cp c - jr c, .asm_110f2 - call Func_11102 - jr .asm_110f5 -.asm_110f2 - call Func_1113e -.asm_110f5 - xor a - ld [wd347], a - ld [wd348], a - farcall Func_c5e9 - pop hl - ret - -Func_11102: ; 11102 (4:5102) - ld a, b - ld [wd341], a - ld e, a - ld d, $0 - ld hl, wd343 - xor a - ld [hli], a - bit 7, [hl] - jr z, .asm_11115 - dec a - jr .asm_11116 -.asm_11115 - inc a -.asm_11116 - ld [hl], a - ld b, c - ld c, $0 - call DivideBCbyDE - ld a, [wd346] - bit 7, a - jr z, .asm_11127 - call Func_11179 -.asm_11127 - ld a, c - ld [wd345], a - ld a, b - ld [wd346], a - ld hl, wd344 - ld a, $1 - bit 7, [hl] - jr z, .asm_1113a - ld a, $3 -.asm_1113a - ld [wd334], a - ret - -Func_1113e: ; 1113e (4:513e) - ld a, c - ld [wd341], a - ld e, a - ld d, $0 - ld hl, wd345 - xor a - ld [hli], a - bit 7, [hl] - jr z, .asm_11151 - dec a - jr .asm_11152 -.asm_11151 - inc a -.asm_11152 - ld [hl], a - ld c, $0 - call DivideBCbyDE - ld a, [wd344] - bit 7, a - jr z, .asm_11162 - call Func_11179 -.asm_11162 - ld a, c - ld [wd343], a - ld a, b - ld [wd344], a - ld hl, wd346 - ld a, $2 - bit 7, [hl] - jr z, .asm_11175 - ld a, $0 -.asm_11175 - ld [wd334], a - ret - -Func_11179: ; 11179 (4:5179) - ld a, c - cpl - add $1 - ld c, a - ld a, b - cpl - adc $0 - ld b, a - ret - -Func_11184: ; 11184 (4:5184) - ld a, [wd347] - ld d, a - ld a, [wd348] - ld e, a - ld c, SPRITE_ANIM_COORD_X - call GetSpriteAnimBufferProperty - ld a, [wd343] - add d - ld d, a - ld a, [wd344] - adc [hl] - ld [hl], a - inc hl - ld a, [wd345] - add e - ld e, a - ld a, [wd346] - adc [hl] - ld [hl], a - ld a, d - ld [wd347], a - ld a, e - ld [wd348], a - ld hl, wd341 - dec [hl] - ret -; 0x111b3 - - INCROM $111b3, $111e9 - -Func_111e9: ; 111e9 (4:51e9) - INCROM $111e9, $1124d - -Func_1124d: ; 1124d (4:524d) - INCROM $1124d, $11320 - -Func_11320: ; 11320 (4:5320) - INCROM $11320, $11343 - -Func_11343: ; 11343 (4:5343) - INCROM $11343, $11416 - -Func_11416: ; 11416 (4:5416) - INCROM $11416, $11430 - -Func_11430: ; 11430 (4:5430) - INCROM $11430, $1157c - -Func_1157c: ; 1157c (4:557c) - ld a, c - or a - jr nz, .asm_11586 - farcall Func_c228 - jr .asm_1159f - -.asm_11586 - ld a, $2 - ld [wd0bc], a - ld a, $4 - ld [wd0bd], a - ld a, $2 - ld [wd0be], a - ld a, $1 - ld [wd0bb], a - ld a, $1 - ld [wd32e], a - -.asm_1159f - call $5238 - ret -; 0x115a3 - -Func_115a3: ; 115a3 (4:55a3) - INCROM $115a3, $1162a - -INCLUDE "data/map_scripts.asm" - -; loads a pointer into hl found on PointerTable_118f5 -Func_1184a: ; 1184a (4:584a) - ; this may have been a macro - rlca - add LOW(PointerTable_118f5) - ld l, a - ld a, HIGH(PointerTable_118f5) - adc $00 - ld h, a - ld a, [hli] - ld h, [hl] - ld l, a - ret - -Func_11857: ; 11857 (4:5857) - push hl - push bc - call Func_1184a - ld a, [hli] - ld [wd3ab], a - ld a, [hli] - ld [wd3b3], a - ld a, [hli] - ld [wd3b1], a - ld a, [hli] - push af - ld a, [hli] - ld [wd3b2], a - pop bc - ld a, [wConsole] - cp $2 - jr nz, .asm_1187a - ld a, b - ld [wd3b1], a -.asm_1187a - pop bc - pop hl - ret - -; this appears to find data about the NPC we're talking to -Func_1187d: ; 1187d (4:587d) - push hl - call Func_1184a - ld bc, $5 - add hl, bc - ld c, [hl] - inc hl - ld b, [hl] - inc hl - ld a, [hli] - ld [wd0c8], a - ld a, [hli] - ld [wd0c9], a - pop hl - ret - -Func_11893: ; 11893 (4:5893) - push hl - push bc - call Func_1184a - ld bc, $0007 - add hl, bc - ld a, [hli] - ld [wd0c8], a - ld a, [hli] - ld [wd0c9], a - pop bc - pop hl - ret - -Func_118a7: ; 118a7 (4:58a7) - push hl - push bc - call Func_1184a - ld bc, $0007 - add hl, bc - ld a, [hli] - ld [wOpponentName], a - ld a, [hli] - ld [wOpponentName + 1], a - ld a, [hli] - ld [wOpponentPortrait], a - pop bc - pop hl - ret - -Func_118bf: ; 118bf (4:58bf) - push hl - push bc - call Func_1184a - ld bc, $000a - add hl, bc - ld a, [hli] - ld [wcc19], a - ld a, [hli] - ld [wDuelTheme], a - pop bc - pop hl - ret - -Func_118d3: ; 118d3 (4:58d3) - push hl - push bc - push af - call Func_1184a - ld bc, $000c - add hl, bc - ld a, [hli] - ld [wMatchStartTheme], a - pop af - cp $2 - jr nz, .asm_118f2 - ld a, [wCurMap] - cp $20 - jr nz, .asm_118f2 - ld a, $17 - ld [wMatchStartTheme], a - -.asm_118f2 - pop bc - pop hl - ret - -INCLUDE "data/npcs.asm" - -Func_11f4e: ; 11f4e (4:5f4e) - INCROM $11f4e, $1217b - -OverworldScriptTable: ; 1217b (4:617b) - dw OWScript_EndScriptLoop1 - dw OWScript_CloseTextBox - dw OWScript_PrintTextString - dw Func_ccdc - dw OWScript_AskQuestionJump - dw OWScript_StartBattle - dw Func_cd83 - dw Func_cda8 - dw OWScript_PrintTextCloseBox - dw Func_cdcb - dw Func_ce26 - dw Func_ce84 - dw OWScript_GiveBoosterPacks - dw Func_cf0c - dw Func_cf12 - dw Func_cf3f - dw Func_cf4c - dw Func_cf53 - dw Func_cf7b - dw Func_cf2d - dw Func_cf96 - dw Func_cfc6 - dw Func_cfd4 - dw Func_d00b - dw Func_d025 - dw Func_d032 - dw Func_d03f - dw OWScript_ScriptJump - dw Func_d04f - dw Func_d055 - dw OWScript_MovePlayer - dw Func_cee2 - dw Func_d080 - dw Func_d088 - dw Func_d095 - dw Func_d0be - dw Func_d0ce - dw Func_d0d9 - dw Func_d0f2 - dw Func_ce4a - dw Func_ceba - dw Func_d103 - dw Func_d125 - dw Func_d135 - dw Func_d16b - dw Func_cd4f - dw Func_cd94 - dw Func_ce52 - dw Func_cdd8 - dw Func_cdf5 - dw Func_d195 - dw Func_d1ad - dw Func_d1b3 - dw OWScript_EndScriptCloseText - dw Func_d244 - dw Func_d24c - dw DeckMachine_d336 - dw Func_d271 - dw Func_d36d - dw Func_ce6f - dw Func_d209 - dw Func_d38f - dw Func_d396 - dw Func_cd76 - dw Func_d39d - dw Func_d3b9 - dw Func_d3c9 - dw Func_d3d1 - dw Func_d3d4 - dw Func_d3e0 - dw Func_d3fe - dw Func_d408 - dw Func_d40f - dw Func_d416 - dw Func_d423 - dw Func_d429 - dw Func_d41d - dw Func_d42f - dw Func_d435 - dw Func_cce4 - dw Func_d2f6 - dw Func_d317 - dw Func_d43d - dw OWScript_EndScriptLoop2 - dw OWScript_EndScriptLoop3 - dw OWScript_EndScriptLoop4 - dw OWScript_EndScriptLoop5 - dw OWScript_EndScriptLoop6 - dw OWScript_CustomModifyEventFlags - dw Func_d460 - dw OWScript_JumpIfFlagSet - dw Func_d484 - dw Func_d49e - dw Func_d4a6 - dw Func_d4ae - dw OWScript_SetEventFlags - dw Func_d4c3 - dw Func_d4ca - dw OWScript_JumpIfFlagNotSet - dw Func_d452 - dw OWScript_EndScriptLoop7 - dw OWScript_EndScriptLoop8 - dw OWScript_EndScriptLoop9 - dw OWScript_EndScriptLoop10 - - INCROM $1224b, $1229f - -Unknown_1229f: ; 1229f (4:629f) - INCROM $1229f, $126d1 - -; usually, the game doesn't loop here at all, since as soon as a main menu option -; is selected, there is no need to come back to the menu. -; the only exception is after returning from Card Pop! -_GameLoop: ; 126d1 (4:66d1) - call ZeroObjectPositions - ld hl, wVBlankOAMCopyToggle - inc [hl] - farcall Func_70018 - ld a, $ff - ld [wd627], a -.main_menu_loop - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - farcall Func_c1f8 - farcall Func_1d078 - ld a, [wd628] - ld hl, MainMenuFunctionTable - call JumpToFunctionInTable - jr c, .main_menu_loop ; return to main menu - jr _GameLoop ; virtually restart game - -; this is never reached - scf - ret - -MainMenuFunctionTable: - dw MainMenu_CardPop - dw MainMenu_ContinueFromDiary - dw MainMenu_NewGame - dw MainMenu_ContinueDuel - -MainMenu_NewGame: ; 12704 (4:6704) - farcall Func_c1b1 - call Func_128a9 - farcall Func_1996e - call EnableSRAM - ld a, [sa007] - ld [wd421], a - ld a, [sa006] - ld [wTextSpeed], a - call DisableSRAM - ld a, MUSIC_STOP - call PlaySong - farcall Func_70000 - ld a, $9 - ld [wd111], a - call Func_39fc - farcall Func_1d306 - ld a, GAME_EVENT_OVERWORLD - ld [wGameEvent], a - farcall $03, ExecuteGameEvent - or a - ret - -MainMenu_ContinueFromDiary: ; 12741 (4:6741) - ld a, MUSIC_STOP - call PlaySong - call Func_11320 - jr nc, MainMenu_NewGame - farcall Func_c1ed - farcall Func_70000 - call EnableSRAM - xor a - ld [$ba44], a - call DisableSRAM - ld a, GAME_EVENT_OVERWORLD - ld [wGameEvent], a - farcall $03, ExecuteGameEvent - or a - ret - -MainMenu_CardPop: ; 12768 (4:6768) - ld a, MUSIC_CARD_POP - call PlaySong - bank1call Func_7571 - farcall Func_c1a4 - call DoFrameIfLCDEnabled - ld a, MUSIC_STOP - call PlaySong - scf - ret - -MainMenu_ContinueDuel: ; 1277e (4:677e) - ld a, MUSIC_STOP - call PlaySong - farcall Func_c9cb - farcall $04, Func_3a40 - farcall Func_70000 - ld a, GAME_EVENT_CONTINUE_DUEL - ld [wGameEvent], a - farcall $03, ExecuteGameEvent - or a - ret -; 0x1279a - - INCROM $1279a, $12871 - -Func_12871: ; 12871 (4:6871) - INCROM $12871, $1288c - -Func_1288c: ; 1288c (4:688c) - INCROM $1288c, $128a9 - -Func_128a9: ; 128a9 (4:68a9) - INCROM $128a9, $1296e - -Func_1296e: ; 1296e (4:696e) - INCROM $1296e, $1299f - -Func_1299f: ; 1299f (4:699f) - push af - ld a, [wd5d7] - or a - jr z, .asm_129a8 - pop af - ret -.asm_129a8 - pop af - push bc - push hl - call Func_12c05 - ld [wd5d3], a - xor a - ld [wWhichSprite], a - call Func_3db7 - ld bc, $0010 -.asm_129bb - ld a, [hl] - or a - jr z, .asm_129cf - add hl, bc - ld a, [wWhichSprite] - inc a - ld [wWhichSprite], a - cp $10 - jr nz, .asm_129bb - debug_ret - scf - jr .asm_129d6 -.asm_129cf - ld a, $1 - ld [hl], a - call Func_129d9 - or a -.asm_129d6 - pop hl - pop bc - ret - -Func_129d9: ; 129d9 (4:69d9) - push hl - push bc - push hl - inc hl - ld c, $f - xor a -.asm_129e0 - ld [hli], a - dec c - jr nz, .asm_129e0 - pop hl - ld bc, $0004 - add hl, bc - ld a, [wd5d3] - ld [hli], a - ld a, $ff - ld [hl], a - ld bc, $0009 - add hl, bc - ld a, $ff - ld [hl], a - pop bc - pop hl - ret -; 0x129fa - - INCROM $129fa, $12a21 - -Func_12a21: ; 12a21 (4:6a21) - INCROM $12a21, $12ab5 - -Func_12ab5: ; 12ab5 (4:6ab5) - push hl - push af - ld c, SPRITE_ANIM_FIELD_05 - call GetSpriteAnimBufferProperty - pop af - cp [hl] - pop hl - ret z - push hl - call Func_12ae2 - call Func_12b13 - pop hl - ret -; 0x12ac9 - - INCROM $12ac9, $12ae2 - -Func_12ae2: ; 12ae2 (4:6ae2) - push bc - push af - call Func_3db7 - pop af - push hl - ld bc, $0005 - add hl, bc - ld [hli], a - push hl - ld l, $6 - farcall Func_8020f - farcall Func_80229 - pop hl - ld a, [wd4c6] - ld [hli], a - ld a, [wd4c4] - ld [hli], a - ld c, a - ld a, [wd4c5] - ld [hli], a - ld b, a - ld a, $3 - add c - ld [hli], a - ld a, $0 - adc b - ld [hli], a - pop hl - pop bc - ret - -Func_12b13: ; 12b13 (4:6b13) - push bc - push de - push hl -.asm_12b16 - push hl - ld bc, $0006 - add hl, bc - ld a, [hli] - ld [wd4c6], a - inc hl - inc hl - ld a, [hl] - ld [wd4c4], a - add $4 - ld [hli], a - ld a, [hl] - ld [wd4c5], a - adc $0 - ld [hl], a - ld de, wd23e - ld bc, $0004 - call Func_3bf5 - pop hl - ld de, wd23e - ld a, [de] - call Func_12b6a - inc de - ld a, [de] - call Func_12b89 - jr c, .asm_12b16 - inc de - ld bc, $0002 - add hl, bc - push hl - ld bc, $000d - add hl, bc - ld b, [hl] - pop hl - ld a, [de] - bit 0, b - jr z, .asm_12b5a - cpl - inc a -.asm_12b5a - add [hl] - ld [hli], a - inc de - ld a, [de] - bit 1, b - jr z, .asm_12b64 - cpl - inc a -.asm_12b64 - add [hl] - ld [hl], a - pop hl - pop de - pop bc - ret - -Func_12b6a: ; 12b6a (4:6b6a) - ld [wd4ca], a - push hl - push bc - push de - push hl - ld bc, $0006 - add hl, bc - ld a, [hli] - ld [wd4c6], a - ld a, [hli] - ld [wd4c4], a - ld a, [hli] - ld [wd4c5], a - pop hl - call Func_3d72 - pop de - pop bc - pop hl - ret - -Func_12b89: ; 12b89 (4:6b89) - push hl - push bc - ld bc, $000e - add hl, bc - ld [hl], a - or a - jr nz, .asm_12ba4 - ld bc, $fff9 - add hl, bc - ld a, [hli] - add $3 - ld c, a - ld a, [hli] - adc $0 - ld b, a - ld a, c - ld [hli], a - ld a, b - ld [hl], a - scf -.asm_12ba4 - pop bc - pop hl - ret - -Func_12ba7: ; 12ba7 (4:6ba7) - INCROM $12ba7, $12bcd - -Func_12bcd: ; 12bcd (4:6bcd) - INCROM $12bcd, $12c05 - -Func_12c05: ; 12c05 (4:6c05) - push hl - push bc - push de - ld b, a - ld d, $0 - ld a, [wd618] - ld c, a - ld hl, wd5d8 - or a - jr z, .asm_12c22 -.asm_12c15 - inc hl - ld a, [hl] - cp b - jr z, .asm_12c3a - inc hl - ld a, [hli] - add [hl] - ld d, a - inc hl - dec c - jr nz, .asm_12c15 -.asm_12c22 - ld a, [wd618] - cp $10 - jr nc, .asm_12c48 - inc a - ld [wd618], a - inc hl - push hl - ld a, b - ld [hli], a - call Func_12c4f - push af - ld a, d - ld [hli], a - pop af - ld [hl], a - pop hl -.asm_12c3a - dec hl - inc [hl] - inc hl - inc hl - ld a, [hli] - add [hl] - cp $81 - jr nc, .asm_12c48 - ld a, d - or a - jr .asm_12c4b -.asm_12c48 - debug_ret - xor a - scf -.asm_12c4b - pop de - pop bc - pop hl - ret - -Func_12c4f: ; 12c4f (4:6c4f) - push af - xor a - ld [wd4cb], a - ld a, d - ld [wd4ca], a - pop af - farcall Func_8025b - ret - -Func_12c5e: ; 12c5e (4:6c5e) - INCROM $12c5e, $12c7f - -Func_12c7f: ; 12c7f (4:6c7f) - INCROM $12c7f, $131b3 - -Func_131b3: ; 131b3 (4:71b3) - INCROM $131b3, $131d3 - -Func_131d3: ; 131d3 (4:71d3) - INCROM $131d3, $1344d - -Func_1344d: ; 1344d (4:744d) - call PauseSong - ld a, MUSIC_MEDAL - call PlaySong - ldtx hl, DefeatedFiveOpponentsText - call Func_2c73 - call Func_3c96 - call ResumeSong - ret -; 0x13462 - - INCROM $13462, $13485 - -Func_13485: ; 13485 (4:7485) - call EnableSRAM - ld a, [$ba68] - or a - ret z - ld a, [$ba56] - ld [wTxRam3], a - ld a, [$ba57] - ld [wTxRam3 + 1], a - call DisableSRAM - call PauseSong - ld a, MUSIC_MEDAL - call PlaySong - ldtx hl, ConsecutiveWinRecordIncreasedText - call Func_2c73 - call Func_3c96 - call ResumeSong - ret -; 0x134b1 - - INCROM $134b1, $14000 diff --git a/src/engine/bank5.asm b/src/engine/bank5.asm deleted file mode 100644 index 0fd6f82..0000000 --- a/src/engine/bank5.asm +++ /dev/null @@ -1,323 +0,0 @@ -PointerTable_14000: ; 14000 (05:4000) - dw $47bd ; SAMS_PRACTICE_DECK - dw PointerTable_14668 ; PRACTICE_PLAYER_DECK - dw PointerTable_14668 ; SAMS_NORMAL_DECK - dw PointerTable_14668 ; CHARMANDER_AND_FRIENDS_DECK - dw PointerTable_14668 ; CHARMANDER_EXTRA_DECK - dw PointerTable_14668 ; SQUIRTLE_AND_FRIENDS_DECK - dw PointerTable_14668 ; SQUIRTLE_EXTRA_DECK - dw PointerTable_14668 ; BULBASAUR_AND_FRIENDS_DECK - dw PointerTable_14668 ; BULBASAUR_EXTRA_DECK - dw PointerTable_14668 ; LIGHTNING_AND_FIRE_DECK - dw PointerTable_14668 ; WATER_AND_FIGHTING_DECK - dw PointerTable_14668 ; GRASS_AND_PSYCHIC_DECK - dw $49e8 ; LEGENDARY_MOLTRES_DECK - dw $4b0f ; LEGENDARY_ZAPDOS_DECK - dw $4c0b ; LEGENDARY_ARTICUNO_DECK - dw $4d60 ; LEGENDARY_DRAGONITE_DECK - dw $4e89 ; FIRST_STRIKE_DECK - dw $4f0e ; ROCK_CRUSHER_DECK - dw $4f8f ; GO_GO_RAIN_DANCE_DECK - dw $5019 ; ZAPPING_SELFDESTRUCT_DECK - dw $509b ; FLOWER_POWER_DECK - dw $5122 ; STRANGE_PSYSHOCK_DECK - dw $51ad ; WONDERS_OF_SCIENCE_DECK - dw $5232 ; FIRE_CHARGE_DECK - dw $52bd ; IM_RONALD_DECK - dw $534b ; POWERFUL_RONALD_DECK - dw $53e8 ; INVINCIBLE_RONALD_DECK - dw $546f ; LEGENDARY_RONALD_DECK - dw $48dc ; MUSCLES_FOR_BRAINS_DECK - dw PointerTable_14668 ; HEATED_BATTLE_DECK - dw PointerTable_14668 ; LOVE_TO_BATTLE_DECK - dw PointerTable_14668 ; EXCAVATION_DECK - dw PointerTable_14668 ; BLISTERING_POKEMON_DECK - dw PointerTable_14668 ; HARD_POKEMON_DECK - dw PointerTable_14668 ; WATERFRONT_POKEMON_DECK - dw PointerTable_14668 ; LONELY_FRIENDS_DECK - dw PointerTable_14668 ; SOUND_OF_THE_WAVES_DECK - dw PointerTable_14668 ; PIKACHU_DECK - dw PointerTable_14668 ; BOOM_BOOM_SELFDESTRUCT_DECK - dw PointerTable_14668 ; POWER_GENERATOR_DECK - dw PointerTable_14668 ; ETCETERA_DECK - dw PointerTable_14668 ; FLOWER_GARDEN_DECK - dw PointerTable_14668 ; KALEIDOSCOPE_DECK - dw PointerTable_14668 ; GHOST_DECK - dw PointerTable_14668 ; NAP_TIME_DECK - dw PointerTable_14668 ; STRANGE_POWER_DECK - dw PointerTable_14668 ; FLYIN_POKEMON_DECK - dw PointerTable_14668 ; LOVELY_NIDORAN_DECK - dw PointerTable_14668 ; POISON_DECK - dw PointerTable_14668 ; ANGER_DECK - dw PointerTable_14668 ; FLAMETHROWER_DECK - dw PointerTable_14668 ; RESHUFFLE_DECK - dw $48dc ; IMAKUNI_DECK -; 1406a - - INCROM $1406a, $14226 - -Func_14226: ; 14226 (5:4226) - call CreateHandCardList - ld hl, wDuelTempList -.check_for_next_pokemon - ld a, [hli] - ldh [hTempCardIndex_ff98], a - cp $ff - ret z - call LoadCardDataToBuffer1_FromDeckIndex - ld a, [wLoadedCard1Type] - cp TYPE_ENERGY - jr nc, .check_for_next_pokemon - ld a, [wLoadedCard1Stage] - or a - jr nz, .check_for_next_pokemon - push hl - ldh a, [hTempCardIndex_ff98] - call PutHandPokemonCardInPlayArea - pop hl - jr .check_for_next_pokemon -; 0x1424b - - INCROM $1424b, $14663 - -Func_14663: ; 14663 (5:4663) - farcall Func_200e5 - ret - -; GENERAL DECK POINTER LIST - Not sure on all of these. -; This is an example of an AI pointer table, there's one for each AI type. -PointerTable_14668: ; 14668 (05:4668) - dw Func_14674 ; not used - dw Func_14674 ; general AI for battles - dw Func_14678 ; basic pokemon placement / cheater shuffling on better AI - dw Func_1467f - dw Func_14683 - dw Func_14687 - -; when battle AI gets called -Func_14674: ; 14674 (5:4674) - call Func_1468b - ret - -Func_14678: ; 14678 (5:4678) - call Func_15636 - call $4226 - ret - -Func_1467f: ; 1467f (5:467f) - call $5b72 - ret - -Func_14683: ; 14683 (5:4683) - call $5b72 - ret - -Func_14687: ; 14687 (5:4687) - call $41e5 - ret - -; AI for general decks i think -Func_1468b: ; 1468b (5:468b) - call Func_15649 - ld a, $1 - call Func_14663 - farcall $8, $67d3 - jp nc, $4776 - farcall $8, $6790 - farcall $8, $66a3 - farcall $8, $637f - ret c - farcall $8, $662d - ld a, $2 - call Func_14663 - ld a, $3 - call Func_14663 - ld a, $4 - call Func_14663 - call $5eae - ret c - ld a, $5 - call Func_14663 - ld a, $6 - call Func_14663 - ld a, $7 - call Func_14663 - ld a, $8 - call Func_14663 - call $4786 - ld a, $a - call Func_14663 - ld a, $b - call Func_14663 - ld a, $c - call Func_14663 - ld a, [wAlreadyPlayedEnergy] - or a - jr nz, .asm_146ed - call $64e8 - -.asm_146ed - call $5eae - farcall $8, $66a3 - farcall $8, $637f - ret c - farcall $8, $6790 - ld a, $d - farcall $8, $619b - ld a, $d - call Func_14663 - ld a, $f - call Func_14663 - ld a, [wce20] - and $4 - jr z, .asm_14776 - ld a, $1 - call Func_14663 - ld a, $2 - call Func_14663 - ld a, $3 - call Func_14663 - ld a, $4 - call Func_14663 - call $5eae - ret c - ld a, $5 - call Func_14663 - ld a, $6 - call Func_14663 - ld a, $7 - call Func_14663 - ld a, $8 - call Func_14663 - call $4786 - ld a, $a - call Func_14663 - ld a, $b - call Func_14663 - ld a, $c - call Func_14663 - ld a, [wAlreadyPlayedEnergy] - or a - jr nz, .asm_1475b - call $64e8 - -.asm_1475b - call $5eae - farcall $8, $66a3 - farcall $8, $637f - ret c - farcall $8, $6790 - ld a, $d - farcall $8, $619b - ld a, $d - call Func_14663 - -.asm_14776 - ld a, $e - farcall $8, $619b - call $69f8 - ret c - ld a, $5 - bank1call $67be - ret -; 0x14786 - - - INCROM $14786, $15636 -Func_15636: ; 15636 (5:5636) - ld a, $10 - ld hl, wcda5 - call ZeroData - ld a, $5 - ld [wcda6], a - ld a, $ff - ld [wcda5], a - ret - -Func_15649: ; 15649 (5:5649) - ld a, [wcda6] - inc a - ld [wcda6], a - xor a - ld [wce20], a - ld [wcddb], a - ld [wcddc], a - ld [wce03], a - ld a, [wcc10] - cp $ff - jr z, .asm_156b1 - or a - jr z, .asm_156b1 - ld a, [wcc11] - cp $ff - jr z, .asm_156b1 - call SwapTurn - call GetCardIDFromDeckIndex - call SwapTurn - ld a, e - cp MEWTWO1 ; I believe this is a check for Mewtwo1's Barrier move - jr nz, .asm_156b1 - ld a, [wcda7] - bit 7, a - jr nz, .asm_156aa - inc a - ld [wcda7], a - cp $3 - jr c, .asm_156c2 - ld a, DUELVARS_ARENA_CARD - call GetNonTurnDuelistVariable - call SwapTurn - call GetCardIDFromDeckIndex - call SwapTurn - ld a, e - cp MEWTWO1 - jr nz, .asm_156a4 - farcall $8, $67a9 - jr nc, .asm_156aa - -.asm_156a4 - xor a - ld [wcda7], a - jr .asm_156c2 - -.asm_156aa - ld a, $80 - ld [wcda7], a - jr .asm_156c2 - -.asm_156b1 - ld a, [wcda7] - bit 7, a - jr z, .asm_156be - inc a - ld [wcda7], a - jr .asm_156c2 - -.asm_156be - xor a - ld [wcda7], a - -.asm_156c2 - ret -; 0x156c3 - - INCROM $156c3, $1575e - -; zeroes a bytes starting at hl -ZeroData: ; 1575e (5:575e) - push af - push bc - push hl - ld b, a - xor a -.clear_loop - ld [hli], a - dec b - jr nz, .clear_loop - pop hl - pop bc - pop af - ret -; 0x1576b - - INCROM $1576b, $18000 diff --git a/src/engine/bank6.asm b/src/engine/bank6.asm deleted file mode 100644 index 1a85a24..0000000 --- a/src/engine/bank6.asm +++ /dev/null @@ -1,328 +0,0 @@ -_CopyCardNameAndLevel: ; 18000 (6:4000) - push bc - push de - ld [wcd9b], a - ld hl, wLoadedCard1Name - ld a, [hli] - ld h, [hl] - ld l, a - ld de, wDefaultText - push de - call CopyText ; copy card name to wDefaultText - pop hl - ld a, [hli] - cp TX_START - jp z, Func_18086 - ld a, [wcd9b] - ld c, a - ld a, [wLoadedCard1Type] - cp TYPE_ENERGY - jr nc, .level_done ; jump if energy or trainer - ld a, [wLoadedCard1Level] - or a - jr z, .level_done - inc c - inc c - ld a, [wLoadedCard1Level] - cp 10 - jr c, .level_done - inc c ; second digit -.level_done - ld hl, wLoadedCard1Name - ld a, [hli] - ld h, [hl] - ld l, a - ld de, wDefaultText - push de - call CopyText - pop hl - push de - ld e, c - call Func_23c1 - add e - ld c, a - pop hl - push hl -.fill_loop - ld a, $70 - ld [hli], a - dec c - jr nz, .fill_loop - ld [hl], TX_END - pop hl - ld a, [wLoadedCard1Type] - cp TYPE_ENERGY - jr nc, .done - ld a, [wLoadedCard1Level] - or a - jr z, .done - ld a, TX_SYMBOL - ld [hli], a - ld [hl], LOW("") - inc hl - ld a, [wLoadedCard1Level] - cp 10 - jr c, .one_digit - ld [hl], TX_SYMBOL - inc hl - ld b, LOW("<0>") - 1 -.first_digit_loop - inc b - sub 10 - jr nc, .first_digit_loop - add 10 - ld [hl], b ; first digit - inc hl -.one_digit - ld [hl], TX_SYMBOL - inc hl - add LOW("<0>") - ld [hl], a ; last (or only) digit - inc hl -.done - pop de - pop bc - ret -; 0x18086 - -Func_18086: ; 18086 (6:4086) - ld a, [wcd9b] - inc a - add a - ld b, a - ld hl, wDefaultText -.find_end_text_loop - dec b - ld a, [hli] - or a ; TX_END - jr nz, .find_end_text_loop - dec hl - ld a, [wLoadedCard1Type] - cp TYPE_ENERGY - jr nc, .level_done - ld a, [wLoadedCard1Level] - or a - jr z, .level_done - ld c, a - ld a, " " - ld [hli], a - dec b - ld a, "L" - ld [hli], a - dec b - ld a, "v" - ld [hli], a - dec b - ld a, c - cp 10 - jr c, .got_level - push bc - ld b, "0" - 1 -.first_digit_loop - inc b - sub 10 - jr nc, .first_digit_loop - add 10 - ld [hl], b ; first digit - inc hl - pop bc - ld c, a - dec b -.got_level - ld a, c - add "0" - ld [hli], a ; last (or only) digit - dec b -.level_done - push hl - ld a, " " -.fill_spaces_loop - ld [hli], a - dec b - jr nz, .fill_spaces_loop - ld [hl], TX_END - pop hl - pop de - pop bc - ret -; 0x180d5 - - INCROM $180d5, $186f7 - -INCLUDE "data/effect_commands.asm" - - INCROM $18f9c, $1996e - -Func_1996e: ; 1996e (6:596e) - call EnableSRAM - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - ld hl, sCardCollection - ld bc, $1607 -.asm_1997b - xor a - ld [hli], a - dec bc - ld a, c - or b - jr nz, .asm_1997b - ld a, $5 - ld hl, sa350 - call Func_199e0 - ld a, $7 - ld hl, sa3a4 - call Func_199e0 - ld a, $9 - ld hl, sa3f8 - call Func_199e0 - call EnableSRAM - ld hl, sCardCollection - ld a, CARD_NOT_OWNED -.asm_199a2 - ld [hl], a - inc l - jr nz, .asm_199a2 - ld hl, $bc00 - xor a - ld [hli], a - ld [hli], a - ld [hl], a - ld hl, $bb00 - ld c, $10 -.asm_199b2 - ld [hl], $0 - ld de, $0010 - add hl, de - dec c - jr nz, .asm_199b2 - ld a, $2 - ld [sa003], a - ld a, $2 - ld [sa006], a - ld [wTextSpeed], a - xor a - ld [sa007], a - ld [sa009], a - ld [sa004], a - ld [sa005], a - ld [sa00a], a - farcall Func_8cf9 - call DisableSRAM - ret - -Func_199e0: ; 199e0 (6:59e0) - push de - push bc - push hl - call LoadDeck - jr c, .asm_19a0e - call Func_19a12 - pop hl - call EnableSRAM - push hl - ld de, wDefaultText -.asm_199f3 - ld a, [de] - inc de - ld [hli], a - or a - jr nz, .asm_199f3 - pop hl - push hl - ld de, $0018 - add hl, de - ld de, wPlayerDeck - ld c, $3c -.asm_19a04 - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .asm_19a04 - call DisableSRAM - or a -.asm_19a0e - pop hl - pop bc - pop de - ret - -Func_19a12: ; 19a12 (6:5a12) - ld hl, wcce9 - ld a, [hli] - ld h, [hl] - ld l, a - ld de, wDefaultText - call CopyText - ret -; 0x19a1f - - INCROM $19a1f, $1a61f - -Func_1a61f: ; 1a61f (6:661f) - push af - ld de, $389f - call Func_2275 - pop af - or a - jr nz, .asm_1a640 - ld a, $40 - call $663b - ld a, $5f - call $663b - ld a, $76 - call $663b - ld a, $c1 - ldtx hl, ReceivedLegendaryCardText - jr .asm_1a660 -.asm_1a640 - ldtx hl, ReceivedCardText - cp $1e - jr z, .asm_1a660 - cp $43 - jr z, .asm_1a660 - ldtx hl, ReceivedPromotionalFlyingPikachuText - cp $64 - jr z, .asm_1a660 - ldtx hl, ReceivedPromotionalSurfingPikachuText - cp $65 - jr z, .asm_1a660 - cp $66 - jr z, .asm_1a660 - ldtx hl, ReceivedPromotionalCardText -.asm_1a660 - push hl - ld e, a - ld d, $0 - call LoadCardDataToBuffer1_FromCardID - call PauseSong - ld a, MUSIC_MEDAL - call PlaySong - ld hl, wLoadedCard1Name - ld a, [hli] - ld h, [hl] - ld l, a - bank1call LoadTxRam2 ; switch to bank 1, but call a home func - ld a, PLAYER_TURN - ldh [hWhoseTurn], a - pop hl - bank1call $5e5f -.asm_1a680 - call AssertSongFinished - or a - jr nz, .asm_1a680 - call ResumeSong - bank1call $5773 - ret -; 0x1a68d - - INCROM $1a68d, $1a6cc - -CommentedOut_1a6cc: ; 1a6cc (6:66cc) - ret -; 0x1a6cd - - INCROM $1a6cd, $1ad89 - -Func_1ad89: ; 1ad89 (6:6d89) - INCROM $1ad89, $1c000 diff --git a/src/engine/bank7.asm b/src/engine/bank7.asm deleted file mode 100644 index 725b51b..0000000 --- a/src/engine/bank7.asm +++ /dev/null @@ -1,566 +0,0 @@ - INCROM $1c000, $1c056 - -Func_1c056: ; 1c056 (7:4056) - push hl - push bc - push de - ld a, [wCurMap] - add a - ld c, a - ld b, $0 - ld hl, WarpDataPointers - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld bc, $0005 - ld a, [wPlayerXCoord] - ld d, a - ld a, [wPlayerYCoord] - ld e, a -.asm_1c072 - ld a, [hli] - or [hl] - jr z, .asm_1c095 - ld a, [hld] - cp e - jr nz, .asm_1c07e - ld a, [hl] - cp d - jr z, .asm_1c081 -.asm_1c07e - add hl, bc - jr .asm_1c072 -.asm_1c081 - inc hl - inc hl - ld a, [hli] - ld [wd0bb], a - ld a, [hli] - ld [wd0bc], a - ld a, [hli] - ld [wd0bd], a - ld a, [wd334] - ld [wd0be], a -.asm_1c095 - pop de - pop bc - pop hl - ret - -INCLUDE "data/warps.asm" - -Func_1c33b: ; 1c33b (7:433b) - push hl - push bc - push de - ld a, [wCurMap] - add a - ld c, a - add a - add c - ld c, a - ld b, $0 - ld hl, MapSongs - add hl, bc - ld a, [hli] - ld [wd131], a - ld a, [hli] - ld c, a - ld a, [hli] - ld [wd28f], a - ld a, [hli] - ld [wd132], a - ld a, [hli] - ld [wd290], a - ld a, [hli] - ld [wd111], a - ld a, [wConsole] - cp $2 - jr nz, .asm_1c370 - ld a, c - or a - jr z, .asm_1c370 - ld [wd131], a -.asm_1c370 - pop de - pop bc - pop hl - ret - -INCLUDE "data/map_songs.asm" - -Func_1c440: ; 1c440 (7:4440) - INCROM $1c440, $1c455 - -Func_1c455: ; 1c455 (7:4455) - push hl - ld a, [wd3aa] - ld l, $4 - call Func_39ad - ld a, [hl] - pop hl - ret - -Func_1c461: ; 1c461 (7:4461) - push hl - push bc - call Func_1c719 - ld a, [wd3aa] - ld l, $2 - call Func_39ad - ld a, b - ld [hli], a - ld [hl], c - call $46e3 - pop bc - pop hl - ret - -Func_1c477: ; 1c477 (7:4477) - push hl - ld a, [wd3aa] - ld l, $2 - call Func_39ad - ld a, [hli] - ld b, a - ld c, [hl] - pop hl - ret - -Func_1c485: ; 1c485 (7:4485) - INCROM $1c485, $1c50a - -Func_1c50a: ; 1c50a (7:450a) - push hl - call Func_1c719 - ld a, [wd3aa] - call Func_39a7 - ld a, [hl] - or a - jr z, .asm_1c52c - call $44fa - jr nc, .asm_1c521 - xor a - ld [wd3b8], a - -.asm_1c521 - xor a - ld [hli], a - ld a, [hl] - farcall $4, $69fd - ld hl, wd349 - dec [hl] - -.asm_1c52c - pop hl - ret - -Func_1c52e: ; 1c52e (7:452e) - push hl - push af - ld a, [wd3aa] - ld l, $7 - call Func_39ad - pop af - ld [hl], a - call Func_1c5e9 - pop hl - ret - -Func_1c53f: ; 1c53f (7:453f) - push hl - push bc - ld a, [wd3aa] - ld l, $4 - call Func_39ad - ld a, [hl] - ld bc, $0003 - add hl, bc - ld [hl], a - push af - call Func_1c5e9 - pop af - pop bc - pop hl - ret - -Func_1c557: ; 1c557 (7:4557) - push bc - ld c, a - ld a, [wd3aa] - push af - ld a, [wd3ab] - push af - ld a, c - ld [wd3ab], a - ld c, $0 - call Func_39c3 - jr c, .asm_1c570 - call Func_1c53f - ld c, a - -.asm_1c570 - pop af - ld [wd3ab], a - pop af - ld [wd3aa], a - ld a, c - pop bc - ret - -Func_1c57b: ; 1c57b (7:457b) - push hl - push bc - push af - ld a, [wd3aa] - ld l, $6 - call Func_39ad - pop af - ld [hl], a - call Func_1c58e - pop bc - pop hl - ret - -Func_1c58e: ; 1c58e (7:458e) - INCROM $1c58e, $1c5e9 - -Func_1c5e9: ; 1c5e9 (7:45e9) - INCROM $1c5e9, $1c610 - -Func_1c610: ; 1c610 (7:4610) - INCROM $1c610, $1c6f8 - -Func_1c6f8: ; 1c6f8 (7:46f8) - INCROM $1c6f8, $1c719 - -Func_1c719: ; 1c719 (7:4719) - push hl - push bc - ld a, [wd3aa] - ld l, $2 - call Func_39ad - ld a, [hli] - ld b, a - ld c, [hl] - ld a, $40 - call $3937 - pop bc - pop hl - ret - -Func_1c72e: ; 1c72e (7:472e) - INCROM $1c72e, $1c768 - -Func_1c768: ; 1c768 (7:4768) - push hl - ld a, [wd3aa] - ld l, $04 - call Func_39ad - ld a, [wd334] - xor $02 - ld [hl], a - call Func_1c58e - ld a, $02 - farcall Func_c29b - ld a, [wd3aa] - call Func_39a7 - ld a, [hl] - farcall Func_1187d - pop hl - ret - -Func_1c78d: ; 1c78d (7:478d) - push hl - ld a, [wd3aa] - ld l, $5 - call Func_39ad - set 5, [hl] - ld a, [wd3aa] - ld l, $8 - call Func_39ad - xor a - ld [hli], a -.asm_1c7a2 - ld [hl], c - inc hl - ld [hl], b - dec hl - call $39ea - cp $f0 - jr nc, .asm_1c7bb - push af - and $7f - call $45ff - pop af - bit 7, a - jr z, .asm_1c7dc - inc bc - jr .asm_1c7a2 - -.asm_1c7bb - cp $ff - jr z, .asm_1c7d2 - inc bc - call $39ea - push hl - ld l, a - ld h, $0 - bit 7, l - jr z, .asm_1c7cc - dec h - -.asm_1c7cc - add hl, bc - ld c, l - ld b, h - pop hl - jr .asm_1c7a2 - -.asm_1c7d2 - ld a, [wd3aa] - ld l, $5 - call Func_39ad - res 5, [hl] - -.asm_1c7dc - pop hl - ret - -Func_1c7de: ; 1c7de (7:47de) - ld a, [wc3b7] - and $20 - ret -; 0x1c7e4 - - INCROM $1c7e4, $1c82e - -Func_1c82e: ; 1c82e (7:482e) - INCROM $1c82e, $1c83d - -Func_1c83d: ; 1c83d (7:483d) - push hl - push bc - ld b, a - ld c, $a - ld hl, wd3bb -.asm_1c845 - ld a, [hl] - or a - jr z, .asm_1c853 - cp b - jr z, .asm_1c855 - inc hl - dec c - jr nz, .asm_1c845 - debug_ret - jr .asm_1c855 - -.asm_1c853 - ld a, b - ld [hl], a - -.asm_1c855 - pop bc - pop hl - ret -; 0x1c858 - - INCROM $1c858, $1d078 - -Func_1d078: ; 1d078 (7:5078) - ld a, [wd627] - or a - jr z, .asm_1d0c7 -.asm_1d07e - ld a, MUSIC_STOP - call PlaySong - call Func_3ca0 - call $5335 - call $53ce - xor a - ld [wd635], a - ld a, $3c - ld [wd626], a -.asm_1d095 - call DoFrameIfLCDEnabled - call UpdateRNGSources - call $5614 - ld hl, wd635 - inc [hl] - call AssertSongFinished - or a - jr nz, .asm_1d0ae - farcall Func_10ab4 - jr .asm_1d07e -.asm_1d0ae - ld hl, wd626 - ld a, [hl] - or a - jr z, .asm_1d0b8 - dec [hl] - jr .asm_1d095 -.asm_1d0b8 - ldh a, [hButtonsPressed] - and A_BUTTON | START - jr z, .asm_1d095 - ld a, $2 - call PlaySFX - farcall Func_10ab4 - -.asm_1d0c7 - call $50fa - call $511c - ld a, [wd628] - cp $2 - jr nz, .asm_1d0db - call $5289 - jr c, Func_1d078 - jr .asm_1d0e7 -.asm_1d0db - ld a, [wd628] - cp $1 - jr nz, .asm_1d0e7 - call $52b8 - jr c, Func_1d078 -.asm_1d0e7 - ld a, [wd628] - cp $0 - jr nz, .asm_1d0f3 - call $52dd - jr c, Func_1d078 -.asm_1d0f3 - call ResetDoFrameFunction - call Func_3ca0 - ret -; 0x1d0fa - - INCROM $1d0fa, $1d11c - -Func_1d11c: ; 1d11c (7:511c) - ld a, MUSIC_PC_MAIN_MENU - call PlaySong - call DisableLCD - farcall $4, $4000 - ld de, $308f - call Func_2275 - call Func_3ca0 - xor a - ld [wcd08], a - call $51e1 - call $517f - ld a, $ff - ld [wd626], a - ld a, [wd627] - cp $4 - jr c, .asm_1d14f - ld a, [wd624] - or a - jr z, .asm_1d14f - ld a, $1 -.asm_1d14f - ld hl, wd636 - farcall Func_111e9 - farcall $4, $4031 -.asm_1d15a - call DoFrameIfLCDEnabled - call UpdateRNGSources - call HandleMenuInput - push af - call $51e9 - pop af - jr nc, .asm_1d15a - ldh a, [hCurrentMenuItem] - cp e - jr nz, .asm_1d15a - ld [wd627], a - ld a, [wd624] - or a - jr nz, .asm_1d17a - inc e - inc e -.asm_1d17a - ld a, e - ld [wd628], a - ret -; 0x1d17f - - INCROM $1d17f, $1d306 - -Func_1d306: ; 1d306 (7:5306) - INCROM $1d306, $1d386 - -Titlescreen_1d386: ; 1d386 (7:5386) - call AssertSongFinished - or a - jr nz, .asm_1d39f - call DisableLCD - ld a, MUSIC_TITLESCREEN - call PlaySong - ld bc, $0000 - ld a, $0 - call Func_3df3 - call Func_1d59c -.asm_1d39f - call Func_3ca0 - call Func_1d3a9 - call EnableLCD - ret - -Func_1d3a9: ; 1d3a9 (7:53a9) - INCROM $1d3a9, $1d42e - -Func_1d42e: ; 1d42e (7:542e) - INCROM $1d42e, $1d519 - -Titlescreen_1d519: ; 1d519 (7:5519) - ld a, MUSIC_TITLESCREEN - call PlaySong - call Func_1d42e - scf - ret -; 0x1d523 - - INCROM $1d523, $1d59c - -Func_1d59c: ; 1d59c (7:559c) - INCROM $1d59c, $1d6ad - -Credits_1d6ad: ; 1d6ad (7:56ad) - ld a, MUSIC_STOP - call PlaySong - call $5705 - call $4858 - xor a - ld [wd324], a - ld a, MUSIC_CREDITS - call PlaySong - farcall $4, $4031 - call $57fc -.asm_1d6c8 - call DoFrameIfLCDEnabled - call $5765 - call $580b - ld a, [wd633] - cp $ff - jr nz, .asm_1d6c8 - call Func_3c96 - ld a, $8 - farcall $4, $6863 - ld a, MUSIC_STOP - call PlaySong - farcall Func_10ab4 - call Func_3ca4 - call Set_WD_off - call $5758 - call EnableLCD - call DoFrameIfLCDEnabled - call DisableLCD - ld hl, wLCDC - set 1, [hl] - call ResetDoFrameFunction - ret -; 0x1d705 - - INCROM $1d705, $1e1c4 diff --git a/src/engine/bank8.asm b/src/engine/bank8.asm deleted file mode 100644 index ca52ca5..0000000 --- a/src/engine/bank8.asm +++ /dev/null @@ -1,132 +0,0 @@ - INCROM $20000, $200e5 - -; 0 - e4 is a big set of data, seems to be one entry for each card - -Func_200e5: ; 200e5 (8:40e5) - ld [wce18], a - call CreateHandCardList - ld hl, wDuelTempList - ld de, wTempHandCardList - call CopyBuffer - ld hl, wTempHandCardList - ld a, [hli] - ld [wce16], a - cp $ff - ret z - push hl - ld a, [wce18] - ld d, a - ld hl, $4000 -.asm_4106 - xor a - ld [wce21], a - ld a, [hli] - cp $ff - jp z, $41b1 - cp d - jp nz, .incHL5 - ld a, [hli] - ld [wce17], a - ld a, [wce16] - call LoadCardDataToBuffer1_FromDeckIndex - cp $d2 - jr nz, .asm_2012b - ld b, a - ld a, [wce20] - and $2 - jr nz, .incHL4 - ld a, b - -.asm_2012b - ld b, a - ld a, [wce17] - cp b - jr nz, .incHL4 - push hl - push de - ld a, [wce16] - ldh [hTempCardIndex_ff9f], a - bank1call CheckCantUseTrainerDueToHeadache - jp c, $41a8 - call LoadNonPokemonCardEffectCommands - ld a, $1 - call TryExecuteEffectCommandFunction - jp c, $41a8 - farcall $5, $743b - jr c, .asm_201a8 - pop de - pop hl - push hl - call CallIndirect - pop hl - jr nc, .incHL4 - inc hl - inc hl - ld [wce19], a - push de - push hl - ld a, [wce16] - ldh [hTempCardIndex_ff9f], a - ld a, $6 - bank1call $67be - pop hl - pop de - jr c, .incHL2 - push hl - call CallIndirect - pop hl - inc hl - inc hl - ld a, [wce20] - ld b, a - ld a, [wce21] - or b - ld [wce20], a - pop hl - and $8 - jp z, $40f7 - call CreateHandCardList - ld hl, wDuelTempList - ld de, wTempHandCardList - call $697b - ld hl, wTempHandCardList - ld a, [wce20] - and $f7 - ld [wce20], a - jp $40f7 - -.incHL5 - inc hl - -.incHL4 - inc hl - inc hl - -.incHL2 - inc hl - inc hl - jp .asm_4106 - -.asm_201a8 - pop de - pop hl - inc hl - inc hl - inc hl - inc hl - jp .asm_4106 -; 0x201b1 - - INCROM $201b1, $2297b - -; copies $ff terminated buffer from hl to de -CopyBuffer: ; 2297b (8:697b) - ld a, [hli] - ld [de], a - cp $ff - ret z - inc de - jr CopyBuffer -; 0x22983 - - INCROM $22983, $24000 diff --git a/src/macros/constants.asm b/src/macros/constants.asm index 3fffd10..ceb0c7f 100644 --- a/src/macros/constants.asm +++ b/src/macros/constants.asm @@ -12,7 +12,7 @@ const_value = const_value + 1 ENDM deck_const: MACRO -if const_value > 1 +if const_value >= 2 \1_ID EQU const_value + -2 endc const \1 diff --git a/src/main.asm b/src/main.asm index 6e89c9d..8e60df6 100644 --- a/src/main.asm +++ b/src/main.asm @@ -3,37 +3,37 @@ INCLUDE "constants.asm" INCLUDE "engine/home.asm" -SECTION "bank1", ROMX -INCLUDE "engine/bank1.asm" +SECTION "Bank 1", ROMX +INCLUDE "engine/bank01.asm" -SECTION "bank2", ROMX -INCLUDE "engine/bank2.asm" +SECTION "Bank 2", ROMX +INCLUDE "engine/bank02.asm" -SECTION "bank3", ROMX -INCLUDE "engine/bank3.asm" +SECTION "Bank 3", ROMX +INCLUDE "engine/bank03.asm" -SECTION "bank4", ROMX -INCLUDE "engine/bank4.asm" +SECTION "Bank 4", ROMX +INCLUDE "engine/bank04.asm" -SECTION "bank5", ROMX -INCLUDE "engine/bank5.asm" +SECTION "Bank 5", ROMX +INCLUDE "engine/bank05.asm" -SECTION "bank6", ROMX -INCLUDE "engine/bank6.asm" +SECTION "Bank 6", ROMX +INCLUDE "engine/bank06.asm" -SECTION "bank7", ROMX -INCLUDE "engine/bank7.asm" +SECTION "Bank 7", ROMX +INCLUDE "engine/bank07.asm" SECTION "Booster Packs", ROMX INCLUDE "engine/booster_packs.asm" -SECTION "bank8", ROMX -INCLUDE "engine/bank8.asm" +SECTION "Bank 8", ROMX +INCLUDE "engine/bank08.asm" -SECTION "bank9", ROMX +SECTION "Bank 9", ROMX emptybank -SECTION "bankA", ROMX +SECTION "Bank A", ROMX emptybank SECTION "Effect Functions", ROMX @@ -45,8 +45,8 @@ INCLUDE "data/decks.asm" SECTION "Cards", ROMX INCLUDE "data/cards.asm" -SECTION "bank1C", ROMX +SECTION "Bank 1C", ROMX INCLUDE "engine/bank1c.asm" -SECTION "bank20", ROMX +SECTION "Bank 20", ROMX INCLUDE "engine/bank20.asm" -- cgit v1.2.3