diff --git a/asm/main_0204C408.s b/asm/main_0204C488.s similarity index 88% rename from asm/main_0204C408.s rename to asm/main_0204C488.s index 153c7ed1..f8339170 100644 --- a/asm/main_0204C408.s +++ b/asm/main_0204C488.s @@ -3,48 +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} diff --git a/include/script_variable.h b/include/script_variable.h index 2f9d56eb..e32e9772 100644 --- a/include/script_variable.h +++ b/include/script_variable.h @@ -51,5 +51,7 @@ 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(); +s32 DumpScriptVariableValues(u8* target); +u8 RestoreScriptVariableValues(u8* dest); #endif //PMDSKY_SCRIPTING_H diff --git a/main.lsf b/main.lsf index 99973c93..5008aa49 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_0204C488.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..02a0d46c 100644 --- a/src/script_variable.c +++ b/src/script_variable.c @@ -25,6 +25,7 @@ extern s32 SetNotifyNote(s32 arg0); extern s32 sub_0204C928(s32 arg0); void sub_0204CBE8(); void ScenarioFlagBackup(); +void MemcpySimple(u8* dest, u8* src, s32 n); extern u8 EVENT_FLAG_EXPANSION_ERROR; extern u8 EVENT_FLAG_RULE_ERROR; @@ -550,3 +551,24 @@ void EventFlagBackup() { ScenarioFlagBackup(); } + +s32 DumpScriptVariableValues(u8* target) +{ + EventFlagBackup(); + MemcpySimple(target, &SCRIPT_VARS_VALUES[0], 0x400); + return 1; +} + +u8 RestoreScriptVariableValues(u8* dest) { + struct script_var_raw sv_raw; + u8 ret_val; + + LoadScriptVariableRaw(&sv_raw, 0, VAR_VERSION); + MemcpySimple(&SCRIPT_VARS_VALUES[0], dest, 0x400); + if (sv_raw.def->default_val == sv_raw.value->u32) { + ret_val = 1; + } else { + ret_val = 0; + } + return ret_val; +}