summaryrefslogtreecommitdiff
path: root/src/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine')
-rw-r--r--[-rwxr-xr-x]src/engine/bank1.asm785
-rw-r--r--[-rwxr-xr-x]src/engine/bank1c.asm68
-rw-r--r--[-rwxr-xr-x]src/engine/bank2.asm294
-rw-r--r--[-rwxr-xr-x]src/engine/bank20.asm78
-rw-r--r--[-rwxr-xr-x]src/engine/bank3.asm338
-rw-r--r--[-rwxr-xr-x]src/engine/bank4.asm258
-rw-r--r--[-rwxr-xr-x]src/engine/bank5.asm94
-rw-r--r--[-rwxr-xr-x]src/engine/bank6.asm52
-rw-r--r--[-rwxr-xr-x]src/engine/bank7.asm26
-rw-r--r--[-rwxr-xr-x]src/engine/bank8.asm60
-rw-r--r--src/engine/booster_packs.asm355
-rw-r--r--src/engine/effect_functions.asm52
-rw-r--r--[-rwxr-xr-x]src/engine/home.asm3773
13 files changed, 4142 insertions, 2091 deletions
diff --git a/src/engine/bank1.asm b/src/engine/bank1.asm
index b5894d2..8852914 100755..100644
--- a/src/engine/bank1.asm
+++ b/src/engine/bank1.asm
@@ -1,15 +1,17 @@
-Func_4000: ; 4000 (1:4000)
+; 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 EnableExtRAM
- ld a, [$a006]
+ call EnableSRAM
+ ld a, [sa006]
ld [wTextSpeed], a
- ld a, [$a009]
+ ld a, [sa009]
ld [wccf2], a
- call DisableExtRAM
+ call DisableSRAM
ld a, $1
ld [wUppercaseFlag], a
ei
@@ -17,19 +19,19 @@ Func_4000: ; 4000 (1:4000)
ldh a, [hButtonsHeld]
cp A_BUTTON | B_BUTTON
jr z, .ask_erase_backup_ram
- farcall Func_126d1
- jr Func_4000
+ farcall _GameLoop
+ jr GameLoop
.ask_erase_backup_ram
call Func_405a
- call Func_04a2
+ call EmptyScreen
ldtx hl, ResetBackUpRamText
call YesOrNoMenuWithText
jr c, .reset_game
; erase sram
- call EnableExtRAM
+ call EnableSRAM
xor a
- ld [$a000], a
- call DisableExtRAM
+ ld [sa000], a
+ call DisableSRAM
.reset_game
jp Reset
@@ -40,29 +42,68 @@ Func_4050: ; 4050 (1:4050)
ret
Func_405a: ; 405a (1:405a)
- INCROM $405a, $406f
+ xor a
+ ld [wTileMapFill], a
+ call DisableLCD
+ call Func_2119
+ call Func_5aeb
+ 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 [wcbe5], a
+ ld a, h
+ ld [wcbe5 + 1], a
+ call ClearJoypad
+ ld a, [wDuelTheme]
+ call PlaySong
+ xor a
+ ld [wDuelFinished], a
+ call DuelMainScene
+ jp StartDuel.asm_40fb
+; 0x4097
-Func_406f: ; 406f (1:406f)
- INCROM $406f, $409f
+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, $0
+ ld a, DUELIST_TYPE_PLAYER
ld [wPlayerDuelistType], a
ld a, [wcc19]
- ld [wOpponentDeckId], a
+ ld [wOpponentDeckID], a
call LoadPlayerDeck
call SwapTurn
call LoadOpponentDeck
call SwapTurn
jr .asm_40ca
- ld a, MUSIC_DUELTHEME1
+ ld a, MUSIC_DUEL_THEME_1
ld [wDuelTheme], a
- ld hl, $cc16
+ ld hl, wOpponentName
xor a
ld [hli], a
ld [hl], a
@@ -73,10 +114,10 @@ StartDuel: ; 409f (1:409f)
ld a, l
ld [wcbe5], a
ld a, h
- ld [wcbe6], a
+ ld [wcbe5 + 1], a
xor a
ld [wCurrentDuelMenuItem], a
- call $420b
+ call Func_420b
ld a, [wcc18]
ld [wcc08], a
call $70aa
@@ -86,52 +127,54 @@ StartDuel: ; 409f (1:409f)
ret c
; the loop returns here after every turn switch
-.mainDuelLoop ; 40ee (1:40ee)
+.main_duel_loop ; 40ee (1:40ee)
xor a
ld [wCurrentDuelMenuItem], a
- call HandleSwordsDanceOrFocusEnergySubstatus
+ call UpdateSubstatusConditions_StartOfTurn
call $54c8
call HandleTurn
+
+.asm_40fb
call Func_0f58
ld a, [wDuelFinished]
or a
- jr nz, .duelFinished
- call UpdateSubstatusConditions
+ jr nz, .duel_finished
+ call UpdateSubstatusConditions_EndOfTurn
call $6baf
call Func_3b31
call Func_0f58
ld a, [wDuelFinished]
or a
- jr nz, .duelFinished
- ld hl, $cc06
+ jr nz, .duel_finished
+ ld hl, wDuelTurns
inc [hl]
ld a, [wcc09]
cp $80
jr z, .asm_4126
-.nextTurn
+.next_turn
call SwapTurn
- jr .mainDuelLoop
+ jr .main_duel_loop
.asm_4126
ld a, [wIsPracticeDuel]
or a
- jr z, .nextTurn
+ jr z, .next_turn
ld a, [hl]
cp $f
- jr c, .nextTurn
+ jr c, .next_turn
xor a
ld [wd0c3], a
ret
-.duelFinished
+.duel_finished
call $5990
- call Func_04a2
- ld a, $3
- call Func_2167
+ call EmptyScreen
+ ld a, BOXMSG_DECISION
+ call DrawDuelBoxMessage
ldtx hl, DecisionText
call DrawWideTextBox_WaitForInput
- call Func_04a2
+ call EmptyScreen
ldh a, [hWhoseTurn]
push af
ld a, PLAYER_TURN
@@ -143,38 +186,38 @@ StartDuel: ; 409f (1:409f)
call Func_3b21
ld a, [wDuelFinished]
cp DUEL_WON
- jr z, .activeDuelistWonBattle
+ jr z, .active_duelist_won_battle
cp DUEL_LOST
- jr z, .activeDuelistLostBattle
+ jr z, .active_duelist_lost_batte
ld a, $5f
- ld c, MUSIC_DARKDIDDLY
+ ld c, MUSIC_DARK_DIDDLY
ldtx hl, DuelWasDrawText
- jr .handleDuelFinished
+ jr .handle_duel_finished
-.activeDuelistWonBattle
+.active_duelist_won_battle
ldh a, [hWhoseTurn]
cp PLAYER_TURN
- jr nz, .opponentWonBattle
-.playerWonBattle
+ jr nz, .opponent_won_battle
+.player_won_battle
xor a
ld [wd0c3], a
ld a, $5d
- ld c, MUSIC_MATCHVICTORY
+ ld c, MUSIC_MATCH_VICTORY
ldtx hl, WonDuelText
- jr .handleDuelFinished
+ jr .handle_duel_finished
-.activeDuelistLostBattle
+.active_duelist_lost_batte
ldh a, [hWhoseTurn]
cp PLAYER_TURN
- jr nz, .playerWonBattle
-.opponentWonBattle
+ jr nz, .player_won_battle
+.opponent_won_battle
ld a, $1
ld [wd0c3], a
ld a, $5e
- ld c, MUSIC_MATCHLOSS
+ ld c, MUSIC_MATCH_LOSS
ldtx hl, LostDuelText
-.handleDuelFinished
+.handle_duel_finished
call Func_3b6a
ld a, c
call PlaySong
@@ -189,7 +232,7 @@ StartDuel: ; 409f (1:409f)
jr nz, .asm_41a7
ld a, [wDuelFinished]
cp DUEL_DRAW
- jr z, .tiedBattle
+ jr z, .tied_battle
call Func_39fc
call WaitForWideTextBoxInput
call Func_3b31
@@ -198,7 +241,7 @@ StartDuel: ; 409f (1:409f)
ldh [hWhoseTurn], a
ret
-.tiedBattle
+.tied_battle
call WaitForWideTextBoxInput
call Func_3b31
ld a, [wDuelTheme]
@@ -214,7 +257,7 @@ StartDuel: ; 409f (1:409f)
ld a, PLAYER_TURN
ldh [hWhoseTurn], a
call Func_4b60
- jp $40ee
+ jp .main_duel_loop
.asm_41f3
call Func_0f58
@@ -228,41 +271,52 @@ StartDuel: ; 409f (1:409f)
ld a, h
ldh [hWhoseTurn], a
call Func_4b60
- jp nc, $40ee
+ jp nc, .main_duel_loop
ret
; 0x420b
- INCROM $420b, $4225
+Func_420b: ; 420b (1:420b)
+ xor a
+ ld [wTileMapFill], a
+ call $5990
+ call EmptyScreen
+ call Func_2119
+ call Func_5aeb
+ ld de, $389f
+ call Func_2275
+ call EnableLCD
+ ret
+; 0x4225
HandleTurn: ; 4225 (1:4225)
ld a, DUELVARS_DUELIST_TYPE
call GetTurnDuelistVariable
- ld [wcc0d], a
- ld a, [wcc06]
- cp a, $02
- jr c, .asm_4237
+ ld [wDuelistType], a
+ ld a, [wDuelTurns]
+ cp 2
+ jr c, .asm_4237 ; jump if it's the turn holder's first turn
call $70f6
.asm_4237
call $70e6
call $4933
call DrawCardFromDeck
- jr nc, .deckNotEmpty
+ jr nc, .deck_not_empty
ld a, DUEL_LOST
ld [wDuelFinished], a
ret
-.deckNotEmpty
- ldh [hTempCardNumber], a
+.deck_not_empty
+ ldh [hTempCardIndex_ff98], a
call AddCardToHand
- ld a, [wcc0d]
+ ld a, [wDuelistType]
cp DUELIST_TYPE_PLAYER
jr z, Func_4262
call SwapTurn
- call Func_34e2
+ call IsClairvoyanceActive
call SwapTurn
call c, $4b2c
- jr Func_426d
+ jr DuelMainScene
Func_4262:
call $4b2c
@@ -272,12 +326,12 @@ Func_4268:
ld a, $06
call $51e7
-Func_426d:
+DuelMainScene:
call $4f9d
- ld a, [wcc0d]
- cp a, DUELIST_TYPE_PLAYER
+ ld a, [wDuelistType]
+ cp DUELIST_TYPE_PLAYER
jr z, PrintDuelMenu
- cp a, DUELIST_TYPE_LINK_OPP
+ cp DUELIST_TYPE_LINK_OPP
jp z, $6911
; DUELIST_TYPE_AI_OPP
xor a
@@ -295,6 +349,7 @@ PrintDuelMenu:
call DrawWideTextBox
ld hl, $54e9
call Func_2c08
+.asm_429e
call $669d
ld a, [wDuelFinished]
or a
@@ -302,37 +357,37 @@ PrintDuelMenu:
ld a, [wCurrentDuelMenuItem]
call SetMenuItem
-Func_42ac:
+HandleDuelMenuInput:
call DoFrame
ldh a, [hButtonsHeld]
- and a, $02
- jr z, .asm_42cc
+ and B_BUTTON
+ jr z, .b_not_held
ldh a, [hButtonsPressed]
bit D_UP_F, a
- jr nz, Func_430b
+ jr nz, OpponentPlayAreaScreen
bit D_DOWN_F, a
- jr nz, Func_4311
+ jr nz, PlayerPlayAreaScreen
bit D_LEFT_F, a
- jr nz, Func_4320
+ jr nz, PlayerDiscardPileScreen
bit D_RIGHT_F, a
- jr nz, Func_4317
+ jr nz, OpponentDiscardPileScreen
bit START_F, a
- jp nz, $4364
+ jp nz, OpponentActivePokemonScreen
-.asm_42cc
+.b_not_held
ldh a, [hButtonsPressed]
- and a, START
- jp nz, $4370
+ and START
+ jp nz, PlayerActivePokemonScreen
ldh a, [hButtonsPressed]
bit SELECT_F, a
jp nz, $458e
ld a, [wcbe7]
or a
- jr nz, Func_42ac
+ jr nz, HandleDuelMenuInput
call Func_271a
ld a, e
ld [wCurrentDuelMenuItem], a
- jr nc, Func_42ac
+ jr nc, HandleDuelMenuInput
ldh a, [hCurrentMenuItem]
ld hl, DuelMenuFunctionTable
jp JumpToFunctionInTable
@@ -345,67 +400,116 @@ DuelMenuFunctionTable: ; 42f1 (1:42f1)
dw DuelMenu_Retreat
dw DuelMenu_Done
- INCROM $42fd, $430b
-
-Func_430b: ; 430b (1:430b)
- call Func_4329
- jp Func_426d
-
-Func_4311: ; 4311 (1:4311)
- call Func_4333
- jp Func_426d
-
-Func_4317: ; 4317 (1:4317)
- call Func_4339
+Func_42fd: ; 42fd (1:42fd)
+ call DrawCardFromDeck
+ call nc, AddCardToHand
+ ld a, $0b
+ call SetDuelAIAction
+ jp PrintDuelMenu.asm_429e
+; 0x430b
+
+OpponentPlayAreaScreen: ; 430b (1:430b)
+ call DrawOpponentPlayAreaScreen
+ jp DuelMainScene
+
+PlayerPlayAreaScreen: ; 4311 (1:4311)
+ call DrawPlayerPlayAreaScreen
+ jp DuelMainScene
+
+OpponentDiscardPileScreen: ; 4317 (1:4317)
+ call DrawOpponentDiscardPileScreen
jp c, PrintDuelMenu
- jp Func_426d
+ jp DuelMainScene
-Func_4320: ; 4320 (1:4320)
- call Func_4342
+PlayerDiscardPileScreen: ; 4320 (1:4320)
+ call DrawPlayerDiscardPileScreen
jp c, PrintDuelMenu
- jp Func_426d
+ jp DuelMainScene
-Func_4329: ; 4329 (1:4329)
+DrawOpponentPlayAreaScreen: ; 4329 (1:4329)
call SwapTurn
- call Func_4333
+ call DrawPlayerPlayAreaScreen
call SwapTurn
ret
-Func_4333: ; 4333 (1:4333)
+DrawPlayerPlayAreaScreen: ; 4333 (1:4333)
call $5fdd
jp $6008
-Func_4339: ; 4339 (1:4339)
+DrawOpponentDiscardPileScreen: ; 4339 (1:4339)
call SwapTurn
call $5550
jp SwapTurn
-Func_4342: ; 4342 (1:4342)
+DrawPlayerDiscardPileScreen: ; 4342 (1:4342)
jp $5550
- INCROM $4345, $438e
+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 $559a
+ ld a, $09
+ ld [wcbd6], a
+ jp $55f0
+.no_cards_in_hand
+ ldtx hl, NoCardsInHandText
+ jp DrawWideTextBox_WaitForInput
+; 0x4364
+
+OpponentActivePokemonScreen: ; 4364 (1:4364)
+ call SwapTurn
+ call Func_4376
+ call SwapTurn
+ jp DuelMainScene
+; 0x4370
+
+PlayerActivePokemonScreen: ; 4370 (1:4370)
+ call Func_4376
+ jp DuelMainScene
+; 0x4376
+
+Func_4376: ; 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 $576a
+ ret
+; 0x438e
DuelMenu_PkmnPower: ; 438e (1:438e)
call $6431
- jp c, Func_426d
+ jp c, DuelMainScene
call Func_1730
- jp Func_426d
+ jp DuelMainScene
DuelMenu_Done: ; 439a (1:439a)
ld a, $08
call $51e7
jp c, Func_4268
ld a, $05
- call Func_0f7f
+ call SetDuelAIAction
call $717a
ret
DuelMenu_Retreat: ; 43ab (1:43ab)
ld a, DUELVARS_ARENA_CARD_STATUS
call GetTurnDuelistVariable
- and a,PASSIVE_STATUS_MASK
- cp a, $01
- ldh [$ffa0], a
+ and CNF_SLP_PRZ
+ cp CONFUSED
+ ldh [hffa0], a
jr nz, Func_43f1
ld a, [wcc0c]
or a
@@ -414,15 +518,15 @@ DuelMenu_Retreat: ; 43ab (1:43ab)
jr c, Func_441f
call $4611
jr c, Func_441c
- ldtx hl, SelectMonOnBenchToSwitchWithActiveText
+ ldtx hl, SelectPkmnOnBenchToSwitchWithActiveText
call DrawWideTextBox_WaitForInput
call $600c
jr c, Func_441c
ld [wBenchSelectedPokemon], a
ld a, [wBenchSelectedPokemon]
- ldh [$ffa1], a
+ ldh [hTempPlayAreaLocationOffset_ffa1], a
ld a, $04
- call Func_0f7f
+ call SetDuelAIAction
call $657a
jr nc, Func_441c
call $4f9d
@@ -438,21 +542,21 @@ Func_43f1: ; 43f1 (1:43f1)
call $4611
jr c, Func_441c
call $6558
- ldtx hl, SelectMonOnBenchToSwitchWithActiveText
+ ldtx hl, SelectPkmnOnBenchToSwitchWithActiveText
call DrawWideTextBox_WaitForInput
call $600c
ld [wBenchSelectedPokemon], a
- ldh [$ffa1], a
+ ldh [hTempPlayAreaLocationOffset_ffa1], a
push af
call $6564
pop af
- jp c, Func_426d
+ jp c, DuelMainScene
ld a, $04
- call Func_0f7f
+ call SetDuelAIAction
call $657a
Func_441c: ; 441c (1:441c)
- jp Func_426d
+ jp DuelMainScene
Func_441f: ; 441f (1:441f)
call DrawWideTextBox_WaitForInput
@@ -473,51 +577,51 @@ Func_4436: ; 4436 (1:4436)
; c contains the type of energy card being played
PlayerUseEnergyCard: ; 4477 (1:4477)
ld a, c
- cp TYPE_ENERGY_WATER ; XXX why treat water energy card differently?
- jr nz, .notWaterEnergy
- call $3615
- jr c, .waterEnergy
+ cp TYPE_ENERGY_WATER
+ jr nz, .not_water_energy
+ call IsRainDanceActive
+ jr c, .rain_dance_active
-.notWaterEnergy
+.not_water_energy
ld a, [wAlreadyPlayedEnergy]
or a
- jr nz, .alreadyPlayedEnergy
+ jr nz, .already_played_energy
call $5fdd
call $600c ; choose card to play energy card on
- jp c, Func_426d ; exit if no card was chosen
-.asm_4490
+ jp c, DuelMainScene ; exit if no card was chosen
+.play_energy_set_played
ld a, $1
ld [wAlreadyPlayedEnergy], a
-.asm_4495
- ld a, [$ff9d]
- ld [$ffa1], a
+.play_energy
+ ldh a, [hTempPlayAreaLocationOffset_ff9d]
+ ldh [hTempPlayAreaLocationOffset_ffa1], a
ld e, a
- ld a, [$ff98]
- ld [$ffa0], a
- call $14d2
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hffa0], a
+ call PutHandCardInPlayArea
call $61b8
ld a, $3
- call Func_0f7f
+ call SetDuelAIAction
call $68e4
- jp Func_426d
+ jp DuelMainScene
-.waterEnergy
+.rain_dance_active
call $5fdd
call $600c ; choose card to play energy card on
- jp c, Func_426d ; exit if no card was chosen
- call $3622
- jr c, .asm_4495
+ jp c, DuelMainScene ; exit if no card was chosen
+ call CheckRainDanceScenario
+ jr c, .play_energy
ld a, [wAlreadyPlayedEnergy]
or a
- jr z, .asm_4490
+ jr z, .play_energy_set_played
ldtx hl, OnlyOneEnergyCardText
call DrawWideTextBox_WaitForInput
jp Func_4436
-.alreadyPlayedEnergy
+.already_played_energy
ldtx hl, OnlyOneEnergyCardText
call DrawWideTextBox_WaitForInput
- call CreateHandCardBuffer
+ call CreateHandCardList
call $55be
jp $4447
; 0x44db
@@ -527,33 +631,33 @@ PlayerUseEnergyCard: ; 4477 (1:4477)
DuelMenu_Check: ; 4585 (1:4585)
call Func_3b31
call Func_3096
- jp Func_426d
+ jp DuelMainScene
INCROM $458e, $46fc
DuelMenu_Attack: ; 46fc (1:46fc)
call HandleCantAttackSubstatus
- jr c, .alertCantAttackAndCancelMenu
+ jr c, .alert_cant_attack_and_cancel_menu
call CheckIfActiveCardParalyzedOrAsleep
- jr nc, .clearSubMenuSelection
+ jr nc, .clear_sub_menu_selection
-.alertCantAttackAndCancelMenu
+.alert_cant_attack_and_cancel_menu
call DrawWideTextBox_WaitForInput
jp PrintDuelMenu
-.clearSubMenuSelection
+.clear_sub_menu_selection
xor a
ld [wSelectedDuelSubMenuItem], a
-.tryOpenAttackMenu
- call LoadPokemonMovesToDuelCardOrAttackList
+.try_open_attack_menu
+ call LoadPokemonMovesToDuelTempList
or a
- jr nz, .openAttackMenu
+ jr nz, .open_attack_menu
ldtx hl, NoSelectableAttackText
call DrawWideTextBox_WaitForInput
jp PrintDuelMenu
-.openAttackMenu
+.open_attack_menu
push af
ld a, [wSelectedDuelSubMenuItem]
ld hl, AttackMenuCursorData
@@ -564,59 +668,59 @@ DuelMenu_Attack: ; 46fc (1:46fc)
ld h, a
ld l, DUELVARS_ARENA_CARD
ld a, [hl]
- call LoadDeckCardToBuffer1
+ call LoadCardDataToBuffer1_FromDeckIndex
-.waitForInput
+.wait_for_input
call DoFrame
ldh a, [hButtonsPressed]
and START
- jr nz, .displaySelectedMoveInfo
+ jr nz, .display_selected_move_info
call HandleMenuInput
- jr nc, .waitForInput
+ jr nc, .wait_for_input
cp $ff ; was B pressed?
jp z, PrintDuelMenu
ld [wSelectedDuelSubMenuItem], a
call CheckIfEnoughEnergies
- jr nc, .enoughEnergy
+ jr nc, .enough_energy
ldtx hl, NotEnoughEnergyCardsText
call DrawWideTextBox_WaitForInput
- jr .tryOpenAttackMenu
+ jr .try_open_attack_menu
-.enoughEnergy
+.enough_energy
ldh a, [hCurrentMenuItem]
add a
ld e, a
ld d, $00
- ld hl, wDuelCardOrAttackList
+ ld hl, wDuelTempList
add hl, de
ld d, [hl] ; card number within the deck (0 to 59)
inc hl
ld e, [hl] ; attack index (0 or 1)
- call CopyMoveDataAndDamageToBuffer
+ call CopyMoveDataAndDamage_FromDeckIndex
call HandleAmnesiaSubstatus
- jr c, .cannotUseDueToAmnesia
+ jr c, .cannot_use_due_to_amnesia
ld a, $07
call $51e7
jp c, Func_4268
call Func_1730
- jp c, Func_426d
+ jp c, DuelMainScene
ret
-.cannotUseDueToAmnesia ; 477d (1:477d)
+.cannot_use_due_to_amnesia ; 477d (1:477d)
call DrawWideTextBox_WaitForInput
- jr .tryOpenAttackMenu
+ jr .try_open_attack_menu
-.displaySelectedMoveInfo ; 4782 (1:4782)
+.display_selected_move_info ; 4782 (1:4782)
call Func_478b
call $4f9d
- jp .tryOpenAttackMenu
+ jp .try_open_attack_menu
Func_478b: ; 478b (1:478b)
ld a, $01
ld [wCardPageNumber], a
xor a
ld [wcbc9], a
- call Func_04a2
+ call EmptyScreen
call Func_3b31
ld de, $8a00
call $59ca
@@ -632,7 +736,7 @@ Func_478b: ; 478b (1:478b)
add a
ld e, a
ld d, $00
- ld hl, $c511
+ ld hl, wDuelTempList + 1
add hl, de
ld a, [hl]
or a
@@ -653,10 +757,10 @@ Func_478b: ; 478b (1:478b)
.asm_47d4
call DoFrame
ldh a, [hButtonsPressed2]
- and a, D_RIGHT | D_LEFT
+ and D_RIGHT | D_LEFT
jr nz, .asm_47ce
ldh a, [hButtonsPressed]
- and a, A_BUTTON | B_BUTTON
+ and A_BUTTON | B_BUTTON
jr z, .asm_47d4
ret
@@ -684,7 +788,7 @@ Func_47fd: ; $47fd (1:47fd)
jr Func_481b
Func_4802: ; $4802 (1:4802)
- ld hl, $cc38
+ ld hl, wLoadedCard1Move1Description + 2
ld a, [hli]
or [hl]
ret z
@@ -696,37 +800,37 @@ Func_480d: ; $480d (1:480d)
jr Func_481b
Func_4812: ; $4812 (1:4812)
- ld hl, $cc4b
+ ld hl, wLoadedCard1Move2Description + 2
ld a, [hli]
or [hl]
ret z
call $5d37
Func_481b: ; $481b (1:481b)
- ld hl, $cc04
+ ld hl, wcc04
ld a, $01
xor [hl]
ld [hl], a
ret
-; copies the following to the c510 buffer:
+; copies the following to the wDuelTempList buffer:
; if pokemon's second moveslot is empty: <card_no>, 0
; else: <card_no>, 0, <card_no>, 1
-LoadPokemonMovesToDuelCardOrAttackList: ; 4823 (1:4823)
+LoadPokemonMovesToDuelTempList: ; 4823 (1:4823)
call DrawWideTextBox
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
- ldh [hTempCardNumber], a
- call LoadDeckCardToBuffer1
+ ldh [hTempCardIndex_ff98], a
+ call LoadCardDataToBuffer1_FromDeckIndex
ld c, $00
ld b, $0d
- ld hl, wDuelCardOrAttackList
+ ld hl, wDuelTempList
xor a
ld [wCardPageNumber], a
ld de, wLoadedCard1Move1Name
call CheckIfMoveExists
- jr c, .checkForSecondAttackSlot
- ldh a, [hTempCardNumber]
+ jr c, .check_for_second_attack_slot
+ ldh a, [hTempCardIndex_ff98]
ld [hli], a
xor a
ld [hli], a
@@ -741,11 +845,11 @@ LoadPokemonMovesToDuelCardOrAttackList: ; 4823 (1:4823)
inc b
inc b
-.checkForSecondAttackSlot
+.check_for_second_attack_slot
ld de, wLoadedCard1Move2Name
call CheckIfMoveExists
- jr c, .finishLoadingAttacks
- ldh a, [hTempCardNumber]
+ jr c, .finish_loading_attacks
+ ldh a, [hTempCardIndex_ff98]
ld [hli], a
ld a, $01
ld [hli], a
@@ -758,7 +862,7 @@ LoadPokemonMovesToDuelCardOrAttackList: ; 4823 (1:4823)
pop bc
pop hl
-.finishLoadingAttacks
+.finish_loading_attacks
ld a, c
ret
@@ -771,13 +875,13 @@ CheckIfMoveExists: ; 4872 (1:4872)
inc de
ld a, [de]
or c
- jr z, .returnNoMoveFound
- ld hl, wLoadedCard1Move1Category - (wLoadedCard1Move1Name + 1)
+ 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
+ and $ff ^ RESIDUAL
cp POKEMON_POWER
- jr z, .returnNoMoveFound
+ jr z, .return_no_move_found
or a
.return
@@ -786,7 +890,7 @@ CheckIfMoveExists: ; 4872 (1:4872)
pop hl
ret
-.returnNoMoveFound
+.return_no_move_found
scf
jr .return
@@ -797,13 +901,13 @@ CheckIfEnoughEnergies: ; 488f (1:488f)
push hl
push bc
ld e, $0
- call GetAttachedEnergies
+ call GetPlayAreaCardAttachedEnergies
call HandleEnergyBurn
ldh a, [hCurrentMenuItem]
add a
ld e, a
ld d, $0
- ld hl, wDuelCardOrAttackList
+ ld hl, wDuelTempList
add hl, de
ld d, [hl] ; card number within the deck (0 to 59)
inc hl
@@ -823,41 +927,42 @@ CheckIfEnoughEnergies: ; 488f (1:488f)
_CheckIfEnoughEnergies: ; 48ac (1:48ac)
push de
ld a, d
- call LoadDeckCardToBuffer1
+ call LoadCardDataToBuffer1_FromDeckIndex
pop bc
push bc
ld de, wLoadedCard1Move1Energy
ld a, c
or a
- jr z, .gotMove
+ jr z, .got_move
ld de, wLoadedCard1Move2Energy
-.gotMove
- ld hl, wLoadedCard1Move1Name - wLoadedCard1Move1Energy
+.got_move
+ ld hl, CARD_DATA_MOVE1_NAME - CARD_DATA_MOVE1_ENERGY
add hl, de
ld a, [hli]
or [hl]
- jr z, .notUsable
- ld hl, wLoadedCard1Move1Category - wLoadedCard1Move1Energy
+ jr z, .not_usable
+ ld hl, CARD_DATA_MOVE1_CATEGORY - CARD_DATA_MOVE1_ENERGY
add hl, de
ld a, [hl]
cp POKEMON_POWER
- jr z, .notUsable
+ jr z, .not_usable
xor a
ld [wAttachedEnergiesAccum], a
ld hl, wAttachedEnergies
- ld c, (COLORLESS - FIRE) / 2
-.nextEnergyTypePair
+ ld c, (NUM_COLORED_TYPES) / 2
+
+.next_energy_type_pair
ld a, [de]
swap a
call _CheckIfEnoughEnergiesOfType
- jr c, .notEnoughEnergies
+ jr c, .not_enough_energies
ld a, [de]
call _CheckIfEnoughEnergiesOfType
- jr c, .notEnoughEnergies
+ jr c, .not_enough_energies
inc de
dec c
- jr nz, .nextEnergyTypePair
+ jr nz, .next_energy_type_pair
ld a, [de] ; colorless energy
swap a
and $f
@@ -867,16 +972,16 @@ _CheckIfEnoughEnergies: ; 48ac (1:48ac)
ld a, [wTotalAttachedEnergies]
sub c
cp b
- jr c, .notEnoughEnergies
+ jr c, .not_enough_energies
or a
-.asm_48fb
+.done
pop de
ret
-.notUsable
-.notEnoughEnergies
+.not_usable
+.not_enough_energies
scf
- jr .asm_48fb
+ jr .done
; 0x4900
; given the amount of energies of a specific type required for an attack in the
@@ -891,16 +996,16 @@ _CheckIfEnoughEnergiesOfType: ; 4900 (1:4900)
ld [hl], a ; accumulate the amount of energies required
pop hl
pop af
- jr z, .enoughEnergies ; jump if no energies of this type are required
+ 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, .enoughEnergies
- jr c, .enoughEnergies
+ jr z, .enough_energies
+ jr c, .enough_energies
inc hl
scf
ret
-.enoughEnergies
+.enough_energies
inc hl
or a
ret
@@ -909,7 +1014,7 @@ _CheckIfEnoughEnergiesOfType: ; 4900 (1:4900)
CheckIfActiveCardParalyzedOrAsleep: ; 4918 (1:4918)
ld a, DUELVARS_ARENA_CARD_STATUS
call GetTurnDuelistVariable
- and PASSIVE_STATUS_MASK
+ and CNF_SLP_PRZ
cp PARALYZED
jr z, .paralyzed
cp ASLEEP
@@ -919,12 +1024,12 @@ CheckIfActiveCardParalyzedOrAsleep: ; 4918 (1:4918)
.paralyzed
ldtx hl, UnableDueToParalysisText
- jr .returnWithStatusCondition
+ jr .return_with_status_condition
.asleep
ldtx hl, UnableDueToSleepText
-.returnWithStatusCondition:
+.return_with_status_condition
scf
ret
@@ -937,12 +1042,12 @@ Func_4b60: ; 4b60 (1:4b60)
call SwapTurn
call $4e84
call $4d97
- ld [$ffa0], a
+ ldh [hffa0], a
call SwapTurn
call $4d97
call SwapTurn
ld c, a
- ld a, [$ffa0]
+ ldh a, [hffa0]
ld b, a
and c
jr nz, .asm_4bd0
@@ -972,7 +1077,7 @@ Func_4b60: ; 4b60 (1:4b60)
jr .asm_4bd0
.asm_4bb2
- ld hl, $006b
+ ldtx hl, NeitherPlayerHasBasicPkmnText
call DrawWideTextBox_WaitForInput
call $4e06
call $7107
@@ -984,52 +1089,52 @@ Func_4b60: ; 4b60 (1:4b60)
jp Func_4b60
.asm_4bd0
- ld a, [$ff97]
+ ldh a, [hWhoseTurn]
push af
- ld a, $c2
- ld [$ff97], a
+ ld a, PLAYER_TURN
+ ldh [hWhoseTurn], a
call Func_4cd5
call SwapTurn
call Func_4cd5
call SwapTurn
jp c, $4c77
call Func_311d
- ld hl, $0072
+ ldtx hl, PlacingThePrizesText
call DrawWideTextBox_WaitForInput
call Func_0f58
ld a, [wcc08]
ld l, a
- ld h, $0
- call Func_2ec4
- ld hl, $0073
+ ld h, 0
+ call LoadTxRam3
+ ldtx hl, PleasePlacePrizesText
call DrawWideTextBox_PrintText
call EnableLCD
call $4c7c
call WaitForWideTextBoxInput
pop af
- ld [$ff97], a
+ ldh [hWhoseTurn], a
call $7133
call SwapTurn
call $7133
call SwapTurn
- call Func_04a2
- ld a, $6
- call Func_2167
- ld hl, $0075
+ call EmptyScreen
+ ld a, BOXMSG_COIN_TOSS
+ call DrawDuelBoxMessage
+ ldtx hl, CoinTossToDetermineWhoFirstText
call DrawWideTextBox_WaitForInput
- ld a, [$ff97]
- cp $c2
+ ldh a, [hWhoseTurn]
+ cp PLAYER_TURN
jr nz, .asm_4c52
- ld de, wc590
- call PrintPlayerName
+ ld de, wDefaultText
+ call CopyPlayerName
ld hl, $0000
- call Func_2ebb
- ld hl, $0053
- ld de, $0074
+ call LoadTxRam2
+ ldtx hl, YouPlayFirstText
+ ldtx de, IfHeadPlayerPlaysFirstText
call TossCoin
jr c, .asm_4c4a
call SwapTurn
- ld hl, $0054
+ ldtx hl, YouPlaySecondText
.asm_4c4a
call DrawWideTextBox_WaitForInput
@@ -1038,16 +1143,16 @@ Func_4b60: ; 4b60 (1:4b60)
ret
.asm_4c52
- ld de, wc590
- call PrintOpponentName
+ ld de, wDefaultText
+ call CopyOpponentName
ld hl, $0000
- call Func_2ebb
- ld hl, $0054
- ld de, $0074
+ call LoadTxRam2
+ ldtx hl, YouPlaySecondText
+ ldtx de, IfHeadPlayerPlaysFirstText
call TossCoin
jr c, .asm_4c6f
call SwapTurn
- ld hl, $0053
+ ldtx hl, YouPlayFirstText
.asm_4c6f
call DrawWideTextBox_WaitForInput
@@ -1061,11 +1166,11 @@ Func_4b60: ; 4b60 (1:4b60)
; Select Basic Pokemon From Hand
Func_4cd5: ; 4cd5 (1:4cd5)
- ld a, $f1
+ ld a, DUELVARS_DUELIST_TYPE
call GetTurnDuelistVariable
- cp $0
+ cp DUELIST_TYPE_PLAYER
jr z, .asm_4d15
- cp $1
+ cp DUELIST_TYPE_LINK_OPP
jr z, .asm_4cec
push af
push hl
@@ -1077,7 +1182,7 @@ Func_4cd5: ; 4cd5 (1:4cd5)
ret
.asm_4cec
- ld hl, $0057
+ ldtx hl, TransmitingDataText
call DrawWideTextBox_PrintText
call Func_0f58
ld hl, wPlayerCardLocations
@@ -1088,20 +1193,20 @@ Func_4cd5: ; 4cd5 (1:4cd5)
ld c, $80
call Func_0e63
jr c, .asm_4d12
- ld a, $f1
+ ld a, DUELVARS_DUELIST_TYPE
call GetTurnDuelistVariable
- ld [hl], $1
+ ld [hl], DUELIST_TYPE_LINK_OPP
or a
ret
.asm_4d12
- jp Func_0f35
+ jp DuelTransmissionError
.asm_4d15
- call Func_04a2
- ld a, $5
- call Func_2167
- ld hl, $0069
+ call EmptyScreen
+ ld a, BOXMSG_ARENA_POKEMON
+ call DrawDuelBoxMessage
+ ldtx hl, ChooseBasicPkmnToPlaceInArenaText
call DrawWideTextBox_WaitForInput
ld a, $1
call $51e7
@@ -1110,23 +1215,23 @@ Func_4cd5: ; 4cd5 (1:4cd5)
ld hl, $006e
call $5502
jr c, .asm_4d28
- ld a, [$ff98]
- call LoadDeckCardToBuffer1
+ ldh a, [hTempCardIndex_ff98]
+ call LoadCardDataToBuffer1_FromDeckIndex
ld a, $2
call $51e7
jr c, .asm_4d28
- ld a, [$ff98]
- call Func_1485
- ld a, [$ff98]
+ ldh a, [hTempCardIndex_ff98]
+ call PutHandPokemonCardInPlayArea
+ ldh a, [hTempCardIndex_ff98]
ld hl, $0062
call $4b31
jr .asm_4d4c
.asm_4d4c
- call Func_04a2
- ld a, $4
- call Func_2167
- ld hl, $006d
+ call EmptyScreen
+ ld a, BOXMSG_BENCH_POKEMON
+ call DrawDuelBoxMessage
+ ldtx hl, ChooseUpTo5BasicPkmnToPlaceOnBenchText
call Func_2c73
ld a, $3
call $51e7
@@ -1135,13 +1240,13 @@ Func_4cd5: ; 4cd5 (1:4cd5)
ld hl, $006f
call $5502
jr c, .asm_4d8e
- ld a, $ef
+ ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY
call GetTurnDuelistVariable
- cp $6
+ cp MAX_PLAY_AREA_POKEMON
jr nc, .asm_4d86
- ld a, [$ff98]
- call Func_1485
- ld a, [$ff98]
+ ldh a, [hTempCardIndex_ff98]
+ call PutHandPokemonCardInPlayArea
+ ldh a, [hTempCardIndex_ff98]
ld hl, $0061
call $4b31
ld a, $5
@@ -1149,7 +1254,7 @@ Func_4cd5: ; 4cd5 (1:4cd5)
jr .asm_4d5f
.asm_4d86
- ld hl, $00b2
+ ldtx hl, NoSpaceOnTheBenchText
call DrawWideTextBox_WaitForInput
jr .asm_4d5f
@@ -1168,26 +1273,34 @@ Func_5aeb: ; 5aeb (1:5aeb)
INCROM $5aeb, $6785
Func_6785: ; 6785 (1:6785)
- INCROM $6785, $6793
+ 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 EnableExtRAM
+ call EnableSRAM
ld a, [$b700]
ld l, a
ld h, $54
call HtimesL
- ld de, $a218
+ ld de, sDeck1Cards
add hl, de
ld de, wPlayerDeck
ld c, DECK_SIZE
-.nextCardLoop
+.next_card_loop
ld a, [hli]
ld [de], a
inc de
dec c
- jr nz, .nextCardLoop
- call DisableExtRAM
+ jr nz, .next_card_loop
+ call DisableSRAM
ret
; 0x67b2
@@ -1196,46 +1309,46 @@ LoadPlayerDeck: ; 6793 (1:6793)
; related to ai taking their turn in a duel
; called multiple times during one ai turn
AIMakeDecision: ; 67be (1:67be)
- ld [$ff9e], a
- ld hl, $cbf9
+ ldh [hAIActionTableIndex], a
+ ld hl, wcbf9
ld a, [hl]
ld [hl], $0
or a
- jr nz, .skipDelay
-.delayLoop
+ jr nz, .skip_delay
+.delay_loop
call DoFrame
ld a, [wVBlankCtr]
cp $3c
- jr c, .delayLoop
+ jr c, .delay_loop
-.skipDelay
- ld a, [$ff9e]
- ld hl, $cbe1
+.skip_delay
+ ldh a, [hAIActionTableIndex]
+ ld hl, wcbe1
ld [hl], $0
- ld hl, AIMoveTable
+ ld hl, AIActionTable
call JumpToFunctionInTable
ld a, [wDuelFinished]
- ld hl, $cbe1
+ ld hl, wcbe1
or [hl]
- jr nz, .turnEnded
+ jr nz, .turn_ended
ld a, [wcbf9]
or a
ret nz
ld [wVBlankCtr], a
- ld hl, $0088
+ ldtx hl, DuelistIsThinkingText
call DrawWideTextBox_PrintTextNoDelay
or a
ret
-.turnEnded
+.turn_ended
scf
ret
; 0x67fb
INCROM $67fb, $695e
-AIMoveTable: ; 695e (1:695e)
- dw Func_0f35
+AIActionTable: ; 695e (1:695e)
+ dw DuelTransmissionError
dw $69e0
dw $69c5
dw AIUseEnergyCard
@@ -1262,14 +1375,14 @@ AIMoveTable: ; 695e (1:695e)
INCROM $698c, $69a5
AIUseEnergyCard: ; 69a5 (1:69a5)
- ld a, [$ffa1]
- ld [$ff9d], a
+ ldh a, [hTempPlayAreaLocationOffset_ffa1]
+ ldh [hTempPlayAreaLocationOffset_ff9d], a
ld e, a
- ld a, [$ffa0]
- ld [$ff98], a
- call $14d2
- ld a, [$ffa0]
- call LoadDeckCardToBuffer1
+ ldh a, [hffa0]
+ ldh [hTempCardIndex_ff98], a
+ call PutHandCardInPlayArea
+ ldh a, [hffa0]
+ call LoadCardDataToBuffer1_FromDeckIndex
call $5e75
call $68e4
ld a, $1
@@ -1296,24 +1409,24 @@ ConvertTrainerCardToPokemon:
ret z
ld a, e
cp MYSTERIOUS_FOSSIL
- jr nz, .checkForClefairyDoll
+ jr nz, .check_for_clefairy_doll
ld a, d
cp $00
- jr z, .startRamDataOverwrite
+ jr z, .start_ram_data_overwrite
ret
-.checkForClefairyDoll
+.check_for_clefairy_doll
cp CLEFAIRY_DOLL
ret nz
ld a, d
cp $00
ret nz
-.startRamDataOverwrite
+.start_ram_data_overwrite
push de
ld [hl], COLORLESS
- ld bc, wLoadedCard1HP - wLoadedCard1
+ ld bc, CARD_DATA_HP
add hl, bc
- ld de, .dataToOverwrite
- ld c, wLoadedCard1Unknown2 - wLoadedCard1HP
+ ld de, .data_to_overwrite
+ ld c, CARD_DATA_UNKNOWN2 - CARD_DATA_HP
.loop
ld a, [de]
inc de
@@ -1323,17 +1436,17 @@ ConvertTrainerCardToPokemon:
pop de
ret
-.dataToOverwrite
- db 10 ; hp
- ds $07 ; wLoadedCard1Move1Name - (wLoadedCard1HP + 1)
- tx DiscardName ; move1 name
- tx DiscardDescription ; move1 description
- ds $03 ; wLoadedCard1Move1Category - (wLoadedCard1Move1Description + 2)
- db POKEMON_POWER ; move1 category
- dw TrainerCardAsPokemonEffectCommands ; move1 effect commands
- ds $18 ; wLoadedCard1RetreatCost - (wLoadedCard1Move1EffectCommands + 2)
- db UNABLE_RETREAT ; retreat cost
- ds $0d ; PKMN_CARD_DATA_LENGTH - (wLoadedCard1RetreatCost + 1 - wLoadedCard1)
+.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, $7107
@@ -1349,16 +1462,16 @@ InitializeDuelVariables: ; 7107 (1:7107)
push af
xor a
ld l, a
-.zeroDuelVariablesLoop
+.zero_duel_variables_loop
ld [hl], a
inc l
- jr nz, .zeroDuelVariablesLoop
+ 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
-.initDuelVariablesLoop
+.init_duel_variables_loop
; zero card locations and cards in hand, and init order of cards in deck
push hl
ld [hl], b
@@ -1368,15 +1481,15 @@ InitializeDuelVariables: ; 7107 (1:7107)
inc l
inc b
dec c
- jr nz, .initDuelVariablesLoop
+ jr nz, .init_duel_variables_loop
ld l, DUELVARS_ARENA_CARD
- ld c, 1 + BENCH_SIZE + 1
-.initPlayArea
-; initialize to $ff card in arena as well as cards in bench (plus a terminator?)
+ 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, .initPlayArea
+ jr nz, .init_play_area
ret
; 0x7133
@@ -1389,7 +1502,7 @@ _TossCoin: ; 71ad (1:71ad)
jr z, .asm_71c1
xor a
ld [wcd9f], a
- call Func_04a2
+ call EmptyScreen
call Func_210f
.asm_71c1
@@ -1406,19 +1519,19 @@ _TossCoin: ; 71ad (1:71ad)
ld de, $010e
ld a, $13
call Func_22a6
- ld hl, wCoinTossScreenTextId
+ ld hl, wCoinTossScreenTextID
ld a, [hli]
ld h, [hl]
ld l, a
call PrintText
.asm_71ec
- ld hl, wCoinTossScreenTextId
+ ld hl, wCoinTossScreenTextID
xor a
ld [hli], a
ld [hl], a
call EnableLCD
- ld a, $f1
+ ld a, DUELVARS_DUELIST_TYPE
call GetTurnDuelistVariable
ld [wcd9e], a
call Func_0f58
@@ -1492,7 +1605,7 @@ _TossCoin: ; 71ad (1:71ad)
jr z, .asm_727c
ld b, $5b
ld c, $30
- ld hl, $cd9d
+ ld hl, wcd9d
inc [hl]
.asm_727c
@@ -1533,24 +1646,24 @@ _TossCoin: ; 71ad (1:71ad)
.asm_72ad
add a
ld d, a
- ld bc, $0202
- ld hl, $0102
+ lb bc, 2, 2
+ lb hl, 1, 2
pop af
- call Func_1f5f
+ call FillRectangle
.asm_72b9
- ld hl, $cd9f
+ ld hl, wcd9f
inc [hl]
ld a, [wcd9e]
or a
jr z, .asm_72dc
ld a, [hl]
- ld hl, $cd9c
+ ld hl, wcd9c
cp [hl]
call z, WaitForWideTextBoxInput
call $7324
ld a, [wcd9c]
- ld hl, $cd9d
+ ld hl, wcd9d
or [hl]
jr nz, .asm_72e2
call z, WaitForWideTextBoxInput
@@ -1563,7 +1676,7 @@ _TossCoin: ; 71ad (1:71ad)
.asm_72e2
call Func_3b31
ld a, [wcd9f]
- ld hl, $cd9c
+ ld hl, wcd9c
cp [hl]
jp c, .asm_7204
call Func_0f58
@@ -1587,7 +1700,7 @@ Func_7571: ; 7571 (1:7571)
INCROM $7571, $7576
Func_7576: ; 7576 (1:7576)
- farcallx $6, $591f
+ farcall $6, $591f
ret
; 0x757b
@@ -1597,7 +1710,7 @@ Func_758f: ; 758f (1:758f)
INCROM $758f, $7594
Func_7594: ; 7594 (1:7594)
- farcallx $6, $661f
+ farcall $6, $661f
ret
; 0x7599
diff --git a/src/engine/bank1c.asm b/src/engine/bank1c.asm
index c7ae122..005eb3f 100755..100644
--- a/src/engine/bank1c.asm
+++ b/src/engine/bank1c.asm
@@ -22,7 +22,16 @@ Func_70018: ; 70018 (1c:4018)
ret
; 0x70024
- INCROM $70024, $70044
+AtrcEnPacket_Disable: ; 70024 (1c:4024)
+ sgb ATRC_EN, 1 ; sgb_command, length
+ db 1
+ ds $0e
+
+; disable Controller Set-up Screen
+IconEnPacket: ; 70034 (1c:4034)
+ sgb ICON_EN, 3 ; sgb_command, length
+ db $01
+ ds $0e
Func_70044: ; 70044 (1c:4044)
push hl
@@ -80,10 +89,10 @@ Func_700a3: ; 700a3 (1c:40a3)
ld a, [hli]
ld h, [hl]
ld l, a
- ld de, vTiles1
+ ld de, v0Tiles1
call Func_701e9
call Func_701fe
- ld hl, SGB_700de
+ ld hl, ChrTrnPacket_BGTiles1
call Func_70177
pop hl
ld de, $0002
@@ -96,9 +105,9 @@ Func_700a3: ; 700a3 (1c:40a3)
jr z, .asm_700da
call Func_70136
dec hl
- ld de, vTiles1
+ ld de, v0Tiles1
call Func_701e9
- ld hl, SGB_700ee
+ ld hl, ChrTrnPacket_BGTiles2
call Func_70177
.asm_700da
pop de
@@ -107,12 +116,16 @@ Func_700a3: ; 700a3 (1c:40a3)
ret
; CHR_TRN: tiles $00-$7F, BG (border) tiles (from SNES $000-$FFF)
-SGB_700de: ; 700de (1c:40de)
- INCROM $700de, $700ee
+ChrTrnPacket_BGTiles1: ; 700de (1c:40de)
+ sgb CHR_TRN, 1 ; sgb_command, length
+ db 0
+ ds $0e
; CHR_TRN: tiles $80-$FF, BG (border) tiles (from SNES $000-$FFF)
-SGB_700ee: ; 700ee (1c:40ee)
- INCROM $700ee, $700fe
+ChrTrnPacket_BGTiles2: ; 700ee (1c:40ee)
+ sgb CHR_TRN, 1 ; sgb_command, length
+ db 1
+ ds $0e
Func_700fe: ; 700fe (1c:40fe)
push hl
@@ -123,15 +136,15 @@ Func_700fe: ; 700fe (1c:40fe)
push hl
call Func_70136
pop hl
- ld de, vTiles1
+ ld de, v0Tiles1
call Func_701e9
pop hl
- ld de, vTiles2
+ ld de, v0Tiles2
call Func_701e9
call Func_701fe
pop hl
call Func_70214
- ld hl, SGB_70126
+ ld hl, PctTrnPacket
call Func_70177
pop de
pop bc
@@ -139,8 +152,9 @@ Func_700fe: ; 700fe (1c:40fe)
ret
; PCT_TRN: read tile map & palette data into VRAM (from SNES $000-$87F)
-SGB_70126: ; 70126 (1c:4126)
- INCROM $70126, $70136
+PctTrnPacket: ; 70126 (1c:4126)
+ sgb PCT_TRN, 1 ; sgb_command, length
+ ds $0f
Func_70136: ; 70136 (1c:4136)
push hl
@@ -155,7 +169,7 @@ Func_70136: ; 70136 (1c:4136)
ld a, [wLCDC]
ld [wd420], a
di
- ld hl, SGB_MASK_EN_ON_701a0
+ ld hl, MaskEnPacket_Freeze_Bank1c
call SendSGB
call DisableLCD
ld a, [wLCDC]
@@ -164,7 +178,7 @@ Func_70136: ; 70136 (1c:4136)
ld [wLCDC], a
ld a, $e4
ld [rBGP], a
- call Func_040c
+ call SetBGP
xor a
ldh [hSCX], a
ld [rSCX], a
@@ -188,7 +202,7 @@ Func_70177: ; 70177 (1c:4177)
ld a, [wd41e]
ldh [hSCY], a
ld a, [wd41f]
- call Func_040c
+ call SetBGP
ld a, [wd420]
ld [wLCDC], a
call DisableLCD
@@ -199,12 +213,16 @@ Func_70177: ; 70177 (1c:4177)
ret
; MASK_EN on
-SGB_MASK_EN_ON_701a0: ; 701a0 (1c:41a0)
- INCROM $701a0, $701b0
+MaskEnPacket_Freeze_Bank1c: ; 701a0 (1c:41a0)
+ sgb MASK_EN, 1 ; sgb_command, length
+ db MASK_EN_FREEZE_SCREEN
+ ds $0e
; MASK_EN off
-SGB_MASK_EN_OFF_701b0: ; 701b0 (1c:41b0)
- INCROM $701b0, $701c0
+MaskEnPacket_Cancel_Bank1c: ; 701b0 (1c:41b0)
+ sgb MASK_EN, 1 ; sgb_command, length
+ db MASK_EN_CANCEL_MASK
+ ds $0e
Func_701c0: ; 701c0 (1c:41c0)
push hl
@@ -212,7 +230,7 @@ Func_701c0: ; 701c0 (1c:41c0)
call DisableLCD
xor a
ld c, $10
- ld hl, vTiles2
+ ld hl, v0Tiles2
.asm_701cb
ld [hli], a
dec c
@@ -221,11 +239,11 @@ Func_701c0: ; 701c0 (1c:41c0)
push af
xor a
ld [wTileMapFill], a
- call Func_04a2
+ call EmptyScreen
pop af
ld [wTileMapFill], a
di
- ld hl, SGB_MASK_EN_OFF_701b0
+ ld hl, MaskEnPacket_Cancel_Bank1c
call SendSGB
ei
pop bc
@@ -251,7 +269,7 @@ Func_701e9: ; 701e9 (1c:41e9)
ret
Func_701fe: ; 701fe (1c:41fe)
- ld hl, vBGMapTiles
+ ld hl, v0BGMapTiles1
ld de, $000c
ld a, $80
ld c, $d
diff --git a/src/engine/bank2.asm b/src/engine/bank2.asm
index fea3d9b..22435ee 100755..100644
--- a/src/engine/bank2.asm
+++ b/src/engine/bank2.asm
@@ -2,7 +2,7 @@
Func_8cd4: ; 8cd4 (2:4cd4)
push bc
- call EnableExtRAM
+ call EnableSRAM
ld b, $3c
.asm_8cda
ld a, [de]
@@ -12,7 +12,7 @@ Func_8cd4: ; 8cd4 (2:4cd4)
jr nz, .asm_8cda
xor a
ld [hl], a
- call DisableExtRAM
+ call DisableSRAM
pop bc
ret
; 0x8ce7
@@ -20,7 +20,7 @@ Func_8cd4: ; 8cd4 (2:4cd4)
INCROM $8ce7, $8cf9
Func_8cf9: ; 8cf9 (2:4cf9)
- call EnableExtRAM
+ call EnableSRAM
xor a
ld hl, $b703
ld [hli], a
@@ -29,7 +29,7 @@ Func_8cf9: ; 8cf9 (2:4cf9)
ld [hli], a
ld [hl], a
ld [$b701], a
- call DisableExtRAM
+ call DisableSRAM
Func_8d0b: ; 8d0b (2:4d0b)
ld hl, Unknown_8d15
ld de, $9380
@@ -42,8 +42,8 @@ Unknown_8d15: ; 8d15 (2:4d15)
Func_8d56: ; 8d56 (2:4d56)
xor a
ld [wTileMapFill], a
- call Func_04a2
- call Func_099c
+ call EmptyScreen
+ call InitSpritePositions
ld a, $1
ld [wVBlankOAMCopyToggle], a
call Func_2119
@@ -58,7 +58,7 @@ Func_8d56: ; 8d56 (2:4d56)
INCROM $8d78, $8d9d
Func_8d9d: ; 8d9d (2:4d9d)
- ld de, $cfd1
+ ld de, wcfd1
ld b, $7
.asm_8da2
ld a, [hli]
@@ -116,9 +116,9 @@ Func_8dea: ; 8dea (2:4dea)
Func_8e05: ; 8e05 (2:4e05)
ld a, $1
call Func_90fb
- call Func_9048
+ call GetPointerToDeckCards
push hl
- call Func_9038
+ call GetPointerToDeckName
pop de
call Func_8e1f
ld a, $ff
@@ -129,17 +129,17 @@ Func_8e05: ; 8e05 (2:4e05)
Func_8e1f: ; 8e1f (2:4e1f)
push de
- ld de, $cfb9
+ ld de, wcfb9
call Func_92b4
pop de
- ld hl, $cf17
+ ld hl, wcf17
call Func_8cd4
ld a, $9
- ld hl, $cebb
+ ld hl, wcebb
call Func_9843
ld a, $3c
ld [wcecc], a
- ld hl, $cebb
+ ld hl, wcebb
ld [hl], a
call Func_9e41
ret
@@ -165,27 +165,27 @@ Func_8e42: ; 8e42 (2:4e42)
ld a, [wceb0]
or a
jp nz, .asm_8ecf
- call Func_9048
+ call GetPointerToDeckCards
ld e, l
ld d, h
- ld hl, $cf17
+ ld hl, wcf17
call Func_8cd4
ld a, $14
- ld hl, $cfb9
+ ld hl, wcfb9
call Func_9843
- ld de, $cfb9
- call Func_9038
+ ld de, wcfb9
+ call GetPointerToDeckName
call Func_92b4
call Func_9345
jr nc, .asm_8ec4
- call EnableExtRAM
- ld hl, $cf17
+ call EnableSRAM
+ ld hl, wcf17
call Func_910a
- call Func_9048
+ call GetPointerToDeckCards
call Func_9152
ld e, l
ld d, h
- ld hl, $cf17
+ ld hl, wcf17
ld b, $3c
.asm_8ea9
ld a, [hli]
@@ -193,14 +193,14 @@ Func_8e42: ; 8e42 (2:4e42)
inc de
dec b
jr nz, .asm_8ea9
- call Func_9038
+ call GetPointerToDeckName
ld d, h
ld e, l
- ld hl, $cfb9
+ ld hl, wcfb9
call Func_92ad
- call Func_9038
+ call GetPointerToDeckName
ld a, [hl]
- call DisableExtRAM
+ call DisableSRAM
or a
jr z, .asm_8edb
.asm_8ec4
@@ -215,16 +215,16 @@ Func_8e42: ; 8e42 (2:4e42)
jp Func_8dbc
.asm_8edb
ld a, $14
- ld hl, $cfb9
+ ld hl, wcfb9
call Func_9843
- ld de, $cfb9
- call Func_9038
+ ld de, wcfb9
+ call GetPointerToDeckName
call Func_92b4
call Func_8f05
- call Func_9038
+ call GetPointerToDeckName
ld d, h
ld e, l
- ld hl, $cfb9
+ ld hl, wcfb9
call Func_92b4
ld a, $ff
call Func_9168
@@ -252,7 +252,7 @@ Func_8f05: ; 8f05 (2:4f05)
.asm_8f23
ld a, $14
ld bc, $0401
- ld de, $cfb9
+ ld de, wcfb9
farcall Func_1ad89
ld a, [wcfb9]
or a
@@ -262,14 +262,14 @@ Func_8f05: ; 8f05 (2:4f05)
Func_8f38: ; 8f38 (2:4f38)
ld hl, $b701
- call EnableExtRAM
+ call EnableSRAM
ld a, [hli]
ld h, [hl]
- call DisableExtRAM
+ call DisableSRAM
ld l, a
- ld de, wc590
+ ld de, wDefaultText
call Func_0663
- ld hl, $cfb9
+ ld hl, wcfb9
ld [hl], $6
inc hl
ld [hl], $44
@@ -294,7 +294,7 @@ Func_8f38: ; 8f38 (2:4f38)
xor a
ld [hl], a
ld hl, $b701
- call EnableExtRAM
+ call EnableSRAM
ld e, [hl]
inc hl
ld d, [hl]
@@ -310,7 +310,7 @@ Func_8f38: ; 8f38 (2:4f38)
ld [hl], d
dec hl
ld [hl], e
- call DisableExtRAM
+ call DisableSRAM
ret
Func_8f8a: ; 8f8a (2:4f8a)
@@ -323,31 +323,31 @@ Func_8f8a: ; 8f8a (2:4f8a)
jp Func_8dbc
Func_8f9d: ; 8f9d (2:4f9d)
- call EnableExtRAM
+ call EnableSRAM
ld a, [$b700]
- call DisableExtRAM
+ call DisableSRAM
ld h, $3
ld l, a
call HtimesL
ld e, l
inc e
- ld d, $2
+ ld d, 2
xor a
- ld hl, $0000
- ld bc, $0202
- call Func_1f5f
+ lb hl, 0, 0
+ lb bc, 2, 2
+ call FillRectangle
ld a, [wceb1]
- call EnableExtRAM
+ call EnableSRAM
ld [$b700], a
- call DisableExtRAM
+ call DisableSRAM
call Func_9326
- call Func_9038
- call EnableExtRAM
+ call GetPointerToDeckName
+ call EnableSRAM
call Func_9253
- call DisableExtRAM
+ call DisableSRAM
xor a
- ld [wce3f], a
- ld [wce40], a
+ ld [wTxRam2], a
+ ld [wTxRam2 + 1], a
ldtx hl, ChosenAsDuelingDeckText
call DrawWideTextBox_WaitForInput
ld a, [wceb1]
@@ -361,7 +361,7 @@ Func_8fe8: ; 8fe8 (2:4fe8)
Func_8ff2: ; 8ff2 (2:4ff2)
ld a, [wceb1]
- ld hl, $ceb2
+ ld hl, wceb2
ld b, $0
ld c, a
add hl, bc
@@ -380,25 +380,27 @@ Func_9026: ; 9026 (2:5026)
Unknown_9027: ; 9027 (2:5027)
INCROM $9027, $9038
-Func_9038: ; 9038 (2:5038)
+; return, in hl, the pointer to sDeckXName where X is [wceb1] + 1
+GetPointerToDeckName: ; 9038 (2:5038)
ld a, [wceb1]
ld h, a
- ld l, $54
+ ld l, sDeck2Name - sDeck1Name
call HtimesL
push de
- ld de, $a200
+ ld de, sDeck1Name
add hl, de
pop de
ret
-Func_9048: ; 9048 (2:5048)
+; 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, $54
+ ld l, sDeck2Cards - sDeck1Cards
call HtimesL
push de
- ld de, $a218
+ ld de, sDeck1Cards
add hl, de
pop de
pop af
@@ -473,7 +475,7 @@ Func_9065: ; 9065 (2:5065)
jr z, .asm_90ca
call PlaySFX
.asm_90ca
- ld hl, $cea3
+ ld hl, wcea3
ld a, [hl]
inc [hl]
and $f
@@ -529,7 +531,7 @@ Func_910a: ; 910a (2:510a)
jr z, .asm_911e
ld c, a
push hl
- ld hl, $a100
+ ld hl, sCardCollection
add hl, bc
dec [hl]
pop hl
@@ -552,7 +554,7 @@ Func_9152: ; 9152 (2:5152)
jr z, .asm_9166
ld c, a
push hl
- ld hl, $a100
+ ld hl, sCardCollection
add hl, bc
inc [hl]
pop hl
@@ -580,16 +582,16 @@ Func_9168: ; 9168 (2:5168)
ld hl, Unknown_9242
call Func_2c08
ld a, $4
- ld hl, $ceb2
+ ld hl, wceb2
call Func_9843
ld a, [hffb5]
bit 0, a
jr z, .asm_91b0
- ld hl, $a200
+ ld hl, sDeck1Name
ld de, $0602
call Func_926e
.asm_91b0
- ld hl, $a218
+ ld hl, sDeck1Cards
call Func_9314
jr c, .asm_91bd
ld a, $1
@@ -598,11 +600,11 @@ Func_9168: ; 9168 (2:5168)
ld a, [hffb5]
bit 1, a
jr z, .asm_91cd
- ld hl, $a254
+ ld hl, sDeck2Name
ld de, $0605
call Func_926e
.asm_91cd
- ld hl, $a26c
+ ld hl, sDeck2Cards
call Func_9314
jr c, .asm_91da
ld a, $1
@@ -611,11 +613,11 @@ Func_9168: ; 9168 (2:5168)
ld a, [hffb5]
bit 2, a
jr z, .asm_91ea
- ld hl, $a2a8
+ ld hl, sDeck3Name
ld de, $0608
call Func_926e
.asm_91ea
- ld hl, $a2c0
+ ld hl, sDeck3Cards
call Func_9314
jr c, .asm_91f7
ld a, $1
@@ -624,23 +626,23 @@ Func_9168: ; 9168 (2:5168)
ld a, [hffb5]
bit 3, a
jr z, .asm_9207
- ld hl, $a2fc
+ ld hl, sDeck4Name
ld de, $060b
call Func_926e
.asm_9207
- ld hl, $a314
+ ld hl, sDeck4Cards
call Func_9314
jr c, .asm_9214
ld a, $1
ld [wceb5], a
.asm_9214
- call EnableExtRAM
+ call EnableSRAM
ld a, [$b700]
ld c, a
ld b, $0
ld d, $2
.asm_921f
- ld hl, $ceb2
+ ld hl, wceb2
add hl, bc
ld a, [hl]
or a
@@ -656,7 +658,7 @@ Func_9168: ; 9168 (2:5168)
.asm_9234
ld a, c
ld [$b700], a
- call DisableExtRAM
+ call DisableSRAM
call Func_9326
call EnableLCD
ret
@@ -665,12 +667,12 @@ Unknown_9242: ; 9242 (2:5242)
INCROM $9242, $9253
Func_9253: ; 9253 (2:5253)
- ld de, wc590
+ ld de, wDefaultText
call Func_92ad
- ld hl, wc590
+ ld hl, wDefaultText
call Func_23c1
ld b, $0
- ld hl, wc590
+ ld hl, wDefaultText
add hl, bc
ld d, h
ld e, l
@@ -684,19 +686,19 @@ Func_926e: ; 926e (2:526e)
pop hl
jr c, .asm_929c
push de
- ld de, wc590
+ ld de, wDefaultText
call Func_92b4
- ld hl, wc590
+ ld hl, wDefaultText
call Func_23c1
ld b, $0
- ld hl, wc590
+ ld hl, wDefaultText
add hl, bc
ld d, h
ld e, l
ld hl, Unknown_92a7
call Func_92ad
pop de
- ld hl, wc590
+ ld hl, wDefaultText
call Func_22ae
call Func_21c5
or a
@@ -720,9 +722,9 @@ Func_92ad: ; 92ad (2:52ad)
jr Func_92ad
Func_92b4: ; 92b4 (2:52b4)
- call EnableExtRAM
+ call EnableSRAM
call Func_92ad
- call DisableExtRAM
+ call DisableSRAM
ret
; 0x92be
@@ -731,9 +733,9 @@ Func_92b4: ; 92b4 (2:52b4)
Func_9314: ; 9314 (2:5314)
ld bc, $0018
add hl, bc
- call EnableExtRAM
+ call EnableSRAM
ld a, [hl]
- call DisableExtRAM
+ call DisableSRAM
or a
jr nz, .asm_9324
scf
@@ -743,19 +745,19 @@ Func_9314: ; 9314 (2:5314)
ret
Func_9326: ; 9326 (2:5326)
- call EnableExtRAM
+ call EnableSRAM
ld a, [$b700]
- call DisableExtRAM
- ld h, $3
+ call DisableSRAM
+ ld h, 3
ld l, a
call HtimesL
ld e, l
inc e
- ld d, $2
+ ld d, 2
ld a, $38
- ld hl, $0102
- ld bc, $0202
- call Func_1f5f
+ lb hl, 1, 2
+ lb bc, 2, 2
+ call FillRectangle
ret
Func_9345: ; 9345 (2:5345)
@@ -787,33 +789,33 @@ Func_b177: ; b177 (2:7177)
Func_b19d: ; b19d (2:719d)
xor a
- ld [$cea1], a
+ ld [wcea1], a
ld de, CheckForCGB
- ld hl, $d0a2
+ ld hl, wd0a2
ld [hl], e
inc hl
ld [hl], d
call $7379
ld a, $3c
- ld [$d0a5], a
+ ld [wd0a5], a
xor a
.asm_b1b3
ld hl, $76fb
call $5a6d
call $7704
call $7545
- ld hl, $0224
+ ldtx hl, PleaseSelectDeckText
call DrawWideTextBox_PrintText
- ld de, $0224
+ ld de, $0224 ; PleaseSelectDeckText?
call $7285
call $729f
jr c, .asm_b1b3
cp $ff
ret z
ld b, a
- ld a, [$cea1]
+ ld a, [wcea1]
add b
- ld [$d088], a
+ ld [wd088], a
call Func_905a
call DrawWideTextBox
ld hl, $7274
@@ -823,7 +825,7 @@ Func_b19d: ; b19d (2:719d)
jp nc, $71e7
cp $ff
jr nz, .asm_b1fa
- ld a, [$d086]
+ ld a, [wd086]
jp $71b3
.asm_b1fa
@@ -836,17 +838,17 @@ Func_b19d: ; b19d (2:719d)
call $735b
jr nc, .asm_b216
call $7592
- ld a, [$d086]
+ ld a, [wd086]
jp c, $71b3
jr .asm_b25e
.asm_b216
ld hl, $0272
call YesOrNoMenuWithText
- ld a, [$d086]
+ ld a, [wd086]
jr c, .asm_b1b3
call $7592
- ld a, [$d086]
+ ld a, [wd086]
jp c, $71b3
jr .asm_b25e
@@ -856,14 +858,14 @@ Func_b19d: ; b19d (2:719d)
call $735b
jr c, .asm_b240
call $76ca
- ld a, [$d086]
+ ld a, [wd086]
jp c, $71b3
jr .asm_b25e
.asm_b240
ld hl, WaitForVBlank
call DrawWideTextBox_WaitForInput
- ld a, [$d086]
+ ld a, [wd086]
jp $71b3
.asm_b24c
@@ -872,16 +874,16 @@ Func_b19d: ; b19d (2:719d)
call $735b
jr c, .asm_b240
call $77c6
- ld a, [$d086]
+ ld a, [wd086]
jp nc, $71b3
.asm_b25e
- ld a, [$d087]
- ld [$cea1], a
+ ld a, [wd087]
+ ld [wcea1], a
call $7379
call $7704
call $7545
- ld a, [$d086]
+ ld a, [wd086]
jp $71b3
.asm_b273
@@ -897,47 +899,47 @@ Func_ba04: ; ba04 (2:7a04)
ld c, a
ld b, $0
add hl, bc
- ld de, $d0a2
+ ld de, wd0a2
ld a, [hli]
ld [de], a
inc de
ld a, [hl]
ld [de], a
xor a
- ld [$cea1], a
+ ld [wcea1], a
call $7b97
ld a, $5
- ld [$d0a5], a
+ ld [wd0a5], a
xor a
ld hl, $7b6e
call InitializeCursorParameters
- ld hl, $0224
+ ldtx hl, PleaseSelectDeckText
call DrawWideTextBox_PrintText
ld a, $5
- ld [$cea9], a
+ ld [wcea9], a
ld hl, $73fe
ld d, h
ld a, l
- ld hl, $cece
+ ld hl, wcece
ld [hli], a
ld [hl], d
.asm_ba40
call DoFrame
call HandleMenuInput
jr c, .asm_baa3
- ld a, [$ff8f]
- and $c0
+ ldh a, [hButtonsPressed2]
+ and D_UP | D_DOWN
jr z, .asm_ba4e
.asm_ba4e
- ld a, [$ff8f]
- and $8
+ ldh a, [hButtonsPressed2]
+ and START
jr z, .asm_ba40
- ld a, [$cea1]
- ld [$d087], a
+ ld a, [wcea1]
+ ld [wd087], a
ld b, a
ld a, [wCurMenuItem]
- ld [$d086], a
+ ld [wd086], a
add b
ld c, a
inc a
@@ -945,7 +947,7 @@ Func_ba04: ; ba04 (2:7a04)
ld [wceb1], a
sla c
ld b, $0
- ld hl, $d00d
+ ld hl, wd00d
add hl, bc
call $7653
ld a, [hli]
@@ -966,25 +968,25 @@ Func_ba04: ; ba04 (2:7a04)
call $7653
call Func_8e1f
call $7644
- ld a, [$d087]
- ld [$cea1], a
+ ld a, [wd087]
+ ld [wcea1], a
call $7b97
- ld a, [$d086]
+ ld a, [wd086]
jp $7a25
.asm_baa3
call DrawCursor2
- ld a, [$cea1]
- ld [$d087], a
+ ld a, [wcea1]
+ ld [wd087], a
ld a, [wCurMenuItem]
- ld [$d086], a
- ld a, [$ffb1]
+ ld [wd086], a
+ ldh a, [hCurrentMenuItem]
cp $ff
jp z, $7b0d
- ld [$d088], a
+ ld [wd088], a
call Func_905a
xor a
- ld [$ce5e], a
+ ld [wce5e], a
call DrawWideTextBox
ld hl, $7b76
call Func_2c08
@@ -993,7 +995,7 @@ Func_ba04: ; ba04 (2:7a04)
jp nc, $7acc
cp $ff
jr nz, .asm_badf
- ld a, [$d086]
+ ld a, [wd086]
jp $7a25
.asm_badf
@@ -1006,38 +1008,38 @@ Func_ba04: ; ba04 (2:7a04)
call $7653
call $77c6
call $7644
- ld a, [$d086]
+ ld a, [wd086]
jp nc, $7a25
- ld a, [$d087]
- ld [$cea1], a
+ ld a, [wd087]
+ ld [wcea1], a
call $7b97
- ld a, [$d086]
+ ld a, [wd086]
jp $7a25
.asm_bb09
cp $1
jr nz, .asm_bb12
xor a
- ld [$d0a4], a
+ ld [wd0a4], a
ret
.asm_bb12
- ld a, [$cea1]
- ld [$d087], a
+ ld a, [wcea1]
+ ld [wd087], a
ld b, a
ld a, [wCurMenuItem]
- ld [$d086], a
+ ld [wd086], a
add b
ld c, a
ld [wceb1], a
sla c
ld b, $0
- ld hl, $d00d
+ ld hl, wd00d
add hl, bc
push hl
- ld hl, $d0aa
+ ld hl, wd0aa
add hl, bc
- ld bc, $cfda
+ ld bc, wcfda
ld a, [hli]
ld [bc], a
inc bc
@@ -1064,10 +1066,10 @@ Func_ba04: ; ba04 (2:7a04)
xor a
call $6dfe
call $7644
- ld a, [$d087]
- ld [$cea1], a
+ ld a, [wd087]
+ ld [wcea1], a
call $7b97
- ld a, [$d086]
+ ld a, [wd086]
jp $7a25
; 0xbb6e
diff --git a/src/engine/bank20.asm b/src/engine/bank20.asm
index b551e73..5a0367c 100755..100644
--- a/src/engine/bank20.asm
+++ b/src/engine/bank20.asm
@@ -5,9 +5,9 @@ Func_80028: ; 80028 (20:4028)
call Func_801f1
ld bc, $0000
call Func_80077
- farcallx $3, $49c7
+ farcall $3, $49c7
call $41a1
- farcallx $3, $43ee
+ farcall $3, $43ee
ret
; 0x8003d
@@ -15,11 +15,11 @@ Func_80028: ; 80028 (20:4028)
Func_80077: ; 80077 (20:4077)
ld a, $1
- ld [$d292], a
+ ld [wd292], a
jr .asm_80082
xor a
- ld [$d292], a
+ ld [wd292], a
.asm_80082
push hl
@@ -32,22 +32,22 @@ Func_80077: ; 80077 (20:4077)
ld [hl], d
call $43b9
ld a, [wd4c6]
- ld [$d23d], a
- ld de, $d23e
+ ld [wd23d], a
+ ld de, wd23e
ld bc, $0006
call Func_3bf5
ld l, e
ld h, d
ld a, [hli]
- ld [$d12f], a
+ ld [wd12f], a
ld a, [hli]
- ld [$d130], a
+ ld [wd130], a
ld a, [hli]
- ld [$d23a], a
+ ld [wd23a], a
ld a, [hli]
- ld [$d23b], a
+ ld [wd23b], a
ld a, [hli]
- ld [$d23c], a
+ ld [wd23c], a
call $40bd
pop de
pop bc
@@ -61,12 +61,12 @@ Func_801a1: ; 801a1 (20:41a1)
push hl
push bc
push de
- ld a, [$ff81]
+ ldh a, [hBankSRAM]
push af
ld a, $1
- call BankswitchRAM
- ld hl, vEnd
- ld de, vBGMapTiles
+ call BankswitchSRAM
+ ld hl, v0End
+ ld de, v0BGMapTiles1
ld c, $20
.asm_801b4
push bc
@@ -83,10 +83,10 @@ Func_801a1: ; 801a1 (20:41a1)
push de
ld bc, $0400
add hl, bc
- call BankswitchVRAM_1
+ call BankswitchVRAM1
ld b, $20
call SafeCopyDataHLtoDE
- call BankswitchVRAM_0
+ call BankswitchVRAM0
.asm_801d6
pop hl
@@ -101,8 +101,8 @@ Func_801a1: ; 801a1 (20:41a1)
dec c
jr nz, .asm_801b4
pop af
- call BankswitchRAM
- call DisableExtRAM
+ call BankswitchSRAM
+ call DisableSRAM
pop de
pop bc
pop hl
@@ -111,17 +111,17 @@ Func_801a1: ; 801a1 (20:41a1)
Func_801f1: ; 801f1 (20:41f1)
push hl
push bc
- ld a, [$ff81]
+ ldh a, [hBankSRAM]
push af
ld a, $1
- call BankswitchRAM
+ call BankswitchSRAM
ld hl, $a000
ld bc, $0800
xor a
call $3c10
pop af
- call BankswitchRAM
- call DisableExtRAM
+ call BankswitchSRAM
+ call DisableSRAM
pop bc
pop hl
ret
@@ -188,18 +188,18 @@ asm_8027c
ld b, a
ld a, [wd4c7]
ld c, a
- ld hl, $d4c2
+ ld hl, wd4c2
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $d4c4
+ ld hl, wd4c4
ld a, [hli]
ld h, [hl]
ld l, a
inc hl
inc hl
call Func_395a
- call BankswitchVRAM_0
+ call BankswitchVRAM0
pop de
pop bc
pop hl
@@ -251,7 +251,7 @@ Func_80b7a: ; 80b7a (20:4b7a)
Func_80ba4: ; 80ba4 (20:4ba4)
push af
xor a
- ld [$d292], a
+ ld [wd292], a
pop af
push hl
push bc
@@ -259,15 +259,15 @@ Func_80ba4: ; 80ba4 (20:4ba4)
ld c, a
ld a, [wd131]
push af
- ld a, [$d23d]
+ ld a, [wd23d]
push af
- ld a, [$d12f]
+ ld a, [wd12f]
push af
- ld a, [$d130]
+ ld a, [wd130]
push af
- ld a, [$d23a]
+ ld a, [wd23a]
push af
- ld a, [$d23b]
+ ld a, [wd23b]
push af
ld b, $0
ld hl, wd323
@@ -296,7 +296,7 @@ Func_80ba4: ; 80ba4 (20:4ba4)
ld a, [hl]
ld [wd131], a
push bc
- farcallx $20, $4082
+ farcall $20, $4082
pop bc
srl b
ld a, c
@@ -308,17 +308,17 @@ Func_80ba4: ; 80ba4 (20:4ba4)
ld b, $0
ld hl, wBoosterViableCardList
add hl, bc
- farcallx $3, $438f
+ farcall $3, $438f
pop af
- ld [$d23b], a
+ ld [wd23b], a
pop af
- ld [$d23a], a
+ ld [wd23a], a
pop af
- ld [$d130], a
+ ld [wd130], a
pop af
- ld [$d12f], a
+ ld [wd12f], a
pop af
- ld [$d23d], a
+ ld [wd23d], a
pop af
ld [wd131], a
pop de
diff --git a/src/engine/bank3.asm b/src/engine/bank3.asm
index 563a667..1fc8f11 100755..100644
--- a/src/engine/bank3.asm
+++ b/src/engine/bank3.asm
@@ -1,17 +1,17 @@
LoadMap: ; c000 (3:4000)
call DisableLCD
- call EnableExtRAM
+ call EnableSRAM
bank1call Func_6785
- call DisableExtRAM
- ld a, $0
- ld [wd0b5], a
+ 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 Func_099c
+ call InitSpritePositions
xor a
ld [wTileMapFill], a
call Func_2119
@@ -24,7 +24,7 @@ LoadMap: ; c000 (3:4000)
farcall Func_10ab4
call Func_c1a4
call Func_c241
- call Func_04a2
+ call EmptyScreen
call Func_3ca0
ld a, PLAYER_TURN
ldh [hWhoseTurn], a
@@ -55,12 +55,12 @@ LoadMap: ; c000 (3:4000)
call DoFrameIfLCDEnabled
call SetScreenScroll
call Func_c0ce
- ld hl, $d0b4
+ ld hl, wd0b4
ld a, [hl]
and $d0
jr z, .asm_c092
call DoFrameIfLCDEnabled
- ld hl, $d0b4
+ ld hl, wd0b4
ld a, [hl]
bit 4, [hl]
jr z, .asm_c0b6
@@ -83,9 +83,9 @@ Func_c0ce: ; c0ce (3:40ce)
ld a, [wd0bf]
res 7, a
rlca
- add PointerTable_c0e0 & $ff
+ add LOW(PointerTable_c0e0)
ld l, a
- ld a, PointerTable_c0e0 >> $8
+ ld a, HIGH(PointerTable_c0e0)
adc $0
ld h, a
ld a, [hli]
@@ -120,7 +120,7 @@ Func_c0f1: ; c0f1 (3:40f1)
jr Func_c10a
Func_c10a: ; c10a (3:410a)
- ld hl, $d0c6
+ ld hl, wd0c6
ld a, [hli]
ld h, [hl]
ld l, a
@@ -147,13 +147,13 @@ CloseDialogueBox: ; c111 (3:4111)
Func_c135: ; c135 (3:4135)
push hl
farcall Func_80028
- ld hl, $d0c1
+ ld hl, wd0c1
res 0, [hl]
pop hl
ret
Func_c141: ; c141 (3:4141)
- ld hl, $d0c2
+ ld hl, wd0c2
ld a, [hl]
or a
ret z
@@ -219,11 +219,11 @@ Func_c1a0: ; c1a0 (3:41a0)
Func_c1a4: ; c1a4 (3:41a4)
xor a
- call Func_040c
+ call SetBGP
xor a
- call Set_OBP0
+ call SetOBP0
xor a
- call Set_OBP1
+ call SetOBP1
ret
Func_c1b1: ; c1b1 (3:41b1)
@@ -266,12 +266,12 @@ Func_c1f8: ; c1f8 (3:41f8)
ld [wd111], a
ld [wd112], a
ld [wd3b8], a
- call EnableExtRAM
- ld a, [$a007]
+ call EnableSRAM
+ ld a, [sa007]
ld [wd421], a
- ld a, [$a006]
+ ld a, [sa006]
ld [wTextSpeed], a
- call DisableExtRAM
+ call DisableSRAM
farcall Func_10756
ret
@@ -299,22 +299,22 @@ Func_c241: ; c241 (3:4241)
ret
Func_c251: ; c251 (3:4251)
- ldh a, [$ffb0]
+ ldh a, [hffb0]
push af
ld a, $1
jr asm_c25d
Func_c258: ; c258 (3:4258)
- ldh a, [$ffb0]
+ ldh a, [hffb0]
push af
ld a, $2
asm_c25d
- ldh [$ffb0], a
+ ldh [hffb0], a
push hl
call Func_c268
pop hl
pop af
- ldh [$ffb0], a
+ ldh [hffb0], a
ret
Func_c268: ; c268 (3:4268)
@@ -341,7 +341,7 @@ Unknown_c27c: ; c27c (3:427c)
Func_c280: ; c280 (3:4280)
call Func_c228
call Func_3ca0
- call Func_099c
+ call InitSpritePositions
ld hl, wVBlankOAMCopyToggle
inc [hl]
call EnableLCD
@@ -352,7 +352,7 @@ Func_c280: ; c280 (3:4280)
Func_c29b: ; c29b (3:429b)
push hl
- ld hl, $d0c1
+ ld hl, wd0c1
or [hl]
ld [hl], a
pop hl
@@ -370,7 +370,7 @@ Func_c2a3: ; c2a3 (3:42a3)
call Func_2275
farcall Func_12ba7
call Func_3ca0
- call Func_099c
+ call InitSpritePositions
ld a, $1
ld [wVBlankOAMCopyToggle], a
call EnableLCD
@@ -397,20 +397,20 @@ Func_c2db: ; c2db (3:42db)
ld a, PLAYER_TURN
ldh [hWhoseTurn], a
call Func_c241
- call Func_04a2
+ call EmptyScreen
ld a, [wd111]
push af
farcall Func_80000
pop af
ld [wd111], a
- ld hl, $d0c1
+ ld hl, wd0c1
res 0, [hl]
call Func_c34e
farcall Func_12c5e
farcall Func_1c6f8
- ld hl, $d0c1
+ ld hl, wd0c1
res 7, [hl]
- ld hl, $d10f
+ ld hl, wd10f
ld a, [hli]
or [hl]
jr z, .asm_c323
@@ -437,9 +437,9 @@ Func_c335: ; c335 (3:4335)
ld [wd10c], a
ld a, [wOBP1]
ld [wd10d], a
- ld hl, $cb30
- ld de, $d0cc
- ld bc, $0040
+ ld hl, wObjectPalettesCGB
+ ld de, wd0cc
+ ld bc, 8 * CGB_PAL_SIZE
call CopyDataHLtoDE_SaveRegisters
ret
@@ -448,11 +448,11 @@ Func_c34e: ; c34e (3:434e)
ld [wOBP0], a
ld a, [wd10d]
ld [wOBP1], a
- ld hl, $d0cc
- ld de, $cb30
- ld bc, $0040
+ ld hl, wd0cc
+ ld de, wObjectPalettesCGB
+ ld bc, 8 * CGB_PAL_SIZE
call CopyDataHLtoDE_SaveRegisters
- call Func_0404
+ call SetFlushAllPalettes
ret
Func_c36a: ; c36a (3:436a)
@@ -580,7 +580,7 @@ Func_c4b9: ; c4b9 (3:44b9)
ld [wd337], a
ld a, $0
farcall Func_1299f
- ld a, [wd4cf]
+ ld a, [wWhichSprite]
ld [wd336], a
ld b, $2
ld a, [wCurMap]
@@ -607,7 +607,7 @@ Func_c4b9: ; c4b9 (3:44b9)
Func_c510: ; c510 (3:4510)
ld a, [wd336]
- ld [wd4cf], a
+ ld [wWhichSprite], a
ld a, [wd335]
bit 4, a
ret nz
@@ -630,7 +630,7 @@ Func_c510: ; c510 (3:4510)
Func_c53d: ; c53d (3:453d)
ld a, [wd336]
- ld [wd4cf], a
+ ld [wWhichSprite], a
ld a, [wd335]
bit 0, a
call nz, Func_c687
@@ -641,7 +641,7 @@ Func_c53d: ; c53d (3:453d)
Func_c554: ; c554 (3:4554)
ld a, [wd336]
- ld [wd4cf], a
+ ld [wWhichSprite], a
ld a, [wCurMap]
cp OVERWORLD_MAP
jr nz, .asm_c566
@@ -656,8 +656,8 @@ Func_c554: ; c554 (3:4554)
ld d, a
ld a, [wSCYBuffer]
ld e, a
- ld c, $2
- call ModifyUnknownOAMBufferProperty
+ ld c, SPRITE_ANIM_COORD_X
+ call GetSpriteAnimBufferProperty
ld a, [wd332]
sub d
add $8
@@ -680,8 +680,8 @@ Func_c58b: ; c58b (3:458b)
call GetFloorObjectFromPos
and $10
push af
- ld c, $f
- call ModifyUnknownOAMBufferProperty
+ ld c, SPRITE_ANIM_FIELD_0F
+ call GetSpriteAnimBufferProperty
pop af
ld a, [hl]
jr z, .asm_c5a7
@@ -740,7 +740,7 @@ Unknown_c5e5: ; c5e5 (3:45e5)
Func_c5e9: ; c5e9 (3:45e9)
push bc
ld a, [wd336]
- ld [wd4cf], a
+ ld [wWhichSprite], a
ld a, [wd337]
ld b, a
ld a, [wd334]
@@ -759,8 +759,8 @@ Func_c5fe: ; c5fe (3:45fe)
StartScriptedMovement: ; c607 (3:4607)
push bc
ld a, [wd336]
- ld [wd4cf], a
- ld a, [$d339]
+ ld [wWhichSprite], a
+ ld a, [wd339]
call FindScriptedMovementWithOffset
call AttemptScriptedMovement
pop bc
@@ -772,13 +772,13 @@ AttemptScriptedMovement: ; c619 (3:4619)
push bc
ld a, b
cp $1f
- jr nc, .quitMovement
+ jr nc, .quit_movement
ld a, c
cp $1f
- jr nc, .quitMovement
+ jr nc, .quit_movement
call GetFloorObjectFromPos
and $40 | $80 ; the two impassable objects found in the floor map
- jr nz, .quitMovement
+ jr nz, .quit_movement
ld a, b
ld [wPlayerXCoord], a
ld a, c
@@ -788,14 +788,14 @@ AttemptScriptedMovement: ; c619 (3:4619)
ld [wd335], a
ld a, $10
ld [wd338], a
- ld c, $f
- call ModifyUnknownOAMBufferProperty
+ ld c, SPRITE_ANIM_FIELD_0F
+ call GetSpriteAnimBufferProperty
set 2, [hl]
- ld c, $e
- call ModifyUnknownOAMBufferProperty
+ ld c, SPRITE_ANIM_MOVEMENT_COUNTER
+ call GetSpriteAnimBufferProperty
ld a, $4
ld [hl], a
-.quitMovement
+.quit_movement
pop bc
pop hl
ret
@@ -840,9 +840,9 @@ Func_c66c: ; c66c (3:466c)
Func_c687: ; c687 (3:4687)
push bc
- ld a, [$d33a]
+ ld a, [wd33a]
ld c, a
- ld a, [$d339]
+ ld a, [wd339]
call Func_c694
pop bc
ret
@@ -887,7 +887,7 @@ Func_c694: ; c694 (3:4694)
Func_c6cc: ; c6cc (3:46cc)
push hl
- ld hl, $d332
+ ld hl, wd332
add [hl]
ld [hl], a
pop hl
@@ -895,7 +895,7 @@ Func_c6cc: ; c6cc (3:46cc)
Func_c6d4: ; c6d4 (3:46d4)
push hl
- ld hl, $d333
+ ld hl, wd333
add [hl]
ld [hl], a
pop hl
@@ -917,23 +917,23 @@ Func_c6dc: ; c6dc (3:46dc)
Func_c6f7: ; c6f7 (3:46f7)
ld a, [wd336]
- ld [wd4cf], a
- ld c, $f
- call ModifyUnknownOAMBufferProperty
+ ld [wWhichSprite], a
+ ld c, SPRITE_ANIM_FIELD_0F
+ call GetSpriteAnimBufferProperty
res 2, [hl]
- ld c, $e
- call ModifyUnknownOAMBufferProperty
+ ld c, SPRITE_ANIM_MOVEMENT_COUNTER
+ call GetSpriteAnimBufferProperty
ld a, $ff
ld [hl], a
ret
Func_c70d: ; c70d (3:470d)
push hl
- ld hl, $d0bb
+ ld hl, wd0bb
ld a, [wCurMap]
cp [hl]
jr z, .asm_c71c
- ld hl, $d0b4
+ ld hl, wd0b4
set 4, [hl]
.asm_c71c
pop hl
@@ -977,8 +977,8 @@ Func_c74d: ; c74d (3:474d)
ret
MainMenu_c75a: ; c75a (3:475a)
- call Func_379b
- ld a, MUSIC_PAUSEMENU
+ call PauseSong
+ ld a, MUSIC_PAUSE_MENU
call PlaySong
call Func_c797
.asm_c765
@@ -1003,7 +1003,7 @@ MainMenu_c75a: ; c75a (3:475a)
call Func_c32b
jr .asm_c765
.asm_c793
- call Func_37a0
+ call ResumeSong
ret
Func_c797: ; c797 (3:4797)
@@ -1057,7 +1057,7 @@ Func_c7e5: ; c7e5 (3:47e5)
ret
PC_c7ea: ; c7ea (3:47ea)
- ld a, MUSIC_PCMAINMENU
+ ld a, MUSIC_PC_MAIN_MENU
call PlaySong
call Func_c241
call $4915
@@ -1105,14 +1105,14 @@ Func_c891: ; c891 (3:4891)
ld a, [wd0c1]
bit 0, a
jr z, .asm_c8a1
- ld hl, $d3b9
+ ld hl, wd3b9
ld a, [hli]
or [hl]
call nz, Func_c135
.asm_c8a1
xor a
- ld hl, $d3b9
+ ld hl, wd3b9
ld [hli], a
ld [hl], a
pop hl
@@ -1132,7 +1132,7 @@ Func_c8ba: ; c8ba (3:48ba)
ld a, [wd0c1]
bit 0, a
jr z, .asm_c8d4
- ld hl, $d3b9
+ ld hl, wd3b9
ld a, [hli]
cp e
jr nz, .asm_c8d1
@@ -1144,7 +1144,7 @@ Func_c8ba: ; c8ba (3:48ba)
call Func_c135
.asm_c8d4
- ld hl, $d3b9
+ ld hl, wd3b9
ld [hl], e
inc hl
ld [hl], d
@@ -1173,7 +1173,7 @@ Func_c8ed: ; c8ed (3:c8ed)
jr z, .asm_c90e
push hl
xor a
- ld hl, $d3b9
+ ld hl, wd3b9
ld [hli], a
ld [hl], a
pop hl
@@ -1210,7 +1210,7 @@ Func_c926: ; c926 (3:4926)
Func_c935: ; c935 (3:4935)
push hl
- ld hl, $d0c6
+ ld hl, wd0c6
ld [hl], c
inc hl
ld [hl], b
@@ -1233,7 +1233,7 @@ Func_c943: ; c943 (3:4943)
ld [wd4c5], a
ld a, $4
ld [wd4c6], a
- ld de, $d3ab
+ ld de, wd3ab
ld bc, $0006
call Func_3bf5
ld a, [wd3ab]
@@ -1524,15 +1524,15 @@ Func_cad8: ; cad8 (3:4ad8)
.asm_caff
ld a, $c
- farcallx $4, $4a70
+ farcall $4, $4a70
.asm_cb05
ld a, $b
- farcallx $4, $4a70
+ farcall $4, $4a70
.asm_cb0b
ld a, $a
- farcallx $4, $4a70
+ farcall $4, $4a70
.asm_cb11
pop af
@@ -1627,7 +1627,7 @@ IncreaseOWScriptPointer: ; cc7a (3:4c7a)
add c
ld [wOWScriptPointer], a
ld a, [wOWScriptPointer+1]
- adc a, 00
+ adc 0
ld [wOWScriptPointer+1], a
ret
@@ -1669,12 +1669,12 @@ GetOWSArgsAfterPointer: ; cca0 (3:4ca0)
Func_ccb3: ; ccb3 (3:4cb3)
ld a, $ff
- ld [$d415], a
+ ld [wd415], a
ret
Func_ccb9: ; ccb9 (3:4cb9)
xor a
- ld [$d415], a
+ ld [wd415], a
ret
OWScript_EndScriptLoop1: ; ccbe (3:4cbe)
@@ -1724,7 +1724,7 @@ OWScript_AskQuestionJump: ; cce9 (3:4ce9)
ld h, b
call Func_c8ed
ld a, [hCurrentMenuItem]
- ld [$d415], a
+ ld [wd415], a
jr c, .asm_ccfe
call GetOWSArgs3AfterPointer
jr z, .asm_ccfe
@@ -1745,7 +1745,7 @@ OWScript_StartBattle: ; cd01 (3:4d01)
ld a, [wcc19]
cp $ff
jr nz, .asm_cd26
- ld a, [$d695]
+ ld a, [wd695]
ld c, a
ld b, $0
ld hl, $4d63
@@ -1759,25 +1759,25 @@ OWScript_StartBattle: ; cd01 (3:4d01)
ld a, [hl]
asm_cd2f
ld [wd0c4], a
- ld [$cc14], a
+ ld [wcc14], a
push af
farcall Func_1c557
ld [wd0c5], a
pop af
farcall Func_118a7
- ld a, $1
- ld [wd0b5], a
+ 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, [$d696]
+ ld a, [wd696]
farcall Func_118bf
ld a, $16
ld [wMatchStartTheme], a
- ld a, [$d696]
+ ld a, [wd696]
jr asm_cd2f
Unknown_dd63: ; cd4f (3:4d4f)
@@ -1794,14 +1794,14 @@ Func_cd66: ; cd66 (3:4d66)
ret
Func_cd76: ; cd76 (3:4d76)
- ld a, $2
- ld [wd0b5], a
+ ld a, GAME_EVENT_BATTLE_CENTER
+ ld [wGameEvent], a
ld hl, wd0b4
set 6, [hl]
jp IncreaseOWScriptPointerBy1
Func_cd83: ; cd83 (3:4d83)
- ld a, [$d415]
+ ld a, [wd415]
or a
jr nz, .asm_cd8c
call GetOWSArgs3AfterPointer
@@ -1826,7 +1826,7 @@ Unknown_cd98:
jp IncreaseOWScriptPointerBy7
Func_cda8: ; cda8 (3:4da8)
- ld a, [$d415]
+ ld a, [wd415]
or a
jr nz, .asm_cdb1
call GetOWSArgs3AfterPointer
@@ -1859,7 +1859,7 @@ Func_cdd8: ; cdd8 (3:4dd8)
push af
ld a, [wd3ab]
push af
- ld a, [$d696]
+ ld a, [wd696]
ld [wd3ab], a
call Func_39c3
call Func_4dd1
@@ -1874,14 +1874,14 @@ Func_cdf5: ; cdf5 (3:4df5)
push af
ld a, [wd3ab]
push af
- ld a, [$d696]
+ ld a, [wd696]
ld [wd3ab], a
ld a, c
- ld [$d3ac], a
+ ld [wd3ac], a
ld a, b
- ld [$d3ad], a
+ ld [wd3ad], a
ld a, $2
- ld [$d3ae], a
+ ld [wd3ae], a
ld a, [wd3ab]
farcall Func_11857
farcall Func_1c485
@@ -1923,7 +1923,7 @@ Func_ce52: ; ce52 (3:4e52)
push af
ld a, [wd3ab]
push af
- ld a, [$d696]
+ ld a, [wd696]
asm_ce5d
ld [wd3ab], a
call Func_39c3
@@ -1952,7 +1952,7 @@ Func_ce84: ; ce84 (3:4e84)
call Func_c135
jp IncreaseOWScriptPointerBy1
-; args: booster pack index, booster pack index, boosterpack index
+; args: booster pack index, booster pack index, booster pack index
OWScript_GiveBoosterPacks: ; ce8a (3:4e8a)
xor a
ld [wd117], a
@@ -2008,7 +2008,7 @@ Func_cee2: ; cee2 (3:4ee2)
jr z, .asm_cf09
or a
jr nz, .asm_cef0
- ld a, [$d697]
+ ld a, [wd697]
.asm_cef0
push af
@@ -2027,12 +2027,12 @@ Func_cee2: ; cee2 (3:4ee2)
Func_cf0c: ; cf0c (3:4f0c)
ld a, c
- call Func_1ce1
+ call GetCardCountInCollectionAndDecks
jr asm_cf16
Func_cf12: ; cf12 (3:4f12)
ld a, c
- call Func_1d1d
+ call GetCardCountInCollection
asm_cf16
or a
@@ -2055,7 +2055,7 @@ Func_cf2d: ; cf2d (3:4f2d)
push bc
call IncreaseOWScriptPointerBy1
pop bc
- call Func_1caa
+ call GetRawAmountOfCardsOwned
ld a, h
cp b
jr nz, .asm_cf3b
@@ -2070,7 +2070,7 @@ Func_cf3f: ; cf3f (3:4f3f)
ld a, c
or a
jr nz, .asm_cf46
- ld a, [$d697]
+ ld a, [wd697]
.asm_cf46
call AddCardToCollection
@@ -2078,7 +2078,7 @@ Func_cf3f: ; cf3f (3:4f3f)
Func_cf4c: ; cf4c (3:4f4c)
ld a, c
- call Func_1d91
+ call RemoveCardFromCollection
jp IncreaseOWScriptPointerBy2
Func_cf53: ; cf53 (3:4f53)
@@ -2086,7 +2086,7 @@ Func_cf53: ; cf53 (3:4f53)
ld b, $0
.asm_cf57
ld a, c
- call Func_1d1d
+ call GetCardCountInCollection
add b
ld b, a
inc c
@@ -2114,12 +2114,12 @@ Func_cf7b: ; cf7b (3:4f7b)
.asm_cf7d
push bc
ld a, c
- call Func_1d1d
+ call GetCardCountInCollection
jr c, .asm_cf8c
ld b, a
.asm_cf85
ld a, c
- call Func_1d91
+ call RemoveCardFromCollection
dec b
jr nz, .asm_cf85
@@ -2212,14 +2212,14 @@ Func_cfd4: ; cfd4 (3:4fd4)
Func_d00b: ; d00b (3:500b)
sla c
ld b, $0
- ld hl, wce3f
+ ld hl, wTxRam2
add hl, bc
push hl
call Func_ca69
dec hl
ld e, a
ld d, $0
- call Func_2f45
+ call GetCardName
pop hl
ld [hl], e
inc hl
@@ -2229,21 +2229,21 @@ Func_d00b: ; d00b (3:500b)
Func_d025: ; d025 (3:5025)
call Func_ca69
dec hl
- call Func_1ce1
+ call GetCardCountInCollectionAndDecks
jp c, Func_cf67
jp Func_cf6d
Func_d032: ; d032 (3:5032)
call Func_ca69
dec hl
- call Func_1d1d
+ call GetCardCountInCollection
jp c, Func_cf67
jp Func_cf6d
Func_d03f: ; d03f (3:503f)
call Func_ca69
dec hl
- call Func_1d91
+ call RemoveCardFromCollection
jp IncreaseOWScriptPointerBy1
OWScript_ScriptJump: ; d049 (3:5049)
@@ -2262,9 +2262,9 @@ Func_d055: ; d055 (3:5055)
OWScript_MovePlayer: ; 505c (3:505c)
ld a, c
- ld [$d339], a
+ ld [wd339], a
ld a, b
- ld [$d33a], a
+ ld [wd33a], a
call StartScriptedMovement
.asm_d067
call DoFrameIfLCDEnabled
@@ -2387,7 +2387,7 @@ Func_d125: ; d125 (3:5125)
Func_d135: ; d135 (3:5135)
sla c
ld b, $0
- ld hl, wce3f
+ ld hl, wTxRam2
add hl, bc
push hl
ld a, [wd32e]
@@ -2415,10 +2415,10 @@ Func_d16b: ; d16b (3:516b)
push de
sla c
ld b, $0
- ld hl, wce3f
+ ld hl, wTxRam2
add hl, bc
push hl
- ld a, [$d696]
+ ld a, [wd696]
farcall Func_11893
pop hl
ld a, [wd0c8]
@@ -2470,11 +2470,11 @@ asm_d1c6
ld d, $0
add hl, de
ld a, [hli]
- ld [$d697], a
+ ld [wd697], a
ld a, [hli]
- ld [wce3f], a
+ ld [wTxRam2], a
ld a, [hl]
- ld [wce40], a
+ ld [wTxRam2 + 1], a
jp IncreaseOWScriptPointerBy1
INCROM $d1dc, $d209
@@ -2521,7 +2521,7 @@ Func_d24c: ; d24c (3:524c)
ld hl, $525e
xor a
call Func_d28c
- ld a, [$d695]
+ ld a, [wd695]
ld c, a
call Func_ca8f
halt
@@ -2539,7 +2539,7 @@ Func_d271: ; d271 (3:5271)
INCROM $d27b, $d28c
Func_d28c: ; d28c (3:528c)
- ld [$d416], a
+ ld [wd416], a
push hl
call Func_c241
call Func_c915
@@ -2566,12 +2566,12 @@ Func_d28c: ; d28c (3:528c)
push hl
ld h, [hl]
ld l, a
- ld a, [$d416]
+ ld a, [wd416]
farcall Func_111e9
pop hl
inc hl
ld a, [hli]
- ld [$d417], a
+ ld [wd417], a
push hl
.asm_d2c1
@@ -2581,7 +2581,7 @@ Func_d28c: ; d28c (3:528c)
ld a, [hCurrentMenuItem]
cp e
jr z, .asm_d2d9
- ld a, [$d417]
+ ld a, [wd417]
or a
jr z, .asm_d2c1
ld e, a
@@ -2607,9 +2607,9 @@ Func_d28c: ; d28c (3:528c)
jr z, .asm_d2f5
add hl, bc
ld a, [hli]
- ld [wce3f], a
+ ld [wTxRam2], a
ld a, [hl]
- ld [wce40], a
+ ld [wTxRam2 + 1], a
.asm_d2f5
ret
@@ -2618,12 +2618,12 @@ Func_d2f6: ; d2f6 (3:52f6)
ld hl, $530c
xor a
call Func_d28c
- ld a, [$d694]
+ ld a, [wd694]
ld c, a
call Func_ca8f
ld [hl], l
xor a
- ld [$d694], a
+ ld [wd694], a
jp IncreaseOWScriptPointerBy1
; 0xd30c
@@ -2631,9 +2631,9 @@ Func_d2f6: ; d2f6 (3:52f6)
Func_d317: ; d317 (3:5317)
ld hl, $532b
- ld a, [$d694]
+ ld a, [wd694]
call Func_d28c
- ld a, [$d694]
+ ld a, [wd694]
ld c, a
call Func_ca8f
ld [hl], l
@@ -2645,10 +2645,10 @@ Func_d317: ; d317 (3:5317)
DeckMachine_d336: ; d336 (3:5336)
push bc
call Func_c2a3
- call Func_379b
- ld a, MUSIC_DECKMACHINE
+ call PauseSong
+ ld a, MUSIC_DECK_MACHINE
call PlaySong
- call Func_04a2
+ call EmptyScreen
xor a
ldh [hSCX], a
ldh [hSCY], a
@@ -2665,7 +2665,7 @@ DeckMachine_d336: ; d336 (3:5336)
.asm_d360
farcall Func_b19d
.asm_d364
- call Func_37a0
+ call ResumeSong
call Func_c2d4
jp IncreaseOWScriptPointerBy2
@@ -2707,8 +2707,8 @@ Func_d39d: ; d39d (3:539d)
jr .asm_d3b6
.asm_d3ac
- ld a, $3
- ld [wd0b5], a
+ ld a, GAME_EVENT_GIFT_CENTER
+ ld [wGameEvent], a
ld hl, wd0b4
set 6, [hl]
@@ -2717,8 +2717,8 @@ Func_d39d: ; d39d (3:539d)
Func_d3b9: ; d3b9 (3:53b9)
call Func_3917
- ld a, $4
- ld [wd0b5], a
+ ld a, GAME_EVENT_CREDITS
+ ld [wGameEvent], a
ld hl, wd0b4
set 6, [hl]
jp IncreaseOWScriptPointerBy1
@@ -2732,7 +2732,7 @@ Func_d3d1: ; d3d1 (3:53d1)
jp IncreaseOWScriptPointerBy1
Func_d3d4: ; d3d4 (3:53d4)
- ld a, [$d693]
+ ld a, [wd693]
bank1call Func_7576
jp IncreaseOWScriptPointerBy1
@@ -2777,11 +2777,11 @@ Func_d41d: ; d41d (3:541d)
jp IncreaseOWScriptPointerBy1
Func_d423: ; d423 (3:5423)
- call Func_379b
+ call PauseSong
jp IncreaseOWScriptPointerBy1
Func_d429: ; d429 (3:5429)
- call Func_37a0
+ call ResumeSong
jp IncreaseOWScriptPointerBy1
Func_d42f: ; d42f (3:542f)
@@ -2794,8 +2794,8 @@ Func_d435: ; d435 (3:5435)
jp IncreaseOWScriptPointerBy2
Func_d43d: ; d43d (3:543d)
- ld a, $6
- ld [wd0b5], a
+ ld a, GAME_EVENT_CHALLENGE_MACHINE
+ ld [wGameEvent], a
ld hl, wd0b4
set 6, [hl]
jp IncreaseOWScriptPointerBy1
@@ -2981,11 +2981,11 @@ WaterClubMovePlayer: ; e13f (3:613f)
jp Func_c926
WaterClubAfterDuel: ;e157 (3:6157)
- ld hl, .afterDuelTable
+ ld hl, .after_duel_table
call FindEndOfBattleScript
ret
-.afterDuelTable
+.after_duel_table
dw $1f1f
dw OWSequence_BeatSara
dw OWSequence_LostToSara
@@ -3009,17 +3009,17 @@ OWSequence_Sara: ; e177 (3:6177)
tx Text042c
run_script OWScript_AskQuestionJump
tx Text042d
- dw .yesDuel
+ dw .yes_duel
run_script OWScript_PrintTextString
tx Text042e
run_script OWScript_EndScriptCloseText
-.yesDuel
+.yes_duel
run_script OWScript_PrintTextString
tx Text042f
run_script OWScript_StartBattle
db 2
db WATERFRONT_POKEMON_DECK - 2 ; 6189
- db MUSIC_DUELTHEME1
+ db MUSIC_DUEL_THEME_1
run_script OWScript_EndScriptCloseText
OWSequence_BeatSara: ; e18c (3:618c)
@@ -3047,17 +3047,17 @@ OWSequence_Amanda: ; e19e (03:619e)
tx Text0433
run_script OWScript_AskQuestionJump
tx Text0434
- dw .yesDuel
+ dw .yes_duel
run_script OWScript_PrintTextString
tx Text0435
run_script OWScript_EndScriptCloseText
-.yesDuel
+.yes_duel
run_script OWScript_PrintTextString
tx Text0436
run_script OWScript_StartBattle
db 03
db LONELY_FRIENDS_DECK - 2
- db MUSIC_DUELTHEME1
+ db MUSIC_DUEL_THEME_1
run_script OWScript_EndScriptCloseText
OWSequence_BeatAmanda: ; e1b3 (03:61b3)
@@ -3086,20 +3086,20 @@ OWSequence_Joshua:
start_script
run_script OWScript_JumpIfFlagNotSet
db FLAG_BEAT_AMANDA
- dw .saraAndAmandaNotBeaten
+ dw .sara_and_amanda_not_beaten
run_script OWScript_JumpIfFlagNotSet
db FLAG_BEAT_SARA
- dw .saraAndAmandaNotBeaten
+ dw .sara_and_amanda_not_beaten
run_script OWScript_ScriptJump
- dw .beatSaraAndAmanda
-.saraAndAmandaNotBeaten
+ 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
-.beatSaraAndAmanda
+.beat_sara_and_amanda
run_script OWScript_JumpIfFlagSet
db $33
dw $623c
@@ -3120,23 +3120,23 @@ FindEndOfBattleScript: ; e52c (3:652c)
ld c, $0
ld a, [wd0c3]
or a
- jr z, .playerWon
+ jr z, .player_won
ld c, $2
-.playerWon
+.player_won
ld a, [wd0c4]
ld b, a
ld de, $0005
-.checkEnemyByteLoop
+.check_enemy_byte_loop
ld a, [hli]
or a
ret z
cp b
- jr z, .foundEnemy
+ jr z, .found_enemy
add hl, de
- jr .checkEnemyByteLoop
+ jr .check_enemy_byte_loop
-.foundEnemy
+.found_enemy
ld a, [hli]
ld [wd3ab], a
ld b, $0
@@ -3179,7 +3179,7 @@ Func_f580: ; f580 (3:7580)
.asm_f5ac
ld [wd3ab], a
- ld [$d696], a
+ ld [wd696], a
ret
; 0xf5b3
diff --git a/src/engine/bank4.asm b/src/engine/bank4.asm
index 29d96fc..883065a 100755..100644
--- a/src/engine/bank4.asm
+++ b/src/engine/bank4.asm
@@ -1,14 +1,14 @@
Func_10000: ; 10000 (4:4000)
ld a, $0
ld [wTileMapFill], a
- call Func_04a2
+ call EmptyScreen
call Func_2119
ld de, $307f
call Func_2275
call Set_OBJ_8x8
xor a
- ld [$ff92], a
- ld [$ff93], a
+ ldh [hSCX], a
+ ldh [hSCY], a
ld a, [wLCDC]
bit 7, a
jr nz, .asm_10025
@@ -18,27 +18,27 @@ Func_10000: ; 10000 (4:4000)
.asm_10025
call Func_1288c
- call Func_099c
+ call InitSpritePositions
ld a, $1
ld [wVBlankOAMCopyToggle], a
ret
Func_10031: ; 10031 (4:4031)
- ld a, [$ff81]
+ ldh a, [hBankSRAM]
push af
ld a, $1
- call BankswitchRAM
+ call BankswitchSRAM
call $4cbb
- call DisableExtRAM
+ call DisableSRAM
call $4b28
- call Func_0404
+ call SetFlushAllPalettes
call EnableLCD
call DoFrameIfLCDEnabled
call $4cea
- call Func_0404
+ call SetFlushAllPalettes
pop af
- call BankswitchRAM
- call DisableExtRAM
+ call BankswitchSRAM
+ call DisableSRAM
ret
Func_10059: ; 10059 (4:4059)
@@ -54,7 +54,7 @@ Medal_1029e: ; 1029e (4:429e)
ld a, [wd291]
push af
push bc
- call Func_379b
+ call PauseSong
ld a, MUSIC_STOP
call PlaySong
farcall Func_70000
@@ -71,9 +71,9 @@ Medal_1029e: ; 1029e (4:429e)
ld hl, Unknown_1030b
add hl, bc
ld a, [hli]
- ld [wce3f], a
+ ld [wTxRam2], a
ld a, [hl]
- ld [wce40], a
+ ld [wTxRam2 + 1], a
call $4031
ld a, MUSIC_MEDAL
call PlaySong
@@ -93,7 +93,7 @@ Medal_1029e: ; 1029e (4:429e)
ldtx hl, WonTheMedalText
call Func_2c73
call Func_3c96
- call Func_37a0
+ call ResumeSong
pop af
ld [wd291], a
ret
@@ -109,7 +109,7 @@ BoosterPack_1031b: ; 1031b (4:431b)
call DisableLCD
call $4000
xor a
- ld [wFrameType], a
+ ld [wTextBoxFrameType], a
pop bc
push bc
ld b, $0
@@ -128,16 +128,16 @@ BoosterPack_1031b: ; 1031b (4:431b)
call $70ca
pop hl
ld a, [hli]
- ld [wce43], a
+ ld [wTxRam3], a
xor a
- ld [wce44], a
+ ld [wTxRam3 + 1], a
ld a, [hli]
- ld [wce3f], a
+ ld [wTxRam2], a
ld a, [hl]
- ld [wce40], a
+ ld [wTxRam2 + 1], a
call $4031
- call Func_379b
- ld a, MUSIC_BOOSTERPACK
+ call PauseSong
+ ld a, MUSIC_BOOSTER_PACK
call PlaySong
pop bc
ld a, c
@@ -150,17 +150,17 @@ BoosterPack_1031b: ; 1031b (4:431b)
.asm_10373
call Func_2c73
call Func_3c96
- call Func_37a0
+ call ResumeSong
ldtx hl, CheckedCardsInBoosterPackText
call Func_2c73
call DisableLCD
call Func_1288c
- call Func_099c
+ call InitSpritePositions
ld a, $1
ld [wVBlankOAMCopyToggle], a
ld a, $4
- ld [wFrameType], a
- farcallx $1, $7599
+ ld [wTextBoxFrameType], a
+ farcall $1, $7599
farcall Func_c1a4
call DoFrameIfLCDEnabled
pop af
@@ -179,9 +179,9 @@ Duel_Init: ; 103d3 (4:43d3)
call DisableLCD
call $4000
ld a, $4
- ld [wFrameType], a
- ld de, $000c
- ld bc, $1406
+ ld [wTextBoxFrameType], a
+ lb de, 0, 12
+ lb bc, 20, 6
call DrawRegularTextBox
ld a, [wcc19]
add a
@@ -191,22 +191,22 @@ Duel_Init: ; 103d3 (4:43d3)
ld hl, $445b
add hl, bc
ld a, [hli]
- ld [wce3f], a
+ ld [wTxRam2], a
ld a, [hli]
- ld [wce40], a
+ ld [wTxRam2 + 1], a
push hl
- ld a, [wcc16]
- ld [wce41], a
- ld a, [wcc17]
- ld [wce42], a
+ 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 [wce3f], a
+ ld [wTxRam2], a
ld c, a
ld a, [hli]
- ld [wce40], a
+ ld [wTxRam2 + 1], a
or c
jr z, .asm_10425
ld hl, $4456
@@ -214,7 +214,7 @@ Duel_Init: ; 103d3 (4:43d3)
.asm_10425
ld bc, $0703
- ld a, [wcc15]
+ ld a, [wOpponentPortrait]
call Func_3e2a ; LoadDuelistPortrait
ld a, [wMatchStartTheme]
call PlaySong
@@ -262,7 +262,7 @@ Func_10a70: ; 10a70 (4:4a70)
inc hl
dec c
jr nz, .asm_10a87
- rst $38
+ debug_ret
jr .asm_10a97
.asm_10a93
@@ -286,11 +286,11 @@ Func_10af9: ; 10af9 (4:4af9)
INCROM $10af9, $10c96
Func_10c96: ; 10c96 (4:4c96)
- ld a, [$ff81]
+ ldh a, [hBankSRAM]
push af
push bc
ld a, $1
- call BankswitchRAM
+ call BankswitchSRAM
call $4cbb
call Func_10ab4
pop bc
@@ -303,8 +303,8 @@ Func_10c96: ; 10c96 (4:4c96)
.asm_10cb0
call EnableLCD
pop af
- call BankswitchRAM
- call DisableExtRAM
+ call BankswitchSRAM
+ call DisableSRAM
ret
; 0x10cbb
@@ -322,7 +322,7 @@ Func_10dba: ; 10dba (4:4dba)
jr nc, .asm_10dca
ld a, e
ld [wd0ba], a
- ld a, [$ffb1]
+ ldh a, [hCurrentMenuItem]
cp e
jr z, .asm_10ddd
ld a, $4
@@ -345,7 +345,7 @@ Func_10e28: ; 10e28 (4:4e28)
Func_10e55: ; 10e55 (4:4e55)
ld a, [wd336]
- ld [wd4cf], a
+ ld [wWhichSprite], a
ld a, [wd33e]
or a
jr nz, .asm_10e65
@@ -484,7 +484,7 @@ LoadOverworldMapSelection: ; 10f61 (4:4f61)
ld [wd0bd], a
ld a, $0
ld [wd0be], a
- ld hl, $d0b4
+ ld hl, wd0b4
set 4, [hl]
pop bc
pop hl
@@ -495,15 +495,15 @@ INCLUDE "data/overworld_indexes.asm"
Func_10fbc: ; 10fbc (4:4fbc)
ld a, $25
farcall Func_1299f
- ld c, $2
- call ModifyUnknownOAMBufferProperty
+ 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 $2
+ cp CONSOLE_CGB
jr nz, .asm_10fd8
ld b, $37
.asm_10fd8
@@ -518,7 +518,7 @@ Func_10fde: ; 10fde (4:4fde)
ld [wd33e], a
ld a, $25
call Func_1299f
- ld a, [wd4cf]
+ ld a, [wWhichSprite]
ld [wd33b], a
ld b, $35
ld a, [wConsole]
@@ -533,15 +533,15 @@ Func_10fde: ; 10fde (4:4fde)
farcall CheckIfEventFlagSet
or a
jr nz, .asm_11015
- ld c, $f
- call ModifyUnknownOAMBufferProperty
+ ld c, SPRITE_ANIM_FIELD_0F
+ call GetSpriteAnimBufferProperty
set 7, [hl]
.asm_11015
ret
Func_11016: ; 11016 (4:5016)
ld a, [wd33b]
- ld [wd4cf], a
+ ld [wWhichSprite], a
ld a, [wd33c]
inc a
call Func_12ab5
@@ -551,9 +551,9 @@ Func_11024: ; 11024 (4:5024)
ld a, $57
call PlaySFX
ld a, [wd336]
- ld [wd4cf], a
- ld c, $f
- call ModifyUnknownOAMBufferProperty
+ ld [wWhichSprite], a
+ ld c, SPRITE_ANIM_FIELD_0F
+ call GetSpriteAnimBufferProperty
set 2, [hl]
ld hl, Unknown_1229f
ld a, [wd33d]
@@ -583,7 +583,7 @@ Func_11024: ; 11024 (4:5024)
Func_11060: ; 11060 (4:5060)
ld a, [wd336]
- ld [wd4cf], a
+ ld [wWhichSprite], a
ld a, [wd341]
or a
jp nz, Func_11184
@@ -625,8 +625,8 @@ Func_11060: ; 11060 (4:5060)
Func_110a6: ; 110a6 (4:50a6)
push hl
push bc
- ld c, $2
- call ModifyUnknownOAMBufferProperty
+ ld c, SPRITE_ANIM_COORD_X
+ call GetSpriteAnimBufferProperty
pop bc
ld a, b
sub [hl]
@@ -681,7 +681,7 @@ Func_11102: ; 11102 (4:5102)
ld [wd341], a
ld e, a
ld d, $0
- ld hl, $d343
+ ld hl, wd343
xor a
ld [hli], a
bit 7, [hl]
@@ -704,7 +704,7 @@ Func_11102: ; 11102 (4:5102)
ld [wd345], a
ld a, b
ld [wd346], a
- ld hl, $d344
+ ld hl, wd344
ld a, $1
bit 7, [hl]
jr z, .asm_1113a
@@ -718,7 +718,7 @@ Func_1113e: ; 1113e (4:513e)
ld [wd341], a
ld e, a
ld d, $0
- ld hl, $d345
+ ld hl, wd345
xor a
ld [hli], a
bit 7, [hl]
@@ -740,7 +740,7 @@ Func_1113e: ; 1113e (4:513e)
ld [wd343], a
ld a, b
ld [wd344], a
- ld hl, $d346
+ ld hl, wd346
ld a, $2
bit 7, [hl]
jr z, .asm_11175
@@ -765,8 +765,8 @@ Func_11184: ; 11184 (4:5184)
ld d, a
ld a, [wd348]
ld e, a
- ld c, $2
- call ModifyUnknownOAMBufferProperty
+ ld c, SPRITE_ANIM_COORD_X
+ call GetSpriteAnimBufferProperty
ld a, [wd343]
add d
ld d, a
@@ -784,7 +784,7 @@ Func_11184: ; 11184 (4:5184)
ld [wd347], a
ld a, e
ld [wd348], a
- ld hl, $d341
+ ld hl, wd341
dec [hl]
ret
; 0x111b3
@@ -798,7 +798,10 @@ Func_1124d: ; 1124d (4:524d)
INCROM $1124d, $11320
Func_11320: ; 11320 (4:5320)
- INCROM $11320, $11416
+ INCROM $11320, $11343
+
+Func_11343: ; 11343 (4:5343)
+ INCROM $11343, $11416
Func_11416: ; 11416 (4:5416)
INCROM $11416, $11430
@@ -830,7 +833,7 @@ Func_1157c: ; 1157c (4:557c)
ret
; 0x115a3
-
+Func_115a3: ; 115a3 (4:55a3)
INCROM $115a3, $1162a
INCLUDE "data/map_scripts.asm"
@@ -839,9 +842,9 @@ INCLUDE "data/map_scripts.asm"
Func_1184a: ; 1184a (4:584a)
; this may have been a macro
rlca
- add (PointerTable_118f5 & $ff)
+ add LOW(PointerTable_118f5)
ld l, a
- ld a, PointerTable_118f5 >> 8
+ ld a, HIGH(PointerTable_118f5)
adc $00
ld h, a
ld a, [hli]
@@ -856,7 +859,7 @@ Func_11857: ; 11857 (4:5857)
ld a, [hli]
ld [wd3ab], a
ld a, [hli]
- ld [$d3b3], a
+ ld [wd3b3], a
ld a, [hli]
ld [wd3b1], a
ld a, [hli]
@@ -912,11 +915,11 @@ Func_118a7: ; 118a7 (4:58a7)
ld bc, $0007
add hl, bc
ld a, [hli]
- ld [wcc16], a
+ ld [wOpponentName], a
ld a, [hli]
- ld [wcc17], a
+ ld [wOpponentName + 1], a
ld a, [hli]
- ld [wcc15], a
+ ld [wOpponentPortrait], a
pop bc
pop hl
ret
@@ -960,6 +963,7 @@ Func_118d3: ; 118d3 (4:58d3)
INCLUDE "data/npcs.asm"
+Func_11f4e: ; 11f4e (4:5f4e)
INCROM $11f4e, $1217b
OverworldScriptTable: ; 1217b (4:617b)
@@ -1073,43 +1077,47 @@ OverworldScriptTable: ; 1217b (4:617b)
Unknown_1229f: ; 1229f (4:629f)
INCROM $1229f, $126d1
-Func_126d1: ; 126d1 (4:66d1)
- call Func_099c
+; 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 InitSpritePositions
ld hl, wVBlankOAMCopyToggle
inc [hl]
farcall Func_70018
ld a, $ff
ld [wd627], a
-.asm_126e1
+.main_menu_loop
ld a, PLAYER_TURN
ldh [hWhoseTurn], a
farcall Func_c1f8
farcall Func_1d078
ld a, [wd628]
- ld hl, PointerTable_126fc
+ ld hl, MainMenuFunctionTable
call JumpToFunctionInTable
- jr c, .asm_126e1
- jr Func_126d1
+ jr c, .main_menu_loop ; return to main menu
+ jr _GameLoop ; virtually restart game
+; this is never reached
scf
ret
-PointerTable_126fc
- dw CardPop_12768
- dw Func_12741
- dw Func_12704
- dw Func_1277e
+MainMenuFunctionTable:
+ dw MainMenu_CardPop
+ dw MainMenu_ContinueFromDiary
+ dw MainMenu_NewGame
+ dw MainMenu_ContinueDuel
-Func_12704: ; 12704 (4:6704)
+MainMenu_NewGame: ; 12704 (4:6704)
farcall Func_c1b1
call Func_128a9
farcall Func_1996e
- call EnableExtRAM
- ld a, [$a007]
+ call EnableSRAM
+ ld a, [sa007]
ld [wd421], a
- ld a, [$a006]
+ ld a, [sa006]
ld [wTextSpeed], a
- call DisableExtRAM
+ call DisableSRAM
ld a, MUSIC_STOP
call PlaySong
farcall Func_70000
@@ -1117,31 +1125,31 @@ Func_12704: ; 12704 (4:6704)
ld [wd111], a
call Func_39fc
farcall Func_1d306
- ld a, $0
- ld [wd0b5], a
- farcallx $03, Func_383d
+ ld a, GAME_EVENT_OVERWORLD
+ ld [wGameEvent], a
+ farcall $03, ExecuteGameEvent
or a
ret
-Func_12741: ; 12741 (4:6741)
+MainMenu_ContinueFromDiary: ; 12741 (4:6741)
ld a, MUSIC_STOP
call PlaySong
call Func_11320
- jr nc, Func_12704
+ jr nc, MainMenu_NewGame
farcall Func_c1ed
farcall Func_70000
- call EnableExtRAM
+ call EnableSRAM
xor a
ld [$ba44], a
- call DisableExtRAM
- ld a, $0
- ld [wd0b5], a
- farcallx $03, Func_383d
+ call DisableSRAM
+ ld a, GAME_EVENT_OVERWORLD
+ ld [wGameEvent], a
+ farcall $03, ExecuteGameEvent
or a
ret
-CardPop_12768: ; 12768 (4:6768)
- ld a, MUSIC_CARDPOP
+MainMenu_CardPop: ; 12768 (4:6768)
+ ld a, MUSIC_CARD_POP
call PlaySong
bank1call Func_7571
farcall Func_c1a4
@@ -1151,15 +1159,15 @@ CardPop_12768: ; 12768 (4:6768)
scf
ret
-Func_1277e: ; 1277e (4:677e)
+MainMenu_ContinueDuel: ; 1277e (4:677e)
ld a, MUSIC_STOP
call PlaySong
farcall Func_c9cb
- farcallx $04, Func_3a40
+ farcall $04, Func_3a40
farcall Func_70000
- ld a, $5
- ld [wd0b5], a
- farcallx $03, Func_383d
+ ld a, GAME_EVENT_CONTINUE_DUEL
+ ld [wGameEvent], a
+ farcall $03, ExecuteGameEvent
or a
ret
; 0x1279a
@@ -1192,7 +1200,7 @@ Func_1299f: ; 1299f (4:699f)
call Func_12c05
ld [wd5d3], a
xor a
- ld [wd4cf], a
+ ld [wWhichSprite], a
call Func_3db7
ld bc, $0010
.asm_129bb
@@ -1200,12 +1208,12 @@ Func_1299f: ; 1299f (4:699f)
or a
jr z, .asm_129cf
add hl, bc
- ld a, [wd4cf]
+ ld a, [wWhichSprite]
inc a
- ld [wd4cf], a
+ ld [wWhichSprite], a
cp $10
jr nz, .asm_129bb
- rst $38
+ debug_ret
scf
jr .asm_129d6
.asm_129cf
@@ -1253,8 +1261,8 @@ Func_12a21: ; 12a21 (4:6a21)
Func_12ab5: ; 12ab5 (4:6ab5)
push hl
push af
- ld c, $5
- call ModifyUnknownOAMBufferProperty
+ ld c, SPRITE_ANIM_FIELD_05
+ call GetSpriteAnimBufferProperty
pop af
cp [hl]
pop hl
@@ -1320,11 +1328,11 @@ Func_12b13: ; 12b13 (4:6b13)
ld [wd4c5], a
adc $0
ld [hl], a
- ld de, $d23e
+ ld de, wd23e
ld bc, $0004
call Func_3bf5
pop hl
- ld de, $d23e
+ ld de, wd23e
ld a, [de]
call Func_12b6a
inc de
@@ -1422,7 +1430,7 @@ Func_12c05: ; 12c05 (4:6c05)
ld d, $0
ld a, [wd618]
ld c, a
- ld hl, $d5d8
+ ld hl, wd5d8
or a
jr z, .asm_12c22
.asm_12c15
@@ -1467,7 +1475,7 @@ Func_12c05: ; 12c05 (4:6c05)
or a
jr .asm_12c4b
.asm_12c48
- rst $38
+ debug_ret
xor a
scf
.asm_12c4b
@@ -1499,35 +1507,35 @@ Func_131d3: ; 131d3 (4:71d3)
INCROM $131d3, $1344d
Func_1344d: ; 1344d (4:744d)
- call Func_379b
+ call PauseSong
ld a, MUSIC_MEDAL
call PlaySong
ldtx hl, DefeatedFiveOpponentsText
call Func_2c73
call Func_3c96
- call Func_37a0
+ call ResumeSong
ret
; 0x13462
INCROM $13462, $13485
Func_13485: ; 13485 (4:7485)
- call EnableExtRAM
+ call EnableSRAM
ld a, [$ba68]
or a
ret z
ld a, [$ba56]
- ld [wce43], a
+ ld [wTxRam3], a
ld a, [$ba57]
- ld [wce44], a
- call DisableExtRAM
- call Func_379b
+ ld [wTxRam3 + 1], a
+ call DisableSRAM
+ call PauseSong
ld a, MUSIC_MEDAL
call PlaySong
ldtx hl, ConsecutiveWinRecordIncreasedText
call Func_2c73
call Func_3c96
- call Func_37a0
+ call ResumeSong
ret
; 0x134b1
diff --git a/src/engine/bank5.asm b/src/engine/bank5.asm
index 3f0e5a2..5820a24 100755..100644
--- a/src/engine/bank5.asm
+++ b/src/engine/bank5.asm
@@ -57,25 +57,25 @@ PointerTable_14000: ; 14000 (05:4000)
INCROM $1406a, $14226
Func_14226: ; 14226 (5:4226)
- call CreateHandCardBuffer
- ld hl, wDuelCardOrAttackList
-.checkForNextPokemon
+ call CreateHandCardList
+ ld hl, wDuelTempList
+.check_for_next_pokemon
ld a, [hli]
- ld [$ff98], a
+ ldh [hTempCardIndex_ff98], a
cp $ff
ret z
- call LoadDeckCardToBuffer1
+ call LoadCardDataToBuffer1_FromDeckIndex
ld a, [wLoadedCard1Type]
cp TYPE_ENERGY_FIRE
- jr nc, .checkForNextPokemon
+ jr nc, .check_for_next_pokemon
ld a, [wLoadedCard1Stage]
or a
- jr nz, .checkForNextPokemon
+ jr nz, .check_for_next_pokemon
push hl
- ld a, [$ff98]
- call Func_1485
+ ldh a, [hTempCardIndex_ff98]
+ call PutHandPokemonCardInPlayArea
pop hl
- jr .checkForNextPokemon
+ jr .check_for_next_pokemon
; 0x1424b
INCROM $1424b, $14663
@@ -121,13 +121,13 @@ Func_1468b: ; 1468b (5:468b)
call Func_15649
ld a, $1
call Func_14663
- farcallx $8, $67d3
+ farcall $8, $67d3
jp nc, $4776
- farcallx $8, $6790
- farcallx $8, $66a3
- farcallx $8, $637f
+ farcall $8, $6790
+ farcall $8, $66a3
+ farcall $8, $637f
ret c
- farcallx $8, $662d
+ farcall $8, $662d
ld a, $2
call Func_14663
ld a, $3
@@ -158,17 +158,17 @@ Func_1468b: ; 1468b (5:468b)
.asm_146ed
call $5eae
- farcallx $8, $66a3
- farcallx $8, $637f
+ farcall $8, $66a3
+ farcall $8, $637f
ret c
- farcallx $8, $6790
+ farcall $8, $6790
ld a, $d
- farcallx $8, $619b
+ farcall $8, $619b
ld a, $d
call Func_14663
ld a, $f
call Func_14663
- ld a, [$ce20]
+ ld a, [wce20]
and $4
jr z, .asm_14776
ld a, $1
@@ -203,18 +203,18 @@ Func_1468b: ; 1468b (5:468b)
.asm_1475b
call $5eae
- farcallx $8, $66a3
- farcallx $8, $637f
+ farcall $8, $66a3
+ farcall $8, $637f
ret c
- farcallx $8, $6790
+ farcall $8, $6790
ld a, $d
- farcallx $8, $619b
+ farcall $8, $619b
ld a, $d
call Func_14663
.asm_14776
ld a, $e
- farcallx $8, $619b
+ farcall $8, $619b
call $69f8
ret c
ld a, $5
@@ -226,23 +226,23 @@ Func_1468b: ; 1468b (5:468b)
INCROM $14786, $15636
Func_15636: ; 15636 (5:5636)
ld a, $10
- ld hl, $cda5
+ ld hl, wcda5
call ZeroData
ld a, $5
- ld [$cda6], a
+ ld [wcda6], a
ld a, $ff
- ld [$cda5], a
+ ld [wcda5], a
ret
Func_15649: ; 15649 (5:5649)
- ld a, [$cda6]
+ ld a, [wcda6]
inc a
- ld [$cda6], a
+ ld [wcda6], a
xor a
- ld [$ce20], a
- ld [$cddb], a
- ld [$cddc], a
- ld [$ce03], a
+ ld [wce20], a
+ ld [wcddb], a
+ ld [wcddc], a
+ ld [wce03], a
ld a, [wcc10]
cp $ff
jr z, .asm_156b1
@@ -252,50 +252,50 @@ Func_15649: ; 15649 (5:5649)
cp $ff
jr z, .asm_156b1
call SwapTurn
- call GetCardInDeckPosition
+ 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, [$cda7]
+ ld a, [wcda7]
bit 7, a
jr nz, .asm_156aa
inc a
- ld [$cda7], a
+ ld [wcda7], a
cp $3
jr c, .asm_156c2
- ld a, (wPlayerArenaCard & $FF)
+ ld a, DUELVARS_ARENA_CARD
call GetNonTurnDuelistVariable
call SwapTurn
- call GetCardInDeckPosition
+ call GetCardIDFromDeckIndex
call SwapTurn
ld a, e
cp MEWTWO1
jr nz, .asm_156a4
- farcallx $8, $67a9
+ farcall $8, $67a9
jr nc, .asm_156aa
.asm_156a4
xor a
- ld [$cda7], a
+ ld [wcda7], a
jr .asm_156c2
.asm_156aa
ld a, $80
- ld [$cda7], a
+ ld [wcda7], a
jr .asm_156c2
.asm_156b1
- ld a, [$cda7]
+ ld a, [wcda7]
bit 7, a
jr z, .asm_156be
inc a
- ld [$cda7], a
+ ld [wcda7], a
jr .asm_156c2
.asm_156be
xor a
- ld [$cda7], a
+ ld [wcda7], a
.asm_156c2
ret
@@ -310,10 +310,10 @@ ZeroData: ; 1575e (5:575e)
push hl
ld b, a
xor a
-.clearLoop
+.clear_loop
ld [hli], a
dec b
- jr nz, .clearLoop
+ jr nz, .clear_loop
pop hl
pop bc
pop af
diff --git a/src/engine/bank6.asm b/src/engine/bank6.asm
index 6428c3f..18e8b98 100755..100644
--- a/src/engine/bank6.asm
+++ b/src/engine/bank6.asm
@@ -5,10 +5,10 @@ INCLUDE "data/effect_commands.asm"
INCROM $18f9c, $1996e
Func_1996e: ; 1996e (6:596e)
- call EnableExtRAM
+ call EnableSRAM
ld a, PLAYER_TURN
ldh [hWhoseTurn], a
- ld hl, $a100
+ ld hl, sCardCollection
ld bc, $1607
.asm_1997b
xor a
@@ -18,17 +18,17 @@ Func_1996e: ; 1996e (6:596e)
or b
jr nz, .asm_1997b
ld a, $5
- ld hl, $a350
+ ld hl, sa350
call Func_199e0
ld a, $7
- ld hl, $a3a4
+ ld hl, sa3a4
call Func_199e0
ld a, $9
- ld hl, $a3f8
+ ld hl, sa3f8
call Func_199e0
- call EnableExtRAM
- ld hl, $a100
- ld a, $80
+ call EnableSRAM
+ ld hl, sCardCollection
+ ld a, CARD_NOT_OWNED
.asm_199a2
ld [hl], a
inc l
@@ -47,18 +47,18 @@ Func_1996e: ; 1996e (6:596e)
dec c
jr nz, .asm_199b2
ld a, $2
- ld [$a003], a
+ ld [sa003], a
ld a, $2
- ld [$a006], a
+ ld [sa006], a
ld [wTextSpeed], a
xor a
- ld [$a007], a
- ld [$a009], a
- ld [$a004], a
- ld [$a005], a
- ld [$a00a], a
+ ld [sa007], a
+ ld [sa009], a
+ ld [sa004], a
+ ld [sa005], a
+ ld [sa00a], a
farcall Func_8cf9
- call DisableExtRAM
+ call DisableSRAM
ret
Func_199e0: ; 199e0 (6:59e0)
@@ -69,9 +69,9 @@ Func_199e0: ; 199e0 (6:59e0)
jr c, .asm_19a0e
call Func_19a12
pop hl
- call EnableExtRAM
+ call EnableSRAM
push hl
- ld de, wc590
+ ld de, wDefaultText
.asm_199f3
ld a, [de]
inc de
@@ -90,7 +90,7 @@ Func_199e0: ; 199e0 (6:59e0)
ld [hli], a
dec c
jr nz, .asm_19a04
- call DisableExtRAM
+ call DisableSRAM
or a
.asm_19a0e
pop hl
@@ -99,11 +99,11 @@ Func_199e0: ; 199e0 (6:59e0)
ret
Func_19a12: ; 19a12 (6:5a12)
- ld hl, $cce9
+ ld hl, wcce9
ld a, [hli]
ld h, [hl]
ld l, a
- ld de, wc590
+ ld de, wDefaultText
call PrintTextBoxBorderLabel
ret
; 0x19a1f
@@ -145,15 +145,15 @@ Func_1a61f: ; 1a61f (6:661f)
push hl
ld e, a
ld d, $0
- call LoadCardDataToBuffer1
- call Func_379b
+ call LoadCardDataToBuffer1_FromCardID
+ call PauseSong
ld a, MUSIC_MEDAL
call PlaySong
- ld hl, $cc27
+ ld hl, wLoadedCard1Name
ld a, [hli]
ld h, [hl]
ld l, a
- bank1call Func_2ebb ; switch to bank 1, but call a home func
+ bank1call LoadTxRam2 ; switch to bank 1, but call a home func
ld a, PLAYER_TURN
ldh [hWhoseTurn], a
pop hl
@@ -162,7 +162,7 @@ Func_1a61f: ; 1a61f (6:661f)
call Func_378a
or a
jr nz, .asm_1a680
- call Func_37a0
+ call ResumeSong
bank1call $5773
ret
; 0x1a68d
diff --git a/src/engine/bank7.asm b/src/engine/bank7.asm
index 9d2d603..156d421 100755..100644
--- a/src/engine/bank7.asm
+++ b/src/engine/bank7.asm
@@ -148,8 +148,8 @@ Func_1c50a: ; 1c50a (7:450a)
xor a
ld [hli], a
ld a, [hl]
- farcallx $4, $69fd
- ld hl, $d349
+ farcall $4, $69fd
+ ld hl, wd349
dec [hl]
.asm_1c52c
@@ -329,7 +329,7 @@ Func_1c78d: ; 1c78d (7:478d)
ret
Func_1c7de: ; 1c7de (7:47de)
- ld a, [$d3b7]
+ ld a, [wc3b7]
and $20
ret
; 0x1c7e4
@@ -344,7 +344,7 @@ Func_1c83d: ; 1c83d (7:483d)
push bc
ld b, a
ld c, $a
- ld hl, $d3bb
+ ld hl, wd3bb
.asm_1c845
ld a, [hl]
or a
@@ -354,7 +354,7 @@ Func_1c83d: ; 1c83d (7:483d)
inc hl
dec c
jr nz, .asm_1c845
- rst $38
+ debug_ret
jr .asm_1c855
.asm_1c853
@@ -387,7 +387,7 @@ Func_1d078: ; 1d078 (7:5078)
call DoFrameIfLCDEnabled
call UpdateRNGSources
call $5614
- ld hl, $d635
+ ld hl, wd635
inc [hl]
call Func_378a
or a
@@ -395,7 +395,7 @@ Func_1d078: ; 1d078 (7:5078)
farcall Func_10ab4
jr .asm_1d07e
.asm_1d0ae
- ld hl, $d626
+ ld hl, wd626
ld a, [hl]
or a
jr z, .asm_1d0b8
@@ -439,10 +439,10 @@ Func_1d078: ; 1d078 (7:5078)
INCROM $1d0fa, $1d11c
Func_1d11c: ; 1d11c (7:511c)
- ld a, MUSIC_PCMAINMENU
+ ld a, MUSIC_PC_MAIN_MENU
call PlaySong
call DisableLCD
- farcallx $4, $4000
+ farcall $4, $4000
ld de, $308f
call Func_2275
call Func_3ca0
@@ -460,9 +460,9 @@ Func_1d11c: ; 1d11c (7:511c)
jr z, .asm_1d14f
ld a, $1
.asm_1d14f
- ld hl, $d636
+ ld hl, wd636
farcall Func_111e9
- farcallx $4, $4031
+ farcall $4, $4031
.asm_1d15a
call DoFrameIfLCDEnabled
call UpdateRNGSources
@@ -536,7 +536,7 @@ Credits_1d6ad: ; 1d6ad (7:56ad)
ld [wd324], a
ld a, MUSIC_CREDITS
call PlaySong
- farcallx $4, $4031
+ farcall $4, $4031
call $57fc
.asm_1d6c8
call DoFrameIfLCDEnabled
@@ -547,7 +547,7 @@ Credits_1d6ad: ; 1d6ad (7:56ad)
jr nz, .asm_1d6c8
call Func_3c96
ld a, $8
- farcallx $4, $6863
+ farcall $4, $6863
ld a, MUSIC_STOP
call PlaySong
farcall Func_10ab4
diff --git a/src/engine/bank8.asm b/src/engine/bank8.asm
index aa47756..ca52ca5 100755..100644
--- a/src/engine/bank8.asm
+++ b/src/engine/bank8.asm
@@ -3,56 +3,56 @@
; 0 - e4 is a big set of data, seems to be one entry for each card
Func_200e5: ; 200e5 (8:40e5)
- ld [$ce18], a
- call CreateHandCardBuffer
- ld hl, wDuelCardOrAttackList
- ld de, wHandCardBuffer
+ ld [wce18], a
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ ld de, wTempHandCardList
call CopyBuffer
- ld hl, wHandCardBuffer
+ ld hl, wTempHandCardList
ld a, [hli]
- ld [$ce16], a
+ ld [wce16], a
cp $ff
ret z
push hl
- ld a, [$ce18]
+ ld a, [wce18]
ld d, a
ld hl, $4000
.asm_4106
xor a
- ld [$ce21], a
+ ld [wce21], a
ld a, [hli]
cp $ff
jp z, $41b1
cp d
jp nz, .incHL5
ld a, [hli]
- ld [$ce17], a
- ld a, [$ce16]
- call LoadDeckCardToBuffer1
+ ld [wce17], a
+ ld a, [wce16]
+ call LoadCardDataToBuffer1_FromDeckIndex
cp $d2
jr nz, .asm_2012b
ld b, a
- ld a, [$ce20]
+ ld a, [wce20]
and $2
jr nz, .incHL4
ld a, b
.asm_2012b
ld b, a
- ld a, [$ce17]
+ ld a, [wce17]
cp b
jr nz, .incHL4
push hl
push de
- ld a, [$ce16]
- ld [$ff9f], a
- bank1call $35a9
+ ld a, [wce16]
+ ldh [hTempCardIndex_ff9f], a
+ bank1call CheckCantUseTrainerDueToHeadache
jp c, $41a8
- call Func_1944
+ call LoadNonPokemonCardEffectCommands
ld a, $1
call TryExecuteEffectCommandFunction
jp c, $41a8
- farcallx $5, $743b
+ farcall $5, $743b
jr c, .asm_201a8
pop de
pop hl
@@ -62,11 +62,11 @@ Func_200e5: ; 200e5 (8:40e5)
jr nc, .incHL4
inc hl
inc hl
- ld [$ce19], a
+ ld [wce19], a
push de
push hl
- ld a, [$ce16]
- ld [$ff9f], a
+ ld a, [wce16]
+ ldh [hTempCardIndex_ff9f], a
ld a, $6
bank1call $67be
pop hl
@@ -77,22 +77,22 @@ Func_200e5: ; 200e5 (8:40e5)
pop hl
inc hl
inc hl
- ld a, [$ce20]
+ ld a, [wce20]
ld b, a
- ld a, [$ce21]
+ ld a, [wce21]
or b
- ld [$ce20], a
+ ld [wce20], a
pop hl
and $8
jp z, $40f7
- call CreateHandCardBuffer
- ld hl, wDuelCardOrAttackList
- ld de, $cf68
+ call CreateHandCardList
+ ld hl, wDuelTempList
+ ld de, wTempHandCardList
call $697b
- ld hl, $cf68
- ld a, [$ce20]
+ ld hl, wTempHandCardList
+ ld a, [wce20]
and $f7
- ld [$ce20], a
+ ld [wce20], a
jp $40f7
.incHL5
diff --git a/src/engine/booster_packs.asm b/src/engine/booster_packs.asm
index e3180fe..98692d8 100644
--- a/src/engine/booster_packs.asm
+++ b/src/engine/booster_packs.asm
@@ -1,13 +1,15 @@
+; generate a booster pack identified by a,
+; and add the drawn cards to the player's collection (sCardCollection).
GenerateBoosterPack: ; 1e1c4 (7:61c4)
push hl
push bc
push de
- ld [wBoosterIndex], a
-.noCardsFoundLoop
+ ld [wBoosterPackID], a
+.no_cards_found_loop
call InitBoosterData
call GenerateBoosterEnergies
call GenerateBoosterNonEnergies
- jr c, .noCardsFoundLoop
+ jr c, .no_cards_found_loop
call PutEnergiesAndNonEnergiesTogether
call AddBoosterCardsToCollection
pop de
@@ -18,70 +20,74 @@ GenerateBoosterPack: ; 1e1c4 (7:61c4)
; generate all Pokemon or Trainer cards (if any) for the current booster pack
GenerateBoosterNonEnergies: ; 1e1df (7:61df)
ld a, STAR
- ld [wBoosterCurRarity], a
-.generateCardLoop
- call FindCurRarityChance
+ ld [wBoosterCurrentRarity], a
+.generate_card_loop
+ call FindCurrentRarityChance
ld a, [hl]
or a
- jr z, .noMoreOfCurrentRarity
+ jr z, .no_more_of_current_rarity
call FindCardsInSetAndRarity
- call FindTotalTypeChances
+ call CalculateTypeChances
or a
- jr z, .noValidCards
+ jr z, .no_valid_cards
call Random
call DetermineBoosterCardType
- call FindBoosterCard
+ call DetermineBoosterCard
call UpdateBoosterCardTypesChanceByte
call AddBoosterCardToDrawnNonEnergies
- call FindCurRarityChance
+ call FindCurrentRarityChance
dec [hl]
- jr .generateCardLoop
-.noMoreOfCurrentRarity
- ld a, [wBoosterCurRarity]
+ jr .generate_card_loop
+.no_more_of_current_rarity
+ ld a, [wBoosterCurrentRarity]
dec a
- ld [wBoosterCurRarity], a
+ ld [wBoosterCurrentRarity], a
bit 7, a ; any rarity left to check?
- jr z, .generateCardLoop
+ jr z, .generate_card_loop
or a
ret
-.noValidCards
- rst $38
+.no_valid_cards
+ debug_ret
scf
ret
-; return hl pointing to wBoosterData<Rarity>Amount[wBoosterCurRarity]
-FindCurRarityChance: ; 1e219 (7:6219)
+; return hl pointing to wBoosterData<Rarity>Amount[wBoosterCurrentRarity]
+FindCurrentRarityChance: ; 1e219 (7:6219)
push bc
ld hl, wBoosterDataCommonAmount
- ld a, [wBoosterCurRarity]
+ ld a, [wBoosterCurrentRarity]
ld c, a
ld b, $0
add hl, bc
pop bc
ret
+; loop through all existing cards to see which ones belong to the current set and rarity,
+; and add them wBoosterViableCardList. Also fill wBoosterAmountOfCardTypeTable with the amount of
+; available cards of each type, for the current set and rarity.
+; Skip any card already drawn in the current pack.
FindCardsInSetAndRarity: ; 1e226 (7:6226)
ld c, NUM_BOOSTER_CARD_TYPES
ld hl, wBoosterAmountOfCardTypeTable
xor a
-.deleteTypeTableLoop
+.delete_type_table_loop
ld [hli], a
dec c
- jr nz, .deleteTypeTableLoop
+ jr nz, .delete_type_table_loop
xor a
ld hl, wBoosterViableCardList
ld [hl], a
- ld de, $1
-.checkCardViableLoop
+ ld de, 1 ; GRASS_ENERGY
+.check_card_viable_loop
push de
ld a, e
- ld [wBoosterTempCard], a
- call IsByteInTempCardCollectionZero
- jr c, .finishedWithCurrentCard
- call CheckCardViable
- jr c, .finishedWithCurrentCard
+ ld [wBoosterCurrentCard], a
+ call CheckCardAlreadyDrawn
+ jr c, .finished_with_current_card
+ call CheckCardInSetAndRarity
+ jr c, .finished_with_current_card
ld a, [wBoosterCurrentCardType]
- call GetCardType
+ call GetBoosterCardType
push af
push hl
ld c, a
@@ -90,24 +96,25 @@ FindCardsInSetAndRarity: ; 1e226 (7:6226)
add hl, bc
inc [hl]
pop hl
- ld a, [wBoosterTempCard]
+ ld a, [wBoosterCurrentCard]
ld [hli], a
pop af
ld [hli], a
xor a
ld [hl], a
-.finishedWithCurrentCard
+.finished_with_current_card
pop de
inc e
ld a, e
cp NUM_CARDS + 1
- jr c, .checkCardViableLoop
+ jr c, .check_card_viable_loop
ret
-CheckCardViable: ; 1e268 (7:6268)
+; return nc if card e belongs to the current set and rarity
+CheckCardInSetAndRarity: ; 1e268 (7:6268)
push bc
ld a, e
- call GetCardHeader
+ call GetCardTypeRarityAndSet
ld [wBoosterCurrentCardType], a
ld a, b
ld [wBoosterCurrentCardRarity], a
@@ -115,40 +122,40 @@ CheckCardViable: ; 1e268 (7:6268)
ld [wBoosterCurrentCardSet], a
ld a, [wBoosterCurrentCardRarity]
ld c, a
- ld a, [wBoosterCurRarity]
+ ld a, [wBoosterCurrentRarity]
cp c
- jr nz, .invalidCard
+ jr nz, .invalid_card
ld a, [wBoosterCurrentCardType]
- call GetCardType
+ call GetBoosterCardType
cp BOOSTER_CARD_TYPE_ENERGY
- jr z, .returnValidCard
+ jr z, .return_valid_card
ld a, [wBoosterCurrentCardSet]
swap a
and $0f
ld c, a
ld a, [wBoosterDataSet]
cp c
- jr nz, .invalidCard
-.returnValidCard
+ jr nz, .invalid_card
+.return_valid_card
or a
jr .return
-.invalidCard
+.invalid_card
scf
.return
pop bc
ret
-; Map a card's TYPE_* constant given in a to its BOOSTER_CARD_TYPE_* constant
-GetCardType: ; 1e2a0 (7:62a0)
+; Return a card's TYPE_* constant given in a to its BOOSTER_CARD_TYPE_* constant
+GetBoosterCardType: ; 1e2a0 (7:62a0)
push hl
push bc
ld hl, CardTypeTable
cp NUM_CARD_TYPES
- jr nc, .loadType
+ jr nc, .load_type
ld c, a
ld b, $00
add hl, bc
-.loadType
+.load_type
ld a, [hl]
pop bc
pop hl
@@ -173,69 +180,74 @@ CardTypeTable: ; 1e2b1 (7:62b1)
db BOOSTER_CARD_TYPE_TRAINER ; TYPE_ENERGY_UNUSED
db BOOSTER_CARD_TYPE_TRAINER ; TYPE_TRAINER
-FindTotalTypeChances: ; 1e2c2 (7:62c2)
+; calculate the chance of each type for the next card
+; return [wd4ca] = sum of all chances
+CalculateTypeChances: ; 1e2c2 (7:62c2)
ld c, NUM_BOOSTER_CARD_TYPES
xor a
- ld hl, wBoosterTempTypeChanceTable
-.deleteTempTypeChanceTableLoop
+ ld hl, wBoosterTempTypeChancesTable
+.delete_temp_type_chance_table_loop
ld [hli], a
dec c
- jr nz, .deleteTempTypeChanceTableLoop
+ jr nz, .delete_temp_type_chance_table_loop
ld [wd4ca], a
ld bc, $00
-.checkIfTypeIsValid
+.check_if_type_is_valid
push bc
ld hl, wBoosterAmountOfCardTypeTable
add hl, bc
ld a, [hl]
or a
- jr z, .amountOfTypeOrChanceZero
+ jr z, .amount_of_type_or_chance_zero
ld hl, wBoosterDataTypeChances
add hl, bc
ld a, [hl]
or a
- jr z, .amountOfTypeOrChanceZero
- ld hl, wBoosterTempTypeChanceTable
+ jr z, .amount_of_type_or_chance_zero
+ ld hl, wBoosterTempTypeChancesTable
add hl, bc
ld [hl], a
ld a, [wd4ca]
add [hl]
ld [wd4ca], a
-.amountOfTypeOrChanceZero
+.amount_of_type_or_chance_zero
pop bc
inc c
ld a, c
cp NUM_BOOSTER_CARD_TYPES
- jr c, .checkIfTypeIsValid
+ jr c, .check_if_type_is_valid
ld a, [wd4ca]
ret
+; input: a = random number (between 0 and the sum of all chances)
+; store the randomly generated booster card type in [wBoosterJustDrawnCardType]
DetermineBoosterCardType: ; 1e2fa (7:62fa)
ld [wd4ca], a
ld c, $00
- ld hl, wBoosterTempTypeChanceTable
-.loopThroughCardTypes
+ ld hl, wBoosterTempTypeChancesTable
+.loop_through_card_types
ld a, [hl]
or a
- jr z, .skipNoChanceType
+ jr z, .skip_no_chance_type
ld a, [wd4ca]
sub [hl]
ld [wd4ca], a
- jr c, .foundCardType
-.skipNoChanceType
+ jr c, .found_card_type
+.skip_no_chance_type
inc hl
inc c
ld a, c
- cp a, NUM_BOOSTER_CARD_TYPES
- jr c, .loopThroughCardTypes
+ cp NUM_BOOSTER_CARD_TYPES
+ jr c, .loop_through_card_types
ld a, BOOSTER_CARD_TYPE_ENERGY
-.foundCardType
+.found_card_type
ld a, c
- ld [wBoosterSelectedCardType], a
+ ld [wBoosterJustDrawnCardType], a
ret
-FindBoosterCard: ; 1e31d (7:631d)
- ld a, [wBoosterSelectedCardType]
+; generate a random available card of the booster card type at [wBoosterJustDrawnCardType]
+DetermineBoosterCard: ; 1e31d (7:631d)
+ ld a, [wBoosterJustDrawnCardType]
ld c, a
ld b, $00
ld hl, wBoosterAmountOfCardTypeTable
@@ -244,52 +256,52 @@ FindBoosterCard: ; 1e31d (7:631d)
call Random
ld [wd4ca], a
ld hl, wBoosterViableCardList
-.findMatchingCardLoop
+.find_matching_card_loop
ld a, [hli]
or a
- jr z, .noValidCardFound
- ld [wBoosterTempCard], a
- ld a, [wBoosterSelectedCardType]
+ jr z, .no_valid_card_found
+ ld [wBoosterCurrentCard], a
+ ld a, [wBoosterJustDrawnCardType]
cp [hl]
- jr nz, .cardIncorrectType
+ jr nz, .card_incorrect_type
ld a, [wd4ca]
or a
- jr z, .returnWithCurrentCard
+ jr z, .return_with_current_card
dec a
ld [wd4ca], a
-.cardIncorrectType
+.card_incorrect_type
inc hl
- jr .findMatchingCardLoop
-.returnWithCurrentCard
+ jr .find_matching_card_loop
+.return_with_current_card
or a
ret
-.noValidCardFound
- rst $38
+.no_valid_card_found
+ debug_ret
scf
ret
-; lowers the chance of getting the same type multiple times.
+; lowers the chance of getting the same type of card multiple times.
; more specifically, when a card of type T is drawn, T's new chances become
-; min (1, wBoosterDataTypeChances[T] - wBoosterAveragedTypeChances).
+; min (1, [wBoosterDataTypeChances[T]] - [wBoosterAveragedTypeChances]).
UpdateBoosterCardTypesChanceByte: ; 1e350 (7:6350)
push hl
push bc
- ld a, [wBoosterSelectedCardType]
+ ld a, [wBoosterJustDrawnCardType]
ld c, a
ld b, $00
ld hl, wBoosterDataTypeChances
add hl, bc
- ld a,[wBoosterAveragedTypeChances]
+ ld a, [wBoosterAveragedTypeChances]
ld c, a
ld a, [hl]
sub c
ld [hl], a
- jr z, .chanceLessThanOne
- jr nc, .stillSomeChanceLeft
-.chanceLessThanOne
- ld a, $01
+ jr z, .chance_less_than_one
+ jr nc, .still_some_chance_left
+.chance_less_than_one
+ ld a, 1
ld [hl], a
-.stillSomeChanceLeft
+.still_some_chance_left
pop bc
pop hl
ret
@@ -300,11 +312,11 @@ GenerateBoosterEnergies: ; 1e3db (7:63db)
ld hl, wBoosterDataEnergyFunctionPointer + 1
ld a, [hld]
or a
- jr z, .noFunctionPointer
+ jr z, .no_function_pointer
ld l, [hl]
ld h, a
jp hl
-.noFunctionPointer
+.no_function_pointer
ld a, [hl]
or a
ret z ; return if no hardcoded energy either
@@ -313,37 +325,41 @@ GenerateBoosterEnergies: ; 1e3db (7:63db)
pop af
ret
+; add the (energy) card at a to wBoosterTempNonEnergiesDrawn and wTempCardCollection
AddBoosterEnergyToDrawnEnergies: ; 1e380 (7:6380)
- ld [wBoosterTempCard], a
+ ld [wBoosterCurrentCard], a
call AddBoosterCardToDrawnEnergies
ret
; generates a random energy card
-GenerateEndingEnergy: ; 1e387 (7:6387)
- ld a, COLORLESS - FIRE
+GenerateRandomEnergy: ; 1e387 (7:6387)
+ ld a, NUM_COLORED_TYPES
call Random
- add a, $01
+ add $01
jr AddBoosterEnergyToDrawnEnergies
; generates a booster with 10 random energies
GenerateRandomEnergyBooster: ; 1e390 (7:6390)
ld a, NUM_CARDS_IN_BOOSTER
-.generateEnergyLoop
+.generate_energy_loop
push af
- call GenerateEndingEnergy
+ call GenerateRandomEnergy
pop af
dec a
- jr nz, .generateEnergyLoop
+ jr nz, .generate_energy_loop
jr ZeroBoosterRarityData
+; generates a booster with 5 Lightning energies and 5 Fire energies
GenerateEnergyBoosterLightningFire: ; 1e39c (7:639c)
ld hl, EnergyBoosterLightningFireData
jr GenerateTwoTypesEnergyBooster
+; generates a booster with 5 Water energies and 5 Fighting energies
GenerateEnergyBoosterWaterFighting: ; 1e3a1 (7:63a1)
ld hl, EnergyBoosterWaterFightingData
jr GenerateTwoTypesEnergyBooster
+; generates a booster with 5 Grass energies and 5 Psychic energies
GenerateEnergyBoosterGrassPsychic: ; 1e3a6 (7:63a6)
ld hl, EnergyBoosterGrassPsychicData
jr GenerateTwoTypesEnergyBooster
@@ -351,9 +367,9 @@ GenerateEnergyBoosterGrassPsychic: ; 1e3a6 (7:63a6)
; generates a booster with 5 energies of 2 different types each
GenerateTwoTypesEnergyBooster: ; 1e3ab (7:63ab)
ld b, $02
-.addTwoEnergiesToBoosterLoop
+.add_two_energies_to_booster_loop
ld c, NUM_CARDS_IN_BOOSTER / 2
-.addEnergyToBoosterLoop
+.add_energy_to_booster_loop
push hl
push bc
ld a, [hl]
@@ -361,10 +377,12 @@ GenerateTwoTypesEnergyBooster: ; 1e3ab (7:63ab)
pop bc
pop hl
dec c
- jr nz, .addEnergyToBoosterLoop
+ jr nz, .add_energy_to_booster_loop
inc hl
dec b
- jr nz, .addTwoEnergiesToBoosterLoop
+ jr nz, .add_two_energies_to_booster_loop
+; fallthrough
+
ZeroBoosterRarityData:
xor a
ld [wBoosterDataCommonAmount], a
@@ -374,33 +392,37 @@ ZeroBoosterRarityData:
EnergyBoosterLightningFireData:
db LIGHTNING_ENERGY, FIRE_ENERGY
+
EnergyBoosterWaterFightingData:
db WATER_ENERGY, FIGHTING_ENERGY
+
EnergyBoosterGrassPsychicData:
db GRASS_ENERGY, PSYCHIC_ENERGY
+; add the (energy) card at [wBoosterCurrentCard] to wBoosterTempNonEnergiesDrawn and wTempCardCollection
AddBoosterCardToDrawnEnergies: ; 1e3cf (7:63cf)
push hl
ld hl, wBoosterTempEnergiesDrawn
- call CopyToFirstEmptyByte
+ call AppendCardToHL
call AddBoosterCardToTempCardCollection
pop hl
ret
+; add the (non-energy) card at [wBoosterCurrentCard] to wBoosterTempNonEnergiesDrawn and wTempCardCollection
AddBoosterCardToDrawnNonEnergies: ; 1e3db (7:63db)
push hl
ld hl, wBoosterTempNonEnergiesDrawn
- call CopyToFirstEmptyByte
+ call AppendCardToHL
call AddBoosterCardToTempCardCollection
pop hl
ret
-CopyToFirstEmptyByte: ; 1e3e7 (7:63e7)
+AppendCardToHL: ; 1e3e7 (7:63e7)
ld a, [hli]
or a
- jr nz, CopyToFirstEmptyByte
+ jr nz, AppendCardToHL
dec hl
- ld a, [wBoosterTempCard]
+ ld a, [wBoosterCurrentCard]
ld [hli], a
xor a
ld [hl], a
@@ -410,46 +432,49 @@ CopyToFirstEmptyByte: ; 1e3e7 (7:63e7)
PutEnergiesAndNonEnergiesTogether: ; 1e3f3 (7:63f3)
push hl
ld hl, wBoosterTempEnergiesDrawn
-.loopThroughExtraCards
+.loop_through_extra_cards
ld a, [hli]
or a
- jr z, .endOfCards
- ld [wBoosterTempCard], a
+ jr z, .end_of_cards
+ ld [wBoosterCurrentCard], a
push hl
ld hl, wBoosterTempNonEnergiesDrawn
- call CopyToFirstEmptyByte
+ call AppendCardToHL
pop hl
- jr .loopThroughExtraCards
-.endOfCards
+ jr .loop_through_extra_cards
+.end_of_cards
pop hl
ret
+; add the final cards drawn from the booster pack to the player's colection (sCardCollection)
AddBoosterCardsToCollection:; 1e40a (7:640a)
push hl
ld hl, wBoosterCardsDrawn
-.addCardsLoop
+.add_cards_loop
ld a, [hli]
or a
- jr z, .noCardsLeft
+ jr z, .no_cards_left
call AddCardToCollection
- jr .addCardsLoop
-.noCardsLeft
+ jr .add_cards_loop
+.no_cards_left
pop hl
ret
+; add the card at [wBoosterCurrentCard] to wTempCardCollection
AddBoosterCardToTempCardCollection: ; 1e419 (7:6419)
push hl
- ld h, wTempCardCollection >> 8
- ld a, [wBoosterTempCard]
+ ld h, HIGH(wTempCardCollection)
+ ld a, [wBoosterCurrentCard]
ld l, a
inc [hl]
pop hl
ret
-IsByteInTempCardCollectionZero: ; 1e423 (7:6423)
+; check if the card at [wBoosterCurrentCard] has already been added to wTempCardCollection
+CheckCardAlreadyDrawn: ; 1e423 (7:6423)
push hl
- ld h, wTempCardCollection >> 8
- ld a, [wBoosterTempCard]
+ ld h, HIGH(wTempCardCollection)
+ ld a, [wBoosterCurrentCard]
ld l, a
ld a, [hl]
pop hl
@@ -457,24 +482,24 @@ IsByteInTempCardCollectionZero: ; 1e423 (7:6423)
ccf
ret
-; clears wBoosterCardsDrawn and wTempCardCollection
-; copies booster data to wBoosterData* *CurSet, *EnergyFunctionPointer, and *TypeChances
-; copies rarity amounts to wBoosterData*Amount and averages them into wBoosterAveragedTypeChances
+; clears wBoosterCardsDrawn and wTempCardCollection.
+; copies booster data to wBoosterDataCurSet, wBoosterDataEnergyFunctionPointer, and wBoosterDataTypeChances.
+; copies rarity amounts to wBoosterData*Amount and averages them into wBoosterAveragedTypeChances.
InitBoosterData: ; 1e430 (7:6430)
ld c, wBoosterCardsDrawnEnd - wBoosterCardsDrawn
ld hl, wBoosterCardsDrawn
xor a
-.clearPlayerDeckLoop
+.clear_player_deck_loop
ld [hli], a
dec c
- jr nz, .clearPlayerDeckLoop
+ jr nz, .clear_player_deck_loop
ld c, $00 ; $100
ld hl, wTempCardCollection
xor a
-.clearTempCardCollectionLoop
+.clear_temp_card_collection_loop
ld [hli], a
dec c
- jr nz, .clearTempCardCollectionLoop
+ jr nz, .clear_temp_card_collection_loop
call FindBoosterDataPointer
ld de, wBoosterDataSet
ld bc, wBoosterDataTypeChances - wBoosterDataSet + NUM_BOOSTER_CARD_TYPES ; Pack2 - Pack1
@@ -484,24 +509,25 @@ InitBoosterData: ; 1e430 (7:6430)
ld d, NUM_BOOSTER_CARD_TYPES
ld e, $0
ld hl, wBoosterDataTypeChances
-.addChanceBytesLoop
+.add_chance_bytes_loop
ld a, [hli]
or a
- jr z, .skipChanceByte
+ jr z, .skip_chance_byte
add c
ld c, a
inc e
-.skipChanceByte
+.skip_chance_byte
dec d
- jr nz, .addChanceBytesLoop
+ jr nz, .add_chance_bytes_loop
call DivideBCbyDE
ld a, c
ld [wBoosterAveragedTypeChances], a
ret
+; get the pointer to the data of the booster pack at [wBoosterPackID]
FindBoosterDataPointer: ; 1e46f (7:646f)
push bc
- ld a, [wBoosterIndex]
+ ld a, [wBoosterPackID]
add a
ld c, a
ld b, $0
@@ -514,43 +540,44 @@ FindBoosterDataPointer: ; 1e46f (7:646f)
ret
BoosterDataJumptable: ; 1e480 (7:6480)
- dw PackColosseumNeutral
- dw PackColosseumGrass
- dw PackColosseumFire
- dw PackColosseumWater
- dw PackColosseumLightning
- dw PackColosseumFighting
- dw PackColosseumTrainer
- dw PackEvolutionNeutral
- dw PackEvolutionGrass
- dw PackEvolutionNeutralFireEnergy
- dw PackEvolutionWater
- dw PackEvolutionFighting
- dw PackEvolutionPsychic
- dw PackEvolutionTrainer
- dw PackMysteryNeutral
- dw PackMysteryGrassColorless
- dw PackMysteryWaterColorless
- dw PackMysteryLightningColorless
- dw PackMysteryFightingColorless
- dw PackMysteryTrainerColorless
- dw PackLaboratoryMostlyNeutral
- dw PackLaboratoryGrass
- dw PackLaboratoryWater
- dw PackLaboratoryPsychic
- dw PackLaboratoryTrainer
- dw PackEnergyLightningFire
- dw PackEnergyWaterFighting
- dw PackEnergyGrassPsychic
- dw PackRandomEnergies
-
+ dw BoosterPack_ColosseumNeutral
+ dw BoosterPack_ColosseumGrass
+ dw BoosterPack_ColosseumFire
+ dw BoosterPack_ColosseumWater
+ dw BoosterPack_ColosseumLightning
+ dw BoosterPack_ColosseumFighting
+ dw BoosterPack_ColosseumTrainer
+ dw BoosterPack_EvolutionNeutral
+ dw BoosterPack_EvolutionGrass
+ dw BoosterPack_EvolutionNeutralFireEnergy
+ dw BoosterPack_EvolutionWater
+ dw BoosterPack_EvolutionFighting
+ dw BoosterPack_EvolutionPsychic
+ dw BoosterPack_EvolutionTrainer
+ dw BoosterPack_MysteryNeutral
+ dw BoosterPack_MysteryGrassColorless
+ dw BoosterPack_MysteryWaterColorless
+ dw BoosterPack_MysteryLightningColorless
+ dw BoosterPack_MysteryFightingColorless
+ dw BoosterPack_MysteryTrainerColorless
+ dw BoosterPack_LaboratoryMostlyNeutral
+ dw BoosterPack_LaboratoryGrass
+ dw BoosterPack_LaboratoryWater
+ dw BoosterPack_LaboratoryPsychic
+ dw BoosterPack_LaboratoryTrainer
+ dw BoosterPack_EnergyLightningFire
+ dw BoosterPack_EnergyWaterFighting
+ dw BoosterPack_EnergyGrassPsychic
+ dw BoosterPack_RandomEnergies
+
+; load rarity amounts of the booster pack set at [wBoosterDataSet] to wBoosterData*Amount
LoadRarityAmountsToWram: ; 1e4ba (7:64ba)
ld a, [wBoosterDataSet]
add a
add a
ld c, a
ld b, $00
- ld hl, BoosterSetRarityAmountTable
+ ld hl, BoosterSetRarityAmountsTable
add hl, bc
inc hl
ld a, [hli]
diff --git a/src/engine/effect_functions.asm b/src/engine/effect_functions.asm
index dc05043..0d7a910 100644
--- a/src/engine/effect_functions.asm
+++ b/src/engine/effect_functions.asm
@@ -5,17 +5,17 @@ Poison50PercentEffect: ; 2c000 (b:4000)
PoisonEffect: ; 2c007 (b:4007)
lb bc, $0f, POISONED
- jr applyEffect
+ jr ApplyStatusEffect
lb bc, $0f, DOUBLE_POISONED
- jr applyEffect
+ jr ApplyStatusEffect
Paralysis50PercentEffect: ; 2c011 (b:4011)
ldtx de, ParalysisCheckText
call TossCoin_BankB
ret nc
lb bc, $f0, PARALYZED
- jr applyEffect
+ jr ApplyStatusEffect
Confusion50PercentEffect: ; 2c01d (b:401d)
ldtx de, ConfusionCheckText
@@ -24,7 +24,7 @@ Confusion50PercentEffect: ; 2c01d (b:401d)
ConfusionEffect: ; 2c024 (b:4024)
lb bc, $f0, CONFUSED
- jr applyEffect
+ jr ApplyStatusEffect
ldtx de, SleepCheckText
call TossCoin_BankB
@@ -32,36 +32,36 @@ ConfusionEffect: ; 2c024 (b:4024)
SleepEffect: ; 2c030 (b:4030)
lb bc, $f0, ASLEEP
- jr applyEffect
+ jr ApplyStatusEffect
-applyEffect
+ApplyStatusEffect:
ldh a, [hWhoseTurn]
ld hl, wcc05
cp [hl]
- jr nz, .canInduceStatus
- ld a, [wTempNonTurnDuelistCardId]
+ jr nz, .can_induce_status
+ ld a, [wTempNonTurnDuelistCardID]
cp CLEFAIRY_DOLL
- jr z, .cantInduceStatus
+ jr z, .cant_induce_status
cp MYSTERIOUS_FOSSIL
- jr z, .cantInduceStatus
- ; snorlax's thick skinned prevents it from being statused...
+ jr z, .cant_induce_status
+ ; Snorlax's Thick Skinned prevents it from being statused...
cp SNORLAX
- jr nz, .canInduceStatus
+ jr nz, .can_induce_status
call SwapTurn
xor a
- ; ...unless already so, or if affected by muk's toxic gas
- call CheckIfUnderAnyCannotUseStatus2
+ ; ...unless already so, or if affected by Muk's Toxic Gas
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
call SwapTurn
- jr c, .canInduceStatus
+ jr c, .can_induce_status
-.cantInduceStatus
+.cant_induce_status
ld a, c
ld [wccf1], a
call Func_2c09c
or a
ret
-.canInduceStatus
+.can_induce_status
ld hl, wcccd
push hl
ld e, [hl]
@@ -99,16 +99,16 @@ CommentedOut_2c086: ; 2c086 (b:4086)
Func_2c087: ; 2c087 (b:4087)
xor a
- jr asm_2c08c
+ jr Func_2c08c
-Func_2c08a: ; 2c08a (b:408a)
+Func_2c08a: ; 2c08a (b:408a)
ld a, $1
-asm_2c08c
+Func_2c08c:
push de
push af
ld a, $11
- call Func_0f7f
+ call SetDuelAIAction
pop af
pop de
call Func_0fac
@@ -143,7 +143,7 @@ Func_2c0d4: ; 2c0d4 (b:40d4)
ld a, DUELVARS_ARENA_CARD_STATUS
call GetNonTurnDuelistVariable
and DOUBLE_POISONED
- jr z, .notDoublePoisoned
+ jr z, .not_double_poisoned
pop af
ld a, [wDamage]
ld [wccbb], a
@@ -152,7 +152,7 @@ Func_2c0d4: ; 2c0d4 (b:40d4)
push af
-.notDoublePoisoned
+.not_double_poisoned
ld hl, wDamage
ld a, [hl]
add d
@@ -198,7 +198,7 @@ ApplySubstatus1ToDefendingCard: ; 2c140 (b:4140)
ApplySubstatus2ToDefendingCard: ; 2c149 (b:4149)
push af
call CheckNoDamageOrEffect
- jr c, .noDamageOrEffect
+ jr c, .no_damage_orEffect
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
call GetNonTurnDuelistVariable
pop af
@@ -207,7 +207,7 @@ ApplySubstatus2ToDefendingCard: ; 2c149 (b:4149)
ld [hl], a
ret
-.noDamageOrEffect
+.no_damage_orEffect
pop af
push hl
bank1call $4f9d
@@ -296,7 +296,7 @@ KakunaPoisonPowder_AIEffect: ; 2c7b4 (b:47b4)
INCROM $2c7bc, $2c7d0
SwordsDanceEffect: ; 2c7d0 (b:47d0)
- ld a, [wTempTurnDuelistCardId]
+ ld a, [wTempTurnDuelistCardID]
cp SCYTHER
ret nz
ld a, SUBSTATUS1_NEXT_TURN_DOUBLE_DAMAGE
diff --git a/src/engine/home.asm b/src/engine/home.asm
index 2f57dce..4c5ecfa 100755..100644
--- a/src/engine/home.asm
+++ b/src/engine/home.asm
@@ -45,8 +45,8 @@ Start: ; 0150 (0:0150)
ld a, $1
call BankswitchHome
xor a
- call BankswitchRAM
- call BankswitchVRAM_0
+ call BankswitchSRAM
+ call BankswitchVRAM0
call DisableLCD
pop af
ld [wInitialA], a
@@ -61,10 +61,10 @@ Start: ; 0150 (0:0150)
call ResetSerial
call CopyDMAFunction
call SetupExtRAM
- ld a, BANK(Func_4000)
+ ld a, BANK(GameLoop)
call BankswitchHome
ld sp, $e000
- jp Func_4000
+ jp GameLoop
VBlankHandler: ; 019b (0:019b)
push af
@@ -80,7 +80,7 @@ VBlankHandler: ; 019b (0:019b)
ld a, [wVBlankOAMCopyToggle]
or a
jr z, .no_oam_copy
- call hDMAFunction ; DMA-copy $ca00-$ca9f to OAM memory
+ call hDMAFunction ; DMA-copy $ca00-$ca9f to OAM memory
xor a
ld [wVBlankOAMCopyToggle], a
.no_oam_copy
@@ -181,15 +181,14 @@ IncrementPlayTimeCounter: ; 021c (0:021c)
; setup timer to 16384/68 ≈ 240.94 Hz
SetupTimer: ; 0241 (0:0241)
- ld b, $100 - 68
- ; ld b, $bc
+ ld b, -68 ; Value for Normal Speed
call CheckForCGB
- jr c, .asm_250
+ jr c, .set_timer
ld a, [rKEY1]
and $80
- jr z, .asm_250
- ld b, $100 - 2*68
-.asm_250
+ jr z, .set_timer
+ ld b, $100 - 2 * 68 ; Value for CGB Double Speed
+.set_timer
ld a, b
ld [rTMA], a
ld a, rTAC_16384_HZ
@@ -198,7 +197,7 @@ SetupTimer: ; 0241 (0:0241)
ld [rTAC], a
ret
-; carry flag: 0 if CGB
+; return carry if not CGB
CheckForCGB: ; 025c (0:025c)
ld a, [wConsole]
cp CONSOLE_CGB
@@ -231,7 +230,7 @@ EnableLCD: ; 0277 (0:0277)
or rLCDC_ENABLE_MASK ;
ld [wLCDC], a ;
ld [rLCDC], a ; turn LCD on
- ld a, %11000000
+ ld a, FLUSH_ALL
ld [wFlushPaletteFlags], a
ret
@@ -343,9 +342,9 @@ SetupLCD: ; 030b (0:030b)
ld [wLCDCFunctiontrampoline], a
ld [wVBlankFunctionTrampoline], a
ld hl, wVBlankFunctionTrampoline + 1
- ld [hl], NopF & $ff ;
+ ld [hl], LOW(NopF) ;
inc hl ; load `jp NopF`
- ld [hl], NopF >> $8 ;
+ ld [hl], HIGH(NopF) ;
ld a, $47
ld [wLCDC], a
ld a, $1
@@ -379,30 +378,30 @@ SetupPalettes: ; 036a (0:036a)
ld hl, wBGP
ld a, %11100100
ld [rBGP], a
- ld [hli], a
+ ld [hli], a ; wBGP
ld [rOBP0], a
ld [rOBP1], a
- ld [hli], a
- ld [hl], a
+ ld [hli], a ; wOBP0
+ ld [hl], a ; wOBP1
xor a
ld [wFlushPaletteFlags], a
ld a, [wConsole]
cp CONSOLE_CGB
ret nz
- ld de, wBufPalette
- ld c, $10
-.asm_387
+ ld de, wBackgroundPalettesCGB
+ ld c, 16
+.copy_pals_loop
ld hl, InitialPalette
- ld b, $8
-.asm_38c
+ ld b, CGB_PAL_SIZE
+.copy_bytes_loop
ld a, [hli]
ld [de], a
inc de
dec b
- jr nz, .asm_38c
+ jr nz, .copy_bytes_loop
dec c
- jr nz, .asm_387
- call FlushBothCGBPalettes
+ jr nz, .copy_pals_loop
+ call FlushAllCGBPalettes
ret
InitialPalette: ; 0399 (0:0399)
@@ -411,51 +410,52 @@ InitialPalette: ; 0399 (0:0399)
rgb 10,10,08
rgb 00,00,00
+; clear VRAM tile data
SetupVRAM: ; 03a1 (0:03a1)
call FillTileMap
call CheckForCGB
- jr c, .asm_3b2
- call BankswitchVRAM_1
- call .asm_3b2
- call BankswitchVRAM_0
-.asm_3b2
- ld hl, vTiles0
- ld bc, vBGMapTiles - vTiles0
-.asm_3b8
+ jr c, .vram0
+ call BankswitchVRAM1
+ call .vram0
+ call BankswitchVRAM0
+.vram0
+ ld hl, v0Tiles0
+ ld bc, v0BGMapTiles1 - v0Tiles0
+.loop
xor a
ld [hli], a
dec bc
ld a, b
or c
- jr nz, .asm_3b8
+ jr nz, .loop
ret
-; fill VARM tile map banks with [wTileMapFill]
+; fill VRAM0 BG maps with [wTileMapFill] and VRAM1 BG Maps with 0
FillTileMap: ; 03c0 (0:03c0)
- call BankswitchVRAM_0
- ld hl, vBGMapTiles
- ld bc, vBGMapAttrs - vBGMapTiles
-.asm_3c9
+ call BankswitchVRAM0
+ ld hl, v0BGMapTiles1
+ ld bc, v0BGMapTiles2 - v0BGMapTiles1
+.vram0_loop
ld a, [wTileMapFill]
ld [hli], a
dec bc
ld a, c
or b
- jr nz, .asm_3c9
+ jr nz, .vram0_loop
ld a, [wConsole]
cp CONSOLE_CGB
ret nz
- call BankswitchVRAM_1
- ld hl, vBGMapTiles
- ld bc, vBGMapAttrs - vBGMapTiles
-.asm_3e1
+ call BankswitchVRAM1
+ ld hl, v1BGMapTiles1
+ ld bc, v1BGMapTiles2 - v1BGMapTiles1
+.vram1_loop
xor a
ld [hli], a
dec bc
ld a, c
or b
- jr nz, .asm_3e1
- call BankswitchVRAM_0
+ jr nz, .vram1_loop
+ call BankswitchVRAM0
ret
; zero work RAM, stack area & high RAM ($C000-$DFFF, $FF80-$FFEF)
@@ -479,19 +479,25 @@ ZeroRAM: ; 03ec (0:03ec)
jr nz, .zero_hram_loop
ret
-Func_0404: ; 0404 (0:0404)
- ld a, $c0
- jr asm_411
+; Flush all non-CGB and CGB palettes
+SetFlushAllPalettes: ; 0404 (0:0404)
+ ld a, FLUSH_ALL
+ jr SetFlushPalettes
-Func_0408: ; 0408 (0:0408)
- or $80
- jr asm_411
+; Flush non-CGB palettes and a single CGB palette,
+; provided in a as an index between 0-7 (BGP) or 8-15 (OBP)
+SetFlushPalette: ; 0408 (0:0408)
+ or FLUSH_ONE
+ jr SetFlushPalettes
-Func_040c: ; 040c (0:040c)
+; Set wBGP to the specified value, flush non-CGB palettes, and the first CGB palette.
+SetBGP: ; 040c (0:040c)
ld [wBGP], a
-asm_40f
- ld a, $80
-asm_411
+
+SetFlushPalette0:
+ ld a, FLUSH_ONE
+
+SetFlushPalettes:
ld [wFlushPaletteFlags], a
ld a, [wLCDC]
rla
@@ -505,19 +511,21 @@ asm_411
pop hl
ret
-Set_OBP0: ; 0423 (0:0423)
+; Set wOBP0 to the specified value, flush non-CGB palettes, and the first CGB palette.
+SetOBP0: ; 0423 (0:0423)
ld [wOBP0], a
- jr asm_40f
+ jr SetFlushPalette0
-Set_OBP1: ; 0428 (0:0428)
+; Set wOBP1 to the specified value, flush non-CGB palettes, and the first CGB palette.
+SetOBP1: ; 0428 (0:0428)
ld [wOBP1], a
- jr asm_40f
+ jr SetFlushPalette0
-; flushes non-CGB palettes from [wBGP], [wOBP0], [wOBP1] as well as CGB
-; palettes from [wBufPalette..wBufPalette+$1f] (BG palette) and
-; [wBufPalette+$20..wBufPalette+$3f] (sprite palette).
-; only flushes if [wFlushPaletteFlags] is nonzero, and only flushes sprite
-; palette if bit6 of that location is set.
+; Flushes non-CGB palettes from [wBGP], [wOBP0], [wOBP1] as well as CGB
+; palettes from [wBackgroundPalettesCGB..wBackgroundPalettesCGB+$3f] (BG palette)
+; and [wObjectPalettesCGB+$00..wObjectPalettesCGB+$3f] (sprite palette).
+; Only flushes if [wFlushPaletteFlags] is nonzero, and only flushes
+; a single CGB palette if bit6 of that location is reset.
FlushPalettes: ; 042d (0:042d)
ld a, [wFlushPaletteFlags]
or a
@@ -532,65 +540,67 @@ FlushPalettes: ; 042d (0:042d)
ld [rOBP1], a
ld a, [wConsole]
cp CONSOLE_CGB
- jr z, flushPaletteCGB
-flushPaletteDone
+ jr z, .CGB
+.done
xor a
ld [wFlushPaletteFlags], a
ret
-flushPaletteCGB
- ; flush BG palette (BGP)
- ; if bit6 of [wFlushPaletteFlags] is set, flush OBP too
+.CGB
+ ; flush a single CGB BG or OB palette
+ ; if bit6 (FLUSH_ALL_F) of [wFlushPaletteFlags] is set, flush all 16 of them
ld a, [wFlushPaletteFlags]
- bit 6, a
- jr nz, FlushBothCGBPalettes
- ld b, $8
- call CopyPalette
- jr flushPaletteDone
-
-FlushBothCGBPalettes: ; 0458 (0:0458)
+ bit FLUSH_ALL_F, a
+ jr nz, FlushAllCGBPalettes
+ ld b, CGB_PAL_SIZE
+ call CopyCGBPalettes
+ jr .done
+
+FlushAllCGBPalettes: ; 0458 (0:0458)
+ ; flush 8 BGP palettes
xor a
- ld b, $40
- ; flush BGP $00-$1f
- call CopyPalette
- ld a, $8
- ld b, $40
- ; flush OBP $00-$1f
- call CopyPalette
- jr flushPaletteDone
-
-CopyPalette: ; 0467 (0:0467)
+ ld b, 8 * CGB_PAL_SIZE
+ call CopyCGBPalettes
+ ; flush 8 OBP palettes
+ ld a, CGB_PAL_SIZE
+ ld b, 8 * CGB_PAL_SIZE
+ call CopyCGBPalettes
+ jr FlushPalettes.done
+
+; copy b bytes of CGB palette data starting at
+; wBackgroundPalettesCGB + a * CGB_PAL_SIZE into rBGPD or rOGPD.
+CopyCGBPalettes: ; 0467 (0:0467)
add a
add a
add a
ld e, a
ld d, $0
- ld hl, wBufPalette
+ ld hl, wBackgroundPalettesCGB
add hl, de
- ld c, $68
- bit 6, a
- jr z, .asm_479
- ld c, $6a
-.asm_479
- and $bf
+ ld c, LOW(rBGPI)
+ bit 6, a ; was a between 0-7 (BGP), or between 8-15 (OBP)?
+ jr z, .copy
+ ld c, LOW(rOBPI)
+.copy
+ and %10111111
ld e, a
-.asm_47c
+.next_byte
ld a, e
ld [$ff00+c], a
inc c
-.asm_47f
+.wait
ld a, [rSTAT]
and $2
- jr nz, .asm_47f
+ jr nz, .wait
ld a, [hl]
ld [$ff00+c], a
ld a, [$ff00+c]
cp [hl]
- jr nz, .asm_47f
+ jr nz, .wait
inc hl
dec c
inc e
dec b
- jr nz, .asm_47c
+ jr nz, .next_byte
ret
Func_0492: ; 0492 (0:0492)
@@ -609,7 +619,7 @@ Func_0492: ; 0492 (0:0492)
jr nz, .asm_49b
ret
-Func_04a2: ; 04a2 (0:04a2)
+EmptyScreen: ; 04a2 (0:04a2)
call DisableLCD
call FillTileMap
xor a
@@ -617,17 +627,21 @@ Func_04a2: ; 04a2 (0:04a2)
ld a, [wConsole]
cp CONSOLE_SGB
ret nz
- call EnableLCD ;
- ld hl, SGB_ATTR_BLK_04bf ; send SGB data
- call SendSGB ;
- call DisableLCD ;
+ call EnableLCD
+ ld hl, AttrBlkPacket_04bf
+ call SendSGB
+ call DisableLCD
ret
-SGB_ATTR_BLK_04bf: ; 04bf (0:04bf)
+AttrBlkPacket_04bf: ; 04bf (0:04bf)
sgb ATTR_BLK, 1 ; sgb_command, length
- db $01,$03,$00,$00,$00,$13,$11,$00,$00,$00,$00,$00,$00,$00,$00
+ db 1 ; number of data sets
+ ; Control Code, Color Palette Designation, X1, Y1, X2, Y2
+ db ATTR_BLK_CTRL_INSIDE + ATTR_BLK_CTRL_LINE, 0 << 0 + 0 << 2, 0, 0, 19, 17 ; data set 1
+ ds 6 ; data set 2
+ ds 2 ; data set 3
-; returns vBGMapTiles + BG_MAP_WIDTH * c + b in de.
+; returns v*BGMapTiles1 + BG_MAP_WIDTH * c + b in de.
; used to map coordinates at bc to a BGMap0 address.
BCCoordToBGMap0Address: ; 04cf (0:04cf)
ld l, c
@@ -638,13 +652,12 @@ BCCoordToBGMap0Address: ; 04cf (0:04cf)
add hl, hl
add hl, hl
ld c, b
- ld b, HIGH(vBGMapTiles)
+ ld b, HIGH(v0BGMapTiles1)
add hl, bc
ld e, l
ld d, h
ret
-; read joypad
ReadJoypad: ; 04de (0:04de)
ld a, $20
ld [rJOYP], a
@@ -665,7 +678,7 @@ ReadJoypad: ; 04de (0:04de)
cpl
and $f
or b
- ld c, a ; joypad data
+ ld c, a ; joypad data
cpl
ld b, a
ldh a, [hButtonsHeld]
@@ -680,13 +693,17 @@ ReadJoypad: ; 04de (0:04de)
ldh a, [hButtonsHeld]
and BUTTONS
cp BUTTONS
- jr nz, asm_522 ; handle reset
+ jr nz, ReadJoypad_SaveButtonsHeld
+ ; A + B + Start + Select: reset game
call ResetSerial
+; fallthrough
+
Reset: ; 051b (0:051b)
ld a, [wInitialA]
di
jp Start
-asm_522
+
+ReadJoypad_SaveButtonsHeld:
ld a, c
ldh [hButtonsHeld], a
ld a, $30
@@ -772,25 +789,25 @@ HandleDPadRepeat: ; 0572 (0:0572)
ret
CopyDMAFunction: ; 0593 (0:0593)
- ld c, $83
+ ld c, LOW(hDMAFunction)
ld b, JumpToFunctionInTable - DMA
ld hl, DMA
-.asm_59a
+.loop
ld a, [hli]
ld [$ff00+c], a
inc c
dec b
- jr nz, .asm_59a
+ jr nz, .loop
ret
; CopyDMAFunction copies this function to hDMAFunction ($ff83)
DMA: ; 05a1 (0:05a1)
- ld a, $ca
+ ld a, HIGH(wOAM)
ld [rDMA], a
ld a, $28
-.asm_5a7
+.wait
dec a
- jr nz, .asm_5a7
+ jr nz, .wait
ret
; jumps to index a in pointer table hl
@@ -811,15 +828,15 @@ CallIndirect: ; 05b6 (0:05b6)
push af
ld a, [hli]
or [hl]
- jr nz, .asm_5bd
+ jr nz, .call_hl
pop af
ret
-.asm_5bd
+.call_hl
ld a, [hld]
ld l, [hl]
ld h, a
pop af
- ; fallthrough
+; fallthrough
CallHL: ; 05c1 (0:05c1)
jp hl
; 0x5c2
@@ -1030,7 +1047,7 @@ Func_06ee: ; 06ee (0:06ee)
ret
; 0x6fc
-; memcpy(DE, HL, B)
+; copy b bytes of data from hl to de
; if LCD on, copy during h-blank only
SafeCopyDataHLtoDE: ; 6fc (0:6fc)
ld a, [wLCDC]
@@ -1047,11 +1064,13 @@ JumpToHblankCopyDataHLtoDE: ; 0709 (0:0709)
jp HblankCopyDataHLtoDE
; 0x70c
+; copy c bytes of data from hl to de, b times.
+; used to copy gfx data.
CopyGfxData: ; 070c (0:070c)
ld a, [wLCDC]
rla
- jr nc, .asm_726
-.asm_712
+ jr nc, .next_tile
+.hblank_copy
push bc
push hl
push de
@@ -1066,19 +1085,19 @@ CopyGfxData: ; 070c (0:070c)
add hl, bc
pop bc
dec b
- jr nz, .asm_712
+ jr nz, .hblank_copy
ret
-.asm_726
+.next_tile
push bc
-.asm_727
+.copy_tile
ld a, [hli]
ld [de], a
inc de
dec c
- jr nz, .asm_727
+ jr nz, .copy_tile
pop bc
dec b
- jr nz, .asm_726
+ jr nz, .next_tile
ret
CopyDataHLtoDE_SaveRegisters: ; 0732 (0:0732)
@@ -1103,7 +1122,7 @@ CopyDataHLtoDE: ; 073c (0:073c)
ret
; switch to rombank (A + top2 of H shifted down),
-; set top2 of H to 01,
+; set top2 of H to 01 (switchable ROM bank area),
; return old rombank id on top-of-stack
BankpushHome: ; 0745 (0:0745)
push hl
@@ -1130,7 +1149,7 @@ BankpushHome: ; 0745 (0:0745)
and $3
ld b, a
res 7, d
- set 6, d
+ set 6, d ; $4000 ≤ de ≤ $7fff
ld l, e
ld h, d
pop de
@@ -1198,10 +1217,10 @@ BankswitchHome: ; 07a3 (0:07a3)
ld [MBC3RomBank], a
ret
-; switch RAM bank
-BankswitchRAM: ; 07a9 (0:07a9)
+; switch SRAM bank
+BankswitchSRAM: ; 07a9 (0:07a9)
push af
- ldh [hBankRAM], a
+ ldh [hBankSRAM], a
ld [MBC3SRamBank], a
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
@@ -1209,7 +1228,7 @@ BankswitchRAM: ; 07a9 (0:07a9)
ret
; enable external RAM
-EnableExtRAM: ; 07b6 (0:07b6)
+EnableSRAM: ; 07b6 (0:07b6)
push af
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
@@ -1217,7 +1236,7 @@ EnableExtRAM: ; 07b6 (0:07b6)
ret
; disable external RAM
-DisableExtRAM: ; 07be (0:07be)
+DisableSRAM: ; 07be (0:07be)
push af
xor a ; SRAM_DISABLE
ld [MBC3SRamEnable], a
@@ -1225,7 +1244,7 @@ DisableExtRAM: ; 07be (0:07be)
ret
; set current dest VRAM bank to 0
-BankswitchVRAM_0: ; 07c5 (0:07c5)
+BankswitchVRAM0: ; 07c5 (0:07c5)
push af
xor a
ldh [hBankVRAM], a
@@ -1234,7 +1253,7 @@ BankswitchVRAM_0: ; 07c5 (0:07c5)
ret
; set current dest VRAM bank to 1
-BankswitchVRAM_1: ; 07cd (0:07cd)
+BankswitchVRAM1: ; 07cd (0:07cd)
push af
ld a, $1
ldh [hBankVRAM], a
@@ -1265,6 +1284,7 @@ SwitchToCGBDoubleSpeed: ; 07e7 (0:07e7)
bit 7, [hl]
ret nz
; fallthrough
+
CGBSpeedSwitch: ; 07f1 (0:07f1)
ld a, [rIE]
push af
@@ -1284,8 +1304,8 @@ CGBSpeedSwitch: ; 07f1 (0:07f1)
SetupExtRAM: ; 080b (0:080b)
xor a
- call BankswitchRAM
- ld hl, $a000
+ call BankswitchSRAM
+ ld hl, sa000
ld bc, $1000
.asm_815
ld a, [hli]
@@ -1301,10 +1321,10 @@ SetupExtRAM: ; 080b (0:080b)
call Func_084d
scf
call Func_4050
- call DisableExtRAM
+ call DisableSRAM
ret
.asm_82f
- ld hl, $a000
+ ld hl, sa000
ld a, [hli]
cp $4
jr nz, .asm_842
@@ -1319,17 +1339,17 @@ SetupExtRAM: ; 080b (0:080b)
call Func_084d
or a
call Func_4050
- call DisableExtRAM
+ call DisableSRAM
ret
Func_084d: ; 084d (0:084d)
- ld a, $3
-.asm_84f
+ ld a, 3
+.clear_loop
call ClearExtRAMBank
dec a
- cp $ff
- jr nz, .asm_84f
- ld hl, $a000
+ cp -1
+ jr nz, .clear_loop
+ ld hl, sa000
ld [hl], $4
inc hl
ld [hl], $21
@@ -1339,8 +1359,8 @@ Func_084d: ; 084d (0:084d)
ClearExtRAMBank: ; 0863 (0:0863)
push af
- call BankswitchRAM
- call EnableExtRAM
+ call BankswitchSRAM
+ call EnableSRAM
ld hl, $a000
ld bc, $2000
.asm_870
@@ -1422,11 +1442,11 @@ UpdateRNGSources: ; 089b (0:089b)
ret
Func_08bf: ; 08bf (0:08bf)
- ld hl, $cad6
+ ld hl, wcad6
ld [hl], e
inc hl
ld [hl], d
- ld hl, $cad8
+ ld hl, wcad8
ld [hl], $1
inc hl
xor a
@@ -1465,7 +1485,7 @@ Func_08de: ; 08de (0:08de)
ret
Func_08ef: ; 08ef (0:08ef)
- ld hl, $cadc
+ ld hl, wcadc
ld a, [hl]
or a
jr z, .asm_902
@@ -1483,7 +1503,7 @@ Func_08ef: ; 08ef (0:08ef)
ld [bc], a
ret
.asm_902
- ld hl, $cad6
+ ld hl, wcad6
ld c, [hl]
inc hl
ld b, [hl]
@@ -1502,11 +1522,11 @@ Func_08ef: ; 08ef (0:08ef)
ld a, [bc]
inc bc
jr nc, .asm_92a
- ld hl, $cad6
+ ld hl, wcad6
ld [hl], c
inc hl
ld [hl], b
- ld hl, $cadd
+ ld hl, wcadd
ld b, [hl]
inc hl
inc hl
@@ -1516,7 +1536,7 @@ Func_08ef: ; 08ef (0:08ef)
ret
.asm_92a
ld [wcade], a
- ld hl, $cada
+ ld hl, wcada
bit 0, [hl]
jr nz, .asm_94a
set 0, [hl]
@@ -1530,7 +1550,7 @@ Func_08ef: ; 08ef (0:08ef)
inc a
ld [hli], a
push hl
- ld hl, $cad6
+ ld hl, wcad6
ld [hl], c
inc hl
ld [hl], b
@@ -1545,19 +1565,20 @@ Func_08ef: ; 08ef (0:08ef)
INCROM $0950, $099c
-Func_099c: ; 099c (0:099c)
+; set the Y Position and X Position of all sprites in wOAM to $00
+InitSpritePositions: ; 099c (0:099c)
xor a
ld [wcab5], a
- ld hl, $ca00
- ld c, $28
+ ld hl, wOAM
+ ld c, 40
xor a
-.asm_9a6
+.loop
ld [hli], a
ld [hli], a
inc hl
inc hl
dec c
- jr nz, .asm_9a6
+ jr nz, .loop
ret
; this function affects the stack so that it returns
@@ -1590,7 +1611,7 @@ RST18: ; 09ae (0:09ae)
ld a, [de]
ld [hl], a
ld a, $1
- ; fallthrough
+; fallthrough
Func_09ce: ; 09ce (0:09ce)
call BankswitchHome
ld hl, sp+$d
@@ -1654,81 +1675,101 @@ RST28: ; 09e9 (0:09e9)
; setup SNES memory $810-$867 and palette
InitSGB: ; 0a0d (0:0a0d)
- ld hl, SGB_MASK_EN_ON
+ ld hl, MaskEnPacket_Freeze
call SendSGB
- ld hl, SGB_DATA_SND_0a50
+ ld hl, DataSndPacket_0a50
call SendSGB
- ld hl, SGB_DATA_SND_0a60
+ ld hl, DataSndPacket_0a60
call SendSGB
- ld hl, SGB_DATA_SND_0a70
+ ld hl, DataSndPacket_0a70
call SendSGB
- ld hl, SGB_DATA_SND_0a80
+ ld hl, DataSndPacket_0a80
call SendSGB
- ld hl, SGB_DATA_SND_0a90
+ ld hl, DataSndPacket_0a90
call SendSGB
- ld hl, SGB_DATA_SND_0aa0
+ ld hl, DataSndPacket_0aa0
call SendSGB
- ld hl, SGB_DATA_SND_0ab0
+ ld hl, DataSndPacket_0ab0
call SendSGB
- ld hl, SGB_DATA_SND_0ac0
+ ld hl, DataSndPacket_0ac0
call SendSGB
- ld hl, SGB_PAL01
+ ld hl, Pal01Packet
call SendSGB
- ld hl, SGB_MASK_EN_OFF
+ ld hl, MaskEnPacket_Cancel
call SendSGB
ret
-SGB_DATA_SND_0a50: ; 0a50 (0:0a50)
+DataSndPacket_0a50: ; 0a50 (0:0a50)
sgb DATA_SND, 1 ; sgb_command, length
db $5d,$08,$00,$0b,$8c,$d0,$f4,$60,$00,$00,$00,$00,$00,$00,$00
-SGB_DATA_SND_0a60: ; 0a60 (0:0a60)
+DataSndPacket_0a60: ; 0a60 (0:0a60)
sgb DATA_SND, 1 ; sgb_command, length
db $52,$08,$00,$0b,$a9,$e7,$9f,$01,$c0,$7e,$e8,$e8,$e8,$e8,$e0
-SGB_DATA_SND_0a70: ; 0a70 (0:0a70)
+DataSndPacket_0a70: ; 0a70 (0:0a70)
sgb DATA_SND, 1 ; sgb_command, length
db $47,$08,$00,$0b,$c4,$d0,$16,$a5,$cb,$c9,$05,$d0,$10,$a2,$28
-SGB_DATA_SND_0a80: ; 0a80 (0:0a80)
+DataSndPacket_0a80: ; 0a80 (0:0a80)
sgb DATA_SND, 1 ; sgb_command, length
db $3c,$08,$00,$0b,$f0,$12,$a5,$c9,$c9,$c8,$d0,$1c,$a5,$ca,$c9
-SGB_DATA_SND_0a90: ; 0a90 (0:0a90)
+DataSndPacket_0a90: ; 0a90 (0:0a90)
sgb DATA_SND, 1 ; sgb_command, length
db $31,$08,$00,$0b,$0c,$a5,$ca,$c9,$7e,$d0,$06,$a5,$cb,$c9,$7e
-SGB_DATA_SND_0aa0: ; 0aa0 (0:0aa0)
+DataSndPacket_0aa0: ; 0aa0 (0:0aa0)
sgb DATA_SND, 1 ; sgb_command, length
db $26,$08,$00,$0b,$39,$cd,$48,$0c,$d0,$34,$a5,$c9,$c9,$80,$d0
-SGB_DATA_SND_0ab0: ; 0ab0 (0:0ab0)
+DataSndPacket_0ab0: ; 0ab0 (0:0ab0)
sgb DATA_SND, 1 ; sgb_command, length
db $1b,$08,$00,$0b,$ea,$ea,$ea,$ea,$ea,$a9,$01,$cd,$4f,$0c,$d0
-SGB_DATA_SND_0ac0: ; 0ac0 (0:0ac0)
+DataSndPacket_0ac0: ; 0ac0 (0:0ac0)
sgb DATA_SND, 1 ; sgb_command, length
db $10,$08,$00,$0b,$4c,$20,$08,$ea,$ea,$ea,$ea,$ea,$60,$ea,$ea
-SGB_MASK_EN_ON: ; 0ad0 (0:0ad0)
+MaskEnPacket_Freeze: ; 0ad0 (0:0ad0)
sgb MASK_EN, 1 ; sgb_command, length
- db $01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
+ db MASK_EN_FREEZE_SCREEN
+ ds $0e
-SGB_MASK_EN_OFF: ; 0ae0 (0:0ae0)
+MaskEnPacket_Cancel: ; 0ae0 (0:0ae0)
sgb MASK_EN, 1 ; sgb_command, length
- db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
+ db MASK_EN_CANCEL_MASK
+ ds $0e
-SGB_PAL01: ; 0af0 (0:0af0)
+Pal01Packet: ; 0af0 (0:0af0)
sgb PAL01, 1 ; sgb_command, length
- db $9c,$63,$94,$42,$08,$21,$00,$00,$1f,$00,$0f,$00,$07,$00,$00
-
-SGB_PAL23: ; 0b00 (0:0b00)
+ rgb 28, 28, 24
+ rgb 20, 20, 16
+ rgb 8, 8, 8
+ rgb 0, 0, 0
+ rgb 31, 0, 0
+ rgb 15, 0, 0
+ rgb 7, 0, 0
+ db $00
+
+Pal23Packet: ; 0b00 (0:0b00)
sgb PAL23, 1 ; sgb_command, length
- db $e0,$03,$e0,$01,$e0,$00,$00,$00,$00,$7c,$00,$3c,$00,$1c,$00
-
-SGB_ATTR_BLK_0b10: ; 0b10 (0:0b10)
+ rgb 0, 31, 0
+ rgb 0, 15, 0
+ rgb 0, 7, 0
+ rgb 0, 0, 0
+ rgb 0, 0, 31
+ rgb 0, 0, 15
+ rgb 0, 0, 7
+ db $00
+
+AttrBlkPacket_0b10: ; 0b10 (0:0b10)
sgb ATTR_BLK, 1 ; sgb_command, length
- db $01,$03,$09,$05,$05,$0a,$0a,$00,$00,$00,$00,$00,$00,$00,$00
+ db 1 ; number of data sets
+ ; Control Code, Color Palette Designation, X1, Y1, X2, Y2
+ db ATTR_BLK_CTRL_INSIDE + ATTR_BLK_CTRL_LINE, 1 << 0 + 2 << 2, 5, 5, 10, 10 ; data set 1
+ ds 6 ; data set 2
+ ds 2 ; data set 3
; send SGB command
SendSGB: ; 0b20 (0:0b20)
@@ -1776,12 +1817,12 @@ SendSGB: ; 0b20 (0:0b20)
DetectSGB: ; 0b59 (0:0b59)
ld bc, 60
call Wait
- ld hl, SGB_MLT_REQ_2
+ ld hl, MltReq2Packet
call SendSGB
ld a, [rJOYP]
and $3
cp $3
- jr nz, .asm_ba3
+ jr nz, .sgb
ld a, $20
ld [rJOYP], a
ld a, [rJOYP]
@@ -1804,24 +1845,26 @@ DetectSGB: ; 0b59 (0:0b59)
ld a, [rJOYP]
and $3
cp $3
- jr nz, .asm_ba3
- ld hl, SGB_MLT_REQ_1
+ jr nz, .sgb
+ ld hl, MltReq1Packet
call SendSGB
or a
ret
-.asm_ba3
- ld hl, SGB_MLT_REQ_1
+.sgb
+ ld hl, MltReq1Packet
call SendSGB
scf
ret
-SGB_MLT_REQ_1: ; 0bab (0:0bab)
+MltReq1Packet: ; 0bab (0:0bab)
sgb MLT_REQ, 1 ; sgb_command, length
- db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
+ db MLT_REQ_1_PLAYER
+ ds $0e
-SGB_MLT_REQ_2: ; 0bbb (0:0bbb)
+MltReq2Packet: ; 0bbb (0:0bbb)
sgb MLT_REQ, 1 ; sgb_command, length
- db $01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
+ db MLT_REQ_2_PLAYERS
+ ds $0e
Func_0bcb: ; 0bcb (0:0bcb)
di
@@ -1834,8 +1877,8 @@ Func_0bcb: ; 0bcb (0:0bcb)
ld [rLCDC], a
ld a, %11100100
ld [rBGP], a
- ld de, vTiles1
- ld bc, vBGMapTiles - vTiles1
+ ld de, v0Tiles1
+ ld bc, v0BGMapTiles1 - v0Tiles1
.loop
ld a, [hli]
ld [de], a
@@ -1844,7 +1887,7 @@ Func_0bcb: ; 0bcb (0:0bcb)
ld a, b
or c
jr nz, .loop
- ld hl, vBGMapTiles
+ ld hl, v0BGMapTiles1
ld de, $000c
ld a, $80
ld c, $d
@@ -1883,7 +1926,7 @@ Wait: ; 0c08 (0:0c08)
jr nz, Wait
ret
-; memcpy(DE, HL, B), but only during hblank
+; copy b bytes of data from hl to de, but only during hblank
HblankCopyDataHLtoDE: ; 0c19 (0:0c19)
push bc
.loop
@@ -1905,7 +1948,7 @@ HblankCopyDataHLtoDE: ; 0c19 (0:0c19)
pop bc
ret
-; memcpy(HL, DE, C), but only during hblank
+; copy c bytes of data from de to hl, but only during hblank
HblankCopyDataDEtoHL: ; 0c32 (0:0c32)
push bc
.loop
@@ -1928,7 +1971,34 @@ HblankCopyDataDEtoHL: ; 0c32 (0:0c32)
ret
; 0xc4b
- INCROM $0c4b, $0c91
+; returns a *= 10
+Func_0c4b: ; 0c4b (0:0c4b)
+ push de
+ ld e, a
+ add a
+ add a
+ add e
+ add a
+ pop de
+ ret
+; 0xc53
+
+; returns hl *= 10
+Func_0c53: ; 0c53 (0:0c53)
+ push de
+ ld l, a
+ ld e, a
+ ld h, $00
+ ld d, h
+ add hl, hl
+ add hl, hl
+ add hl, de
+ add hl, hl
+ pop de
+ ret
+; 0xc5f
+
+ INCROM $0c5f, $0c91
; called at roughly 240Hz by TimerHandler
SerialTimerHandler: ; 0c91 (0:0c91)
@@ -1968,7 +2038,65 @@ SerialTimerHandler: ; 0c91 (0:0c91)
ret
; 0xcc5
- INCROM $0cc5, $0d26
+Func_0cc5: ; 0cc5 (0:0cc5)
+ ld hl, wSerialRecvCounter
+ or a
+ jr nz, .asm_cdc
+ ld a, [hl]
+ or a
+ ret z
+ ld [hl], $00
+ ld a, [wSerialRecvBuf]
+ ld e, $12
+ cp $29
+ jr z, .asm_cfa
+ xor a
+ scf
+ ret
+.asm_cdc
+ ld a, $29
+ ld [rSB], a
+ ld a, $01
+ ld [rSC], a
+ ld a, $81
+ ld [rSC], a
+.asm_ce8
+ ld a, [hl]
+ or a
+ jr z, .asm_ce8
+ ld [hl], $00
+ ld a, [wSerialRecvBuf]
+ ld e, $29
+ cp $12
+ jr z, .asm_cfa
+ xor a
+ scf
+ ret
+.asm_cfa
+ xor a
+ ld [wSerialSendBufIndex], a
+ ld [wcb80], a
+ ld [wSerialSendBufToggle], a
+ ld [wSerialSendSave], a
+ ld [wcba3], a
+ ld [wSerialRecvIndex], a
+ ld [wSerialRecvCounter], a
+ ld [wSerialLastReadCA], a
+ ld a, e
+ cp $29
+ jr nz, .asm_d21
+ ld bc, $800
+.asm_d1b
+ dec bc
+ ld a, c
+ or b
+ jr nz, .asm_d1b
+ ld a, e
+.asm_d21
+ ld [wSerialOp], a
+ scf
+ ret
+; 0xd26
SerialHandler: ; 0d26 (0:0d26)
push af
@@ -2030,7 +2158,7 @@ SerialHandleRecv: ; 0d77 (0:0d77)
dec e
jr z, .last_was_ca
cp $ac
- ret z ; return if read_data == $ac
+ ret z ; return if read_data == $ac
cp $ca
jr z, .read_ca
or a
@@ -2042,7 +2170,7 @@ SerialHandleRecv: ; 0d77 (0:0d77)
set 6, [hl]
ret
.read_ca
- inc [hl] ; inc [wSerialLastReadCA]
+ inc [hl] ; inc [wSerialLastReadCA]
ret
.last_was_ca
; if last byte read was $ca, flip all bits of data received
@@ -2263,7 +2391,7 @@ ResetSerial: ; 0ea6 (0:0ea6)
xor a
ld [rSB], a
ld [rSC], a
- ; fallthrough
+; fallthrough
ClearSerialData: ; 0eb1 (0:0eb1)
ld hl, wSerialOp
ld bc, $0051
@@ -2325,16 +2453,16 @@ Func_0ed5: ; 0ed5 (0:0ed5)
INCROM $0ef1, $0f35
-Func_0f35: ; 0f35 (0:0f35)
+DuelTransmissionError: ; 0f35 (0:0f35)
ld a, [wSerialFlags]
ld l, a
- ld h, $0
- call Func_2ec4
+ ld h, 0
+ call LoadTxRam3
ldtx hl, TransmissionErrorText
call DrawWideTextBox_WaitForInput
ld a, $ff
ld [wd0c3], a
- ld hl, $cbe5
+ ld hl, wcbe5
ld a, [hli]
ld h, [hl]
ld l, a
@@ -2354,27 +2482,29 @@ Func_0f58: ; 0f58 (0:0f58)
call GetTurnDuelistVariable
or a ; cp DUELIST_TYPE_PLAYER
jr z, .asm_f70
- ld hl, $cbe2
+ ld hl, wcbe2
ld de, wRNG1
jr .asm_f76
.asm_f70
ld hl, wRNG1
- ld de, $cbe2
+ ld de, wcbe2
.asm_f76
ld c, $3
call Func_0e63
- jp c, Func_0f35
+ jp c, DuelTransmissionError
ret
-Func_0f7f: ; 0f7f (0:0f7f)
+; sets hAIActionTableIndex to an AI action specified in register a
+; also appears to handle sending data in a link duel
+SetDuelAIAction: ; 0f7f (0:0f7f)
push hl
push bc
- ld [$ff9e], a
+ ldh [hAIActionTableIndex], a
ld a, DUELVARS_DUELIST_TYPE
call GetNonTurnDuelistVariable
cp DUELIST_TYPE_LINK_OPP
jr nz, .not_link
- ld hl, $ff9e
+ ld hl, hAIActionTableIndex
ld bc, $000a
call Func_0ebf
call Func_0f58
@@ -2387,7 +2517,7 @@ Func_0f7f: ; 0f7f (0:0f7f)
Func_0f9b: ; 0f9b (0:0f9b)
push hl
push bc
- ld hl, $ff9e
+ ld hl, hAIActionTableIndex
ld bc, $000a
call Func_0ed5
call Func_0f58
@@ -2439,7 +2569,7 @@ Func_0fac: ; 0fac (0:0fac)
ld hl, wcbed
ld bc, $0008
call Func_0ebf
- jp c, Func_0f35
+ jp c, DuelTransmissionError
pop bc
pop de
pop hl
@@ -2452,7 +2582,7 @@ Func_0fe9: ; 0fe9 (0:0fe9)
ld bc, $0008
push hl
call Func_0ed5
- jp c, Func_0f35
+ jp c, DuelTransmissionError
pop hl
ld e, [hl]
inc hl
@@ -2478,15 +2608,15 @@ Func_0fe9: ; 0fe9 (0:0fe9)
Func_100b: ; 100b (0:100b)
ld a, $2
- call BankswitchRAM
+ call BankswitchSRAM
call $669d
xor a
- call BankswitchRAM
- call EnableExtRAM
- ld hl, $a008
+ call BankswitchSRAM
+ call EnableSRAM
+ ld hl, sa008
ld a, [hl]
inc [hl]
- call DisableExtRAM
+ call DisableSRAM
and $3
add $28
ld l, $0
@@ -2494,38 +2624,38 @@ Func_100b: ; 100b (0:100b)
add hl, hl
add hl, hl
ld a, $3
- call BankswitchRAM
+ call BankswitchSRAM
push hl
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
- call GetCardInDeckPosition
+ call GetCardIDFromDeckIndex
ld a, e
- ld [wTempTurnDuelistCardId], a
+ ld [wTempTurnDuelistCardID], a
call SwapTurn
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
- call GetCardInDeckPosition
+ call GetCardIDFromDeckIndex
ld a, e
- ld [wTempNonTurnDuelistCardId], a
+ ld [wTempNonTurnDuelistCardID], a
call SwapTurn
pop hl
push hl
- call EnableExtRAM
- ld a, [wcc06]
+ call EnableSRAM
+ ld a, [wDuelTurns]
ld [hli], a
- ld a, [wTempNonTurnDuelistCardId]
+ ld a, [wTempNonTurnDuelistCardID]
ld [hli], a
- ld a, [wTempTurnDuelistCardId]
+ ld a, [wTempTurnDuelistCardID]
ld [hli], a
pop hl
ld de, $0010
add hl, de
ld e, l
ld d, h
- call DisableExtRAM
+ call DisableSRAM
bank1call $66a4
xor a
- call BankswitchRAM
+ call BankswitchSRAM
ret
; copies the deck pointed to by de to wPlayerDeck or wOpponentDeck
@@ -2559,7 +2689,7 @@ CopyDeckData: ; 1072 (0:1072)
jr nz, .card_quantity_loop
jr .next_card
.done
- ld hl, $cce9
+ ld hl, wcce9
ld a, [de]
inc de
ld [hli], a
@@ -2571,28 +2701,29 @@ CopyDeckData: ; 1072 (0:1072)
ld a, [hl]
or a
ret nz
- rst $38
+ debug_ret
scf
ret
; 0x10aa
-Func_10aa: ; 10aa (0:10aa)
+; return, in register a, the amount of unclaimed prizes that the turn holder has left
+CountPrizes: ; 10aa (0:10aa)
push hl
ld a, DUELVARS_PRIZES
call GetTurnDuelistVariable
ld l, a
xor a
-.asm_10b2
+.count_loop
rr l
adc $00
inc l
dec l
- jr nz, .asm_10b2
+ jr nz, .count_loop
pop hl
ret
; 0x10bc
-; shuffles the deck specified by hWhoseTurn
+; shuffles the turn holder's deck
; if less than 60 cards remain in the deck, make sure the rest are ignored
ShuffleDeck: ; 10bc (0:10bc)
ldh a, [hWhoseTurn]
@@ -2604,12 +2735,12 @@ ShuffleDeck: ; 10bc (0:10bc)
ld b, a
ld a, DUELVARS_DECK_CARDS
add [hl]
- ld l, a ; hl = position of the first (top) deck card in the wPlayerDeckCards or wOpponentDeckCards array
+ ld l, a ; hl = DUELVARS_DECK_CARDS + [DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK]
ld a, b ; a = number of cards in the deck
call ShuffleCards
ret
-; draw a card from the deck, saving its location as CARD_LOCATION_JUST_DRAWN
+; draw a card from the turn holder's deck, saving its location as CARD_LOCATION_JUST_DRAWN
; returns c if deck is empty, nc if a card was succesfully drawn
DrawCardFromDeck: ; 10cf (0:10cf)
push hl
@@ -2627,16 +2758,70 @@ DrawCardFromDeck: ; 10cf (0:10cf)
pop hl
or a
ret
-
.empty_deck
pop hl
scf
ret
; 0x10e8
- INCROM $10e8, $1123
+; add a card to the top of the turn holder's deck
+; the card is identified by register a, which contains the card number within the deck (0-59)
+ReturnCardToDeck: ; 10e8 (0:10e8)
+ push hl
+ push af
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ dec a
+ ld [hl], a ; decrement number of cards not in deck
+ add DUELVARS_DECK_CARDS
+ ld l, a ; point to top deck card
+ pop af
+ ld [hl], a ; set top deck card
+ ld l, a
+ ld [hl], CARD_LOCATION_DECK
+ ld a, l
+ pop hl
+ ret
+; 0x10fc
-; adds a card to the hand and increments the number of cards in the hand
+; search a card in the turn holder's deck, extract it, and add it to the hand
+; the card is identified by register a, which contains the card number within the deck (0-59)
+SearchCardInDeckAndAddToHand: ; 10fc (0:10fc)
+ push af
+ push hl
+ push de
+ push bc
+ ld c, a
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ ld a, DECK_SIZE
+ sub [hl]
+ inc [hl] ; increment number of cards not in deck
+ ld b, a ; DECK_SIZE - [DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK] (number of cards in deck)
+ ld l, c
+ set CARD_LOCATION_JUST_DRAWN_F, [hl]
+ ld l, DUELVARS_DECK_CARDS + DECK_SIZE - 1
+ ld e, l
+ ld d, h ; hl = de = DUELVARS_DECK_CARDS + DECK_SIZE - 1 (last card)
+ inc b
+ jr .match
+.loop
+ ld a, [hld]
+ cp c
+ jr z, .match
+ ld [de], a
+ dec de
+.match
+ dec b
+ jr nz, .loop
+ pop bc
+ pop de
+ pop hl
+ pop af
+ ret
+; 0x1123
+
+; adds a card to the turn holder's hand and increments the number of cards in the hand
; the card is identified by register a, which contains the card number within the deck (0-59)
AddCardToHand: ; 1123 (0:1123)
push af
@@ -2646,7 +2831,7 @@ AddCardToHand: ; 1123 (0:1123)
ld l, a
ldh a, [hWhoseTurn]
ld h, a
- ; write $1 (CARD_LOCATION_HAND) into the location of this card
+ ; write CARD_LOCATION_HAND into the location of this card
ld [hl], CARD_LOCATION_HAND
; increment number of cards in hand
ld l, DUELVARS_NUMBER_OF_CARDS_IN_HAND
@@ -2662,9 +2847,242 @@ AddCardToHand: ; 1123 (0:1123)
ret
; 0x1139
- INCROM $1139, $123b
+; removes a card from the turn holder's hand and decrements the number of cards in the hand
+; the card is identified by register a, which contains the card number within the deck (0-59)
+RemoveCardFromHand: ; 1139 (0:1139)
+ push af
+ push hl
+ push bc
+ push de
+ ld c, a
+ ld a, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ call GetTurnDuelistVariable
+ or a
+ jr z, .done ; done if no cards in hand
+ ld b, a ; number of cards in hand
+ ld l, DUELVARS_HAND
+ ld e, l
+ ld d, h
+.next_card
+ ld a, [hli]
+ cp c
+ jr nz, .no_match
+ push hl
+ ld l, DUELVARS_NUMBER_OF_CARDS_IN_HAND
+ dec [hl]
+ pop hl
+ jr .done_card
+.no_match
+ ld [de], a ; keep card in hand
+ inc de
+.done_card
+ dec b
+ jr nz, .next_card
+.done
+ pop de
+ pop bc
+ pop hl
+ pop af
+ ret
+; 0x1160
+
+; moves a card to the turn holder's discard pile, as long as it is in the hand
+; the card is identified by register a, which contains the card number within the deck (0-59)
+MoveHandCardToDiscardPile: ; 1160 (0:1160)
+ call GetTurnDuelistVariable
+ ld a, [hl]
+ and $ff ^ CARD_LOCATION_JUST_DRAWN
+ cp CARD_LOCATION_HAND
+ ret nz ; return if card not in hand
+ ld a, l
+ call RemoveCardFromHand
+; fallthrough
+
+; puts the card with the deck index (0-59) given in a into the discard pile
+PutCardInDiscardPile: ; 116a (0:116a)
+ push af
+ push hl
+ push de
+ call GetTurnDuelistVariable
+ ld [hl], CARD_LOCATION_DISCARD_PILE
+ ld e, l
+ ld l, DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE
+ inc [hl]
+ ld a, DUELVARS_DECK_CARDS - 1
+ add [hl]
+ ld l, a
+ ld [hl], e ; save card to DUELVARS_DECK_CARDS + [DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE]
+ pop de
+ pop hl
+ pop af
+ ret
+; 0x1182
+
+; search a card in the turn holder's discard pile, extract it, and add it to the hand
+; the card is identified by register a, which contains the card number within the deck (0-59)
+MoveDiscardPileCardToHand: ; 1182 (0:1182)
+ push hl
+ push de
+ push bc
+ call GetTurnDuelistVariable
+ set CARD_LOCATION_JUST_DRAWN_F, [hl]
+ ld b, l
+ ld l, DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE
+ ld a, [hl]
+ or a
+ jr z, .done ; done if no cards in discard pile
+ ld c, a
+ dec [hl] ; decrement number of cards in discard pile
+ ld l, DUELVARS_DECK_CARDS
+ ld e, l
+ ld d, h ; de = hl = DUELVARS_DECK_CARDS
+.next_card
+ ld a, [hli]
+ cp b
+ jr z, .match
+ ld [de], a
+ inc de
+.match
+ dec c
+ jr nz, .next_card
+ ld a, b
+.done
+ pop bc
+ pop de
+ pop hl
+ ret
+; 0x11a5
+
+; return in the z flag whether turn holder's prize a (0-7) has been taken or not
+; z: taken, nz: not taken
+CheckPrizeTaken: ; 11a5 (0:11a5)
+ ld e, a
+ ld d, 0
+ ld hl, PowersOf2
+ add hl, de
+ ld a, [hl]
+ ld e, a
+ cpl
+ ld d, a
+ ld a, DUELVARS_PRIZES
+ call GetTurnDuelistVariable
+ and e
+ ret
-CreateHandCardBuffer: ; 123b (0:123b)
+PowersOf2:
+ db $01, $02, $04, $08, $10, $20, $40, $80
+; 0x11bf
+
+; fill wDuelTempList with the turn holder's discard pile cards (their 0-59 deck index)
+; return carry if the turn holder has no cards in the discard pile
+CreateDiscardPileCardList: ; 11bf (0:11bf)
+ ldh a, [hWhoseTurn]
+ ld h, a
+ ld l, DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE
+ ld b, [hl]
+ ld a, DUELVARS_DECK_CARDS - 1
+ add [hl] ; point to last card in discard pile
+ ld l, a
+ ld de, wDuelTempList
+ inc b
+ jr .begin_loop
+.next_card_loop
+ ld a, [hld]
+ ld [de], a
+ inc de
+.begin_loop
+ dec b
+ jr nz, .next_card_loop
+ ld a, $ff ; $ff-terminated
+ ld [de], a
+ ld l, DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE
+ ld a, [hl]
+ or a
+ ret nz
+ scf
+ ret
+; 0x11df
+
+; fill wDuelTempList with the turn holder's remaining deck cards (their 0-59 deck index)
+; return carry if the turn holder has no cards left in the deck
+CreateDeckCardList: ; 11df (0:11df)
+ ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
+ call GetTurnDuelistVariable
+ cp DECK_SIZE
+ jr nc, .no_cards_left_in_deck
+ ld a, DECK_SIZE
+ sub [hl]
+ ld c, a
+ ld b, a ; c = b = DECK_SIZE - [DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK]
+ ld a, [hl]
+ add DUELVARS_DECK_CARDS
+ ld l, a ; l = DUELVARS_DECK_CARDS + [DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK]
+ inc b
+ ld de, wDuelTempList
+ jr .begin_loop
+.next_card
+ ld a, [hli]
+ ld [de], a
+ inc de
+.begin_loop
+ dec b
+ jr nz, .next_card
+ ld a, $ff ; $ff-terminated
+ ld [de], a
+ ld a, c
+ or a
+ ret
+.no_cards_left_in_deck
+ ld a, $ff
+ ld [wDuelTempList], a
+ scf
+ ret
+; 0x120a
+
+; fill wDuelTempList with the turn holder's energy cards
+; in the arena or in a bench slot (their 0-59 deck index).
+; if a == 0: search in CARD_LOCATION_ARENA
+; if a != 0: search in CARD_LOCATION_BENCH_[A]
+; return carry if no energy cards were found
+CreateArenaOrBenchEnergyCardList: ; 120a (0:120a)
+ or CARD_LOCATION_PLAY_AREA
+ ld c, a
+ ld de, wDuelTempList
+ ld a, DUELVARS_CARD_LOCATIONS
+ call GetTurnDuelistVariable
+.next_card_loop
+ ld a, [hl]
+ cp c
+ jr nz, .skip_card ; jump if not in specified play area location
+ ld a, l
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, [wLoadedCard2Type]
+ and 1 << TYPE_ENERGY_F
+ jr z, .skip_card ; jump if Pokemon or trainer card
+ ld a, l
+ ld [de], a ; add to wDuelTempList
+ inc de
+.skip_card
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .next_card_loop
+ ; all cards checked
+ ld a, $ff
+ ld [de], a
+ ld a, [wDuelTempList]
+ cp $ff
+ jr z, .no_energies_found
+ or a
+ ret
+.no_energies_found
+ scf
+ ret
+; 0x123b
+
+; fill wDuelTempList with the turn holder's hand cards (their 0-59 deck index)
+; return carry if the turn holder has no cards in hand
+CreateHandCardList: ; 123b (0:123b)
call FindLastCardInHand
inc b
jr .skip_card
@@ -2673,7 +3091,7 @@ CreateHandCardBuffer: ; 123b (0:123b)
ld a, [hld]
push hl
ld l, a
- bit 6, [hl]
+ bit CARD_LOCATION_JUST_DRAWN_F, [hl]
pop hl
jr nz, .skip_card
ld [de], a
@@ -2682,9 +3100,9 @@ CreateHandCardBuffer: ; 123b (0:123b)
.skip_card
dec b
jr nz, .check_next_card_loop
- ld a, $ff
+ ld a, $ff ; $ff-terminated
ld [de], a
- ld l, (wPlayerNumberOfCardsInHand & $ff)
+ ld l, DUELVARS_NUMBER_OF_CARDS_IN_HAND
ld a, [hl]
or a
ret nz
@@ -2692,24 +3110,48 @@ CreateHandCardBuffer: ; 123b (0:123b)
ret
; 0x1258
- INCROM $1258, $1271
+; sort the turn holder's hand cards by ID (highest to lowest ID)
+; makes use of wDuelTempList
+SortHandCardsByID: ; 1258 (0:1258)
+ call FindLastCardInHand
+.loop
+ ld a, [hld]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .loop
+ ld a, $ff
+ ld [de], a
+ call SortCardsInDuelTempListByID
+ call FindLastCardInHand
+.loop2
+ ld a, [de]
+ inc de
+ ld [hld], a
+ dec b
+ jr nz, .loop2
+ ret
+; 0x1271
-; puts an index to the last (newest) card in current player's hand into hl.
+; returns:
+; b = turn holder's number of cards in hand (DUELVARS_NUMBER_OF_CARDS_IN_HAND)
+; hl = pointer to turn holder's last (newest) card in DUELVARS_HAND
+; de = wDuelTempList
FindLastCardInHand: ; 1271 (0:1271)
ldh a, [hWhoseTurn]
ld h, a
- ld l, (wPlayerNumberOfCardsInHand & $ff)
+ ld l, DUELVARS_NUMBER_OF_CARDS_IN_HAND
ld b, [hl]
- ld a, (wPlayerHand & $ff) - 1
+ ld a, DUELVARS_HAND - 1
add [hl]
ld l, a
- ld de, wDuelCardOrAttackList
+ ld de, wDuelTempList
ret
; shuffles the deck by swapping the position of each card with the position of another random card
; input:
; - a = how many cards to shuffle
-; - hl = position of the first card within the wPlayerDeckCards or wOpponentDeckCards array
+; - hl = DUELVARS_DECK_CARDS + [DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK]
ShuffleCards: ; 127f (0:127f)
or a
ret z ; return if deck is empty
@@ -2746,32 +3188,146 @@ ShuffleCards: ; 127f (0:127f)
ret
; 0x12a3
- INCROM $12a3, $1312
+; sort a $ff-terminated list of deck index cards by ID (lowest to highest ID).
+; the list is wDuelTempList.
+SortCardsInDuelTempListByID: ; 12a3 (0:12a3)
+ ld hl, hTempListPtr_ff99
+ ld [hl], LOW(wDuelTempList)
+ inc hl
+ ld [hl], HIGH(wDuelTempList)
+ jr SortCardsInListByID_CheckForListTerminator
+
+; sort a $ff-terminated list of deck index cards by ID (lowest to highest ID).
+; the pointer to the list is given in hTempListPtr_ff99.
+; sorting by ID rather than deck index means that the order of equal (same ID) cards does not matter,
+; even if they have a different deck index.
+SortCardsInListByID: ; 12ad (0:12ad)
+ ; load [hTempListPtr_ff99] into hl and de
+ ld hl, hTempListPtr_ff99
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld e, l
+ ld d, h
+
+ ; get ID of card with deck index at [de]
+ ld a, [de]
+ call GetCardIDFromDeckIndex_bc
+ ld a, c
+ ldh [hTempCardID_ff9b], a
+ ld a, b
+ ldh [hTempCardID_ff9b + 1], a ; 0
+
+ ; hl = [hTempListPtr_ff99] + 1
+ inc hl
+ jr .check_list_end
+
+.next_card_in_list
+ ld a, [hl]
+ call GetCardIDFromDeckIndex_bc
+ ldh a, [hTempCardID_ff9b + 1]
+ cp b
+ jr nz, .go
+ ldh a, [hTempCardID_ff9b]
+ cp c
+
+.go
+ jr c, .not_lower_id
+
+ ; this card has the lowest ID of those checked so far
+ ld e, l
+ ld d, h
+ ld a, c
+ ldh [hTempCardID_ff9b], a
+ ld a, b
+ ldh [hTempCardID_ff9b + 1], a
+
+.not_lower_id
+ inc hl
+.check_list_end
+ bit 7, [hl] ; $ff is the list terminator
+ jr z, .next_card_in_list
-; given a position in wDuelCardOrAttackList (c510), return:
-; the id of the card in that position in register de
-; its index within the deck (0 - 59) in hTempCardNumber and in register a
-GetCardInC510: ; 1312 (0:1312)
+ ; reached list terminator
+ ld hl, hTempListPtr_ff99
push hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ; swap the lowest ID card found with the card in the current list position
+ ld c, [hl]
+ ld a, [de]
+ ld [hl], a
+ ld a, c
+ ld [de], a
+ pop hl
+ ; [hTempListPtr_ff99] += 1 (point hl to next card in list)
+ inc [hl]
+ jr nz, SortCardsInListByID_CheckForListTerminator
+ inc hl
+ inc [hl]
+; fallthrough
+
+SortCardsInListByID_CheckForListTerminator: ; 12ef (0:12ef)
+ ld hl, hTempListPtr_ff99
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ bit 7, [hl] ; $ff is the list terminator
+ jr z, SortCardsInListByID
+ ret
+; 0x12fa
+
+; returns, in register bc, the id of the card with the deck index specified in register a
+; preserves hl
+GetCardIDFromDeckIndex_bc: ; 12fa (0:12fa)
+ push hl
+ call _GetCardIDFromDeckIndex
+ ld c, a
+ ld b, $0
+ pop hl
+ ret
+; 0x1303
+
+; return [wDuelTempList + a] in a and in hTempCardIndex_ff98
+GetCardInDuelTempList_OnlyDeckIndex: ; 1303 (0:1303)
+ push hl
+ push de
ld e, a
ld d, $0
- ld hl, wDuelCardOrAttackList
+ ld hl, wDuelTempList
add hl, de
ld a, [hl]
- ldh [hTempCardNumber], a
- call GetCardInDeckPosition
+ ldh [hTempCardIndex_ff98], a
+ pop de
pop hl
- ldh a, [hTempCardNumber]
+ ret
+; 0x1312
+
+; given the deck index (0-59) of a card in [wDuelTempList + a], return:
+; - the id of the card with that deck index in register de
+; - [wDuelTempList + a] in hTempCardIndex_ff98 and in register a
+GetCardInDuelTempList: ; 1312 (0:1312)
+ push hl
+ ld e, a
+ ld d, $0
+ ld hl, wDuelTempList
+ add hl, de
+ ld a, [hl]
+ ldh [hTempCardIndex_ff98], a
+ call GetCardIDFromDeckIndex
+ pop hl
+ ldh a, [hTempCardIndex_ff98]
ret
; 0x1324
-; returns, in register de, the id of the card in the deck position specified in register a,
-; preserving af and hl
-GetCardInDeckPosition: ; 1324 (0:1324)
+; returns, in register de, the id of the card with the deck index (0-59) specified by register a
+; preserves af and hl
+GetCardIDFromDeckIndex: ; 1324 (0:1324)
push af
push hl
- call _GetCardInDeckPosition
+ call _GetCardIDFromDeckIndex
ld e, a
ld d, $0
pop hl
@@ -2779,10 +3335,59 @@ GetCardInDeckPosition: ; 1324 (0:1324)
ret
; 0x132f
- INCROM $132f, $1362
+; remove card c from wDuelTempList (it contains a $ff-terminated list of deck indexes)
+RemoveCardFromDuelTempList: ; 132f (0:132f)
+ push hl
+ push de
+ push bc
+ ld hl, wDuelTempList
+ ld e, l
+ ld d, h
+ ld c, a
+ ld b, $00
+.next
+ ld a, [hli]
+ cp $ff
+ jr z, .end_of_list
+ cp c
+ jr z, .match
+ ld [de], a
+ inc de
+ inc b
+.match
+ jr .next
+.end_of_list
+ ld [de], a
+ ld a, b
+ or a
+ jr nz, .done
+ scf
+.done
+ pop bc
+ pop de
+ pop hl
+ ret
+; 0x1351
-; returns, in register a, the id of the card in the deck position specified in register a
-_GetCardInDeckPosition: ; 1362 (0:1362)
+; return the number of cards in wDuelTempList in a
+CountCardsInDuelTempList: ; 1351 (0:1351)
+ push hl
+ push bc
+ ld hl, wDuelTempList
+ ld b, -1
+.loop
+ inc b
+ ld a, [hli]
+ cp $ff
+ jr nz, .loop
+ ld a, b
+ pop bc
+ pop hl
+ ret
+; 0x1362
+
+; returns, in register a, the id of the card with the deck index (0-59) specified in register a
+_GetCardIDFromDeckIndex: ; 1362 (0:1362)
push de
ld e, a
ld d, $0
@@ -2797,14 +3402,14 @@ _GetCardInDeckPosition: ; 1362 (0:1362)
pop de
ret
-; load data of card in position a to wLoadedCard1
-LoadDeckCardToBuffer1: ; 1376 (0:1376)
+; load data of card with deck index a (0-59) to wLoadedCard1
+LoadCardDataToBuffer1_FromDeckIndex: ; 1376 (0:1376)
push hl
push de
push bc
push af
- call GetCardInDeckPosition
- call LoadCardDataToBuffer1
+ call GetCardIDFromDeckIndex
+ call LoadCardDataToBuffer1_FromCardID
pop af
ld hl, wLoadedCard1
bank1call ConvertTrainerCardToPokemon
@@ -2814,14 +3419,14 @@ LoadDeckCardToBuffer1: ; 1376 (0:1376)
pop hl
ret
-; load data of card in position a to wLoadedCard2
-LoadDeckCardToBuffer2: ; 138c (0:138c)
+; load data of card with deck index a (0-59) to wLoadedCard2
+LoadCardDataToBuffer2_FromDeckIndex: ; 138c (0:138c)
push hl
push de
push bc
push af
- call GetCardInDeckPosition
- call LoadCardDataToBuffer2
+ call GetCardIDFromDeckIndex
+ call LoadCardDataToBuffer2_FromCardID
pop af
ld hl, wLoadedCard2
bank1call ConvertTrainerCardToPokemon
@@ -2832,35 +3437,197 @@ LoadDeckCardToBuffer2: ; 138c (0:138c)
ret
; 0x13a2
- INCROM $13a2, $1485
+Func_13a2: ; 13a2 (0:13a2)
+ ldh a, [hTempCardIndex_ff98]
+ ld d, a
+ ldh a, [hTempPlayAreaLocationOffset_ff9d]
+ ld e, a
+ call Func_13f7
+ ret c
+ ldh a, [hTempPlayAreaLocationOffset_ff9d]
+ ld e, a
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ ld [wccee], a
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ldh a, [hTempCardIndex_ff98]
+ ld [hl], a
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ldh a, [hTempCardIndex_ff98]
+ call PutHandCardInPlayArea
+ ldh a, [hTempPlayAreaLocationOffset_ff9d]
+ ld a, e
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ ld a, [wLoadedCard2HP]
+ ld c, a
+ ld a, [wLoadedCard1HP]
+ sub c
+ add [hl]
+ ld [hl], a
+ ld a, e
+ add $c2
+ ld l, a
+ ld [hl], $00
+ ld a, e
+ add DUELVARS_ARENA_CARD_CHANGED_TYPE
+ ld l, a
+ ld [hl], $00
+ ld a, e
+ or a
+ call z, ResetStatusConditions
+ ldh a, [hTempPlayAreaLocationOffset_ff9d]
+ add DUELVARS_ARENA_CARD_STAGE
+ call GetTurnDuelistVariable
+ ld a, [wLoadedCard1Stage]
+ ld [hl], a
+ or a
+ ret ; !
+ scf
+ ret
+; 0x13f7
+
+Func_13f7: ; 13f7 (0:13f7)
+ push de
+ ld a, e
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, d
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld hl, wLoadedCard2Name
+ ld de, wLoadedCard1NonPokemonDescription
+ ld a, [de]
+ cp [hl]
+ jr nz, .asm_1427
+ inc de
+ inc hl
+ ld a, [de]
+ cp [hl]
+ jr nz, .asm_1427
+ pop de
+ ld a, e
+ add $c2
+ call GetTurnDuelistVariable
+ and $80
+ jr nz, .asm_1425
+ ld a, $01
+ or a
+ scf
+ ret
+.asm_1425
+ or a
+ ret
+.asm_1427
+ pop de
+ xor a
+ scf
+ ret
+; 0x142b
+
+Func_142b: ; 142b (0:142b)
+ ld a, e
+ add $c2
+ call GetTurnDuelistVariable
+ and $80
+ jr nz, .asm_1437
+ jr .asm_145e
+.asm_1437
+ ld a, e
+ add DUELVARS_ARENA_CARD
+ ld l, a
+ ld a, [hl]
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, d
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld hl, wLoadedCard1NonPokemonDescription
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ call $2ecd
+ ld hl, wLoadedCard2Name
+ ld de, wLoadedCard1NonPokemonDescription
+ ld a, [de]
+ cp [hl]
+ jr nz, .asm_145e
+ inc de
+ inc hl
+ ld a, [de]
+ cp [hl]
+ jr nz, .asm_145e
+ or a
+ ret
+.asm_145e
+ xor a
+ scf
+ ret
+; 0x1461
-Func_1485: ; 1485 (0:1485)
+; init the status and all substatuses of the turn holder's arena Pokemon.
+; called when sending a new Pokemon into the arena.
+; does not reset Headache, since it targets a player rather than a Pokemon.
+ResetStatusConditions: ; 1461 (0:1461)
+ push hl
+ ldh a, [hWhoseTurn]
+ ld h, a
+ xor a
+ ld l, DUELVARS_ARENA_CARD_STATUS
+ ld [hl], a
+ ld l, DUELVARS_ARENA_CARD_SUBSTATUS1
+ ld [hl], a
+ ld l, DUELVARS_ARENA_CARD_SUBSTATUS2
+ ld [hl], a
+ ld l, DUELVARS_ARENA_CARD_CHANGED_WEAKNESS
+ ld [hl], a
+ ld l, DUELVARS_ARENA_CARD_CHANGED_RESISTANCE
+ ld [hl], a
+ ld l, DUELVARS_ARENA_CARD_SUBSTATUS3
+ res SUBSTATUS3_THIS_TURN_DOUBLE_DAMAGE, [hl]
+ ld l, DUELVARS_ARENA_CARD_DISABLED_MOVE_INDEX
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ pop hl
+ ret
+; 0x1485
+
+; Removes a Pokemon card from the hand and places it in the arena or first available bench slot.
+; If the Pokemon is placed in the arena, the status conditions of the player's arena card are zeroed.
+; input:
+; - a = deck index of the card
+; return carry if there is no room for more Pokemon
+PutHandPokemonCardInPlayArea: ; 1485 (0:1485)
push af
ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY
call GetTurnDuelistVariable
- cp MAX_POKEMON_IN_PLAY
- jr nc, .too_many_pokemon_in_play
+ cp MAX_PLAY_AREA_POKEMON
+ jr nc, .already_max_pkmn_in_play
inc [hl]
- ld e, a
+ ld e, a ; play area offset to place card
pop af
push af
- call $14d2
+ call PutHandCardInPlayArea
ld a, e
- add $bb
+ add DUELVARS_ARENA_CARD
ld l, a
pop af
- ld [hl], a
- call LoadDeckCardToBuffer2
- ld a, $c8
+ ld [hl], a ; set card in arena or benchx
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, DUELVARS_ARENA_CARD_HP
add e
ld l, a
ld a, [wLoadedCard2HP]
- ld [hl], a
+ ld [hl], a ; set card's HP
ld a, $c2
add e
ld l, a
ld [hl], $0
- ld a, $d4
+ ld a, DUELVARS_ARENA_CARD_CHANGED_TYPE
add e
ld l, a
ld [hl], $0
@@ -2872,32 +3639,201 @@ Func_1485: ; 1485 (0:1485)
add e
ld l, a
ld [hl], $0
- ld a, $ce
+ ld a, DUELVARS_ARENA_CARD_STAGE
add e
ld l, a
ld a, [wLoadedCard2Stage]
- ld [hl], a
+ ld [hl], a ; set card's evolution stage
ld a, e
or a
- call z, $1461
+ call z, ResetStatusConditions ; only call if Pokemon is being place in the arena
ld a, e
or a
ret
-.too_many_pokemon_in_play
+.already_max_pkmn_in_play
pop af
scf
ret
; 0x14d2
- INCROM $14d2, $159f
+; Removes a card from the hand and changes its location to arena or bench. Given that
+; DUELVARS_ARENA_CARD or DUELVARS_BENCH aren't affected, this function is meant for energy and trainer cards.
+; input:
+; - a = deck index of the card
+; - e = play area location offset (PLAY_AREA_*)
+; returns
+; - a = CARD_LOCATION_PLAY_AREA + e
+PutHandCardInPlayArea: ; 14d2 (0:14d2)
+ call RemoveCardFromHand
+ call GetTurnDuelistVariable
+ ld a, e
+ or CARD_LOCATION_PLAY_AREA
+ ld [hl], a
+ ret
+; 0x14dd
+
+; move the play area Pokemon card of the turn holder at CARD_LOCATION_PLAY_AREA + a
+; to the discard pile
+MovePlayAreaCardToDiscardPile: ; 14dd (0:14dd)
+ call EmptyPlayAreaSlot
+ ld l, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY
+ dec [hl]
+ ld l, DUELVARS_CARD_LOCATIONS
+.next_card
+ ld a, e
+ or CARD_LOCATION_PLAY_AREA
+ cp [hl]
+ jr nz, .not_in_location
+ push de
+ ld a, l
+ call PutCardInDiscardPile
+ pop de
+.not_in_location
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .next_card
+ ret
+; 0x14f8
+
+; init a turn holder's play area slot to empty
+; which slot (arena or benchx) is determined by the play area location offset (PLAY_AREA_*) in e
+EmptyPlayAreaSlot: ; 14f8 (0:14f8)
+ ldh a, [hWhoseTurn]
+ ld h, a
+ ld d, -1
+ ld a, DUELVARS_ARENA_CARD
+ call .init_duelvar
+ ld d, 0
+ ld a, DUELVARS_ARENA_CARD_HP
+ call .init_duelvar
+ ld a, DUELVARS_ARENA_CARD_STAGE
+ call .init_duelvar
+ ld a, DUELVARS_ARENA_CARD_CHANGED_TYPE
+ call .init_duelvar
+ ld a, $da
+ call .init_duelvar
+ ld a, $e0
+.init_duelvar
+ add e
+ ld l, a
+ ld [hl], d
+ ret
+; 0x151e
+
+; shift play area Pokemon of both players to the first available play area (arena + benchx) slots
+ShiftAllPokemonToFirstPlayAreaSlots: ; 151e (0:151e)
+ call ShiftTurnPokemonToFirstPlayAreaSlots
+ call SwapTurn
+ call ShiftTurnPokemonToFirstPlayAreaSlots
+ call SwapTurn
+ ret
+; 0x152b
+
+; shift play area Pokemon of the turn holder to the first available play area (arena + benchx) slots
+ShiftTurnPokemonToFirstPlayAreaSlots: ; 152b (0:152b)
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ lb de, PLAY_AREA_ARENA, PLAY_AREA_ARENA
+.next_play_area_slot
+ bit 7, [hl]
+ jr nz, .empty_slot
+ call SwapPlayAreaPokemon
+ inc e
+.empty_slot
+ inc hl
+ inc d
+ ld a, d
+ cp MAX_PLAY_AREA_POKEMON
+ jr nz, .next_play_area_slot
+ ret
+; 0x1543
+
+; swap the data of the turn holder's arena Pokemon card with the
+; data of the turn holder's Pokemon card in play area e.
+; reset the status and all substatuses of the arena Pokemon before swapping.
+; e is the play area location offset of the bench Pokemon (PLAY_AREA_*).
+SwapArenaWithBenchPokemon: ; 1543 (0:1543)
+ call ResetStatusConditions
+ ld d, PLAY_AREA_ARENA
+; fallthrough
+
+; swap the data of the turn holder's Pokemon card in play area d with the
+; data of the turn holder's Pokemon card in play area e.
+; d and e are play area location offsets (PLAY_AREA_*).
+SwapPlayAreaPokemon: ; 1548 (0:1548)
+ push bc
+ push de
+ push hl
+ ld a, e
+ cp d
+ jr z, .done
+ ldh a, [hWhoseTurn]
+ ld h, a
+ ld b, a
+ ld a, DUELVARS_ARENA_CARD
+ call .swap_duelvar
+ ld a, DUELVARS_ARENA_CARD_HP
+ call .swap_duelvar
+ ld a, $c2
+ call .swap_duelvar
+ ld a, DUELVARS_ARENA_CARD_STAGE
+ call .swap_duelvar
+ ld a, DUELVARS_ARENA_CARD_CHANGED_TYPE
+ call .swap_duelvar
+ ld a, $e0
+ call .swap_duelvar
+ ld a, $da
+ call .swap_duelvar
+ set CARD_LOCATION_PLAY_AREA_F, d
+ set CARD_LOCATION_PLAY_AREA_F, e
+ ld l, DUELVARS_CARD_LOCATIONS
+.update_card_locations_loop
+ ; update card locations of the two swapped cards
+ ld a, [hl]
+ cp e
+ jr nz, .next1
+ ld a, d
+ jr .update_location
+.next1
+ cp d
+ jr nz, .next2
+ ld a, e
+.update_location
+ ld [hl], a
+.next2
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .update_card_locations_loop
+.done
+ pop hl
+ pop de
+ pop bc
+ ret
+
+.swap_duelvar
+ ld c, a
+ add e ; play area location offset of card 1
+ ld l, a
+ ld a, c
+ add d ; play area location offset of card 2
+ ld c, a
+ ld a, [bc]
+ push af
+ ld a, [hl]
+ ld [bc], a
+ pop af
+ ld [hl], a
+ ret
+; 0x159f
-; This function iterates through the card locations array to find out which and how many
-; energy cards are in arena (i.e. attached to the active pokemon).
-; One or more location constants (so long as they don't clash with the arena location constant)
-; can be specified in register e; if so, energies found in that location will be counted too.
+; Find which and how many energy cards are attached to the turn holder's Pokemon card in the arena,
+; or a Pokemon card in the bench, depending on the value of register e.
+; input: e (location to check) = CARD_LOCATION_* - CARD_LOCATION_PLAY_AREA
; Feedback is returned in wAttachedEnergies and wTotalAttachedEnergies.
-GetAttachedEnergies: ; 159f (0:159f)
+GetPlayAreaCardAttachedEnergies: ; 159f (0:159f)
push hl
push de
push bc
@@ -2908,8 +3844,8 @@ GetAttachedEnergies: ; 159f (0:159f)
ld [hli], a
dec c
jr nz, .zero_energies_loop
- ld a, CARD_LOCATION_ARENA
- or e ; if e is non-0, arena is not the only location that counts
+ ld a, CARD_LOCATION_PLAY_AREA
+ or e ; if e is non-0, a bench location is checked instead
ld e, a
ldh a, [hWhoseTurn]
ld h, a
@@ -2924,11 +3860,11 @@ GetAttachedEnergies: ; 159f (0:159f)
push de
push bc
ld a, l
- call LoadDeckCardToBuffer2
+ call LoadCardDataToBuffer2_FromDeckIndex
ld a, [wLoadedCard2Type]
bit TYPE_ENERGY_F, a
jr z, .not_an_energy_card
- and $7 ; zero bit 3 to extract the type
+ and TYPE_PKMN ; zero bit 3 to extract the type
ld e, a
ld d, $0
ld hl, wAttachedEnergies
@@ -2951,11 +3887,11 @@ GetAttachedEnergies: ; 159f (0:159f)
ld hl, wAttachedEnergies
ld c, NUM_TYPES
xor a
-.sumAttachedEnergiesLoop
+.sum_attached_energies_loop
add [hl]
inc hl
dec c
- jr nz, .sumAttachedEnergiesLoop
+ jr nz, .sum_attached_energies_loop
ld [hl], a ; save to wTotalAttachedEnergies
pop bc
pop de
@@ -2965,24 +3901,24 @@ GetAttachedEnergies: ; 159f (0:159f)
; returns in a how many times card e can be found in location b
; e = card id to search
-; b = location to consider (deck, hand, arena...)
+; b = location to consider (CARD_LOCATION_*)
; h = PLAYER_TURN or OPPONENT_TURN
CountCardIDInLocation: ; 15ef (0:15ef)
push bc
- ld l, $0
+ ld l, DUELVARS_CARD_LOCATIONS
ld c, $0
.next_card
ld a, [hl]
cp b
- jr nz, .unmatching_card_location_orID
+ jr nz, .unmatching_card_location_or_ID
ld a, l
push hl
- call _GetCardInDeckPosition
+ call _GetCardIDFromDeckIndex
cp e
pop hl
- jr nz, .unmatching_card_location_orID
+ jr nz, .unmatching_card_location_or_ID
inc c
-.unmatching_card_location_orID
+.unmatching_card_location_or_ID
inc l
ld a, l
cp DECK_SIZE
@@ -3014,23 +3950,116 @@ GetNonTurnDuelistVariable: ; 1611 (0:1611)
ret
; 0x161e
- INCROM $161e, $16c0
+Func_161e: ; 161e (0:161e)
+ ldh a, [hTempCardIndex_ff98]
+ call ClearChangedTypesIfMuk
+ ldh a, [hTempCardIndex_ff98]
+ ld d, a
+ ld e, $00
+ call CopyMoveDataAndDamage_FromDeckIndex
+ call Func_16f6
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTempCardIndex_ff9f], a
+ call GetCardIDFromDeckIndex
+ ld a, e
+ ld [wTempTurnDuelistCardID], a
+ ld a, [wLoadedMoveCategory]
+ cp POKEMON_POWER
+ ret nz
+ call $6510
+ ldh a, [hTempCardIndex_ff98]
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld hl, wLoadedCard1Name
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call LoadTxRam2
+ ldtx hl, HavePokemonPowerText
+ call DrawWideTextBox_WaitForInput
+ call Func_0f58
+ ld a, [wLoadedCard1ID]
+ cp MUK
+ jr z, .use_pokemon_power
+ ld a, $01 ; check only Muk
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ jr nc, .use_pokemon_power
+ call $6510
+ ldtx hl, UnableToUsePkmnPowerDueToToxicGasText
+ call DrawWideTextBox_WaitForInput
+ call Func_0f58
+ ret
-CopyMoveDataAndDamageToBuffer: ; 16c0 (0:16c0)
+.use_pokemon_power
+ ld hl, wLoadedMoveEffectCommands
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, $07
+ call CheckMatchingCommand
+ ret c ; return if command not found
+ bank1call $4f9d
+ ldh a, [hTempCardIndex_ff9f]
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld de, wLoadedCard1Name
+ ld hl, wTxRam2
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ ld [hli], a
+ ld de, wLoadedMoveName
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ ld [hl], a
+ ldtx hl, WillUseThePokemonPowerText
+ call DrawWideTextBox_WaitForInput
+ call Func_0f58
+ call $7415
+ ld a, $07
+ call TryExecuteEffectCommandFunction
+ ret
+; 0x16ad
+
+; copies, given a card identified by register a (card ID):
+; - e into wSelectedMoveIndex and d into hTempCardIndex_ff9f
+; - Move1 (if e == 0) or Move2 (if e == 1) data into wLoadedMove
+; - Also from that move, its Damage field into wDamage
+CopyMoveDataAndDamage_FromCardID: ; 16ad (0:16ad)
+ push de
+ push af
ld a, e
ld [wSelectedMoveIndex], a
ld a, d
- ld [$ff9f], a
- call LoadDeckCardToBuffer1
+ ldh [hTempCardIndex_ff9f], a
+ pop af
+ ld e, a
+ ld d, $00
+ call LoadCardDataToBuffer1_FromCardID
+ pop de
+ jr CopyMoveDataAndDamage_FromDeckIndex.card_loaded
+
+; copies, given a card identified by register d (0-59 deck index):
+; - e into wSelectedMoveIndex and d into hTempCardIndex_ff9f
+; - Move1 (if e == 0) or Move2 (if e == 1) data into wLoadedMove
+; - Also from that move, its Damage field into wDamage
+CopyMoveDataAndDamage_FromDeckIndex: ; 16c0 (0:16c0)
+ ld a, e
+ ld [wSelectedMoveIndex], a
+ ld a, d
+ ldh [hTempCardIndex_ff9f], a
+ call LoadCardDataToBuffer1_FromDeckIndex
+.card_loaded
ld a, [wLoadedCard1ID]
- ld [wTempCardId], a
+ ld [wTempCardID_ccc2], a
ld hl, wLoadedCard1Move1
dec e
jr nz, .got_move
ld hl, wLoadedCard1Move2
.got_move
ld de, wLoadedMove
- ld c, wLoadedCard1Move2 - wLoadedCard1Move1
+ ld c, CARD_DATA_MOVE2 - CARD_DATA_MOVE1
.copy_loop
ld a, [hli]
ld [de], a
@@ -3043,30 +4072,31 @@ CopyMoveDataAndDamageToBuffer: ; 16c0 (0:16c0)
xor a
ld [hl], a
ld [wNoDamageOrEffect], a
- ld hl, wccbf
+ ld hl, wTempDamage_ccbf
ld [hli], a
ld [hl], a
ret
+; inits hTempCardIndex_ff9f, wTempTurnDuelistCardID, wTempNonTurnDuelistCardID, and other temp variables
Func_16f6: ; 16f6 (0:16f6)
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
- ld [$ff9f], a
- call GetCardInDeckPosition
+ ldh [hTempCardIndex_ff9f], a
+ call GetCardIDFromDeckIndex
ld a, e
- ld [wTempTurnDuelistCardId], a
+ ld [wTempTurnDuelistCardID], a
call SwapTurn
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
- call GetCardInDeckPosition
+ call GetCardIDFromDeckIndex
ld a, e
- ld [wTempNonTurnDuelistCardId], a
+ ld [wTempNonTurnDuelistCardID], a
call SwapTurn
xor a
ld [wccec], a
ld [wcccd], a
ld [wcced], a
- ld [wcce6], a
+ ld [wDamageToSelfMode], a
ld [wccef], a
ld [wccf0], a
ld [wccf1], a
@@ -3076,9 +4106,9 @@ Func_16f6: ; 16f6 (0:16f6)
Func_1730: ; 1730 (0:1730)
ld a, [wSelectedMoveIndex]
ld [wcc10], a
- ld a, [$ff9f]
+ ldh a, [hTempCardIndex_ff9f]
ld [wcc11], a
- ld a, [wTempCardId]
+ ld a, [wTempCardID_ccc2]
ld [wcc12], a
ld a, [wLoadedMoveCategory]
cp POKEMON_POWER
@@ -3103,7 +4133,7 @@ Func_1730: ; 1730 (0:1730)
jp c, Func_1821
.asm_1777
ld a, $9
- call Func_0f7f
+ call SetDuelAIAction
ld a, $6
call TryExecuteEffectCommandFunction
call CheckSelfConfusionDamage
@@ -3114,7 +4144,7 @@ Func_1730: ; 1730 (0:1730)
ld a, $5
call TryExecuteEffectCommandFunction
ld a, $a
- call Func_0f7f
+ call SetDuelAIAction
call $7415
ld a, [wLoadedMoveCategory]
and RESIDUAL
@@ -3124,17 +4154,17 @@ Func_1730: ; 1730 (0:1730)
call SwapTurn
.asm_17ad
xor a
- ld [$ff9d], a
+ ldh [hTempPlayAreaLocationOffset_ff9d], a
ld a, $3
call TryExecuteEffectCommandFunction
- call Func_1994
+ call ApplyDamageModifiers_DamageToTarget
call Func_189d
- ld hl, wccbf
+ ld hl, wTempDamage_ccbf
ld [hl], e
inc hl
ld [hl], d
ld b, $0
- ld a, [wccc1]
+ ld a, [wDamageEffectiveness]
ld c, a
ld a, DUELVARS_ARENA_CARD_HP
call GetNonTurnDuelistVariable
@@ -3153,7 +4183,7 @@ Func_1730: ; 1730 (0:1730)
bank1call $503a
pop hl
.asm_17e8
- call Func_1ad0
+ call PrintKnockedOutIfHLZero
jr Func_17fb
Func_17ed: ; 17ed (0:17ed)
@@ -3165,13 +4195,13 @@ Func_17ed: ; 17ed (0:17ed)
ld a, NO_DAMAGE_OR_EFFECT_AGILITY
ld [wNoDamageOrEffect], a
Func_17fb: ; 17fb (0:17fb)
- ld a, [wTempNonTurnDuelistCardId]
+ ld a, [wTempNonTurnDuelistCardID]
push af
ld a, $4
call TryExecuteEffectCommandFunction
pop af
- ld [wTempNonTurnDuelistCardId], a
- call HandleStrikesBack
+ ld [wTempNonTurnDuelistCardID], a
+ call HandleStrikesBack_AgainstResidualMove
bank1call $6df1
call Func_1bb4
bank1call $7195
@@ -3199,7 +4229,7 @@ Func_1823: ; 1823 (0:1823)
DealConfusionDamageToSelf: ; 1828 (0:1828)
bank1call $4f9d
ld a, $1
- ld [wcce6], a
+ ld [wDamageToSelfMode], a
ldtx hl, DamageToSelfDueToConfusionText
call DrawWideTextBox_PrintText
ld a, $75
@@ -3221,37 +4251,37 @@ Func_184b: ; 184b (0:184b)
call TryExecuteEffectCommandFunction
jr c, Func_1821
ld a, $c
- call Func_0f7f
+ call SetDuelAIAction
call Func_0f58
ld a, $d
- call Func_0f7f
+ call SetDuelAIAction
ld a, $3
call TryExecuteEffectCommandFunction
ld a, $16
- call Func_0f7f
+ call SetDuelAIAction
ret
Func_1874: ; 1874 (0:1874)
ld a, [wccec]
or a
ret nz
- ld a, [$ffa0]
+ ldh a, [hffa0]
push af
- ld a, [$ff9f]
+ ldh a, [hTempCardIndex_ff9f]
push af
ld a, $1
ld [wccec], a
ld a, [wcc11]
- ld [$ff9f], a
+ ldh [hTempCardIndex_ff9f], a
ld a, [wcc10]
- ld [$ffa0], a
+ ldh [hffa0], a
ld a, $8
- call Func_0f7f
+ call SetDuelAIAction
call Func_0f58
pop af
- ld [$ff9f], a
+ ldh [hTempCardIndex_ff9f], a
pop af
- ld [$ffa0], a
+ ldh [hffa0], a
ret
Func_189d: ; 189d (0:189d)
@@ -3275,7 +4305,7 @@ Func_189d: ; 189d (0:189d)
push de
call SwapTurn
xor a
- ld [wcceb], a
+ ld [wTempPlayAreaLocationOffset_cceb], a
call HandleTransparency
call SwapTurn
pop de
@@ -3284,7 +4314,7 @@ Func_189d: ; 189d (0:189d)
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
call GetNonTurnDuelistVariable
ld [hl], $0
- ld de, $0000
+ ld de, 0
ret
; return carry and 1 into wccc9 if damage is dealt to oneself due to confusion
@@ -3293,7 +4323,7 @@ CheckSelfConfusionDamage: ; 18d7 (0:18d7)
ld [wccc9], a
ld a, DUELVARS_ARENA_CARD_STATUS
call GetTurnDuelistVariable
- and PASSIVE_STATUS_MASK
+ and CNF_SLP_PRZ
cp CONFUSED
jr z, .confused
or a
@@ -3311,13 +4341,53 @@ CheckSelfConfusionDamage: ; 18d7 (0:18d7)
ret
; 0x18f9
- INCROM $18f9, $1944
+; use the trainer card with deck index at hTempCardIndex_ff98
+; a trainer card is like a move effect, with its own effect commands
+UseTrainerCard: ; 18f9 (0:18f9)
+ call CheckCantUseTrainerDueToHeadache
+ jr c, .cant_use
+ ldh a, [hWhoseTurn]
+ ld h, a
+ ldh a, [hTempCardIndex_ff98]
+ ldh [hTempCardIndex_ff9f], a
+ call LoadNonPokemonCardEffectCommands
+ ld a, $01
+ call TryExecuteEffectCommandFunction
+ jr nc, .can_use
+.cant_use
+ call DrawWideTextBox_WaitForInput
+ scf
+ ret
+.can_use
+ ld a, $02
+ call TryExecuteEffectCommandFunction
+ jr c, .done
+ ld a, $06
+ call SetDuelAIAction
+ call $666a
+ call Func_0f58
+ ld a, $06
+ call TryExecuteEffectCommandFunction
+ ld a, $05
+ call TryExecuteEffectCommandFunction
+ ld a, $07
+ call SetDuelAIAction
+ ld a, $03
+ call TryExecuteEffectCommandFunction
+ ldh a, [hTempCardIndex_ff9f]
+ call MoveHandCardToDiscardPile
+ call Func_0f58
+.done
+ or a
+ ret
+; 0x1944
-; this loads HP and Stage (1 byte each) of card with id at $ff9f into wLoadedMoveEffectCommands
-Func_1944: ; 1944 (0:1944)
- ld a, [$ff9f]
- call LoadDeckCardToBuffer1
- ld hl, wLoadedCard1HP
+; loads the effect commands of a (trainer or energy) card with deck index (0-59) at hTempCardIndex_ff9f
+; into wLoadedMoveEffectCommands
+LoadNonPokemonCardEffectCommands: ; 1944 (0:1944)
+ ldh a, [hTempCardIndex_ff9f]
+ call LoadCardDataToBuffer1_FromDeckIndex
+ ld hl, wLoadedCard1EffectCommands
ld de, wLoadedMoveEffectCommands
ld a, [hli]
ld [de], a
@@ -3332,7 +4402,7 @@ Func_1955: ; 1955 (0:1955)
ld a, $7a
ld [wLoadedMoveAnimation], a
pop af
-; this function appears to apply several damage modifiers
+; this function appears to handle dealing damage to self due to confusion
Func_195c: ; 195c (0:195c)
ld hl, wDamage
ld [hli], a
@@ -3342,36 +4412,41 @@ Func_195c: ; 195c (0:195c)
xor a
ld [wNoDamageOrEffect], a
bank1call $7415
- ld a, [wTempNonTurnDuelistCardId]
+ ld a, [wTempNonTurnDuelistCardID]
push af
- ld a, [wTempTurnDuelistCardId]
- ld [wTempNonTurnDuelistCardId], a
- bank1call Func_1a22 ; switch to bank 1, but call a home func
- ld a, [wccc1]
+ ld a, [wTempTurnDuelistCardID]
+ ld [wTempNonTurnDuelistCardID], a
+ bank1call ApplyDamageModifiers_DamageToSelf ; switch to bank 1, but call a home func
+ ld a, [wDamageEffectiveness]
ld c, a
ld b, $0
ld a, DUELVARS_ARENA_CARD_HP
call GetTurnDuelistVariable
bank1call $7469
- call Func_1ad0
+ call PrintKnockedOutIfHLZero
pop af
- ld [wTempNonTurnDuelistCardId], a
+ ld [wTempNonTurnDuelistCardID], a
pop af
ld [wNoDamageOrEffect], a
ret
-Func_1994: ; 1994 (0:1994)
+; given a damage value at wDamage:
+; - if the non-turn holder's arena card is weak to the turn holder's arena card color: double damage
+; - if the non-turn holder's arena card resists the turn holder's arena card color: reduce damage by 30
+; - also apply Pluspower, Defender, and other kinds of damage reduction accordingly
+; return resulting damage in de
+ApplyDamageModifiers_DamageToTarget: ; 1994 (0:1994)
xor a
- ld [wccc1], a
+ ld [wDamageEffectiveness], a
ld hl, wDamage
ld a, [hli]
or [hl]
jr nz, .non_zero_damage
- ld de, $0000
+ ld de, 0
ret
.non_zero_damage
- xor a
- ld [$ff9d], a
+ xor a ; PLAY_AREA_ARENA
+ ldh [hTempPlayAreaLocationOffset_ff9d], a
ld d, [hl]
dec hl
ld e, [hl]
@@ -3379,7 +4454,7 @@ Func_1994: ; 1994 (0:1994)
jr z, .safe
res 7, d ; cap at 2^15
xor a
- ld [wccc1], a
+ ld [wDamageEffectiveness], a
call HandleDoubleDamageSubstatus
jr .check_pluspower_and_defender
.safe
@@ -3387,31 +4462,31 @@ Func_1994: ; 1994 (0:1994)
ld a, e
or d
ret z
- ld a, [$ff9d]
- call Func_36f7
- call Func_1a0e
+ ldh a, [hTempPlayAreaLocationOffset_ff9d]
+ call GetPlayAreaCardColor
+ call TranslateColorToWR
ld b, a
call SwapTurn
- call Func_3730
+ call GetArenaCardWeakness
call SwapTurn
and b
- jr z, .asm_19dc
+ jr z, .not_weak
sla e
rl d
- ld hl, $ccc1
- set 1, [hl]
-.asm_19dc
+ ld hl, wDamageEffectiveness
+ set WEAKNESS, [hl]
+.not_weak
call SwapTurn
- call Func_374a
+ call GetArenaCardResistance
call SwapTurn
and b
- jr z, .check_pluspower_and_defender
- ld hl, $ffe2
+ jr z, .check_pluspower_and_defender ; jump if not resistant
+ ld hl, -30
add hl, de
ld e, l
ld d, h
- ld hl, $ccc1
- set 2, [hl]
+ ld hl, wDamageEffectiveness
+ set RESISTANCE, [hl]
.check_pluspower_and_defender
ld b, CARD_LOCATION_ARENA
call ApplyAttachedPluspower
@@ -3421,28 +4496,33 @@ Func_1994: ; 1994 (0:1994)
call HandleDamageReduction
bit 7, d
jr z, .no_underflow
- ld de, $0000
+ ld de, 0
.no_underflow
call SwapTurn
ret
-Func_1a0e: ; 1a0e (0:1a0e)
+; convert a color to its equivalent WR_* (weakness/resistance) value
+TranslateColorToWR: ; 1a0e (0:1a0e)
push hl
- add $1a
+ add LOW(InvertedPowersOf2)
ld l, a
- ld a, $1a
+ ld a, HIGH(InvertedPowersOf2)
adc $0
ld h, a
ld a, [hl]
pop hl
ret
-; 0x1a1a
- INCROM $1a1a, $1a22
+InvertedPowersOf2: ; 1a1a (0:1a1a)
+ db $80, $40, $20, $10, $08, $04, $02, $01
-Func_1a22: ; 1a22 (0:1a22)
+; given a damage value at wDamage:
+; - if the turn holder's arena card is weak to its own color: double damage
+; - if the turn holder's arena card resists its own color: reduce damage by 30
+; return resulting damage in de
+ApplyDamageModifiers_DamageToSelf: ; 1a22 (0:1a22)
xor a
- ld [wccc1], a
+ ld [wDamageEffectiveness], a
ld hl, wDamage
ld a, [hli]
or [hl]
@@ -3451,27 +4531,27 @@ Func_1a22: ; 1a22 (0:1a22)
ld d, [hl]
dec hl
ld e, [hl]
- call Func_36f6
- call Func_1a0e
+ call GetArenaCardColor
+ call TranslateColorToWR
ld b, a
- call Func_3730
+ call GetArenaCardWeakness
and b
- jr z, .asm_1a47
+ jr z, .not_weak
sla e
rl d
- ld hl, $ccc1
- set 1, [hl]
-.asm_1a47
- call Func_374a
+ ld hl, wDamageEffectiveness
+ set WEAKNESS, [hl]
+.not_weak
+ call GetArenaCardResistance
and b
- jr z, .asm_1a58
- ld hl, $ffe2
+ jr z, .not_resistant
+ ld hl, -30
add hl, de
ld e, l
ld d, h
- ld hl, $ccc1
- set 2, [hl]
-.asm_1a58
+ ld hl, wDamageEffectiveness
+ set RESISTANCE, [hl]
+.not_resistant
ld b, CARD_LOCATION_ARENA
call ApplyAttachedPluspower
ld b, CARD_LOCATION_ARENA
@@ -3479,7 +4559,7 @@ Func_1a22: ; 1a22 (0:1a22)
bit 7, d ; test for underflow
ret z
.no_damage
- ld de, $0000
+ ld de, 0
ret
; increases de by 10 points for each Pluspower found in location b
@@ -3528,7 +4608,7 @@ SubstractHP: ; 1a96 (0:1a96)
sbc d
and $80
jr z, .no_underflow
- ld [hl], $0
+ ld [hl], 0
.no_underflow
ld a, [hl]
or a
@@ -3539,66 +4619,162 @@ SubstractHP: ; 1a96 (0:1a96)
pop hl
ret
-Func_1aac: ; 1aac (0:1aac)
+; given a play area location offset in a, check if the turn holder's Pokemon card in
+; that location has no HP left, and, if so, print that it was knocked out.
+PrintPlayAreaCardKnockedOutIfNoHP: ; 1aac (0:1aac)
ld e, a
add DUELVARS_ARENA_CARD_HP
call GetTurnDuelistVariable
or a
- ret nz
- ld a, [wTempNonTurnDuelistCardId]
+ ret nz ; return if arena card has non-0 HP
+ ld a, [wTempNonTurnDuelistCardID]
push af
ld a, e
add DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
- call LoadDeckCardToBuffer1
+ call LoadCardDataToBuffer1_FromDeckIndex
ld a, [wLoadedCard1ID]
- ld [wTempNonTurnDuelistCardId], a
- call Func_1ad3
+ ld [wTempNonTurnDuelistCardID], a
+ call PrintKnockedOut
pop af
- ld [wTempNonTurnDuelistCardId], a
+ ld [wTempNonTurnDuelistCardID], a
scf
ret
-Func_1ad0: ; 1ad0 (0:1ad0)
- ld a, [hl]
+PrintKnockedOutIfHLZero: ; 1ad0 (0:1ad0)
+ ld a, [hl] ; this is supposed to point to a remaining HP value after some form of damage calculation
or a
ret nz
-Func_1ad3: ; 1ad3 (0:1ad3)
- ld a, [wTempNonTurnDuelistCardId]
+; fallthrough
+
+; print in a text box that the Pokemon card at wTempNonTurnDuelistCardID was knocked out and wait 40 frames
+PrintKnockedOut: ; 1ad3 (0:1ad3)
+ ld a, [wTempNonTurnDuelistCardID]
ld e, a
- call LoadCardDataToBuffer1
- ld hl, $cc27
+ call LoadCardDataToBuffer1_FromCardID
+ ld hl, wLoadedCard1Name
ld a, [hli]
ld h, [hl]
ld l, a
- call Func_2ebb
+ call LoadTxRam2
ldtx hl, WasKnockedOutText
call DrawWideTextBox_PrintText
- ld a, $28
-.asm_1aeb
+ ld a, 40
+.wait_frames
call DoFrame
dec a
- jr nz, .asm_1aeb
+ jr nz, .wait_frames
scf
ret
; 0x1af3
- INCROM $1af3, $1b8d
+; seems to be a function to deal damage to a card
+Func_1af3: ; 1af3 (0:1af3)
+ ld a, $78
+ ld [wLoadedMoveAnimation], a
+ ld a, b
+ ld [wTempPlayAreaLocationOffset_cceb], a
+ or a ; cp PLAY_AREA_ARENA
+ jr nz, .skip_no_damage_or_effect_check
+ ld a, [wNoDamageOrEffect]
+ or a
+ ret nz
+.skip_no_damage_or_effect_check
+ push hl
+ push de
+ push bc
+ xor a
+ ld [wNoDamageOrEffect], a
+ push de
+ ld a, [wTempPlayAreaLocationOffset_cceb]
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ ld a, e
+ ld [wTempNonTurnDuelistCardID], a
+ pop de
+ ld a, [wTempPlayAreaLocationOffset_cceb]
+ or a ; cp PLAY_AREA_ARENA
+ jr nz, .next
+ ld a, [wDamageToSelfMode]
+ or a
+ jr z, .turn_swapped
+ ld b, CARD_LOCATION_ARENA
+ call ApplyAttachedPluspower
+ jr .next
+.turn_swapped
+ call SwapTurn
+ ld b, CARD_LOCATION_ARENA
+ call ApplyAttachedPluspower
+ call SwapTurn
+.next
+ ld a, [wLoadedMoveCategory]
+ cp POKEMON_POWER
+ jr z, .skip_defender
+ ld a, [wTempPlayAreaLocationOffset_cceb]
+ or CARD_LOCATION_PLAY_AREA
+ ld b, a
+ call ApplyAttachedDefender
+.skip_defender
+ ld a, [wTempPlayAreaLocationOffset_cceb]
+ or a ; cp PLAY_AREA_ARENA
+ jr nz, .in_bench
+ push de
+ call HandleNoDamageOrEffectSubstatus
+ pop de
+ call HandleDamageReduction
+.in_bench
+ bit 7, d
+ jr z, .no_underflow
+ ld de, 0
+.no_underflow
+ call HandleDamageReductionOrNoDamageFromPkmnPowerEffects
+ ld a, [wTempPlayAreaLocationOffset_cceb]
+ ld b, a
+ or a ; cp PLAY_AREA_ARENA
+ jr nz, .benched
+ ; add damage at de to [wTempDamage_ccbf]
+ ld hl, wTempDamage_ccbf
+ ld a, e
+ add [hl]
+ ld [hli], a
+ ld a, d
+ adc [hl]
+ ld [hl], a
+.benched
+ ld c, $00
+ add DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ push af
+ bank1call $7469
+ pop af
+ or a
+ jr z, .skip_knocked_out
+ push de
+ call PrintKnockedOutIfHLZero
+ pop de
+.skip_knocked_out
+ call HandleStrikesBack_AgainstDamagingMove
+ pop bc
+ pop de
+ pop hl
+ ret
+; 0x1b8d
Func_1b8d: ; 1b8d (0:1b8d)
bank1call $4f9d
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
- call LoadDeckCardToBuffer1
+ call LoadCardDataToBuffer1_FromDeckIndex
ld a, $12
call Func_29f5
ld [hl], $0
- ld hl, $ce3f
+ ld hl, wTxRam2
xor a
ld [hli], a
ld [hli], a
ld a, [wLoadedMoveName]
- ld [hli], a
+ ld [hli], a ; wTxRam2_b
ld a, [wLoadedMoveName + 1]
ld [hli], a
ldtx hl, PokemonsAttackText ; text when using an attack
@@ -3610,7 +4786,7 @@ Func_1bb4: ; 1bb4 (0:1bb4)
bank1call $4f9d
call $503a
xor a
- ld [$ff9d], a
+ ldh [hTempPlayAreaLocationOffset_ff9d], a
call Func_1bca
call WaitForWideTextBoxInput
call Func_0f58
@@ -3622,17 +4798,17 @@ Func_1bca: ; 1bca (0:1bca)
ret z
cp $1
jr z, .asm_1bfd
- ld a, [$ff9d]
+ ldh a, [hTempPlayAreaLocationOffset_ff9d]
add DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
- call LoadDeckCardToBuffer1
+ call LoadCardDataToBuffer1_FromDeckIndex
ld a, $12
call Func_29f5
ld [hl], $0
ld hl, $0000
- call Func_2ebb
- ld hl, $ccaa
- ld de, $ce41
+ call LoadTxRam2
+ ld hl, wLoadedMoveName
+ ld de, wTxRam2_b
ld a, [hli]
ld [de], a
inc de
@@ -3649,7 +4825,101 @@ Func_1bca: ; 1bca (0:1bca)
ret
; 0x1c05
- INCROM $1c05, $1c72
+; return in a the retreat cost of the turn holder's arena or benchx Pokemon
+; given the PLAY_AREA_* value in hTempPlayAreaLocationOffset_ff9d
+GetPlayAreaCardRetreatCost: ; 1c05 (0:1c05)
+ ldh a, [hTempPlayAreaLocationOffset_ff9d]
+ add DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer1_FromDeckIndex
+ call GetLoadedCard1RetreatCost
+ ret
+; 0x1c13
+
+; move the turn holder's card with ID at de to the discard pile
+; if it's currently in the arena.
+MoveCardToDiscardPileIfInArena: ; 1c13 (0:1c13)
+ ld c, e
+ ld b, d
+ ld l, DUELVARS_CARD_LOCATIONS
+.next_card
+ ld a, [hl]
+ and CARD_LOCATION_ARENA
+ jr z, .skip ; jump if card not in arena
+ ld a, l
+ call GetCardIDFromDeckIndex
+ ld a, c
+ cp e
+ jr nz, .skip ; jump if not the card id provided in c
+ ld a, b
+ cp d ; card IDs are 8-bit so d is always 0
+ jr nz, .skip
+ ld a, l
+ push bc
+ call PutCardInDiscardPile
+ pop bc
+.skip
+ inc l
+ ld a, l
+ cp DECK_SIZE
+ jr c, .next_card
+ ret
+; 0x1c35
+
+; substract [hl] HP from the turn holder's card at CARD_LOCATION_PLAY_AREA + e
+; return the result in a
+SubstractHPFromCard: ; 1c35 (0:1c35)
+ push hl
+ push de
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer2_FromDeckIndex
+ pop de
+ push de
+ ld a, DUELVARS_ARENA_CARD_HP
+ add e
+ call GetTurnDuelistVariable
+ ld a, [wLoadedCard2HP]
+ ld c, a
+ sub [hl]
+ pop de
+ pop hl
+ ret
+; 0x1c50
+
+; check if a flag of wLoadedMove is set
+; input: a = %fffffbbb, where f = flag address counting from wLoadedMoveFlag1, and b = flag bit
+; return carry if the flag is set
+CheckLoadedMoveFlag: ; 1c50 (0:1c50)
+ push hl
+ push de
+ push bc
+ ld c, a ; %fffffbbb
+ and $07
+ ld e, a
+ ld d, $00
+ ld hl, PowersOf2
+ add hl, de
+ ld b, [hl]
+ ld a, c
+ rra
+ rra
+ rra
+ and $1f
+ ld e, a ; %000fffff
+ ld hl, wLoadedMoveFlag1
+ add hl, de
+ ld a, [hl]
+ and b
+ jr z, .done
+ scf ; set carry if the move has this flag set
+.done
+ pop bc
+ pop de
+ pop hl
+ ret
+; 0x1c72
; returns [hWhoseTurn] <-- ([hWhoseTurn] ^ $1)
; As a side effect, this also returns a duelist variable in a similar manner to
@@ -3665,21 +4935,23 @@ SwapTurn: ; 1c72 (0:1c72)
pop af
ret
-PrintPlayerName: ; 1c7d (0:1c7d)
- call EnableExtRAM
- ld hl, $a010
-printNameLoop
+; copy the $00-terminated player's name from sPlayerName to de
+CopyPlayerName: ; 1c7d (0:1c7d)
+ call EnableSRAM
+ ld hl, sPlayerName
+.loop
ld a, [hli]
ld [de], a
inc de
or a
- jr nz, printNameLoop
+ jr nz, .loop
dec de
- call DisableExtRAM
+ call DisableSRAM
ret
-PrintOpponentName: ; 1c8e (0:1c8e)
- ld hl, $cc16
+; copy the opponent's name to de (usually via PrintTextBoxBorderLabel)
+CopyOpponentName: ; 1c8e (0:1c8e)
+ ld hl, wOpponentName
ld a, [hli]
or [hl]
jr z, .special_name
@@ -3688,100 +4960,108 @@ PrintOpponentName: ; 1c8e (0:1c8e)
ld h, a
jp PrintTextBoxBorderLabel
.special_name
- ld hl, $c500
+ ld hl, wc500
ld a, [hl]
or a
jr z, .print_player2
- jr printNameLoop
+ jr CopyPlayerName.loop
.print_player2
ldtx hl, Player2Text
jp PrintTextBoxBorderLabel
-Func_1caa: ; 1caa (0:1caa)
+; return, in hl, the total amount of cards owned anywhere, including duplicates
+GetRawAmountOfCardsOwned: ; 1caa (0:1caa)
push de
push bc
- call EnableExtRAM
+ call EnableSRAM
ld hl, $0000
ld de, sDeck1Cards
- ld c, $4
-.asm_1cb7
+ ld c, NUM_DECKS
+.next_deck
ld a, [de]
or a
- jr z, .asm_1cc1
+ jr z, .skip_deck ; jump if deck empty
ld a, c
- ld bc, $003c
+ ld bc, DECK_SIZE
add hl, bc
ld c, a
-.asm_1cc1
- ld a, $54
+.skip_deck
+ ld a, sDeck2Cards - sDeck1Cards
add e
ld e, a
ld a, $0
adc d
- ld d, a
+ ld d, a ; de = sDeck*Cards[x]
dec c
- jr nz, .asm_1cb7
+ jr nz, .next_deck
+
+ ; hl = DECK_SIZE * (no. of non-empty decks)
ld de, sCardCollection
-.asm_1ccf
+.next_card
ld a, [de]
- bit 7, a
- jr nz, .asm_1cd8
- ld c, a
+ bit CARD_NOT_OWNED_F, a
+ jr nz, .skip_card
+ ld c, a ; card count in sCardCollection
ld b, $0
add hl, bc
-.asm_1cd8
+.skip_card
inc e
- jr nz, .asm_1ccf
- call DisableExtRAM
+ jr nz, .next_card ; assumes sCardCollection is $100 bytes long (CARD_COLLECTION_SIZE)
+ call DisableSRAM
pop bc
pop de
ret
-Func_1ce1: ; 1ce1 (0:1ce1)
+; return carry if the count in sCardCollection plus the count in each deck (sDeck*)
+; of the card with id given in a is 0 (if card not owned).
+; also return the count (total owned amount) in a.
+GetCardCountInCollectionAndDecks: ; 1ce1 (0:1ce1)
push hl
push de
push bc
- call EnableExtRAM
+ call EnableSRAM
ld c, a
ld b, $0
ld hl, sDeck1Cards
- ld d, $4
-.asm_1cef
+ ld d, NUM_DECKS
+.next_deck
ld a, [hl]
or a
- jr z, .asm_1cff
+ jr z, .deck_done ; jump if deck empty
push hl
- ld e, $3c
-.asm_1cf6
+ ld e, DECK_SIZE
+.next_card
ld a, [hli]
cp c
- jr nz, .asm_1cfb
- inc b
+ jr nz, .no_match
+ inc b ; this deck card matches card c
-.asm_1cfb
+.no_match
dec e
- jr nz, .asm_1cf6
+ jr nz, .next_card
pop hl
-.asm_1cff
+.deck_done
push de
- ld de, $0054
+ ld de, sDeck2Cards - sDeck1Cards
add hl, de
pop de
dec d
- jr nz, .asm_1cef
- ld h, $a1
+ jr nz, .next_deck
+
+ ; all decks done
+ ld h, HIGH(sCardCollection)
ld l, c
ld a, [hl]
- bit 7, a
- jr nz, .asm_1d11
- add b
+ bit CARD_NOT_OWNED_F, a
+ jr nz, .done
+ add b ; if card seen, add b to count
-.asm_1d11
- and $7f
- call DisableExtRAM
+.done
+ and CARD_COUNT_MASK
+ call DisableSRAM
pop bc
pop de
pop hl
@@ -3790,22 +5070,24 @@ Func_1ce1: ; 1ce1 (0:1ce1)
scf
ret
-Func_1d1d: ; 1d1d (0:1d1d)
+; return carry if the count in sCardCollection of the card with id given in a is 0.
+; also return the count (amount owned outside of decks) in a.
+GetCardCountInCollection: ; 1d1d (0:1d1d)
push hl
- call EnableExtRAM
- ld h, $a1
+ call EnableSRAM
+ ld h, HIGH(sCardCollection)
ld l, a
ld a, [hl]
- call DisableExtRAM
+ call DisableSRAM
pop hl
- and $7f
+ and CARD_COUNT_MASK
ret nz
scf
ret
-; creates a list at $c000 of every card the player owns and how many
+; creates a list at wTempCardCollection of every card the player owns and how many
CreateTempCardCollection: ; 1d2e (0:1d2e)
- call EnableExtRAM
+ call EnableSRAM
ld hl, sCardCollection
ld de, wTempCardCollection
ld bc, CARD_COLLECTION_SIZE
@@ -3818,29 +5100,31 @@ CreateTempCardCollection: ; 1d2e (0:1d2e)
call AddDeckCardsToTempCardCollection
ld de, sDeck4Name
call AddDeckCardsToTempCardCollection
- call DisableExtRAM
+ call DisableSRAM
ret
+; adds the cards from a deck to wTempCardCollection given de = sDeck*Name
AddDeckCardsToTempCardCollection: ; 1d59 (0:1d59)
ld a, [de]
or a
- ret z
+ ret z ; return if empty name (empty deck)
ld hl, sDeck1Cards - sDeck1Name
add hl, de
ld e, l
ld d, h
- ld h, wTempCardCollection >> 8
+ ld h, HIGH(wTempCardCollection)
ld c, DECK_SIZE
-.asm_1d66
- ld a, [de]
- inc de
+.next_card
+ ld a, [de] ; count of current card being added
+ inc de ; move to next card for next iteration
ld l, a
- inc [hl]
+ inc [hl] ; increment count
dec c
- jr nz, .asm_1d66
+ jr nz, .next_card
ret
-; adds card a to collection, provided the player has less than 99 of them
+; add card with id given in a to sCardCollection, provided that
+; the player has less than MAX_AMOUNT_OF_CARD (99) of them
AddCardToCollection: ; 1d6e (0:1d6e)
push hl
push de
@@ -3849,44 +5133,73 @@ AddCardToCollection: ; 1d6e (0:1d6e)
push hl
call CreateTempCardCollection
pop hl
- call EnableExtRAM
- ld h, wTempCardCollection >> 8
+ call EnableSRAM
+ ld h, HIGH(wTempCardCollection)
ld a, [hl]
- and $7f
- cp 99
- jr nc, .asm_1d8a
- ld h, sCardCollection >> 8
+ and CARD_COUNT_MASK
+ cp MAX_AMOUNT_OF_CARD
+ jr nc, .already_max
+ ld h, HIGH(sCardCollection)
ld a, [hl]
- and $7f
+ and CARD_COUNT_MASK
inc a
ld [hl], a
-.asm_1d8a
- call DisableExtRAM
+.already_max
+ call DisableSRAM
pop bc
pop de
pop hl
ret
-Func_1d91: ; 1d91 (0:1d91)
+; remove a card with id given in a from sCardCollection (decrement its count if non-0)
+RemoveCardFromCollection: ; 1d91 (0:1d91)
push hl
- call EnableExtRAM
- ld h, $a1
+ call EnableSRAM
+ ld h, HIGH(sCardCollection)
ld l, a
ld a, [hl]
- and $7f
- jr z, .asm_1d9f
+ and CARD_COUNT_MASK
+ jr z, .zero
dec a
ld [hl], a
-
-.asm_1d9f
- call DisableExtRAM
+.zero
+ call DisableSRAM
pop hl
ret
; 0x1da4
- INCROM $1da4, $1dca
+; return the amount of different cards that the player has collected in d
+; return NUM_CARDS in e, minus 1 if VENUSAUR1 or MEW2 has not been collected (minus 2 if neither)
+GetCardAlbumProgress: ; 1da4 (0:1da4)
+ push hl
+ call EnableSRAM
+ ld e, NUM_CARDS
+ ld h, HIGH(sCardCollection)
+ ld l, VENUSAUR1
+ bit CARD_NOT_OWNED_F, [hl]
+ jr z, .next1
+ dec e ; if VENUSAUR1 not owned
+.next1
+ ld l, MEW2
+ bit CARD_NOT_OWNED_F, [hl]
+ jr z, .next2
+ dec e ; if MEW2 not owned
+.next2
+ ld d, LOW(sCardCollection)
+ ld l, d
+.next_card
+ bit CARD_NOT_OWNED_F, [hl]
+ jr nz, .skip
+ inc d ; if this card owned
+.skip
+ inc l
+ jr nz, .next_card ; assumes sCardCollection is $100 bytes long (CARD_COLLECTION_SIZE)
+ call DisableSRAM
+ pop hl
+ ret
+; 0x1dca
-; memcpy(HL, DE, C)
+; copy c bytes of data from de to hl
; if LCD on, copy during h-blank only
SafeCopyDataDEtoHL: ; 1dca (0:1dca)
ld a, [wLCDC] ;
@@ -3902,7 +5215,7 @@ SafeCopyDataDEtoHL: ; 1dca (0:1dca)
.lcd_on
jp HblankCopyDataDEtoHL
-; returns vBGMapTiles + BG_MAP_WIDTH * e + d in hl.
+; returns v*BGMapTiles1 + BG_MAP_WIDTH * e + d in hl.
; used to map coordinates at de to a BGMap0 address.
DECoordToBGMap0Address: ; 1ddb (0:1ddb)
ld l, e
@@ -3916,7 +5229,7 @@ DECoordToBGMap0Address: ; 1ddb (0:1ddb)
add d
ld l, a
ld a, h
- adc HIGH(vBGMapTiles)
+ adc HIGH(v0BGMapTiles1)
ld h, a
ret
@@ -3947,7 +5260,7 @@ DrawLabeledTextBox: ; 1e00 (0:1e00)
ld a, [wConsole]
cp CONSOLE_SGB
jr nz, .draw_top_border
- ld a, [wFrameType]
+ ld a, [wTextBoxFrameType]
or a
jr z, .draw_top_border
; Console is SGB and frame type is != 0.
@@ -4043,13 +5356,16 @@ DrawRegularTextBox: ; 1e7c (0:1e7c)
cp CONSOLE_SGB
jp z, DrawRegularTextBoxSGB
; fallthrough
+
DrawRegularTextBoxDMG: ; 1e88 (0:1e88)
call DECoordToBGMap0Address
; top line (border) of the text box
ld a, $1c
lb de, $18, $19
call CopyLine
-ContinueDrawingTextBoxDMGorSGB
+; fallthrough
+
+ContinueDrawingTextBoxDMGorSGB:
dec c
dec c
.draw_text_box_body_loop
@@ -4063,7 +5379,7 @@ ContinueDrawingTextBoxDMGorSGB
lb de, $1a, $1b
; fallthrough
-; copies b bytes of data to sp+$1c and to hl, and returns hl += BG_MAP_WIDTH
+; copies b bytes of data to sp-$1f and to hl, and returns hl += BG_MAP_WIDTH
; d = value of byte 0
; e = value of byte b
; a = value of bytes [1, b-1]
@@ -4105,7 +5421,9 @@ DrawRegularTextBoxCGB:
ld a, $1c
lb de, $18, $19
call CopyCurrentLineTilesAndAttrCGB
-ContinueDrawingTextBoxCGB
+; fallthrough
+
+ContinueDrawingTextBoxCGB:
dec c
dec c
.draw_text_box_body_loop
@@ -4114,13 +5432,13 @@ ContinueDrawingTextBoxCGB
push hl
call CopyLine
pop hl
- call BankswitchVRAM_1
- ld a, [wFrameType]
+ call BankswitchVRAM1
+ ld a, [wTextBoxFrameType]
ld e, a
ld d, a
xor a
call CopyLine
- call BankswitchVRAM_0
+ call BankswitchVRAM0
dec c
jr nz, .draw_text_box_body_loop
; bottom line (border) of the text box
@@ -4137,13 +5455,14 @@ CopyCurrentLineTilesAndAttrCGB: ; 1efb (0:1efb)
push hl
call CopyLine
pop hl
-CopyCurrentLineAttrCGB
- call BankswitchVRAM_1
- ld a, [wFrameType] ; on CGB, wFrameType determines the palette and the other attributes
+; fallthrough
+CopyCurrentLineAttrCGB:
+ call BankswitchVRAM1
+ ld a, [wTextBoxFrameType] ; on CGB, wTextBoxFrameType determines the palette and the other attributes
ld e, a
ld d, a
call CopyLine
- call BankswitchVRAM_0
+ call BankswitchVRAM0
ret
DrawRegularTextBoxSGB: ; 1f0f (0:1f0f)
@@ -4152,14 +5471,14 @@ DrawRegularTextBoxSGB: ; 1f0f (0:1f0f)
call DrawRegularTextBoxDMG
pop de
pop bc
- ld a, [wFrameType]
+ ld a, [wTextBoxFrameType]
or a
ret z
-ColorizeTextBoxSGB
+ColorizeTextBoxSGB:
push bc
push de
- ld hl, $cae0
- ld de, SGB_ATTR_BLK_1f4f
+ ld hl, wTempSGBPacket
+ ld de, AttrBlkPacket_1f4f
ld c, $10
.copy_sgb_command_loop
ld a, [de]
@@ -4169,7 +5488,7 @@ ColorizeTextBoxSGB
jr nz, .copy_sgb_command_loop
pop de
pop bc
- ld hl, $cae4
+ ld hl, wTempSGBPacket + 4
ld [hl], d
inc hl
ld [hl], e
@@ -4182,27 +5501,36 @@ ColorizeTextBoxSGB
add c
dec a
ld [hli], a
- ld a, [wFrameType]
+ ld a, [wTextBoxFrameType]
and $80
jr z, .asm_1f48
ld a, $2
- ld [wcae2], a
+ ld [wTempSGBPacket + 2], a
.asm_1f48
- ld hl, $cae0
+ ld hl, wTempSGBPacket
call SendSGB
ret
-SGB_ATTR_BLK_1f4f: ; 1f4f (0:1f4f)
+AttrBlkPacket_1f4f: ; 1f4f (0:1f4f)
sgb ATTR_BLK, 1 ; sgb_command, length
- db $01,$03,$04,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
-
-Func_1f5f: ; 1f5f (0:1f5f)
+ db 1 ; number of data sets
+ ; Control Code, Color Palette Designation, X1, Y1, X2, Y2
+ db ATTR_BLK_CTRL_INSIDE + ATTR_BLK_CTRL_LINE, 0 << 0 + 1 << 2, 0, 0, 0, 0 ; data set 1
+ ds 6 ; data set 2
+ ds 2 ; data set 3
+
+; Fill a bxc rectangle at de and at sp-$26,
+; using tile a and the subsequent ones in the following pattern:
+; | a+0*l+0*h | a+0*l+1*h | a+0*l+2*h |
+; | a+1*l+0*h | a+1*l+1*h | a+1*l+2*h |
+; | a+2*l+0*h | a+2*l+1*h | a+2*l+2*h |
+FillRectangle: ; 1f5f (0:1f5f)
push de
push af
push hl
- add sp, $e0
+ add sp, -BG_MAP_WIDTH
call DECoordToBGMap0Address
-.asm_1f67
+.next_row
push hl
push bc
ld hl, sp+$25
@@ -4211,18 +5539,18 @@ Func_1f5f: ; 1f5f (0:1f5f)
ld a, [hl]
ld hl, sp+$4
push hl
-.asm_1f72
+.next_tile
ld [hli], a
add d
dec b
- jr nz, .asm_1f72
+ jr nz, .next_tile
pop de
pop bc
pop hl
push hl
push bc
ld c, b
- ld b, $0
+ ld b, 0
call SafeCopyDataDEtoHL
ld hl, sp+$24
ld a, [hl]
@@ -4231,10 +5559,10 @@ Func_1f5f: ; 1f5f (0:1f5f)
ld [hl], a
pop bc
pop de
- ld hl, $0020
+ ld hl, BG_MAP_WIDTH
add hl, de
dec c
- jr nz, .asm_1f67
+ jr nz, .next_row
add sp, $24
pop de
ret
@@ -4243,95 +5571,129 @@ Func_1f5f: ; 1f5f (0:1f5f)
INCROM $1f96, $20b0
Func_20b0: ; 20b0 (0:20b0)
- ld hl, $2fe8
+ ld hl, DuelGraphics + $680 - $4000
ld a, [wConsole]
cp CONSOLE_CGB
jr nz, .asm_20bd
- ld hl, $37f8
+ ld hl, DuelGraphics + $e90 - $4000
.asm_20bd
- ld de, vTiles1 + $500
+ ld de, v0Tiles1 + $500
ld b, $30
- jr asm_2121
+ jr CopyFontsOrDuelGraphicsTiles
Func_20c4: ; 20c4 (0:20c4)
- ld hl, $3028
+ ld hl, DuelGraphics + $6c0 - $4000
ld a, [wConsole]
cp CONSOLE_CGB
- jr nz, .asm_20d1
- ld hl, $3838
-.asm_20d1
- ld de, vTiles1 + $540
+ jr nz, .copy
+ ld hl, DuelGraphics + $ed0 - $4000
+.copy
+ ld de, v0Tiles1 + $540
ld b, $c
- jr asm_2121
+ jr CopyFontsOrDuelGraphicsTiles
Func_20d8: ; 20d8 (0:20d8)
ld b, $10
- jr asm_20de
+ jr Func_20dc.asm_20de
Func_20dc: ; 20dc (0:20dc)
ld b, $24
-asm_20de
- ld hl, $32e8
+.asm_20de
+ ld hl, DuelGraphics + $980 - $4000
ld a, [wConsole]
cp CONSOLE_CGB
- jr nz, .asm_20eb
- ld hl, $3af8
-.asm_20eb
- ld de, vTiles1 + $500
- jr asm_2121
+ jr nz, .copy
+ ld hl, DuelGraphics + $1190 - $4000
+.copy
+ ld de, v0Tiles1 + $500
+ jr CopyFontsOrDuelGraphicsTiles
Func_20f0: ; 20f0 (0:20f0)
- ld hl, $4008
- ld de, vTiles1 + $200
+ ld hl, Fonts + $8
+ ld de, v0Tiles1 + $200
ld b, $d
- call asm_2121
- ld hl, $3528
+ call CopyFontsOrDuelGraphicsTiles
+ ld hl, DuelGraphics + $bc0 - $4000
ld a, [wConsole]
cp CONSOLE_CGB
- jr nz, .asm_2108
- ld hl, $3d38
-.asm_2108
- ld de, vTiles1 + $500
+ jr nz, .copy
+ ld hl, DuelGraphics + $13d0 - $4000
+.copy
+ ld de, v0Tiles1 + $500
ld b, $30
- jr asm_2121
+ jr CopyFontsOrDuelGraphicsTiles
Func_210f: ; 210f (0:210f)
- ld hl, $40d8
- ld de, vTiles2 + $300
+ ld hl, DuelGraphics + $1770 - $4000
+ ld de, v0Tiles2 + $300
ld b, $8
- jr asm_2121
+ jr CopyFontsOrDuelGraphicsTiles
Func_2119: ; 2119 (0:2119)
- ld hl, DuelGraphics - Fonts
- ld de, vTiles2 ; destination
+ ld hl, DuelGraphics - $4000
+ ld de, v0Tiles2 ; destination
ld b, $38 ; number of tiles
-asm_2121
- ld a, BANK(Fonts)
+; fallthrough
+
+; if hl ≤ $3fff
+; copy b tiles from Gfx1:(hl+$4000) to de
+; if $4000 ≤ hl ≤ $7fff
+; copy b tiles from Gfx2:hl to de
+CopyFontsOrDuelGraphicsTiles:
+ ld a, BANK(Fonts); BANK(DuelGraphics); BANK(VWF)
call BankpushHome
- ld c, $10
+ ld c, TILE_SIZE
call CopyGfxData
call BankpopHome
ret
; 0x212f
- INCROM $212f, $2167
+; this function appears to copy duel gfx data into sram
+Func_212f: ; 212f (0:212f)
+ ld hl, DuelGraphics - $4000
+ ld de, $a400
+ ld b, $30
+ call CopyFontsOrDuelGraphicsTiles
+ ld hl, DuelGraphics + $17f0 - $4000
+ ld de, $a700
+ ld b, $08
+ call CopyFontsOrDuelGraphicsTiles
+ call GetCardSymbolData
+ sub $d0
+ ld l, a
+ ld h, $00
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ ld de, DuelGraphics + $680 - $4000
+ add hl, de
+ ld de, $a780
+ ld b, $04
+ call CopyFontsOrDuelGraphicsTiles
+ ld hl, DuelGraphics + $680 - $4000
+ ld de, $b100
+ ld b, $30
+ jr CopyFontsOrDuelGraphicsTiles
+; 0x2167
-Func_2167: ; 2167 (0:2167)
+DrawDuelBoxMessage: ; 2167 (0:2167)
ld l, a
- ld h, $a0
+ ld h, (40 * TILE_SIZE) / 4 ; boxes are 10x4 tiles
call HtimesL
add hl, hl
add hl, hl
- ld de, $4318
+ ; hl = a * $280
+ ld de, DuelBoxMessages
add hl, de
- ld de, $8a00
+ ld de, v0Tiles1 + $200
ld b, $28
- call asm_2121
+ call CopyFontsOrDuelGraphicsTiles
ld a, $a0
- ld hl, $010a
- ld bc, $0a04
- ld de, $0504
- jp Func_1f5f
+ lb hl, 1, 10
+ lb bc, 10, 4
+ lb de, 5, 4
+ jp FillRectangle
; 0x2189
INCROM $2189, $21c5
@@ -4407,7 +5769,7 @@ Func_21f2: ; 21f2 (0:21f2)
call Func_230f
pop af
ld [wcd0a], a
- ldh a, [$ffb0]
+ ldh a, [hffb0]
or a
jr nz, .asm_2240
ld a, [hl]
@@ -4417,11 +5779,11 @@ Func_21f2: ; 21f2 (0:21f2)
.asm_2240
inc hl
.asm_2241
- ldh a, [$ffae]
+ ldh a, [hffae]
or a
ret z
ld b, a
- ldh a, [$ffac]
+ ldh a, [hffac]
cp b
jr z, .asm_224d
xor a
@@ -4433,17 +5795,17 @@ Func_21f2: ; 21f2 (0:21f2)
call z, .asm_2257
.asm_2257
xor a
- ldh [$ffac], a
- ldh a, [$ffad]
+ ldh [hffac], a
+ ldh a, [hffad]
add $20
ld b, a
- ldh a, [$ffaa]
+ ldh a, [hffaa]
and $e0
add b
- ldh [$ffaa], a
- ldh a, [$ffab]
+ ldh [hffaa], a
+ ldh a, [hffab]
adc $0
- ldh [$ffab], a
+ ldh [hffab], a
ld a, [wcd09]
inc a
ld [wcd09], a
@@ -4455,11 +5817,11 @@ Func_2275: ; 2275 (0:2275)
dec a
ld [wcd04], a
ld a, e
- ldh [$ffa8], a
+ ldh [hffa8], a
call Func_2298
xor a
- ldh [$ffb0], a
- ldh [$ffa9], a
+ ldh [hffb0], a
+ ldh [hffa9], a
ld a, $88
ld [wcd06], a
ld a, $80
@@ -4475,7 +5837,7 @@ Func_2275: ; 2275 (0:2275)
Func_2298: ; 2298 (0:2298)
xor a
ld [wcd0a], a
- ldh [$ffac], a
+ ldh [hffac], a
ld [wcd0b], a
ld a, $f
ldh [hffaf], a
@@ -4485,21 +5847,21 @@ Func_22a6: ; 22a6 (0:22a6)
push af
call Func_22ae
pop af
- ldh [$ffae], a
+ ldh [hffae], a
ret
Func_22ae: ; 22ae (0:22ae)
push hl
ld a, d
- ldh [$ffad], a
+ ldh [hffad], a
xor a
- ldh [$ffae], a
+ ldh [hffae], a
ld [wcd09], a
call DECoordToBGMap0Address
ld a, l
- ldh [$ffaa], a
+ ldh [hffaa], a
ld a, h
- ldh [$ffab], a
+ ldh [hffab], a
call Func_2298
xor a
ld [wcd0b], a
@@ -4510,7 +5872,7 @@ Func_22ca: ; 22ca (0:22ca)
push hl
push de
push bc
- ldh a, [$ffb0]
+ ldh a, [hffb0]
and $1
jr nz, .asm_22ed
call Func_2325
@@ -4519,10 +5881,10 @@ Func_22ca: ; 22ca (0:22ca)
jr nz, .asm_22e9
call Func_24ac
.asm_22de
- ldh a, [$ffb0]
+ ldh a, [hffb0]
and $2
jr nz, .asm_22e9
- ldh a, [$ffa9]
+ ldh a, [hffa9]
call Func_22f2
.asm_22e9
pop bc
@@ -4535,7 +5897,7 @@ Func_22ca: ; 22ca (0:22ca)
Func_22f2: ; 22f2 (0:22f2)
ld [wcd05], a
- ld hl, $ffaa
+ ld hl, hffaa
ld e, [hl]
inc hl
ld d, [hl]
@@ -4546,10 +5908,10 @@ Func_22f2: ; 22f2 (0:22f2)
dec de
ld l, e
ld h, d
- ld de, $cd05
- ld c, $1
+ ld de, wcd05
+ ld c, 1
call SafeCopyDataDEtoHL
- ld hl, $ffac
+ ld hl, hffac
inc [hl]
ret
@@ -4575,11 +5937,11 @@ Func_2325: ; 2325 (0:2325)
ret c
or a
ret nz
- ldh a, [$ffa8]
- ld hl, $cd04
+ ldh a, [hffa8]
+ ld hl, wcd04
cp [hl]
jr nz, .asm_2345
- ldh a, [$ffa9]
+ ldh a, [hffa9]
ld h, $c8
.asm_2337
ld l, a
@@ -4599,11 +5961,11 @@ Func_2325: ; 2325 (0:2325)
.asm_2349
ld l, [hl]
.asm_234a
- ldh a, [$ffa9]
+ ldh a, [hffa9]
ld c, a
ld b, $c9
ld a, l
- ldh [$ffa9], a
+ ldh [hffa9], a
ld [bc], a
ld h, $c8
ld [hl], c
@@ -4634,8 +5996,8 @@ Func_235e: ; 235e (0:235e)
.asm_2376
xor a
ld [wcd0b], a ; [wcd0b] ← 0
- ldh a, [$ffa9]
- ld l, a ; l ← [$ffa9]; index to to linked-list head
+ ldh a, [hffa9]
+ ld l, a ; l ← [hffa9]; index to to linked-list head
.asm_237d
ld h, $c6 ;
ld a, [hl] ; a ← key1[l] ;
@@ -4652,14 +6014,14 @@ Func_235e: ; 235e (0:235e)
ld l, [hl] ; l ← next[l] ;
jr .asm_237d
.asm_238f
- ldh a, [$ffa9]
+ ldh a, [hffa9]
cp l
jr z, .asm_23af ; assert at least one iteration
ld c, a
ld b, $c9
ld a, l
ld [bc], a ; prev[i0] ← i
- ldh [$ffa9], a ; [$ffa9] ← i (update linked-list head)
+ ldh [hffa9], a ; [hffa9] ← i (update linked-list head)
ld h, $c9
ld b, [hl]
ld [hl], $0 ; prev[i] ← 0
@@ -4826,13 +6188,13 @@ Func_24ca: ; 24ca (0:24ca)
call BankswitchHome
push de
ld a, e
- ld de, $ccf4
+ ld de, wccf4
call Func_24fa
pop de
ld a, d
- ld de, $ccf5
+ ld de, wccf5
call Func_24fa
- ld hl, $ccf4
+ ld hl, wccf4
ld b, $8
.asm_24e8
ld a, [hli]
@@ -4845,7 +6207,7 @@ Func_24ca: ; 24ca (0:24ca)
jr nz, .asm_24e8
call BankpopHome
pop bc
- ld de, $ccf4
+ ld de, wccf4
ret
Func_24fa: ; 24fa (0:24fa)
@@ -4858,13 +6220,13 @@ Func_24fa: ; 24fa (0:24fa)
ld bc, VWF
add hl, bc
ld b, $8
-.asm_2508
+.set_timer8
ld a, [hli]
ld [de], a
inc de
inc de
dec b
- jr nz, .asm_2508
+ jr nz, .set_timer8
ret
Func_2510: ; 2510 (0:2510)
@@ -4873,7 +6235,7 @@ Func_2510: ; 2510 (0:2510)
call Func_252e
pop bc
Func_2518: ; 2518 (0:2518)
- ld hl, $cd07
+ ld hl, wcd07
ld a, b
xor [hl]
ld h, $0
@@ -4890,9 +6252,9 @@ Func_2518: ; 2518 (0:2518)
ret
Func_252e: ; 252e (0:252e)
- ld a, $1d
+ ld a, BANK(Fonts); BANK(DuelGraphics); BANK(VWF)
call BankpushHome
- ld de, $ccf4
+ ld de, wccf4
push de
ld c, $8
.asm_2539
@@ -4965,7 +6327,7 @@ Func_256d: ; 256d (0:256d)
; initializes cursor parameters given the 8 bytes starting at hl,
; which represent the following:
-; x position, y position, y displacement between items, number of items,
+; x coord, y coord, y displacement between items, number of items,
; cursor tile number, tile behind cursor, ???? (unknown function pointer if non-0)
; also sets the current menu item to the one specified in register a
InitializeCursorParameters: ; 2636 (0:2636)
@@ -5196,10 +6558,86 @@ Func_271a: ; 271a (0:271a)
ret
; 0x278d
- INCROM $278d, $29f5
+ INCROM $278d, $2988
+
+CardTypeToSymbolID: ; 2988 (0:2988)
+ ld a, [wLoadedCard1Type]
+ cp TYPE_TRAINER
+ jr nc, .trainer_card
+ cp TYPE_ENERGY_FIRE
+ jr c, .pokemon_card
+ ; energy card
+ and 7 ; convert energy constant to type constant
+ ret
+.trainer_card
+ ld a, 11
+ ret
+.pokemon_card
+ ld a, [wLoadedCard1Stage] ; different symbol for each evolution stage
+ add 8
+ ret
+; 0x299f
+
+GetCardSymbolData: ; 299f (0:299f)
+ call CardTypeToSymbolID
+ add a
+ ld c, a
+ ld b, 0
+ ld hl, CardSymbolTable
+ add hl, bc
+ ld a, [hl]
+ ret
+; 0x29ac
+
+DrawCardSymbol: ; 29ac (0:29ac)
+ push hl
+ push de
+ push bc
+ call GetCardSymbolData
+ dec d
+ dec d
+ dec e
+ ld a, [wConsole]
+ cp CONSOLE_CGB
+ jr nz, .tiles
+ ; CGB-only attrs (palette)
+ push hl
+ inc hl
+ ld a, [hl]
+ lb bc, 2, 2
+ lb hl, 0, 0
+ call BankswitchVRAM1
+ call FillRectangle
+ call BankswitchVRAM0
+ pop hl
+.tiles
+ ld a, [hl]
+ lb hl, 1, 2
+ lb bc, 2, 2
+ call FillRectangle
+ pop bc
+ pop de
+ pop hl
+ ret
+; 0x29dd
+
+CardSymbolTable:
+; starting tile, cgb palette (grey, red, blue, pink)
+ db $e0, $01 ; TYPE_ENERGY_FIRE
+ db $e4, $02 ; TYPE_ENERGY_GRASS
+ db $e8, $01 ; TYPE_ENERGY_LIGHTNING
+ db $ec, $02 ; TYPE_ENERGY_WATER
+ db $f0, $03 ; TYPE_ENERGY_PSYCHIC
+ db $f4, $03 ; TYPE_ENERGY_FIGHTING
+ db $f8, $00 ; TYPE_ENERGY_DOUBLE_COLORLESS
+ db $fc, $02 ; TYPE_ENERGY_UNUSED
+ db $d0, $02 ; TYPE_PKMN_*, Stage 0
+ db $d4, $02 ; TYPE_PKMN_*, Stage 1
+ db $d8, $01 ; TYPE_PKMN_*, Stage 2
+ db $dc, $02 ; TYPE_TRAINER
Func_29f5: ; 29f5 (0:29f5)
- farcallx $6, $4000
+ farcall $6, $4000
ret
; 0x29fa
@@ -5266,7 +6704,7 @@ Func_2a44: ; 2a44 (0:2a44)
ld a, l
or h
jp nz, PrintTextNoDelay
- ld hl, wc590
+ ld hl, wDefaultText
jp Func_21c5
DrawWideTextBox_PrintText: ; 2a59 (0:2a59)
@@ -5440,13 +6878,17 @@ PrintYesOrNoItems: ; 2b66 (0:2b66)
ret
; 0x2b70
- INCROM $2b70, $2b78
+Func_2b70: ; 2b70 (0:2b70)
+ ld a, BANK(ContinueDuel)
+ call BankswitchHome
+ jp ContinueDuel
+; 0x2b78
; loads opponent deck to wOpponentDeck
LoadOpponentDeck: ; 2b78 (0:2b78)
xor a
ld [wIsPracticeDuel], a
- ld a, [wOpponentDeckId]
+ ld a, [wOpponentDeckID]
cp SAMS_NORMAL_DECK - 2
jr z, .normal_sam_duel
or a ; cp SAMS_PRACTICE_DECK - 2
@@ -5460,7 +6902,7 @@ LoadOpponentDeck: ; 2b78 (0:2b78)
.normal_sam_duel
xor a
- ld [wOpponentDeckId], a
+ ld [wOpponentDeckID], a
call SwapTurn
ld a, PRACTICE_PLAYER_DECK
call LoadDeck
@@ -5476,17 +6918,17 @@ LoadOpponentDeck: ; 2b78 (0:2b78)
inc a
inc a
call LoadDeck
- ld a, [wOpponentDeckId]
+ ld a, [wOpponentDeckID]
cp DECKS_END
jr c, .valid_deck
ld a, PRACTICE_PLAYER_DECK - 2
- ld [wOpponentDeckId], a
+ ld [wOpponentDeckID], a
.valid_deck
; set opponent as controlled by AI
ld a, DUELVARS_DUELIST_TYPE
call GetTurnDuelistVariable
- ld a, [wOpponentDeckId]
+ ld a, [wOpponentDeckID]
or DUELIST_TYPE_AI_OPP
ld [hl], a
ret
@@ -5502,13 +6944,13 @@ Func_2bc3: ; 2bc3 (0:2bc3)
Func_2bc7: ; 2bc7 (0:2bc7)
ld a, $3
call Func_2bdb
- ld [$ff9d], a
+ ldh [hTempPlayAreaLocationOffset_ff9d], a
ret
Func_2bcf: ; 2bcf (0:2bcf)
ld a, $4
call Func_2bdb
- ld [$ffa0], a
+ ldh [hffa0], a
ret
Func_2bd7: ; 2bd7 (0:2bd7)
@@ -5521,7 +6963,7 @@ Func_2bdb: ; 2bdb (0:2bdb)
push af
ld a, $5
call BankswitchHome
- ld a, [wOpponentDeckId]
+ ld a, [wOpponentDeckID]
ld l, a
ld h, $0
add hl, hl
@@ -5662,7 +7104,7 @@ Func_2cd7: ; 2cd7 (0:2cd7)
Func_2ceb: ; 2ceb (0:2ceb)
call Func_2cd7
- ld hl, $ce48
+ ld hl, wce48
inc [hl]
ret
@@ -5687,7 +7129,7 @@ Func_2d06: ; 2d06 (0:2d06)
add e
ld e, a
ld d, $0
- ld hl, $ce2b
+ ld hl, wce2b
add hl, de
ret
@@ -5703,7 +7145,7 @@ Func_2d15: ; 2d15 (0:2d15)
call EnableLCD
jr .asm_2d36
.asm_2d2d
- ld hl, $ce4c
+ ld hl, wce4c
ld a, [hli]
ld h, [hl]
ld l, a
@@ -5728,11 +7170,11 @@ Func_2d43: ; 2d43 (0:2d43)
call Func_21f2
jr nc, .asm_2d74
cp TX_RAM1
- jr z, .asm_2dc8
+ jr z, .tx_ram1
cp TX_RAM2
- jr z, .asm_2d8a
+ jr z, .tx_ram2
cp TX_RAM3
- jr z, .asm_2db3
+ jr z, .tx_ram3
jr .asm_2d74
.asm_2d65
ld e, a
@@ -5759,14 +7201,14 @@ Func_2d43: ; 2d43 (0:2d43)
call Func_230f
scf
ret
-.asm_2d8a
+.tx_ram2
call Func_2ceb
ld a, $f
ld [hffaf], a
xor a
ld [wcd0a], a
- ld de, $ce3f
- ld hl, $ce49
+ ld de, wTxRam2
+ ld hl, wce49
call Func_2de0
ld a, l
or h
@@ -5775,20 +7217,20 @@ Func_2d43: ; 2d43 (0:2d43)
call Func_2cd7
jr Func_2d43
.asm_2dab
- ld hl, wc590
+ ld hl, wDefaultText
call Func_2cd7
jr Func_2d43
-.asm_2db3
+.tx_ram3
call Func_2ceb
- ld de, $ce43
- ld hl, $ce4a
+ ld de, wTxRam3
+ ld hl, wce4a
call Func_2de0
call Func_2e12
call Func_2cd7
jp Func_2d43
-.asm_2dc8
+.tx_ram1
call Func_2ceb
- call Func_2e2c
+ call CopyTurnDuelistName
ld a, [wcaa0]
cp $6
jr z, .asm_2dda
@@ -5798,6 +7240,8 @@ Func_2d43: ; 2d43 (0:2d43)
call Func_2cd7
jp Func_2d43
+; inc [hl]
+; hl = [de + 2*[hl]]
Func_2de0: ; 2de0 (0:2de0)
push de
ld a, [hl]
@@ -5860,17 +7304,18 @@ Func_2e12: ; 2e12 (0:2e12)
jr nz, .asm_2e23
ret
-Func_2e2c: ; 2e2c (0:2e2c)
+; copy the name of the duelist whose turn it is to de
+CopyTurnDuelistName: ; 2e2c (0:2e2c)
ld de, wcaa0
push de
ldh a, [hWhoseTurn]
cp OPPONENT_TURN
jp z, .opponent_turn
- call PrintPlayerName
+ call CopyPlayerName
pop hl
ret
.opponent_turn
- call PrintOpponentName
+ call CopyOpponentName
pop hl
ret
@@ -5887,7 +7332,7 @@ PrintText: ; 2e41 (0:2e41)
call BankswitchHome
ret
.from_ram
- ld hl, wc590
+ ld hl, wDefaultText
.print_text
call Func_2cc8
.next_tile_loop
@@ -5895,14 +7340,14 @@ PrintText: ; 2e41 (0:2e41)
ld b, a
ld a, [wTextSpeed]
inc a
- cp $3
+ cp 3
jr nc, .apply_delay
; if text speed is 1, pressing b ignores it
bit B_BUTTON_F, b
jr nz, .skip_delay
jr .apply_delay
.text_delay_loop
- ; wait a number of frames equal to wTextSpeed between printing each text tile
+ ; wait a number of frames equal to [wTextSpeed] between printing each text tile
call DoFrame
.apply_delay
dec a
@@ -5949,40 +7394,54 @@ PrintTextBoxBorderLabel: ; 2e89 (0:2e89)
.special
ldh a, [hWhoseTurn]
cp OPPONENT_TURN
- jp z, PrintOpponentName
- jp PrintPlayerName
+ jp z, CopyOpponentName
+ jp CopyPlayerName
; 0x2ea9
- INCROM $2ea9, $2ebb
+Func_2ea9: ; 2ea9 (0:2ea9)
+ ldh [hff96], a
+ ldh a, [hBankROM]
+ push af
+ call ReadTextOffset
+ ldh a, [hff96]
+ call $23fd
+ pop af
+ call BankswitchHome
+ ret
+; 0x2ebb
-Func_2ebb: ; 2ebb (0:2ebb)
+; text pointer (usually of a card name) for TX_RAM2
+LoadTxRam2: ; 2ebb (0:2ebb)
ld a, l
- ld [wce3f], a
+ ld [wTxRam2], a
ld a, h
- ld [wce40], a
+ ld [wTxRam2 + 1], a
ret
-Func_2ec4: ; 2ec4 (0:2ec4)
+; a number between 0 and 65535 for TX_RAM3
+LoadTxRam3: ; 2ec4 (0:2ec4)
ld a, l
- ld [wce43], a
+ ld [wTxRam3], a
ld a, h
- ld [wce44], a
+ ld [wTxRam3 + 1], a
ret
; 0x2ecd
INCROM $2ecd, $2f0a
-; load data of card with id at e to wLoadedCard1 or wLoadedCard2
-LoadCardDataToBuffer2: ; 2f0a (0:2f0a)
+; load data of card with id at e to wLoadedCard2
+LoadCardDataToBuffer2_FromCardID: ; 2f0a (0:2f0a)
push hl
ld hl, wLoadedCard2
- jr LoadCardDataToRAM
+ jr LoadCardDataToHL_FromCardID
-LoadCardDataToBuffer1: ; 2f10 (0:2f10)
+; load data of card with id at e to wLoadedCard1
+LoadCardDataToBuffer1_FromCardID: ; 2f10 (0:2f10)
push hl
ld hl, wLoadedCard1
+; fallthrough
-LoadCardDataToRAM: ; 2f14 (0:2f14)
+LoadCardDataToHL_FromCardID: ; 2f14 (0:2f14)
push de
push bc
push hl
@@ -6000,65 +7459,65 @@ LoadCardDataToRAM: ; 2f14 (0:2f14)
jr nz, .copy_card_data_loop
call BankpopHome
or a
-
.done
pop bc
pop de
pop hl
ret
-Func_2f32: ; 2f32 (0:2f32)
+; return in a the type (TYPE_* constant) of the card with id at e
+GetCardType: ; 2f32 (0:2f32)
push hl
call GetCardPointer
- jr c, .asm_2f43
- ld a, $c
+ jr c, .done
+ ld a, BANK(CardPointers)
call BankpushHome2
ld l, [hl]
call BankpopHome
ld a, l
or a
-.asm_2f43
+.done
pop hl
ret
-Func_2f45: ; 2f45 (0:2f45)
+; return in a the 2-byte text id of the name of the card with id at e
+GetCardName: ; 2f45 (0:2f45)
push hl
call GetCardPointer
- jr c, .asm_2f5b
- ld a, $c
+ jr c, .done
+ ld a, BANK(CardPointers)
call BankpushHome2
- ld de, $0003
+ ld de, CARD_DATA_NAME
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
call BankpopHome
or a
-
-.asm_2f5b
+.done
pop hl
ret
-; from the card id in a, loads type into a, rarity into b, and set into c
-GetCardHeader: ; 2f5d (0:2f5d)
+; from the card id in a, returns type into a, rarity into b, and set into c
+GetCardTypeRarityAndSet: ; 2f5d (0:2f5d)
push hl
push de
- ld d, $00
+ ld d, 0
ld e, a
call GetCardPointer
- jr c, .card_not_found
- ld a, $0c
+ jr c, .done
+ ld a, BANK(CardPointers)
call BankpushHome2
- ld e, [hl]
- ld bc, $5
+ ld e, [hl] ; CARD_DATA_TYPE
+ ld bc, CARD_DATA_RARITY
add hl, bc
- ld b, [hl]
+ ld b, [hl] ; CARD_DATA_RARITY
inc hl
- ld c, [hl]
+ ld c, [hl] ; CARD_DATA_SET
call BankpopHome
ld a, e
or a
-.card_not_found
+.done
pop de
pop hl
ret
@@ -6074,10 +7533,10 @@ GetCardPointer: ; 2f7c (0:2f7c)
ld bc, CardPointers
add hl, bc
ld a, h
- cp a, (CardPointers + 2 + (2 * NUM_CARDS)) / $100
+ cp HIGH(CardPointers + 2 + (2 * NUM_CARDS))
jr nz, .nz
ld a, l
- cp a, (CardPointers + 2 + (2 * NUM_CARDS)) % $100
+ cp LOW(CardPointers + 2 + (2 * NUM_CARDS))
.nz
ccf
jr c, .out_of_bounds
@@ -6085,7 +7544,7 @@ GetCardPointer: ; 2f7c (0:2f7c)
call BankpushHome2
ld a, [hli]
ld h, [hl]
- ld l,a
+ ld l, a
call BankpopHome
or a
.out_of_bounds
@@ -6093,10 +7552,13 @@ GetCardPointer: ; 2f7c (0:2f7c)
pop de
ret
+; input: hl = card_gfx_index
+; card_gfx_index = (<Name>CardGfx - CardGraphics) / 8 ; using absolute ROM addresses
LoadCardGfx: ; 2fa0 (0:2fa0)
ldh a, [hBankROM]
push af
push hl
+ ; first, get the bank with the card gfx is at
srl h
srl h
srl h
@@ -6104,14 +7566,15 @@ LoadCardGfx: ; 2fa0 (0:2fa0)
add h
call BankswitchHome
pop hl
+ ; once we have the bank, get the pointer: multiply by 8 and discard the bank offset
add hl, hl
add hl, hl
add hl, hl
res 7, h
- set 6, h
+ set 6, h ; $4000 ≤ de ≤ $7fff
call CopyGfxData
- ld b, $8 ; length of palette
- ld de, $ce23
+ ld b, CGB_PAL_SIZE
+ ld de, wce23
.copy_card_palette
ld a, [hli]
ld [de], a
@@ -6122,10 +7585,11 @@ LoadCardGfx: ; 2fa0 (0:2fa0)
call BankswitchHome
ret
-Func_2fcb: ; 2fcb (0:2fcb)
- ld a, $1d
+; identical to CopyFontsOrDuelGraphicsTiles
+CopyFontsOrDuelGraphicsTiles2: ; 2fcb (0:2fcb)
+ ld a, BANK(Fonts); BANK(DuelGraphics); BANK(VWF)
call BankpushHome
- ld c, $10
+ ld c, TILE_SIZE
call CopyGfxData
call BankpopHome
ret
@@ -6186,7 +7650,7 @@ CheckMatchingCommand: ; 2ffe (0:2ffe)
call BankswitchHome
; store the bank number of command functions ($b) in wce22
ld a, $b
- ld [wce22],a
+ ld [wce22], a
.check_command_loop
ld a, [hli]
or a
@@ -6276,10 +7740,10 @@ Func_3061: ; 3061 (0:3061)
; function that executes one or more consecutive coin tosses during a duel (a = number of coin tosses),
; displaying each result ([O] or [X]) starting from the top left corner of the screen.
; text at de is printed in a text box during the coin toss.
-; returns: the number of heads in a and in $cd9d, and carry if at least one heads
+; returns: the number of heads in a and in wcd9d, and carry if at least one heads
TossCoinATimes: ; 3071 (0:3071)
push hl
- ld hl, wCoinTossScreenTextId
+ ld hl, wCoinTossScreenTextID
ld [hl], e
inc hl
ld [hl], d
@@ -6289,17 +7753,17 @@ TossCoinATimes: ; 3071 (0:3071)
; function that executes a single coin toss during a duel.
; text at de is printed in a text box during the coin toss.
-; returns: - carry, and 1 in a and in $cd9d if heads
-; - nc, and 0 in a and in $cd9d if tails
+; returns: - carry, and 1 in a and in wcd9d if heads
+; - nc, and 0 in a and in wcd9d if tails
TossCoin: ; 307d (0:307d)
push hl
- ld hl, wCoinTossScreenTextId
+ ld hl, wCoinTossScreenTextID
ld [hl], e
inc hl
ld [hl], d
ld a, $1
bank1call _TossCoin
- ld hl, $cac2
+ ld hl, wcac2
ld [hl], $0
pop hl
ret
@@ -6406,7 +7870,7 @@ Func_311d: ; 311d (0:311d)
Func_312d: ; 312d (0:312d) ; serial transfer-related
push hl
- ld hl, $ce64
+ ld hl, wce64
ld a, $88
ld [hli], a ; [wce64] ← $88
ld a, $33
@@ -6428,7 +7892,7 @@ Func_312d: ; 312d (0:312d) ; serial transfer-related
ld [hl], e ; [wce6c] ← $45
inc hl
ld [hl], d ; [wce6d] ← $ff
- ld hl, $ce70
+ ld hl, wce70
ld [hl], $64 ; [wce70] ← $64
inc hl
ld [hl], $ce ; [wce71] ← $ce
@@ -6486,21 +7950,21 @@ PointerTable_3190: ; 3190 (0:3190)
Func_31a8: ; 31a8 (0:31a8)
call Func_31fc
Func_31ab: ; 31ab (0:31ab)
- ld hl, $ce63
+ ld hl, wce63
inc [hl]
ret
Func_31b0: ; 31b0 (0:31b0)
call Func_31ab
- ld hl, $ce68
+ ld hl, wce68
ld a, [hli]
or [hl]
jr nz, .asm_31bf
call Func_31ab
jr Func_31dd
.asm_31bf
- ld hl, $ce6a
- ld de, $ce70
+ ld hl, wce6a
+ ld de, wce70
ld a, [hli]
ld [de], a
inc de
@@ -6509,7 +7973,7 @@ Func_31b0: ; 31b0 (0:31b0)
Func_31ca: ; 31ca (0:31ca)
call Func_31fc
- ld hl, $ce68
+ ld hl, wce68
ld a, [hl]
dec [hl]
or a
@@ -6548,7 +8012,7 @@ Func_31f2: ; 31f2 (0:31f2)
ret
Func_31fc: ; 31fc (0:31fc)
- ld hl, $ce70
+ ld hl, wce70
ld e, [hl]
inc hl
ld d, [hl]
@@ -6558,14 +8022,15 @@ Func_31fc: ; 31fc (0:31fc)
dec hl
ld [hl], e
ld e, a
- ld hl, $ce6c
+ ld hl, wce6c
add [hl]
ld [hli], a
ld a, $0
adc [hl]
ld [hl], a
ld a, e
- ; fallthrough
+; fallthrough
+
Func_3212: ; 3212 (0:3212)
ld [rSB], a
ld a, $1
@@ -6576,9 +8041,9 @@ Func_3212: ; 3212 (0:3212)
; doubles the damage at de if swords dance or focus energy was used in the last turn
HandleDoubleDamageSubstatus: ; 321d (0:321d)
- ld a, DUELVARS_ARENA_CARD_SUBSTATUS5
+ ld a, DUELVARS_ARENA_CARD_SUBSTATUS3
call GetTurnDuelistVariable
- bit SUBSTATUS5_THIS_TURN_DOUBLE_DAMAGE, [hl]
+ bit SUBSTATUS3_THIS_TURN_DOUBLE_DAMAGE, [hl]
call nz, DoubleDamageAtDE
ld a, DUELVARS_ARENA_CARD_SUBSTATUS1
call GetTurnDuelistVariable
@@ -6605,6 +8070,7 @@ CommentedOut_3243: ; 3243 (0:3243)
ret
; check if the attacked card has any substatus that reduces the damage this turn
+; damage is given in de as input and the possibly updated damage is also returned in de
HandleDamageReduction: ; 3244 (0:3244)
call HandleDamageReductionExceptSubstatus2
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
@@ -6631,6 +8097,9 @@ HandleDamageReduction: ; 3244 (0:3244)
ld d, h
ret
+; check if the attacked card has any substatus that reduces the damage this turn
+; substatus 2 is not checked
+; damage is given in de as input and the possibly updated damage is also returned in de
HandleDamageReductionExceptSubstatus2: ; 3269 (0:3269)
ld a, [wNoDamageOrEffect]
or a
@@ -6656,12 +8125,13 @@ HandleDamageReductionExceptSubstatus2: ; 3269 (0:3269)
cp SUBSTATUS1_HALVE_DAMAGE
jr z, .halve_damage
.not_affected_by_substatus1
- call CheckIfUnderAnyCannotUseStatus
+ call CheckCannotUseDueToStatus
ret c
+.pkmn_power
ld a, [wLoadedMoveCategory]
cp POKEMON_POWER
ret z
- ld a, [wTempNonTurnDuelistCardId]
+ ld a, [wTempNonTurnDuelistCardID]
cp MR_MIME
jr z, .prevent_less_than_30_damage ; invisible wall
cp KABUTO
@@ -6719,7 +8189,129 @@ HandleDamageReductionExceptSubstatus2: ; 3269 (0:3269)
ret
; 0x32f7
- INCROM $32f7, $33c1
+; check for Invisible Wall, Kabuto Armor, NShield, or Transparency, in order to
+; possibly reduce or make zero the damage at de.
+HandleDamageReductionOrNoDamageFromPkmnPowerEffects: ; 32f7 (0:32f7)
+ ld a, [wLoadedMoveCategory]
+ cp POKEMON_POWER
+ ret z
+ ld a, MUK
+ call CountPokemonIDInBothPlayAreas
+ ret c
+ ld a, [wTempPlayAreaLocationOffset_cceb]
+ or a
+ call nz, HandleDamageReductionExceptSubstatus2.pkmn_power
+ push de ; push damage from call above, which handles Invisible Wall and Kabuto Armor
+ call HandleNoDamageOrEffectSubstatus.pkmn_power
+ call nc, HandleTransparency
+ pop de ; restore damage
+ ret nc
+ ; if carry was set due to NShield or Transparency, damage is 0
+ ld de, 0
+ ret
+; 0x3317
+
+; when Machamp is damaged, if its Strikes Back is active,
+; the attacking Pokemon takes 10 damage.
+; used to bounce back a damaging move.
+HandleStrikesBack_AgainstDamagingMove: ; 3317 (0:3317)
+ ld a, e
+ or d
+ ret z
+ ld a, [wDamageToSelfMode]
+ or a
+ ret nz
+ ld a, [wTempNonTurnDuelistCardID]
+ cp MACHAMP
+ ret nz
+ ld a, MUK
+ call CountPokemonIDInBothPlayAreas
+ ret c
+ ld a, [wLoadedMoveCategory]
+ cp POKEMON_POWER
+ ret z
+ ld a, [wTempPlayAreaLocationOffset_cceb]
+ or a ; cp PLAY_AREA_ARENA
+ jr nz, .in_bench
+ call CheckCannotUseDueToStatus
+ ret c
+.in_bench
+ push hl
+ push de
+ call SwapTurn
+ ld a, DUELVARS_ARENA_CARD
+ call GetTurnDuelistVariable
+ call LoadCardDataToBuffer2_FromDeckIndex
+ ld a, DUELVARS_ARENA_CARD_HP
+ call GetTurnDuelistVariable
+ push af
+ push hl
+ ld de, 10
+ call SubstractHP
+ ld a, [wLoadedCard2ID]
+ ld [wTempNonTurnDuelistCardID], a
+ ld hl, 10
+ call LoadTxRam3
+ ld hl, wLoadedCard2Name
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call LoadTxRam2
+ ldtx hl, ReceivesDamageDueToStrikesBackText
+ call DrawWideTextBox_WaitForInput
+ pop hl
+ pop af
+ or a
+ jr z, .not_knocked_out
+ xor a
+ call PrintPlayAreaCardKnockedOutIfNoHP
+.not_knocked_out
+ call SwapTurn
+ pop de
+ pop hl
+ ret
+; 0x337f
+
+; return carry if NShield or Transparency activate, and print their corresponding text if so
+HandleNShieldAndTransparency: ; 337f (0:337f)
+ push de
+ ld a, DUELVARS_ARENA_CARD
+ add e
+ call GetTurnDuelistVariable
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp MEW1
+ jr z, .nshield
+ cp HAUNTER1
+ jr z, .transparency
+.done
+ pop de
+ or a
+ ret
+.nshield
+ ld a, DUELVARS_ARENA_CARD_STAGE
+ call GetNonTurnDuelistVariable
+ or a
+ jr z, .done
+ ld a, NO_DAMAGE_OR_EFFECT_NSHIELD
+ ld [wNoDamageOrEffect], a
+ ldtx hl, NoDamageOrEffectDueToNShieldText
+.print_text
+ call DrawWideTextBox_WaitForInput
+ pop de
+ scf
+ ret
+.transparency
+ xor a
+ ld [wcac2], a
+ ldtx de, TransparencyCheckText
+ call TossCoin
+ jr nc, .done
+ ld a, NO_DAMAGE_OR_EFFECT_TRANSPARENCY
+ ld [wNoDamageOrEffect], a
+ ldtx hl, NoDamageOrEffectDueToTransparencyText
+ jr .print_text
+; 0x33c1
; return carry if card is under a condition that makes it unable to attack
; also return in hl the text id to be displayed
@@ -6752,11 +8344,11 @@ HandleAmnesiaSubstatus: ; 33e1 (0:33e1)
ret
.check_amnesia
cp SUBSTATUS2_AMNESIA
- jr z, .affectedByAmnesia
+ jr z, .affected_by_amnesia
.not_the_disabled_move
or a
ret
-.affectedByAmnesia
+.affected_by_amnesia
ld a, DUELVARS_ARENA_CARD_DISABLED_MOVE_INDEX
call GetTurnDuelistVariable
ld a, [wSelectedMoveIndex]
@@ -6823,10 +8415,11 @@ HandleNoDamageOrEffectSubstatus: ; 3432 (0:3432)
ldtx hl, NoDamageOrEffectDueToAgilityText
cp SUBSTATUS1_AGILITY
jr z, .no_damage_or_effect
- call CheckIfUnderAnyCannotUseStatus
+ call CheckCannotUseDueToStatus
ccf
ret nc
- ld a, [wTempNonTurnDuelistCardId]
+.pkmn_power
+ ld a, [wTempNonTurnDuelistCardID]
cp MEW1
jr z, .neutralizing_shield
or a
@@ -6837,13 +8430,14 @@ HandleNoDamageOrEffectSubstatus: ; 3432 (0:3432)
scf
ret
.neutralizing_shield
- ld a, [wcce6]
+ ld a, [wDamageToSelfMode]
or a
ret nz
- ld a, [wTempTurnDuelistCardId]
+ ; prevent damage if attacked by a non-basic Pokemon
+ ld a, [wTempTurnDuelistCardID]
ld e, a
ld d, $0
- call LoadCardDataToBuffer2
+ call LoadCardDataToBuffer2_FromCardID
ld a, [wLoadedCard2Stage]
or a
ret z
@@ -6853,20 +8447,21 @@ HandleNoDamageOrEffectSubstatus: ; 3432 (0:3432)
; if the Pokemon being attacked is Haunter1, and its Transparency is active,
; there is a 50% chance that any damage or effect is prevented
+; return carry if damage is prevented
HandleTransparency: ; 348a (0:348a)
- ld a, [wTempNonTurnDuelistCardId]
+ ld a, [wTempNonTurnDuelistCardID]
cp HAUNTER1
jr z, .transparency
-.asm_3491
+.done
or a
ret
.transparency
ld a, [wLoadedMoveCategory]
cp POKEMON_POWER
- jr z, .asm_3491
- ld a, [wcceb]
- call CheckIfUnderAnyCannotUseStatus2
- jr c, .asm_3491
+ jr z, .done ; Transparency has no effect against Pkmn Powers
+ ld a, [wTempPlayAreaLocationOffset_cceb]
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ jr c, .done
xor a
ld [wcac2], a
ldtx de, TransparencyCheckText
@@ -6915,107 +8510,210 @@ NoDamageOrEffectTextPointerTable: ; 34d8 (0:34d8)
tx NoDamageOrEffectDueToNShieldText ; NO_DAMAGE_OR_EFFECT_NSHIELD
; 0x34e2
-Func_34e2: ; 34e2 (0:34e2)
- ld a, $27
- call Func_3509
+; return carry if turn holder has Omanyte and its Clairvoyance Pkmn Power is active
+IsClairvoyanceActive: ; 34e2 (0:34e2)
+ ld a, MUK
+ call CountPokemonIDInBothPlayAreas
ccf
ret nc
- ld a, $5c
- call Func_3525
+ ld a, OMANYTE
+ call CountPokemonIDInPlayArea
ret
; returns carry if paralyzed, asleep, confused, and/or toxic gas in play,
; meaning that move and/or pkmn power cannot be used
-CheckIfUnderAnyCannotUseStatus: ; 34ef (0:34ef)
+CheckCannotUseDueToStatus: ; 34ef (0:34ef)
xor a
; same as above, but if a is non-0, only toxic gas is checked
-CheckIfUnderAnyCannotUseStatus2: ; 34f0 (0:34f0)
+CheckCannotUseDueToStatus_OnlyToxicGasIfANon0: ; 34f0 (0:34f0)
or a
jr nz, .check_toxic_gas
ld a, DUELVARS_ARENA_CARD_STATUS
call GetTurnDuelistVariable
- and PASSIVE_STATUS_MASK
+ and CNF_SLP_PRZ
ldtx hl, CannotUseDueToStatusText
scf
jr nz, .done ; return carry
.check_toxic_gas
ld a, MUK
- call Func_3509
+ call CountPokemonIDInBothPlayAreas
ldtx hl, UnableDueToToxicGasText
.done
ret
-Func_3509: ; 3509 (0:3509)
+; return, in a, the amount of times that the Pokemon card with a given ID is found in the
+; play area of both duelists. Also return carry if the Pokemon card is at least found once.
+; if the arena Pokemon is asleep, confused, or paralyzed (Pkmn Power-incapable), it doesn't count.
+; input: a = Pokemon card ID to search
+CountPokemonIDInBothPlayAreas: ; 3509 (0:3509)
push bc
- ld [wce7c], a
- call Func_3525
+ ld [wTempPokemonID_ce7e], a
+ call CountPokemonIDInPlayArea
ld c, a
call SwapTurn
- ld a, [wce7c]
- call Func_3525
+ ld a, [wTempPokemonID_ce7e]
+ call CountPokemonIDInPlayArea
call SwapTurn
add c
or a
scf
- jr nz, .asm_3523
+ jr nz, .found
or a
-.asm_3523
+.found
pop bc
ret
-Func_3525: ; 3525 (0:3525)
+; return, in a, the amount of times that the Pokemon card with a given ID is found in the
+; turn holder's play area. Also return carry if the Pokemon card is at least found once.
+; if the arena Pokemon is asleep, confused, or paralyzed (Pkmn Power-incapable), it doesn't count.
+; input: a = Pokemon card ID to search
+CountPokemonIDInPlayArea: ; 3525 (0:3525)
push hl
push de
push bc
- ld [wce7c], a
+ ld [wTempPokemonID_ce7e], a
ld c, $0
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
- cp $ff
- jr z, .asm_3549
- call GetCardInDeckPosition
- ld a, [wce7c]
+ cp -1
+ jr z, .check_bench
+ call GetCardIDFromDeckIndex
+ ld a, [wTempPokemonID_ce7e]
cp e
- jr nz, .asm_3549
+ jr nz, .check_bench
ld a, DUELVARS_ARENA_CARD_STATUS
call GetTurnDuelistVariable
- and PASSIVE_STATUS_MASK
- jr nz, .asm_3549
+ and CNF_SLP_PRZ
+ jr nz, .check_bench
inc c
-.asm_3549
+.check_bench
ld a, DUELVARS_BENCH
call GetTurnDuelistVariable
-.asm_354e
+.next_bench_slot
ld a, [hli]
- cp $ff
- jr z, .asm_3560
- call GetCardInDeckPosition
- ld a, [wce7c]
+ cp -1
+ jr z, .done
+ call GetCardIDFromDeckIndex
+ ld a, [wTempPokemonID_ce7e]
cp e
- jr nz, .asm_355d
+ jr nz, .skip
inc c
-.asm_355d
+.skip
inc b
- jr .asm_354e
-.asm_3560
+ jr .next_bench_slot
+.done
ld a, c
or a
scf
- jr nz, .asm_3566
+ jr nz, .found
or a
-.asm_3566
+.found
pop bc
pop de
pop hl
ret
; 0x356a
- INCROM $356a, $35e6
+; return, in a, the retreat cost of the card in wLoadedCard1,
+; adjusting for any Dodrio's Retreat Aid Pkmn Power that is active.
+GetLoadedCard1RetreatCost: ; 356a (0:356a)
+ ld c, 0
+ ld a, DUELVARS_BENCH
+ call GetTurnDuelistVariable
+.check_bench_loop
+ ld a, [hli]
+ cp -1
+ jr z, .no_more_bench
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp DODRIO
+ jr nz, .not_dodrio
+ inc c
+.not_dodrio
+ jr .check_bench_loop
+.no_more_bench
+ ld a, c
+ or a
+ jr nz, .dodrio_found
+.muk_found
+ ld a, [wLoadedCard1RetreatCost] ; return regular retreat cost
+ ret
+.dodrio_found
+ ld a, MUK
+ call CountPokemonIDInBothPlayAreas
+ jr c, .muk_found
+ ld a, [wLoadedCard1RetreatCost]
+ sub c ; apply Retreat Aid for each Pkmn Power-capable Dodrio
+ ret nc
+ xor a
+ ret
+; 0x3597
+
+; return carry if the turn holder's active Pokemon is affected by Acid and can't retreat
+CheckCantRetreatDueToAcid: ; 3597 (0:3597)
+ ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
+ call GetTurnDuelistVariable
+ or a
+ ret z
+ cp SUBSTATUS2_UNABLE_RETREAT
+ jr z, .cant_retreat
+ or a
+ ret
+.cant_retreat
+ ldtx hl, UnableToRetreatDueToAcidText
+ scf
+ ret
+; 0x35a9
+
+; return carry if the turn holder's active Pokemon is affected by Headache and trainer cards can't be used
+CheckCantUseTrainerDueToHeadache: ; 35a9 (0:35a9)
+ ld a, DUELVARS_ARENA_CARD_SUBSTATUS3
+ call GetTurnDuelistVariable
+ or a
+ bit SUBSTATUS3_HEADACHE, [hl]
+ ret z
+ ldtx hl, UnableToUseTrainerDueToHeadacheText
+ scf
+ ret
+; 0x35b7
+
+; return carry if turn holder has Aerodactyl and its Prehistoric Power Pkmn Power is active
+IsPrehistoricPowerActive: ; 35b7 (0:35b7)
+ ld a, AERODACTYL
+ call CountPokemonIDInBothPlayAreas
+ ret nc
+ ld a, MUK
+ call CountPokemonIDInBothPlayAreas
+ ldtx hl, UnableToEvolveDueToPrehistoricPowerText
+ ccf
+ ret
+; 0x35c7
+
+; clears some substatus 2 conditions from the turn holder's active Pokemon
+Func_35c7: ; 35c7 (0:35c7)
+ ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
+ call GetTurnDuelistVariable
+ or a
+ ret z
+ cp SUBSTATUS2_REDUCE_BY_20
+ jr z, .zero
+ cp SUBSTATUS2_POUNCE
+ jr z, .zero
+ cp SUBSTATUS2_GROWL
+ jr z, .zero
+ cp SUBSTATUS2_TAIL_WAG
+ jr z, .zero
+ cp SUBSTATUS2_LEER
+ jr z, .zero
+ ret
+.zero
+ ld [hl], 0
+ ret
+; 0x35e6
-; if swords dance or focus energy was used this turn,
-; mark that the base power of the next turn's attack has to be doubled
-HandleSwordsDanceOrFocusEnergySubstatus: ; 35e6 (0:35e6)
+; clears the substatus 1 and updates the double damage condition of the player about to start his turn
+UpdateSubstatusConditions_StartOfTurn: ; 35e6 (0:35e6)
ld a, DUELVARS_ARENA_CARD_SUBSTATUS1
call GetTurnDuelistVariable
ld [hl], $0
@@ -7023,16 +8721,16 @@ HandleSwordsDanceOrFocusEnergySubstatus: ; 35e6 (0:35e6)
ret z
cp SUBSTATUS1_NEXT_TURN_DOUBLE_DAMAGE
ret nz
- ld a, DUELVARS_ARENA_CARD_SUBSTATUS5
+ ld a, DUELVARS_ARENA_CARD_SUBSTATUS3
call GetTurnDuelistVariable
- set SUBSTATUS5_THIS_TURN_DOUBLE_DAMAGE, [hl]
+ set SUBSTATUS3_THIS_TURN_DOUBLE_DAMAGE, [hl]
ret
-; clears the substatus 2 and updates the double damage condition of the turn holder
-UpdateSubstatusConditions: ; 35fa (0:35fa)
- ld a, DUELVARS_ARENA_CARD_SUBSTATUS5
+; clears the substatus 2, Headache, and updates the double damage condition of the player ending his turn
+UpdateSubstatusConditions_EndOfTurn: ; 35fa (0:35fa)
+ ld a, DUELVARS_ARENA_CARD_SUBSTATUS3
call GetTurnDuelistVariable
- res 1, [hl]
+ res SUBSTATUS3_HEADACHE, [hl]
push hl
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
call GetTurnDuelistVariable
@@ -7043,11 +8741,39 @@ UpdateSubstatusConditions: ; 35fa (0:35fa)
pop hl
cp SUBSTATUS1_NEXT_TURN_DOUBLE_DAMAGE
ret z
- res SUBSTATUS5_THIS_TURN_DOUBLE_DAMAGE, [hl]
+ res SUBSTATUS3_THIS_TURN_DOUBLE_DAMAGE, [hl]
ret
; 0x3615
- INCROM $3615, $363b
+; return carry if turn holder has Blastoise and its Rain Dance Pkmn Power is active
+IsRainDanceActive: ; 3615 (0:3615)
+ ld a, BLASTOISE
+ call CountPokemonIDInPlayArea
+ ret nc ; return if no Pkmn Power-capable Blastoise found in turn holder's play area
+ ld a, MUK
+ call CountPokemonIDInBothPlayAreas
+ ccf
+ ret
+; 0x3622
+
+; return carry if card at [hTempCardIndex_ff98] is a water energy card AND
+; if card at [hTempPlayAreaLocationOffset_ff9d] is a water Pokemon card.
+CheckRainDanceScenario: ; 3622 (0:3622)
+ ldh a, [hTempCardIndex_ff98]
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ cp TYPE_ENERGY_WATER
+ jr nz, .done
+ ldh a, [hTempPlayAreaLocationOffset_ff9d]
+ call GetPlayAreaCardColor
+ cp TYPE_PKMN_WATER
+ jr nz, .done
+ scf
+ ret
+.done
+ or a
+ ret
+; 0x363b
; if the target card's HP is 0 and the attacking card's HP is not,
; the attacking card faints if it was affected by destiny bond
@@ -7061,7 +8787,7 @@ HandleDestinyBondSubstatus: ; 363b (0:363b)
.check_hp
ld a, DUELVARS_ARENA_CARD
call GetNonTurnDuelistVariable
- cp $ff
+ cp -1
ret z
ld a, DUELVARS_ARENA_CARD_HP
call GetNonTurnDuelistVariable
@@ -7078,21 +8804,22 @@ HandleDestinyBondSubstatus: ; 363b (0:363b)
pop hl
ld l, DUELVARS_ARENA_CARD
ld a, [hl]
- call LoadDeckCardToBuffer2
+ call LoadCardDataToBuffer2_FromDeckIndex
ld hl, wLoadedCard2Name
ld a, [hli]
ld h, [hl]
ld l, a
- call Func_2ebb
+ call LoadTxRam2
ldtx hl, KnockedOutDueToDestinyBondText
call DrawWideTextBox_WaitForInput
ret
; 0x367b
; when Machamp is damaged, if its Strikes Back is active,
-; the attacking Pokemon takes 10 damage
-HandleStrikesBack: ; 367b (0:367b)
- ld a, [wTempNonTurnDuelistCardId]
+; the attacking Pokemon takes 10 damage.
+; used to bounce back a move of the RESIDUAL category
+HandleStrikesBack_AgainstResidualMove: ; 367b (0:367b)
+ ld a, [wTempNonTurnDuelistCardID]
cp MACHAMP
jr z, .strikes_back
ret
@@ -7100,30 +8827,30 @@ HandleStrikesBack: ; 367b (0:367b)
ld a, [wLoadedMoveCategory]
and RESIDUAL
ret nz
- ld a, [wccbf]
+ ld a, [wTempDamage_ccbf]
or a
ret z
call SwapTurn
- call CheckIfUnderAnyCannotUseStatus
+ call CheckCannotUseDueToStatus
call SwapTurn
ret c
ld hl, 10 ; damage to be dealt to attacker
- call ApplyStrikesBack
+ call ApplyStrikesBack_AgainstResidualMove
call nc, WaitForWideTextBoxInput
ret
-ApplyStrikesBack: ; 36a2 (0:36a2)
+ApplyStrikesBack_AgainstResidualMove: ; 36a2 (0:36a2)
push hl
- call Func_2ec4
- ld a, [wTempTurnDuelistCardId]
+ call LoadTxRam3
+ ld a, [wTempTurnDuelistCardID]
ld e, a
ld d, $0
- call LoadCardDataToBuffer2
+ call LoadCardDataToBuffer2_FromCardID
ld hl, wLoadedCard2Name
ld a, [hli]
ld h, [hl]
ld l, a
- call Func_2ebb
+ call LoadTxRam2
ld a, DUELVARS_ARENA_CARD_HP
call GetTurnDuelistVariable
pop de
@@ -7138,44 +8865,68 @@ ApplyStrikesBack: ; 36a2 (0:36a2)
ret z
call WaitForWideTextBoxInput
xor a
- call Func_1aac
+ call PrintPlayAreaCardKnockedOutIfNoHP
call $503a
scf
ret
; 0x36d9
- INCROM $36d9, $36f6
+; if the id of the card provided in register a as a deck index is Muk,
+; clear the changed type of all arena and bench Pokemon
+ClearChangedTypesIfMuk: ; 36d9 (0:36d9)
+ call GetCardIDFromDeckIndex
+ ld a, e
+ cp MUK
+ ret nz
+ call SwapTurn
+ call .zero_changed_types
+ call SwapTurn
+.zero_changed_types
+ ld a, DUELVARS_ARENA_CARD_CHANGED_TYPE
+ call GetTurnDuelistVariable
+ ld c, MAX_PLAY_AREA_POKEMON
+.zero_changed_types_loop
+ xor a
+ ld [hli], a
+ dec c
+ jr nz, .zero_changed_types_loop
+ ret
+; 0x36f6
-Func_36f6: ; 36f6 (0:36f6)
+; return the turn holder's arena card's color in a, accounting for Venomoth's Shift Pokemon Power if active
+GetArenaCardColor: ; 36f6 (0:36f6)
xor a
+; fallthrough
-Func_36f7: ; 36f7 (0:36f7)
+; input: a = play area location offset (PLAY_AREA_*) of the desired card
+; return the turn holder's card's color in a, accounting for Venomoth's Shift Pokemon Power if active
+GetPlayAreaCardColor: ; 36f7 (0:36f7)
push hl
push de
ld e, a
- add $d4
+ add DUELVARS_ARENA_CARD_CHANGED_TYPE
call GetTurnDuelistVariable
bit 7, a
- jr nz, .asm_3718
-.asm_3703
+ jr nz, .has_changed_color
+.regular_color
ld a, e
add DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
- call GetCardInDeckPosition
- call Func_2f32
- cp $10
- jr nz, .asm_3715
- ld a, $6
-.asm_3715
+ call GetCardIDFromDeckIndex
+ call GetCardType
+ cp TYPE_TRAINER
+ jr nz, .got_type
+ ld a, COLORLESS
+.got_type
pop de
pop hl
ret
-.asm_3718
+.has_changed_color
ld a, e
- call CheckIfUnderAnyCannotUseStatus2
- jr c, .asm_3703
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
+ jr c, .regular_color ; jump if can't use Shift
ld a, e
- add $d4
+ add DUELVARS_ARENA_CARD_CHANGED_TYPE
call GetTurnDuelistVariable
pop de
pop hl
@@ -7183,30 +8934,54 @@ Func_36f7: ; 36f7 (0:36f7)
ret
; 0x3729
- INCROM $3729, $3730
+; return in a the weakness of the turn holder's arena or benchx Pokemon given the PLAY_AREA_* value in a
+; if a == 0 and [DUELVARS_ARENA_CARD_CHANGED_WEAKNESS] != 0,
+; return [DUELVARS_ARENA_CARD_CHANGED_WEAKNESS] instead
+GetPlayAreaCardWeakness: ; 3729 (0:3729)
+ or a
+ jr z, GetArenaCardWeakness
+ add DUELVARS_ARENA_CARD
+ jr GetCardWeakness
-Func_3730: ; 3730 (0:3730)
- ld a, DUELVARS_ARENA_CARD_SUBSTATUS3
+; return in a the weakness of the turn holder's arena Pokemon
+; if [DUELVARS_ARENA_CARD_CHANGED_WEAKNESS] != 0, return it instead
+GetArenaCardWeakness: ; 3730 (0:3730)
+ ld a, DUELVARS_ARENA_CARD_CHANGED_WEAKNESS
call GetTurnDuelistVariable
or a
ret nz
ld a, DUELVARS_ARENA_CARD
+; fallthrough
+
+GetCardWeakness:
call GetTurnDuelistVariable
- call LoadDeckCardToBuffer2
+ call LoadCardDataToBuffer2_FromDeckIndex
ld a, [wLoadedCard2Weakness]
ret
; 0x3743
- INCROM $3743, $374a
+; return in a the resistance of the turn holder's arena or benchx Pokemon given the PLAY_AREA_* value in a
+; if a == 0 and [DUELVARS_ARENA_CARD_CHANGED_RESISTANCE] != 0,
+; return [DUELVARS_ARENA_CARD_CHANGED_RESISTANCE] instead
+GetPlayAreaCardResistance: ; 3743 (0:3743)
+ or a
+ jr z, GetArenaCardResistance
+ add DUELVARS_ARENA_CARD
+ jr GetCardResistance
-Func_374a: ; 374a (0:374a)
- ld a, DUELVARS_ARENA_CARD_SUBSTATUS4
+; return in a the resistance of the arena Pokemon
+; if [DUELVARS_ARENA_CARD_CHANGED_RESISTANCE] != 0, return it instead
+GetArenaCardResistance: ; 374a (0:374a)
+ ld a, DUELVARS_ARENA_CARD_CHANGED_RESISTANCE
call GetTurnDuelistVariable
or a
ret nz
ld a, DUELVARS_ARENA_CARD
+; fallthrough
+
+GetCardResistance:
call GetTurnDuelistVariable
- call LoadDeckCardToBuffer2
+ call LoadCardDataToBuffer2_FromDeckIndex
ld a, [wLoadedCard2Resistance]
ret
; 0x375d
@@ -7216,15 +8991,15 @@ Func_374a: ; 374a (0:374a)
HandleEnergyBurn: ; 375d (0:375d)
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
- call GetCardInDeckPosition
+ call GetCardIDFromDeckIndex
ld a, e
cp CHARIZARD
ret nz
xor a
- call CheckIfUnderAnyCannotUseStatus2
+ call CheckCannotUseDueToStatus_OnlyToxicGasIfANon0
ret c
ld hl, wAttachedEnergies
- ld c, COLORLESS - FIRE
+ ld c, NUM_COLORED_TYPES
xor a
.zero_next_energy
ld [hli], a
@@ -7259,12 +9034,12 @@ PlaySFX: ; 3796 (0:3796)
farcall _PlaySFX
ret
-Func_379b: ; 379b (0:379b)
- farcall Func_f401b
+PauseSong: ; 379b (0:379b)
+ farcall _PauseSong
ret
-Func_37a0: ; 37a0 (0:37a0)
- farcall Func_f401e
+ResumeSong: ; 37a0 (0:37a0)
+ farcall _ResumeSong
ret
; 0x37a5
@@ -7292,49 +9067,52 @@ Func_380e: ; 380e (0:380e)
call BankswitchHome
ret
-Func_383d: ; 383d (0:383d)
+; enable the play time counter and execute the game event at [wGameEvent].
+; then return to the overworld, or restart the game (only after Credits).
+ExecuteGameEvent: ; 383d (0:383d)
ld a, $1
ld [wPlayTimeCounterEnable], a
ldh a, [hBankROM]
push af
-.asm_3845
- call Func_3855
- jr nc, .asm_3850
+.loop
+ call _ExecuteGameEvent
+ jr nc, .restart
farcall LoadMap
- jr .asm_3845
-.asm_3850
+ jr .loop
+.restart
pop af
call BankswitchHome
ret
-Func_3855: ; 3855 (0:3855)
- ld a, [wd0b5]
- cp $7
- jr c, .asm_385e
- ld a, $6
-.asm_385e
- ld hl, PointerTable_3864
+; execute a game event at [wGameEvent] from GameEventPointerTable
+_ExecuteGameEvent: ; 3855 (0:3855)
+ ld a, [wGameEvent]
+ cp NUM_GAME_EVENTS
+ jr c, .got_game_event
+ ld a, GAME_EVENT_CHALLENGE_MACHINE
+.got_game_event
+ ld hl, GameEventPointerTable
jp JumpToFunctionInTable
-PointerTable_3864: ; 3864 (0:3864)
- dw Func_3874
- dw Func_38c0
- dw Func_38a3
- dw Func_3876
- dw Credits_3911
- dw Func_38fb
- dw Func_38db
- dw Func_3874
-
-Func_3874: ; 3874 (0:3874)
+GameEventPointerTable: ; 3864 (0:3864)
+ dw GameEvent_Overworld
+ dw GameEvent_Duel
+ dw GameEvent_BattleCenter
+ dw GameEvent_GiftCenter
+ dw GameEvent_Credits
+ dw GameEvent_ContinueDuel
+ dw GameEvent_ChallengeMachine
+ dw GameEvent_Overworld
+
+GameEvent_Overworld: ; 3874 (0:3874)
scf
ret
-Func_3876: ; 3876 (0:3876)
+GameEvent_GiftCenter: ; 3876 (0:3876)
ldh a, [hBankROM]
push af
- call Func_379b
- ld a, MUSIC_CARDPOP
+ call PauseSong
+ ld a, MUSIC_CARD_POP
call PlaySong
ld a, $3
ld [wd0c2], a
@@ -7345,13 +9123,13 @@ Func_3876: ; 3876 (0:3876)
ld a, [wd10e]
and $ef
ld [wd10e], a
- call Func_37a0
+ call ResumeSong
pop af
call BankswitchHome
scf
ret
-Func_38a3: ; 38a3 (0:38a3)
+GameEvent_BattleCenter: ; 38a3 (0:38a3)
ld a, $2
ld [wd0c2], a
xor a
@@ -7360,35 +9138,35 @@ Func_38a3: ; 38a3 (0:38a3)
ld [wd0c3], a
ld a, $2
ld [wDuelTheme], a
- ld a, MUSIC_CARDPOP
+ ld a, MUSIC_CARD_POP
call PlaySong
bank1call Func_758f
scf
ret
-Func_38c0: ; 38c0 (0:38c0)
+GameEvent_Duel: ; 38c0 (0:38c0)
ld a, $1
ld [wd0c2], a
xor a
ld [wd112], a
- call EnableExtRAM
+ call EnableSRAM
xor a
ld [$ba44], a
- call DisableExtRAM
+ call DisableSRAM
call Func_3a3b
bank1call StartDuel
scf
ret
-Func_38db: ; 38db (0:38db)
+GameEvent_ChallengeMachine: ; 38db (0:38db)
ld a, $6
ld [wd111], a
call Func_39fc
- call EnableExtRAM
+ call EnableSRAM
xor a
ld [$ba44], a
- call DisableExtRAM
-asm_38ed
+ call DisableSRAM
+.asm_38ed
farcall Func_131d3
ld a, $9
ld [wd111], a
@@ -7396,19 +9174,19 @@ asm_38ed
scf
ret
-Func_38fb: ; 38fb (0:38fb)
+GameEvent_ContinueDuel: ; 38fb (0:38fb)
xor a
ld [wd112], a
- bank1call Func_406f
- call EnableExtRAM
+ bank1call TryContinueDuel
+ call EnableSRAM
ld a, [$ba44]
- call DisableExtRAM
+ call DisableSRAM
cp $ff
- jr z, asm_38ed
+ jr z, GameEvent_ChallengeMachine.asm_38ed
scf
ret
-Credits_3911: ; 3911 (0:3911)
+GameEvent_Credits: ; 3911 (0:3911)
farcall Credits_1d6ad
or a
ret
@@ -7416,9 +9194,9 @@ Credits_3911: ; 3911 (0:3911)
Func_3917: ; 3917 (0:3917)
ld a, $22
farcall CheckIfEventFlagSet
- call EnableExtRAM
- ld [$a00a], a
- call DisableExtRAM
+ call EnableSRAM
+ ld [sa00a], a
+ call DisableSRAM
ret
GetFloorObjectFromPos: ; 3927 (0:3927)
@@ -7429,9 +9207,33 @@ GetFloorObjectFromPos: ; 3927 (0:3927)
ret
; 0x392e
- INCROM $392e, $3946
+SetFloorObjectFromPos: ; 392e (0:392e)
+ push hl
+ push af
+ call FindFloorTileFromPos
+ pop af
+ ld [hl], a
+ pop hl
+ ret
+; 0x3937
-; puts a floor tile in hc given coords in bc (x,y. measured in tiles)
+UpdateFloorObjectFromPos: ; 3937 (0:3937)
+ push hl
+ push bc
+ push de
+ cpl
+ ld e, a
+ call FindFloorTileFromPos
+ ld a, [hl]
+ and e
+ ld [hl], a
+ pop de
+ pop bc
+ pop hl
+ ret
+; 0x3946
+
+; puts a floor tile in hl given coords in bc (x,y. measured in tiles)
FindFloorTileFromPos: ; 3946 (0:3946)
push bc
srl b
@@ -7458,17 +9260,30 @@ Func_395a: ; 395a (0:395a)
ret
Unknown_396b: ; 396b (0:396b)
- INCROM $396b, $3973
+ db $00, -$01, $01, $00, $00, $01, -$01, $00
; Movement offsets for scripted movements
ScriptedMovementOffsetTable: ; 3973 (0:3973)
- db $00, -$02 ; move 2 tiles up
- db $02, $00 ; move 2 tiles right
- db $00, $02 ; move 2 tiles down
- db -$02, $00 ; move 2 tiles left
+ db 0, -2 ; move 2 tiles up
+ db 2, 0 ; move 2 tiles right
+ db 0, 2 ; move 2 tiles down
+ db -2, 0 ; move 2 tiles left
Unknown_397b: ; 397b (0:397b)
- INCROM $397b, $3997
+ dw $0323
+ dw $0323
+ dw $0324
+ dw $0325
+ dw $0326
+ dw $0327
+ dw $0328
+ dw $0329
+ dw $032a
+ dw $032b
+ dw $032c
+ dw $032d
+ dw $032e
+ dw $032f
Func_3997: ; 3997 (0:3997)
ldh a, [hBankROM]
@@ -7489,7 +9304,7 @@ Func_39ad: ; 39ad (0:39ad)
push bc
cp $8
jr c, .asm_39b4
- rst $38
+ debug_ret
xor a
.asm_39b4
add a
@@ -7500,7 +9315,7 @@ Func_39ad: ; 39ad (0:39ad)
add l
ld l, a
ld h, $0
- ld bc, $d34a
+ ld bc, wd34a
add hl, bc
pop bc
ret
@@ -7514,7 +9329,7 @@ Func_39c3: ; 39c3 (0:39c3)
ld b, a
ld c, $8
ld de, $000c
- ld hl, $d34a
+ ld hl, wd34a
ld a, [wd3ab]
.asm_39d6
cp [hl]
@@ -7536,7 +9351,20 @@ Func_39c3: ; 39c3 (0:39c3)
ret
; 0x39ea
- INCROM $39ea, $39fc
+Func_39ea: ; 39ea (0:39ea)
+ push bc
+ ldh a, [hBankROM]
+ push af
+ ld a, $03
+ call BankswitchHome
+ ld a, [bc]
+ ld c, a
+ pop af
+ call BankswitchHome
+ ld a, c
+ pop bc
+ ret
+; 0x39fc
Func_39fc: ; 39fc (0:39fc)
push hl
@@ -7549,7 +9377,7 @@ Func_39fc: ; 39fc (0:39fc)
pop af
jr z, .asm_3a11
ld a, c
- ld hl, $d112
+ ld hl, wd112
cp [hl]
jr z, .asm_3a1c
.asm_3a11
@@ -7589,7 +9417,29 @@ Func_3a40: ; 3a40 (0:3a40)
ret
; 0x3a45
- INCROM $3a45, $3a5e
+Func_3a45: ; 3a45 (0:3a45)
+ farcall Func_11343
+ ret
+; 0x3a4a
+
+Func_3a4a: ; 3a4a (0:3a4a)
+ farcall Func_115a3
+ ret
+; 0x3a4f
+
+Func_3a4f: ; 3a4f (0:3a4f)
+ push af
+ push bc
+ push de
+ push hl
+ ld c, $00
+ farcall Func_1157c
+ pop hl
+ pop de
+ pop bc
+ pop af
+ ret
+; 0x3a5e
Func_3a5e: ; 3a5e (0:3a5e)
ldh a, [hBankROM]
@@ -7683,7 +9533,10 @@ Func_3abd: ; 3abd (0:3abd)
ret
; 0x3ae8
- INCROM $3ae8, $3aed
+Func_3ae8: ; 3ae8 (0:3ae8)
+ farcall Func_11f4e
+ ret
+; 0x3aed
; finds an OWScript from the first byte and puts the next two bytes (usually arguments?) into cb
RunOverworldScript: ; 3aed (0:3aed)
@@ -7714,7 +9567,16 @@ RunOverworldScript: ; 3aed (0:3aed)
jp hl
; 0x3b11
- INCROM $3b11, $3b21
+Func_3b11: ; 3b11 (0:3b11)
+ ldh a, [hBankROM]
+ push af
+ ld a, $04
+ call BankswitchHome
+ call $66d1
+ pop af
+ call BankswitchHome
+ ret
+; 0x3b21
Func_3b21: ; 3b21 (0:3b21)
ldh a, [hBankROM]
@@ -7737,7 +9599,7 @@ Func_3b31: ; 3b31 (0:3b31)
ld [wDoFrameFunction], a
ld [wcad4], a
.asm_3b45
- call Func_099c
+ call InitSpritePositions
ld a, $1
ld [wVBlankOAMCopyToggle], a
pop af
@@ -7748,9 +9610,9 @@ Func_3b52: ; 3b52 (0:3b52)
push hl
push bc
ld a, [wd42a]
- ld hl, $d4c0
+ ld hl, wd4c0
and [hl]
- ld hl, $d423
+ ld hl, wd423
ld c, $7
.asm_3b60
and [hl]
@@ -7775,7 +9637,7 @@ Func_3b6a: ; 3b6a (0:3b6a)
ld a, [wd422]
cp $61
jr nc, .asm_3b90
- ld hl, $d4ad
+ ld hl, wd4ad
ld a, [wd4ac]
cp [hl]
jr nz, .asm_3b90
@@ -7814,7 +9676,16 @@ ResetDoFrameFunction: ; 3bdb (0:3bdb)
ret
; 0x3be4
- INCROM $3be4, $3bf5
+Func_3be4: ; 3be4 (0:3be4)
+ ldh a, [hBankROM]
+ push af
+ ld a, [wd4c6]
+ call BankswitchHome
+ call Func_08de
+ pop af
+ call BankswitchHome
+ ret
+; 0x3bf5
Func_3bf5: ; 3bf5 (0:3bf5)
ldh a, [hBankROM]
@@ -7839,7 +9710,10 @@ Func_3c45: ; 3c45 (0:3c45)
jp hl
; 0x3c46
- INCROM $3c46, $3c48
+Func_3c46: ; 3c46 (0:3c46)
+ push bc
+ ret
+; 0x3c48
DoFrameIfLCDEnabled: ; 3c48 (0:3c48)
push af
@@ -7864,7 +9738,7 @@ DivideBCbyDE: ; 3c5a (0:3c5a)
rl b
ld a, $10
.asm_3c63
- ldh [$ffb6], a
+ ldh [hffb6], a
rl l
rl h
push hl
@@ -7884,7 +9758,7 @@ DivideBCbyDE: ; 3c5a (0:3c5a)
.asm_3c79
rl c
rl b
- ldh a, [$ffb6]
+ ldh a, [hffb6]
dec a
jr nz, .asm_3c63
ret
@@ -7894,7 +9768,15 @@ Func_3c83: ; 3c83 (0:3c83)
ret
; 0x3c87
- INCROM $3c87, $3c96
+Func_3c87: ; 3c87 (0:3c87)
+ push af
+ call PauseSong
+ pop af
+ call PlaySong
+ call Func_3c96
+ call ResumeSong
+ ret
+; 0x3c96
Func_3c96: ; 3c96 (0:3c96)
call DoFrameIfLCDEnabled
@@ -7979,29 +9861,30 @@ Func_3d72: ; 3d72 (0:3d72)
Func_3db7: ; 3db7 (0:3db7)
push bc
- ld c, $0
- call ModifyUnknownOAMBufferProperty
+ ld c, SPRITE_ANIM_FIELD_00
+ call GetSpriteAnimBufferProperty
pop bc
ret
-; this needs to be determined after we learn more about the buffer.
-ModifyUnknownOAMBufferProperty: ; 3dbf (0:3dbf)
- ld a, [wd4cf]
- cp $10
- jr c, .asm_3dc9
- rst $38
- ld a, $f
-.asm_3dc9
+; return hl pointing to the property (byte) c of a sprite in wSpriteAnimBuffer.
+; the sprite is identified by its index in wWhichSprite.
+GetSpriteAnimBufferProperty: ; 3dbf (0:3dbf)
+ ld a, [wWhichSprite]
+ cp SPRITE_ANIM_BUFFER_CAPACITY
+ jr c, .got_sprite
+ debug_ret
+ ld a, SPRITE_ANIM_BUFFER_CAPACITY - 1 ; default to last sprite
+.got_sprite
push bc
- swap a
+ swap a ; a *= SPRITE_ANIM_LENGTH
push af
and $f
ld b, a
pop af
and $f0
- or c
+ or c ; add the property offset
ld c, a
- ld hl, wOAMBuffer
+ ld hl, wSpriteAnimBuffer
add hl, bc
pop bc
ret
@@ -8019,7 +9902,7 @@ Func_3df3: ; 3df3 (0:3df3)
ld hl, sp+$5
ld a, [hl]
call Func_12c7f
- call Func_0404
+ call SetFlushAllPalettes
pop hl
pop af
call BankswitchHome