Refactor Challenge Machine functions

This commit is contained in:
earthoul
2026-01-14 01:39:53 +09:00
parent 21e44ad440
commit 904528ef2e
15 changed files with 774 additions and 637 deletions

View File

@@ -29,6 +29,15 @@ DEF TURN_PLAYER_TIED EQU $3
DEF DUEL_WIN EQU $0
DEF DUEL_LOSS EQU $1
; wChallengeMachineDuelResult constants
DEF CHALLENGE_MACHINE_DUEL_WIN EQU TURN_PLAYER_WON ; 1
DEF CHALLENGE_MACHINE_DUEL_LOSS_OR_QUIT EQU TURN_PLAYER_LOST ; 2
; challenge machines
DEF NUM_CHALLENGE_MACHINE_ROUNDS_PER_SET EQU 5
DEF NUM_TCG_CHALLENGE_MACHINE_OPPONENT_POOL EQU 49
DEF NUM_GR_CHALLENGE_MACHINE_OPPONENT_POOL EQU 37
; wPlayerDuelVariables or wOpponentDuelVariables constants
DEF DUELVARS_CARD_LOCATIONS EQUS "LOW(wPlayerCardLocations)" ; 00
DEF DUELVARS_PRIZE_CARDS EQUS "LOW(wPlayerPrizeCards)" ; 3c

View File

@@ -1,64 +1,64 @@
const_def
const VAR_00 ; $00
const VAR_01 ; $01
const VAR_02 ; $02
const VAR_03 ; $03
const VAR_TIMES_MET_RONALD ; $04
const VAR_05 ; $05
const VAR_06 ; $06
const VAR_07 ; $07
const VAR_08 ; $08
const VAR_09 ; $09
const VAR_0A ; $0a
const VAR_0B ; $0b
const VAR_0C ; $0c
const VAR_0D ; $0d
const VAR_0E ; $0e
const VAR_0F ; $0f
const VAR_GRANDMASTERCUP_PRIZE_INDEX_0 ; $10
const VAR_GRANDMASTERCUP_PRIZE_INDEX_1 ; $11
const VAR_GRANDMASTERCUP_PRIZE_INDEX_2 ; $12
const VAR_GRANDMASTERCUP_PRIZE_INDEX_3 ; $13
const VAR_GRANDMASTERCUP_OPPONENT_DECK_0 ; $14
const VAR_GRANDMASTERCUP_OPPONENT_DECK_1 ; $15
const VAR_GRANDMASTERCUP_OPPONENT_DECK_2 ; $16
const VAR_GRANDMASTERCUP_OPPONENT_DECK_3 ; $17
const VAR_GRANDMASTERCUP_OPPONENT_DECK_4 ; $18
const VAR_GRANDMASTERCUP_OPPONENT_DECK_5 ; $19
const VAR_GRANDMASTERCUP_OPPONENT_DECK_6 ; $1a
const VAR_1B ; $1b
const VAR_1C ; $1c
const VAR_1D ; $1d
const VAR_1E ; $1e
const VAR_1F ; $1f
const VAR_20 ; $20
const VAR_21 ; $21
const VAR_IMAKUNI_BLACK_WIN_COUNT ; $22
const VAR_23 ; $23
const VAR_24 ; $24
const VAR_25 ; $25
const VAR_26 ; $26
const VAR_27 ; $27
const VAR_TCG_CHALLENGE_CUP_STATE ; $28
const VAR_TCG_CHALLENGE_CUP_PRIZE_INDEX ; $29
const VAR_TIMES_WON_TCG_CHALLENGE_CUP ; $2a
const VAR_TCG_CHALLENGE_CUP_RESULT ; $2b
const VAR_CHALLENGECUP_CURRENT_ROUND ; $2c
const VAR_CHALLENGECUP_ROUND1_OPPONENT_DECK_ID ; $2d
const VAR_CHALLENGECUP_ROUND2_OPPONENT_DECK_ID ; $2e
const VAR_CHALLENGECUP_ROUND3_OPPONENT_DECK_ID ; $2f
const VAR_GR_CHALLENGE_CUP_STATE ; $30
const VAR_GR_CHALLENGE_CUP_PRIZE_INDEX ; $31
const VAR_TIMES_WON_GR_CHALLENGE_CUP ; $32
const VAR_GR_CHALLENGE_CUP_RESULT ; $33
const VAR_34 ; $34
const VAR_35 ; $35
const VAR_36 ; $36
const VAR_37 ; $37
const VAR_38 ; $38
const VAR_39 ; $39
const VAR_CARD_DUNGEON_PROGRESS ; $3a
const VAR_3B ; $3b: AARON_STEP_*; Fighting Fort
const VAR_NPC_DECK_ID ; $3c
const VAR_DUEL_START_THEME ; $3d
const VAR_3E ; $3e
const VAR_00 ; $00
const VAR_01 ; $01
const VAR_02 ; $02
const VAR_03 ; $03
const VAR_TIMES_MET_RONALD ; $04
const VAR_05 ; $05
const VAR_06 ; $06
const VAR_07 ; $07
const VAR_08 ; $08
const VAR_09 ; $09
const VAR_0A ; $0a
const VAR_0B ; $0b
const VAR_0C ; $0c
const VAR_0D ; $0d
const VAR_0E ; $0e
const VAR_0F ; $0f
const VAR_GRANDMASTERCUP_PRIZE_INDEX_0 ; $10
const VAR_GRANDMASTERCUP_PRIZE_INDEX_1 ; $11
const VAR_GRANDMASTERCUP_PRIZE_INDEX_2 ; $12
const VAR_GRANDMASTERCUP_PRIZE_INDEX_3 ; $13
const VAR_GRANDMASTERCUP_OPPONENT_DECK_0 ; $14
const VAR_GRANDMASTERCUP_OPPONENT_DECK_1 ; $15
const VAR_GRANDMASTERCUP_OPPONENT_DECK_2 ; $16
const VAR_GRANDMASTERCUP_OPPONENT_DECK_3 ; $17
const VAR_GRANDMASTERCUP_OPPONENT_DECK_4 ; $18
const VAR_GRANDMASTERCUP_OPPONENT_DECK_5 ; $19
const VAR_GRANDMASTERCUP_OPPONENT_DECK_6 ; $1a
const VAR_1B ; $1b
const VAR_1C ; $1c
const VAR_1D ; $1d
const VAR_1E ; $1e
const VAR_1F ; $1f
const VAR_20 ; $20
const VAR_21 ; $21
const VAR_IMAKUNI_BLACK_WIN_COUNT ; $22
const VAR_23 ; $23
const VAR_24 ; $24
const VAR_25 ; $25
const VAR_26 ; $26
const VAR_27 ; $27
const VAR_TCG_CHALLENGE_CUP_STATE ; $28
const VAR_TCG_CHALLENGE_CUP_PRIZE_INDEX ; $29
const VAR_TIMES_WON_TCG_CHALLENGE_CUP ; $2a
const VAR_TCG_CHALLENGE_CUP_RESULT ; $2b
const VAR_CHALLENGECUP_CURRENT_ROUND ; $2c
const VAR_CHALLENGECUP_ROUND1_OPPONENT_DECK_ID ; $2d
const VAR_CHALLENGECUP_ROUND2_OPPONENT_DECK_ID ; $2e
const VAR_CHALLENGECUP_ROUND3_OPPONENT_DECK_ID ; $2f
const VAR_GR_CHALLENGE_CUP_STATE ; $30
const VAR_GR_CHALLENGE_CUP_PRIZE_INDEX ; $31
const VAR_TIMES_WON_GR_CHALLENGE_CUP ; $32
const VAR_GR_CHALLENGE_CUP_RESULT ; $33
const VAR_CHALLENGEMACHINE_CURRENT_ROUND ; $34
const VAR_CHALLENGEMACHINE_ROUND1_OPPONENT_DECK_ID ; $35
const VAR_CHALLENGEMACHINE_ROUND2_OPPONENT_DECK_ID ; $36
const VAR_CHALLENGEMACHINE_ROUND3_OPPONENT_DECK_ID ; $37
const VAR_CHALLENGEMACHINE_ROUND4_OPPONENT_DECK_ID ; $38
const VAR_CHALLENGEMACHINE_ROUND5_OPPONENT_DECK_ID ; $39
const VAR_CARD_DUNGEON_PROGRESS ; $3a
const VAR_3B ; $3b: AARON_STEP_* / Fighting Fort
const VAR_NPC_DECK_ID ; $3c
const VAR_DUEL_START_THEME ; $3d
const VAR_3E ; $3e

