Skip to content

Commit 2f1e7aa

Browse files
committed
map6_s02: func_800CF0B8, fixups
1 parent 257d7b9 commit 2f1e7aa

6 files changed

Lines changed: 248 additions & 19 deletions

File tree

include/event_flags.h

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -229,18 +229,18 @@ typedef enum _EventFlag
229229

230230
EventFlag_260 = 260,
231231

232-
EventFlag_M3S05_CabinedPushed = 282,
233-
EventFlag_M3S05_AlcoholPouredOnVeins = 283,
234-
EventFlag_284 = 284,
235-
EventFlag_285 = 285,
236-
EventFlag_286 = 286,
232+
EventFlag_M3S05_CabinedPushed = 282,
233+
EventFlag_M3S05_AlcoholPouredOnVines = 283,
234+
EventFlag_284 = 284,
235+
EventFlag_285 = 285,
236+
EventFlag_286 = 286,
237237

238238
EventFlag_288 = 288,
239239

240240
EventFlag_M3S05_PickupHammer = 289,
241241

242-
EventFlag_293 = 293,
243-
EventFlag_294 = 294,
242+
EventFlag_293 = 293,
243+
EventFlag_294 = 294,
244244
EventFlag_295 = 295,
245245
EventFlag_M3S06_PickupAntiqueShopKey = 296,
246246

@@ -297,6 +297,12 @@ typedef enum _EventFlag
297297
EventFlag_397 = 397,
298298
EventFlag_398 = 398,
299299

300+
EventFlag_405 = 405,
301+
302+
EventFlag_407 = 407,
303+
304+
EventFlag_410 = 410,
305+
300306
EventFlag_412 = 412,
301307

302308
EventFlag_417 = 417,

include/main/fsqueue.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ bool Fs_QueueIsEntryLoaded(s32 queueIdx);
251251
/** @brief Get number of operations currently in the queue.
252252
* @return Number of operations in the queue. Includes both pending reads and pending post-loads.
253253
*/
254-
s32 Fs_QueueGetLength();
254+
s32 Fs_QueueGetLength(void);
255255

256256
/** @brief TODO: Unknown. If queue is empty, call `func_8003C850`.
257257
* @return `true` when queue is empty and the call succeeds, `false` otherwise.
@@ -262,7 +262,7 @@ bool Fs_QueueDoThingWhenEmpty(void);
262262
* Calls some bodyprog functions before and after the wait, `VSync` during the waits and `DrawSync`
263263
* after the wait.
264264
*/
265-
void Fs_QueueWaitForEmpty();
265+
void Fs_QueueWaitForEmpty(void);
266266

267267
/** @brief Add a new seek operation to the queue.
268268
*
@@ -321,10 +321,10 @@ s32 Fs_QueueEnqueue(e_FsFile fileIdx, u8 op, u8 postLoad, u8 alloc, void* data,
321321
/** @brief Initialize FS queue and FS memory.
322322
* Initializes `g_FsQueue` and calls `Fs_InitializeMem`.
323323
*/
324-
void Fs_QueueInitialize();
324+
void Fs_QueueInitialize(void);
325325

326326
/** Seems to clear the queue. */
327-
void Fs_QueueReset();
327+
void Fs_QueueReset(void);
328328

329329
/** @brief Ticks the FS queue once.
330330
*
@@ -334,7 +334,7 @@ void Fs_QueueReset();
334334
* Regardless of the outcome of the above, also ticks post-loading (`Fs_QueueUpdatePostLoad`) if there is an entry to post-load.
335335
* If that reports that the current post-load entry is done post-loading, advances `g_FsQueue.postLoad.idx` and `g_FsQueue.postLoad.ptr`.
336336
*/
337-
void Fs_QueueUpdate();
337+
void Fs_QueueUpdate(void);
338338

339339
/** @brief Ticks a seek operation once.
340340
*

include/maps/map6/map6_s02.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#define HAS_PlayerState_Unk175
1212
#define KEYFRAME_PlayerState_Unk111 915
1313

14+
extern u16 D_800D3B40;
15+
1416
extern s_FsImageDesc D_800D3B44[2];
1517

1618
extern u16 D_800D3B6C;
@@ -30,12 +32,17 @@ extern s32 D_800D3C90;
3032

3133
extern s16 D_800D3C94;
3234

35+
extern u8 D_800D4E08;
36+
extern s8 D_800D4E09;
37+
3338
extern VECTOR3 D_800D4E0C;
3439

3540
extern VECTOR3 D_800D4E1C;
3641

3742
extern s32 D_800D4E28;
3843

44+
void func_800CF0B8(void);
45+
3946
/** Func related to the UFO ending cutscene? */
4047
void func_800CFC34(void);
4148

src/main/fsqueue_1.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ bool Fs_QueueIsEntryLoaded(s32 queueIdx)
1414
return queueIdx < g_FsQueue.postLoad.idx;
1515
}
1616

17-
s32 Fs_QueueGetLength()
17+
s32 Fs_QueueGetLength(void)
1818
{
1919
return (g_FsQueue.last.idx + 1) - g_FsQueue.postLoad.idx;
2020
}
@@ -35,7 +35,7 @@ bool Fs_QueueDoThingWhenEmpty(void)
3535
return result;
3636
}
3737

38-
void Fs_QueueWaitForEmpty()
38+
void Fs_QueueWaitForEmpty(void)
3939
{
4040
func_800892A4(0);
4141
func_80089128();
@@ -130,7 +130,7 @@ s32 Fs_QueueEnqueue(e_FsFile fileIdx, u8 op, u8 postLoad, u8 alloc, void* data,
130130
return g_FsQueue.last.idx;
131131
}
132132

133-
void Fs_QueueInitialize()
133+
void Fs_QueueInitialize(void)
134134
{
135135
bzero(&g_FsQueue, sizeof(g_FsQueue));
136136
g_FsQueue.last.idx = NO_VALUE;
@@ -146,7 +146,7 @@ void Fs_QueueInitialize()
146146
Fs_InitializeMem(FS_MEM_BASE, FS_MEM_SIZE);
147147
}
148148

149-
void Fs_QueueReset()
149+
void Fs_QueueReset(void)
150150
{
151151
if (Fs_QueueGetLength() <= 0)
152152
{
@@ -165,7 +165,7 @@ void Fs_QueueReset()
165165
g_FsQueue.read.ptr->postLoad = 0;
166166
}
167167

168-
void Fs_QueueUpdate()
168+
void Fs_QueueUpdate(void)
169169
{
170170
s_FsQueuePtr* read;
171171
s_FsQueueEntry* tick;

src/maps/map3_s05/map3_s05.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ void func_800D5FC4(void) // 0x800D5FC4
401401
default:
402402
sharedFunc_800D2244_0_s00(false);
403403
SysWork_StateSetNext(SysState_Gameplay);
404-
Savegame_EventFlagSet(EventFlag_M3S05_AlcoholPouredOnVeins);
404+
Savegame_EventFlagSet(EventFlag_M3S05_AlcoholPouredOnVines);
405405
SysWork_StateStepIncrementAfterFade(0, false, 2, Q12(0.0f), false);
406406
vcReturnPreAutoCamWork(true);
407407
break;

src/maps/map6_s02/map6_s02_2.c

Lines changed: 217 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)