@@ -12,7 +12,7 @@ extern s32 GetPartyMembers(s32 param1);
1212extern s32 GetMoneyCarried ();
1313extern s32 GetMoneyStored ();
1414extern s32 GetLanguageType ();
15- extern s32 GetGameMode ();
15+ extern enum game_mode GetGameMode ();
1616extern s32 sub_0204C918 ();
1717extern s32 GetSpecialEpisodeType ();
1818extern s32 GetNotifyNote ();
@@ -77,9 +77,9 @@ s32 LoadScriptVariableValue(union script_var_value sv_local[], enum script_var_i
7777 return GetGameMode ();
7878 case VAR_EXECUTE_SPECIAL_EPISODE_TYPE :
7979 switch (GetGameMode ()) {
80- case EPISODE_IGGLYBUFF_THE_PRODIGY :
80+ case GAME_MODE_1 :
8181 return sub_0204C918 ();
82- case EPISODE_HERE_COMES_TEAM_CHARM :
82+ case GAME_MODE_SPECIAL_EPISODE :
8383 return GetSpecialEpisodeType ();
8484 default :
8585 return -1 ;
@@ -91,3 +91,59 @@ s32 LoadScriptVariableValue(union script_var_value sv_local[], enum script_var_i
9191
9292 return 0 ;
9393}
94+
95+ s32 LoadScriptVariableValueAtIndex (union script_var_value sv_local [], enum script_var_id id , int idx )
96+ {
97+ struct script_var_raw result ;
98+ LoadScriptVariableRaw (& result , sv_local , id );
99+
100+ switch ((s16 )result .def -> type ) {
101+ case VARTYPE_NONE :
102+ break ;
103+ case VARTYPE_BIT : {
104+ u16 offset = idx + result .def -> bitshift ;
105+ u8 val = ((u8 * )result .value )[offset / 8 ];
106+ u8 bit = (1 << (offset & (8 - 1 )));
107+ return (val & bit ) != 0 ;
108+ }
109+ case VARTYPE_STRING :
110+ case VARTYPE_UINT8 :
111+ return ((u8 * )result .value )[idx ];
112+ case VARTYPE_INT8 :
113+ return ((s8 * )result .value )[idx ];
114+ case VARTYPE_UINT16 :
115+ return ((u16 * )result .value )[idx ];
116+ case VARTYPE_INT16 :
117+ return ((s16 * )result .value )[idx ];
118+ case VARTYPE_UINT32 :
119+ case VARTYPE_INT32 :
120+ return ((u32 * )result .value )[idx ];
121+ case VARTYPE_SPECIAL :
122+ switch (id ) {
123+ case VAR_FRIEND_SUM :
124+ return 1 ;
125+ case VAR_UNIT_SUM :
126+ return GetPartyMembers (0 );
127+ case VAR_CARRY_GOLD :
128+ return GetMoneyCarried ();
129+ case VAR_BANK_GOLD :
130+ return GetMoneyStored ();
131+ case VAR_LANGUAGE_TYPE :
132+ return GetLanguageType ();
133+ case VAR_GAME_MODE :
134+ return GetGameMode ();
135+ case VAR_EXECUTE_SPECIAL_EPISODE_TYPE :
136+ switch (GetGameMode ()) {
137+ case GAME_MODE_1 :
138+ return sub_0204C918 ();
139+ case GAME_MODE_SPECIAL_EPISODE :
140+ return GetSpecialEpisodeType ();
141+ default :
142+ return -1 ;
143+ }
144+ case VAR_NOTE_MODIFY_FLAG :
145+ return GetNotifyNote ();
146+ }
147+ }
148+ return 0 ;
149+ }
0 commit comments