View File

@@ -0,0 +1,91 @@
; deck id and bitmask
TCGChallengeMachineOpponents::
db OVERFLOW_DECK_ID, %00111
db TRIPLE_ZAPDOS_DECK_ID, %00111
db I_LOVE_PIKACHU_DECK_ID, %00111
db TEN_THOUSAND_VOLTS_DECK_ID, %00111
db PSYCHOKINESIS_DECK_ID, %00111
db PHANTOM_DECK_ID, %00111
db PUPPET_MASTER_DECK_ID, %00111
db ROLLING_STONE_DECK_ID, %00111
db GREAT_EARTHQUAKE_DECK_ID, %00111
db AWESOME_FOSSIL_DECK_ID, %00111
db YOU_CAN_DO_IT_MACHOP_DECK_ID, %00111
db NEW_MACHOKE_DECK_ID, %00111
db SKILLED_WARRIOR_DECK_ID, %00111
db I_LOVE_TO_FIGHT_DECK_ID, %00111
db REMAINING_GREEN_DECK_ID, %00111
db POISON_CURSE_DECK_ID, %00111
db GLITTERING_SCALES_DECK_ID, %00111
db STEADY_INCREASE_DECK_ID, %00111
db NATURAL_SCIENCE_DECK_ID, %00111
db POISONOUS_SWAMP_DECK_ID, %00111
db GATHERING_NIDORAN_DECK_ID, %00111
db CONSERVING_WATER_DECK_ID, %00111
db ENERGY_REMOVAL_DECK_ID, %00111
db SPLASHING_ABOUT_DECK_ID, %00111
db BEACH_DECK_ID, %00111
db FLAME_FESTIVAL_DECK_ID, %00111
db IMMORTAL_FLAME_DECK_ID, %00111
db ELECTRIC_CURRENT_SHOCK_DECK_ID, %00111
db ELECTRIC_SELFDESTRUCT_DECK_ID, %01000
db PSYCHIC_ELITE_DECK_ID, %01000
db EVEN3_YEARS_ON_A_ROCK_DECK_ID, %01000
db RAGING_BILLOW_OF_FISTS_DECK_ID, %01000
db MAX_ENERGY_DECK_ID, %01000
db DARK_SCIENCE_DECK_ID, %01000
db RAIN_DANCE_CONFUSION_DECK_ID, %01000
db GO_ARCANINE_DECK_ID, %01000
db GREAT_ROCKET1_DECK_ID, %01000
db GREAT_ROCKET2_DECK_ID, %01000
db GREAT_ROCKET3_DECK_ID, %01000
db GREAT_ROCKET4_DECK_ID, %01000
db BRICK_WALK_DECK_ID, %10000
db BENCH_TRAP_DECK_ID, %10000
db GRAND_FIRE_DECK_ID, %10000
db LEGENDARY_FOSSIL_DECK_ID, %10000
db WATER_LEGEND_DECK_ID, %10000
db GREAT_DRAGON_DECK_ID, %10000
db WEIRD_DECK_ID, %10000
db RONALDS_UNCOOL_DECK_ID, %10000
db RONALDS_GRX_DECK_ID, %10000
GRChallengeMachineOpponents::
db BUG_COLLECTING_DECK_ID, %00111
db DEMONIC_FOREST_DECK_ID, %00111
db STICKY_POISON_GAS_DECK_ID, %00111
db CHAIN_LIGHTNING_BY_PIKACHU_DECK_ID, %00111
db THIS_IS_THE_POWER_OF_ELECTRICITY_DECK_ID, %00111
db COMPLETE_COMBUSTION_DECK_ID, %00111
db FIREBALL_DECK_ID, %00111
db EEVEE_SHOWDOWN_DECK_ID, %00111
db WHIRLPOOL_SHOWER_DECK_ID, %00111
db PARALYZED_PARALYZED_DECK_ID, %00111
db BENCH_CALL_DECK_ID, %00111
db ROCK_BLAST_DECK_ID, %00111
db FULL_STRENGTH_DECK_ID, %00111
db DIRECT_HIT_DECK_ID, %00111
db SUPERDESTRUCTIVE_POWER_DECK_ID, %00111
db BAD_DREAM_DECK_ID, %00111
db POKEMON_POWER_DECK_ID, %00111
db MAD_PETALS_DECK_ID, %01000
db QUICK_ATTACK_DECK_ID, %01000
db GAZE_UPON_THE_POWER_OF_FIRE_DECK_ID, %01000
db WATER_STREAM_DECK_ID, %01000
db RUNNING_WILD_DECK_ID, %01000
db SPIRITED_AWAY_DECK_ID, %01000
db SNORLAX_GUARD_DECK_ID, %01000
db EYE_OF_THE_STORM_DECK_ID, %01000
db SUDDEN_GROWTH_DECK_ID, %01000
db BAD_GUYS_DECK_ID, %10000
db POISON_MIST_DECK_ID, %10000
db ULTRA_REMOVAL_DECK_ID, %10000
db PSYCHIC_BATTLE_DECK_ID, %10000
db STOP_LIFE_DECK_ID, %10000
db SCORCHER_DECK_ID, %10000
db TSUNAMI_STARTER_DECK_ID, %10000
db SMASH_TO_MINCEMEAT_DECK_ID, %10000
db STRANGE_DECK_ID, %10000
db RONALDS_POWER_DECK_ID, %10000
db RONALDS_PSYCHIC_DECK_ID, %10000

View File

@@ -68,9 +68,9 @@ WRAMToSRAMMapper_GeneralSave::
; 64 bytes
WRAMToSRAMMapper_ChallengeMachineSave::
wram_sram_map wddf9, 20, $00, $ff
wram_sram_map wde0d, 4, $00, $ff
wram_sram_map wde11, 4, $00, $ff
wram_sram_map wde15, 4, $00, $ff
wram_sram_map wde19, 32, $00, $ff
wram_sram_map wChallengeMachineOpponentTitlesAndNames, 4 * NUM_CHALLENGE_MACHINE_ROUNDS_PER_SET, $00, $ff
wram_sram_map wChallengeMachineSetsWonRecords, 2 * 2, $00, $ff
wram_sram_map wChallengeMachineCurWinStreaks, 2 * 2, $00, $ff
wram_sram_map wChallengeMachineWinStreakRecords, 2 * 2, $00, $ff
wram_sram_map wChallengeMachinePlayerNames, NAME_BUFFER_LENGTH * 2, $00, $ff
dw NULL

View File

