diff --git a/asm/include/main_0204B018.inc b/asm/include/main_0204B018.inc index c71c40d1..89887f84 100644 --- a/asm/include/main_0204B018.inc +++ b/asm/include/main_0204B018.inc @@ -4,7 +4,7 @@ .public Debug_Print0 .public GAME_MODE .public InitDungeonListScriptVars -.public InitScenarioScriptVars +.public InitProgress .public InitWorldMapScriptVars .public SaveScriptVariableValue .public SaveScriptVariableValueAtIndex diff --git a/asm/include/main_0204C408.inc b/asm/include/main_0204C408.inc index 38d08197..0fae2d6c 100644 --- a/asm/include/main_0204C408.inc +++ b/asm/include/main_0204C408.inc @@ -10,4 +10,4 @@ .public SaveScriptVariableValue .public SaveScriptVariableValueAtIndex .public ZinitScriptVariable -.public _0209DFA0 +.public SCENARIO_CALC_DEBUG_MSG diff --git a/asm/include/main_02058F24.inc b/asm/include/main_02058F24.inc index beda0058..521f0473 100644 --- a/asm/include/main_02058F24.inc +++ b/asm/include/main_02058F24.inc @@ -360,7 +360,7 @@ .public SetCollectionMenuField0x1B2 .public SetPokemonJoined .public SetQuestionMarks -.public SetScenarioScriptVar +.public UpdateProgress .public SetSpecialEpisodeType .public SetSpriteIdForAnimationControl .public ShowPortraitInPortraitBox diff --git a/asm/include/overlay_01.inc b/asm/include/overlay_01.inc index d6eb49ae..659517c0 100644 --- a/asm/include/overlay_01.inc +++ b/asm/include/overlay_01.inc @@ -244,7 +244,7 @@ .public SetAnimationForAnimationControl .public SetIrqFlag .public SetMainTeamName -.public SetScenarioScriptVar +.public UpdateProgress .public SetSpriteIdForAnimationControl .public ShowKeyboard .public ShowStringIdInDialogueBox diff --git a/asm/include/overlay_11.inc b/asm/include/overlay_11.inc index a3f94043..78902f2b 100644 --- a/asm/include/overlay_11.inc +++ b/asm/include/overlay_11.inc @@ -490,7 +490,7 @@ .public SetPortraitEmotion .public SetPortraitLayout .public SetPortraitOffset -.public SetScenarioScriptVar +.public UpdateProgress .public SetTeamSetupHeroAndPartnerOnly .public SetTeamSetupHeroOnly .public SetupAndShowKeyboard @@ -632,7 +632,7 @@ .public CompareScriptVariablesVeneer .public CompareScriptVarWithParam .public LoadAndCompareScriptVars -.public sub_0204C5DC +.public LoadScriptVarValuePair .public sub_0204C6C8 .public sub_0204C734 .public sub_0204C7AC diff --git a/asm/include/overlay_26.inc b/asm/include/overlay_26.inc index 851130b2..25f78dc2 100644 --- a/asm/include/overlay_26.inc +++ b/asm/include/overlay_26.inc @@ -42,7 +42,7 @@ .public sub_02046740 .public sub_0204677C .public sub_0204AFD0 -.public sub_0204C5DC +.public LoadScriptVarValuePair .public sub_0204E770 .public sub_0204E780 .public sub_0204F0A0 diff --git a/asm/main_0204B018.s b/asm/main_0204B018.s index fa97908a..d55b908b 100644 --- a/asm/main_0204B018.s +++ b/asm/main_0204B018.s @@ -219,7 +219,7 @@ _0204B118: mov r0, #0 mov r1, #0x4d bl ZinitScriptVariable - bl InitScenarioScriptVars + bl InitProgress bl InitWorldMapScriptVars bl InitDungeonListScriptVars ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} diff --git a/asm/main_0204C408.s b/asm/main_0204C6C8.s similarity index 52% rename from asm/main_0204C408.s rename to asm/main_0204C6C8.s index 153c7ed1..7ea7b7df 100644 --- a/asm/main_0204C408.s +++ b/asm/main_0204C6C8.s @@ -3,207 +3,6 @@ .text - arm_func_start DumpScriptVariableValues -DumpScriptVariableValues: ; 0x0204C408 - stmdb sp!, {r4, lr} - mov r4, r0 - bl EventFlagBackup - ldr r1, _0204C42C ; =SCRIPT_VARS_VALUES - mov r0, r4 - mov r2, #0x400 - bl MemcpySimple - mov r0, #1 - ldmia sp!, {r4, pc} - .align 2, 0 -_0204C42C: .word SCRIPT_VARS_VALUES - arm_func_end DumpScriptVariableValues - - arm_func_start RestoreScriptVariableValues -RestoreScriptVariableValues: ; 0x0204C430 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r1, #0 - mov r4, r0 - add r0, sp, #0 - mov r2, r1 - bl LoadScriptVariableRaw - ldr r0, _0204C484 ; =SCRIPT_VARS_VALUES - mov r1, r4 - mov r2, #0x400 - bl MemcpySimple - ldr r1, [sp] - ldr r0, [sp, #4] - ldrsh r1, [r1, #0xa] - ldr r0, [r0] - cmp r1, r0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - add sp, sp, #8 - ldmia sp!, {r4, pc} - .align 2, 0 -_0204C484: .word SCRIPT_VARS_VALUES - arm_func_end RestoreScriptVariableValues - - arm_func_start InitScenarioScriptVars -InitScenarioScriptVars: ; 0x0204C488 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r1, #0 - mov r2, r1 - mov r0, #2 - bl SetScenarioScriptVar - mov r1, #0 - mov r2, r1 - mov r0, #3 - bl SetScenarioScriptVar - mov r1, #0 - mov r2, r1 - mov r0, #4 - bl SetScenarioScriptVar - mov r1, #0 - mov r2, r1 - mov r0, #5 - bl SetScenarioScriptVar - mov r1, #0 - mov r2, r1 - mov r0, #6 - bl SetScenarioScriptVar - mov r1, #0 - mov r0, #7 - mov r2, r1 - bl SetScenarioScriptVar - mov r1, #0 - mov r0, #8 - mov r2, r1 - bl SetScenarioScriptVar - mov r1, #0 - mov r0, #9 - mov r2, r1 - bl SetScenarioScriptVar - mov r1, #0 - mov r0, #0xa - mov r2, r1 - bl SetScenarioScriptVar - mov r1, #0 - mov r0, #0xb - mov r2, r1 - bl SetScenarioScriptVar - mov r1, #0 - mov r0, #0xc - mov r2, r1 - bl SetScenarioScriptVar - mov r0, #0 - mov r1, #0x11 - bl ZinitScriptVariable - mov r0, #0 - mov r1, #0x1b - bl ZinitScriptVariable - mov r8, #0 - mov r6, #0x1a - mov r7, r8 - mov r5, r8 - mov r4, r6 -_0204C568: - mov r2, r8, lsl #0x10 - mov r0, r7 - mov r1, r6 - mov r3, r7 - mov r2, r2, lsr #0x10 - bl SaveScriptVariableValueAtIndex - add r0, r8, #4 - mov r2, r0, lsl #0x10 - mov r0, r5 - mov r1, r4 - mov r3, r5 - mov r2, r2, lsr #0x10 - bl SaveScriptVariableValueAtIndex - add r8, r8, #1 - cmp r8, #4 - blt _0204C568 - mov r0, #0 - mov r2, r0 - mov r1, #0x13 - bl SaveScriptVariableValue - mov r1, #0x14 - sub r2, r1, #0x15 - mov r0, #0 - bl SaveScriptVariableValue - mov r0, #0 - mov r2, r0 - mov r1, #0x6f - bl SaveScriptVariableValue - ldmia sp!, {r4, r5, r6, r7, r8, pc} - arm_func_end InitScenarioScriptVars - - arm_func_start sub_0204C5DC -sub_0204C5DC: ; 0x0204C5DC - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r0, #0 - mov r4, r2 - mov r1, r6 - mov r2, r0 - bl LoadScriptVariableValueAtIndex - str r0, [r5] - mov r1, r6 - mov r0, #0 - mov r2, #1 - bl LoadScriptVariableValueAtIndex - str r0, [r4] - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_0204C5DC - - arm_func_start SetScenarioScriptVar -SetScenarioScriptVar: ; 0x0204C618 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #0xc - mov r8, r0 - mov r7, r1 - mov r0, #0 - mov r6, r2 - mov r1, r8 - mov r2, r0 - bl LoadScriptVariableValueAtIndex - mov r5, r0 - mov r1, r8 - mov r0, #0 - mov r2, #1 - bl LoadScriptVariableValueAtIndex - mov r4, r0 - stmia sp, {r4, r7} - ldr r1, _0204C6C4 ; =_0209DFA0 - mov r0, #9 - mov r2, r8 - mov r3, r5 - str r6, [sp, #8] - bl Debug_Print - cmp r8, #3 - bne _0204C694 - cmp r7, r5 - cmpeq r6, r4 - beq _0204C694 - mov r0, #0 - mov r2, r0 - mov r1, #0x33 - bl SaveScriptVariableValue -_0204C694: - mov r0, #0 - mov r1, r8 - mov r2, r0 - mov r3, r7 - bl SaveScriptVariableValueAtIndex - mov r1, r8 - mov r3, r6 - mov r0, #0 - mov r2, #1 - bl SaveScriptVariableValueAtIndex - add sp, sp, #0xc - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0204C6C4: .word _0209DFA0 - arm_func_end SetScenarioScriptVar - arm_func_start sub_0204C6C8 sub_0204C6C8: ; 0x0204C6C8 stmdb sp!, {r3, r4, r5, r6, r7, lr} diff --git a/asm/main_02058F24.s b/asm/main_02058F24.s index 27a4a68c..2996cc22 100644 --- a/asm/main_02058F24.s +++ b/asm/main_02058F24.s @@ -16155,7 +16155,7 @@ _020661B0: mov r0, #2 mov r1, #0x36 mov r2, #0 - bl SetScenarioScriptVar + bl UpdateProgress mov r0, #2 bl LoadOverlay mov r0, #0 @@ -16225,7 +16225,7 @@ _020662BC: mov r0, #2 mov r1, #0x33 mov r2, #0 - bl SetScenarioScriptVar + bl UpdateProgress mov r0, #2 bl LoadOverlay mov r0, #1 @@ -16256,7 +16256,7 @@ _02066330: mov r0, #2 mov r1, #0x34 mov r2, #0 - bl SetScenarioScriptVar + bl UpdateProgress mov r0, #2 bl LoadOverlay mov r0, #1 diff --git a/asm/main_rodata_0209CECC.s b/asm/main_rodata_0209CECC.s index a3d3b79b..e1f309f0 100644 --- a/asm/main_rodata_0209CECC.s +++ b/asm/main_rodata_0209CECC.s @@ -860,8 +860,8 @@ _0209DF70: .byte 0x00, 0x00, 0x00, 0x00 .byte 0xB4, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .word _0209CFA4 - .global _0209DFA0 -_0209DFA0: + .global SCENARIO_CALC_DEBUG_MSG +SCENARIO_CALC_DEBUG_MSG: .byte 0x53, 0x43, 0x45, 0x4E .byte 0x41, 0x52, 0x49, 0x4F, 0x20, 0x43, 0x41, 0x4C, 0x43, 0x20, 0x5B, 0x25, 0x33, 0x64, 0x5D, 0x20 .byte 0x25, 0x34, 0x64, 0x20, 0x25, 0x34, 0x64, 0x20, 0x2D, 0x3E, 0x20, 0x25, 0x34, 0x64, 0x20, 0x25 diff --git a/asm/overlay_01.s b/asm/overlay_01.s index f37d4435..b2500bea 100644 --- a/asm/overlay_01.s +++ b/asm/overlay_01.s @@ -13063,7 +13063,7 @@ _02333DA4: mov r0, #3 mov r1, #0x1c mov r2, #0 - bl SetScenarioScriptVar + bl UpdateProgress mov r0, #2 mov r1, #6 mov r2, #1 diff --git a/asm/overlay_11.s b/asm/overlay_11.s index 5bee6850..9716904a 100644 --- a/asm/overlay_11.s +++ b/asm/overlay_11.s @@ -3246,7 +3246,7 @@ _022DEE84: ; 0x022DEE84 mov r2, r0 mov r1, r4 mov r0, r3, asr #0x10 - bl SetScenarioScriptVar + bl UpdateProgress b _022E2474 _022DEEBC: ; 0x022DEEBC ldrh r0, [r6] @@ -3255,7 +3255,7 @@ _022DEEBC: ; 0x022DEEBC mov r1, #0 mov r2, r1 mov r0, r0, asr #0x10 - bl SetScenarioScriptVar + bl UpdateProgress b _022E2474 _022DEEDC: ; 0x022DEEDC ldrh r0, [r6] @@ -11763,7 +11763,7 @@ _022E6474: add r1, sp, #0x50 add r2, sp, #0x4c mov r0, #2 - bl sub_0204C5DC + bl LoadScriptVarValuePair ldr r0, [sp, #0x4c] mov r0, r0, lsl #0x18 mov r0, r0, asr #0x18 @@ -11814,7 +11814,7 @@ _022E652C: add r1, sp, #0x40 add r2, sp, #0x3c mov r0, #2 - bl sub_0204C5DC + bl LoadScriptVarValuePair ldrb r1, [sp, #0x11] ldr r2, [sp, #0x3c] ldr r0, _022E68D4 ; =ov11_0231993C @@ -11863,7 +11863,7 @@ _022E657C: ldr r1, [sp, #0x40] ldr r2, [sp, #0x3c] mov r0, #2 - bl SetScenarioScriptVar + bl UpdateProgress ldrsh r0, [sp, #0x36] ldrsh r1, [sp, #0x38] bl sub_02065B80 @@ -11891,7 +11891,7 @@ _022E6644: mov r1, #0 mov r2, r1 mov r0, #2 - bl SetScenarioScriptVar + bl UpdateProgress mov r0, #0 b _022E68BC _022E6678: @@ -11902,7 +11902,7 @@ _022E6678: add r1, sp, #0x30 add r2, sp, #0x2c mov r0, #2 - bl sub_0204C5DC + bl LoadScriptVarValuePair ldr r0, [sp, #0x2c] mov r0, r0, lsl #0x18 mov r0, r0, asr #0x18 @@ -12408,7 +12408,7 @@ _022E6D70: add r1, sp, #0x14 add r2, sp, #0x10 mov r0, #2 - bl sub_0204C5DC + bl LoadScriptVarValuePair ldr r0, [sp, #0x10] mov r0, r0, lsl #0x18 mov r0, r0, asr #0x18 @@ -12418,7 +12418,7 @@ _022E6D70: ldr r1, [sp, #0x14] add r2, r0, #1 mov r0, #2 - bl SetScenarioScriptVar + bl UpdateProgress mov r0, #1 b _022E6E58 _022E6DB0: diff --git a/asm/overlay_26.s b/asm/overlay_26.s index 3c232ef8..bbe714cb 100644 --- a/asm/overlay_26.s +++ b/asm/overlay_26.s @@ -15,7 +15,7 @@ ov26_0238A140: ; 0x0238A140 add r1, sp, #0xc add r2, sp, #8 mov r0, #2 - bl sub_0204C5DC + bl LoadScriptVarValuePair ldr r0, [sp, #8] mov r0, r0, lsl #0x18 mov r0, r0, asr #0x18 diff --git a/include/script_variable.h b/include/script_variable.h index 2f9d56eb..4fe4e1e7 100644 --- a/include/script_variable.h +++ b/include/script_variable.h @@ -29,8 +29,6 @@ struct script_var_raw { union script_var_value *value; }; -extern const short LOCAL_SCRIPT_VAR_OFFSET; - void LoadScriptVariableRaw(struct script_var_raw* sv_raw, union script_var_value sv_val_local[], const enum script_var_id sv_id); s32 LoadScriptVariableValue(union script_var_value sv_local[], enum script_var_id sv_id); s32 LoadScriptVariableValueAtIndex(union script_var_value sv_local[], enum script_var_id id, u16 idx); @@ -51,5 +49,10 @@ s32 CompareScriptVarWithParam(union script_var_value sv_local[], enum script_var s32 LoadAndCompareScriptVars(union script_var_value sv_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2, enum compare_operation op); void EventFlagResume(); void EventFlagBackup(); +bool8 DumpScriptVariableValues(u8* dest); +bool8 RestoreScriptVariableValues(u8* src); +void InitProgress(); +void LoadScriptVarValuePair(enum script_var_id script_var_id, s32* val_1, s32* val_2); +void UpdateProgress(enum script_var_id script_var_id, s32 progress, s32 sub_progress); #endif //PMDSKY_SCRIPTING_H diff --git a/main.lsf b/main.lsf index 99973c93..b0c0dcbb 100644 --- a/main.lsf +++ b/main.lsf @@ -82,7 +82,7 @@ Static main Object asm/main_0204B018.o Object src/script_variable.o Object asm/main_rodata_0209CECC.o - Object asm/main_0204C408.o + Object asm/main_0204C6C8.o Object src/main_0204C938.o Object asm/main_0204C94C.o Object src/dungeon_recruitment_3.o diff --git a/src/script_variable.c b/src/script_variable.c index 17856957..c6bf774b 100644 --- a/src/script_variable.c +++ b/src/script_variable.c @@ -3,12 +3,28 @@ #include "main_0200224C.h" #include "script_variable.h" +#define LOCAL_SCRIPT_VAR_OFFSET 0x400 + // Global script variable definitions extern struct script_var_def SCRIPT_VARS[]; // Local script variable definitions extern struct script_var_def SCRIPT_VARS_LOCALS[]; // Global script variable values extern u8 SCRIPT_VARS_VALUES[]; +extern u8 EVENT_FLAG_EXPANSION_ERROR; +extern u8 EVENT_FLAG_RULE_ERROR; +extern const u8 EVENT_FLAG_GAME_MODE_DEBUG_MSG; +extern const u8 EVENT_FLAG_BACKUP_DEBUG_MSG; +const u8 EVENT_FLAG_FILE_NAME[] = "event_flag.c"; +const struct prog_pos_info EVENT_FLAG_PROG_POS_INFO_LINE_1011 = { + (u8*) EVENT_FLAG_FILE_NAME, + 1001 +}; +const struct prog_pos_info EVENT_FLAG_PROG_POS_INFO_LINE_1044 = { + (u8*) EVENT_FLAG_FILE_NAME, + 1044 +}; +extern const u8 SCENARIO_CALC_DEBUG_MSG; extern s32 GetPartyMembers(s32 param1); extern s32 GetMoneyCarried(); @@ -23,32 +39,16 @@ extern s32 SetMoneyCarried(s32 arg0); extern s32 SetMoneyStored(s32 arg0); extern s32 SetNotifyNote(s32 arg0); extern s32 sub_0204C928(s32 arg0); -void sub_0204CBE8(); -void ScenarioFlagBackup(); - -extern u8 EVENT_FLAG_EXPANSION_ERROR; -extern u8 EVENT_FLAG_RULE_ERROR; - -extern const u8 EVENT_FLAG_GAME_MODE_DEBUG_MSG; -extern const u8 EVENT_FLAG_BACKUP_DEBUG_MSG; - -const u8 EVENT_FLAG_FILE_NAME[] = "event_flag.c"; -const struct prog_pos_info EVENT_FLAG_PROG_POS_INFO_LINE_1011 = { - (u8*) EVENT_FLAG_FILE_NAME, - 1001 -}; -const struct prog_pos_info EVENT_FLAG_PROG_POS_INFO_LINE_1044 = { - (u8*) EVENT_FLAG_FILE_NAME, - 1044 -}; +extern void sub_0204CBE8(); +extern void ScenarioFlagBackup(); +void MemcpySimple(u8* dest, u8* src, s32 n); +extern void ZinitScriptVariable(u32 param_1, u32 param_2); void LoadScriptVariableRaw(struct script_var_raw* sv_raw, union script_var_value sv_val_local[], const enum script_var_id sv_id) { - - short LOCAL_SCRIPT_VAR_OFFSET = 0x400; - - if (sv_id < LOCAL_SCRIPT_VAR_OFFSET) { + + if (sv_id < (s16) LOCAL_SCRIPT_VAR_OFFSET) { // global script var sv_raw->def = &SCRIPT_VARS[sv_id]; sv_raw->value = (union script_var_value*) @@ -486,7 +486,8 @@ s32 LoadAndCompareScriptVars(union script_var_value sv_local[], enum script_var_ } // This inline allows EventFlagResume to match -static inline s32 LoadScriptVariableValueAtIndexInline(enum script_var_id sv_id, u32 idx) { +static inline s32 LoadScriptVariableValueAtIndexInline(enum script_var_id sv_id, u32 idx) +{ return LoadScriptVariableValueAtIndex(0, sv_id, idx); } @@ -518,11 +519,13 @@ void EventFlagResume() } // This inline allows EventFlagBackup to match -static inline s32 SaveScriptVariableValueAtIndexInline(enum script_var_id sv_id, u32 idx, u32 new_val) { +static inline s32 SaveScriptVariableValueAtIndexInline(enum script_var_id sv_id, u32 idx, u32 new_val) +{ SaveScriptVariableValueAtIndex(0, sv_id, idx, new_val); } -void EventFlagBackup() { +void EventFlagBackup() +{ u32 game_mode; u32 idx; @@ -550,3 +553,84 @@ void EventFlagBackup() { ScenarioFlagBackup(); } + +// This dumps the global script variables (up to 0x400 bytes), +// but doesn't dump the local script variables (0x400 onwards). +bool8 DumpScriptVariableValues(u8* dest) +{ + EventFlagBackup(); + MemcpySimple(dest, &SCRIPT_VARS_VALUES[0], LOCAL_SCRIPT_VAR_OFFSET); + return TRUE; +} + +// This restores the global script variables (up to 0x400 bytes), +// but doesn't restore the local script variables (0x400 onwards). +bool8 RestoreScriptVariableValues(u8* src) +{ + struct script_var_raw sv_raw; + u8 ret_val; + + LoadScriptVariableRaw(&sv_raw, 0, VAR_VERSION); + MemcpySimple(&SCRIPT_VARS_VALUES[0], src, 0x400); + + // If these values are not equal, then the save file + // will be treated as corrupted, which thus gets deleted. + if (sv_raw.def->default_val == sv_raw.value->u32) { + ret_val = TRUE; + } else { + ret_val = FALSE; + } + + return ret_val; +} + +void InitProgress() +{ + UpdateProgress(VAR_SCENARIO_SELECT, 0, 0); + UpdateProgress(VAR_SCENARIO_MAIN, 0, 0); + UpdateProgress(VAR_SCENARIO_SIDE, 0, 0); + UpdateProgress(VAR_SCENARIO_SUB1, 0, 0); + UpdateProgress(VAR_SCENARIO_SUB2, 0, 0); + UpdateProgress(VAR_SCENARIO_SUB3, 0, 0); + UpdateProgress(VAR_SCENARIO_SUB4, 0, 0); + UpdateProgress(VAR_SCENARIO_SUB5, 0, 0); + UpdateProgress(VAR_SCENARIO_SUB6, 0, 0); + UpdateProgress(VAR_SCENARIO_SUB7, 0, 0); + UpdateProgress(VAR_SCENARIO_SUB8, 0, 0); + ZinitScriptVariable(0, VAR_SCENARIO_MAIN_BIT_FLAG); + ZinitScriptVariable(0, VAR_SCENARIO_MAIN_BIT_FLAG_BACKUP); + s32 idx = 0; + do { + SaveScriptVariableValueAtIndex(0, VAR_SCENARIO_SELECT_BACKUP, idx, 0); + SaveScriptVariableValueAtIndex(0, VAR_SCENARIO_SELECT_BACKUP, (u16) (idx + 4), 0); + idx += 1; + } while (idx < 4); + SaveScriptVariableValue(0, VAR_SCENARIO_BALANCE_FLAG, 0); + SaveScriptVariableValue(0, VAR_SCENARIO_BALANCE_DEBUG, -1); + SaveScriptVariableValue(0, VAR_PLAY_OLD_GAME, 0); +} + +void LoadScriptVarValuePair(enum script_var_id script_var_id, s32* val_1, s32* val_2) +{ + *val_1 = LoadScriptVariableValueAtIndex(0, script_var_id, 0); + *val_2 = LoadScriptVariableValueAtIndex(0, script_var_id, 1); +} + +void UpdateProgress(enum script_var_id script_var_id, s32 progress, s32 sub_progress) +{ + s32 old_progress = LoadScriptVariableValueAtIndex(0, script_var_id, 0); + s32 old_sub_prog = LoadScriptVariableValueAtIndex(0, script_var_id, 1); + Debug_Print(9, &SCENARIO_CALC_DEBUG_MSG, script_var_id, old_progress, old_sub_prog, + progress, sub_progress); + + // VAR_SCENARIO_MAIN stores maingame story progression + if (script_var_id == VAR_SCENARIO_MAIN) { + if ((progress!= old_progress) || (sub_progress != old_sub_prog)) { + // Reset Job Requests cleared in a single day when the maingame story progresses. + SaveScriptVariableValue(0, VAR_REQUEST_CLEAR_COUNT, 0); + } + } + + SaveScriptVariableValueAtIndex(0, script_var_id, 0, progress); + SaveScriptVariableValueAtIndex(0, script_var_id, 1, sub_progress); +}