Merge pull request #213 from slaw-22/EventFlagResume-EventFlagBackup
Some checks failed
build / build (push) Has been cancelled

Decomp EventFlagResume and EventFlagBackup
This commit is contained in:
AnonymousRandomPerson 2025-11-26 23:19:16 -05:00 committed by GitHub
commit 0c0f9f800d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 82 additions and 298 deletions

View File

@ -1,8 +1,7 @@
#pragma once
.public DEBUG_SPECIAL_EPISODE_NUMBER
.public Debug_Print
.public Debug_Print0
.public GetGameMode
.public EventFlagBackup
.public LoadScriptVariableRaw
.public LoadScriptVariableValue
.public LoadScriptVariableValueAtIndex
@ -10,9 +9,5 @@
.public SCRIPT_VARS_VALUES
.public SaveScriptVariableValue
.public SaveScriptVariableValueAtIndex
.public ScenarioFlagBackup
.public ZinitScriptVariable
.public _0209CF64
.public _0209CF84
.public _0209DFA0
.public sub_0204CBE8

View File

@ -1,292 +1,8 @@
.include "asm/macros.inc"
.include "main_0204BFC0.inc"
.include "main_0204C408.inc"
.text
arm_func_start EventFlagResume
EventFlagResume: ; 0x0204BFC0
stmdb sp!, {r4, lr}
bl GetGameMode
cmp r0, #1
ldmlsia sp!, {r4, pc}
sub r4, r0, #2
ldr r0, _0204C1E0 ; =_0209CF64
mov r1, r4
bl Debug_Print0
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x21
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x1c
bl SaveScriptVariableValue
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x22
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x1d
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x23
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x1e
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x24
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x1f
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x25
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x20
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x2d
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x27
bl SaveScriptVariableValue
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x2e
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x28
bl SaveScriptVariableValue
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x2f
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x29
bl SaveScriptVariableValue
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x30
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x2a
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x31
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x2b
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x32
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x2c
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x37
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x34
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x38
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x35
bl SaveScriptVariableValue
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x39
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x36
bl SaveScriptVariableValue
bl sub_0204CBE8
ldmia sp!, {r4, pc}
.align 2, 0
_0204C1E0: .word _0209CF64
arm_func_end EventFlagResume
arm_func_start EventFlagBackup
EventFlagBackup: ; 0x0204C1E4
stmdb sp!, {r4, lr}
bl GetGameMode
cmp r0, #1
ldmlsia sp!, {r4, pc}
sub r4, r0, #2
ldr r0, _0204C404 ; =_0209CF84
mov r1, r4
bl Debug_Print0
mov r0, #0
mov r1, #0x1c
bl LoadScriptVariableValue
mov r1, r4, lsl #0x10
mov r3, r0
mov r2, r1, lsr #0x10
mov r0, #0
mov r1, #0x21
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x1d
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x22
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x1e
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x23
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x1f
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x24
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x20
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x25
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x27
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x2d
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x28
bl LoadScriptVariableValue
mov r1, r4, lsl #0x10
mov r3, r0
mov r2, r1, lsr #0x10
mov r0, #0
mov r1, #0x2e
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x29
bl LoadScriptVariableValue
mov r1, r4, lsl #0x10
mov r2, r1, lsr #0x10
mov r3, r0
mov r0, #0
mov r1, #0x2f
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x2a
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x30
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x2b
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x31
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x2c
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x32
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x34
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x37
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x35
bl LoadScriptVariableValue
mov r3, r0
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x38
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x36
bl LoadScriptVariableValue
mov r1, r4, lsl #0x10
mov r3, r0
mov r2, r1, lsr #0x10
mov r0, #0
mov r1, #0x39
bl SaveScriptVariableValueAtIndex
bl ScenarioFlagBackup
ldmia sp!, {r4, pc}
.align 2, 0
_0204C404: .word _0209CF84
arm_func_end EventFlagBackup
arm_func_start DumpScriptVariableValues
DumpScriptVariableValues: ; 0x0204C408
stmdb sp!, {r4, lr}

View File