@@ -34,7 +34,7 @@ StartMenu_NewGame:
farcall InitSaveData
call ClearSaveData
call Func_c24d
call Func_eb97
call ClearChallengeMachineRecords
xor a ; FALSE
farcall ReadOrInitSaveData
ld a, GAME_EVENT_NEWGAME_PROLOGUE
@@ -350,9 +350,9 @@ Func_c24d:
ld [wSentMailBitfield + 1], a
ld [wSentMailBitfield + 2], a
ld [wSentMailBitfield + 3], a
call Func_ebc6
call ValidateChallengeMachineSaveData
jr nc, .asm_c299
call Func_eb39
call InitChallengeMachine
.asm_c299
call Func_c2a7
ret
@@ -1108,9 +1108,8 @@ GRIslandLocationNamePointers:
tx MapGRCastleText ; OWMAP_GR_CASTLE
INCLUDE "data/challenge_cup_prizes.asm"
; 0xd1ed
SECTION "Bank 3@5299", ROMX[$5299], BANK[$3]
INCLUDE "data/challenge_machine_opponents.asm"
; main ow handler for GAME_EVENT_OVERWORLD_UPDATE
; e.g. map loading, player movement/interactions, game event transitions
@@ -2196,12 +2195,12 @@ GeneralVarMasks:
db $21, %11111000 ; VAR_GR_CHALLENGE_CUP_PRIZE_INDEX
db $22, %00001111 ; VAR_TIMES_WON_GR_CHALLENGE_CUP
db $22, %00110000 ; VAR_GR_CHALLENGE_CUP_RESULT
db $23, %00000111 ; VAR_34
db $24, %11111111 ; VAR_35
db $25, %11111111 ; VAR_36
db $26, %11111111 ; VAR_37
db $27, %11111111 ; VAR_38
db $28, %11111111 ; VAR_39
db $23, %00000111 ; VAR_CHALLENGEMACHINE_CURRENT_ROUND
db $24, %11111111 ; VAR_CHALLENGEMACHINE_ROUND1_OPPONENT_DECK_ID
db $25, %11111111 ; VAR_CHALLENGEMACHINE_ROUND2_OPPONENT_DECK_ID
db $26, %11111111 ; VAR_CHALLENGEMACHINE_ROUND3_OPPONENT_DECK_ID
db $27, %11111111 ; VAR_CHALLENGEMACHINE_ROUND4_OPPONENT_DECK_ID
db $28, %11111111 ; VAR_CHALLENGEMACHINE_ROUND5_OPPONENT_DECK_ID
db $29, %00000111 ; VAR_CARD_DUNGEON_PROGRESS
db $2a, %11111111 ; VAR_3B
db $2b, %11111111 ; VAR_NPC_DECK_ID
@@ -4489,62 +4488,67 @@ ScriptCommand_WaitInput:
INCLUDE "engine/save.asm"
INCLUDE "data/save.asm"
Func_ef40:
; a = TCG_ISLAND or GR_ISLAND
; set five opponents for the set
SetChallengeMachineOpponents:
or a
jr nz, .asm_ef54
ld a, $31
jr nz, .gr_machine
ld a, NUM_TCG_CHALLENGE_MACHINE_OPPONENT_POOL
ld [wNumRandomDuelists], a
ld a, LOW($51ed)
ld a, LOW(TCGChallengeMachineOpponents)
ld [wFilteredListPtr], a
ld a, HIGH($51ed)
ld a, HIGH(TCGChallengeMachineOpponents)
ld [wFilteredListPtr + 1], a
jr .asm_ef63
.asm_ef54
ld a, $25
jr .init
.gr_machine
ld a, NUM_GR_CHALLENGE_MACHINE_OPPONENT_POOL
ld [wNumRandomDuelists], a
ld a, LOW($524f)
ld a, LOW(GRChallengeMachineOpponents)
ld [wFilteredListPtr], a
ld a, HIGH($524f)
ld a, HIGH(GRChallengeMachineOpponents)
ld [wFilteredListPtr + 1], a
.asm_ef63
ld e, $05
ld d, VAR_35
.init
ld e, NUM_CHALLENGE_MACHINE_ROUNDS_PER_SET
ld d, VAR_CHALLENGEMACHINE_ROUND1_OPPONENT_DECK_ID
ld c, $ff
.asm_ef69
.loop_init
ld a, d
call SetVarValue
inc d
dec e
jr nz, .asm_ef69
ld c, $00
.asm_ef73
ld b, $01
jr nz, .loop_init
; set
; b = 1 << c for c = round number [0, 4]
; set opponents randomly with the bitmask b
ld c, 0
.loop_set_opponents
ld b, 1
ld a, c
or a
.asm_ef77
jr z, .asm_ef7e
.loop_shift
jr z, .loop_pick
sla b
dec a
jr .asm_ef77
.asm_ef7e
call Func_ef97
call Func_efb3
jr c, .asm_ef7e
jr .loop_shift
.loop_pick
call .PickOpponent
call .CheckDupe
jr c, .loop_pick
push bc
ld d, a
ld a, VAR_35
ld a, VAR_CHALLENGEMACHINE_ROUND1_OPPONENT_DECK_ID
add c
ld c, d
call SetVarValue
pop bc
inc c
ld a, $05
ld a, NUM_CHALLENGE_MACHINE_ROUNDS_PER_SET
cp c
jr nz, .asm_ef73
jr nz, .loop_set_opponents
ret
Func_ef97:
.loop
; for b = bitmask, choose a random opponent and return their deck id in a
.PickOpponent:
ld a, [wFilteredListPtr]
ld l, a
ld a, [wFilteredListPtr + 1]
@@ -4556,38 +4560,39 @@ Func_ef97:
inc hl
ld a, [hld]
and b
jr z, .loop
jr z, .PickOpponent
ld a, [hl]
ret
Func_efb3:
; set carry if the opponent is already picked
.CheckDupe:
ld d, a
call GetNPCByDeck
ld l, a
ld e, VAR_35
.asm_efba
ld e, VAR_CHALLENGEMACHINE_ROUND1_OPPONENT_DECK_ID
.loop_check
ld a, e
call GetVarValue
cp $ff
jr z, .asm_efcc
jr z, .done
call GetNPCByDeck
inc e
cp l
jr nz, .asm_efba
jr nz, .loop_check
ld a, d
scf
ret
.asm_efcc
.done
ld a, d
scf
ccf
ret
Func_efd0:
ld c, $05
ld a, VAR_35
ld hl, wddf9
.asm_efd7
LoadChallengeMachineOpponentTitlesAndNames:
ld c, NUM_CHALLENGE_MACHINE_ROUNDS_PER_SET
ld a, VAR_CHALLENGEMACHINE_ROUND1_OPPONENT_DECK_ID
ld hl, wChallengeMachineOpponentTitlesAndNames
.loop_load
push af
call GetVarValue
call GetNPCByDeck
@@ -4607,16 +4612,16 @@ Func_efd0:
pop af
inc a
dec c
jr nz, .asm_efd7
jr nz, .loop_load
ret
Func_eff7:
call Func_ec38
ld a, VAR_34
SetChallengeMachineDuelParams:
call SaveChallengeMachine
ld a, VAR_CHALLENGEMACHINE_CURRENT_ROUND
call GetVarValue
dec a
ld c, a
ld a, VAR_35
ld a, VAR_CHALLENGEMACHINE_ROUND1_OPPONENT_DECK_ID
add c
call GetVarValue
ld [wNPCDuelDeckID], a

View File

