@@ -65,7 +65,223 @@ const char* MAP_MESSAGES[] = {
6565 "~J0(2.5)\tThat_light!? ~E "
6666};
6767
68- INCLUDE_ASM ("asm/maps/map6_s02/nonmatchings/map6_s02_2" , func_800CF0B8 );
68+ void func_800CF0B8 (void )
69+ {
70+ bool hasSkippedEarly ;
71+
72+ Savegame_EventFlagClear (EventFlag_412 );
73+
74+ hasSkippedEarly = false;
75+ if (g_Controller0 -> btnsClicked_10 & g_GameWorkPtr -> config_0 .controllerConfig_0 .skip_4 && g_SysWork .sysStateStep_C [0 ] >= 2 )
76+ {
77+ if (g_SysWork .sysStateStep_C [0 ] <= 19 )
78+ {
79+ // Sets flag to true if player skipped before step 19.
80+ hasSkippedEarly = g_SysWork .sysStateStep_C [0 ] < 19 ;
81+ SysWork_StateStepSet (0 , 20 );
82+ }
83+ }
84+
85+ switch (g_SysWork .sysStateStep_C [0 ])
86+ {
87+ case 0 :
88+ sharedFunc_800D20E4_0_s00 ();
89+
90+ g_SysWork .field_30 = 20 ;
91+ ScreenFade_ResetTimestep ();
92+
93+ func_8003D03C ();
94+ sharedFunc_800D2EB4_0_s00 ();
95+
96+ Savegame_EventFlagClear (EventFlag_405 );
97+
98+ SysWork_StateStepIncrement (0 );
99+
100+ Camera_PositionSet (NULL , Q12 (57.09f ), Q12 (-3.23f ), Q12 (-20.41f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), true);
101+ Camera_LookAtSet (NULL , Q12 (60.07f ), Q12 (-0.94f ), Q12 (-19.06f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), true);
102+
103+ Savegame_EventFlagSet (EventFlag_412 );
104+
105+ g_SysWork .player_4C .chara_0 .position_18 .vx = FP_MULTIPLY_FLOAT (Math_Sin (FP_ANGLE (135.0f )), 0.9f , Q12_SHIFT ) + Q12 (60.0f );
106+ g_SysWork .player_4C .chara_0 .position_18 .vy = Q12 (1.64f );
107+ g_SysWork .player_4C .chara_0 .position_18 .vz = FP_MULTIPLY_FLOAT (Math_Cos (FP_ANGLE (135.0f )), 0.9f , Q12_SHIFT ) - Q12 (20.0f );
108+ g_SysWork .player_4C .chara_0 .rotation_24 .vy = FP_ANGLE (45.0f );
109+
110+ D_800D4E09 = 1 ;
111+ break ;
112+
113+ case 1 :
114+ SysWork_StateStepIncrementAfterFade (0 , false, 0 , Q12 (0.0f ), false);
115+ func_80085EB8 (0 , & g_SysWork .player_4C .chara_0 , 53 , false);
116+ Chara_Load (0 , Chara_Alessa , & g_SysWork .npcCoords_FC0 [0 ], CHARA_FORCE_FREE_ALL , NULL , NULL );
117+ SysWork_StateStepIncrement (0 );
118+
119+ case 2 :
120+ g_SysWork .field_28 += g_DeltaTime0 ;
121+
122+ g_SysWork .player_4C .chara_0 .position_18 .vx = FP_MULTIPLY_FLOAT (Math_Sin (FP_ANGLE (135.0f ) - (g_SysWork .field_28 >> 2 )), 0.9f , Q12_SHIFT ) + Q12 (60.0f );
123+ g_SysWork .player_4C .chara_0 .position_18 .vz = FP_MULTIPLY_FLOAT (Math_Cos (FP_ANGLE (135.0f ) - (g_SysWork .field_28 >> 2 )), 0.9f , Q12_SHIFT ) - Q12 (20.0f );
124+ g_SysWork .player_4C .chara_0 .rotation_24 .vy = FP_ANGLE (45.0f ) - (g_SysWork .field_28 >> 2 );
125+
126+ if ((g_SysWork .field_28 >> 2 ) > FP_ANGLE (140.7f ))
127+ {
128+ SysWork_StateStepIncrement (0 );
129+ }
130+ break ;
131+
132+ case 3 :
133+ func_80085EB8 (0 , & g_SysWork .player_4C .chara_0 , 52 , false);
134+ SysWork_StateStepIncrement (0 );
135+
136+ case 4 :
137+ MapMsg_DisplayAndHandleSelection (false, 15 , 0 , 0 , 0 , false);
138+ break ;
139+
140+ case 5 :
141+ func_80085EB8 (0 , & g_SysWork .player_4C .chara_0 , 71 , false);
142+ SysWork_StateStepIncrement (0 );
143+
144+ case 6 :
145+ SysWork_StateStepIncrementDelayed (Q12 (1.5f ), false);
146+ break ;
147+
148+ case 7 :
149+ func_80088D0C ();
150+ Chara_Spawn (Chara_Alessa , 0 , Q12 (60.0f ), Q12 (-23.0f ), 0 , 3 );
151+ SysWork_StateStepIncrement (0 );
152+ break ;
153+
154+ case 8 :
155+ Camera_PositionSet (NULL , Q12 (56.79f ), Q12 (-7.9f ), Q12 (-27.3f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), true);
156+ Camera_LookAtSet (NULL , Q12 (57.96f ), Q12 (-5.03f ), Q12 (-24.77f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), true);
157+
158+ g_SysWork .player_4C .chara_0 .position_18 .vx = Q12 (59.6f );
159+ g_SysWork .player_4C .chara_0 .position_18 .vz = Q12 (-19.0f );
160+ g_SysWork .player_4C .chara_0 .rotation_24 .vy = FP_ANGLE (180.0f );
161+
162+ func_80085EB8 (0 , & g_SysWork .player_4C .chara_0 , 51 , false);
163+ func_80085EB8 (0 , & g_SysWork .npcs_1A0 [0 ], 1 , false);
164+
165+ Savegame_EventFlagSet (EventFlag_412 );
166+ D_800D4E09 = 0 ;
167+ SysWork_StateStepIncrement (0 );
168+
169+ case 9 :
170+ SysWork_StateStepIncrementDelayed (Q12 (2.0f ), false);
171+ break ;
172+
173+ case 10 :
174+ Camera_PositionSet (NULL , Q12 (57.42f ), Q12 (-2.48f ), Q12 (-16.58f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), true);
175+ Camera_LookAtSet (NULL , Q12 (59.23f ), Q12 (-1.24f ), Q12 (-19.93f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), true);
176+ g_SysWork .player_4C .chara_0 .position_18 .vx = Q12 (59.0f );
177+ g_SysWork .player_4C .chara_0 .position_18 .vz = Q12 (-19.5f );
178+ g_SysWork .player_4C .chara_0 .rotation_24 .vy = ratan2 (
179+ g_SysWork .npcs_1A0 [0 ].position_18 .vx - g_SysWork .player_4C .chara_0 .position_18 .vx ,
180+ g_SysWork .npcs_1A0 [0 ].position_18 .vz - g_SysWork .player_4C .chara_0 .position_18 .vz );
181+
182+ func_8003D468 (34 , true);
183+ Savegame_EventFlagSet (EventFlag_412 );
184+ SysWork_StateStepIncrement (0 );
185+
186+ case 11 :
187+ SysWork_StateStepIncrementDelayed (Q12 (0.5f ), false);
188+ break ;
189+
190+ case 12 :
191+ g_SysWork .npcs_1A0 [0 ].timer_C6 += FP_MULTIPLY_FLOAT_PRECISE (g_DeltaTime0 , 0.25f , Q12_SHIFT );
192+ SysWork_StateStepIncrementDelayed (Q12 (0.3f ), false);
193+ Map_MessageWithAudio (16 , & D_800D4E08 , & D_800D3B40 );
194+ break ;
195+
196+ case 13 :
197+ func_80085EB8 (0 , & g_SysWork .player_4C .chara_0 , 111 , false);
198+ SysWork_StateStepIncrement (0 );
199+
200+ case 14 :
201+ Map_MessageWithAudio (16 , & D_800D4E08 , & D_800D3B40 );
202+ g_SysWork .npcs_1A0 [0 ].timer_C6 += FP_MULTIPLY_FLOAT_PRECISE (g_DeltaTime0 , 0.25f , Q12_SHIFT );
203+ if (g_SysWork .npcs_1A0 [0 ].timer_C6 > Q12 (1.0f ))
204+ {
205+ g_SysWork .npcs_1A0 [0 ].timer_C6 = Q12 (1.0f );
206+ }
207+ break ;
208+
209+ case 15 :
210+ g_SysWork .npcs_1A0 [0 ].timer_C6 += FP_MULTIPLY_FLOAT_PRECISE (g_DeltaTime0 , 0.25f , Q12_SHIFT );
211+ if (g_SysWork .npcs_1A0 [0 ].timer_C6 > Q12 (1.0f ))
212+ {
213+ g_SysWork .npcs_1A0 [0 ].timer_C6 = Q12 (1.0f );
214+ SysWork_StateStepIncrement (0 );
215+ }
216+ break ;
217+
218+ case 16 :
219+ func_80088F94 (& g_SysWork .npcs_1A0 [0 ], 0 , 0 );
220+ SysWork_StateStepIncrement (0 );
221+
222+ case 17 :
223+ func_80085EB8 (1 , & g_SysWork .player_4C .chara_0 , 0 , false);
224+ break ;
225+
226+ case 18 :
227+ Camera_PositionSet (NULL , Q12 (64.87f ), Q12 (-5.4f ), Q12 (-14.82f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), true);
228+ Camera_LookAtSet (NULL , Q12 (62.29f ), Q12 (-3.36f ), Q12 (-17.09f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), Q12 (0.0f ), true);
229+
230+ func_80085EB8 (0 , & g_SysWork .player_4C .chara_0 , 51 , false);
231+ func_8003D01C ();
232+ sharedFunc_800D2EF4_0_s00 ();
233+
234+ Savegame_EventFlagSet (EventFlag_412 );
235+ SysWork_StateStepIncrement (0 );
236+
237+ case 19 :
238+ Map_MessageWithAudio (17 , & D_800D4E08 , & D_800D3B40 );
239+ if (g_SysWork .sysStateStep_C [0 ] != 19 )
240+ {
241+ SysWork_StateStepReset ();
242+ }
243+ break ;
244+
245+ case 20 :
246+ SysWork_StateStepIncrementAfterFade (2 , true, 0 , Q12 (0.0f ), false);
247+ break ;
248+
249+ case 21 :
250+ Fs_QueueWaitForEmpty ();
251+ vcReturnPreAutoCamWork (true);
252+
253+ if (!hasSkippedEarly )
254+ {
255+ func_8003D01C ();
256+ sharedFunc_800D2EF4_0_s00 ();
257+ }
258+
259+ g_SysWork .player_4C .chara_0 .position_18 .vx = Q12 (59.0f );
260+ g_SysWork .player_4C .chara_0 .position_18 .vz = Q12 (-19.5f );
261+ g_SysWork .player_4C .chara_0 .rotation_24 .vy = FP_ANGLE (164.1f );
262+
263+ func_80088F94 (& g_SysWork .npcs_1A0 [0 ], 0 , 0 );
264+ sharedFunc_800D2244_0_s00 (true);
265+
266+ SysWork_StateSetNext (SysState_Gameplay );
267+
268+ SysWork_StateStepIncrementAfterFade (0 , false, 0 , Q12 (0.0f ), false);
269+ SysWork_StateStepIncrement (0 );
270+
271+ default :
272+ sharedFunc_800D2244_0_s00 (false);
273+ SysWork_StateSetNext (SysState_Gameplay );
274+
275+ Savegame_EventFlagSet (EventFlag_410 );
276+ Savegame_EventFlagClear (EventFlag_407 );
277+ Savegame_MapMarkingSet (MapMarkFlag_ResortTown_LighthouseCheck );
278+
279+ SysWork_StateStepIncrementAfterFade (0 , false, 2 , Q12 (0.0f ), false);
280+ vcReturnPreAutoCamWork (false);
281+ D_800D4E09 = 0 ;
282+ break ;
283+ }
284+ }
69285
70286#include "maps/shared/SysWork_StateStepIncrementAfterTime.h" // 0x800CFB9C
71287
0 commit comments