diff options
-rw-r--r-- | src/engine/bank1.asm | 225 | ||||
-rw-r--r-- | src/engine/bank2.asm | 2 | ||||
-rw-r--r-- | src/engine/home.asm | 70 | ||||
-rw-r--r-- | src/text/text1.asm | 6 | ||||
-rw-r--r-- | src/text/text2.asm | 2 | ||||
-rw-r--r-- | src/text/text_offsets.asm | 8 | ||||
-rw-r--r-- | src/wram.asm | 14 |
7 files changed, 285 insertions, 42 deletions
diff --git a/src/engine/bank1.asm b/src/engine/bank1.asm index d70d363..d9ce2b4 100644 --- a/src/engine/bank1.asm +++ b/src/engine/bank1.asm @@ -325,7 +325,7 @@ Func_4262: Func_4268: ld a, $06 - call $51e7 + call DoPracticeDuelAction ; fallthrough ; print the main interface during a duel, including background, Pokemon, HUDs and a text box. @@ -516,7 +516,7 @@ DuelMenu_PkmnPower: ; 438e (1:438e) ; triggered by selecting the "Done" item in the duel menu DuelMenu_Done: ; 439a (1:439a) ld a, $08 - call $51e7 + call DoPracticeDuelAction jp c, Func_4268 ld a, $05 call SetDuelAIAction @@ -751,6 +751,7 @@ UsePokemonCard: ; 44db (1:44db) 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 @@ -791,23 +792,49 @@ DuelMenu_Check: ; 4585 (1:4585) ; triggered by pressing SELECT in the duel menu DuelMenuShortcut_BothActivePokemon:: ; 458e (1:458e) - INCROM $458e, $46fc + 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, .clear_sub_menu_selection - + jr nc, .can_attack .alert_cant_attack_and_cancel_menu call DrawWideTextBox_WaitForInput jp PrintDuelMenu -.clear_sub_menu_selection +.can_attack xor a ld [wSelectedDuelSubMenuItem], a - .try_open_attack_menu call LoadPokemonMovesToDuelTempList or a @@ -836,7 +863,7 @@ DuelMenu_Attack: ; 46fc (1:46fc) jr nz, .display_selected_move_info call HandleMenuInput jr nc, .wait_for_input - cp $ff ; was B pressed? + cp -1 ; was B pressed? jp z, PrintDuelMenu ld [wSelectedDuelSubMenuItem], a call CheckIfEnoughEnergies @@ -859,7 +886,7 @@ DuelMenu_Attack: ; 46fc (1:46fc) call HandleAmnesiaSubstatus jr c, .cannot_use_due_to_amnesia ld a, $07 - call $51e7 + call DoPracticeDuelAction jp c, Func_4268 call Func_1730 jp c, DuelMainInterface @@ -1613,7 +1640,7 @@ Func_4cd5: ; 4cd5 (1:4cd5) ldtx hl, ChooseBasicPkmnToPlaceInArenaText call DrawWideTextBox_WaitForInput ld a, $1 - call $51e7 + call DoPracticeDuelAction .asm_4d28 xor a ld hl, $006e @@ -1622,7 +1649,7 @@ Func_4cd5: ; 4cd5 (1:4cd5) ldh a, [hTempCardIndex_ff98] call LoadCardDataToBuffer1_FromDeckIndex ld a, $2 - call $51e7 + call DoPracticeDuelAction jr c, .asm_4d28 ldh a, [hTempCardIndex_ff98] call PutHandPokemonCardInPlayArea @@ -1638,7 +1665,7 @@ Func_4cd5: ; 4cd5 (1:4cd5) ldtx hl, ChooseUpTo5BasicPkmnToPlaceOnBenchText call Func_2c73 ld a, $3 - call $51e7 + call DoPracticeDuelAction .asm_4d5f ld a, $1 ld hl, $006f @@ -1654,7 +1681,7 @@ Func_4cd5: ; 4cd5 (1:4cd5) ld hl, $0061 call $4b31 ld a, $5 - call $51e7 + call DoPracticeDuelAction jr .asm_4d5f .asm_4d86 @@ -1664,13 +1691,34 @@ Func_4cd5: ; 4cd5 (1:4cd5) .asm_4d8e ld a, $4 - call $51e7 + call DoPracticeDuelAction jr c, .asm_4d5f or a ret ; 0x4d97 - INCROM $4d97, $4f9d + 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 + ld hl, $5710 + ld de, $0 + call Func_2799 + 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. @@ -1746,7 +1794,144 @@ DrawDuelMainScene: ; 4f9d (1:4f9d) ret ; 0x503a - INCROM $503a, $5550 + INCROM $503a, $51e7 + +; 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) @@ -1823,9 +2008,9 @@ DrawCardListScreenLayout: ; 559a (1:559a) inc hl ld [hl], HIGH(PleaseSelectHandText_) inc hl ; wCardListHeaderText - ld [hl], LOW(DuelistsHandText_) + ld [hl], LOW(DuelistHandText_) inc hl - ld [hl], HIGH(DuelistsHandText_) + ld [hl], HIGH(DuelistHandText_) .draw call ZeroObjectPositionsAndToggleOAMCopy call EmptyScreen @@ -2875,9 +3060,9 @@ _TossCoin: ; 71ad (1:71ad) ld a, [wcd9f] inc a call $65b7 - ld b, $11 + ld b, 17 ld a, $2e - call Func_06c3 + call WriteToBGMap0AddressFromBCCoord inc b ld a, [wcd9c] call $65b7 diff --git a/src/engine/bank2.asm b/src/engine/bank2.asm index eb5747a..5ec3e16 100644 --- a/src/engine/bank2.asm +++ b/src/engine/bank2.asm @@ -500,7 +500,7 @@ asm_90da add $e ld c, a ld a, e - call Func_06c3 + call WriteToBGMap0AddressFromBCCoord or a ret diff --git a/src/engine/home.asm b/src/engine/home.asm index 0a3c9b0..fab80c3 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -998,7 +998,8 @@ Func_069d: ; 069d (0:069d) ret ; 0x6c3 -Func_06c3: ; 06c3 (0:06c3) +; writes a to [v*BGMapTiles1 + BG_MAP_WIDTH * c + b] +WriteToBGMap0AddressFromBCCoord: ; 06c3 (0:06c3) push af ld a, [wLCDC] rla @@ -4085,7 +4086,7 @@ Func_161e: ; 161e (0:161e) ld a, $07 call CheckMatchingCommand ret c ; return if command not found - bank1call $4f9d + bank1call DrawDuelMainScene ldh a, [hTempCardIndex_ff9f] call LoadCardDataToBuffer1_FromDeckIndex ld de, wLoadedCard1Name @@ -4315,7 +4316,7 @@ Func_1823: ; 1823 (0:1823) ret DealConfusionDamageToSelf: ; 1828 (0:1828) - bank1call $4f9d + bank1call DrawDuelMainScene ld a, $1 ld [wDamageToSelfMode], a ldtx hl, DamageToSelfDueToConfusionText @@ -4398,7 +4399,7 @@ Func_189d: ; 189d (0:189d) call SwapTurn pop de ret nc - bank1call $4f9d + bank1call DrawDuelMainScene ld a, DUELVARS_ARENA_CARD_SUBSTATUS2 call GetNonTurnDuelistVariable ld [hl], $0 @@ -4851,7 +4852,7 @@ Func_1af3: ; 1af3 (0:1af3) ; 0x1b8d Func_1b8d: ; 1b8d (0:1b8d) - bank1call $4f9d + bank1call DrawDuelMainScene ld a, DUELVARS_ARENA_CARD call GetTurnDuelistVariable call LoadCardDataToBuffer1_FromDeckIndex @@ -4872,7 +4873,7 @@ Func_1b8d: ; 1b8d (0:1b8d) Func_1bb4: ; 1bb4 (0:1bb4) call Func_3b31 - bank1call $4f9d + bank1call DrawDuelMainScene call $503a xor a ldh [hTempPlayAreaLocationOffset_ff9d], a @@ -6588,7 +6589,7 @@ DrawCursor: ld a, c ld c, e ld b, d - call Func_06c3 + call WriteToBGMap0AddressFromBCCoord or a ret @@ -6677,7 +6678,7 @@ HandleDuelMenuInput: ; 271a (0:271a) inc hl ld c, [hl] ld a, e - call Func_06c3 + call WriteToBGMap0AddressFromBCCoord ld a, [wCurMenuItem] ld e, a or a @@ -6712,9 +6713,9 @@ Func_2799: ; 2799 (0:2799) ld a, [wCursorYPosition] dec a ld c, a - ld b, $12 + ld b, 18 ld a, e - call Func_06c3 + call WriteToBGMap0AddressFromBCCoord ld e, $00 ld a, [wcd19] ld hl, wNumMenuItems @@ -6730,7 +6731,7 @@ Func_2799: ; 2799 (0:2799) dec a ld c, a ld a, e - call Func_06c3 + call WriteToBGMap0AddressFromBCCoord ld a, [wcd19] ld e, a ld d, $00 @@ -7243,7 +7244,52 @@ Func_2c29: ; 2c29 (0:2c29) ret ; 0x2c37 - INCROM $2c37, $2c73 +Func_2c37: ; 2c37 (0:2c37) + push hl + push de + push bc + ldh a, [hBankROM] + push af + call ReadTextOffset + ld c, $00 +.asm_2c42 + ld a, [hli] + or a + jr z, .asm_2c58 + cp $10 + jr nc, .asm_2c42 + cp $06 + jr c, .asm_2c55 + cp $0a + jr nz, .asm_2c42 + inc c + jr .asm_2c42 +.asm_2c55 + inc hl + jr .asm_2c42 +.asm_2c58 + pop af + call BankswitchHome + ld a, c + inc a + pop bc + pop de + pop hl + ret +; 0x2c62 + +Func_2c62: ; 2c62 (0:2c62) + call .asm_2c67 + jr Func_2c77 +.asm_2c67 + push hl + ld hl, wce4c + ld [hl], e + inc hl + ld [hl], d + pop hl + ld a, $01 + jr Func_2c84 Func_2c73: ; 2c73 (0:2c73) xor a diff --git a/src/text/text1.asm b/src/text/text1.asm index 9819511..c4641c4 100644 --- a/src/text/text1.asm +++ b/src/text/text1.asm @@ -779,15 +779,15 @@ Text00a6: ; 3737b (d:737b) text "Player's Discard Pile" done -DuelistsHandText: ; 37392 (d:7392) +DuelistHandText: ; 37392 (d:7392) text TX_RAM1, "'s Hand" done -DuelistsPlayAreaText: ; 3739c (d:739c) +DuelistPlayAreaText: ; 3739c (d:739c) text TX_RAM1, "'s Play Area" done -DuelistsDeckText: ; 373ab (d:73ab) +DuelistDeckText: ; 373ab (d:73ab) text TX_RAM1, "'s Deck" done diff --git a/src/text/text2.asm b/src/text/text2.asm index e9666c7..c27f3b4 100644 --- a/src/text/text2.asm +++ b/src/text/text2.asm @@ -902,7 +902,7 @@ Text01a2: ; 3a111 (e:6111) text "Now printing..." done -Text01a3: ; 3a122 (e:6122) +DrMasonText: ; 3a122 (e:6122) text "Dr. Mason" done diff --git a/src/text/text_offsets.asm b/src/text/text_offsets.asm index 025f424..7a77e79 100644 --- a/src/text/text_offsets.asm +++ b/src/text/text_offsets.asm @@ -168,9 +168,9 @@ TextOffsets:: ; 34000 (d:4000) textpointer NoCardsInHandText ; 0x00a4 textpointer TheDiscardPileHasNoCardsText ; 0x00a5 textpointer Text00a6 ; 0x00a6 - textpointer DuelistsHandText ; 0x00a7 - textpointer DuelistsPlayAreaText ; 0x00a8 - textpointer DuelistsDeckText ; 0x00a9 + textpointer DuelistHandText ; 0x00a7 + textpointer DuelistPlayAreaText ; 0x00a8 + textpointer DuelistDeckText ; 0x00a9 textpointer PleaseSelectHandText ; 0x00aa textpointer Text00ab ; 0x00ab textpointer Text00ac ; 0x00ac @@ -420,7 +420,7 @@ TextOffsets:: ; 34000 (d:4000) textpointer Text01a0 ; 0x01a0 textpointer Text01a1 ; 0x01a1 textpointer Text01a2 ; 0x01a2 - textpointer Text01a3 ; 0x01a3 + textpointer DrMasonText ; 0x01a3 textpointer Text01a4 ; 0x01a4 textpointer Text01a5 ; 0x01a5 textpointer Text01a6 ; 0x01a6 diff --git a/src/wram.asm b/src/wram.asm index 79c94c5..e3857c8 100644 --- a/src/wram.asm +++ b/src/wram.asm @@ -617,7 +617,19 @@ wcbed:: ; cbed wcbf9:: ; cbf9 ds $1 - ds $a + ds $4 + +; during a practice duel, identifies an entry of PracticeDuelActionTable +wPracticeDuelAction:: ; cbfe + ds $1 + +wcbff:: ; cbff + ds $1 + +wcc00:: ; cc00 + ds $1 + + ds $3 wcc04:: ; cc04 ds $1 |