@@ -5479,7 +5479,7 @@ PlaySlotsPrompt:
call PauseSong_SaveState
push af
ld a, MUSIC_GAME_CENTER_POWER_ON
call Func_3d09
call CallPlaySong
pop af
call WaitForSongToFinish
call ResumeSong_ClearTemp
@@ -6433,7 +6433,7 @@ Func_131bd:
call PauseSong_SaveState
push af
ld a, MUSIC_GAME_CENTER_POWER_ON
call Func_3d09
call CallPlaySong
pop af
call WaitForSongToFinish
call ResumeSong_ClearTemp
@@ -7053,365 +7053,7 @@ ENDR
pop de
ret
Func_135ec:
call Func_102a4
call Func_135f6
call Func_102c4
ret
Func_135f6:
push bc
push de
push hl
ld [wddf6], a
ld a, c
ld [wddf8], a
ld a, b
ld [wddf7], a
and a
jr nz, .asm_1360e
call Func_13617
ld a, $00
jr c, .asm_13613
.asm_1360e
call Func_136e4
ld a, $01
.asm_13613
pop hl
pop de
pop bc
ret
Func_13617:
call ClearSpriteAnimsAndSetInitialGraphicsConfiguration
lb de, $40, $ff
call SetupText
call Func_1362d
call SetFrameFuncAndFadeFromWhite
call Func_136db
call FadeToWhiteAndUnsetFrameFunc
ret
Func_1362d:
lb de, 0, 0
lb bc, 20, 13
call DrawRegularTextBoxVRAM0
lb de, 0, 12
lb bc, 20, 6
call DrawRegularTextBoxVRAM0
ld a, [wddf6]
add a
ld c, a
ld b, $00
ld hl, $76b0
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
lb de, 1, 0
call Func_2c4b
ld hl, $7697
call PlaceTextItemsVRAM0
ldtx hl, ChallengeMachineScoreTitleText
lb de, 1, 2
call PrintTextNoDelay_InitVRAM0
ld hl, wde0d
lb de, 14, 4
call .PrintScore
ld hl, wde11
lb de, 14, 6
call .PrintScore
ld hl, wde15
lb de, 14, 10
call .PrintScore
call Func_136b4
ret
.PrintScore:
push hl
ld a, [wddf6]
add a
ld c, a
ld b, $00
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, 3
ld b, TRUE
farcall PrintNumber
pop hl
ret
; 0x13697
SECTION "Bank 4@76b4", ROMX[$76b4], BANK[$4]
Func_136b4:
ld de, wde39
call Func_13d1f
ld a, [wddf6]
add a
add a
add a
add a
ld c, a
ld b, $00
ld hl, wde19
add hl, bc
call SavePlayerName
ldtx hl, TxRam1Text
lb de, 2, 10
call PrintTextNoDelay_InitVRAM0
ld hl, wde39
call SavePlayerName
ret
Func_136db:
ldtx hl, ChallengeMachineStartPromptText
ld a, $01
call DrawWideTextBox_PrintTextWithYesOrNoMenu
ret
Func_136e4:
call ClearSpriteAnimsAndSetInitialGraphicsConfiguration
lb de, $40, $ff
call SetupText
call Func_1371f
call SetFrameFuncAndFadeFromWhite
ld a, [wddf8]
and a
jr z, .asm_1370b
call Func_137fa
ld a, [wddf8]
cp $02
jr z, .asm_13718
ld a, [wddf7]
cp $05
scf
jr z, .asm_13718
.asm_1370b
call Func_13792
call Func_137df
jr nc, .asm_1371b
ld a, $02
ld [wddf8], a
.asm_13718
call Func_1382e
.asm_1371b
call FadeToWhiteAndUnsetFrameFunc
ret
Func_1371f:
lb de, 0, 0
lb bc, 20, 13
call DrawRegularTextBoxVRAM0
lb de, 0, 12
lb bc, 20, 6
call DrawRegularTextBoxVRAM0
ld a, [wddf6]
add a
ld c, a
ld b, $00
ld hl, $7749
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
lb de, 1, 0
call Func_2c4b
call Func_1374d
ret
; 0x13749
SECTION "Bank 4@774d", ROMX[$774d], BANK[$4]
Func_1374d:
ld hl, wddf9
ld c, $05
ld e, $02
.asm_13754
call Func_13763
call Func_13778
call Func_13785
inc e
inc e
dec c
jr nz, .asm_13754
ret
Func_13763:
push hl
ld a, $06
sub c
ld [wTxRam3], a
xor a
ld [wTxRam3 + 1], a
ldtx hl, TxRam3Text
ld d, $02
call PrintTextNoDelay_InitVRAM0
pop hl
ret
Func_13778:
push hl
ld a, [hli]
ld h, [hl]
ld l, a
ld d, $04
call PrintTextNoDelay_InitVRAM0
pop hl
inc hl
inc hl
ret
Func_13785:
push hl
ld a, [hli]
ld h, [hl]
ld l, a
ld d, $0e
call PrintTextNoDelay_InitVRAM0
pop hl
inc hl
inc hl
ret
Func_13792:
ld a, [wddf7]
and a
jr nz, .asm_1379e
ldtx hl, ChallengeMachineOpponentListDialogText
call PrintScrollableText_NoTextBoxLabelVRAM0
.asm_1379e
ld a, [wddf6]
add a
ld c, a
ld b, $00
ld hl, wde11
add hl, bc
ld c, [hl]
inc hl
ld b, [hl]
ld de, $1
call CompareBCAndDE
ret c
ret z
ld h, b
ld l, c
call LoadTxRam3
ld a, [wddf7]
inc a
ld [wTxRam3_b], a
xor a
ld [wTxRam3_b + 1], a
ld a, [wddf7]
add a
add a
ld c, a
ld b, $00
ld hl, wddf9
add hl, bc
inc hl
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
call LoadTxRam2
ldtx hl, ChallengeMachineOpponentXDialogText
call PrintScrollableText_NoTextBoxLabelVRAM0
ret
Func_137df:
.asm_137df
ldtx hl, ChallengeMachineDuelPromptText
ld a, $01
call DrawWideTextBox_PrintTextWithYesOrNoMenu
ret nc
ldtx hl, ChallengeMachineQuitWinStreakWarningText
call PrintScrollableText_NoTextBoxLabelVRAM0
ldtx hl, ChallengeMachineQuitPromptText
ld a, $01
call DrawWideTextBox_PrintTextWithYesOrNoMenu
jr c, .asm_137df
scf
ret
Func_137fa:
ld a, [wddf7]
dec a
add a
add a
ld c, a
ld b, $00
ld hl, wddf9
add hl, bc
inc hl
inc hl
ld a, [hli]
ld [wTxRam2], a
ld a, [hl]
ld [wTxRam2 + 1], a
ld a, [wddf7]
ld l, a
ld h, $00
call LoadTxRam3
ld a, [wddf8]
dec a
jr z, .asm_13827
ldtx hl, ChallengeMachineLossDialogText
call PrintScrollableText_NoTextBoxLabelVRAM0
ret
.asm_13827
ldtx hl, ChallengeMachineWinDialogText
call PrintScrollableText_NoTextBoxLabelVRAM0
ret
Func_1382e:
push af
ld a, [wddf8]
dec a
jr z, .asm_1384e
ld a, [wddf6]
add a
ld c, a
ld b, $00
ld hl, wde11
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
call LoadTxRam3
ldtx hl, ChallengeMachineLossDialogWinStreakText
call PrintScrollableText_NoTextBoxLabelVRAM0
jr .asm_1387e
.asm_1384e
call PauseSong_SaveState
push af
ld a, MUSIC_MEDAL
call Func_3d09
pop af
ldtx hl, ChallengeMachineWonASetText
call PrintTextInWideTextBox
call WaitForSongToFinish
call ResumeSong_ClearTemp
call WaitForWideTextBoxInput
ld a, [wddf6]
add a
ld c, a
ld b, $00
ld hl, wde0d
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
call LoadTxRam3
ldtx hl, ChallengeMachineSetsWonText
call PrintScrollableText_NoTextBoxLabelVRAM0
.asm_1387e
ldtx hl, ChallengeMachineComeAgainText
call PrintScrollableText_NoTextBoxLabelVRAM0
pop af
ret
INCLUDE "engine/challenge_machine.asm"
INCLUDE "engine/credits_commands.asm"
@@ -7656,6 +7298,7 @@ LoadPlayerName:
pop bc
ret
; from hl to sPlayerName
SavePlayerName:
push af
push bc
@@ -7672,14 +7315,15 @@ SavePlayerName:
pop af
ret
Func_13d1f:
; from sPlayerName to de
LoadPlayerNameToDE:
push af
push bc
push de
push hl
call EnableSRAM
ld hl, sPlayerName
ld bc, $10
ld bc, NAME_BUFFER_LENGTH
call CopyBCBytesFromHLToDE
call DisableSRAM
pop hl

View File

@@ -3737,7 +3737,7 @@ Func_1db81:
call DoAFrames_WithPreCheck
push af
ld a, MUSIC_MEDAL
call Func_3d09
call CallPlaySong
pop af
call WaitForSongToFinish
ld a, 60
@@ -5331,7 +5331,7 @@ Func_1e60c:
ld a, [wDuelStartTheme]
push af
ld a, a ; wow
call Func_3d09
call CallPlaySong
pop af
; print duelist intro text
@@ -5694,7 +5694,7 @@ _GiveBoosterPack:
call PauseSong_SaveState
push af
ld a, MUSIC_BOOSTER_PACK
call Func_3d09
call CallPlaySong
pop af
ld a, [wCurBoosterPack]
add a

