From 37c592b01d818d348740593ac438a613f086799e Mon Sep 17 00:00:00 2001 From: slaw-22 Date: Sat, 6 Dec 2025 21:13:15 +0000 Subject: [PATCH 1/4] Decomp ZinitScriptVariable. Organise funcs. --- asm/include/main_0204B018.inc | 1 + asm/main_0204B018.s | 34 +------------------ include/has_played_old_game.h | 8 ----- include/performance_progress.h | 9 ----- include/{main_0204CB94.h => progression.h} | 11 ++++-- include/script_variable.h | 1 + main.lsf | 4 +-- src/dungeon_pokemon_attributes_1.c | 4 +-- src/dungeon_recruitment.c | 2 +- src/has_played_old_game.c | 13 ------- src/main_0200EDC0.c | 3 +- src/main_0204CB94.c | 19 ----------- src/{performance_progress.c => progression.c} | 28 ++++++++++++++- src/script_variable.c | 17 ++++++++-- 14 files changed, 57 insertions(+), 97 deletions(-) delete mode 100644 include/has_played_old_game.h delete mode 100644 include/performance_progress.h rename include/{main_0204CB94.h => progression.h} (61%) delete mode 100644 src/has_played_old_game.c delete mode 100644 src/main_0204CB94.c rename src/{performance_progress.c => progression.c} (67%) diff --git a/asm/include/main_0204B018.inc b/asm/include/main_0204B018.inc index 08af7c11..cf9a4392 100644 --- a/asm/include/main_0204B018.inc +++ b/asm/include/main_0204B018.inc @@ -11,3 +11,4 @@ .public SCRIPT_VARS .public SCRIPT_VARS_LOCALS .public SCRIPT_VARS_VALUES +.public ZinitScriptVariable diff --git a/asm/main_0204B018.s b/asm/main_0204B018.s index 41f657ad..9af6580e 100644 --- a/asm/main_0204B018.s +++ b/asm/main_0204B018.s @@ -336,36 +336,4 @@ _0204B41C: _0204B42C: .word SCRIPT_VARS _0204B430: .word SCRIPT_VARS_LOCALS arm_func_end sub_0204B3D0 - - arm_func_start ZinitScriptVariable -ZinitScriptVariable: ; 0x0204B434 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r5, r1 - cmp r5, #0x400 - mov r6, r0 - ldrlt r0, _0204B494 ; =SCRIPT_VARS - mov r8, #0 - addlt r4, r0, r5, lsl #4 - ldrge r1, _0204B498 ; =SCRIPT_VARS_LOCALS - subge r0, r5, #0x400 - addge r4, r1, r0, lsl #4 - mov r7, r8 - b _0204B484 -_0204B464: - mov r0, r6 - mov r1, r5 - mov r2, r8 - mov r3, r7 - bl SaveScriptVariableValueAtIndex - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, lsr #0x10 -_0204B484: - ldrsh r0, [r4, #8] - cmp r8, r0 - blt _0204B464 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0204B494: .word SCRIPT_VARS -_0204B498: .word SCRIPT_VARS_LOCALS - arm_func_end ZinitScriptVariable + \ No newline at end of file diff --git a/include/has_played_old_game.h b/include/has_played_old_game.h deleted file mode 100644 index cdc51261..00000000 --- a/include/has_played_old_game.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef PMDSKY_HAS_PLAYED_OLD_GAME_H -#define PMDSKY_HAS_PLAYED_OLD_GAME_H - -#include "util.h" - -bool8 HasPlayedOldGame(); - -#endif //PMDSKY_HAS_PLAYED_OLD_GAME_H diff --git a/include/performance_progress.h b/include/performance_progress.h deleted file mode 100644 index 2450eebc..00000000 --- a/include/performance_progress.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PMDSKY_PERFORMANCE_PROGRESS_H -#define PMDSKY_PERFORMANCE_PROGRESS_H - -#include "util.h" - -bool8 GetResolvedPerformanceProgressFlag(u32 idx); -void SetResolvedPerformanceProgressFlag(u32 idx, s32 value); - -#endif //PMDSKY_PERFORMANCE_PROGRESS_H diff --git a/include/main_0204CB94.h b/include/progression.h similarity index 61% rename from include/main_0204CB94.h rename to include/progression.h index 963a88ab..e75bb18b 100644 --- a/include/main_0204CB94.h +++ b/include/progression.h @@ -1,6 +1,11 @@ -#ifndef PMDSKY_MAIN_0204CB94_H -#define PMDSKY_MAIN_0204CB94_H +#ifndef PMDSKY_PROGRESSION_H +#define PMDSKY_PROGRESSION_H +#include "util.h" + +bool8 HasPlayedOldGame(); +bool8 GetResolvedPerformanceProgressFlag(u32 idx); +void SetResolvedPerformanceProgressFlag(u32 idx, s32 value); // Returns the current SCENARIO_BALANCE value. // The exact value returned depends on multiple factors: // - If the first special episode is active, returns 1 @@ -9,4 +14,4 @@ // - In all other cases, the value of the SCENARIO_BALANCE_FLAG variable is returned u8 GetScenarioBalance(); -#endif //PMDSKY_MAIN_0204CB94_H +#endif //PMDSKY_PROGRESSION_H diff --git a/include/script_variable.h b/include/script_variable.h index d354440d..b3a01250 100644 --- a/include/script_variable.h +++ b/include/script_variable.h @@ -29,6 +29,7 @@ struct script_var_raw { union script_var_value *value; }; +void ZinitScriptVariable(union script_var_value sv_locals[], enum script_var_id sv_id); 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); diff --git a/main.lsf b/main.lsf index 4f8c3ef1..88efd8d5 100644 --- a/main.lsf +++ b/main.lsf @@ -88,9 +88,7 @@ Static main Object asm/main_rodata_020A18BC.o Object src/story_progress.o Object src/special_episode.o - Object src/has_played_old_game.o - Object src/performance_progress.o - Object src/main_0204CB94.o + Object src/progression.o Object src/scenario_flag.o Object asm/main_0204CD88.o Object src/main_0204DA2C.o diff --git a/src/dungeon_pokemon_attributes_1.c b/src/dungeon_pokemon_attributes_1.c index 609b18c0..5942a625 100644 --- a/src/dungeon_pokemon_attributes_1.c +++ b/src/dungeon_pokemon_attributes_1.c @@ -8,11 +8,9 @@ #include "main_02058E68.h" #include "overlay_29_022FF898.h" #include "overlay_29_023000E4.h" -#include "performance_progress.h" +#include "progression.h" #include "pokemon.h" -extern bool8 GetPerformanceFlagWithChecks(s32 flag_id); - bool8 CanSeeInvisibleMonsters(struct entity *entity) { if (GetEntInfo(entity)->blinker_class_status.blinded == STATUS_BLINKER_EYEDROPS) diff --git a/src/dungeon_recruitment.c b/src/dungeon_recruitment.c index 49bba6e8..38f081d4 100644 --- a/src/dungeon_recruitment.c +++ b/src/dungeon_recruitment.c @@ -5,7 +5,6 @@ #include "dungeon_pokemon_attributes_1.h" #include "dungeon_recruitment.h" #include "dungeon_recruitment_2.h" -#include "has_played_old_game.h" #include "dg_random.h" #include "dungeon_visibility.h" #include "enums.h" @@ -14,6 +13,7 @@ #include "main_0208655C.h" #include "math.h" #include "overlay_29_0230E578.h" // ItemIsActive__0230E578 +#include "progression.h" extern bool8 IsLegendaryChallengeFloor(void); extern bool8 IsCurrentMissionTypeExact(u32 mission_type, u32 mission_subtype); diff --git a/src/has_played_old_game.c b/src/has_played_old_game.c deleted file mode 100644 index 28546d32..00000000 --- a/src/has_played_old_game.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "has_played_old_game.h" -#include "enums.h" -#include "script_variable.h" -#include "util.h" - -bool8 HasPlayedOldGame() -{ - if(LoadScriptVariableValue(0, VAR_PLAY_OLD_GAME)) { - return TRUE; - } else { - return FALSE; - } -} diff --git a/src/main_0200EDC0.c b/src/main_0200EDC0.c index 6d9a614b..f07ea6fc 100644 --- a/src/main_0200EDC0.c +++ b/src/main_0200EDC0.c @@ -1,8 +1,7 @@ #include "main_0200EDC0.h" #include "item.h" -#include "main_0204CB94.h" #include "main_020517D4.h" -#include "performance_progress.h" +#include "progression.h" #include "script_variable.h" #include "special_episode.h" diff --git a/src/main_0204CB94.c b/src/main_0204CB94.c deleted file mode 100644 index 31185870..00000000 --- a/src/main_0204CB94.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "main_0204CB94.h" -#include "script_variable.h" - -u8 GetScenarioBalance() -{ - s32 special_episode_type = LoadScriptVariableValue(0, VAR_EXECUTE_SPECIAL_EPISODE_TYPE); - if (special_episode_type == EPISODE_NONE) - { - s32 scenario_balance = LoadScriptVariableValue(0, VAR_SCENARIO_BALANCE_DEBUG); - if (scenario_balance < 0) - scenario_balance = LoadScriptVariableValue(0, VAR_SCENARIO_BALANCE_FLAG); - - return scenario_balance; - } - - if (special_episode_type == EPISODE_BIDOOFS_WISH) - return 1; - return 3; -} diff --git a/src/performance_progress.c b/src/progression.c similarity index 67% rename from src/performance_progress.c rename to src/progression.c index 31cfac86..ab0b3345 100644 --- a/src/performance_progress.c +++ b/src/progression.c @@ -1,9 +1,18 @@ #include "enums.h" -#include "performance_progress.h" +#include "progression.h" #include "script_variable.h" extern enum game_mode GetGameMode(); +bool8 HasPlayedOldGame() +{ + if(LoadScriptVariableValue(0, VAR_PLAY_OLD_GAME)) { + return TRUE; + } else { + return FALSE; + } +} + bool8 GetResolvedPerformanceProgressFlag(u32 idx) { switch (idx) { case 0: @@ -55,3 +64,20 @@ void SetResolvedPerformanceProgressFlag(u32 idx, s32 value) { return; } } + +u8 GetScenarioBalance() +{ + s32 special_episode_type = LoadScriptVariableValue(0, VAR_EXECUTE_SPECIAL_EPISODE_TYPE); + if (special_episode_type == EPISODE_NONE) + { + s32 scenario_balance = LoadScriptVariableValue(0, VAR_SCENARIO_BALANCE_DEBUG); + if (scenario_balance < 0) + scenario_balance = LoadScriptVariableValue(0, VAR_SCENARIO_BALANCE_FLAG); + + return scenario_balance; + } + + if (special_episode_type == EPISODE_BIDOOFS_WISH) + return 1; + return 3; +} diff --git a/src/script_variable.c b/src/script_variable.c index 952dfadc..31688bf8 100644 --- a/src/script_variable.c +++ b/src/script_variable.c @@ -8,7 +8,7 @@ #include "special_episode.h" #include "story_progress.h" -#define LOCAL_SCRIPT_VAR_OFFSET 0x400 +#define LOCAL_SCRIPT_VAR_OFFSET (s16) 0x400 // Global script variable definitions extern struct script_var_def SCRIPT_VARS[]; @@ -39,7 +39,20 @@ extern s32 AddMoneyCarried(s32 arg0); extern s32 SetMoneyCarried(s32 arg0); extern s32 SetMoneyStored(s32 arg0); extern s32 SetNotifyNote(s32 arg0); -extern void ZinitScriptVariable(u32 param_1, u32 param_2); + +void ZinitScriptVariable(union script_var_value sv_locals[], enum script_var_id sv_id) { + struct script_var_def* def; + + if (sv_id < LOCAL_SCRIPT_VAR_OFFSET) { + def = &SCRIPT_VARS[sv_id]; + } else { + def = &SCRIPT_VARS_LOCALS[sv_id - LOCAL_SCRIPT_VAR_OFFSET]; + } + + for(u16 idx = 0; idx < def->n_values; idx++) { + SaveScriptVariableValueAtIndex(sv_locals, sv_id, idx, 0); + } +} void LoadScriptVariableRaw(struct script_var_raw* sv_raw, union script_var_value sv_val_local[], From 63b7e5c814884058438c6768b3ac599fd081c527 Mon Sep 17 00:00:00 2001 From: slaw-22 Date: Sat, 6 Dec 2025 21:41:36 +0000 Subject: [PATCH 2/4] Decomp InitWorldMapScriptVars --- .../{main_0204CD88.inc => main_0204CDB8.inc} | 0 asm/{main_0204CD88.s => main_0204CDB8.s} | 18 +----------------- include/script_variable_2.h | 6 ++++++ main.lsf | 3 ++- src/script_variable_2.c | 9 +++++++++ 5 files changed, 18 insertions(+), 18 deletions(-) rename asm/include/{main_0204CD88.inc => main_0204CDB8.inc} (100%) rename asm/{main_0204CD88.s => main_0204CDB8.s} (98%) create mode 100644 include/script_variable_2.h create mode 100644 src/script_variable_2.c diff --git a/asm/include/main_0204CD88.inc b/asm/include/main_0204CDB8.inc similarity index 100% rename from asm/include/main_0204CD88.inc rename to asm/include/main_0204CDB8.inc diff --git a/asm/main_0204CD88.s b/asm/main_0204CDB8.s similarity index 98% rename from asm/main_0204CD88.s rename to asm/main_0204CDB8.s index 0d6190c5..d3ceccd4 100644 --- a/asm/main_0204CD88.s +++ b/asm/main_0204CDB8.s @@ -1,24 +1,8 @@ .include "asm/macros.inc" - .include "main_0204CD88.inc" + .include "main_0204CDB8.inc" .text - arm_func_start InitWorldMapScriptVars -InitWorldMapScriptVars: ; 0x0204CD88 - stmdb sp!, {r3, lr} - mov r0, #0 - mov r1, #0x55 - bl ZinitScriptVariable - mov r0, #0 - mov r1, #0x56 - bl ZinitScriptVariable - mov r0, #0 - mov r1, #0x57 - mov r2, #1 - bl SaveScriptVariableValue - ldmia sp!, {r3, pc} - arm_func_end InitWorldMapScriptVars - arm_func_start sub_0204CDB8 sub_0204CDB8: ; 0x0204CDB8 ldr ip, _0204CDC8 ; =ZinitScriptVariable diff --git a/include/script_variable_2.h b/include/script_variable_2.h new file mode 100644 index 00000000..364417c9 --- /dev/null +++ b/include/script_variable_2.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_SCRIPT_VARIABLE_2_H +#define PMDSKY_SCRIPT_VARIABLE_2_H + +void InitWorldMapScriptVars(); + +#endif PMDSKY_SCRIPT_VARIABLE_2_H \ No newline at end of file diff --git a/main.lsf b/main.lsf index 88efd8d5..f3979c57 100644 --- a/main.lsf +++ b/main.lsf @@ -90,7 +90,8 @@ Static main Object src/special_episode.o Object src/progression.o Object src/scenario_flag.o - Object asm/main_0204CD88.o + Object src/script_variable_2.o + Object asm/main_0204CDB8.o Object src/main_0204DA2C.o Object asm/main_0204DB08.o Object src/main_0204DD80.o diff --git a/src/script_variable_2.c b/src/script_variable_2.c new file mode 100644 index 00000000..dc2576e1 --- /dev/null +++ b/src/script_variable_2.c @@ -0,0 +1,9 @@ +#include "script_variable.h" +#include "script_variable_2.h" +#include "enums.h" + +void InitWorldMapScriptVars() { + ZinitScriptVariable(0, VAR_WORLD_MAP_MARK_LIST_NORMAL); + ZinitScriptVariable(0, VAR_WORLD_MAP_MARK_LIST_SPECIAL); + SaveScriptVariableValue(0, VAR_WORLD_MAP_LEVEL, 1); +} From cbed3f6d79ed96855671472ebba3aa3e41750a65 Mon Sep 17 00:00:00 2001 From: slaw-22 Date: Sat, 6 Dec 2025 22:14:23 +0000 Subject: [PATCH 3/4] Decomp DefaultInitScriptVariable --- asm/include/main_0204B018.inc | 3 ++- asm/include/main_0204CDB8.inc | 2 +- asm/include/main_02058F24.inc | 2 +- asm/include/overlay_11.inc | 4 ++-- asm/main_0204B018.s | 41 ++++------------------------------- asm/main_0204CDB8.s | 16 +++++++------- asm/main_02058F24.s | 2 +- asm/overlay_11.s | 16 +++++++------- include/script_variable.h | 3 ++- include/script_variable_2.h | 2 +- src/script_variable.c | 20 ++++++++++++++--- src/script_variable_2.c | 4 ++-- 12 files changed, 49 insertions(+), 66 deletions(-) diff --git a/asm/include/main_0204B018.inc b/asm/include/main_0204B018.inc index cf9a4392..a31ca5a8 100644 --- a/asm/include/main_0204B018.inc +++ b/asm/include/main_0204B018.inc @@ -11,4 +11,5 @@ .public SCRIPT_VARS .public SCRIPT_VARS_LOCALS .public SCRIPT_VARS_VALUES -.public ZinitScriptVariable +.public ZeroInitScriptVariable +.public DefaultInitScriptVariable diff --git a/asm/include/main_0204CDB8.inc b/asm/include/main_0204CDB8.inc index fd0dff01..f1b5191f 100644 --- a/asm/include/main_0204CDB8.inc +++ b/asm/include/main_0204CDB8.inc @@ -33,4 +33,4 @@ .public sub_02050990 .public sub_020509BC .public VERSION_EXCLUSIVE_MONSTERS -.public ZinitScriptVariable +.public ZeroInitScriptVariable diff --git a/asm/include/main_02058F24.inc b/asm/include/main_02058F24.inc index c461db26..de0e6e13 100644 --- a/asm/include/main_02058F24.inc +++ b/asm/include/main_02058F24.inc @@ -550,4 +550,4 @@ .public vsprintf .public WAN_TABLE .public ZINC_BAND_STAT_BOOST -.public ZinitScriptVariable +.public ZeroInitScriptVariable diff --git a/asm/include/overlay_11.inc b/asm/include/overlay_11.inc index 0a947c79..e77c5950 100644 --- a/asm/include/overlay_11.inc +++ b/asm/include/overlay_11.inc @@ -639,7 +639,7 @@ .public sub_0204AE60 .public sub_0204AE80 .public sub_0204AEE0 -.public sub_0204B3D0 +.public DefaultInitScriptVariable .public SetResolvedPerformanceProgressFlag .public sub_0204CDE8 .public sub_0204CE48 @@ -718,4 +718,4 @@ .public UpdateTeamStats .public WorldMapSetCamera .public WorldMapSetMode -.public ZinitScriptVariable +.public ZeroInitScriptVariable diff --git a/asm/main_0204B018.s b/asm/main_0204B018.s index 9af6580e..98723787 100644 --- a/asm/main_0204B018.s +++ b/asm/main_0204B018.s @@ -74,7 +74,7 @@ _0204B0C4: bl SaveScriptVariableValue mov r0, #0 mov r1, #1 - bl ZinitScriptVariable + bl ZeroInitScriptVariable bl InitEventFlagScriptVars mov sl, #0 #ifdef JAPAN @@ -212,13 +212,13 @@ _0204B118: bl SaveScriptVariableValue mov r0, #0 mov r1, #0x4b - bl ZinitScriptVariable + bl ZeroInitScriptVariable mov r0, #0 mov r1, #0x4c - bl ZinitScriptVariable + bl ZeroInitScriptVariable mov r0, #0 mov r1, #0x4d - bl ZinitScriptVariable + bl ZeroInitScriptVariable bl InitScenarioProgressScriptVars bl InitWorldMapScriptVars bl InitDungeonListScriptVars @@ -304,36 +304,3 @@ _0204B3CC: .word 0x00000143 _0204B3CC: .word 0x00000137 #endif arm_func_end InitEventFlagScriptVars - - arm_func_start sub_0204B3D0 -sub_0204B3D0: ; 0x0204B3D0 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r4, r1 - cmp r4, #0x400 - mov r5, r0 - ldrlt r0, _0204B42C ; =SCRIPT_VARS - ldrge r1, _0204B430 ; =SCRIPT_VARS_LOCALS - addlt r7, r0, r4, lsl #4 - subge r0, r4, #0x400 - addge r7, r1, r0, lsl #4 - mov r6, #0 - b _0204B41C -_0204B3FC: - ldrsh r3, [r7, #0xa] - mov r0, r5 - mov r1, r4 - mov r2, r6 - bl SaveScriptVariableValueAtIndex - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, lsr #0x10 -_0204B41C: - ldrsh r0, [r7, #8] - cmp r6, r0 - blt _0204B3FC - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0204B42C: .word SCRIPT_VARS -_0204B430: .word SCRIPT_VARS_LOCALS - arm_func_end sub_0204B3D0 - \ No newline at end of file diff --git a/asm/main_0204CDB8.s b/asm/main_0204CDB8.s index d3ceccd4..d01c6edf 100644 --- a/asm/main_0204CDB8.s +++ b/asm/main_0204CDB8.s @@ -5,12 +5,12 @@ arm_func_start sub_0204CDB8 sub_0204CDB8: ; 0x0204CDB8 - ldr ip, _0204CDC8 ; =ZinitScriptVariable + ldr ip, _0204CDC8 ; =ZeroInitScriptVariable mov r0, #0 mov r1, #0x56 bx ip .align 2, 0 -_0204CDC8: .word ZinitScriptVariable +_0204CDC8: .word ZeroInitScriptVariable arm_func_end sub_0204CDB8 arm_func_start sub_0204CDCC @@ -87,22 +87,22 @@ InitDungeonListScriptVars: ; 0x0204CE90 stmdb sp!, {r3, lr} mov r0, #0 mov r1, #0x4f - bl ZinitScriptVariable + bl ZeroInitScriptVariable mov r0, #0 mov r1, #0x54 - bl ZinitScriptVariable + bl ZeroInitScriptVariable mov r0, #0 mov r1, #0x50 - bl ZinitScriptVariable + bl ZeroInitScriptVariable mov r0, #0 mov r1, #0x51 - bl ZinitScriptVariable + bl ZeroInitScriptVariable mov r0, #0 mov r1, #0x52 - bl ZinitScriptVariable + bl ZeroInitScriptVariable mov r0, #0 mov r1, #0x53 - bl ZinitScriptVariable + bl ZeroInitScriptVariable ldmia sp!, {r3, pc} arm_func_end InitDungeonListScriptVars diff --git a/asm/main_02058F24.s b/asm/main_02058F24.s index 5aa0783b..d3662cbc 100644 --- a/asm/main_02058F24.s +++ b/asm/main_02058F24.s @@ -15926,7 +15926,7 @@ _02065E54: bl UnloadOverlay mov r0, #0 mov r1, #0x5c - bl ZinitScriptVariable + bl ZeroInitScriptVariable mov r0, #2 bl LoadOverlay mov r0, #0xd diff --git a/asm/overlay_11.s b/asm/overlay_11.s index 3e06f85f..b85b2933 100644 --- a/asm/overlay_11.s +++ b/asm/overlay_11.s @@ -3160,7 +3160,7 @@ _022DED60: ; 0x022DED60 mov r1, r0, lsl #0x10 add r0, r4, #0x6c mov r1, r1, asr #0x10 - bl sub_0204B3D0 + bl DefaultInitScriptVariable b _022E2474 _022DED7C: ; 0x022DED7C ldrh r0, [r6] @@ -3168,7 +3168,7 @@ _022DED7C: ; 0x022DED7C mov r1, r0, lsl #0x10 add r0, r4, #0x6c mov r1, r1, asr #0x10 - bl ZinitScriptVariable + bl ZeroInitScriptVariable b _022E2474 _022DED98: ; 0x022DED98 ldrh r0, [r6] @@ -12555,7 +12555,7 @@ ov11_022E6EE8: ; 0x022E6EE8 bl SaveScriptVariableValue mov r0, #0 mov r1, #0x5c - bl ZinitScriptVariable + bl ZeroInitScriptVariable cmp r4, #4 bne _022E6F80 bl sub_020573A0 @@ -14116,7 +14116,7 @@ _022E82F0: bne _022E832C mov r0, #0 mov r1, #0x5c - bl ZinitScriptVariable + bl ZeroInitScriptVariable mov r0, #0x12 bl GroundMainLoop mov r4, r0 @@ -14642,7 +14642,7 @@ _022E89FC: bl Debug_Print0 mov r0, #0 mov r1, #0x5c - bl ZinitScriptVariable + bl ZeroInitScriptVariable bl GroundMainNextDay ldr r0, _022E91E8 ; =ov11_02324FA0 mov r1, #1 @@ -14706,7 +14706,7 @@ _022E8AE4: bl Debug_Print0 mov r0, #0 mov r1, #0x5c - bl ZinitScriptVariable + bl ZeroInitScriptVariable bl GroundMainNextDay mov r0, #0 mov r1, #0x2a @@ -14786,7 +14786,7 @@ _022E8C20: bl Debug_Print0 mov r0, #0 mov r1, #0x5c - bl ZinitScriptVariable + bl ZeroInitScriptVariable bl GroundMainNextDay ldr r1, _022E91E8 ; =ov11_02324FA0 mov r0, #0 @@ -15358,7 +15358,7 @@ GroundMainReturnDungeon: ; 0x022E9414 bl Debug_Print0 mov r0, #0 mov r1, #0x5c - bl ZinitScriptVariable + bl ZeroInitScriptVariable bl GroundMainNextDay ldmia sp!, {r3, pc} .align 2, 0 diff --git a/include/script_variable.h b/include/script_variable.h index b3a01250..daabc3ea 100644 --- a/include/script_variable.h +++ b/include/script_variable.h @@ -29,7 +29,8 @@ struct script_var_raw { union script_var_value *value; }; -void ZinitScriptVariable(union script_var_value sv_locals[], enum script_var_id sv_id); +void DefaultInitScriptVariable(union script_var_value sv_locals[], enum script_var_id sv_id); +void ZeroInitScriptVariable(union script_var_value sv_locals[], enum script_var_id sv_id); 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); diff --git a/include/script_variable_2.h b/include/script_variable_2.h index 364417c9..5d9ec46a 100644 --- a/include/script_variable_2.h +++ b/include/script_variable_2.h @@ -3,4 +3,4 @@ void InitWorldMapScriptVars(); -#endif PMDSKY_SCRIPT_VARIABLE_2_H \ No newline at end of file +#endif PMDSKY_SCRIPT_VARIABLE_2_H diff --git a/src/script_variable.c b/src/script_variable.c index 31688bf8..e4025712 100644 --- a/src/script_variable.c +++ b/src/script_variable.c @@ -40,7 +40,21 @@ extern s32 SetMoneyCarried(s32 arg0); extern s32 SetMoneyStored(s32 arg0); extern s32 SetNotifyNote(s32 arg0); -void ZinitScriptVariable(union script_var_value sv_locals[], enum script_var_id sv_id) { +void DefaultInitScriptVariable(union script_var_value sv_locals[], enum script_var_id sv_id) { + struct script_var_def* def; + + if (sv_id < LOCAL_SCRIPT_VAR_OFFSET) { + def = &SCRIPT_VARS[sv_id]; + } else { + def = &SCRIPT_VARS_LOCALS[sv_id - LOCAL_SCRIPT_VAR_OFFSET]; + } + + for(u16 idx = 0; idx < def->n_values; idx++) { + SaveScriptVariableValueAtIndex(sv_locals, sv_id, idx, def->default_val); + } +} + +void ZeroInitScriptVariable(union script_var_value sv_locals[], enum script_var_id sv_id) { struct script_var_def* def; if (sv_id < LOCAL_SCRIPT_VAR_OFFSET) { @@ -607,8 +621,8 @@ void InitScenarioProgressScriptVars() SetScenarioProgressScriptVar(VAR_SCENARIO_SUB6, 0, 0); SetScenarioProgressScriptVar(VAR_SCENARIO_SUB7, 0, 0); SetScenarioProgressScriptVar(VAR_SCENARIO_SUB8, 0, 0); - ZinitScriptVariable(0, VAR_SCENARIO_MAIN_BIT_FLAG); - ZinitScriptVariable(0, VAR_SCENARIO_MAIN_BIT_FLAG_BACKUP); + ZeroInitScriptVariable(0, VAR_SCENARIO_MAIN_BIT_FLAG); + ZeroInitScriptVariable(0, VAR_SCENARIO_MAIN_BIT_FLAG_BACKUP); s32 idx = 0; do { SaveScriptVariableValueAtIndex(0, VAR_SCENARIO_SELECT_BACKUP, idx, 0); diff --git a/src/script_variable_2.c b/src/script_variable_2.c index dc2576e1..03498e61 100644 --- a/src/script_variable_2.c +++ b/src/script_variable_2.c @@ -3,7 +3,7 @@ #include "enums.h" void InitWorldMapScriptVars() { - ZinitScriptVariable(0, VAR_WORLD_MAP_MARK_LIST_NORMAL); - ZinitScriptVariable(0, VAR_WORLD_MAP_MARK_LIST_SPECIAL); + ZeroInitScriptVariable(0, VAR_WORLD_MAP_MARK_LIST_NORMAL); + ZeroInitScriptVariable(0, VAR_WORLD_MAP_MARK_LIST_SPECIAL); SaveScriptVariableValue(0, VAR_WORLD_MAP_LEVEL, 1); } From e3f5c886c8e7b3bac663ac0bd9b41e97adfeaca4 Mon Sep 17 00:00:00 2001 From: slaw-22 Date: Mon, 8 Dec 2025 20:08:47 +0000 Subject: [PATCH 4/4] Decomp InitEventFlagScriptVars --- asm/include/main_0204B018.inc | 1 + asm/main_0204B018.s | 72 ----------------------------------- include/script_variable.h | 1 + src/script_variable.c | 23 +++++++++++ 4 files changed, 25 insertions(+), 72 deletions(-) diff --git a/asm/include/main_0204B018.inc b/asm/include/main_0204B018.inc index a31ca5a8..d6faacee 100644 --- a/asm/include/main_0204B018.inc +++ b/asm/include/main_0204B018.inc @@ -13,3 +13,4 @@ .public SCRIPT_VARS_VALUES .public ZeroInitScriptVariable .public DefaultInitScriptVariable +.public InitEventFlagScriptVars diff --git a/asm/main_0204B018.s b/asm/main_0204B018.s index 98723787..ba0eda2c 100644 --- a/asm/main_0204B018.s +++ b/asm/main_0204B018.s @@ -232,75 +232,3 @@ _0204B300: .word 0x00000143 _0204B300: .word 0x00000137 #endif arm_func_end InitScriptVariableValues - - arm_func_start InitEventFlagScriptVars -InitEventFlagScriptVars: ; 0x0204B304 - stmdb sp!, {r3, lr} -#ifdef JAPAN - mov r0, #0 - mov r1, #0x1c - mov r2, #0x13c -#else - ldr r2, _0204B3CC ; =0x00000137 - mov r0, #0 - mov r1, #0x1c -#endif - bl SaveScriptVariableValue - mov r0, #0 - mov r2, r0 - mov r1, #0x1d - bl SaveScriptVariableValue -#ifdef JAPAN - mov r0, #0 - mov r1, #0x1e - mov r2, #0x13c -#else - ldr r2, _0204B3CC ; =0x00000137 - mov r0, #0 - mov r1, #0x1e -#endif - bl SaveScriptVariableValue - mov r1, #0x1f - sub r2, r1, #0x20 - mov r0, #0 - bl SaveScriptVariableValue - mov r0, #0 - mov r1, #0x20 - mov r2, #0xbb - bl SaveScriptVariableValue - mov r0, #0 - mov r1, #0x27 - mov r2, r0 - bl SaveScriptVariableValue - mov r0, #0 - mov r1, #0x29 - sub r2, r1, #0x2a - bl SaveScriptVariableValue - mov r0, #0 - mov r1, #0x2b - mov r2, r0 - bl SaveScriptVariableValue - mov r0, #0 - mov r1, #0x2c - mov r2, r0 - bl SaveScriptVariableValue - mov r0, #0 - mov r1, #0x34 - mov r2, r0 - bl SaveScriptVariableValue - mov r0, #0 - mov r1, #0x35 - mov r2, #2 - bl SaveScriptVariableValue - mov r0, #0 - mov r1, #0x36 - mov r2, r0 - bl SaveScriptVariableValue - ldmia sp!, {r3, pc} - .align 2, 0 -#if defined(EUROPE) -_0204B3CC: .word 0x00000143 -#elif !defined(JAPAN) -_0204B3CC: .word 0x00000137 -#endif - arm_func_end InitEventFlagScriptVars diff --git a/include/script_variable.h b/include/script_variable.h index daabc3ea..95d8e36b 100644 --- a/include/script_variable.h +++ b/include/script_variable.h @@ -29,6 +29,7 @@ struct script_var_raw { union script_var_value *value; }; +void InitEventFlagScriptVars(); void DefaultInitScriptVariable(union script_var_value sv_locals[], enum script_var_id sv_id); void ZeroInitScriptVariable(union script_var_value sv_locals[], enum script_var_id sv_id); void LoadScriptVariableRaw(struct script_var_raw* sv_raw, union script_var_value sv_val_local[], const enum script_var_id sv_id); diff --git a/src/script_variable.c b/src/script_variable.c index e4025712..f1b4557a 100644 --- a/src/script_variable.c +++ b/src/script_variable.c @@ -10,6 +10,14 @@ #define LOCAL_SCRIPT_VAR_OFFSET (s16) 0x400 +#ifdef JAPAN +#define VAR_GROUND_ENTER_VALUE 0x13C +#elif EUROPE +#define VAR_GROUND_ENTER_VALUE 0x143 +#else +#define VAR_GROUND_ENTER_VALUE 0x137 +#endif + // Global script variable definitions extern struct script_var_def SCRIPT_VARS[]; // Local script variable definitions @@ -40,6 +48,21 @@ extern s32 SetMoneyCarried(s32 arg0); extern s32 SetMoneyStored(s32 arg0); extern s32 SetNotifyNote(s32 arg0); +void InitEventFlagScriptVars() { + SaveScriptVariableValue(0, VAR_GROUND_ENTER, VAR_GROUND_ENTER_VALUE); + SaveScriptVariableValue(0, VAR_GROUND_ENTER_LINK, 0); + SaveScriptVariableValue(0, VAR_GROUND_GETOUT, VAR_GROUND_ENTER_VALUE); + SaveScriptVariableValue(0, VAR_GROUND_MAP, -1); + SaveScriptVariableValue(0, VAR_GROUND_PLACE, 0xBB); + SaveScriptVariableValue(0, VAR_DUNGEON_ENTER, 0); + SaveScriptVariableValue(0, VAR_DUNGEON_ENTER_INDEX, -1); + SaveScriptVariableValue(0, VAR_DUNGEON_RESULT, 0); + SaveScriptVariableValue(0, VAR_GROUND_START_MODE, 0); + SaveScriptVariableValue(0, VAR_PLAYER_KIND, 0); + SaveScriptVariableValue(0, VAR_ATTENDANT1_KIND, 2); + SaveScriptVariableValue(0, VAR_ATTENDANT2_KIND, 0); +} + void DefaultInitScriptVariable(union script_var_value sv_locals[], enum script_var_id sv_id) { struct script_var_def* def;