diff options
author | Andrew Martinek <andrewrmartinek@gmail.com> | 2019-09-23 12:27:12 -0400 |
---|---|---|
committer | Andrew Martinek <andrewrmartinek@gmail.com> | 2019-09-23 12:27:12 -0400 |
commit | f3f374e6b7e26bc93c8428c8cb7b8c210223b2f4 (patch) | |
tree | 2e2f67f4237bc77b33196d396f50baa105a745db /src | |
parent | 751b28d4fee472af4d0de83ef22a1f11ec6fade6 (diff) |
Fleshed out flags a lot
Diffstat (limited to 'src')
-rw-r--r-- | src/constants/duel_constants.asm | 7 | ||||
-rw-r--r-- | src/constants/event_constants.asm | 6 | ||||
-rw-r--r-- | src/constants/misc_constants.asm | 3 | ||||
-rw-r--r-- | src/data/npcs.asm | 2 | ||||
-rw-r--r-- | src/engine/bank03.asm | 670 | ||||
-rw-r--r-- | src/engine/bank04.asm | 65 | ||||
-rw-r--r-- | src/engine/bank07.asm | 17 | ||||
-rw-r--r-- | src/engine/bank1c.asm | 4 | ||||
-rw-r--r-- | src/engine/home.asm | 10 | ||||
-rw-r--r-- | src/macros/constants.asm | 7 | ||||
-rw-r--r-- | src/macros/scripts.asm | 34 | ||||
-rw-r--r-- | src/wram.asm | 10 |
12 files changed, 616 insertions, 219 deletions
diff --git a/src/constants/duel_constants.asm b/src/constants/duel_constants.asm index f3e2912..044b888 100644 --- a/src/constants/duel_constants.asm +++ b/src/constants/duel_constants.asm @@ -224,3 +224,10 @@ EFFECT_FAILED_UNSUCCESSFUL EQU $02 ; wAnimationQueue length ANIMATION_QUEUE_LENGTH EQU 7 + +PRIZES_1 EQU $01 +PRIZES_2 EQU $02 +PRIZES_3 EQU $03 +PRIZES_4 EQU $04 +PRIZES_5 EQU $05 +PRIZES_6 EQU $06 diff --git a/src/constants/event_constants.asm b/src/constants/event_constants.asm index 496f5a3..f6ac803 100644 --- a/src/constants/event_constants.asm +++ b/src/constants/event_constants.asm @@ -1,3 +1,3 @@ -; Event Flags -EVENT_BEAT_SARA EQU $15 -EVENT_BEAT_AMANDA EQU $16 +; EVENT_JOSHUA_STATE ; $33 +JOSHUA_TALKED EQU 1 +JOSHUA_BEATEN EQU 2 diff --git a/src/constants/misc_constants.asm b/src/constants/misc_constants.asm index b31631a..c513111 100644 --- a/src/constants/misc_constants.asm +++ b/src/constants/misc_constants.asm @@ -44,3 +44,6 @@ FLUSH_ALL_PALS_F EQU 6 const GAME_EVENT_CONTINUE_DUEL ; $5 const GAME_EVENT_CHALLENGE_MACHINE ; $6 NUM_GAME_EVENTS EQU const_value + +; Script constant +NO_JUMP EQU $0000 diff --git a/src/data/npcs.asm b/src/data/npcs.asm index 23b4330..f667077 100644 --- a/src/data/npcs.asm +++ b/src/data/npcs.asm @@ -519,7 +519,7 @@ AmyData: db $08 db $2e db $10 - dw $6304 ; Pointer to NPC Data + dw OWSequence_Amy ; Pointer to NPC Data tx Text03bf db AMY_PIC db $12 diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm index e89bbfb..d7f3496 100644 --- a/src/engine/bank03.asm +++ b/src/engine/bank03.asm @@ -127,10 +127,10 @@ Func_c10a: ; c10a (3:410a) jp hl ; closes dialogue window. seems to be for other things as well. -CloseDialogueBox: ; c111 (3:4111) - ld a, [wd0c1] ; with 0 set i can't move cursors, can move around +CloseAdvancedDialogueBox: ; c111 (3:4111) + ld a, [wd0c1] bit 0, a - call nz, Func_c135 ; seems to actually close the dialog window + call nz, CloseTextBox ld a, [wd0c1] bit 1, a jr z, .asm_c12a @@ -144,11 +144,11 @@ CloseDialogueBox: ; c111 (3:4111) ld [wd0bf], a ret -; this seems to legitimately close the dialogue box -Func_c135: ; c135 (3:4135) +; redraws the background and removes textbox control +CloseTextBox: ; c135 (3:4135) push hl - farcall Func_80028 ; Draw background of the current room, I think - ld hl, wd0c1 ; at this point, the background tiles are back to normal + farcall Func_80028 + ld hl, wd0c1 res 0, [hl] pop hl ret @@ -971,7 +971,7 @@ Func_c74d: ; c74d (3:474d) push bc push de call MainMenu_c75a - call CloseDialogueBox + call CloseAdvancedDialogueBox pop de pop bc pop hl @@ -1088,11 +1088,11 @@ PC_c7ea: ; c7ea (3:47ea) call Func_c32b jr .asm_c801 .asm_c82f - call Func_c135 + call CloseTextBox call DoFrameIfLCDEnabled ldtx hl, TurnedPCOffText call Func_c891 - call CloseDialogueBox + call CloseAdvancedDialogueBox xor a ld [wd112], a call Func_39fc @@ -1109,7 +1109,7 @@ Func_c891: ; c891 (3:4891) ld hl, wd3b9 ld a, [hli] or [hl] - call nz, Func_c135 + call nz, CloseTextBox .asm_c8a1 xor a @@ -1142,7 +1142,7 @@ Func_c8ba: ; c8ba (3:48ba) jr z, .asm_c8d4 .asm_c8d1 - call Func_c135 + call CloseTextBox .asm_c8d4 ld hl, wd3b9 @@ -1412,19 +1412,22 @@ Func_ca0e: ; ca0e (3:4a0e) Func_ca69: ; ca69 (3:4a69) call Func_cab3 -CheckIfEventFlagSet: ; ca6c (3:4a6c) + +; returns the event flag's value in a +; also ors it with itself before returning +GetEventFlagValue: ; ca6c (3:4a6c) push hl push bc - call GetEventFlagMod + call GetEventFlag ld c, [hl] - ld a, [wd3d1] -.asm_ca75 + ld a, [wLoadedFlagBits] +.shiftLoop bit 0, a - jr nz, .asm_ca7f + jr nz, .lsbReached srl a srl c - jr .asm_ca75 -.asm_ca7f + jr .shiftLoop +.lsbReached and c pop bc pop hl @@ -1437,12 +1440,13 @@ CheckIfEventFlagSet: ; ca6c (3:4a6c) Func_ca8f: ; ca8f (3:4a8f) call Func_cab3 -; a - pointer on table for cb1d, c - set or reset control bit -ModifyEventFlags: ; ca92 (3:4a92) +; a - flag +; c - value - truncated to fit only the flag's bounds +SetEventFlagValue: ; ca92 (3:4a92) push hl push bc - call GetEventFlagMod - ld a, [wd3d1] + call GetEventFlag + ld a, [wLoadedFlagBits] .asm_ca9a bit 0, a jr nz, .asm_caa4 @@ -1450,10 +1454,10 @@ ModifyEventFlags: ; ca92 (3:4a92) sla c jr .asm_ca9a .asm_caa4 - ld a, [wd3d1] + ld a, [wLoadedFlagBits] and c ld c, a - ld a, [wd3d1] + ld a, [wLoadedFlagBits] cpl and [hl] or c @@ -1481,20 +1485,20 @@ Func_cab3: ; cab3 (3:4ab3) INCROM $cac2, $cac5 -SetEventFlags: ; cac5 (3:4ac5) +MaxOutEventFlag: ; cac5 (3:4ac5) push bc ld c, $ff - call ModifyEventFlags + call SetEventFlagValue pop bc ret ; 0xcacd INCROM $cacd, $cad0 -Func_cad0: ; cad0 (3:4ad0) +ZeroOutEventFlag: ; cad0 (3:4ad0) push bc ld c, $0 - call ModifyEventFlags + call SetEventFlagValue pop bc ret @@ -1505,7 +1509,7 @@ Func_cad8: ; cad8 (3:4ad8) ld bc, $0008 .asm_cae0 ld a, [hli] - call CheckIfEventFlagSet + call GetEventFlagValue jr z, .asm_cae7 inc b @@ -1545,7 +1549,8 @@ Func_cad8: ; cad8 (3:4ad8) INCROM $cb15, $cb1d -GetEventFlagMod: ; cb1d (3:4b1d) +; returns wEventFlags byte in hl, related bits in wLoadedFlagBits +GetEventFlag: ; cb1d (3:4b1d) push bc ld c, a ld b, $0 @@ -1556,7 +1561,7 @@ GetEventFlagMod: ; cb1d (3:4b1d) ld a, [hli] ld c, a ld a, [hl] - ld [wd3d1], a + ld [wLoadedFlagBits], a ld b, $0 ld hl, wEventFlags add hl, bc @@ -1565,7 +1570,61 @@ GetEventFlagMod: ; cb1d (3:4b1d) ; offset - bytes to set or reset EventFlagMods: ; cb37 (3:4b37) - INCROM $cb37, $cc32 + const_def + flag_def EVENT_FLAG_00, $3f, %10000000 + flag_def EVENT_FLAG_01, $3f, %01000000 + flag_def EVENT_FLAG_02, $3f, %00100000 + flag_def EVENT_FLAG_03, $3f, %00010000 + flag_def EVENT_FLAG_04, $3f, %00001000 + flag_def EVENT_FLAG_05, $3f, %00000100 + flag_def EVENT_FLAG_06, $3f, %00000010 + flag_def EVENT_FLAG_07, $3f, %00000001 + flag_def EVENT_FLAG_08, $00, %10000000 + flag_def EVENT_FLAG_09, $00, %01000000 + flag_def EVENT_FLAG_0A, $00, %00100000 + flag_def EVENT_BEAT_AMY, $00, %00010000 + flag_def EVENT_FLAG_0C, $00, %00001000 + flag_def EVENT_FLAG_0D, $00, %00000100 + flag_def EVENT_FLAG_0E, $00, %00000010 + flag_def EVENT_FLAG_0F, $00, %00000001 + flag_def EVENT_FLAG_10, $00, %11111111 + flag_def EVENT_FLAG_11, $01, %11110000 + flag_def EVENT_FLAG_12, $01, %00001111 + flag_def EVENT_FLAG_13, $02, %11000000 + flag_def EVENT_FLAG_14, $02, %00110000 + flag_def EVENT_BEAT_SARA, $02, %00001000 + flag_def EVENT_BEAT_AMANDA, $02, %00000100 + flag_def EVENT_FLAG_17, $03, %11110000 + flag_def EVENT_FLAG_18, $03, %00001111 + flag_def EVENT_FLAG_19, $04, %11110000 + flag_def EVENT_FLAG_1A, $04, %00001111 + flag_def EVENT_FLAG_1B, $05, %10000000 + flag_def EVENT_FLAG_1C, $05, %01000000 + flag_def EVENT_FLAG_1D, $05, %00100000 + flag_def EVENT_FLAG_1E, $05, %00010000 + flag_def EVENT_FLAG_1F, $05, %00001111 + flag_def EVENT_FLAG_20, $06, %11110000 + flag_def EVENT_FLAG_21, $06, %00001100 + flag_def EVENT_FLAG_22, $06, %00000010 + flag_def EVENT_FLAG_23, $06, %00000001 + flag_def EVENT_FLAG_24, $07, %11000000 + flag_def EVENT_FLAG_25, $07, %00100000 + flag_def EVENT_FLAG_26, $07, %00010000 + flag_def EVENT_FLAG_27, $07, %00001000 + flag_def EVENT_FLAG_28, $07, %00000100 + flag_def EVENT_FLAG_29, $07, %00000010 + flag_def EVENT_FLAG_2A, $07, %00000001 + flag_def EVENT_FLAG_2B, $08, %11111111 + flag_def EVENT_FLAG_2C, $09, %11100000 + flag_def EVENT_FLAG_2D, $09, %00011111 + flag_def EVENT_FLAG_2E, $0a, %11110000 + flag_def EVENT_FLAG_2F, $0a, %00001000 + flag_def EVENT_FLAG_30, $0a, %00000100 + flag_def EVENT_FLAG_31, $0a, %00000011 + flag_def EVENT_FLAG_32, $0b, %10000000 + flag_def EVENT_JOSHUA_STATE, $0b, %01110000 + + INCROM $cb9f, $cc32 Func_cc32: ; cc32 (3:4c32) push hl @@ -1669,14 +1728,14 @@ GetOWSArgsAfterPointer: ; cca0 (3:4ca0) or b ret -Func_ccb3: ; ccb3 (3:4cb3) +SetScriptControlBytePass: ; ccb3 (3:4cb3) ld a, $ff - ld [wd415], a + ld [wScriptControlByte], a ret -Func_ccb9: ; ccb9 (3:4cb9) +SetScriptControlByteFail: ; ccb9 (3:4cb9) xor a - ld [wd415], a + ld [wScriptControlByte], a ret OWScript_EndScriptLoop1: ; ccbe (3:4cbe) @@ -1693,12 +1752,12 @@ OWScript_EndScriptLoop10: ; ccbe (3:4cbe) ld [wBreakOWScriptLoop], a jp IncreaseOWScriptPointerBy1 -OWScript_CloseTextBox: ; ccc6 (3:4cc6) - call CloseDialogueBox +OWScript_CloseAdvancedTextBox: ; ccc6 (3:4cc6) + call CloseAdvancedDialogueBox jp IncreaseOWScriptPointerBy1 OWScript_EndScriptCloseText: ; cccc (3:4ccc) - call OWScript_CloseTextBox + call OWScript_CloseAdvancedTextBox call OWScript_EndScriptLoop1 pop hl ret @@ -1726,7 +1785,7 @@ OWScript_AskQuestionJump: ; cce9 (3:4ce9) ld h, b call Func_c8ed ld a, [hCurMenuItem] - ld [wd415], a + ld [wScriptControlByte], a jr c, .asm_ccfe call GetOWSArgs3AfterPointer jr z, .asm_ccfe @@ -1802,12 +1861,13 @@ Func_cd76: ; cd76 (3:4d76) set 6, [hl] jp IncreaseOWScriptPointerBy1 -Func_cd83: ; cd83 (3:4d83) - ld a, [wd415] +; prints text arg 1 or arg 2 depending on wScriptControlByte. +OWScript_PrintVariableText: ; cd83 (3:4d83) + ld a, [wScriptControlByte] or a - jr nz, .asm_cd8c + jr nz, .printText call GetOWSArgs3AfterPointer -.asm_cd8c +.printText ld l, c ld h, b call Func_cc32 @@ -1828,7 +1888,7 @@ Unknown_cd98: jp IncreaseOWScriptPointerBy7 Func_cda8: ; cda8 (3:4da8) - ld a, [wd415] + ld a, [wScriptControlByte] or a jr nz, .asm_cdb1 call GetOWSArgs3AfterPointer @@ -1842,7 +1902,7 @@ OWScript_PrintTextCloseBox: ; cdb9 (3:4db9) ld l, c ld h, b call Func_cc32 - call CloseDialogueBox + call CloseAdvancedDialogueBox ld a, $1 ld [wBreakOWScriptLoop], a call IncreaseOWScriptPointerBy3 @@ -1950,8 +2010,8 @@ Func_ce6f: ; ce6f (3:4e6f) pop af jr asm_ce5d -Func_ce84: ; ce84 (3:4e84) - call Func_c135 +OWScript_CloseTextBox: ; ce84 (3:4e84) + call CloseTextBox jp IncreaseOWScriptPointerBy1 ; args: booster pack index, booster pack index, booster pack index @@ -2041,11 +2101,11 @@ asm_cf16 jr nz, asm_cf1f asm_cf19 - call Func_ccb9 + call SetScriptControlByteFail jp IncreaseOWScriptPointerBy4 asm_cf1f - call Func_ccb3 + call SetScriptControlBytePass call GetOWSArgs2AfterPointer jr z, asm_cf2a jp SetOWScriptPointer @@ -2099,11 +2159,11 @@ Func_cf53: ; cf53 (3:4f53) or a jr nz, Func_cf6d Func_cf67: ; cf67 (3:4f67) - call Func_ccb9 + call SetScriptControlByteFail jp IncreaseOWScriptPointerBy3 Func_cf6d: ; cf6d (3:4f6d) - call Func_ccb3 + call SetScriptControlBytePass call GetOWSArgs1AfterPointer jr z, .asm_cf78 jp SetOWScriptPointer @@ -2249,7 +2309,7 @@ Func_d03f: ; d03f (3:503f) call RemoveCardFromCollection jp IncreaseOWScriptPointerBy1 -OWScript_ScriptJump: ; d049 (3:5049) +OWScript_Jump: ; d049 (3:5049) call GetOWSArgs1AfterPointer jp SetOWScriptPointer @@ -2285,6 +2345,8 @@ OWScript_SetDialogName: ; d080 (3:5080) farcall SetNPCDialogName jp IncreaseOWScriptPointerBy2 +; Calls another OWSequence with a specified NPC +; Not confident enough to give it a name yet Func_d088: ; d088 (3:5088) ld a, c ld [wd3ab], a @@ -2341,20 +2403,20 @@ Func_d0d9: ; d0d9 (3:50d9) farcall Func_1c477 ld a, e cp c - jp nz, Func_d48a + jp nz, ScriptEventFailedNoJump ld a, d cp b - jp nz, Func_d48a - jp Func_d490 + jp nz, ScriptEventFailedNoJump + jp ScriptEventPassedTryJump Func_d0f2: ; d0f2 (3:50f2) ld a, [wPlayerXCoord] cp c - jp nz, Func_d48a + jp nz, ScriptEventFailedNoJump ld a, [wPlayerYCoord] cp b - jp nz, Func_d48a - jp Func_d490 + jp nz, ScriptEventFailedNoJump + jp ScriptEventPassedTryJump Func_d103: ; d103 (3:5103) ld a, [wd3aa] @@ -2507,7 +2569,7 @@ Func_d209: ; d209 (3:5209) ld hl, $5240 add hl, bc ld a, [hl] - call SetEventFlags + call MaxOutEventFlag pop bc ld hl, $5234 ld a, c @@ -2726,9 +2788,9 @@ Func_d3b9: ; d3b9 (3:53b9) set 6, [hl] jp IncreaseOWScriptPointerBy1 -Func_d3c9: ; d3c9 (3:53c9) +OWScript_GivePCPack: ; d3c9 (3:53c9) ld a, c - farcall Func_10a70 + farcall GivePCPack jp IncreaseOWScriptPointerBy2 Func_d3d1: ; d3d1 (3:53d1) @@ -2803,119 +2865,126 @@ Func_d43d: ; d43d (3:543d) set 6, [hl] jp IncreaseOWScriptPointerBy1 -OWScript_CustomModifyEventFlags: ; d44a (3:544a) +; sets the event flag in arg 1 to the value in arg 2 +OWScript_SetFlagValue: ; d44a (3:544a) ld a, c ld c, b - call ModifyEventFlags + call SetEventFlagValue jp IncreaseOWScriptPointerBy3 -Func_d452: ; d452 (3:5452) +OWScript_IncrementFlagValue: ; d452 (3:5452) ld a, c push af - call CheckIfEventFlagSet + call GetEventFlagValue inc a ld c, a pop af - call ModifyEventFlags + call SetEventFlagValue jp IncreaseOWScriptPointerBy2 -Func_d460: ; d460 (3:5460) +OWScript_JumpIfFlagZero1: ; d460 (3:5460) ld a, c - call CheckIfEventFlagSet + call GetEventFlagValue or a - jr z, asm_d46d -asm_d467 - call Func_ccb9 + jr z, OWScript_JumpIfFlagZero1.passTryJump + +.fail + call SetScriptControlByteFail ; 0 out wScriptControlByte jp IncreaseOWScriptPointerBy4 -asm_d46d - call Func_ccb3 +.passTryJump + call SetScriptControlBytePass ; ff wScriptControlByte call GetOWSArgs2AfterPointer - jr z, .asm_d478 + jr z, .noJumpTarget jp SetOWScriptPointer -.asm_d478 +.noJumpTarget jp IncreaseOWScriptPointerBy4 -OWScript_JumpIfFlagSet: ; d47b (3:547b) +OWScript_JumpIfFlagNonzero1: ; d47b (3:547b) ld a, c - call CheckIfEventFlagSet + call GetEventFlagValue or a - jr nz, asm_d46d - jr asm_d467 + jr nz, OWScript_JumpIfFlagZero1.passTryJump + jr OWScript_JumpIfFlagZero1.fail -Func_d484: ; d484 (3:5484) - call Func_d4b6 +; args - event flag, value, jump address +OWScript_JumpIfFlagEqual: ; d484 (3:5484) + call GetEventFlagValueBC cp c - jr z, Func_d490 + jr z, ScriptEventPassedTryJump -Func_d48a: ; d48a (3:548a) - call Func_ccb9 +ScriptEventFailedNoJump ; d48a (3:548a) + call SetScriptControlByteFail jp IncreaseOWScriptPointerBy5 -Func_d490: ; d490 (3:5490) - call Func_ccb3 +ScriptEventPassedTryJump ; d490 (3:5490) + call SetScriptControlBytePass call GetOWSArgs3AfterPointer - jr z, .asm_d49b + jr z, .noJumpAddress jp SetOWScriptPointer -.asm_d49b +.noJumpAddress jp IncreaseOWScriptPointerBy5 -Func_d49e: ; d49e (3:549e) - call Func_d4b6 +OWScript_JumpIfFlagNotEqual: ; d49e (3:549e) + call GetEventFlagValueBC cp c - jr nz, Func_d490 - jr Func_d48a + jr nz, ScriptEventPassedTryJump + jr ScriptEventFailedNoJump -Func_d4a6: ; d4a6 (3:54a6) - call Func_d4b6 +OWScript_JumpIfFlagNotLessThan: ; d4a6 (3:54a6) + call GetEventFlagValueBC cp c - jr nc, Func_d490 - jr Func_d48a + jr nc, ScriptEventPassedTryJump + jr ScriptEventFailedNoJump -Func_d4ae: ; d4ae (3:54ae) - call Func_d4b6 +OWScript_JumpIfFlagLessThan: ; d4ae (3:54ae) + call GetEventFlagValueBC cp c - jr c, Func_d490 ; 0xd4b2 $dc - jr Func_d48a ; 0xd4b4 $d4 + jr c, ScriptEventPassedTryJump + jr ScriptEventFailedNoJump -Func_d4b6: ; d4b6 (3:54b6) +; Gets event flag at c (OWScript defaults) +; c takes on the value of b as a side effect +GetEventFlagValueBC: ; d4b6 (3:54b6) ld a, c ld c, b - call CheckIfEventFlagSet + call GetEventFlagValue ret -OWScript_SetEventFlags: ; d4bc (3:54bc) +OWScript_MaxOutFlagValue: ; d4bc (3:54bc) ld a, c - call SetEventFlags + call MaxOutEventFlag jp IncreaseOWScriptPointerBy2 -Func_d4c3: ; d4c3 (3:54c3) +OWScript_ZeroOutFlagValue: ; d4c3 (3:54c3) ld a, c - call Func_cad0 + call ZeroOutEventFlag jp IncreaseOWScriptPointerBy2 -Func_d4ca: ; d4ca (3:54ca) +OWScript_JumpIfFlagNonzero2: ; d4ca (3:54ca) ld a, c - call CheckIfEventFlagSet + call GetEventFlagValue or a - jr z, asm_d4e6 -Func_d4d1: - call Func_ccb3 + jr z, OWScript_JumpIfFlagZero2.fail + +.passTryJump: + call SetScriptControlBytePass call GetOWSArgs2AfterPointer - jr z, .asm_d4dc + jr z, .noJumpArgs jp SetOWScriptPointer -.asm_d4dc +.noJumpArgs jp IncreaseOWScriptPointerBy4 -OWScript_JumpIfFlagNotSet: +OWScript_JumpIfFlagZero2: ld a, c - call CheckIfEventFlagSet + call GetEventFlagValue or a - jr z, Func_d4d1 -asm_d4e6 - call Func_ccb9 + jr z, OWScript_JumpIfFlagNonzero2.passTryJump + +.fail + call SetScriptControlByteFail jp IncreaseOWScriptPointerBy4 ; 0xd4ec @@ -2970,9 +3039,9 @@ OWSequence_d753: ; d753 (3:5753) db $02 run_script OWScript_PrintTextString tx Text05e3 - run_script OWScript_CloseTextBox - run_script Func_d088 ; run OWSequence with given npc (ID corresponds to a row in the wd34a table, i dont know why they correspond to what number though) - db $07 + run_script OWScript_CloseAdvancedTextBox + run_script Func_d088 + db SAM dw OWSequence_d779 run_script OWScript_EndScriptLoop1 ret @@ -2988,7 +3057,7 @@ OWSequence_d779: ; d779 (03:5779) db DRMASON run_script OWScript_PrintTextString tx Text05e5 - run_script Func_ce84 + run_script OWScript_CloseTextBox run_script Func_ce4a db $82 db $58 @@ -2996,7 +3065,7 @@ OWSequence_d779: ; d779 (03:5779) db $01 run_script Func_d055 db $03 - run_script OWScript_CloseTextBox + run_script OWScript_CloseAdvancedTextBox run_script Func_d088 db $01 db $94 @@ -3024,21 +3093,25 @@ WaterClubAfterDuel: ;e157 (3:6157) ret .after_duel_table - dw $1f1f + db SARA + db SARA dw OWSequence_BeatSara dw OWSequence_LostToSara - dw $2020 + db AMANDA + db AMANDA dw OWSequence_BeatAmanda dw OWSequence_LostToAmanda - dw $2121 - dw $626c - dw $6260 + db JOSHUA + db JOSHUA + dw OWSequence_BeatJoshua + dw OWSequence_LostToJoshua - dw $2222 - dw $6322 - dw $6344 + db AMY + db AMY + dw OWSequence_BeatAmy + dw OWSequence_LostToAmy db $00 OWSequence_Sara: ; e177 (3:6177) @@ -3055,14 +3128,14 @@ OWSequence_Sara: ; e177 (3:6177) run_script OWScript_PrintTextString tx Text042f run_script OWScript_StartBattle - db 2 + db PRIZES_2 db WATERFRONT_POKEMON_DECK_ID ; 6189 db MUSIC_DUEL_THEME_1 run_script OWScript_EndScriptCloseText OWSequence_BeatSara: ; e18c (3:618c) start_script - run_script OWScript_SetEventFlags + run_script OWScript_MaxOutFlagValue db EVENT_BEAT_SARA run_script OWScript_PrintTextString tx Text0430 @@ -3093,14 +3166,14 @@ OWSequence_Amanda: ; e19e (03:619e) run_script OWScript_PrintTextString tx Text0436 run_script OWScript_StartBattle - db 03 + db PRIZES_3 db LONELY_FRIENDS_DECK_ID db MUSIC_DUEL_THEME_1 run_script OWScript_EndScriptCloseText OWSequence_BeatAmanda: ; e1b3 (03:61b3) start_script - run_script OWScript_SetEventFlags + run_script OWScript_MaxOutFlagValue db EVENT_BEAT_AMANDA run_script OWScript_PrintTextString tx Text0437 @@ -3118,41 +3191,332 @@ OWSequence_LostToAmanda: ; e1c1 (03:61c1) tx Text0439 OWSequence_NotReadyToSeeAmy: - INCROM $e1c5, $e21c + start_script + run_script Func_d0f2 + db $12 + db $08 + dw $61ec + run_script Func_d0f2 + db $14 + db $08 + dw $61f2 + run_script Func_d0f2 + db $18 + db $08 + dw $61f8 + run_script OWScript_MovePlayer + db $02 + db $04 + run_script Func_ce4a + db $13 + db $62 + run_script OWScript_PrintTextString + tx Text043a + run_script Func_d0f2 + db $12 + db $0a + dw $61fe + run_script Func_d0f2 + db $14 + db $0a + dw $6202 + run_script Func_ce4a + db $15 + db $62 + run_script OWScript_EndScriptCloseText + +.ows_e1ec + run_script Func_ce4a + db $06 + db $62 + run_script OWScript_Jump + dw $61d5 + run_script Func_ce4a + db $0b + db $62 + run_script OWScript_Jump + dw $61d5 + run_script Func_ce4a + db $0f + db $62 + run_script OWScript_Jump + dw $61d5 + run_script Func_ce4a + db $18 + db $62 + run_script OWScript_EndScriptCloseText +; 0xe202 + + INCROM $e202, $e21c OWSequence_Joshua: start_script - run_script OWScript_JumpIfFlagNotSet + run_script OWScript_JumpIfFlagZero2 db EVENT_BEAT_AMANDA dw .sara_and_amanda_not_beaten - run_script OWScript_JumpIfFlagNotSet + run_script OWScript_JumpIfFlagZero2 db EVENT_BEAT_SARA dw .sara_and_amanda_not_beaten - run_script OWScript_ScriptJump + run_script OWScript_Jump 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_SetFlagValue + db EVENT_JOSHUA_STATE + db JOSHUA_TALKED run_script OWScript_PrintTextString tx Text043b run_script OWScript_EndScriptCloseText + .beat_sara_and_amanda - run_script OWScript_JumpIfFlagSet - db $33 - dw $623c - run_script OWScript_CustomModifyEventFlags - db $33 - db $01 + run_script OWScript_JumpIfFlagNonzero1 + db EVENT_JOSHUA_STATE + dw .already_talked + run_script OWScript_SetFlagValue + db EVENT_JOSHUA_STATE + db JOSHUA_TALKED run_script OWScript_PrintTextString tx Text043b run_script OWScript_PrintTextString tx Text043c - run_script Func_d484 - db $33 +.already_talked + run_script OWScript_JumpIfFlagEqual + db EVENT_JOSHUA_STATE + db JOSHUA_TALKED + dw NO_JUMP + run_script OWScript_PrintVariableText + tx Text043d + tx Text043e + run_script OWScript_AskQuestionJump + tx Text043f + dw .startDuel + run_script OWScript_JumpIfFlagEqual + db EVENT_JOSHUA_STATE + db JOSHUA_TALKED + dw NO_JUMP + run_script OWScript_PrintVariableText + tx Text0440 + tx Text0441 + run_script OWScript_EndScriptCloseText + +.startDuel: + run_script OWScript_PrintTextString + tx Text0442 + run_script OWScript_GivePCPack + db $04 + run_script OWScript_StartBattle + db PRIZES_4 + db SOUND_OF_THE_WAVES_DECK_ID + db MUSIC_DUEL_THEME_1 + run_script OWScript_EndScriptCloseText + +OWSequence_LostToJoshua: ; e260 (3:6260) + start_script + run_script OWScript_JumpIfFlagEqual + db EVENT_JOSHUA_STATE + db JOSHUA_TALKED + dw NO_JUMP + run_script OWScript_PrintVariableText + tx Text0443 + tx Text0444 + run_script OWScript_EndScriptCloseText + +OWSequence_BeatJoshua: ; e26c (3:626c) + start_script + run_script OWScript_JumpIfFlagEqual + db EVENT_JOSHUA_STATE + db JOSHUA_TALKED + dw NO_JUMP + run_script OWScript_PrintVariableText + tx Text0445 + tx Text0446 + run_script OWScript_GiveBoosterPacks + db BOOSTER_MYSTERY_WATER_COLORLESS + db BOOSTER_MYSTERY_WATER_COLORLESS + db NO_BOOSTER + run_script OWScript_JumpIfFlagEqual + db EVENT_JOSHUA_STATE + db JOSHUA_TALKED + dw NO_JUMP + run_script OWScript_PrintVariableText + tx Text0447 + tx Text0448 + run_script OWScript_JumpIfFlagNotEqual + db EVENT_JOSHUA_STATE + db JOSHUA_BEATEN + dw .firstJoshuaWin + run_script OWScript_EndScriptCloseText + +.firstJoshuaWin: + run_script OWScript_SetFlagValue + db EVENT_JOSHUA_STATE + db JOSHUA_BEATEN + run_script OWScript_PrintTextString + tx Text0449 + run_script OWScript_CloseTextBox + run_script Func_ce26 + dw $62a1 + run_script OWScript_PrintTextString + tx Text044a + run_script Func_cfc6 + db $00 + run_script OWScript_CloseAdvancedTextBox + run_script Func_d088 + db AMY + dw OWSequence_MeetAmy + run_script OWScript_EndScriptLoop1 +; 0xe2a0 + + INCROM $e2a0, $e2d1 + +OWSequence_MeetAmy: ; e2d1 (3:62d1) + start_script + run_script OWScript_PrintTextString + tx Text044b + run_script OWScript_SetDialogName + db JOSHUA + run_script OWScript_PrintTextString + tx Text044c + run_script OWScript_SetDialogName + db AMY + run_script OWScript_PrintTextString + tx Text044d + run_script OWScript_CloseTextBox + run_script Func_d095 + db $09 + db $2f + db $10 + run_script OWScript_DoFrames + db $20 + run_script Func_d095 + db $04 + db $0e + db $00 + run_script Func_d0be + db $14 + db $04 + run_script Func_d055 + db $03 + run_script OWScript_MovePlayer + db $03 db $01 + run_script Func_d055 + db $00 + run_script OWScript_MovePlayer + db $00 + db $01 + run_script OWScript_MovePlayer + db $00 + db $01 + run_script Func_ce6f + db $21 + db $ab + db $62 + run_script OWScript_PrintTextString + tx Text044e + run_script OWScript_Jump + dw OWSequence_Amy.askConfirmDuel + +OWSequence_Amy: ; e304 (3:6304) + start_script + run_script OWScript_JumpIfFlagNonzero2 + db EVENT_BEAT_AMY + dw OWJump_TalkToAmyAgain + run_script OWScript_PrintTextString + tx Text044f +.askConfirmDuel + run_script OWScript_AskQuestionJump + tx Text0450 + dw .startDuel + +.denyDuel + run_script OWScript_PrintTextString + tx Text0451 + run_script Func_d0d9 + db $14 + db $04 + dw OWSequence_LostToAmy.ows_e34e + run_script OWScript_EndScriptCloseText + +.startDuel + run_script OWScript_PrintTextString + tx Text0452 + run_script OWScript_StartBattle + db PRIZES_6 + db GO_GO_RAIN_DANCE_DECK_ID + db MUSIC_DUEL_THEME_2 + run_script OWScript_EndScriptCloseText + +OWSequence_BeatAmy: ; e322 (3:6322) + start_script + run_script OWScript_PrintTextString + tx Text0453 + run_script OWScript_JumpIfFlagNonzero2 + db EVENT_BEAT_AMY + dw .beatAmyCommon + run_script OWScript_PrintTextString + tx Text0454 + run_script OWScript_MaxOutFlagValue + db EVENT_BEAT_AMY + run_script Func_d04f + run_script Func_d125 + db EVENT_BEAT_AMY + run_script Func_d435 + db $03 + run_script OWScript_PrintTextString + tx Text0455 +.beatAmyCommon + run_script OWScript_GiveBoosterPacks + db BOOSTER_LABORATORY_WATER + db BOOSTER_LABORATORY_WATER + db NO_BOOSTER + run_script OWScript_PrintTextString + tx Text0456 + run_script Func_d0d9 + db $14 + db $04 + dw OWSequence_LostToAmy.ows_e34e + run_script OWScript_EndScriptCloseText + +OWSequence_LostToAmy: ; e344 (3:6344) + start_script + run_script OWScript_PrintTextString + tx Text0457 + run_script Func_d0d9 + db $14 + db $04 + dw .ows_e34e + run_script OWScript_EndScriptCloseText + +.ows_e34e + run_script Func_d095 + db $08 + db $2e + db $10 + run_script Func_d0be + db $16 + db $04 + run_script OWScript_EndScriptCloseText + +OWJump_TalkToAmyAgain: ; e356 (3:6356) + run_script OWScript_PrintTextString + tx Text0458 + run_script OWScript_AskQuestionJump + tx Text0450 + dw .startDuel + run_script OWScript_Jump + dw OWSequence_Amy.denyDuel + +.startDuel + run_script OWScript_PrintTextString + tx Text0459 + run_script OWScript_StartBattle + db PRIZES_6 + db GO_GO_RAIN_DANCE_DECK_ID + db MUSIC_DUEL_THEME_2 + run_script OWScript_EndScriptCloseText +; 0xe369 - INCROM $e23f, $e52c + INCROM $e369, $e52c FindEndOfBattleScript: ; e52c (3:652c) ld c, $0 diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm index 2ebb399..0c91398 100644 --- a/src/engine/bank04.asm +++ b/src/engine/bank04.asm @@ -239,38 +239,39 @@ Func_10548: ; 10548 (4:4548) Func_10756: ; 10756 (4:4756) INCROM $10756, $10a70 -Func_10a70: ; 10a70 (4:4a70) +; gives the pc pack described in a +GivePCPack: ; 10a70 (4:4a70) push hl push bc push de ld b, a - ld c, $f + ld c, $f ; number of packs possible ld hl, wPCPacks -.asm_10a79 +.searchLoop1 ld a, [hli] and $7f cp b - jr z, .asm_10a97 + jr z, .quit dec c - jr nz, .asm_10a79 + jr nz, .searchLoop1 ld c, $f ld hl, wPCPacks -.asm_10a87 +.findFreeSlotLoop ld a, [hl] and $7f - jr z, .asm_10a93 + jr z, .foundFreeSlot inc hl dec c - jr nz, .asm_10a87 + jr nz, .findFreeSlotLoop debug_ret - jr .asm_10a97 + jr .quit -.asm_10a93 +.foundFreeSlot ld a, b - or $80 + or $80 ; mark pack as unopened ld [hl], a -.asm_10a97 +.quit pop de pop bc pop hl @@ -332,7 +333,7 @@ Func_10dba: ; 10dba (4:4dba) push af ld hl, $4df0 call JumpToFunctionInTable - farcall Func_c135 + farcall CloseTextBox call DoFrameIfLCDEnabled pop af ret @@ -457,7 +458,7 @@ Func_10f4a: ; 10f4a (4:4f4a) jr nz, .asm_10f5f ld c, a ld a, $1e - farcall CheckIfEventFlagSet + farcall GetEventFlagValue or a ld a, c jr nz, .asm_10f5f @@ -530,7 +531,7 @@ Func_10fde: ; 10fde (4:4fde) ld [wd33c], a call Func_12ab5 ld a, $3e - farcall CheckIfEventFlagSet + farcall GetEventFlagValue or a jr nz, .asm_11015 ld c, SPRITE_ANIM_FIELD_0F @@ -969,17 +970,17 @@ Func_11f4e: ; 11f4e (4:5f4e) OverworldScriptTable: ; 1217b (4:617b) dw OWScript_EndScriptLoop1 - dw OWScript_CloseTextBox + dw OWScript_CloseAdvancedTextBox dw OWScript_PrintTextString dw Func_ccdc dw OWScript_AskQuestionJump dw OWScript_StartBattle - dw Func_cd83 + dw OWScript_PrintVariableText dw Func_cda8 dw OWScript_PrintTextCloseBox dw Func_cdcb dw Func_ce26 - dw Func_ce84 + dw OWScript_CloseTextBox dw OWScript_GiveBoosterPacks dw Func_cf0c dw Func_cf12 @@ -995,7 +996,7 @@ OverworldScriptTable: ; 1217b (4:617b) dw Func_d025 dw Func_d032 dw Func_d03f - dw OWScript_ScriptJump + dw OWScript_Jump dw Func_d04f dw Func_d055 dw OWScript_MovePlayer @@ -1034,7 +1035,7 @@ OverworldScriptTable: ; 1217b (4:617b) dw Func_cd76 dw Func_d39d dw Func_d3b9 - dw Func_d3c9 + dw OWScript_GivePCPack dw Func_d3d1 dw Func_d3d4 dw Func_d3e0 @@ -1056,18 +1057,18 @@ OverworldScriptTable: ; 1217b (4:617b) dw OWScript_EndScriptLoop4 dw OWScript_EndScriptLoop5 dw OWScript_EndScriptLoop6 - dw OWScript_CustomModifyEventFlags - dw Func_d460 - dw OWScript_JumpIfFlagSet - dw Func_d484 - dw Func_d49e - dw Func_d4a6 - dw Func_d4ae - dw OWScript_SetEventFlags - dw Func_d4c3 - dw Func_d4ca - dw OWScript_JumpIfFlagNotSet - dw Func_d452 + dw OWScript_SetFlagValue + dw OWScript_JumpIfFlagZero1 + dw OWScript_JumpIfFlagNonzero1 + dw OWScript_JumpIfFlagEqual + dw OWScript_JumpIfFlagNotEqual + dw OWScript_JumpIfFlagNotLessThan + dw OWScript_JumpIfFlagLessThan + dw OWScript_MaxOutFlagValue + dw OWScript_ZeroOutFlagValue + dw OWScript_JumpIfFlagNonzero2 + dw OWScript_JumpIfFlagZero2 + dw OWScript_IncrementFlagValue dw OWScript_EndScriptLoop7 dw OWScript_EndScriptLoop8 dw OWScript_EndScriptLoop9 diff --git a/src/engine/bank07.asm b/src/engine/bank07.asm index ecc281d..25534f1 100644 --- a/src/engine/bank07.asm +++ b/src/engine/bank07.asm @@ -256,7 +256,22 @@ Func_1c58e: ; 1c58e (7:458e) INCROM $1c5b9, $1c5e9 Func_1c5e9: ; 1c5e9 (7:45e9) - INCROM $1c5e9, $1c610 + push hl + push bc + ld a, [wd3aa] + ld l, $07 + call Func_39ad + ld a, [hl] + ld bc, $fffd + add hl, bc + ld [hl], a + call Func_1c58e + pop bc + pop hl + ret +; 0x1c5ff + + INCROM $1c5ff, $1c610 Func_1c610: ; 1c610 (7:4610) INCROM $1c610, $1c6f8 diff --git a/src/engine/bank1c.asm b/src/engine/bank1c.asm index 7b5cbc5..7fa5bf4 100644 --- a/src/engine/bank1c.asm +++ b/src/engine/bank1c.asm @@ -4,7 +4,7 @@ Func_70000: ; 70000 (1c:4000) ret nz ld b, $1 ld a, $22 - farcall CheckIfEventFlagSet + farcall GetEventFlagValue or a jr z, .asm_70013 ld b, $2 @@ -294,7 +294,7 @@ Func_70214: ; 70214 (1c:4214) ret nz ld hl, Unknown_7024a ld a, $10 - farcall CheckIfEventFlagSet + farcall GetEventFlagValue ld c, $8 .asm_70227 push bc diff --git a/src/engine/home.asm b/src/engine/home.asm index 450d9c1..62eaa62 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -1586,7 +1586,7 @@ Func_08ef: ; 08ef (0:08ef) ld hl, wcadc ld a, [hl] or a - jr z, .asm_902 ; for the purpose of this, we made it 0 earlier + jr z, .asm_902 dec [hl] inc hl .asm_8f8 @@ -1605,9 +1605,9 @@ Func_08ef: ; 08ef (0:08ef) ld c, [hl] inc hl ld b, [hl] - inc hl ; get pointer from wcad6/7 - dec [hl] ; dec wcad8 (was 1) - inc hl ; wcad9 + inc hl + dec [hl] + inc hl jr nz, .asm_914 dec hl ld [hl], $8 @@ -10803,7 +10803,7 @@ GameEvent_Credits: ; 3911 (0:3911) Func_3917: ; 3917 (0:3917) ld a, $22 - farcall CheckIfEventFlagSet + farcall GetEventFlagValue call EnableSRAM ld [s0a00a], a call DisableSRAM diff --git a/src/macros/constants.asm b/src/macros/constants.asm index 177fcd6..c841972 100644 --- a/src/macros/constants.asm +++ b/src/macros/constants.asm @@ -10,3 +10,10 @@ const: MACRO \1 EQU const_value const_value = const_value + 1 ENDM + +flag_def: MACRO +\1 EQU const_value +const_value = const_value + 1 +db \2 +db \3 +ENDM diff --git a/src/macros/scripts.asm b/src/macros/scripts.asm index 2fa15fb..2bf40e4 100644 --- a/src/macros/scripts.asm +++ b/src/macros/scripts.asm @@ -15,17 +15,17 @@ ENDM const_def const OWScript_EndScriptLoop1_index ; $00 - const OWScript_CloseTextBox_index ; $01 + const OWScript_CloseAdvancedTextBox_index ; $01 const OWScript_PrintTextString_index ; $02 const Func_ccdc_index ; $03 const OWScript_AskQuestionJump_index ; $04 const OWScript_StartBattle_index ; $05 - const Func_cd83_index ; $06 + const OWScript_PrintVariableText_index ; $06 const Func_cda8_index ; $07 const OWScript_PrintTextCloseBox_index ; $08 const Func_cdcb_index ; $09 const Func_ce26_index ; $0a - const Func_ce84_index ; $0b + const OWScript_CloseTextBox_index ; $0b const OWScript_GiveBoosterPacks_index ; $0c const Func_cf0c_index ; $0d const Func_cf12_index ; $0e @@ -41,7 +41,7 @@ ENDM const Func_d025_index ; $18 const Func_d032_index ; $19 const Func_d03f_index ; $1a - const OWScript_ScriptJump_index ; $1b + const OWScript_Jump_index ; $1b const Func_d04f_index ; $1c const Func_d055_index ; $1d const OWScript_MovePlayer_index ; $1e @@ -80,7 +80,7 @@ ENDM const Func_cd76_index ; $3f const Func_d39d_index ; $40 const Func_d3b9_index ; $41 - const Func_d3c9_index ; $42 + const OWScript_GivePCPack_index ; $42 const Func_d3d1_index ; $43 const Func_d3d4_index ; $44 const Func_d3e0_index ; $45 @@ -102,18 +102,18 @@ ENDM const OWScript_EndScriptLoop4_index ; $55 const OWScript_EndScriptLoop5_index ; $56 const OWScript_EndScriptLoop6_index ; $57 - const OWScript_CustomModifyEventFlags_index ; $58 - const Func_d460_index ; $59 - const OWScript_JumpIfFlagSet_index ; $5a - const Func_d484_index ; $5b - const Func_d49e_index ; $5c - const Func_d4a6_index ; $5d - const Func_d4ae_index ; $5e - const OWScript_SetEventFlags_index ; $5f - const Func_d4c3_index ; $60 - const Func_d4ca_index ; $61 - const OWScript_JumpIfFlagNotSet_index ; $62 - const Func_d452_index ; $63 + const OWScript_SetFlagValue_index ; $58 + const OWScript_JumpIfFlagZero1_index ; $59 + const OWScript_JumpIfFlagNonzero1_index ; $5a + const OWScript_JumpIfFlagEqual_index ; $5b + const OWScript_JumpIfFlagNotEqual_index ; $5c + const OWScript_JumpIfFlagNotLessThan_index ; $5d + const OWScript_JumpIfFlagLessThan_index ; $5e + const OWScript_MaxOutFlagValue_index ; $5f + const OWScript_ZeroOutFlagValue_index ; $60 + const OWScript_JumpIfFlagNonzero2_index ; $61 + const OWScript_JumpIfFlagZero2_index ; $62 + const OWScript_IncrementFlagValue_index ; $63 const OWScript_EndScriptLoop7_index ; $64 const OWScript_EndScriptLoop8_index ; $65 const OWScript_EndScriptLoop9_index ; $66 diff --git a/src/wram.asm b/src/wram.asm index 7ae9e59..a689451 100644 --- a/src/wram.asm +++ b/src/wram.asm @@ -1885,9 +1885,7 @@ wPCPackSelection:: ; d11d ; 7th bit of each pack corresponds to whether or not it's been read wPCPacks:: ; d11e - ds $c - - ds $3 + ds $f wPCLastDirectionPressed:: ; d12d ds $1 @@ -2122,7 +2120,8 @@ wd3bb:: ; d3bb wd3d0:: ; d3d0 ds $1 -wd3d1:: ; d3d1 +; the bits relevant to the currently worked on flag, obtained from EventFlagMods +wLoadedFlagBits:: ; d3d1 ds $1 wEventFlags:: @@ -2138,7 +2137,8 @@ wBreakOWScriptLoop:: ; d412 wOWScriptPointer:: ; d413 ds $2 -wd415:: ; d415 +; generally set to ff when a flag check passes, 0 otherwise +wScriptControlByte:: ; d415 ds $1 wd416:: ; d416 |