View File

@@ -1341,8 +1341,8 @@ MasonLaboratoryMain_NPCInteractions:
MasonLaboratoryMain_OWInteractions:
ow_script 1, 2, PCMenu
ow_script 2, 2, PCMenu
ow_script 6, 3, Func_4101d
ow_script 7, 3, Func_4101d
ow_script 6, 3, Script_TCGChallengeMachine
ow_script 7, 3, Script_TCGChallengeMachine
db $ff
MasonLaboratoryMain_MapScripts:
@@ -1461,7 +1461,7 @@ Func_40f21:
scf
ret
.asm_40f34
farcall Func_ec6c
farcall LoadChallengeMachineSave
call Func_41074
scf
ret
@@ -1586,45 +1586,45 @@ Func_40fff:
call Func_40fbc
ret
Func_4101d:
Script_TCGChallengeMachine:
ld a, EVENT_MASONS_LAB_CHALLENGE_MACHINE_STATE
farcall GetEventValue
ret z
farcall Func_ebc6
jr nc, .asm_41038
farcall Func_eb39
farcall ValidateChallengeMachineSaveData
jr nc, .no_error
farcall InitChallengeMachine
xor a
start_script
start_dialog
print_text ChallengeMachineWinStreakRecordCorruptedAndResetText
end_dialog
end_script
.asm_41038
farcall Func_ec6c
.no_error
farcall LoadChallengeMachineSave
xor a
farcall Func_ef40
farcall Func_efd0
farcall SetChallengeMachineOpponents
farcall LoadChallengeMachineOpponentTitlesAndNames
xor a
ld bc, $0
farcall Func_135ec
farcall ChallengeMachine
jr c, .asm_41061
xor a
start_script
set_event EVENT_EB
set_var VAR_34, $01
set_var VAR_CHALLENGEMACHINE_CURRENT_ROUND, $01
send_mail $0d
end_script
farcall Func_eff7
farcall SetChallengeMachineDuelParams
jr .asm_41073
.asm_41061
or a
jr z, .asm_41073
ld bc, $0
ld a, c
ld [wde11], a
ld [wTCGChallengeMachineCurWinStreak], a
ld a, b
ld [wde11 + 1], a
farcall Func_ec38
ld [wTCGChallengeMachineCurWinStreak + 1], a
farcall SaveChallengeMachine
.asm_41073
ret
@@ -1632,78 +1632,78 @@ Func_41074:
ld a, EVENT_SET_UNTIL_MAP_RELOAD_2
farcall GetEventValue
jp z, .asm_410ee
ld a, [wde11]
ld a, [wTCGChallengeMachineCurWinStreak]
ld c, a
ld a, [wde11 + 1]
ld a, [wTCGChallengeMachineCurWinStreak + 1]
ld b, a
inc bc
cp16bc_long 1000
jr nc, .asm_4109a
ld a, c
ld [wde11], a
ld [wTCGChallengeMachineCurWinStreak], a
ld a, b
ld [wde11 + 1], a
ld [wTCGChallengeMachineCurWinStreak + 1], a
.asm_4109a
ld a, VAR_34
ld a, VAR_CHALLENGEMACHINE_CURRENT_ROUND
farcall GetVarValue
cp $05
jr z, .asm_410c4
ld b, a
xor a
ld c, $01
farcall Func_135ec
farcall ChallengeMachine
jp c, .asm_410fc
ld a, VAR_34
ld a, VAR_CHALLENGEMACHINE_CURRENT_ROUND
ld d, a
farcall GetVarValue
inc a
ld c, a
ld a, d
farcall SetVarValue
farcall Func_eff7
farcall SetChallengeMachineDuelParams
jp .asm_41114
.asm_410c4
ld a, [wde0d]
ld a, [wTCGChallengeMachineSetsWonRecord]
ld c, a
ld a, [wde0d + 1]
ld a, [wTCGChallengeMachineSetsWonRecord + 1]
ld b, a
inc bc
cp16bc_long 1000
jr nc, .asm_410e1
ld a, c
ld [wde0d], a
ld [wTCGChallengeMachineSetsWonRecord], a
ld a, b
ld [wde0d + 1], a
ld [wTCGChallengeMachineSetsWonRecord + 1], a
.asm_410e1
call Func_4112e
xor a
ld bc, $501
farcall Func_135ec
farcall ChallengeMachine
jr .asm_41115
.asm_410ee
ld a, VAR_34
ld a, VAR_CHALLENGEMACHINE_CURRENT_ROUND
farcall GetVarValue
ld b, a
xor a
ld c, $02
farcall Func_135ec
farcall ChallengeMachine
.asm_410fc
call Func_4112e
ld bc, $0
ld a, c
ld [wde11], a
ld [wTCGChallengeMachineCurWinStreak], a
ld a, b
ld [wde11 + 1], a
ld [wTCGChallengeMachineCurWinStreak + 1], a
.asm_4110a
ld a, EVENT_EB
farcall ZeroOutEventValue
farcall Func_ec38
farcall SaveChallengeMachine
.asm_41114
ret
.asm_41115
ld a, [wde11]
ld a, [wTCGChallengeMachineCurWinStreak]
ld e, a
ld a, [wde11 + 1]
ld a, [wTCGChallengeMachineCurWinStreak + 1]
ld d, a
cp16_long 50
jr nz, .asm_4110a
@@ -1711,13 +1711,13 @@ Func_41074:
jr .asm_4110a
Func_4112e:
ld a, [wde11]
ld a, [wTCGChallengeMachineCurWinStreak]
ld c, a
ld a, [wde11 + 1]
ld a, [wTCGChallengeMachineCurWinStreak + 1]
ld b, a
ld a, [wde15]
ld a, [wTCGChallengeMachineWinStreakRecord]
ld e, a
ld a, [wde15 + 1]
ld a, [wTCGChallengeMachineWinStreakRecord + 1]
ld d, a
cp16bc_long de
jr nc, .asm_4114a
@@ -1725,12 +1725,12 @@ Func_4112e:
ret
.asm_4114a
ld a, c
ld [wde15], a
ld [wTCGChallengeMachineWinStreakRecord], a
ld a, b
ld [wde15 + 1], a
ld [wTCGChallengeMachineWinStreakRecord + 1], a
call EnableSRAM
ld hl, sPlayerName
ld de, wde19
ld de, wTCGChallengeMachinePlayerName
ld bc, $10
call CopyDataHLtoDE_SaveRegisters
call DisableSRAM
@@ -4514,7 +4514,7 @@ Func_426d6:
jp z, Script_GRCupRound2AfterDuel
jp Script_GRCupRound3AfterDuel
.asm_426ef
farcall Func_ec6c
farcall LoadChallengeMachineSave
call Func_42776
scf
ret
@@ -4546,9 +4546,9 @@ Script_GRChallengeMachine:
ld a, EVENT_MASONS_LAB_CHALLENGE_MACHINE_STATE
farcall GetEventValue
ret z
farcall Func_ebc6
farcall ValidateChallengeMachineSaveData
jr nc, .asm_4273a
farcall Func_eb39
farcall InitChallengeMachine
xor a
start_script
start_dialog
@@ -4556,30 +4556,30 @@ Script_GRChallengeMachine:
end_dialog
end_script
.asm_4273a
farcall Func_ec6c
farcall LoadChallengeMachineSave
ld a, $01
farcall Func_ef40
farcall Func_efd0
farcall SetChallengeMachineOpponents
farcall LoadChallengeMachineOpponentTitlesAndNames
ld a, $01
ld bc, $0
farcall Func_135ec
farcall ChallengeMachine
jr c, .asm_42763
xor a
start_script
set_event EVENT_EB
set_var VAR_34, $01
set_var VAR_CHALLENGEMACHINE_CURRENT_ROUND, $01
end_script
farcall Func_eff7
farcall SetChallengeMachineDuelParams
jr .asm_42775
.asm_42763
or a
jr z, .asm_42775
ld bc, $0
ld a, c
ld [wde13], a
ld [wGRChallengeMachineCurWinStreak], a
ld a, b
ld [wde13 + 1], a
farcall Func_ec38
ld [wGRChallengeMachineCurWinStreak + 1], a
farcall SaveChallengeMachine
.asm_42775
ret
@@ -4587,78 +4587,78 @@ Func_42776:
ld a, EVENT_SET_UNTIL_MAP_RELOAD_2
farcall GetEventValue
jp z, .asm_427f2
ld a, [wde13]
ld a, [wGRChallengeMachineCurWinStreak]
ld c, a
ld a, [wde13 + 1]
ld a, [wGRChallengeMachineCurWinStreak + 1]
ld b, a
inc bc
cp16bc_long 1000
jr nc, .asm_4279c
ld a, c
ld [wde13], a
ld [wGRChallengeMachineCurWinStreak], a
ld a, b
ld [wde13 + 1], a
ld [wGRChallengeMachineCurWinStreak + 1], a
.asm_4279c
ld a, VAR_34
ld a, VAR_CHALLENGEMACHINE_CURRENT_ROUND
farcall GetVarValue
cp $05
jr z, .asm_427c7
ld b, a
ld a, $01
ld c, $01
farcall Func_135ec
farcall ChallengeMachine
jp c, .asm_42801
ld a, VAR_34
ld a, VAR_CHALLENGEMACHINE_CURRENT_ROUND
ld d, a
farcall GetVarValue
inc a
ld c, a
ld a, d
farcall SetVarValue
farcall Func_eff7
farcall SetChallengeMachineDuelParams
jp .asm_42819
.asm_427c7
ld a, [wde0f]
ld a, [wGRChallengeMachineSetsWonRecord]
ld c, a
ld a, [wde0f + 1]
ld a, [wGRChallengeMachineSetsWonRecord + 1]
ld b, a
inc bc
cp16bc_long 1000
jr nc, .asm_427e4
ld a, c
ld [wde0f], a
ld [wGRChallengeMachineSetsWonRecord], a
ld a, b
ld [wde0f + 1], a
ld [wGRChallengeMachineSetsWonRecord + 1], a
.asm_427e4
call Func_42833
ld a, $01
ld bc, $501
farcall Func_135ec
farcall ChallengeMachine
jr .asm_4281a
.asm_427f2
ld a, VAR_34
ld a, VAR_CHALLENGEMACHINE_CURRENT_ROUND
farcall GetVarValue
ld b, a
ld a, $01
ld c, $02
farcall Func_135ec
farcall ChallengeMachine
.asm_42801
call Func_42833
ld bc, $0
ld a, c
ld [wde13], a
ld [wGRChallengeMachineCurWinStreak], a
ld a, b
ld [wde13 + 1], a
ld [wGRChallengeMachineCurWinStreak + 1], a
.asm_4280f
ld a, EVENT_EB
farcall ZeroOutEventValue
farcall Func_ec38
farcall SaveChallengeMachine
.asm_42819
ret
.asm_4281a
ld a, [wde13]
ld a, [wGRChallengeMachineCurWinStreak]
ld e, a
ld a, [wde13 + 1]
ld a, [wGRChallengeMachineCurWinStreak + 1]
ld d, a
cp16_long 50
jr nz, .asm_4280f
@@ -4666,13 +4666,13 @@ Func_42776:
jr .asm_4280f
Func_42833:
ld a, [wde13]
ld a, [wGRChallengeMachineCurWinStreak]
ld c, a
ld a, [wde13 + 1]
ld a, [wGRChallengeMachineCurWinStreak + 1]
ld b, a
ld a, [wde17]
ld a, [wGRChallengeMachineWinStreakRecord]
ld e, a
ld a, [wde17 + 1]
ld a, [wGRChallengeMachineWinStreakRecord + 1]
ld d, a
cp16bc_long de
jr nc, .asm_4284f
@@ -4680,12 +4680,12 @@ Func_42833:
ret
.asm_4284f
ld a, c
ld [wde17], a
ld [wGRChallengeMachineWinStreakRecord], a
ld a, b
ld [wde17 + 1], a
ld [wGRChallengeMachineWinStreakRecord + 1], a
call EnableSRAM
ld hl, sPlayerName
ld de, wde29
ld de, wGRChallengeMachinePlayerName
ld bc, NAME_BUFFER_LENGTH
call CopyDataHLtoDE_SaveRegisters
call DisableSRAM

