Skip to content

Commit f757256

Browse files
committed
map7_s03: func_800E4714
1 parent 231e8c7 commit f757256

File tree

5 files changed

+283
-16
lines changed

5 files changed

+283
-16
lines changed

include/bodyprog/sound_effects.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ typedef enum _SfxId
317317

318318
Sfx_Unk4664 = 4664,
319319

320+
Sfx_Unk4696 = 4696,
320321
Sfx_Unk4699 = 4699,
321322

322323
Sfx_Hack = NO_VALUE, // @hack Force enum to be treated as `s32`.

include/event_flags.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ typedef enum _EventFlag
474474

475475
EventFlag_573 = 573,
476476
EventFlag_574 = 574,
477-
477+
EventFlag_575 = 575,
478478
EventFlag_576 = 576,
479479
EventFlag_577 = 577,
480480

@@ -486,6 +486,8 @@ typedef enum _EventFlag
486486
EventFlag_588 = 588,
487487

488488
EventFlag_591 = 591,
489+
EventFlag_592 = 592,
490+
EventFlag_593 = 593,
489491

490492
/** `MAP0_S01` common item pickups. */
491493

include/game.h

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1925,17 +1925,21 @@ static inline void Player_AnimFlagsSet(u32 flags)
19251925
chara->model_0.anim_4.flags_2 |= flags;
19261926
}
19271927

1928-
/** @brief Sets the given animation flag on a model. */
1929-
static inline void Model_AnimFlagsSet(s_Model* model, u32 flags)
1930-
{
1931-
model->anim_4.flags_2 |= flags;
1932-
}
1928+
/** @brief Sets the given animation flag on a model.
1929+
*
1930+
* @param model `s_Model` to update.
1931+
* @param flag Flags to set.
1932+
*/
1933+
#define Model_AnimFlagsSet(model, flags) \
1934+
(model)->anim_4.flags_2 |= (flags)
19331935

1934-
/** @brief Clears the given animation flag on a model. */
1935-
static inline void Model_AnimFlagsClear(s_Model* model, u32 flags)
1936-
{
1937-
model->anim_4.flags_2 &= ~flags;
1938-
}
1936+
/** @brief Clears the given animation flag on a model.
1937+
*
1938+
* @param model `s_Model` to update.
1939+
* @param flag Flags to clear.
1940+
*/
1941+
#define Model_AnimFlagsClear(model, flags) \
1942+
(model)->anim_4.flags_2 &= ~(flags)
19391943