@ -31,12 +31,12 @@ EVENT_FLAG_EXPANSION_ERROR:
EVENT_FLAG_RULE_ERROR:
.byte 0x65, 0x76, 0x65, 0x6E, 0x74, 0x20, 0x66, 0x6C, 0x61, 0x67, 0x20, 0x72
.byte 0x75, 0x6C, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x25, 0x64, 0x00, 0x00, 0x00, 0x00
.global _0209CF64
_0209CF64:
.global EVENT_FLAG_GAME_MODE_DEBUG_MSG
EVENT_FLAG_GAME_MODE_DEBUG_MSG:
.byte 0x45, 0x76, 0x65, 0x6E, 0x74, 0x46, 0x6C, 0x61, 0x67, 0x20, 0x52, 0x65, 0x73, 0x75, 0x6D, 0x65
.byte 0x47, 0x61, 0x6D, 0x65, 0x4D, 0x6F, 0x64, 0x65, 0x20, 0x25, 0x64, 0x0A, 0x00, 0x00, 0x00, 0x00
.global _0209CF84
_0209CF84:
.global EVENT_FLAG_BACKUP_DEBUG_MSG
EVENT_FLAG_BACKUP_DEBUG_MSG:
.byte 0x45, 0x76, 0x65, 0x6E, 0x74, 0x46, 0x6C, 0x61, 0x67, 0x20, 0x42, 0x61, 0x63, 0x6B, 0x75, 0x70
.byte 0x47, 0x61, 0x6D, 0x65, 0x4D, 0x6F, 0x64, 0x65, 0x20, 0x25, 0x64, 0x0A, 0x00, 0x00, 0x00, 0x00
.global _0209CFA4

View File

