summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/engine/bank1.asm225
-rw-r--r--src/engine/bank2.asm2
-rw-r--r--src/engine/home.asm70
-rw-r--r--src/text/text1.asm6
-rw-r--r--src/text/text2.asm2
-rw-r--r--src/text/text_offsets.asm8
-rw-r--r--src/wram.asm14
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