19401944
/** @brief Updates a model anim if `model->stateStep_3` is 0.
19411945
*

include/maps/map7/map7_s03.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,14 @@
4141
extern s32 D_800ED73C; // } RNG related values?
4242
extern s32 D_800ED740; // }
4343

44+
extern u16 D_800ED77C;
45+
4446
extern u16 D_800ED88C;
4547

4648
extern s32 D_800EDA00;
4749

50+
extern u8 D_800EDA08;
51+
4852
extern s16 D_800F23D0;
4953

5054
extern s32 D_800F23D4;
@@ -81,10 +85,12 @@ extern u8 D_800F4817;
8185
extern s8 D_800F4818;
8286
extern s8 D_800F4819;
8387
extern s8 D_800F481A;
84-
extern s8 D_800F481B;
88+
extern u8 D_800F481B;
8589

8690
extern s32 D_800F4820;
8791

92+
extern s32 D_800F4828;
93+
8894
extern s32 D_800F4830;
8995

9096
extern s32 D_800F4838;
@@ -123,15 +129,17 @@ PACKET* func_800D7F10(void);
123129

124130
void func_800D7F20(u8* arg0);
125131

126-
void func_800D88C4();
132+
void func_800D88C4(void);
127133

128134
void func_800D88CC(void);
129135
void func_800D88D8(void);
130136

131137
void func_800D9394(void);
132138

133-
void func_800DB608();
139+
void func_800DB608(void);
134140
void func_800DD67C(VECTOR3*, s_SubCharacter*, GsCOORDINATE2*);
141+
void func_800DD7D0(VECTOR3*);
142+
void func_800DD868(void);
135143
u8 func_800DD964(void);
136144
void func_800DD98C(s32);
137145
void func_800DD9B0(s_SubCharacter*);
@@ -147,7 +155,7 @@ void func_800DF044(s_SubCharacter* chara, GsCOORDINATE2* coords);
147155
void func_800DF074(s_SubCharacter* chara);
148156
void Ai_Incubus_Update(s_SubCharacter* chara, s_AnmHeader* anmHdr, GsCOORDINATE2* coords);
149157

150-
void func_800DFA14();
158+
void func_800DFA14(void);
151159
void func_800DFB2C(s32);
152160
void func_800DFB50(s_SubCharacter*);
153161
void func_800DFB74(s_SubCharacter*);

src/maps/map7_s03/map7_s03_2.c

Lines changed: 253 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1326,7 +1326,259 @@ INCLUDE_ASM("asm/maps/map7_s03/nonmatchings/map7_s03_2", func_800E3E84);
13261326

13271327
INCLUDE_ASM("asm/maps/map7_s03/nonmatchings/map7_s03_2", func_800E3F30);
13281328

1329-
INCLUDE_ASM("asm/maps/map7_s03/nonmatchings/map7_s03_2", func_800E4714);
1329+
void func_800E4714(void) // 0x800E4714
1330+
{
1331+
s32 temp_v0;
1332+
1333+
switch (g_SysWork.sysStateStep_C[0])
1334+
{
1335+
case 0:
1336+
D_800F4807 = 1;
1337+
D_800F4828 = 0;
1338+
1339+
if (!Savegame_EventFlagGet(EventFlag_449))
1340+
{
1341+
func_800E9260(Chara_Alessa, 2);
1342+
func_800E9260(Chara_EndingDahlia, 3);
1343+
func_800E941C();
1344+
func_800E9444(Chara_EndingDahlia, &g_SysWork.npcs_1A0[1]);
1345+
func_800E9444(Chara_Alessa, &g_SysWork.npcs_1A0[2]);
1346+
D_800F480A = 1;
1347+
D_800F4809 = 1;
1348+
}
1349+
1350+
func_80085EB8(0, &g_SysWork.player_4C.chara_0, 153, false);
1351+
D_800F4804 = 0;
1352+
D_800EDA08 = 0;
1353+
Savegame_EventFlagSet(EventFlag_592);
1354+
g_SysWork.field_2378 = Q12(0.8f);
1355+
SysWork_StateStepIncrement(0);
1356+
break;
1357+
1358+
case 1:
1359+
if (!Savegame_EventFlagGet(EventFlag_449))
1360+
{
1361+
func_80085EB8(0, &g_SysWork.npcs_1A0[1], 5, false);
1362+
func_80085EB8(0, &g_SysWork.npcs_1A0[2], 10, false);
1363+
}
1364+
SysWork_StateStepIncrement(0);
1365+
1366+
case 2:
1367+
SysWork_StateStepIncrementAfterFade(2, false, 0, Q12(0.0f), false);
1368+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(92.0f), Q12(112.0f), true, false);
1369+
break;
1370+
1371+
case 3:
1372+
Map_MessageWithAudio(24, &D_800F4804, &D_800ED77C);
1373+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(92.0f), Q12(112.0f), true, false);
1374+
temp_v0 = sharedFunc_800D2DAC_0_s00();
1375+
if (temp_v0 == 1 && D_800EDA08 == 0)
1376+
{
1377+
func_80085EB8(0, &g_SysWork.player_4C.chara_0, 131, false);
1378+
D_800EDA08 = temp_v0;
1379+
}
1380+
break;
1381+
1382+
case 4:
1383+
func_80085EB8(0, &g_SysWork.npcs_1A0[1], 15, false);
1384+
SysWork_StateStepIncrement(0);
1385+
1386+
case 5:
1387+
Map_MessageWithAudio(30, &D_800F4804, &D_800ED77C);
1388+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(113.0f), Q12(129.0f), true, false);
1389+
break;
1390+
1391+
case 6:
1392+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(113.0f), Q12(129.0f), true, true);
1393+
break;
1394+
1395+
case 7:
1396+
func_80085EB8(0, &g_SysWork.player_4C.chara_0, 70, false);
1397+
func_800E9260(Chara_Incubator, 1);
1398+
D_800F4814 = 1;
1399+
SysWork_StateStepIncrement(0);
1400+
1401+
case 8:
1402+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(113.0f), Q12(134.0f), false, true);
1403+
break;
1404+
1405+
case 9:
1406+
if (Fs_QueueDoThingWhenEmpty())
1407+
{
1408+
SysWork_StateStepIncrement(0);
1409+
}
1410+
break;
1411+
1412+
case 10:
1413+
func_80085EB8(0, &g_SysWork.player_4C.chara_0, 51, false);
1414+
func_80085EB8(0, &g_SysWork.npcs_1A0[1], 16, false);
1415+
SysWork_StateStepIncrement(0);
1416+
1417+
case 11:
1418+
Map_MessageWithAudio(31, &D_800F4804, &D_800ED77C);
1419+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(135.0f), Q12(142.0f), true, false);
1420+
break;
1421+
1422+
case 12:
1423+
Map_MessageWithAudio(35, &D_800F4804, &D_800ED77C);
1424+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(135.0f), Q12(142.0f), true, false);
1425+
break;
1426+
1427+
case 13:
1428+
Map_MessageWithAudio(44, &D_800F4804, &D_800ED77C);
1429+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(135.0f), Q12(142.0f), true, false);
1430+
break;
1431+
1432+
case 14:
1433+
func_80085EB8(0, &g_SysWork.npcs_1A0[1], 6, false);
1434+
SysWork_StateStepIncrement(0);
1435+
1436+
case 15:
1437+
Map_MessageWithAudio(49, &D_800F4804, &D_800ED77C);
1438+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(8.5f), Q12(143.0f), Q12(207.0f), true, false);
1439+
1440+
Savegame_EventFlagClear(EventFlag_576);
1441+
Savegame_EventFlagSet(EventFlag_593);
1442+
Savegame_EventFlagSet(EventFlag_575);
1443+
1444+
if (g_SysWork.sysStateStep_C[0] != 15)
1445+
{
1446+
Sd_EngineCmd(19);
1447+
}
1448+
break;
1449+
1450+
case 16:
1451+
Sd_EngineCmd(Sfx_Unk4696);
1452+
SysWork_StateStepIncrement(0);
1453+
1454+
case 17:
1455+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(8.5f), Q12(143.0f), Q12(207.0f), true, false);
1456+
if (func_80045B28() == 1)
1457+
{
1458+
SysWork_StateStepIncrement(0);
1459+
}
1460+
break;
1461+
1462+
case 18:
1463+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(8.5f), Q12(143.0f), Q12(207.0f), true, false);
1464+
if (func_80045B28() == 1)
1465+
{
1466+
SysWork_StateStepIncrement(0);
1467+
}
1468+
else
1469+
{
1470+
break;
1471+
}
1472+
1473+
case 19:
1474+
func_80085EB8(0, &g_SysWork.player_4C.chara_0, 171, false);
1475+
func_80085EB8(0, &g_SysWork.npcs_1A0[1], 18, false);
1476+
func_800E1788(1);
1477+
SysWork_StateStepIncrement(0);
1478+
1479+
case 20:
1480+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(208.0f), Q12(231.0f), true, true);
1481+
break;
1482+
1483+
case 21:
1484+
D_800F4809 = 0;
1485+
Model_AnimFlagsClear(&g_SysWork.npcs_1A0[1].model_0, 2);
1486+
func_800E941C();
1487+
func_800E9444(Chara_Incubator, &g_SysWork.npcs_1A0[4]);
1488+
D_800F4814 = 2;
1489+
Model_AnimFlagsClear(&g_SysWork.npcs_1A0[4].model_0, 2);
1490+
SysWork_StateStepIncrement(0);
1491+
1492+
case 22:
1493+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(232.0f), Q12(287.0f), false, true);
1494+
1495+
if (D_800F47F0 > Q12(230.0f))
1496+
{
1497+
if (D_800F481B == 0)
1498+
{
1499+
Model_AnimFlagsClear(&g_SysWork.npcs_1A0[2].model_0, 2);
1500+
func_800E1788(2);
1501+
D_800F481B++;
1502+
}
1503+
}
1504+
1505+
if (D_800F47F0 > Q12(260.0f) && D_800F481B == 1)
1506+
{
1507+
D_800F481B++;
1508+
}
1509+
1510+
if (D_800F47F0 > Q12(285.0f))
1511+
{
1512+
if (D_800F481B == 2)
1513+
{
1514+
func_800E1788(3);
1515+
D_800F481B++;
1516+
}
1517+
}
1518+
break;
1519+
1520+
case 23:
1521+
func_800E9490(&g_SysWork.npcs_1A0[2]);
1522+
D_800F480A = 0;
1523+
D_800F4811 = 0;
1524+
SysWork_StateStepIncrement(0);
1525+
1526+
case 24:
1527+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(232.0f), Q12(292.0f), false, true);
1528+
break;
1529+
1530+
case 25:
1531+
func_80085EB8(0, &g_SysWork.npcs_1A0[4], 1, false);
1532+
D_800F480C = 1;
1533+
Model_AnimFlagsSet(&g_SysWork.npcs_1A0[4].model_0, 2);
1534+
func_800DD7D0(&g_SysWork.npcs_1A0[1].position_18);
1535+
D_800F4828 = 1;
1536+
SysWork_StateStepIncrement(0);
1537+
1538+
case 26:
1539+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(232.0f), Q12(332.0f), false, true);
1540+
break;
1541+
1542+
case 27:
1543+
func_80085EB8(0, &g_SysWork.npcs_1A0[4], 2, false);
1544+
SysWork_StateStepIncrement(0);
1545+
1546+
case 28:
1547+
SysWork_StateStepIncrementAfterTime(&D_800F47F0, Q12(10.0f), Q12(232.0f), Q12(341.0f), true, true);
1548+
break;
1549+
1550+
case 29:
1551+
D_800F480A = 0;
1552+
func_800D9394();
1553+
1554+
if (Savegame_EventFlagGet(EventFlag_391))
1555+
{
1556+
Fs_QueueStartRead(FILE_ANIM_LAST3_DMS, FS_BUFFER_18);
1557+
D_800F4815 = 1;
1558+
}
1559+
else
1560+
{
1561+
Fs_QueueStartRead(FILE_ANIM_LAST5_DMS, FS_BUFFER_18);
1562+
D_800F4817 = 1;
1563+
}
1564+
1565+
SysWork_StateStepIncrement(0);
1566+
1567+
case 30:
1568+
SysWork_StateStepIncrementDelayed(Q12(4.0f), false);
1569+
break;
1570+
1571+
default:
1572+
g_SysWork.sysStateStep_C[0] = 0;
1573+
D_800F4805++;
1574+
break;
1575+
}
1576+
1577+
if (D_800F4828)
1578+
{
1579+
func_800DD868();
1580+
}
1581+
}
13301582

13311583
INCLUDE_ASM("asm/maps/map7_s03/nonmatchings/map7_s03_2", func_800E514C);
13321584

0 commit comments

Comments
 (0)