@ -35,7 +35,7 @@ void LoadScriptVariableRaw(struct script_var_raw* sv_raw, union script_var_value
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);
void SaveScriptVariableValue(union script_var_value sv_locals[], const enum script_var_id script_var_id, u32 new_val);
void SaveScriptVariableValueAtIndex(union script_var_value sv_locals[], const enum script_var_id script_var_id, int idx, s32 new_val);
void SaveScriptVariableValueAtIndex(union script_var_value sv_locals[], const enum script_var_id script_var_id, u16 idx, s32 new_val);
s32 LoadScriptVariableValueSum(union script_var_value sv_local[], const enum script_var_id sv_id);
void LoadScriptVariableValueBytes(const enum script_var_id sv_id, u8* result, s32 num_bytes);
void LoadScriptVariableValueString(const enum script_var_id sv_id, u8* result, u8 num_bytes);
@ -49,5 +49,7 @@ void UpdateScriptVarWithVar(union script_var_value sv_local[], enum script_var_i
bool8 CompareScriptVariablesVeneer(s32 param_1, s32 param_2, enum compare_operation operation);
s32 CompareScriptVarWithParam(union script_var_value sv_local[], enum script_var_id sv_id, s32 param, enum compare_operation op);
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();
#endif //PMDSKY_SCRIPTING_H

View File

@ -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_0204BFC0.o
Object asm/main_0204C408.o
Object src/main_0204C938.o
Object asm/main_0204C94C.o
Object src/dungeon_recruitment_3.o

View File

@ -23,10 +23,15 @@ 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,
@ -239,7 +244,7 @@ void SaveScriptVariableValue(union script_var_value sv_locals[], const enum scri
return;
}
void SaveScriptVariableValueAtIndex(union script_var_value sv_locals[], const enum script_var_id script_var_id, int idx, s32 new_val)
void SaveScriptVariableValueAtIndex(union script_var_value sv_locals[], const enum script_var_id script_var_id, u16 idx, s32 new_val)
{
struct script_var_raw script_var_raw;
LoadScriptVariableRaw(&script_var_raw, sv_locals, script_var_id);
@ -479,3 +484,69 @@ s32 LoadAndCompareScriptVars(union script_var_value sv_local[], enum script_var_
s32 value_2 = LoadScriptVariableValue(sv_local, sv_id_2);
return CompareScriptVariables(value_1, value_2, op);
}
// This inline allows EventFlagResume to match
static inline s32 LoadScriptVariableValueAtIndexInline(enum script_var_id sv_id, u32 idx) {
return LoadScriptVariableValueAtIndex(0, sv_id, idx);
}
void EventFlagResume()
{
u32 game_mode = GetGameMode();
if (game_mode <= 1U) {
return;
}
u32 idx = game_mode - 2;
Debug_Print0(&EVENT_FLAG_GAME_MODE_DEBUG_MSG, idx);
SaveScriptVariableValue(0, VAR_GROUND_ENTER, LoadScriptVariableValueAtIndexInline(VAR_GROUND_ENTER_BACKUP, idx));
SaveScriptVariableValue(0, VAR_GROUND_ENTER_LINK, LoadScriptVariableValueAtIndexInline(VAR_GROUND_ENTER_LINK_BACKUP, idx));
SaveScriptVariableValue(0, VAR_GROUND_GETOUT, LoadScriptVariableValueAtIndexInline(VAR_GROUND_GETOUT_BACKUP, idx));
SaveScriptVariableValue(0, VAR_GROUND_MAP, LoadScriptVariableValueAtIndexInline(VAR_GROUND_MAP_BACKUP, idx));
SaveScriptVariableValue(0, VAR_GROUND_PLACE, LoadScriptVariableValueAtIndexInline(VAR_GROUND_PLACE_BACKUP, idx));
SaveScriptVariableValue(0, VAR_DUNGEON_ENTER, LoadScriptVariableValueAtIndexInline(VAR_DUNGEON_ENTER_BACKUP, idx));
SaveScriptVariableValue(0, VAR_DUNGEON_ENTER_MODE, LoadScriptVariableValueAtIndexInline(VAR_DUNGEON_ENTER_MODE_BACKUP, idx));
SaveScriptVariableValue(0, VAR_DUNGEON_ENTER_INDEX, LoadScriptVariableValueAtIndexInline(VAR_DUNGEON_ENTER_INDEX_BACKUP, idx));
SaveScriptVariableValue(0, VAR_DUNGEON_ENTER_FREQUENCY, LoadScriptVariableValueAtIndexInline(VAR_DUNGEON_ENTER_FREQUENCY_BACKUP, idx));
SaveScriptVariableValue(0, VAR_DUNGEON_RESULT, LoadScriptVariableValueAtIndexInline(VAR_DUNGEON_RESULT_BACKUP, idx));
SaveScriptVariableValue(0, VAR_GROUND_START_MODE, LoadScriptVariableValueAtIndexInline(VAR_GROUND_START_MODE_BACKUP, idx));
SaveScriptVariableValue(0, VAR_PLAYER_KIND, LoadScriptVariableValueAtIndexInline(VAR_PLAYER_KIND_BACKUP, idx));
SaveScriptVariableValue(0, VAR_ATTENDANT1_KIND, LoadScriptVariableValueAtIndexInline(VAR_ATTENDANT1_KIND_BACKUP, idx));
SaveScriptVariableValue(0, VAR_ATTENDANT2_KIND, LoadScriptVariableValueAtIndexInline(VAR_ATTENDANT2_KIND_BACKUP, idx));
sub_0204CBE8();
}
// This inline allows EventFlagBackup to match
static inline s32 SaveScriptVariableValueAtIndexInline(enum script_var_id sv_id, u32 idx, u32 new_val) {
SaveScriptVariableValueAtIndex(0, sv_id, idx, new_val);
}
void EventFlagBackup() {
u32 game_mode;
u32 idx;
game_mode = GetGameMode();
if (game_mode <= 1U) {
return;
}
idx = game_mode - 2;
Debug_Print0(&EVENT_FLAG_BACKUP_DEBUG_MSG, idx);
SaveScriptVariableValueAtIndexInline(VAR_GROUND_ENTER_BACKUP, idx, LoadScriptVariableValue(0, VAR_GROUND_ENTER));
SaveScriptVariableValueAtIndexInline(VAR_GROUND_ENTER_LINK_BACKUP, idx, LoadScriptVariableValue(0, VAR_GROUND_ENTER_LINK));
SaveScriptVariableValueAtIndexInline(VAR_GROUND_GETOUT_BACKUP, idx, LoadScriptVariableValue(0, VAR_GROUND_GETOUT));
SaveScriptVariableValueAtIndexInline(VAR_GROUND_MAP_BACKUP, idx, LoadScriptVariableValue(0, VAR_GROUND_MAP));
SaveScriptVariableValueAtIndexInline(VAR_GROUND_PLACE_BACKUP, idx, LoadScriptVariableValue(0, VAR_GROUND_PLACE));
SaveScriptVariableValueAtIndexInline(VAR_DUNGEON_ENTER_BACKUP, idx, LoadScriptVariableValue(0, VAR_DUNGEON_ENTER));
SaveScriptVariableValueAtIndexInline(VAR_DUNGEON_ENTER_MODE_BACKUP, idx, LoadScriptVariableValue(0, VAR_DUNGEON_ENTER_MODE));
SaveScriptVariableValueAtIndexInline(VAR_DUNGEON_ENTER_INDEX_BACKUP, idx, LoadScriptVariableValue(0, VAR_DUNGEON_ENTER_INDEX));
SaveScriptVariableValueAtIndexInline(VAR_DUNGEON_ENTER_FREQUENCY_BACKUP, idx, LoadScriptVariableValue(0, VAR_DUNGEON_ENTER_FREQUENCY));
SaveScriptVariableValueAtIndexInline(VAR_DUNGEON_RESULT_BACKUP, idx, LoadScriptVariableValue(0, VAR_DUNGEON_RESULT));
SaveScriptVariableValueAtIndexInline(VAR_GROUND_START_MODE_BACKUP, idx, LoadScriptVariableValue(0, VAR_GROUND_START_MODE));
SaveScriptVariableValueAtIndexInline(VAR_PLAYER_KIND_BACKUP, idx, LoadScriptVariableValue(0, VAR_PLAYER_KIND));
SaveScriptVariableValueAtIndexInline(VAR_ATTENDANT1_KIND_BACKUP, idx, LoadScriptVariableValue(0, VAR_ATTENDANT1_KIND));
SaveScriptVariableValueAtIndexInline(VAR_ATTENDANT2_KIND_BACKUP, idx, LoadScriptVariableValue(0, VAR_ATTENDANT2_KIND));
ScenarioFlagBackup();
}