From a214005507bac1ed29b2f39580f5d29999091c18 Mon Sep 17 00:00:00 2001 From: slaw-22 <> Date: Fri, 28 Nov 2025 22:00:31 +0000 Subject: [PATCH] Decomp more script var funcs --- asm/include/main_0204C408.inc | 13 --- asm/include/main_02058F24.inc | 4 +- asm/include/overlay_01.inc | 4 +- asm/include/overlay_11.inc | 10 +- asm/main_0204C6C8.s | 207 ---------------------------------- asm/main_02058F24.s | 8 +- asm/overlay_01.s | 8 +- asm/overlay_11.s | 10 +- include/script_variable.h | 1 - include/special_episode.h | 9 ++ include/story_progress.h | 11 ++ main.lsf | 3 +- src/script_variable.c | 33 ++---- src/special_episode.c | 25 ++++ src/story_progress.c | 129 +++++++++++++++++++++ 15 files changed, 205 insertions(+), 270 deletions(-) delete mode 100644 asm/include/main_0204C408.inc delete mode 100644 asm/main_0204C6C8.s create mode 100644 include/special_episode.h create mode 100644 include/story_progress.h create mode 100644 src/special_episode.c create mode 100644 src/story_progress.c diff --git a/asm/include/main_0204C408.inc b/asm/include/main_0204C408.inc deleted file mode 100644 index 0fae2d6c..00000000 --- a/asm/include/main_0204C408.inc +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once -.public DEBUG_SPECIAL_EPISODE_NUMBER -.public Debug_Print -.public EventFlagBackup -.public LoadScriptVariableRaw -.public LoadScriptVariableValue -.public LoadScriptVariableValueAtIndex -.public MemcpySimple -.public SCRIPT_VARS_VALUES -.public SaveScriptVariableValue -.public SaveScriptVariableValueAtIndex -.public ZinitScriptVariable -.public SCENARIO_CALC_DEBUG_MSG diff --git a/asm/include/main_02058F24.inc b/asm/include/main_02058F24.inc index 521f0473..be29d934 100644 --- a/asm/include/main_02058F24.inc +++ b/asm/include/main_02058F24.inc @@ -479,8 +479,8 @@ .public sub_0204AB18 .public sub_0204AF98 .public sub_0204B018 -.public sub_0204C6C8 -.public sub_0204C918 +.public IsStoryBeforePoint +.public GetDebugSpecialEpisodeNumber .public sub_0204C978 .public sub_0204CA1C .public sub_0204D018 diff --git a/asm/include/overlay_01.inc b/asm/include/overlay_01.inc index 659517c0..809b261f 100644 --- a/asm/include/overlay_01.inc +++ b/asm/include/overlay_01.inc @@ -332,8 +332,8 @@ .public sub_0204a1cc .public sub_0204A1CC .public sub_0204AE60 -.public sub_0204C918 -.public sub_0204C928 +.public GetDebugSpecialEpisodeNumber +.public SetDebugSpecialEpisodeNumber .public sub_0204C9A0 .public sub_0204C9C8 .public sub_0204CA1C diff --git a/asm/include/overlay_11.inc b/asm/include/overlay_11.inc index 78902f2b..5a9c8e57 100644 --- a/asm/include/overlay_11.inc +++ b/asm/include/overlay_11.inc @@ -633,11 +633,11 @@ .public CompareScriptVarWithParam .public LoadAndCompareScriptVars .public LoadScriptVarValuePair -.public sub_0204C6C8 -.public sub_0204C734 -.public sub_0204C7AC -.public sub_0204C808 -.public sub_0204C880 +.public IsStoryBeforePoint +.public IsStoryBeforeOrAtPoint +.public IsStoryAtPoint +.public IsStoryAtOrAfterPoint +.public IsStoryAtOrAfterPointStrict .public sub_0204CA48 .public sub_0204CB2C .public sub_0204CDE8 diff --git a/asm/main_0204C6C8.s b/asm/main_0204C6C8.s deleted file mode 100644 index 7ea7b7df..00000000 --- a/asm/main_0204C6C8.s +++ /dev/null @@ -1,207 +0,0 @@ - .include "asm/macros.inc" - .include "main_0204C408.inc" - - .text - - arm_func_start sub_0204C6C8 -sub_0204C6C8: ; 0x0204C6C8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r0, #0 - mov r5, r2 - mov r1, r7 - mov r2, r0 - bl LoadScriptVariableValueAtIndex - mov r4, r0 - mov r1, r7 - mov r0, #0 - mov r2, #1 - bl LoadScriptVariableValueAtIndex - cmp r4, #0x35 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r4, r6 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} - bne _0204C72C - cmp r5, #0 - blt _0204C72C - cmp r0, r5 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} -_0204C72C: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_0204C6C8 - - arm_func_start sub_0204C734 -sub_0204C734: ; 0x0204C734 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r0, #0 - mov r5, r2 - mov r1, r7 - mov r2, r0 - bl LoadScriptVariableValueAtIndex - mov r4, r0 - mov r1, r7 - mov r0, #0 - mov r2, #1 - bl LoadScriptVariableValueAtIndex - cmp r4, #0x35 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r4, r6 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} - bne _0204C7A4 - cmp r5, #0 - blt _0204C79C - cmp r0, r5 - bgt _0204C7A4 - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0204C79C: - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0204C7A4: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_0204C734 - - arm_func_start sub_0204C7AC -sub_0204C7AC: ; 0x0204C7AC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r0, #0 - mov r5, r2 - mov r1, r7 - mov r2, r0 - bl LoadScriptVariableValueAtIndex - mov r4, r0 - mov r1, r7 - mov r0, #0 - mov r2, #1 - bl LoadScriptVariableValueAtIndex - cmp r4, r6 - bne _0204C800 - cmp r5, #0 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} - cmp r0, r5 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} -_0204C800: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_0204C7AC - - arm_func_start sub_0204C808 -sub_0204C808: ; 0x0204C808 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r0, #0 - mov r5, r2 - mov r1, r7 - mov r2, r0 - bl LoadScriptVariableValueAtIndex - mov r4, r0 - mov r1, r7 - mov r0, #0 - mov r2, #1 - bl LoadScriptVariableValueAtIndex - cmp r4, #0x35 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r4, r6 - movgt r0, #1 - ldmgtia sp!, {r3, r4, r5, r6, r7, pc} - bne _0204C878 - cmp r5, #0 - blt _0204C870 - cmp r0, r5 - blt _0204C878 - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0204C870: - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0204C878: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_0204C808 - - arm_func_start sub_0204C880 -sub_0204C880: ; 0x0204C880 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r0, #0 - mov r5, r2 - mov r1, r7 - mov r2, r0 - bl LoadScriptVariableValueAtIndex - mov r4, r0 - mov r1, r7 - mov r0, #0 - mov r2, #1 - bl LoadScriptVariableValueAtIndex - cmp r4, #0x35 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r4, r6 - movgt r0, #1 - ldmgtia sp!, {r3, r4, r5, r6, r7, pc} - bne _0204C8E4 - cmp r5, #0 - blt _0204C8E4 - cmp r0, r5 - movgt r0, #1 - ldmgtia sp!, {r3, r4, r5, r6, r7, pc} -_0204C8E4: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_0204C880 - - arm_func_start GetSpecialEpisodeType -GetSpecialEpisodeType: ; 0x0204C8EC - ldr ip, _0204C8FC ; =LoadScriptVariableValue - mov r0, #0 - mov r1, #0x4a - bx ip - .align 2, 0 -_0204C8FC: .word LoadScriptVariableValue - arm_func_end GetSpecialEpisodeType - - arm_func_start SetSpecialEpisodeType -SetSpecialEpisodeType: ; 0x0204C900 - ldr ip, _0204C914 ; =SaveScriptVariableValue - mov r2, r0 - mov r0, #0 - mov r1, #0x4a - bx ip - .align 2, 0 -_0204C914: .word SaveScriptVariableValue - arm_func_end SetSpecialEpisodeType - - arm_func_start sub_0204C918 -sub_0204C918: ; 0x0204C918 - ldr r0, _0204C924 ; =DEBUG_SPECIAL_EPISODE_NUMBER - ldr r0, [r0] - bx lr - .align 2, 0 -_0204C924: .word DEBUG_SPECIAL_EPISODE_NUMBER - arm_func_end sub_0204C918 - - arm_func_start sub_0204C928 -sub_0204C928: ; 0x0204C928 - ldr r1, _0204C934 ; =DEBUG_SPECIAL_EPISODE_NUMBER - str r0, [r1] - bx lr - .align 2, 0 -_0204C934: .word DEBUG_SPECIAL_EPISODE_NUMBER - arm_func_end sub_0204C928 diff --git a/asm/main_02058F24.s b/asm/main_02058F24.s index 2996cc22..a3f33bfd 100644 --- a/asm/main_02058F24.s +++ b/asm/main_02058F24.s @@ -12403,21 +12403,21 @@ sub_02063240: ; 0x02063240 mov r0, #3 mov r1, #0xc mov r2, #0 - bl sub_0204C6C8 + bl IsStoryBeforePoint cmp r0, #0 movne r0, #0 strneh r0, [r6, #0xa] mov r0, #3 mov r1, #6 mov r2, #0 - bl sub_0204C6C8 + bl IsStoryBeforePoint cmp r0, #0 movne r0, #0 strneh r0, [r6, #0xc] mov r0, #3 mov r1, #8 mov r2, #0 - bl sub_0204C6C8 + bl IsStoryBeforePoint cmp r0, #0 bne _020632B8 ldrb r1, [r4, #1] @@ -16146,7 +16146,7 @@ _0206617C: bl sub_0204872C b _02065F20 _020661B0: - bl sub_0204C918 + bl GetDebugSpecialEpisodeNumber bl SetSpecialEpisodeType mov r0, #3 bl sub_0204B018 diff --git a/asm/overlay_01.s b/asm/overlay_01.s index b2500bea..6e8e2a02 100644 --- a/asm/overlay_01.s +++ b/asm/overlay_01.s @@ -9727,7 +9727,7 @@ _02331180: ldr r0, [r0, #8] cmp r0, #0x20 bne _023311EC - bl sub_0204C918 + bl GetDebugSpecialEpisodeNumber b _023311F0 _023311EC: bl GetSpecialEpisodeType @@ -10815,7 +10815,7 @@ _02332088: b _023324F4 _02332104: mov r0, r1 - bl sub_0204C928 + bl SetDebugSpecialEpisodeNumber ldr r0, _02332508 ; =ov01_0233C178 mov r1, #4 str r1, [r0, #4] @@ -11437,7 +11437,7 @@ _02332900: _02332910: bl GetSpecialEpisodeType mov r5, r0 - bl sub_0204C918 + bl GetDebugSpecialEpisodeNumber mvn r1, #0 cmp r5, r1 beq _02332950 @@ -11765,7 +11765,7 @@ _02332D4C: mov r0, #4 b _02332ED4 _02332D5C: - bl sub_0204C918 + bl GetDebugSpecialEpisodeNumber bl sub_0204CA1C cmp r0, #0 beq _02332DAC diff --git a/asm/overlay_11.s b/asm/overlay_11.s index 9716904a..efd8bf98 100644 --- a/asm/overlay_11.s +++ b/asm/overlay_11.s @@ -3439,7 +3439,7 @@ _022DF154: mov r2, r0 mov r0, r1, asr #0x10 mov r1, r5 - bl sub_0204C6C8 + bl IsStoryBeforePoint cmp r0, #0 ldrneh r0, [r6, #6] ldrne r1, [r4, #0x14] @@ -3459,7 +3459,7 @@ _022DF1A0: mov r2, r0 mov r0, r1, asr #0x10 mov r1, r5 - bl sub_0204C734 + bl IsStoryBeforeOrAtPoint cmp r0, #0 ldrneh r0, [r6, #6] ldrne r1, [r4, #0x14] @@ -3479,7 +3479,7 @@ _022DF1EC: mov r2, r0 mov r0, r1, asr #0x10 mov r1, r5 - bl sub_0204C7AC + bl IsStoryAtPoint cmp r0, #0 ldrneh r0, [r6, #6] ldrne r1, [r4, #0x14] @@ -3499,7 +3499,7 @@ _022DF238: mov r2, r0 mov r0, r1, asr #0x10 mov r1, r5 - bl sub_0204C808 + bl IsStoryAtOrAfterPoint cmp r0, #0 ldrneh r0, [r6, #6] ldrne r1, [r4, #0x14] @@ -3519,7 +3519,7 @@ _022DF284: mov r2, r0 mov r0, r1, asr #0x10 mov r1, r5 - bl sub_0204C880 + bl IsStoryAtOrAfterPointStrict cmp r0, #0 ldrneh r0, [r6, #6] ldrne r1, [r4, #0x14] diff --git a/include/script_variable.h b/include/script_variable.h index 4fe4e1e7..a241db32 100644 --- a/include/script_variable.h +++ b/include/script_variable.h @@ -53,6 +53,5 @@ 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/include/special_episode.h b/include/special_episode.h new file mode 100644 index 00000000..9c4c926e --- /dev/null +++ b/include/special_episode.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_SPECIAL_EPISODE_H +#define PMDSKY_SPECIAL_EPISODE_H + +s32 GetSpecialEpisodeType(); +void SetSpecialEpisodeType(u32 type); +s32 GetDebugSpecialEpisodeNumber(); +void SetDebugSpecialEpisodeNumber(s32 num); + +#endif //PMDSKY_SCRIPTING_H diff --git a/include/story_progress.h b/include/story_progress.h new file mode 100644 index 00000000..a1b9fe6e --- /dev/null +++ b/include/story_progress.h @@ -0,0 +1,11 @@ +#ifndef PMDSKY_STORY_PROGRESS_H +#define PMDSKY_STORY_PROGRESS_H + +void UpdateProgress(enum script_var_id script_var_id, s32 chapter, s32 sub_section); +bool8 IsStoryBeforePoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section); +bool8 IsStoryBeforeOrAtPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section); +s32 IsStoryAtPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section); +s32 IsStoryAtOrAfterPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section); +s32 IsStoryAtOrAfterPointStrict(enum script_var_id script_var_id, s32 chapter, s32 sub_section); + +#endif //PMDSKY_STORY_PROGRESS_H diff --git a/main.lsf b/main.lsf index b0c0dcbb..7d43965b 100644 --- a/main.lsf +++ b/main.lsf @@ -82,7 +82,8 @@ Static main Object asm/main_0204B018.o Object src/script_variable.o Object asm/main_rodata_0209CECC.o - Object asm/main_0204C6C8.o + Object src/story_progress.o + Object src/special_episode.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 c6bf774b..35c5dd83 100644 --- a/src/script_variable.c +++ b/src/script_variable.c @@ -2,6 +2,8 @@ #include "enums.h" #include "main_0200224C.h" #include "script_variable.h" +#include "special_episode.h" +#include "story_progress.h" #define LOCAL_SCRIPT_VAR_OFFSET 0x400 @@ -24,21 +26,19 @@ 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(); extern s32 GetMoneyStored(); extern s32 GetLanguageType(); extern enum game_mode GetGameMode(); -extern s32 sub_0204C918(); +extern s32 GetDebugSpecialEpisodeNumber(); extern s32 GetSpecialEpisodeType(); extern s32 GetNotifyNote(); extern s32 AddMoneyCarried(s32 arg0); extern s32 SetMoneyCarried(s32 arg0); extern s32 SetMoneyStored(s32 arg0); extern s32 SetNotifyNote(s32 arg0); -extern s32 sub_0204C928(s32 arg0); extern void sub_0204CBE8(); extern void ScenarioFlagBackup(); void MemcpySimple(u8* dest, u8* src, s32 n); @@ -103,7 +103,7 @@ s32 LoadScriptVariableValue(union script_var_value sv_local[], enum script_var_i case VAR_EXECUTE_SPECIAL_EPISODE_TYPE: switch(GetGameMode()) { case GAME_MODE_1: - return sub_0204C918(); + return GetDebugSpecialEpisodeNumber(); case GAME_MODE_SPECIAL_EPISODE: return GetSpecialEpisodeType(); default: @@ -160,7 +160,7 @@ s32 LoadScriptVariableValueAtIndex(union script_var_value sv_local[], enum scrip case VAR_EXECUTE_SPECIAL_EPISODE_TYPE: switch (GetGameMode()) { case GAME_MODE_1: - return sub_0204C918(); + return GetDebugSpecialEpisodeNumber(); case GAME_MODE_SPECIAL_EPISODE: return GetSpecialEpisodeType(); default: @@ -221,7 +221,7 @@ void SaveScriptVariableValue(union script_var_value sv_locals[], const enum scri return; case VAR_EXECUTE_SPECIAL_EPISODE_TYPE: if (GetGameMode() == GAME_MODE_1) { - sub_0204C928(new_val); + SetDebugSpecialEpisodeNumber(new_val); return; } return; @@ -291,7 +291,7 @@ void SaveScriptVariableValueAtIndex(union script_var_value sv_locals[], const en return; case VAR_EXECUTE_SPECIAL_EPISODE_TYPE: if (GetGameMode() == GAME_MODE_1) { - sub_0204C928(new_val); + SetDebugSpecialEpisodeNumber(new_val); return; } return; @@ -615,22 +615,3 @@ void LoadScriptVarValuePair(enum script_var_id script_var_id, s32* val_1, s32* v *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); -} diff --git a/src/special_episode.c b/src/special_episode.c new file mode 100644 index 00000000..22df41cb --- /dev/null +++ b/src/special_episode.c @@ -0,0 +1,25 @@ +#include "enums.h" +#include "script_variable.h" +#include "special_episode.h" + +extern s32 DEBUG_SPECIAL_EPISODE_NUMBER; + +s32 GetSpecialEpisodeType() +{ + LoadScriptVariableValue(0, VAR_SPECIAL_EPISODE_TYPE); +} + +void SetSpecialEpisodeType(u32 type) +{ + SaveScriptVariableValue(0, VAR_SPECIAL_EPISODE_TYPE, type); +} + +s32 GetDebugSpecialEpisodeNumber() +{ + return DEBUG_SPECIAL_EPISODE_NUMBER; +} + +void SetDebugSpecialEpisodeNumber(s32 num) +{ + DEBUG_SPECIAL_EPISODE_NUMBER = num; +} diff --git a/src/story_progress.c b/src/story_progress.c new file mode 100644 index 00000000..904b5c3c --- /dev/null +++ b/src/story_progress.c @@ -0,0 +1,129 @@ + +#include "debug.h" +#include "enums.h" +#include "script_variable.h" +#include "story_progress.h" + +extern const u8 SCENARIO_CALC_DEBUG_MSG; + +void UpdateProgress(enum script_var_id script_var_id, s32 chapter, s32 sub_section) +{ + 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, + chapter, sub_section); + + // VAR_SCENARIO_MAIN stores maingame story progression + if (script_var_id == VAR_SCENARIO_MAIN) { + if ((chapter!= old_progress) || (sub_section != 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, chapter); + SaveScriptVariableValueAtIndex(0, script_var_id, 1, sub_section); +} + +bool8 IsStoryBeforePoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section) +{ + s32 cur_chapter = LoadScriptVariableValueAtIndex(0, script_var_id, 0); + s32 cur_sub_sec = LoadScriptVariableValueAtIndex(0, script_var_id, 1); + + if (cur_chapter == 0x35) { + return FALSE; + } + if (cur_chapter < chapter) { + return TRUE; + } + if ((cur_chapter == chapter) && (sub_section >= 0) && (cur_sub_sec < sub_section)) { + return TRUE; + } + return FALSE; +} + +bool8 IsStoryBeforeOrAtPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section) +{ + s32 cur_chapter = LoadScriptVariableValueAtIndex(0, script_var_id, 0); + s32 cur_sub_sec = LoadScriptVariableValueAtIndex(0, script_var_id, 1); + + if (cur_chapter == 0x35) { + return FALSE; + } + + if (cur_chapter < chapter) { + return TRUE; + } + + if (cur_chapter == chapter) { + if (sub_section >= 0) { + if (cur_sub_sec <= sub_section) { + return TRUE; + } + } else { + return TRUE; + } + } + return FALSE; +} + +s32 IsStoryAtPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section) +{ + s32 cur_chapter = LoadScriptVariableValueAtIndex(0, script_var_id, 0); + s32 cur_sub_sec = LoadScriptVariableValueAtIndex(0, script_var_id, 1); + + if (cur_chapter == chapter) { + if (sub_section < 0) { + return TRUE; + } + if (cur_sub_sec == sub_section) { + return TRUE; + } + } + + return FALSE; +} + +s32 IsStoryAtOrAfterPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section) +{ + s32 cur_sub_sec; + s32 cur_chapter; + + cur_chapter = LoadScriptVariableValueAtIndex(0, script_var_id, 0); + cur_sub_sec = LoadScriptVariableValueAtIndex(0, script_var_id, 1); + + if (cur_chapter == 0x35) { + return FALSE; + } + if (cur_chapter > chapter) { + return TRUE; + } + if (cur_chapter == chapter) { + if (sub_section >= 0) { + if (cur_sub_sec >= sub_section) { + return TRUE; + } + + } else { + return TRUE; + } + } + return FALSE; +} + +s32 IsStoryAtOrAfterPointStrict(enum script_var_id script_var_id, s32 chapter, s32 sub_section) +{ + s32 cur_chapter = LoadScriptVariableValueAtIndex(0, script_var_id, 0); + s32 cur_sub_sec = LoadScriptVariableValueAtIndex(0, script_var_id, 1); + + if (cur_chapter == 0x35) { + return FALSE; + } + if (cur_chapter > chapter) { + return TRUE; + } + if ((cur_chapter == chapter) && (sub_section >= 0) && (cur_sub_sec > sub_section)) { + return TRUE; + } + return FALSE; +}