diff --git a/asm/include/main_0203C774.inc b/asm/include/main_0203C774.inc index fa008220..7bc47541 100644 --- a/asm/include/main_0203C774.inc +++ b/asm/include/main_0203C774.inc @@ -463,7 +463,7 @@ .public sub_02039218 .public sub_0203931C .public sub_0204B028 -.public sub_0204C9F4 +.public SetSpecialEpOpenOld .public sub_0204CDB8 .public sub_0204E154 .public sub_0204E19C diff --git a/asm/include/main_0204C94C.inc b/asm/include/main_0204C94C.inc deleted file mode 100644 index 477b7e50..00000000 --- a/asm/include/main_0204C94C.inc +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once -.public LoadScriptVariableValueAtIndex -.public SaveScriptVariableValueAtIndex -.public ScriptVariablesEqual diff --git a/asm/include/main_02058F24.inc b/asm/include/main_02058F24.inc index be29d934..4fa4620e 100644 --- a/asm/include/main_02058F24.inc +++ b/asm/include/main_02058F24.inc @@ -481,8 +481,8 @@ .public sub_0204B018 .public IsStoryBeforePoint .public GetDebugSpecialEpisodeNumber -.public sub_0204C978 -.public sub_0204CA1C +.public SetSpecialEpisodeOpen +.public IsSpecialEpisodeBeaten .public sub_0204D018 .public sub_0204E210 .public sub_0204E6FC diff --git a/asm/include/overlay_01.inc b/asm/include/overlay_01.inc index 809b261f..395d7df4 100644 --- a/asm/include/overlay_01.inc +++ b/asm/include/overlay_01.inc @@ -334,9 +334,9 @@ .public sub_0204AE60 .public GetDebugSpecialEpisodeNumber .public SetDebugSpecialEpisodeNumber -.public sub_0204C9A0 -.public sub_0204C9C8 -.public sub_0204CA1C +.public IsSpecialEpisodeOpenMismatch +.public IsSpecialEpOpenOld +.public IsSpecialEpisodeBeaten .public sub_0204DF54 .public sub_0204DFB0 .public sub_0204E02C diff --git a/asm/include/overlay_06.inc b/asm/include/overlay_06.inc index 65a528cf..03b07c2a 100644 --- a/asm/include/overlay_06.inc +++ b/asm/include/overlay_06.inc @@ -71,7 +71,7 @@ .public sub_0204A018 .public sub_0204A1CC .public sub_0204AE60 -.public sub_0204C978 +.public SetSpecialEpisodeOpen .public sub_0204E210 .public sub_02050974 .public sub_020509BC diff --git a/asm/include/overlay_09.inc b/asm/include/overlay_09.inc index 5d8394a5..96c3ef31 100644 --- a/asm/include/overlay_09.inc +++ b/asm/include/overlay_09.inc @@ -63,6 +63,6 @@ .public sub_02032684 .public sub_02032984 .public sub_02033758 -.public sub_0204CA1C +.public IsSpecialEpisodeBeaten .public sub_02052060 .public UpdateWindow diff --git a/asm/include/overlay_11.inc b/asm/include/overlay_11.inc index 5a9c8e57..57d53883 100644 --- a/asm/include/overlay_11.inc +++ b/asm/include/overlay_11.inc @@ -638,7 +638,7 @@ .public IsStoryAtPoint .public IsStoryAtOrAfterPoint .public IsStoryAtOrAfterPointStrict -.public sub_0204CA48 +.public SetSpecialEpisodeBeaten .public sub_0204CB2C .public sub_0204CDE8 .public sub_0204CE48 diff --git a/asm/main_0203C774.s b/asm/main_0203C774.s index 48522c9d..398eeaf7 100644 --- a/asm/main_0203C774.s +++ b/asm/main_0203C774.s @@ -14613,7 +14613,7 @@ InitSpecialEpisodeHero: ; 0x020484E8 bl sub_0204CDB8 mov r0, r4 mov r1, #1 - bl sub_0204C9F4 + bl SetSpecialEpOpenOld cmp r4, #4 addls pc, pc, r4, lsl #2 b _02048578 diff --git a/asm/main_0204C94C.s b/asm/main_0204C94C.s deleted file mode 100644 index cd0c346f..00000000 --- a/asm/main_0204C94C.s +++ /dev/null @@ -1,108 +0,0 @@ - .include "asm/macros.inc" - .include "main_0204C94C.inc" - - .text - - arm_func_start IsSpecialEpisodeOpen -IsSpecialEpisodeOpen: ; 0x0204C94C - stmdb sp!, {r3, lr} - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - mov r0, #0 - mov r1, #0x4b - bl LoadScriptVariableValueAtIndex - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end IsSpecialEpisodeOpen - - arm_func_start sub_0204C978 -sub_0204C978: ; 0x0204C978 - ldr ip, _0204C99C ; =SaveScriptVariableValueAtIndex - cmp r1, #0 - movne r3, #1 - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - moveq r3, #0 - mov r0, #0 - mov r1, #0x4b - bx ip - .align 2, 0 -_0204C99C: .word SaveScriptVariableValueAtIndex - arm_func_end sub_0204C978 - - arm_func_start sub_0204C9A0 -sub_0204C9A0: ; 0x0204C9A0 - stmdb sp!, {r3, lr} - mov r0, #0 - mov r1, #0x4b - mov r2, #0x4c - bl ScriptVariablesEqual - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end sub_0204C9A0 - - arm_func_start sub_0204C9C8 -sub_0204C9C8: ; 0x0204C9C8 - stmdb sp!, {r3, lr} - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - mov r0, #0 - mov r1, #0x4c - bl LoadScriptVariableValueAtIndex - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end sub_0204C9C8 - - arm_func_start sub_0204C9F4 -sub_0204C9F4: ; 0x0204C9F4 - ldr ip, _0204CA18 ; =SaveScriptVariableValueAtIndex - cmp r1, #0 - movne r3, #1 - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - moveq r3, #0 - mov r0, #0 - mov r1, #0x4c - bx ip - .align 2, 0 -_0204CA18: .word SaveScriptVariableValueAtIndex - arm_func_end sub_0204C9F4 - - arm_func_start sub_0204CA1C -sub_0204CA1C: ; 0x0204CA1C - stmdb sp!, {r3, lr} - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - mov r0, #0 - mov r1, #0x4d - bl LoadScriptVariableValueAtIndex - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end sub_0204CA1C - - arm_func_start sub_0204CA48 -sub_0204CA48: ; 0x0204CA48 - ldr ip, _0204CA6C ; =SaveScriptVariableValueAtIndex - cmp r1, #0 - movne r3, #1 - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - moveq r3, #0 - mov r0, #0 - mov r1, #0x4d - bx ip - .align 2, 0 -_0204CA6C: .word SaveScriptVariableValueAtIndex - arm_func_end sub_0204CA48 diff --git a/asm/main_02058F24.s b/asm/main_02058F24.s index a3f33bfd..e2478617 100644 --- a/asm/main_02058F24.s +++ b/asm/main_02058F24.s @@ -11467,7 +11467,7 @@ _02062694: ; jump table b _020626AC ; case 5 _020626AC: mov r0, #0 - bl sub_0204CA1C + bl IsSpecialEpisodeBeaten cmp r0, #0 moveq r0, #0 beq _02062754 @@ -18505,7 +18505,7 @@ _020680D0: cmp r0, #5 bne _02068158 mov r0, #0 - bl sub_0204CA1C + bl IsSpecialEpisodeBeaten cmp r0, #0 bne _0206812C bl sub_020692B4 @@ -20987,7 +20987,7 @@ _0206A1B0: bl InitPreprocessorArgs mov r0, #2 mov r1, #1 - bl sub_0204C978 + bl SetSpecialEpisodeOpen add r0, sp, #0x7e mov r1, #0x2a bl MemZero diff --git a/asm/overlay_01.s b/asm/overlay_01.s index 6e8e2a02..401701cb 100644 --- a/asm/overlay_01.s +++ b/asm/overlay_01.s @@ -9890,7 +9890,7 @@ _023313FC: ldr r0, [r0, #0x114] cmp r0, #1 ble _02331480 - bl sub_0204C9A0 + bl IsSpecialEpisodeOpenMismatch cmp r0, #0 beq _0233145C cmp r4, #0 @@ -11173,12 +11173,12 @@ ov01_02332580: ; 0x02332580 ldr r4, _02332634 ; =ov01_0233B678 beq _023325E4 mov r0, r7 - bl sub_0204CA1C + bl IsSpecialEpisodeBeaten cmp r0, #0 ldrne r8, _02332638 ; =ov01_0233B6A4 bne _023325D8 mov r0, r7 - bl sub_0204C9C8 + bl IsSpecialEpOpenOld cmp r0, #0 ldreq r8, _0233263C ; =ov01_0233B6B0 _023325D8: @@ -11766,7 +11766,7 @@ _02332D4C: b _02332ED4 _02332D5C: bl GetDebugSpecialEpisodeNumber - bl sub_0204CA1C + bl IsSpecialEpisodeBeaten cmp r0, #0 beq _02332DAC ldr r0, _02332EDC ; =ov01_0233C184 @@ -12398,7 +12398,7 @@ _023335C4: mvn r5, #1 _023335D0: mov r0, r7 - bl sub_0204CA1C + bl IsSpecialEpisodeBeaten cmp r0, #0 beq _02333604 mov r0, r7 diff --git a/asm/overlay_06.s b/asm/overlay_06.s index 09017960..a39271c0 100644 --- a/asm/overlay_06.s +++ b/asm/overlay_06.s @@ -600,7 +600,7 @@ _0233D184: _0233D1CC: mov r0, #2 mov r1, #1 - bl sub_0204C978 + bl SetSpecialEpisodeOpen #ifdef NORTH_AMERICA mov r0, #0x1c add r1, r0, #0x3780 @@ -1977,7 +1977,7 @@ _0233E418: ldr r2, [r0] mov r0, #2 strb r1, [r2, #0x21c] - bl sub_0204C978 + bl SetSpecialEpisodeOpen ldr r1, _0233E930 ; =0x000037A5 mov r0, #0x1c bl ov06_0233CDC8 diff --git a/asm/overlay_09.s b/asm/overlay_09.s index 1fa9ab2d..d6db4aa9 100644 --- a/asm/overlay_09.s +++ b/asm/overlay_09.s @@ -58,7 +58,7 @@ _0233CAEC: b _0233CB90 _0233CB38: ldr r0, [r7] - bl sub_0204CA1C + bl IsSpecialEpisodeBeaten cmp r0, #0 bne _0233CB8C ldr r2, [sb] diff --git a/asm/overlay_11.s b/asm/overlay_11.s index efd8bf98..263414d7 100644 --- a/asm/overlay_11.s +++ b/asm/overlay_11.s @@ -3313,7 +3313,7 @@ _022DEF8C: ; 0x022DEF8C blt _022DEFC0 sub r0, r4, #0x3e8 mov r1, #1 - bl sub_0204CA48 + bl SetSpecialEpisodeBeaten ldr r0, _022DFE08 ; =ov11_02316B0C sub r1, r4, #0x3e8 ldrb r0, [r0, r1] diff --git a/include/main_0204C938.h b/include/main_0204C938.h deleted file mode 100644 index 77bb8548..00000000 --- a/include/main_0204C938.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PMDSKY_MAIN_0204C938_H -#define PMDSKY_MAIN_0204C938_H - -// Gets the special episode type from the EXECUTE_SPECIAL_EPISODE_TYPE script variable. -s32 GetExecuteSpecialEpisodeType(); - -#endif //PMDSKY_MAIN_0204C938_H diff --git a/include/script_variable.h b/include/script_variable.h index a241db32..2a833e9d 100644 --- a/include/script_variable.h +++ b/include/script_variable.h @@ -38,7 +38,7 @@ s32 LoadScriptVariableValueSum(union script_var_value sv_local[], const enum scr 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); void SaveScriptVariableValueBytes(const enum script_var_id sv_id, u8* result, s32 num_bytes); -s32 ScriptVariablesEqual(union script_var_value sv_val_ptr_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2); +bool8 ScriptVariablesEqual(union script_var_value sv_val_ptr_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2); s32 CalcScriptVariables(s32 param_1, s32 param_2, enum script_calc_operation operation); bool8 CompareScriptVariables(s32 param_1, s32 param_2, enum compare_operation operation); s32 CalcScriptVariablesVeneer(s32 param_1, s32 param_2, enum script_calc_operation operation); diff --git a/include/special_episode.h b/include/special_episode.h index 9c4c926e..e7fb5639 100644 --- a/include/special_episode.h +++ b/include/special_episode.h @@ -5,5 +5,14 @@ s32 GetSpecialEpisodeType(); void SetSpecialEpisodeType(u32 type); s32 GetDebugSpecialEpisodeNumber(); void SetDebugSpecialEpisodeNumber(s32 num); +// Gets the special episode type from the EXECUTE_SPECIAL_EPISODE_TYPE script variable. +s32 GetExecuteSpecialEpisodeType(); +bool8 IsSpecialEpisodeOpen(u32 idx); +void SetSpecialEpisodeOpen(u32 idx, u32 episode_open); +bool8 IsSpecialEpisodeOpenMismatch(); +bool8 IsSpecialEpOpenOld(u32 idx); +void SetSpecialEpOpenOld(u32 idx, u32 val); +bool8 IsSpecialEpisodeBeaten(u32 idx); +void SetSpecialEpisodeBeaten(u32 idx, u32 special_ep_beaten); #endif //PMDSKY_SCRIPTING_H diff --git a/main.lsf b/main.lsf index 132111ba..d3a61549 100644 --- a/main.lsf +++ b/main.lsf @@ -84,8 +84,6 @@ Static main Object asm/main_rodata_0209CECC.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 Object asm/main_0204CA94.o Object src/main_0204CB94.o diff --git a/src/main_0200EDC0.c b/src/main_0200EDC0.c index 5ec83308..386e82b0 100644 --- a/src/main_0200EDC0.c +++ b/src/main_0200EDC0.c @@ -1,9 +1,9 @@ #include "main_0200EDC0.h" #include "item.h" -#include "main_0204C938.h" #include "main_0204CB94.h" #include "main_020517D4.h" #include "script_variable.h" +#include "special_episode.h" extern struct bag_items *BAG_ITEMS_PTR_MIRROR; diff --git a/src/main_0204C938.c b/src/main_0204C938.c deleted file mode 100644 index bdf61b16..00000000 --- a/src/main_0204C938.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "main_0204C938.h" -#include "script_variable.h" - -s32 GetExecuteSpecialEpisodeType() -{ - return LoadScriptVariableValue(0, VAR_EXECUTE_SPECIAL_EPISODE_TYPE); -} diff --git a/src/script_variable.c b/src/script_variable.c index 35c5dd83..c26841a5 100644 --- a/src/script_variable.c +++ b/src/script_variable.c @@ -360,7 +360,7 @@ void SaveScriptVariableValueBytes(const enum script_var_id sv_id, u8* result, s3 } } -s32 ScriptVariablesEqual(union script_var_value sv_val_ptr_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2) +bool8 ScriptVariablesEqual(union script_var_value sv_val_ptr_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2) { struct script_var_raw script_var_raw_1, script_var_raw_2; @@ -372,11 +372,11 @@ s32 ScriptVariablesEqual(union script_var_value sv_val_ptr_local[], enum script_ for(int idx = 0; idx < n_values; idx++) { if (LoadScriptVariableValueAtIndex(sv_val_ptr_local, sv_id_1, idx) != LoadScriptVariableValueAtIndex(sv_val_ptr_local, sv_id_2, idx)) { - return 0; + return FALSE; } } - return 1; + return TRUE; } s32 CalcScriptVariables(s32 param_1, s32 param_2, enum script_calc_operation operation) diff --git a/src/special_episode.c b/src/special_episode.c index 22df41cb..746bd637 100644 --- a/src/special_episode.c +++ b/src/special_episode.c @@ -23,3 +23,83 @@ void SetDebugSpecialEpisodeNumber(s32 num) { DEBUG_SPECIAL_EPISODE_NUMBER = num; } + +s32 GetExecuteSpecialEpisodeType() +{ + return LoadScriptVariableValue(0, VAR_EXECUTE_SPECIAL_EPISODE_TYPE); +} + +bool8 IsSpecialEpisodeOpen(u32 idx) +{ + s32 val = LoadScriptVariableValueAtIndex(0, VAR_SPECIAL_EPISODE_OPEN, idx); + return val != 0; +} + +void SetSpecialEpisodeOpen(u32 idx, u32 episode_open) +{ + s32 val; + if(episode_open != FALSE) { + val = TRUE; + } else { + val = FALSE; + } + + SaveScriptVariableValueAtIndex(0, VAR_SPECIAL_EPISODE_OPEN, idx, val); +} + +bool8 IsSpecialEpisodeOpenMismatch() +{ + u32 ret; + bool8 result = ScriptVariablesEqual(0, VAR_SPECIAL_EPISODE_OPEN, VAR_SPECIAL_EPISODE_OPEN_OLD); + if(result == FALSE) + { + ret = TRUE; + } else { + ret = FALSE; + } + + return ret; +} + +bool8 IsSpecialEpOpenOld(u32 idx) +{ + s32 val = LoadScriptVariableValueAtIndex(0, VAR_SPECIAL_EPISODE_OPEN_OLD, idx); + if(val == 0) { + return FALSE; + } else { + return TRUE; + } +} + +void SetSpecialEpOpenOld(u32 idx, u32 episode_open) +{ + s32 new_val; + if(episode_open == 0) { + new_val = 0; + } else { + new_val = 1; + } + SaveScriptVariableValueAtIndex(0, VAR_SPECIAL_EPISODE_OPEN_OLD, idx, new_val); +} + +bool8 IsSpecialEpisodeBeaten(u32 idx) +{ + s32 val = LoadScriptVariableValueAtIndex(0, VAR_SPECIAL_EPISODE_CONQUEST, idx); + if(val == 0) { + return FALSE; + } else { + return TRUE; + } +} + +void SetSpecialEpisodeBeaten(u32 idx, u32 special_ep_beaten) +{ + s32 new_val; + if(special_ep_beaten == 0) + { + new_val = 0; + } else { + new_val = 1; + } + SaveScriptVariableValueAtIndex(0, VAR_SPECIAL_EPISODE_CONQUEST, idx, new_val); +}