diff options
author | xCrystal <rgr.crystal@gmail.com> | 2018-02-27 14:26:41 +0100 |
---|---|---|
committer | xCrystal <rgr.crystal@gmail.com> | 2018-02-27 14:26:41 +0100 |
commit | f608fd9e506f37b55fbb10f09476d148d53c9c64 (patch) | |
tree | 8a0f43d7c3729bfea2fe9cafdef0d784bf645491 /src | |
parent | 4485b77a5f5041e17ea6f349fd8fe677316afac9 (diff) |
Document main menu and game event functions
Diffstat (limited to 'src')
-rw-r--r-- | src/constants/misc_constants.asm | 11 | ||||
-rw-r--r-- | src/engine/bank1.asm | 16 | ||||
-rw-r--r-- | src/engine/bank3.asm | 24 | ||||
-rw-r--r-- | src/engine/bank4.asm | 52 | ||||
-rw-r--r-- | src/engine/booster_packs.asm | 6 | ||||
-rw-r--r-- | src/engine/home.asm | 75 | ||||
-rw-r--r-- | src/wram.asm | 4 |
7 files changed, 104 insertions, 84 deletions
diff --git a/src/constants/misc_constants.asm b/src/constants/misc_constants.asm index 1cfffb4..c1e3bf1 100644 --- a/src/constants/misc_constants.asm +++ b/src/constants/misc_constants.asm @@ -24,3 +24,14 @@ D_DOWN EQU 1 << D_DOWN_F ; $80 BUTTONS EQU A_BUTTON | B_BUTTON | SELECT | START ; $0f D_PAD EQU D_RIGHT | D_LEFT | D_UP | D_DOWN ; $f0 + +; Game event constants (wGameEventIndex) + const_def + const GAME_EVENT_CONTINUE_FROM_DIARY_OR_NEW_GAME ; $0 + const GAME_EVENT_DUEL ; $1 + const GAME_EVENT_BATTLE_CENTER ; $2 + const GAME_EVENT_GIFT_CENTER ; $3 + const GAME_EVENT_CREDITS ; $4 + const GAME_EVENT_CONTINUE_DUEL ; $5 + const GAME_EVENT_CHALLENGE_MACHINE ; $6 +NUM_GAME_EVENTS EQU const_value diff --git a/src/engine/bank1.asm b/src/engine/bank1.asm index ab84ad8..8852914 100644 --- a/src/engine/bank1.asm +++ b/src/engine/bank1.asm @@ -1,5 +1,6 @@ ; continuation of Bank0 Start -Start_Cont: ; 4000 (1:4000) +; supposed to be the main loop, but the game never returns from _GameLoop anyway +GameLoop: ; 4000 (1:4000) di ld sp, $e000 call ResetSerial @@ -18,8 +19,8 @@ Start_Cont: ; 4000 (1:4000) ldh a, [hButtonsHeld] cp A_BUTTON | B_BUTTON jr z, .ask_erase_backup_ram - farcall Func_126d1 - jr Start_Cont + farcall _GameLoop + jr GameLoop .ask_erase_backup_ram call Func_405a call EmptyScreen @@ -55,14 +56,15 @@ CommentedOut_406e: ; 406e (1:406e) ret ; 0x406f -Func_406f: ; 406f (1:406f) +; try to resume a saved duel from the main menu +TryContinueDuel: ; 406f (1:406f) call Func_420b call $66e9 ldtx hl, BackUpIsBrokenText - jr c, Func_4097 + jr c, FailedToContinueDuel ; fallthrough -Func_407a: ; 407a (1:407a) +ContinueDuel: ; 407a (1:407a) ld hl, sp+$00 ld a, l ld [wcbe5], a @@ -77,7 +79,7 @@ Func_407a: ; 407a (1:407a) jp StartDuel.asm_40fb ; 0x4097 -Func_4097: ; 4097 (1:4097) +FailedToContinueDuel: ; 4097 (1:4097) call DrawWideTextBox_WaitForInput call ResetSerial scf diff --git a/src/engine/bank3.asm b/src/engine/bank3.asm index 717ff69..3612854 100644 --- a/src/engine/bank3.asm +++ b/src/engine/bank3.asm @@ -3,8 +3,8 @@ LoadMap: ; c000 (3:4000) call EnableSRAM bank1call Func_6785 call DisableSRAM - ld a, $0 - ld [wd0b5], a + ld a, GAME_EVENT_CONTINUE_FROM_DIARY_OR_NEW_GAME + ld [wGameEventIndex], a xor a ld [wd10f], a ld [wd110], a @@ -1765,8 +1765,8 @@ asm_cd2f ld [wd0c5], a pop af farcall Func_118a7 - ld a, $1 - ld [wd0b5], a + ld a, GAME_EVENT_DUEL + ld [wGameEventIndex], a ld hl, wd0b4 set 6, [hl] jp IncreaseOWScriptPointerBy4 @@ -1794,8 +1794,8 @@ Func_cd66: ; cd66 (3:4d66) ret Func_cd76: ; cd76 (3:4d76) - ld a, $2 - ld [wd0b5], a + ld a, GAME_EVENT_BATTLE_CENTER + ld [wGameEventIndex], a ld hl, wd0b4 set 6, [hl] jp IncreaseOWScriptPointerBy1 @@ -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 [wGameEventIndex], 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 [wGameEventIndex], a ld hl, wd0b4 set 6, [hl] jp IncreaseOWScriptPointerBy1 @@ -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 [wGameEventIndex], a ld hl, wd0b4 set 6, [hl] jp IncreaseOWScriptPointerBy1 diff --git a/src/engine/bank4.asm b/src/engine/bank4.asm index 1b16106..35dee45 100644 --- a/src/engine/bank4.asm +++ b/src/engine/bank4.asm @@ -1077,34 +1077,38 @@ OverworldScriptTable: ; 1217b (4:617b) Unknown_1229f: ; 1229f (4:629f) INCROM $1229f, $126d1 -Func_126d1: ; 126d1 (4:66d1) +; 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 @@ -1121,30 +1125,30 @@ Func_12704: ; 12704 (4:6704) ld [wd111], a call Func_39fc farcall Func_1d306 - ld a, $0 - ld [wd0b5], a - farcall $03, Func_383d + ld a, GAME_EVENT_CONTINUE_FROM_DIARY_OR_NEW_GAME + ld [wGameEventIndex], 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 EnableSRAM xor a ld [$ba44], a call DisableSRAM - ld a, $0 - ld [wd0b5], a - farcall $03, Func_383d + ld a, GAME_EVENT_CONTINUE_FROM_DIARY_OR_NEW_GAME + ld [wGameEventIndex], a + farcall $03, ExecuteGameEvent or a ret -CardPop_12768: ; 12768 (4:6768) +MainMenu_CardPop: ; 12768 (4:6768) ld a, MUSIC_CARD_POP call PlaySong bank1call Func_7571 @@ -1155,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 farcall $04, Func_3a40 farcall Func_70000 - ld a, $5 - ld [wd0b5], a - farcall $03, Func_383d + ld a, GAME_EVENT_CONTINUE_DUEL + ld [wGameEventIndex], a + farcall $03, ExecuteGameEvent or a ret ; 0x1279a diff --git a/src/engine/booster_packs.asm b/src/engine/booster_packs.asm index 99dde3f..98692d8 100644 --- a/src/engine/booster_packs.asm +++ b/src/engine/booster_packs.asm @@ -4,7 +4,7 @@ GenerateBoosterPack: ; 1e1c4 (7:61c4) push hl push bc push de - ld [wBoosterIndex], a + ld [wBoosterPackID], a .no_cards_found_loop call InitBoosterData call GenerateBoosterEnergies @@ -524,10 +524,10 @@ InitBoosterData: ; 1e430 (7:6430) ld [wBoosterAveragedTypeChances], a ret -; get the pointer to the data of the booster pack at [wBoosterIndex] +; 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 diff --git a/src/engine/home.asm b/src/engine/home.asm index 05da41c..cbe87bb 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -61,10 +61,10 @@ Start: ; 0150 (0:0150) call ResetSerial call CopyDMAFunction call SetupExtRAM - ld a, BANK(Start_Cont) + ld a, BANK(GameLoop) call BankswitchHome ld sp, $e000 - jp Start_Cont + jp GameLoop VBlankHandler: ; 019b (0:019b) push af @@ -6879,9 +6879,9 @@ PrintYesOrNoItems: ; 2b66 (0:2b66) ; 0x2b70 Func_2b70: ; 2b70 (0:2b70) - ld a, BANK(Func_407a) + ld a, BANK(ContinueDuel) call BankswitchHome - jp Func_407a + jp ContinueDuel ; 0x2b78 ; loads opponent deck to wOpponentDeck @@ -9067,45 +9067,48 @@ Func_380e: ; 380e (0:380e) call BankswitchHome ret -Func_383d: ; 383d (0:383d) +; enable the play time counter and execute the game event at [wGameEventIndex], +; then return to the overworld or restart the game. +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 [wGameEventIndex] from GameEventPointerTable +_ExecuteGameEvent: ; 3855 (0:3855) + ld a, [wGameEventIndex] + 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_ContinueFromDiaryOrNewGame + dw GameEvent_PracticeDuel + dw GameEvent_BattleCenter + dw GameEvent_GiftCenter + dw GameEvent_Credits + dw GameEvent_ContinueDuel + dw GameEvent_ChallengeMachine + dw GameEvent_ContinueFromDiaryOrNewGame + +GameEvent_ContinueFromDiaryOrNewGame: ; 3874 (0:3874) scf ret -Func_3876: ; 3876 (0:3876) +GameEvent_GiftCenter: ; 3876 (0:3876) ldh a, [hBankROM] push af call PauseSong @@ -9126,7 +9129,7 @@ Func_3876: ; 3876 (0:3876) scf ret -Func_38a3: ; 38a3 (0:38a3) +GameEvent_BattleCenter: ; 38a3 (0:38a3) ld a, $2 ld [wd0c2], a xor a @@ -9141,7 +9144,7 @@ Func_38a3: ; 38a3 (0:38a3) scf ret -Func_38c0: ; 38c0 (0:38c0) +GameEvent_PracticeDuel: ; 38c0 (0:38c0) ld a, $1 ld [wd0c2], a xor a @@ -9155,7 +9158,7 @@ Func_38c0: ; 38c0 (0:38c0) scf ret -Func_38db: ; 38db (0:38db) +GameEvent_ChallengeMachine: ; 38db (0:38db) ld a, $6 ld [wd111], a call Func_39fc @@ -9171,19 +9174,19 @@ Func_38db: ; 38db (0:38db) scf ret -Func_38fb: ; 38fb (0:38fb) +GameEvent_ContinueDuel: ; 38fb (0:38fb) xor a ld [wd112], a - bank1call Func_406f + bank1call TryContinueDuel call EnableSRAM ld a, [$ba44] call DisableSRAM cp $ff - jr z, Func_38db.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 diff --git a/src/wram.asm b/src/wram.asm index 3802967..6af5cb8 100644 --- a/src/wram.asm +++ b/src/wram.asm @@ -1154,7 +1154,7 @@ wd0aa:: ; d0aa wd0b4:: ; d0b4 ds $1 -wd0b5:: ; d0b5 +wGameEventIndex:: ; d0b5 ds $1 wSCX:: ; d0b6 @@ -1688,7 +1688,7 @@ wd636:: ; d635 ds $32 ; which BoosterPack_* corresponds to the booster pack that the player is opening -wBoosterIndex:: ; d669 +wBoosterPackID:: ; d669 ds $1 ; card being currently processed by the booster pack engine functions |