View File

@@ -0,0 +1,378 @@
; a -> wChallengeMachineIndex (island)
; b -> wChallengeMachineCurRound [0, 4]
; c -> wChallengeMachineDuelResult
ChallengeMachine:
call Func_102a4
call _ChallengeMachine
call Func_102c4
ret
_ChallengeMachine:
push bc
push de
push hl
ld [wChallengeMachineIndex], a
ld a, c
ld [wChallengeMachineDuelResult], a
ld a, b
ld [wChallengeMachineCurRound], a
and a
jr nz, .resume_challenge
; new challenge
call ChallengeMachine_Start
ld a, $00
jr c, .exit
.resume_challenge
call ChallengeMachine_DrawCurSet
ld a, $01
.exit
pop hl
pop de
pop bc
ret
ChallengeMachine_Start:
call ClearSpriteAnimsAndSetInitialGraphicsConfiguration
lb de, $40, $ff
call SetupText
call ChallengeMachine_DrawScoreScreen
call SetFrameFuncAndFadeFromWhite
call ChallengeMachine_StartConfirmation
call FadeToWhiteAndUnsetFrameFunc
ret
ChallengeMachine_DrawScoreScreen:
lb de, 0, 0
lb bc, 20, 13
call DrawRegularTextBoxVRAM0
lb de, 0, 12
lb bc, 20, 6
call DrawRegularTextBoxVRAM0
ld a, [wChallengeMachineIndex]
add a
ld c, a
ld b, $00
ld hl, .name_table
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
lb de, 1, 0
call Func_2c4b
ld hl, .text_items
call PlaceTextItemsVRAM0
ldtx hl, ChallengeMachineScoreTitleText
lb de, 1, 2
call PrintTextNoDelay_InitVRAM0
ld hl, wChallengeMachineSetsWonRecords
lb de, 14, 4
call .PrintScore
ld hl, wChallengeMachineCurWinStreaks
lb de, 14, 6
call .PrintScore
ld hl, wChallengeMachineWinStreakRecords
lb de, 14, 10
call .PrintScore
call .PrintPlayerName
ret
.PrintScore:
push hl
ld a, [wChallengeMachineIndex]
add a
ld c, a
ld b, $00
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, 3
ld b, TRUE
farcall PrintNumber
pop hl
ret
.text_items:
textitem 2, 4, ChallengeMachineSetsWonRecordText
textitem 2, 6, ChallengeMachineCurrentWinStreakText
textitem 1, 8, ChallengeMachineWinStreakRecordText
textitem 17, 4, AttemptsUnitText
textitem 17, 6, WinsUnitText
textitem 17, 10, WinsUnitText
textitems_end
.name_table:
tx TCGChallengeMachineText
tx GRChallengeMachineText
.PrintPlayerName:
ld de, wChallengeMachineTempPlayerName
call LoadPlayerNameToDE
ld a, [wChallengeMachineIndex]
REPT 4 ; *= NAME_BUFFER_LENGTH
add a
ENDR
ld c, a
ld b, $00
ld hl, wChallengeMachinePlayerNames
add hl, bc
call SavePlayerName
ldtx hl, TxRam1Text
lb de, 2, 10
call PrintTextNoDelay_InitVRAM0
ld hl, wChallengeMachineTempPlayerName
call SavePlayerName
ret
ChallengeMachine_StartConfirmation:
ldtx hl, ChallengeMachineStartPromptText
ld a, $01
call DrawWideTextBox_PrintTextWithYesOrNoMenu
ret
ChallengeMachine_DrawCurSet:
call ClearSpriteAnimsAndSetInitialGraphicsConfiguration
lb de, $40, $ff
call SetupText
call ChallengeMachine_DrawOpponentList
call SetFrameFuncAndFadeFromWhite
ld a, [wChallengeMachineDuelResult]
and a
jr z, .next_opponent
call ChallengeMachine_PrintRoundResult
ld a, [wChallengeMachineDuelResult]
cp CHALLENGE_MACHINE_DUEL_LOSS_OR_QUIT
jr z, .finished_set
ld a, [wChallengeMachineCurRound]
cp NUM_CHALLENGE_MACHINE_ROUNDS_PER_SET
scf
jr z, .finished_set
.next_opponent
call ChallengeMachine_PrintOpponentDialog
call ChallengeMachine_ProceedConfirmation
jr nc, .done
; quit
ld a, CHALLENGE_MACHINE_DUEL_LOSS_OR_QUIT
ld [wChallengeMachineDuelResult], a
.finished_set
call ChallengeMachine_PrintSetResult
.done
call FadeToWhiteAndUnsetFrameFunc
ret
ChallengeMachine_DrawOpponentList:
lb de, 0, 0
lb bc, 20, 13
call DrawRegularTextBoxVRAM0
lb de, 0, 12
lb bc, 20, 6
call DrawRegularTextBoxVRAM0
ld a, [wChallengeMachineIndex]
add a
ld c, a
ld b, $00
ld hl, .name_table
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
lb de, 1, 0
call Func_2c4b
call ChallengeMachine_PrintOpponentInfo
ret
.name_table:
tx TCGChallengeMachineText
tx GRChallengeMachineText
ChallengeMachine_PrintOpponentInfo:
ld hl, wChallengeMachineOpponentTitlesAndNames
ld c, NUM_CHALLENGE_MACHINE_ROUNDS_PER_SET
ld e, 2 ; beginning y-pos
.loop_rounds
call .PrintRoundNumber
call .PrintOpponentTitle
call .PrintOpponentName
; down 2 rows
inc e
inc e
dec c
jr nz, .loop_rounds
ret
.PrintRoundNumber:
push hl
ld a, NUM_CHALLENGE_MACHINE_ROUNDS_PER_SET + 1
sub c
ld [wTxRam3], a
xor a
ld [wTxRam3 + 1], a
ldtx hl, TxRam3Text
ld d, 2 ; x-pos
call PrintTextNoDelay_InitVRAM0
pop hl
ret
.PrintOpponentTitle:
push hl
ld a, [hli]
ld h, [hl]
ld l, a
ld d, 4 ; x-pos
call PrintTextNoDelay_InitVRAM0
pop hl
inc hl
inc hl
ret
.PrintOpponentName:
push hl
ld a, [hli]
ld h, [hl]
ld l, a
ld d, 14 ; x-pos
call PrintTextNoDelay_InitVRAM0
pop hl
inc hl
inc hl
ret
ChallengeMachine_PrintOpponentDialog:
ld a, [wChallengeMachineCurRound]
and a
jr nz, .next_opponent
ldtx hl, ChallengeMachineOpponentListDialogText
call PrintScrollableText_NoTextBoxLabelVRAM0
.next_opponent
ld a, [wChallengeMachineIndex]
add a
ld c, a
ld b, $00
ld hl, wChallengeMachineCurWinStreaks
add hl, bc
ld c, [hl]
inc hl
ld b, [hl]
ld de, 1
call CompareBCAndDE
ret c
ret z
ld h, b
ld l, c
call LoadTxRam3 ; current win streak
ld a, [wChallengeMachineCurRound]
inc a
ld [wTxRam3_b], a ; next round num
xor a
ld [wTxRam3_b + 1], a
ld a, [wChallengeMachineCurRound]
add a
add a
ld c, a
ld b, $00
ld hl, wChallengeMachineOpponentTitlesAndNames
add hl, bc
inc hl
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
call LoadTxRam2 ; next opp name
ldtx hl, ChallengeMachineOpponentXDialogText
call PrintScrollableText_NoTextBoxLabelVRAM0
ret
ChallengeMachine_ProceedConfirmation:
.duel_prompt
ldtx hl, ChallengeMachineDuelPromptText
ld a, $01
call DrawWideTextBox_PrintTextWithYesOrNoMenu
ret nc
ldtx hl, ChallengeMachineQuitWinStreakWarningText
call PrintScrollableText_NoTextBoxLabelVRAM0
ldtx hl, ChallengeMachineQuitPromptText
ld a, $01
call DrawWideTextBox_PrintTextWithYesOrNoMenu
jr c, .duel_prompt
; quit
scf
ret
ChallengeMachine_PrintRoundResult:
ld a, [wChallengeMachineCurRound]
dec a
add a
add a
ld c, a
ld b, $00
ld hl, wChallengeMachineOpponentTitlesAndNames
add hl, bc
inc hl
inc hl
ld a, [hli] ; last opp name
ld [wTxRam2], a
ld a, [hl]
ld [wTxRam2 + 1], a
ld a, [wChallengeMachineCurRound]
ld l, a
ld h, $00
call LoadTxRam3 ; cur round num
ld a, [wChallengeMachineDuelResult]
dec a
jr z, .won_round
; lost round
ldtx hl, ChallengeMachineLossDialogText
call PrintScrollableText_NoTextBoxLabelVRAM0
ret
.won_round
ldtx hl, ChallengeMachineWinDialogText
call PrintScrollableText_NoTextBoxLabelVRAM0
ret
ChallengeMachine_PrintSetResult:
push af
ld a, [wChallengeMachineDuelResult]
dec a
jr z, .won_set
; lost or quit
ld a, [wChallengeMachineIndex]
add a
ld c, a
ld b, $00
ld hl, wChallengeMachineCurWinStreaks
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
call LoadTxRam3 ; cur win streak
ldtx hl, ChallengeMachineLossDialogWinStreakText
call PrintScrollableText_NoTextBoxLabelVRAM0
jr .exit
.won_set
call PauseSong_SaveState
push af
ld a, MUSIC_MEDAL
call CallPlaySong
pop af
ldtx hl, ChallengeMachineWonASetText
call PrintTextInWideTextBox
call WaitForSongToFinish
call ResumeSong_ClearTemp
call WaitForWideTextBoxInput
ld a, [wChallengeMachineIndex]
add a
ld c, a
ld b, $00
ld hl, wChallengeMachineSetsWonRecords
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
call LoadTxRam3 ; sets won
ldtx hl, ChallengeMachineSetsWonText
call PrintScrollableText_NoTextBoxLabelVRAM0
.exit
ldtx hl, ChallengeMachineComeAgainText
call PrintScrollableText_NoTextBoxLabelVRAM0
pop af
ret

View File

@@ -377,72 +377,76 @@ LoadMainSave:
farcall Func_10f78
ret
Func_eb39:
ld hl, wddf9
InitChallengeMachine:
ld hl, wChallengeMachineOpponentTitlesAndNames
xor a
ld c, $14
ld c, (2 + 2) * NUM_CHALLENGE_MACHINE_ROUNDS_PER_SET
.loop_init
ld [hli], a
dec c
jr nz, .loop_init
; init verbosely from wde0d to wde17
ld hl, wde0d
; init records verbosely
ld hl, wChallengeMachineSetsWonRecords
xor a
REPT 4
ld [hli], a
ENDR
ld hl, wde11
ld hl, wChallengeMachineCurWinStreaks
xor a
REPT 4
ld [hli], a
ENDR
ld hl, wde15
ld hl, wChallengeMachineWinStreakRecords
xor a
REPT 4
ld [hli], a
ENDR
ld a, $01
ld [wde15], a
ld a, $05
ld [wde17], a
ld hl, .data
ld de, wde19
ld c, $20
; set default scorers
ld a, 1
ld [wTCGChallengeMachineWinStreakRecord], a
ld a, 5
ld [wGRChallengeMachineWinStreakRecord], a
ld hl, .default_scorers
ld de, wChallengeMachinePlayerNames
ld c, NAME_BUFFER_LENGTH * 2
.loop_copy
ld a, [hli]
ld [de], a
inc de
dec c
jr nz, .loop_copy
call Func_ec38
call SaveChallengeMachine
ret
.data
db $04, $13, $79, $15, $0f, $6b, $0f, $34, $0f, $2f, $0f, $00, $00, $00, $00, $00, $4e, $0f, $39, $0f, $38, $0f, $5f, $0f, $21, $0f, $00, $00, $00, $00, $00, $00
.default_scorers
db $04, $13, $79, $15, $0f, $6b, $0f, $34, $0f, $2f, $0f, $00, $00, $00, $00, $00 ; "Dr.オーヤマ"
db $4e, $0f, $39, $0f, $38, $0f, $5f, $0f, $21, $0f, $00, $00, $00, $00, $00, $00 ; "ビルリッチ"
Func_eb97:
call Func_ebc6
jr nc, .asm_eb9f
call Func_eb39
.asm_eb9f
call Func_ec6c
; init verbosely from wde0d to wde13
ld hl, wde0d
; also init if has invalid save
ClearChallengeMachineRecords:
call ValidateChallengeMachineSaveData
jr nc, .valid
call InitChallengeMachine
.valid
call LoadChallengeMachineSave
; init records verbosely
ld hl, wChallengeMachineSetsWonRecords
xor a
REPT 4
ld [hli], a
ENDR
ld hl, wde11
ld hl, wChallengeMachineCurWinStreaks
xor a
REPT 4
ld [hli], a
ENDR
call Func_ec38
call SaveChallengeMachine
ret
Func_ebb6:
; unused?
InitChallengeMachineChecksums:
call EnableSRAM
xor a
ld [sChallengeMachineSaveDataChecksum0], a
@@ -451,7 +455,7 @@ Func_ebb6:
call DisableSRAM
ret
Func_ebc6:
ValidateChallengeMachineSaveData:
xor a ; BANK(sChallengeMachineSaveData)
ld [wSaveDataCurBankSRAM], a
ld a, LOW(WRAMToSRAMMapper_ChallengeMachineSave)
@@ -483,15 +487,15 @@ Func_ebc6:
ld a, c
cp e
jr nz, .error
ld a, [wde15 + 0]
ld a, [wTCGChallengeMachineWinStreakRecord + 0]
ld e, a
ld a, [wde15 + 1]
ld a, [wTCGChallengeMachineWinStreakRecord + 1]
ld d, a
cp16_long 0
jr z, .error
ld a, [wde17 + 0]
ld a, [wGRChallengeMachineWinStreakRecord + 0]
ld e, a
ld a, [wde17 + 1]
ld a, [wGRChallengeMachineWinStreakRecord + 1]
ld d, a
cp16_long 0
jr z, .error
@@ -502,7 +506,7 @@ Func_ebc6:
scf
ret
Func_ec38:
SaveChallengeMachine:
xor a ; BANK(sChallengeMachineSaveData)
ld [wSaveDataCurBankSRAM], a
ld a, LOW(WRAMToSRAMMapper_ChallengeMachineSave)
@@ -524,7 +528,7 @@ Func_ec38:
call DisableSRAM
ret
Func_ec6c:
LoadChallengeMachineSave:
xor a ; BANK(sChallengeMachineSaveData)
ld [wSaveDataCurBankSRAM], a
ld a, LOW(WRAMToSRAMMapper_ChallengeMachineSave)

View File

@@ -2421,7 +2421,8 @@ Func_3d02::
ret
; a = MUSIC_* constant
Func_3d09::
; intended for short songs?
CallPlaySong::
call PlaySong
ret

View File

@@ -2581,7 +2581,7 @@ MainMenuContinueFromDiaryInsteadOfDuelConfirmText:
textfw "「つづきを あそぶ」で はじめます?"
done
ChallengeMachineText:
TCGChallengeMachineText:
textfw "チャレンジマシン"
done

View File

@@ -1939,7 +1939,7 @@ TextOffsets::
textpointer MainMenuContinueFromDiaryInsteadOfDuelWarning3Text ; 0x078a
textpointer MainMenuContinueFromDiaryInsteadOfDuelWarning4Text ; 0x078b
textpointer MainMenuContinueFromDiaryInsteadOfDuelConfirmText ; 0x078c
textpointer ChallengeMachineText ; 0x078d
textpointer TCGChallengeMachineText ; 0x078d
textpointer GRChallengeMachineText ; 0x078e
textpointer ChallengeMachineScoreTitleText ; 0x078f
textpointer ChallengeMachineSetsWonRecordText ; 0x0790

View File

@@ -3473,45 +3473,50 @@ wCardTilemapOffset:: ; ddf4
wddf5:: ; ddf5
ds $1
wddf6:: ; ddf6
; TCG_ISLAND or GR_ISLAND
wChallengeMachineIndex:: ; ddf6
ds $1
wddf7:: ; ddf7
wChallengeMachineCurRound:: ; ddf7
ds $1
wddf8:: ; ddf8
wChallengeMachineDuelResult:: ; ddf8
ds $1
; challenge machine
wddf9:: ; ddf9
ds $14
; title name, dialog name for 5 rounds of the set
wChallengeMachineOpponentTitlesAndNames:: ; ddf9
ds (2 + 2) * NUM_CHALLENGE_MACHINE_ROUNDS_PER_SET
wde0d:: ; de0d
wChallengeMachineSetsWonRecords:: ; de0d
wTCGChallengeMachineSetsWonRecord:: ; de0d
ds $2
wde0f:: ; de0f
wGRChallengeMachineSetsWonRecord:: ; de0f
ds $2
wde11:: ; de11
wChallengeMachineCurWinStreaks:: ; de11
wTCGChallengeMachineCurWinStreak:: ; de11
ds $2
wde13:: ; de13
wGRChallengeMachineCurWinStreak:: ; de13
ds $2
wde15:: ; de15
wChallengeMachineWinStreakRecords:: ; de15
wTCGChallengeMachineWinStreakRecord:: ; de15
ds $2
wde17:: ; de17
wGRChallengeMachineWinStreakRecord:: ; de17
ds $2
wde19:: ; de19
ds $10
wChallengeMachinePlayerNames:: ; de19
wTCGChallengeMachinePlayerName:: ; de19
ds NAME_BUFFER_LENGTH
wde29:: ; de29
ds $10
wGRChallengeMachinePlayerName:: ; de29
ds NAME_BUFFER_LENGTH
wde39:: ; de39
ds $10
wChallengeMachineTempPlayerName:: ; de39
ds NAME_BUFFER_LENGTH
wCreditsCmdArg1:: ; de49
ds $1

View File

@@ -3008,12 +3008,12 @@ vars = [
"VAR_GR_CHALLENGE_CUP_PRIZE_INDEX",
"VAR_TIMES_WON_GR_CHALLENGE_CUP",
"VAR_GR_CHALLENGE_CUP_RESULT",
"VAR_34",
"VAR_35",
"VAR_36",
"VAR_37",
"VAR_38",
"VAR_39",
"VAR_CHALLENGEMACHINE_CURRENT_ROUND",
"VAR_CHALLENGEMACHINE_ROUND1_OPPONENT_DECK_ID",
"VAR_CHALLENGEMACHINE_ROUND2_OPPONENT_DECK_ID",
"VAR_CHALLENGEMACHINE_ROUND3_OPPONENT_DECK_ID",
"VAR_CHALLENGEMACHINE_ROUND4_OPPONENT_DECK_ID",
"VAR_CHALLENGEMACHINE_ROUND5_OPPONENT_DECK_ID",
"VAR_CARD_DUNGEON_PROGRESS",
"VAR_3B",
"VAR_NPC_DECK_ID",