From ec86f10b0f933fd848036e149d1ef34f28571c37 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sun, 22 Oct 2023 02:52:40 -0300 Subject: [PATCH 1/5] `SCHEDULE_TIME` (#1438) * SCHEDULE_CALC_TIME_ALT * add s32 cast to avoid f32 -> u16 direct cast * SCHEDULE_TIME * remove the alts * Update explanation about the script --- include/z64schedule.h | 7 +- src/code/z_kankyo.c | 28 +++++++- src/code/z_schedule.c | 70 ++++++++++++------- src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c | 11 +-- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 2 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 2 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 6 +- .../ovl_file_choose/z_file_choose_NES.c | 2 +- tools/schedule_timeconv.py | 36 ++++++++++ 9 files changed, 124 insertions(+), 40 deletions(-) create mode 100755 tools/schedule_timeconv.py diff --git a/include/z64schedule.h b/include/z64schedule.h index 07a942e90..aafa8520e 100644 --- a/include/z64schedule.h +++ b/include/z64schedule.h @@ -28,10 +28,13 @@ */ // Macro to convert the time format used in the save struct into the format used in Schedule -#define SCHEDULE_CONVERT_TIME(time) ((u16)((time) - 0x10000 / 360 * 90)) +#define SCHEDULE_CONVERT_TIME(time) ((s32)((time) - 0x10000 / 360 * 90)) + +#define SCHEDULE_TIME(hour, minute) SCHEDULE_CONVERT_TIME((((hour)*60.0f) + (minute)) * (0x10000 / 60 / 24.0f)) + #define SCHEDULE_TIME_NOW SCHEDULE_CONVERT_TIME(gSaveContext.save.time) -typedef enum { +typedef enum ScheduleCommandId { /* 0x00 */ SCHEDULE_CMD_ID_CHECK_FLAG_S, // Checks if a weekEventReg flag is set and branches if so, short range branch /* 0x01 */ SCHEDULE_CMD_ID_CHECK_FLAG_L, // Checks if a weekEventReg flag is set and branches if so, long range branch /* 0x02 */ SCHEDULE_CMD_ID_CHECK_TIME_RANGE_S, // Checks if the current time is within the range of the two provided times and branches if so, short range branch diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index 30ea04e16..6dda9090d 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -702,9 +702,35 @@ s32 Environment_IsSceneUpsideDown(PlayState* play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSun.s") +void func_800F88C4(u16 weekEventFlag); #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F88C4.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8970.s") +void func_800F8970(void) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_27_40) && (SCHEDULE_TIME_NOW >= SCHEDULE_TIME(9, 31))) { + SET_WEEKEVENTREG(WEEKEVENTREG_27_40); + func_800F88C4(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN); + } + + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_27_80) && (SCHEDULE_TIME_NOW >= SCHEDULE_TIME(10, 3))) { + SET_WEEKEVENTREG(WEEKEVENTREG_27_80); + func_800F88C4(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN); + } + + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_28_01) && (SCHEDULE_TIME_NOW >= SCHEDULE_TIME(10, 35))) { + SET_WEEKEVENTREG(WEEKEVENTREG_28_01); + func_800F88C4(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN); + } + + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_28_02) && (SCHEDULE_TIME_NOW >= SCHEDULE_TIME(10, 53))) { + SET_WEEKEVENTREG(WEEKEVENTREG_28_02); + func_800F88C4(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN); + } + + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_28_04) && (SCHEDULE_TIME_NOW >= SCHEDULE_TIME(11, 25))) { + SET_WEEKEVENTREG(WEEKEVENTREG_28_04); + func_800F88C4(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN); + } +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdatePostmanEvents.s") diff --git a/src/code/z_schedule.c b/src/code/z_schedule.c index fdefb0f42..38bcb58c3 100644 --- a/src/code/z_schedule.c +++ b/src/code/z_schedule.c @@ -4,7 +4,7 @@ (temp) = (hour)*60.0f; \ (temp) += (minute); \ (dest) = (temp) * (0x10000 / 60 / 24.0f); \ - (dest) = SCHEDULE_CONVERT_TIME(dest); + (dest) = SCHEDULE_CONVERT_TIME(dest) s32 Schedule_CheckFlagS(PlayState* play, u8** script, ScheduleOutput* output) { ScheduleCmdCheckFlagS* cmd = (ScheduleCmdCheckFlagS*)*script; @@ -239,34 +239,50 @@ s32 Schedule_BranchL(PlayState* play, u8** script, ScheduleOutput* output) { return false; } -static s32 (*sScheduleCmdFuncs[])(PlayState*, u8**, ScheduleOutput*) = { - Schedule_CheckFlagS, Schedule_CheckFlagL, Schedule_CheckTimeRangeS, Schedule_CheckTimeRangeL, - Schedule_ReturnValueL, Schedule_ReturnNone, Schedule_ReturnEmpty, Schedule_Nop, - Schedule_CheckMiscS, Schedule_ReturnValueS, Schedule_CheckNotInSceneS, Schedule_CheckNotInSceneL, - Schedule_CheckNotInDayS, Schedule_CheckNotInDayL, Schedule_ReturnTime, Schedule_CheckBeforeTimeS, - Schedule_CheckBeforeTimeL, Schedule_BranchS, Schedule_BranchL, +typedef s32 (*ScheduleCmdFunc)(PlayState*, u8**, ScheduleOutput*); + +static ScheduleCmdFunc sScheduleCmdFuncs[] = { + Schedule_CheckFlagS, // SCHEDULE_CMD_ID_CHECK_FLAG_S + Schedule_CheckFlagL, // SCHEDULE_CMD_ID_CHECK_FLAG_L + Schedule_CheckTimeRangeS, // SCHEDULE_CMD_ID_CHECK_TIME_RANGE_S + Schedule_CheckTimeRangeL, // SCHEDULE_CMD_ID_CHECK_TIME_RANGE_L + Schedule_ReturnValueL, // SCHEDULE_CMD_ID_RET_VAL_L + Schedule_ReturnNone, // SCHEDULE_CMD_ID_RET_NONE + Schedule_ReturnEmpty, // SCHEDULE_CMD_ID_RET_EMPTY + Schedule_Nop, // SCHEDULE_CMD_ID_NOP + Schedule_CheckMiscS, // SCHEDULE_CMD_ID_CHECK_MISC_S + Schedule_ReturnValueS, // SCHEDULE_CMD_ID_RET_VAL_S + Schedule_CheckNotInSceneS, // SCHEDULE_CMD_ID_CHECK_NOT_IN_SCENE_S + Schedule_CheckNotInSceneL, // SCHEDULE_CMD_ID_CHECK_NOT_IN_SCENE_L + Schedule_CheckNotInDayS, // SCHEDULE_CMD_ID_CHECK_NOT_IN_DAY_S + Schedule_CheckNotInDayL, // SCHEDULE_CMD_ID_CHECK_NOT_IN_DAY_L + Schedule_ReturnTime, // SCHEDULE_CMD_ID_RET_TIME + Schedule_CheckBeforeTimeS, // SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_S + Schedule_CheckBeforeTimeL, // SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_L + Schedule_BranchS, // SCHEDULE_CMD_ID_BRANCH_S + Schedule_BranchL, // SCHEDULE_CMD_ID_BRANCH_L }; static u8 sScheduleCmdSizes[] = { - sizeof(ScheduleCmdCheckFlagS), - sizeof(ScheduleCmdCheckFlagL), - sizeof(ScheduleCmdCheckTimeRangeS), - sizeof(ScheduleCmdCheckTimeRangeL), - sizeof(ScheduleCmdReturnValueL), - sizeof(ScheduleCmdBase), - sizeof(ScheduleCmdBase), - sizeof(ScheduleCmdNop), - sizeof(ScheduleCmdCheckMiscS), - sizeof(ScheduleCmdReturnValueS), - sizeof(ScheduleCmdCheckNotInSceneS), - sizeof(ScheduleCmdCheckNotInSceneL), - sizeof(ScheduleCmdCheckNotInDayS), - sizeof(ScheduleCmdCheckNotInDayL), - sizeof(ScheduleCmdReturnTime), - sizeof(ScheduleCmdCheckBeforeTimeS), - sizeof(ScheduleCmdCheckBeforeTimeL), - sizeof(ScheduleCmdBranchS), - sizeof(ScheduleCmdBranchL), + sizeof(ScheduleCmdCheckFlagS), // SCHEDULE_CMD_ID_CHECK_FLAG_S + sizeof(ScheduleCmdCheckFlagL), // SCHEDULE_CMD_ID_CHECK_FLAG_L + sizeof(ScheduleCmdCheckTimeRangeS), // SCHEDULE_CMD_ID_CHECK_TIME_RANGE_S + sizeof(ScheduleCmdCheckTimeRangeL), // SCHEDULE_CMD_ID_CHECK_TIME_RANGE_L + sizeof(ScheduleCmdReturnValueL), // SCHEDULE_CMD_ID_RET_VAL_L + sizeof(ScheduleCmdBase), // SCHEDULE_CMD_ID_RET_NONE + sizeof(ScheduleCmdBase), // SCHEDULE_CMD_ID_RET_EMPTY + sizeof(ScheduleCmdNop), // SCHEDULE_CMD_ID_NOP + sizeof(ScheduleCmdCheckMiscS), // SCHEDULE_CMD_ID_CHECK_MISC_S + sizeof(ScheduleCmdReturnValueS), // SCHEDULE_CMD_ID_RET_VAL_S + sizeof(ScheduleCmdCheckNotInSceneS), // SCHEDULE_CMD_ID_CHECK_NOT_IN_SCENE_S + sizeof(ScheduleCmdCheckNotInSceneL), // SCHEDULE_CMD_ID_CHECK_NOT_IN_SCENE_L + sizeof(ScheduleCmdCheckNotInDayS), // SCHEDULE_CMD_ID_CHECK_NOT_IN_DAY_S + sizeof(ScheduleCmdCheckNotInDayL), // SCHEDULE_CMD_ID_CHECK_NOT_IN_DAY_L + sizeof(ScheduleCmdReturnTime), // SCHEDULE_CMD_ID_RET_TIME + sizeof(ScheduleCmdCheckBeforeTimeS), // SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_S + sizeof(ScheduleCmdCheckBeforeTimeL), // SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_L + sizeof(ScheduleCmdBranchS), // SCHEDULE_CMD_ID_BRANCH_S + sizeof(ScheduleCmdBranchL), // SCHEDULE_CMD_ID_BRANCH_L }; s32 Schedule_RunScript(PlayState* play, u8* script, ScheduleOutput* output) { @@ -275,7 +291,7 @@ s32 Schedule_RunScript(PlayState* play, u8* script, ScheduleOutput* output) { do { size = sScheduleCmdSizes[*script]; - stop = (*sScheduleCmdFuncs[*script])(play, &script, output); + stop = sScheduleCmdFuncs[*script](play, &script, output); script += size; } while (!stop); diff --git a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c index 6eb910d2d..4abce0d2f 100644 --- a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c +++ b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c @@ -187,10 +187,12 @@ s32* func_80C22880(DmTag* this, PlayState* play) { switch (this->unk_18E) { case 1: - time = gSaveContext.save.time - 0x3FFC; - if ((time >= 0xA54B) && (time < 0xB54A) && (gSaveContext.save.day == 2)) { - this->msgEventCallback = func_80C227E8; - return D_80C22BF0; + time = SCHEDULE_TIME_NOW; + if ((time >= SCHEDULE_TIME(21, 30)) && (time < SCHEDULE_TIME(23, 0))) { + if (gSaveContext.save.day == 2) { + this->msgEventCallback = func_80C227E8; + return D_80C22BF0; + } } return D_80C22C30; @@ -201,6 +203,7 @@ s32* func_80C22880(DmTag* this, PlayState* play) { default: break; } + return NULL; } diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.c b/src/overlays/actors/ovl_En_Pm/z_en_pm.c index ab80d3d57..838fbf2c9 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -581,7 +581,7 @@ s32 func_80AF7BAC(EnPm* this) { case 2: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_89_40)) { - D_801F4E78 = 0; + D_801F4E78 = CLOCK_TIME(0, 0); this->unk_38C++; } break; diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c index 901e49126..a18d56753 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -188,7 +188,7 @@ u16 EnSob1_GetTalkOption(EnSob1* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->shopType == BOMB_SHOP) { - if ((gSaveContext.save.day == 1) && (gSaveContext.save.time >= CLOCK_TIME(6, 00))) { + if ((gSaveContext.save.day == 1) && (gSaveContext.save.time >= CLOCK_TIME(6, 0))) { return 0x648; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECOVERED_STOLEN_BOMB_BAG)) { return 0x649; diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index 90ea18d05..d3676daa2 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -701,7 +701,7 @@ s32 func_80A3F9A4(EnTest3* this, PlayState* play) { } s32 func_80A3F9E4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { - scheduleOutput->time0 = SCHEDULE_TIME_NOW; + scheduleOutput->time0 = (u16)SCHEDULE_TIME_NOW; scheduleOutput->time1 = (u16)(scheduleOutput->time0 + 70); func_80A40098(this, play, arg2, scheduleOutput); if (this->player.actor.xzDistToPlayer < 300.0f) { @@ -729,7 +729,7 @@ s32 func_80A3FA58(EnTest3* this, PlayState* play) { if (cond || this->unk_D8A <= 0) { func_80A3F114(this, play); sp40.unk_1_0 = 5; - scheduleOutput.time0 = SCHEDULE_TIME_NOW; + scheduleOutput.time0 = (u16)SCHEDULE_TIME_NOW; scheduleOutput.time1 = (u16)(scheduleOutput.time0 + (cond ? 80 : 140)); func_80A40098(this, play, &sp40, &scheduleOutput); @@ -805,7 +805,7 @@ s32 func_80A3FE20(EnTest3* this, PlayState* play) { if (D_80A41D64 == 0) { if (func_80A3E9DC(this, play)) { sp2C.unk_1_0 = 2; - scheduleOutput.time0 = SCHEDULE_TIME_NOW; + scheduleOutput.time0 = (u16)SCHEDULE_TIME_NOW; scheduleOutput.time1 = (u16)(scheduleOutput.time0 + 1000); func_80A40098(this, play, &sp2C, &scheduleOutput); D_80A41D64 = 1; diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c index 65d26a97e..1136632fb 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c @@ -2484,7 +2484,7 @@ void FileSelect_InitContext(GameState* thisx) { ShrinkWindow_Letterbox_SetSizeTarget(0); gSaveContext.skyboxTime = 0; - gSaveContext.save.time = 0; + gSaveContext.save.time = CLOCK_TIME(0, 0); Skybox_Init(&this->state, &this->skyboxCtx, 1); R_TIME_SPEED = 10; diff --git a/tools/schedule_timeconv.py b/tools/schedule_timeconv.py new file mode 100755 index 000000000..49a1e50da --- /dev/null +++ b/tools/schedule_timeconv.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2023 ZeldaRET +# SPDX-License-Identifier: MIT + +# Convert time values such as 0x1AA9 to their schedule clock time, i.e. 8,30 + +from __future__ import annotations + +import sys + +def u16(x: int|float) -> int: + return int(x) & 0xFFFF + +def SCHEDULE_CONVERT_TIME(time: int|float) -> int: + return u16(time - 0x10000 // 360 * 90) + +def SCHEDULE_UNCONVERT_TIME(time: int) -> int: + return time + 0x10000 // 360 * 90 + +time = sys.argv[1] +time = int(time, 0) + +minutes = round(((24 * 60) / 0x10000) * SCHEDULE_UNCONVERT_TIME(time)) + +hours = int(minutes // 60) +minutes = round(minutes - 60 * hours) + +# Since multiple values are mapped to the same clock time, check that it +# still matches once converted. If it doesn't match as it is, print a warning. +macro_val = SCHEDULE_CONVERT_TIME((hours * 60.0 + minutes) * ((0x10000 // 60) / 24.0)) + +print(f"{hours},{minutes:02} -> 0x{macro_val:04X}") +print(f"SCHEDULE_TIME({hours}, {minutes})") +if time != macro_val: + print("Warning: Result does not match as-is") From 3569ef97ade41e6ca219fb731bc108c92fd527f8 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 22 Oct 2023 04:51:58 -0700 Subject: [PATCH 2/5] progress ld fix (#1449) --- tools/progress.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/progress.py b/tools/progress.py index 9096715aa..0626e9b65 100755 --- a/tools/progress.py +++ b/tools/progress.py @@ -239,7 +239,7 @@ for line in map_file: eprint(f"Found file '{obj_file}' in unknown asset category '{assetCat}'") eprint("I'll ignore this for now, but please fix it!") - elif len(line_split) == 2 and line_split[0].startswith("0x00000000"): + elif len(line_split) == 2 and line_split[0].startswith("0x"): varVramStr, varName = line_split varVram = int(varVramStr, 16) varName = varName.strip() From 002f5ba6de4f6eaa96d7201d6eec09d23d85d71f Mon Sep 17 00:00:00 2001 From: Wimmer <71473855+Wimmerrad@users.noreply.github.com> Date: Mon, 23 Oct 2023 00:43:57 +0200 Subject: [PATCH 3/5] obj_oyu (#1436) * object_oyu object_oyu.xml / z_bg_goron_oyu.c updated * Hot Spring Water Update * updated comments * GoronGraveyard prefix * Update object_oyu.xml --- assets/xml/objects/object_oyu.xml | 11 ++++++----- src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c | 8 ++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/assets/xml/objects/object_oyu.xml b/assets/xml/objects/object_oyu.xml index 78cc8b34d..bbf0b7f72 100644 --- a/assets/xml/objects/object_oyu.xml +++ b/assets/xml/objects/object_oyu.xml @@ -1,9 +1,10 @@  + - - - - - + + + + + diff --git a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c index 27023756b..9577b832a 100644 --- a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c +++ b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c @@ -153,7 +153,7 @@ void BgGoronOyu_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->dyna.actor, 0.1f); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - CollisionHeader_GetVirtual(&object_oyu_Colheader_000988, &colHeader); + CollisionHeader_GetVirtual(&gGoronGraveyardHotSpringWaterCol, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); @@ -185,10 +185,10 @@ void BgGoronOyu_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_oyu_Matanimheader_000968)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGoronGraveyardHotSpringWaterTexAnim)); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, &object_oyu_DL_000158); - gSPDisplayList(POLY_XLU_DISP++, &object_oyu_DL_000080); + gSPDisplayList(POLY_XLU_DISP++, &gGoronGraveyardHotSpringWaterEmptyDL); + gSPDisplayList(POLY_XLU_DISP++, &gGoronGraveyardHotSpringWaterDL); CLOSE_DISPS(play->state.gfxCtx); } From a468be77d5e87498b343664c78b6f8488d404f19 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Mon, 23 Oct 2023 01:31:55 +0200 Subject: [PATCH 4/5] object_owl (#1430) * some naming * naming * comments * improvements * improvements --- assets/xml/objects/object_owl.xml | 208 ++++++++++++---------- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 77 ++++---- src/overlays/actors/ovl_En_Owl/z_en_owl.h | 13 +- 3 files changed, 162 insertions(+), 136 deletions(-) diff --git a/assets/xml/objects/object_owl.xml b/assets/xml/objects/object_owl.xml index 5560e3347..8d17dcc5d 100644 --- a/assets/xml/objects/object_owl.xml +++ b/assets/xml/objects/object_owl.xml @@ -1,95 +1,121 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c index db4d9386b..4389ca237 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -5,7 +5,6 @@ */ #include "z_en_owl.h" -#include "objects/object_owl/object_owl.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10) @@ -128,15 +127,15 @@ void EnOwl_Init(Actor* thisx, PlayState* play) { } ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); - SkelAnime_InitFlex(play, &this->skelAnime1, &object_owl_Skel_00C5F8, &object_owl_Anim_001ADC, this->jointTable1, - this->morphTable1, 21); - SkelAnime_InitFlex(play, &this->skelAnime2, &object_owl_Skel_0105C0, &object_owl_Anim_00CDB0, this->jointTable2, - this->morphTable2, 16); + SkelAnime_InitFlex(play, &this->skelAnimeFlying, &gOwlFlyingSkel, &gOwlFlyAnim, this->jointTableFlying, + this->morphTableFlying, OWL_FLYING_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnimePerching, &gOwlPerchingSkel, &gOwlPerchAnim, this->jointTablePerching, + this->morphTablePerching, OWL_PERCHING_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.terminalVelocity = -10.0f; this->actor.targetArrowOffset = 500.0f; - EnOwl_ChangeMode(this, func_8095BF58, func_8095C484, &this->skelAnime2, &object_owl_Anim_00CDB0, 0.0f); + EnOwl_ChangeMode(this, func_8095BF58, func_8095C484, &this->skelAnimePerching, &gOwlPerchAnim, 0.0f); this->actionFlags = 0; this->unk_40D = 0; @@ -252,7 +251,7 @@ s32 func_8095A9FC(EnOwl* this, PlayState* play, u16 textId) { } void func_8095AA70(EnOwl* this) { - EnOwl_ChangeMode(this, func_8095C1C8, func_8095C484, &this->skelAnime1, &object_owl_Anim_00CB94, 0.0f); + EnOwl_ChangeMode(this, func_8095C1C8, func_8095C484, &this->skelAnimeFlying, &gOwlUnfoldWingsAnim, 0.0f); this->eyeTexIndex = 0; this->blinkTimer = Rand_S16Offset(60, 60); } @@ -425,9 +424,9 @@ void func_8095B0C8(EnOwl* this) { } void func_8095B158(EnOwl* this) { - if (Animation_OnFrame(&this->skelAnime1, 2.0f) || Animation_OnFrame(&this->skelAnime1, 9.0f) || - Animation_OnFrame(&this->skelAnime1, 23.0f) || Animation_OnFrame(&this->skelAnime1, 40.0f) || - Animation_OnFrame(&this->skelAnime1, 58.0f)) { + if (Animation_OnFrame(&this->skelAnimeFlying, 2.0f) || Animation_OnFrame(&this->skelAnimeFlying, 9.0f) || + Animation_OnFrame(&this->skelAnimeFlying, 23.0f) || Animation_OnFrame(&this->skelAnimeFlying, 40.0f) || + Animation_OnFrame(&this->skelAnimeFlying, 58.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_OWL_FLUTTER); } } @@ -448,7 +447,7 @@ void func_8095B254(EnOwl* this, PlayState* play) { } if (this->actionFlags & 1) { - EnOwl_ChangeMode(this, func_8095B1E4, func_8095C328, &this->skelAnime1, &object_owl_Anim_001ADC, 0.0f); + EnOwl_ChangeMode(this, func_8095B1E4, func_8095C328, &this->skelAnimeFlying, &gOwlFlyAnim, 0.0f); this->unk_3EA = 6; this->actor.flags |= ACTOR_FLAG_20; } @@ -458,7 +457,7 @@ void func_8095B254(EnOwl* this, PlayState* play) { void func_8095B2F8(EnOwl* this, PlayState* play) { func_8095B06C(this); - if (this->skelAnime1.curFrame >= 18.0f) { + if (this->skelAnimeFlying.curFrame >= 18.0f) { Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_3EC, 2, 0x200, 0x80); this->actor.shape.rot.y = this->actor.world.rot.y; } @@ -466,7 +465,7 @@ void func_8095B2F8(EnOwl* this, PlayState* play) { if ((this->actor.shape.rot.y == this->unk_3EC) && (this->actionFlags & 1)) { this->actionFunc = func_8095B254; Animation_Change(this->skelAnime3, this->skelAnime3->animation, 1.0f, 19.0f, - Animation_GetLastFrame(&object_owl_Anim_001168), ANIMMODE_ONCE, 0.0f); + Animation_GetLastFrame(&gOwlTakeoffAnim), ANIMMODE_ONCE, 0.0f); this->unk_414 = func_8095C484; } @@ -476,7 +475,7 @@ void func_8095B2F8(EnOwl* this, PlayState* play) { void func_8095B3DC(EnOwl* this, PlayState* play) { if (this->actionFlags & 1) { this->actionFunc = func_8095B2F8; - Animation_Change(this->skelAnime3, &object_owl_Anim_001168, 1.0f, 0.0f, 35.0f, ANIMMODE_ONCE, 0.0f); + Animation_Change(this->skelAnime3, &gOwlTakeoffAnim, 1.0f, 0.0f, 35.0f, ANIMMODE_ONCE, 0.0f); this->unk_414 = func_8095C408; this->unk_3EC = 0x5500; this->actor.world.pos.y += 100.0f; @@ -489,7 +488,7 @@ void func_8095B480(EnOwl* this, PlayState* play) { if (player->stateFlags3 & PLAYER_STATE3_10000000) { this->actor.textId = 0xBF1; - EnOwl_ChangeMode(this, func_8095BF58, func_8095C484, &this->skelAnime2, &object_owl_Anim_00CDB0, 0.0f); + EnOwl_ChangeMode(this, func_8095BF58, func_8095C484, &this->skelAnimePerching, &gOwlPerchAnim, 0.0f); this->eyeTexIndex = 0; this->actionFlags &= ~8; this->blinkTimer = Rand_S16Offset(60, 60); @@ -523,7 +522,7 @@ void func_8095B574(EnOwl* this, PlayState* play) { void func_8095B650(EnOwl* this, PlayState* play) { if (this->actionFlags & 1) { - EnOwl_ChangeMode(this, func_8095B574, func_8095C484, &this->skelAnime2, &object_owl_Anim_00CDB0, 0.0f); + EnOwl_ChangeMode(this, func_8095B574, func_8095C484, &this->skelAnimePerching, &gOwlPerchAnim, 0.0f); this->actor.textId = 0xBF5; this->actionFlags &= ~8; } @@ -532,8 +531,8 @@ void func_8095B650(EnOwl* this, PlayState* play) { void func_8095B6C8(EnOwl* this, PlayState* play) { if (this->actionFlags & 1) { - Animation_Change(this->skelAnime3, &object_owl_Anim_00CB94, -1.0f, - Animation_GetLastFrame(&object_owl_Anim_00CB94), 0.0f, ANIMMODE_ONCE, 0.0f); + Animation_Change(this->skelAnime3, &gOwlUnfoldWingsAnim, -1.0f, Animation_GetLastFrame(&gOwlUnfoldWingsAnim), + 0.0f, ANIMMODE_ONCE, 0.0f); this->unk_414 = func_8095C484; this->actionFunc = func_8095B650; } @@ -588,7 +587,7 @@ void func_8095B76C(EnOwl* this, PlayState* play) { } void func_8095B960(EnOwl* this, PlayState* play) { - if (this->skelAnime1.curFrame >= 18.0f) { + if (this->skelAnimeFlying.curFrame >= 18.0f) { Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_3EC, 2, 0x200, 0x80); this->actor.shape.rot.y = this->actor.world.rot.y; } @@ -605,7 +604,7 @@ void func_8095B960(EnOwl* this, PlayState* play) { void func_8095B9FC(EnOwl* this, PlayState* play) { if (this->actionFlags & 1) { this->actionFunc = func_8095B960; - Animation_Change(this->skelAnime3, &object_owl_Anim_001168, 1.0f, 0.0f, 35.0f, ANIMMODE_ONCE, 0.0f); + Animation_Change(this->skelAnime3, &gOwlTakeoffAnim, 1.0f, 0.0f, 35.0f, ANIMMODE_ONCE, 0.0f); this->unk_414 = func_8095C408; func_8095B0C8(this); } @@ -684,8 +683,8 @@ void func_8095BA84(EnOwl* this, PlayState* play) { case 0xBEE: Message_CloseTextbox(play); SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0); - EnOwl_ChangeMode(this, func_8095B9FC, func_8095C484, &this->skelAnime1, &object_owl_Anim_00CB94, - 0.0f); + EnOwl_ChangeMode(this, func_8095B9FC, func_8095C484, &this->skelAnimeFlying, + &gOwlUnfoldWingsAnim, 0.0f); this->eyeTexIndex = 0; this->blinkTimer = Rand_S16Offset(60, 60); this->actionFlags |= 8; @@ -714,8 +713,8 @@ void func_8095BA84(EnOwl* this, PlayState* play) { Message_CloseTextbox(play); SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0); this->actor.flags &= ~ACTOR_FLAG_10000; - EnOwl_ChangeMode(this, func_8095B3DC, func_8095C484, &this->skelAnime1, &object_owl_Anim_00CB94, - 0.0f); + EnOwl_ChangeMode(this, func_8095B3DC, func_8095C484, &this->skelAnimeFlying, + &gOwlUnfoldWingsAnim, 0.0f); this->eyeTexIndex = 0; this->blinkTimer = Rand_S16Offset(60, 60); this->actionFlags |= 8; @@ -783,23 +782,23 @@ void func_8095BF78(EnOwl* this, PlayState* play) { } void func_8095C09C(EnOwl* this, PlayState* play) { - if (this->skelAnime1.curFrame > 10.0f) { + if (this->skelAnimeFlying.curFrame > 10.0f) { Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_3EC, 2, 0x400, 0x40); this->actor.shape.rot.y = this->actor.world.rot.y; } - if (this->skelAnime1.curFrame > 45.0f) { + if (this->skelAnimeFlying.curFrame > 45.0f) { this->actor.velocity.y = 2.0f; this->actor.gravity = 0.0f; this->actor.speed = 8.0f; - } else if (this->skelAnime1.curFrame > 17.0f) { + } else if (this->skelAnimeFlying.curFrame > 17.0f) { this->actor.velocity.y = 6.0f; this->actor.gravity = 0.0f; this->actor.speed = 4.0f; } if (this->actionFlags & 1) { - EnOwl_ChangeMode(this, func_8095BF78, func_8095C328, &this->skelAnime1, &object_owl_Anim_001ADC, 0.0f); + EnOwl_ChangeMode(this, func_8095BF78, func_8095C328, &this->skelAnimeFlying, &gOwlFlyAnim, 0.0f); this->unk_3EA = 6; this->unk_3EC += 0x2000; } @@ -810,7 +809,7 @@ void func_8095C09C(EnOwl* this, PlayState* play) { void func_8095C1C8(EnOwl* this, PlayState* play) { if (this->actionFlags & 1) { this->unk_3EA = 3; - EnOwl_ChangeMode(this, func_8095C09C, func_8095C484, &this->skelAnime1, &object_owl_Anim_001168, 0.0f); + EnOwl_ChangeMode(this, func_8095C09C, func_8095C484, &this->skelAnimeFlying, &gOwlTakeoffAnim, 0.0f); this->unk_3EC = BINANG_ADD(this->actor.world.rot.y, 0x4000); this->unk_3E4 = this->actor.world.pos.y; this->actor.velocity.y = 2.0f; @@ -826,8 +825,8 @@ void func_8095C258(EnOwl* this) { } else { this->unk_414 = func_8095C328; this->unk_3EA = 6; - Animation_Change(this->skelAnime3, &object_owl_Anim_001ADC, 1.0f, 0.0f, - Animation_GetLastFrame(&object_owl_Anim_001ADC), ANIMMODE_ONCE, 5.0f); + Animation_Change(this->skelAnime3, &gOwlFlyAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gOwlFlyAnim), + ANIMMODE_ONCE, 5.0f); } } @@ -840,8 +839,8 @@ void func_8095C328(EnOwl* this) { } else { this->unk_3EA = 160; this->unk_414 = func_8095C258; - Animation_Change(this->skelAnime3, &object_owl_Anim_00C6D4, 1.0f, 0.0f, - Animation_GetLastFrame(&object_owl_Anim_00C6D4), ANIMMODE_LOOP, 5.0f); + Animation_Change(this->skelAnime3, &gOwlGlideAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gOwlGlideAnim), + ANIMMODE_LOOP, 5.0f); } } } @@ -925,7 +924,7 @@ void EnOwl_Update(Actor* thisx, PlayState* play) { return; } - if ((this->skelAnime1.animation == &object_owl_Anim_001ADC) && Animation_OnFrame(&this->skelAnime1, 4.0f)) { + if ((this->skelAnimeFlying.animation == &gOwlFlyAnim) && Animation_OnFrame(&this->skelAnimeFlying, 4.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_OWL_FLUTTER); } @@ -1180,9 +1179,9 @@ void EnOwl_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void EnOwl_Draw(Actor* thisx, PlayState* play) { static TexturePtr eyeTextures[] = { - object_owl_Tex_008EB8, - object_owl_Tex_0092B8, - object_owl_Tex_0096B8, + gOwlEyeOpenTex, + gOwlEyeHalfTex, + gOwlEyeClosedTex, }; s32 pad; EnOwl* this = THIS; @@ -1214,7 +1213,7 @@ void func_8095D074(Actor* thisx, PlayState* play) { gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); - gSPDisplayList(POLY_OPA_DISP++, object_owl_DL_001200); + gSPDisplayList(POLY_OPA_DISP++, gOwlFeatherDL); } else { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -1222,7 +1221,7 @@ void func_8095D074(Actor* thisx, PlayState* play) { gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_XLU_SURF2); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (u8)(this->unk_3DC * 8)); - gSPDisplayList(POLY_XLU_DISP++, object_owl_DL_001200); + gSPDisplayList(POLY_XLU_DISP++, gOwlFeatherDL); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.h b/src/overlays/actors/ovl_En_Owl/z_en_owl.h index 3dfadc7d7..9e354a6a7 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.h +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.h @@ -2,6 +2,7 @@ #define Z_EN_OWL_H #include "global.h" +#include "objects/object_owl/object_owl.h" struct EnOwl; @@ -23,12 +24,12 @@ typedef enum { typedef struct EnOwl { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; - /* 0x190 */ SkelAnime skelAnime1; - /* 0x1D4 */ Vec3s jointTable1[21]; - /* 0x252 */ Vec3s morphTable1[21]; - /* 0x2D0 */ SkelAnime skelAnime2; - /* 0x314 */ Vec3s jointTable2[16]; - /* 0x374 */ Vec3s morphTable2[16]; + /* 0x190 */ SkelAnime skelAnimeFlying; + /* 0x1D4 */ Vec3s jointTableFlying[OWL_FLYING_LIMB_MAX]; + /* 0x252 */ Vec3s morphTableFlying[OWL_FLYING_LIMB_MAX]; + /* 0x2D0 */ SkelAnime skelAnimePerching; + /* 0x314 */ Vec3s jointTablePerching[OWL_PERCHING_LIMB_MAX]; + /* 0x374 */ Vec3s morphTablePerching[OWL_PERCHING_LIMB_MAX]; /* 0x3D4 */ SkelAnime* skelAnime3; /* 0x3D8 */ s16 unk_3D8; /* 0x3DA */ s16 unk_3DA; From 1e19cfe8697afc2d3a2cce0489da0980aaf6efd7 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Mon, 23 Oct 2023 02:03:16 -0300 Subject: [PATCH 5/5] Anju objects (#1444) * bring over the objects from the other branch * kafeis mask * use symbols * dman naming after assets * stateFlags * remaining stuff * anim array bug * Name everything in DmGm after DmAn * WEEKEVENTREG_COUPLES_MASK_CUTSCENE_FINISHED * undef * format * idk * ing * format * name animations from an4, thanks emil! * emptydl * disbelief * review * format * Update assets/xml/objects/object_mask_kerfay.xml Co-authored-by: Derek Hensley * review --------- Co-authored-by: Derek Hensley --- assets/xml/objects/object_an1.xml | 185 +++++----- assets/xml/objects/object_an2.xml | 22 +- assets/xml/objects/object_an3.xml | 22 +- assets/xml/objects/object_an4.xml | 29 +- assets/xml/objects/object_mask_kerfay.xml | 14 +- include/z64cutscene.h | 2 +- include/z64save.h | 2 +- src/code/z_player_lib.c | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 315 +++++++++-------- src/overlays/actors/ovl_Dm_An/z_dm_an.h | 33 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 316 ++++++++++-------- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h | 33 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 4 +- tools/disasm/functions.txt | 32 +- tools/disasm/variables.txt | 8 +- tools/weekeventregconvert.py | 2 +- undefined_syms.txt | 15 - 17 files changed, 576 insertions(+), 460 deletions(-) diff --git a/assets/xml/objects/object_an1.xml b/assets/xml/objects/object_an1.xml index d0f5f73c5..927fa848a 100644 --- a/assets/xml/objects/object_an1.xml +++ b/assets/xml/objects/object_an1.xml @@ -1,88 +1,107 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_an2.xml b/assets/xml/objects/object_an2.xml index a1785e5dd..f56be1431 100644 --- a/assets/xml/objects/object_an2.xml +++ b/assets/xml/objects/object_an2.xml @@ -1,12 +1,18 @@  + - - - - - - - - + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_an3.xml b/assets/xml/objects/object_an3.xml index 2fa21dadc..a5268448c 100644 --- a/assets/xml/objects/object_an3.xml +++ b/assets/xml/objects/object_an3.xml @@ -1,12 +1,18 @@  + - - - - - - - - + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_an4.xml b/assets/xml/objects/object_an4.xml index a6bb94e37..d159c3dd5 100644 --- a/assets/xml/objects/object_an4.xml +++ b/assets/xml/objects/object_an4.xml @@ -1,15 +1,22 @@  + - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_mask_kerfay.xml b/assets/xml/objects/object_mask_kerfay.xml index 282aa8029..d80b8eaf0 100644 --- a/assets/xml/objects/object_mask_kerfay.xml +++ b/assets/xml/objects/object_mask_kerfay.xml @@ -1,10 +1,12 @@  + - - - - - - + + + + + + + diff --git a/include/z64cutscene.h b/include/z64cutscene.h index af427d1a7..69cc5ce50 100644 --- a/include/z64cutscene.h +++ b/include/z64cutscene.h @@ -482,7 +482,7 @@ typedef enum { /* 0x22A */ CS_CMD_ACTOR_CUE_554, /* 0x22B */ CS_CMD_ACTOR_CUE_555, /* 0x22C */ CS_CMD_ACTOR_CUE_556, - /* 0x22D */ CS_CMD_ACTOR_CUE_557, + /* 0x22D */ CS_CMD_ACTOR_CUE_557, // Couple's Mask cs, Anju cues /* 0x22E */ CS_CMD_ACTOR_CUE_558, /* 0x22F */ CS_CMD_ACTOR_CUE_559, /* 0x230 */ CS_CMD_ACTOR_CUE_560, diff --git a/include/z64save.h b/include/z64save.h index 333953a76..0b6821038 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -1017,7 +1017,7 @@ typedef enum { #define WEEKEVENTREG_51_08 PACK_WEEKEVENTREG_FLAG(51, 0x08) #define WEEKEVENTREG_51_10 PACK_WEEKEVENTREG_FLAG(51, 0x10) #define WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT PACK_WEEKEVENTREG_FLAG(51, 0x20) -#define WEEKEVENTREG_51_40 PACK_WEEKEVENTREG_FLAG(51, 0x40) +#define WEEKEVENTREG_COUPLES_MASK_CUTSCENE_FINISHED PACK_WEEKEVENTREG_FLAG(51, 0x40) #define WEEKEVENTREG_51_80 PACK_WEEKEVENTREG_FLAG(51, 0x80) // Protected Cremia diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 3a5d69a34..6c33a5565 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -2515,7 +2515,7 @@ u8 D_801C0B1C[] = { Gfx* D_801C0B20[] = { object_mask_truth_DL_0001A0, // PLAYER_MASK_TRUTH - object_mask_kerfay_DL_000D40, // PLAYER_MASK_KAFEIS_MASK + gKafeisMaskDL, // PLAYER_MASK_KAFEIS_MASK object_mask_yofukasi_DL_000490, // PLAYER_MASK_ALL_NIGHT object_mask_rabit_DL_000610, // PLAYER_MASK_BUNNY object_mask_ki_tan_DL_0004A0, // PLAYER_MASK_KEATON diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.c b/src/overlays/actors/ovl_Dm_An/z_dm_an.c index 3b05c6e56..090360dd7 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -16,10 +16,10 @@ void DmAn_Init(Actor* thisx, PlayState* play); void DmAn_Destroy(Actor* thisx, PlayState* play); void DmAn_Update(Actor* thisx, PlayState* play); -void func_80C1C958(DmAn* this, PlayState* play); -void DmAn_HandleCutscene(DmAn* this, PlayState* play); +void DmAn_WaitForObject(DmAn* this, PlayState* play); +void DmAn_HandleCouplesMaskCs(DmAn* this, PlayState* play); void DmAn_DoNothing(DmAn* this, PlayState* play); -void func_80C1D0B0(Actor* thisx, PlayState* play); +void DmAn_Draw(Actor* thisx, PlayState* play); ActorInit Dm_An_InitVars = { ACTOR_DM_AN, @@ -33,40 +33,51 @@ ActorInit Dm_An_InitVars = { (ActorFunc)NULL, }; -typedef enum { - /* -1 */ DMAN_ANIM_NONE = -1, - /* 0x0 */ DMAN_ANIM_0, - /* 0x1 */ DMAN_ANIM_1, - /* 0x2 */ DMAN_ANIM_2, - /* 0x3 */ DMAN_ANIM_3, - /* 0x4 */ DMAN_ANIM_4, - /* 0x5 */ DMAN_ANIM_5, - /* 0x6 */ DMAN_ANIM_6, - /* 0x7 */ DMAN_ANIM_7, - /* 0x8 */ DMAN_ANIM_8, - /* 0x9 */ DMAN_ANIM_9, - /* 0xA */ DMAN_ANIM_10, - /* 0xB */ DMAN_ANIM_11, - /* 0xC */ DMAN_ANIM_12, - /* 0xD */ DMAN_ANIM_13, - /* 0xE */ DMAN_ANIM_MAX +/** + * Anju stores her animations across different objects and the ones used by this actor are put together right next to + * each other in the sAnimationInfo array. Due to this, animation functions check which object to load by comparing + * index ranges. To make this a bit easier to read, this enum includes `DMAN_ANIMOBJ_*` values that mark when a range of + * animations of a certain object start + */ +typedef enum DmAnAnimation { + /* -1 */ DMAN_ANIM_NONE = -1, + /* 0 */ DMAN_ANIM_SITTING_IN_DISBELIEF, + /* 1 */ DMAN_ANIM_SIT, + + /* 2 */ DMAN_ANIMOBJ_AN4, + /* 2 */ DMAN_ANIM_MASK_STAND_LOOP = DMAN_ANIMOBJ_AN4, + /* 3 */ DMAN_ANIM_HOLD_HANDS, //! @bug See note at `sAnimationInfo` + /* 4 */ DMAN_ANIM_MASK_KNEEL, + /* 5 */ DMAN_ANIM_MASK_KNEEL_LOOP, + /* 6 */ DMAN_ANIM_HUG, + /* 7 */ DMAN_ANIM_HUG_LOOP, + /* 8 */ DMAN_ANIM_HUG_RELEASE, + /* 9 */ DMAN_ANIM_HUG_RELEASE_LOOP, + /* 10 */ DMAN_ANIM_COMBINE_MASKS_1, + /* 11 */ DMAN_ANIM_COMBINE_MASKS_2, + /* 12 */ DMAN_ANIM_LOOK_UP, + /* 13 */ DMAN_ANIM_LOOK_UP_LOOP, + /* 14 */ DMAN_ANIM_MAX } DmAnAnimation; static AnimationInfoS sAnimationInfo[DMAN_ANIM_MAX] = { - { &object_an1_Anim_007E08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_0 - { &object_an1_Anim_0071E8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_1 - { &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_2 - { &object_an1_Anim_013E1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_3 - { &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_4 - { &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_5 - { &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_6 - { &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_7 - { &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_8 - { &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_9 - { &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_10 - { &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_11 - { &object_an4_Anim_004A78, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_12 - { &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_13 + { &gAnju1SittingInDisbeliefAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_SITTING_IN_DISBELIEF + { &gAnju1SitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_SIT + + // DMAN_ANIMOBJ_AN4 + { &gAnju4MaskStandLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_MASK_STAND_LOOP + //! @bug Uses symbol from OBJECT_AN1 instead of OBJECT_AN4 + { &gAnju1HoldHandsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_HOLD_HANDS + { &gAnju4MaskKneelAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_MASK_KNEEL + { &gAnju4MaskKneelLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_MASK_KNEEL_LOOP + { &gAnju4HugAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_HUG + { &gAnju4HugLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_HUG_LOOP + { &gAnju4HugReleaseAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_HUG_RELEASE + { &gAnju4HugReleaseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_HUG_RELEASE_LOOP + { &gAnju4CombineMasks1Anim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_COMBINE_MASKS_1 + { &gAnju4CombineMasks2Anim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_COMBINE_MASKS_2 + { &gAnju4LookUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_LOOK_UP + { &gAnju4LookUpLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_LOOK_UP_LOOP }; s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) { @@ -74,13 +85,13 @@ s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) { s8 objectSlot2; s32 isAnimFinished = false; - if (this->animIndex <= DMAN_ANIM_1) { + if (this->animIndex < DMAN_ANIMOBJ_AN4) { objectSlot2 = this->actor.objectSlot; } else { objectSlot2 = this->an4ObjectSlot; } - if (objectSlot2 >= 0) { + if (objectSlot2 > OBJECT_SLOT_NONE) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot2].segment); isAnimFinished = SkelAnime_Update(&this->skelAnime); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment); @@ -89,18 +100,18 @@ s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) { return isAnimFinished; } -s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, s32 animIndex) { +s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, DmAnAnimation animIndex) { s8 objectSlot = this->actor.objectSlot; s8 objectSlot2; s32 didAnimChange = false; - if (animIndex <= DMAN_ANIM_1) { + if (animIndex < DMAN_ANIMOBJ_AN4) { objectSlot2 = this->actor.objectSlot; } else { objectSlot2 = this->an4ObjectSlot; } - if ((objectSlot2 >= 0) && (this->animIndex != animIndex)) { + if ((objectSlot2 > OBJECT_SLOT_NONE) && (this->animIndex != animIndex)) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot2].segment); this->animIndex = animIndex; didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); @@ -110,66 +121,85 @@ s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, s32 animIndex) { return didAnimChange; } -void func_80C1C5B4(DmAn* this) { - if (DECR(this->unk_2BA) == 0) { - this->unk_2B8++; - if (this->unk_2B8 >= 4) { - this->unk_2BA = Rand_S16Offset(30, 30); - this->unk_2B8 = 0; +typedef enum DmAnEyes { + /* 0 */ DMAN_EYES_OPEN, + /* 1 */ DMAN_EYES_HALF1, + /* 2 */ DMAN_EYES_CLOSED, + /* 3 */ DMAN_EYES_HALF2, + /* 4 */ DMAN_EYES_COMFORT, + /* 5 */ DMAN_EYES_SAD, + /* 6 */ DMAN_EYES_RELIEVED_CLOSED, + /* 7 */ DMAN_EYES_MAX +} DmAnEyes; + +typedef enum DmAnMouth { + /* 0 */ DMAN_MOUTH_CLOSED, + /* 1 */ DMAN_MOUTH_HAPPY, + /* 2 */ DMAN_MOUTH_OPEN, + /* 3 */ DMAN_MOUTH_MAX +} DmAnMouth; + +void DmAn_Blink(DmAn* this) { + if (DECR(this->eyeTimer) == 0) { + this->eyeTexIndex++; + if (this->eyeTexIndex > DMAN_EYES_HALF2) { + this->eyeTimer = Rand_S16Offset(30, 30); + this->eyeTexIndex = 0; } } } -s32 func_80C1C62C(DmAn* this, PlayState* play) { +s32 DmAn_UpdateHeadRot(DmAn* this, PlayState* play) { s32 pad; - Vec3f sp40; - Vec3f sp34; - s16 sp32; + Vec3f lookAtActorPos; + Vec3f pos; + s16 yaw; - Math_Vec3f_Copy(&sp40, &this->unk_2B4->world.pos); - Math_Vec3f_Copy(&sp34, &this->actor.world.pos); - sp32 = Math_Vec3f_Yaw(&sp34, &sp40); + Math_Vec3f_Copy(&lookAtActorPos, &this->lookAtActor->world.pos); + Math_Vec3f_Copy(&pos, &this->actor.world.pos); + yaw = Math_Vec3f_Yaw(&pos, &lookAtActorPos); - Math_ApproachS(&this->unk_2C0, (sp32 - this->unk_2C4) - this->actor.shape.rot.y, 4, 0x2AA8); - this->unk_2C0 = CLAMP(this->unk_2C0, -0x1FFE, 0x1FFE); + Math_ApproachS(&this->headRotY, (yaw - this->torsoRotY) - this->actor.shape.rot.y, 4, 0x2AA8); + this->headRotY = CLAMP(this->headRotY, -0x1FFE, 0x1FFE); - Math_ApproachS(&this->unk_2C4, (sp32 - this->unk_2C0) - this->actor.shape.rot.y, 4, 0x2AA8); - this->unk_2C4 = CLAMP(this->unk_2C4, -0x1C70, 0x1C70); + Math_ApproachS(&this->torsoRotY, (yaw - this->headRotY) - this->actor.shape.rot.y, 4, 0x2AA8); + this->torsoRotY = CLAMP(this->torsoRotY, -0x1C70, 0x1C70); - if (this->unk_2B4->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_2B4)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; + if (this->lookAtActor->id == ACTOR_PLAYER) { + lookAtActorPos.y = ((Player*)this->lookAtActor)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { - Math_Vec3f_Copy(&sp40, &this->unk_2B4->focus.pos); + Math_Vec3f_Copy(&lookAtActorPos, &this->lookAtActor->focus.pos); } - Math_Vec3f_Copy(&sp34, &this->actor.focus.pos); - Math_ApproachS(&this->unk_2BE, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_2C2, 4, 0x2AA8); - this->unk_2BE = CLAMP(this->unk_2BE, -0x1C70, 0x1C70); + Math_Vec3f_Copy(&pos, &this->actor.focus.pos); + Math_ApproachS(&this->headRotZ, Math_Vec3f_Pitch(&pos, &lookAtActorPos) - this->torsoRotZ, 4, 0x2AA8); + this->headRotZ = CLAMP(this->headRotZ, -0x1C70, 0x1C70); + + Math_ApproachS(&this->torsoRotZ, Math_Vec3f_Pitch(&pos, &lookAtActorPos) - this->headRotZ, 4, 0x2AA8); + this->torsoRotZ = CLAMP(this->torsoRotZ, -0x1C70, 0x1C70); - Math_ApproachS(&this->unk_2C2, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_2BE, 4, 0x2AA8); - this->unk_2C2 = CLAMP(this->unk_2C2, -0x1C70, 0x1C70); return true; } -s32 func_80C1C83C(DmAn* this, PlayState* play) { - if (this->unk_2B4 != NULL) { - func_80C1C62C(this, play); - this->unk_2AE &= ~1; - this->unk_2AE |= 2; - } else if (this->unk_2AE & 2) { - this->unk_2AE &= ~2; - this->unk_2BE = 0; - this->unk_2C0 = 0; - this->unk_2C2 = 0; - this->unk_2C4 = 0; - this->unk_2BC = 20; - } else if (DECR(this->unk_2BC) == 0) { - this->unk_2AE |= 1; +s32 DmAn_UpdateAttention(DmAn* this, PlayState* play) { + if (this->lookAtActor != NULL) { + DmAn_UpdateHeadRot(this, play); + this->stateFlags &= ~DMAN_STATE_LOST_ATTENTION; + this->stateFlags |= DMAN_STATE_FACE_TARGET; + } else if (this->stateFlags & DMAN_STATE_FACE_TARGET) { + this->stateFlags &= ~DMAN_STATE_FACE_TARGET; + this->headRotZ = 0; + this->headRotY = 0; + this->torsoRotZ = 0; + this->torsoRotY = 0; + this->loseAttentionTimer = 20; + } else if (DECR(this->loseAttentionTimer) == 0) { + this->stateFlags |= DMAN_STATE_LOST_ATTENTION; } return true; } -Actor* func_80C1C8E8(PlayState* play) { +Actor* DmAn_FindAnjusMotherActor(PlayState* play) { Actor* tempActor; Actor* foundActor = NULL; @@ -190,34 +220,42 @@ Actor* func_80C1C8E8(PlayState* play) { return foundActor; } -void func_80C1C958(DmAn* this, PlayState* play) { +void DmAn_WaitForObject(DmAn* this, PlayState* play) { if ((this->an4ObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->an4ObjectSlot, play) && (this->msmoObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->msmoObjectSlot, play)) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable, - OBJECT_AN1_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gAnju1Skel, NULL, this->jointTable, this->morphTable, + ANJU1_LIMB_MAX); this->animIndex = DMAN_ANIM_NONE; - DmAn_ChangeAnim(this, play, DMAN_ANIM_0); + DmAn_ChangeAnim(this, play, DMAN_ANIM_SITTING_IN_DISBELIEF); this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); - this->unk_2AE |= 1; - this->actor.draw = func_80C1D0B0; + this->stateFlags |= DMAN_STATE_LOST_ATTENTION; + this->actor.draw = DmAn_Draw; if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) { - this->unk_2B4 = func_80C1C8E8(play); - DmAn_ChangeAnim(this, play, DMAN_ANIM_1); + this->lookAtActor = DmAn_FindAnjusMotherActor(play); + DmAn_ChangeAnim(this, play, DMAN_ANIM_SIT); this->actionFunc = DmAn_DoNothing; } else { - this->actionFunc = DmAn_HandleCutscene; + this->actionFunc = DmAn_HandleCouplesMaskCs; } } } -void DmAn_HandleCutscene(DmAn* this, PlayState* play) { +void DmAn_HandleCouplesMaskCs(DmAn* this, PlayState* play) { s32 csAnimIndex[] = { - DMAN_ANIM_0, DMAN_ANIM_0, DMAN_ANIM_12, DMAN_ANIM_2, DMAN_ANIM_4, - DMAN_ANIM_6, DMAN_ANIM_8, DMAN_ANIM_10, DMAN_ANIM_11, DMAN_ANIM_3, + /* 0 */ 0, // no cue + /* 1 */ DMAN_ANIM_SITTING_IN_DISBELIEF, + /* 2 */ DMAN_ANIM_LOOK_UP, + /* 3 */ DMAN_ANIM_MASK_STAND_LOOP, + /* 4 */ DMAN_ANIM_MASK_KNEEL, + /* 5 */ DMAN_ANIM_HUG, + /* 6 */ DMAN_ANIM_HUG_RELEASE, + /* 7 */ DMAN_ANIM_COMBINE_MASKS_1, + /* 8 */ DMAN_ANIM_COMBINE_MASKS_2, + /* 9 */ DMAN_ANIM_HOLD_HANDS, }; u16 cueId; s32 cueChannel; @@ -247,8 +285,8 @@ void DmAn_HandleCutscene(DmAn* this, PlayState* play) { case 6: case 7: case 8: - if ((this->animIndex == DMAN_ANIM_12) || (this->animIndex == DMAN_ANIM_4) || - (this->animIndex == DMAN_ANIM_6) || (this->animIndex == DMAN_ANIM_8)) { + if ((this->animIndex == DMAN_ANIM_LOOK_UP) || (this->animIndex == DMAN_ANIM_MASK_KNEEL) || + (this->animIndex == DMAN_ANIM_HUG) || (this->animIndex == DMAN_ANIM_HUG_RELEASE)) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { DmAn_ChangeAnim(this, play, this->animIndex + 1); } @@ -275,7 +313,7 @@ void DmAn_Init(Actor* thisx, PlayState* play) { this->an4ObjectSlot = SubS_GetObjectSlot(OBJECT_AN4, play); this->msmoObjectSlot = SubS_GetObjectSlot(OBJECT_MSMO, play); - this->actionFunc = func_80C1C958; + this->actionFunc = DmAn_WaitForObject; } void DmAn_Destroy(Actor* thisx, PlayState* play) { @@ -286,26 +324,25 @@ void DmAn_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - func_80C1C83C(this, play); + DmAn_UpdateAttention(this, play); if (this->actor.draw != NULL) { DmAn_UpdateSkelAnime(this, play); - func_80C1C5B4(this); + DmAn_Blink(this); } Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } -Vec3f D_80C1D2C8 = { 450.0f, 700.0f, -760.0f }; -Vec3s D_80C1D2D4 = { 0x238C, 0, -0x3FFC }; -Vec3f D_80C1D2DC = { 1000.0f, 0.0f, 0.0f }; - -void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { +void DmAn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { s32 pad[2]; DmAn* this = THIS; s8 objectSlot = this->actor.objectSlot; s8 msmoObjectSlot = this->msmoObjectSlot; - if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) { + if ((limbIndex == ANJU1_LIMB_LEFT_HAND) && this->didAnimChangeInCs) { + static Vec3f D_80C1D2C8 = { 450.0f, 700.0f, -760.0f }; + static Vec3s D_80C1D2D4 = { 0x238C, 0, -0x3FFC }; + OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -321,19 +358,21 @@ void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto CLOSE_DISPS(play->state.gfxCtx); } - if (limbIndex == OBJECT_AN1_LIMB_09) { + if (limbIndex == ANJU1_LIMB_HEAD) { + static Vec3f D_80C1D2DC = { 1000.0f, 0.0f, 0.0f }; + Matrix_MultVec3f(&D_80C1D2DC, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); } } -void func_80C1CEFC(PlayState* play, s32 limbIndex, Actor* thisx) { +void DmAn_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { DmAn* this = THIS; s16 stepRot; s16 overrideRot; - if (!(this->unk_2AE & 1)) { - if (this->unk_2AE & 2) { + if (!(this->stateFlags & DMAN_STATE_LOST_ATTENTION)) { + if (this->stateFlags & DMAN_STATE_FACE_TARGET) { overrideRot = true; } else { overrideRot = false; @@ -344,53 +383,57 @@ void func_80C1CEFC(PlayState* play, s32 limbIndex, Actor* thisx) { overrideRot = false; } - if (limbIndex == OBJECT_AN1_LIMB_09) { - SubS_UpdateLimb(this->unk_2BE + this->unk_2C2 + 0x4000, - this->unk_2C0 + this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_18C, - &this->unk_1A4, stepRot, overrideRot); + if (limbIndex == ANJU1_LIMB_HEAD) { + SubS_UpdateLimb(this->headRotZ + this->torsoRotZ + 0x4000, + this->headRotY + this->torsoRotY + this->actor.shape.rot.y + 0x4000, &this->headComputedPos, + &this->headComputedRot, stepRot, overrideRot); Matrix_Pop(); - Matrix_Translate(this->unk_18C.x, this->unk_18C.y, this->unk_18C.z, MTXMODE_NEW); + Matrix_Translate(this->headComputedPos.x, this->headComputedPos.y, this->headComputedPos.z, MTXMODE_NEW); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->unk_1A4.y, MTXMODE_APPLY); - Matrix_RotateXS(this->unk_1A4.x, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_1A4.z, MTXMODE_APPLY); + Matrix_RotateYS(this->headComputedRot.y, MTXMODE_APPLY); + Matrix_RotateXS(this->headComputedRot.x, MTXMODE_APPLY); + Matrix_RotateZS(this->headComputedRot.z, MTXMODE_APPLY); Matrix_Push(); - } else if (limbIndex == OBJECT_AN1_LIMB_02) { - SubS_UpdateLimb(this->unk_2C2 + 0x4000, this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_194, - &this->unk_1AA, stepRot, overrideRot); + } else if (limbIndex == ANJU1_LIMB_TORSO) { + SubS_UpdateLimb(this->torsoRotZ + 0x4000, this->torsoRotY + this->actor.shape.rot.y + 0x4000, + &this->torsoComputedPos, &this->torsoComputedRot, stepRot, overrideRot); Matrix_Pop(); - Matrix_Translate(this->unk_194.x, this->unk_194.y, this->unk_194.z, MTXMODE_NEW); + Matrix_Translate(this->torsoComputedPos.x, this->torsoComputedPos.y, this->torsoComputedPos.z, MTXMODE_NEW); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->unk_1AA.y, MTXMODE_APPLY); - Matrix_RotateXS(this->unk_1AA.x, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_1AA.z, MTXMODE_APPLY); + Matrix_RotateYS(this->torsoComputedRot.y, MTXMODE_APPLY); + Matrix_RotateXS(this->torsoComputedRot.x, MTXMODE_APPLY); + Matrix_RotateZS(this->torsoComputedRot.z, MTXMODE_APPLY); Matrix_Push(); } } -TexturePtr D_80C1D2E8[] = { - object_an1_Tex_00E6E0, - object_an1_Tex_00F7A0, - object_an1_Tex_0101A0, -}; - -TexturePtr D_80C1D2F4[] = { - object_an1_Tex_00E1E0, object_an1_Tex_00EFA0, object_an1_Tex_00F3A0, object_an1_Tex_00EFA0, - object_an1_Tex_00FDA0, object_an1_Tex_00F9A0, object_an1_Tex_0103A0, -}; - -void func_80C1D0B0(Actor* thisx, PlayState* play) { +void DmAn_Draw(Actor* thisx, PlayState* play) { + static TexturePtr sMouthTextures[DMAN_MOUTH_MAX] = { + gAnju1MouthClosedTex, // DMAN_MOUTH_CLOSED + gAnju1MouthHappyTex, // DMAN_MOUTH_HAPPY + gAnju1MouthOpenTex, // DMAN_MOUTH_OPEN + }; + static TexturePtr sEyeTextures[DMAN_EYES_MAX] = { + gAnju1EyeOpenTex, // DMAN_EYES_OPEN + gAnju1EyeHalfTex, // DMAN_EYES_HALF1 + gAnju1EyeClosedTex, // DMAN_EYES_CLOSED + gAnju1EyeHalfTex, // DMAN_EYES_HALF2 + gAnju1EyeComfortTex, // DMAN_EYES_COMFORT + gAnju1EyeSadTex, // DMAN_EYES_SAD + gAnju1EyeRelievedClosedTex, // DMAN_EYES_RELIEVED_CLOSED + }; DmAn* this = THIS; OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C1D2F4[this->unk_2B8])); - gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C1D2E8[0])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); + gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[DMAN_MOUTH_CLOSED])); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, - this->skelAnime.dListCount, NULL, func_80C1CD80, func_80C1CEFC, &this->actor); + this->skelAnime.dListCount, NULL, DmAn_PostLimbDraw, DmAn_TransformLimbDraw, + &this->actor); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.h b/src/overlays/actors/ovl_Dm_An/z_dm_an.h index 00931d731..7ead44b26 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.h +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.h @@ -8,28 +8,31 @@ struct DmAn; typedef void (*DmAnActionFunc)(struct DmAn*, PlayState*); +#define DMAN_STATE_LOST_ATTENTION (1 << 0) +#define DMAN_STATE_FACE_TARGET (1 << 1) + typedef struct DmAn { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ DmAnActionFunc actionFunc; - /* 0x18C */ Vec3f unk_18C; - /* 0x18C */ Vec3f unk_194; - /* 0x1A4 */ Vec3s unk_1A4; - /* 0x1A4 */ Vec3s unk_1AA; - /* 0x1B0 */ Vec3s jointTable[OBJECT_AN1_LIMB_MAX]; - /* 0x22E */ Vec3s morphTable[OBJECT_AN1_LIMB_MAX]; + /* 0x18C */ Vec3f headComputedPos; + /* 0x18C */ Vec3f torsoComputedPos; + /* 0x1A4 */ Vec3s headComputedRot; + /* 0x1A4 */ Vec3s torsoComputedRot; + /* 0x1B0 */ Vec3s jointTable[ANJU1_LIMB_MAX]; + /* 0x22E */ Vec3s morphTable[ANJU1_LIMB_MAX]; /* 0x2AC */ s8 an4ObjectSlot; /* 0x2AD */ s8 msmoObjectSlot; - /* 0x2AE */ u16 unk_2AE; + /* 0x2AE */ u16 stateFlags; /* 0x2B0 */ u8 cueId; - /* 0x2B4 */ Actor* unk_2B4; - /* 0x2B8 */ s16 unk_2B8; - /* 0x2BA */ s16 unk_2BA; - /* 0x2BC */ s16 unk_2BC; - /* 0x2BE */ s16 unk_2BE; - /* 0x2C0 */ s16 unk_2C0; - /* 0x2C2 */ s16 unk_2C2; - /* 0x2C4 */ s16 unk_2C4; + /* 0x2B4 */ Actor* lookAtActor; + /* 0x2B8 */ s16 eyeTexIndex; + /* 0x2BA */ s16 eyeTimer; + /* 0x2BC */ s16 loseAttentionTimer; + /* 0x2BE */ s16 headRotZ; + /* 0x2C0 */ s16 headRotY; + /* 0x2C2 */ s16 torsoRotZ; + /* 0x2C4 */ s16 torsoRotY; /* 0x2C8 */ s32 animIndex; /* 0x2CC */ s32 prevAnimIndex; /* 0x2D0 */ s32 isCutscenePlaying; diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c index 3994c8fce..458b51193 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -16,10 +16,10 @@ void DmGm_Init(Actor* thisx, PlayState* play); void DmGm_Destroy(Actor* thisx, PlayState* play); void DmGm_Update(Actor* thisx, PlayState* play); -void func_80C248A8(DmGm* this, PlayState* play); -void DmGm_HandleCutscene(DmGm* this, PlayState* play); +void DmGm_WaitForObject(DmGm* this, PlayState* play); +void DmGm_HandleCouplesMaskCs(DmGm* this, PlayState* play); void DmGm_DoNothing(DmGm* this, PlayState* play); -void func_80C25000(Actor* thisx, PlayState* play); +void DmGm_Draw(Actor* thisx, PlayState* play); ActorInit Dm_Gm_InitVars = { ACTOR_DM_GM, @@ -33,40 +33,51 @@ ActorInit Dm_Gm_InitVars = { (ActorFunc)NULL, }; -typedef enum { - /* -1 */ DMGM_ANIM_NONE = -1, - /* 0x0 */ DMGM_ANIM_0, - /* 0x1 */ DMGM_ANIM_1, - /* 0x2 */ DMGM_ANIM_2, - /* 0x3 */ DMGM_ANIM_3, - /* 0x4 */ DMGM_ANIM_4, - /* 0x5 */ DMGM_ANIM_5, - /* 0x6 */ DMGM_ANIM_6, - /* 0x7 */ DMGM_ANIM_7, - /* 0x8 */ DMGM_ANIM_8, - /* 0x9 */ DMGM_ANIM_9, - /* 0xA */ DMGM_ANIM_10, - /* 0xB */ DMGM_ANIM_11, - /* 0xC */ DMGM_ANIM_12, - /* 0xD */ DMGM_ANIM_13, - /* 0xE */ DMGM_ANIM_MAX +/** + * Anju stores her animations across different objects and the ones used by this actor are put together right next to + * each other in the sAnimationInfo array. Due to this, animation functions check which object to load by comparing + * index ranges. To make this a bit easier to read, this enum includes `DMGM_ANIMOBJ_*` values that mark when a range of + * animations of a certain object start + */ +typedef enum DmGmAnimation { + /* -1 */ DMGM_ANIM_NONE = -1, + /* 0 */ DMGM_ANIM_SITTING_IN_DISBELIEF, + /* 1 */ DMGM_ANIM_SIT, + + /* 2 */ DMGM_ANIMOBJ_AN4, + /* 2 */ DMGM_ANIM_MASK_STAND_LOOP = DMGM_ANIMOBJ_AN4, + /* 3 */ DMGM_ANIM_HOLD_HANDS, //! @bug See note at `sAnimationInfo` + /* 4 */ DMGM_ANIM_MASK_KNEEL, + /* 5 */ DMGM_ANIM_MASK_KNEEL_LOOP, + /* 6 */ DMGM_ANIM_HUG, + /* 7 */ DMGM_ANIM_HUG_LOOP, + /* 8 */ DMGM_ANIM_HUG_RELEASE, + /* 9 */ DMGM_ANIM_HUG_RELEASE_LOOP, + /* 10 */ DMGM_ANIM_COMBINE_MASKS_1, + /* 11 */ DMGM_ANIM_COMBINE_MASKS_2, + /* 12 */ DMGM_ANIM_LOOK_UP, + /* 13 */ DMGM_ANIM_LOOK_UP_LOOP, + /* 14 */ DMGM_ANIM_MAX } DmGmAnimation; static AnimationInfoS sAnimationInfo[DMGM_ANIM_MAX] = { - { &object_an1_Anim_007E08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_0 - { &object_an1_Anim_0071E8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_1 - { &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_2 - { &object_an1_Anim_013E1C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_3 - { &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_4 - { &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_5 - { &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_6 - { &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_7 - { &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_8 - { &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_9 - { &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_10 - { &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_11 - { &object_an4_Anim_004A78, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_12 - { &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_13 + { &gAnju1SittingInDisbeliefAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_SITTING_IN_DISBELIEF + { &gAnju1SitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_SIT + + // DMGM_ANIMOBJ_AN4 + { &gAnju4MaskStandLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_MASK_STAND_LOOP + //! @bug Uses symbol from OBJECT_AN1 instead of OBJECT_AN4 + { &gAnju1HoldHandsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_HOLD_HANDS + { &gAnju4MaskKneelAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_MASK_KNEEL + { &gAnju4MaskKneelLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_MASK_KNEEL_LOOP + { &gAnju4HugAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_HUG + { &gAnju4HugLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_HUG_LOOP + { &gAnju4HugReleaseAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_HUG_RELEASE + { &gAnju4HugReleaseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_HUG_RELEASE_LOOP + { &gAnju4CombineMasks1Anim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_COMBINE_MASKS_1 + { &gAnju4CombineMasks2Anim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_COMBINE_MASKS_2 + { &gAnju4LookUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_LOOK_UP + { &gAnju4LookUpLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_LOOK_UP_LOOP }; s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) { @@ -74,13 +85,13 @@ s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) { s8 objectIndex2; s32 isAnimFinished = false; - if (this->animIndex <= DMGM_ANIM_1) { + if (this->animIndex < DMGM_ANIMOBJ_AN4) { objectIndex2 = this->actor.objectSlot; } else { objectIndex2 = this->an4ObjectSlot; } - if (objectIndex2 >= 0) { + if (objectIndex2 > OBJECT_SLOT_NONE) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); isAnimFinished = SkelAnime_Update(&this->skelAnime); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment); @@ -89,18 +100,18 @@ s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) { return isAnimFinished; } -s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, s32 animIndex) { +s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, DmGmAnimation animIndex) { s8 objectSlot = this->actor.objectSlot; s8 objectIndex2; s32 didAnimChange = false; - if (animIndex <= DMGM_ANIM_1) { + if (animIndex < DMGM_ANIMOBJ_AN4) { objectIndex2 = this->actor.objectSlot; } else { objectIndex2 = this->an4ObjectSlot; } - if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) { + if ((objectIndex2 > OBJECT_SLOT_NONE) && (this->animIndex != animIndex)) { gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment); this->animIndex = animIndex; didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); @@ -110,66 +121,85 @@ s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, s32 animIndex) { return didAnimChange; } -void func_80C24504(DmGm* this) { - if (DECR(this->unk_2BA) == 0) { - this->unk_2B8++; - if (this->unk_2B8 >= 4) { - this->unk_2BA = Rand_S16Offset(30, 30); - this->unk_2B8 = 0; +typedef enum DmGmEyes { + /* 0 */ DMGM_EYES_OPEN, + /* 1 */ DMGM_EYES_HALF1, + /* 2 */ DMGM_EYES_CLOSED, + /* 3 */ DMGM_EYES_HALF2, + /* 4 */ DMGM_EYES_COMFORT, + /* 5 */ DMGM_EYES_SAD, + /* 6 */ DMGM_EYES_RELIEVED_CLOSED, + /* 7 */ DMGM_EYES_MAX +} DmGmEyes; + +typedef enum DmGmMouth { + /* 0 */ DMGM_MOUTH_CLOSED, + /* 1 */ DMGM_MOUTH_HAPPY, + /* 2 */ DMGM_MOUTH_OPEN, + /* 3 */ DMGM_MOUTH_MAX +} DmGmMouth; + +void DmGm_Blink(DmGm* this) { + if (DECR(this->eyeTimer) == 0) { + this->eyeTexIndex++; + if (this->eyeTexIndex > DMGM_EYES_HALF2) { + this->eyeTimer = Rand_S16Offset(30, 30); + this->eyeTexIndex = 0; } } } -s32 func_80C2457C(DmGm* this, PlayState* play) { +s32 DmGm_UpdateHeadRot(DmGm* this, PlayState* play) { s32 pad; - Vec3f sp40; - Vec3f sp34; - s16 sp32; + Vec3f lookAtActorPos; + Vec3f pos; + s16 yaw; - Math_Vec3f_Copy(&sp40, &this->unk_2B4->world.pos); - Math_Vec3f_Copy(&sp34, &this->actor.world.pos); - sp32 = Math_Vec3f_Yaw(&sp34, &sp40); + Math_Vec3f_Copy(&lookAtActorPos, &this->lookAtActor->world.pos); + Math_Vec3f_Copy(&pos, &this->actor.world.pos); + yaw = Math_Vec3f_Yaw(&pos, &lookAtActorPos); - Math_ApproachS(&this->unk_2C0, (sp32 - this->unk_2C4) - this->actor.shape.rot.y, 4, 0x2AA8); - this->unk_2C0 = CLAMP(this->unk_2C0, -0x1FFE, 0x1FFE); + Math_ApproachS(&this->headRotY, (yaw - this->torsoRotY) - this->actor.shape.rot.y, 4, 0x2AA8); + this->headRotY = CLAMP(this->headRotY, -0x1FFE, 0x1FFE); - Math_ApproachS(&this->unk_2C4, (sp32 - this->unk_2C0) - this->actor.shape.rot.y, 4, 0x2AA8); - this->unk_2C4 = CLAMP(this->unk_2C4, -0x1C70, 0x1C70); + Math_ApproachS(&this->torsoRotY, (yaw - this->headRotY) - this->actor.shape.rot.y, 4, 0x2AA8); + this->torsoRotY = CLAMP(this->torsoRotY, -0x1C70, 0x1C70); - if (this->unk_2B4->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_2B4)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; + if (this->lookAtActor->id == ACTOR_PLAYER) { + lookAtActorPos.y = ((Player*)this->lookAtActor)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { - Math_Vec3f_Copy(&sp40, &this->unk_2B4->focus.pos); + Math_Vec3f_Copy(&lookAtActorPos, &this->lookAtActor->focus.pos); } - Math_Vec3f_Copy(&sp34, &this->actor.focus.pos); - Math_ApproachS(&this->unk_2BE, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_2C2, 4, 0x2AA8); - this->unk_2BE = CLAMP(this->unk_2BE, -0x1C70, 0x1C70); + Math_Vec3f_Copy(&pos, &this->actor.focus.pos); + Math_ApproachS(&this->headRotZ, Math_Vec3f_Pitch(&pos, &lookAtActorPos) - this->torsoRotZ, 4, 0x2AA8); + this->headRotZ = CLAMP(this->headRotZ, -0x1C70, 0x1C70); + + Math_ApproachS(&this->torsoRotZ, Math_Vec3f_Pitch(&pos, &lookAtActorPos) - this->headRotZ, 4, 0x2AA8); + this->torsoRotZ = CLAMP(this->torsoRotZ, -0x1C70, 0x1C70); - Math_ApproachS(&this->unk_2C2, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_2BE, 4, 0x2AA8); - this->unk_2C2 = CLAMP(this->unk_2C2, -0x1C70, 0x1C70); return true; } -s32 func_80C2478C(DmGm* this, PlayState* play) { - if (this->unk_2B4 != NULL) { - func_80C2457C(this, play); - this->unk_2AE &= ~1; - this->unk_2AE |= 2; - } else if (this->unk_2AE & 2) { - this->unk_2AE &= ~2; - this->unk_2BE = 0; - this->unk_2C0 = 0; - this->unk_2C2 = 0; - this->unk_2C4 = 0; - this->unk_2BC = 20; - } else if (DECR(this->unk_2BC) == 0) { - this->unk_2AE |= 1; +s32 DmGm_UpdateAttention(DmGm* this, PlayState* play) { + if (this->lookAtActor != NULL) { + DmGm_UpdateHeadRot(this, play); + this->stateFlags &= ~DMGM_STATE_LOST_ATTENTION; + this->stateFlags |= DMGM_STATE_FACE_TARGET; + } else if (this->stateFlags & DMGM_STATE_FACE_TARGET) { + this->stateFlags &= ~DMGM_STATE_FACE_TARGET; + this->headRotZ = 0; + this->headRotY = 0; + this->torsoRotZ = 0; + this->torsoRotY = 0; + this->loseAttentionTimer = 20; + } else if (DECR(this->loseAttentionTimer) == 0) { + this->stateFlags |= DMGM_STATE_LOST_ATTENTION; } return true; } -Actor* func_80C24838(PlayState* play) { +Actor* DmGm_FindAnjusMotherActor(PlayState* play) { Actor* tempActor; Actor* foundActor = NULL; @@ -190,34 +220,42 @@ Actor* func_80C24838(PlayState* play) { return foundActor; } -void func_80C248A8(DmGm* this, PlayState* play) { +void DmGm_WaitForObject(DmGm* this, PlayState* play) { if ((this->an4ObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->an4ObjectSlot, play) && (this->msmoObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->msmoObjectSlot, play)) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable, - OBJECT_AN1_LIMB_MAX); + SkelAnime_InitFlex(play, &this->skelAnime, &gAnju1Skel, NULL, this->jointTable, this->morphTable, + ANJU1_LIMB_MAX); this->animIndex = DMGM_ANIM_NONE; - DmGm_ChangeAnim(this, play, DMGM_ANIM_0); + DmGm_ChangeAnim(this, play, DMGM_ANIM_SITTING_IN_DISBELIEF); this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; Actor_SetScale(&this->actor, 0.01f); - this->unk_2AE |= 1; - this->actor.draw = func_80C25000; + this->stateFlags |= 1; + this->actor.draw = DmGm_Draw; if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) { - this->unk_2B4 = func_80C24838(play); - DmGm_ChangeAnim(this, play, DMGM_ANIM_1); + this->lookAtActor = DmGm_FindAnjusMotherActor(play); + DmGm_ChangeAnim(this, play, DMGM_ANIM_SIT); this->actionFunc = DmGm_DoNothing; } else { - this->actionFunc = DmGm_HandleCutscene; + this->actionFunc = DmGm_HandleCouplesMaskCs; } } } -void DmGm_HandleCutscene(DmGm* this, PlayState* play) { +void DmGm_HandleCouplesMaskCs(DmGm* this, PlayState* play) { s32 csAnimIndex[] = { - DMGM_ANIM_0, DMGM_ANIM_0, DMGM_ANIM_12, DMGM_ANIM_2, DMGM_ANIM_4, - DMGM_ANIM_6, DMGM_ANIM_8, DMGM_ANIM_10, DMGM_ANIM_11, DMGM_ANIM_3, + /* 0 */ 0, // no cue + /* 1 */ DMGM_ANIM_SITTING_IN_DISBELIEF, + /* 2 */ DMGM_ANIM_LOOK_UP, + /* 3 */ DMGM_ANIM_MASK_STAND_LOOP, + /* 4 */ DMGM_ANIM_MASK_KNEEL, + /* 5 */ DMGM_ANIM_HUG, + /* 6 */ DMGM_ANIM_HUG_RELEASE, + /* 7 */ DMGM_ANIM_COMBINE_MASKS_1, + /* 8 */ DMGM_ANIM_COMBINE_MASKS_2, + /* 9 */ DMGM_ANIM_HOLD_HANDS, }; u16 cueId; s32 cueChannel; @@ -247,8 +285,8 @@ void DmGm_HandleCutscene(DmGm* this, PlayState* play) { case 6: case 7: case 8: - if ((this->animIndex == DMGM_ANIM_12) || (this->animIndex == DMGM_ANIM_4) || - (this->animIndex == DMGM_ANIM_6) || (this->animIndex == DMGM_ANIM_8)) { + if ((this->animIndex == DMGM_ANIM_LOOK_UP) || (this->animIndex == DMGM_ANIM_MASK_KNEEL) || + (this->animIndex == DMGM_ANIM_HUG) || (this->animIndex == DMGM_ANIM_HUG_RELEASE)) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { DmGm_ChangeAnim(this, play, this->animIndex + 1); } @@ -275,7 +313,7 @@ void DmGm_Init(Actor* thisx, PlayState* play) { this->an4ObjectSlot = SubS_GetObjectSlot(OBJECT_AN4, play); this->msmoObjectSlot = SubS_GetObjectSlot(OBJECT_MSMO, play); - this->actionFunc = func_80C248A8; + this->actionFunc = DmGm_WaitForObject; } void DmGm_Destroy(Actor* thisx, PlayState* play) { @@ -286,42 +324,43 @@ void DmGm_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - func_80C2478C(this, play); + DmGm_UpdateAttention(this, play); if (this->actor.draw != NULL) { DmGm_UpdateSkelAnime(this, play); - func_80C24504(this); + DmGm_Blink(this); } Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } -Vec3f D_80C25218 = { 450.0f, 700.0f, -760.0f }; -Vec3s D_80C25224 = { 0x238C, 0, -0x3FFC }; -Vec3f D_80C2522C = { 1000.0f, 0.0f, 0.0f }; - void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { s32 pad[2]; DmGm* this = THIS; - s8 sp2B = this->actor.objectSlot; - s8 sp2A = this->msmoObjectSlot; + s8 objectSlot = this->actor.objectSlot; + s8 msmoObjectSlot = this->msmoObjectSlot; + + if ((limbIndex == ANJU1_LIMB_LEFT_HAND) && this->didAnimChangeInCs) { + static Vec3f D_80C25218 = { 450.0f, 700.0f, -760.0f }; + static Vec3s D_80C25224 = { 0x238C, 0, -0x3FFC }; - if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); Matrix_TranslateRotateZYX(&D_80C25218, &D_80C25224); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2A].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[msmoObjectSlot].segment); gSPDisplayList(POLY_OPA_DISP++, gMoonMaskDL); - gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2B].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment); Matrix_Pop(); CLOSE_DISPS(play->state.gfxCtx); } - if (limbIndex == OBJECT_AN1_LIMB_09) { + if (limbIndex == ANJU1_LIMB_HEAD) { + static Vec3f D_80C2522C = { 1000.0f, 0.0f, 0.0f }; + Matrix_MultVec3f(&D_80C2522C, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); } @@ -332,8 +371,8 @@ void DmGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { s16 stepRot; s16 overrideRot; - if (!(this->unk_2AE & 1)) { - if (this->unk_2AE & 2) { + if (!(this->stateFlags & DMGM_STATE_LOST_ATTENTION)) { + if (this->stateFlags & DMGM_STATE_FACE_TARGET) { overrideRot = true; } else { overrideRot = false; @@ -344,50 +383,53 @@ void DmGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { overrideRot = false; } - if (limbIndex == OBJECT_AN1_LIMB_09) { - SubS_UpdateLimb(this->unk_2BE + this->unk_2C2 + 0x4000, - this->unk_2C0 + this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_18C, - &this->unk_1A4, stepRot, overrideRot); + if (limbIndex == ANJU1_LIMB_HEAD) { + SubS_UpdateLimb(this->headRotZ + this->torsoRotZ + 0x4000, + this->headRotY + this->torsoRotY + this->actor.shape.rot.y + 0x4000, &this->headComputedPos, + &this->headComputedRot, stepRot, overrideRot); Matrix_Pop(); - Matrix_Translate(this->unk_18C.x, this->unk_18C.y, this->unk_18C.z, MTXMODE_NEW); + Matrix_Translate(this->headComputedPos.x, this->headComputedPos.y, this->headComputedPos.z, MTXMODE_NEW); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->unk_1A4.y, MTXMODE_APPLY); - Matrix_RotateXS(this->unk_1A4.x, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_1A4.z, MTXMODE_APPLY); + Matrix_RotateYS(this->headComputedRot.y, MTXMODE_APPLY); + Matrix_RotateXS(this->headComputedRot.x, MTXMODE_APPLY); + Matrix_RotateZS(this->headComputedRot.z, MTXMODE_APPLY); Matrix_Push(); - } else if (limbIndex == OBJECT_AN1_LIMB_02) { - SubS_UpdateLimb(this->unk_2C2 + 0x4000, this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_194, - &this->unk_1AA, stepRot, overrideRot); + } else if (limbIndex == ANJU1_LIMB_TORSO) { + SubS_UpdateLimb(this->torsoRotZ + 0x4000, this->torsoRotY + this->actor.shape.rot.y + 0x4000, + &this->torsoComputedPos, &this->torsoComputedRot, stepRot, overrideRot); Matrix_Pop(); - Matrix_Translate(this->unk_194.x, this->unk_194.y, this->unk_194.z, MTXMODE_NEW); + Matrix_Translate(this->torsoComputedPos.x, this->torsoComputedPos.y, this->torsoComputedPos.z, MTXMODE_NEW); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->unk_1AA.y, MTXMODE_APPLY); - Matrix_RotateXS(this->unk_1AA.x, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_1AA.z, MTXMODE_APPLY); + Matrix_RotateYS(this->torsoComputedRot.y, MTXMODE_APPLY); + Matrix_RotateXS(this->torsoComputedRot.x, MTXMODE_APPLY); + Matrix_RotateZS(this->torsoComputedRot.z, MTXMODE_APPLY); Matrix_Push(); } } -TexturePtr D_80C25238[] = { - object_an1_Tex_00E6E0, - object_an1_Tex_00F7A0, - object_an1_Tex_0101A0, -}; - -TexturePtr D_80C25244[] = { - object_an1_Tex_00E1E0, object_an1_Tex_00EFA0, object_an1_Tex_00F3A0, object_an1_Tex_00EFA0, - object_an1_Tex_00FDA0, object_an1_Tex_00F9A0, object_an1_Tex_0103A0, -}; - -void func_80C25000(Actor* thisx, PlayState* play) { +void DmGm_Draw(Actor* thisx, PlayState* play) { + static TexturePtr sMouthTextures[DMGM_MOUTH_MAX] = { + gAnju1MouthClosedTex, // DMGM_MOUTH_CLOSED + gAnju1MouthHappyTex, // DMGM_MOUTH_HAPPY + gAnju1MouthOpenTex, // DMGM_MOUTH_OPEN + }; + static TexturePtr sEyeTextures[DMGM_EYES_MAX] = { + gAnju1EyeOpenTex, // DMGM_EYES_OPEN + gAnju1EyeHalfTex, // DMGM_EYES_HALF1 + gAnju1EyeClosedTex, // DMGM_EYES_CLOSED + gAnju1EyeHalfTex, // DMGM_EYES_HALF2 + gAnju1EyeComfortTex, // DMGM_EYES_COMFORT + gAnju1EyeSadTex, // DMGM_EYES_SAD + gAnju1EyeRelievedClosedTex, // DMGM_EYES_RELIEVED_CLOSED + }; DmGm* this = THIS; OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C25244[this->unk_2B8])); - gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C25238[0])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); + gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[DMGM_MOUTH_CLOSED])); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, DmGm_PostLimbDraw, DmGm_TransformLimbDraw, diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h index 8abcba712..c04c66a34 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h @@ -8,28 +8,31 @@ struct DmGm; typedef void (*DmGmActionFunc)(struct DmGm*, PlayState*); +#define DMGM_STATE_LOST_ATTENTION (1 << 0) +#define DMGM_STATE_FACE_TARGET (1 << 1) + typedef struct DmGm { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ DmGmActionFunc actionFunc; - /* 0x18C */ Vec3f unk_18C; - /* 0x18C */ Vec3f unk_194; - /* 0x1A4 */ Vec3s unk_1A4; - /* 0x1A4 */ Vec3s unk_1AA; - /* 0x1B0 */ Vec3s jointTable[OBJECT_AN1_LIMB_MAX]; - /* 0x22E */ Vec3s morphTable[OBJECT_AN1_LIMB_MAX]; + /* 0x18C */ Vec3f headComputedPos; + /* 0x18C */ Vec3f torsoComputedPos; + /* 0x1A4 */ Vec3s headComputedRot; + /* 0x1A4 */ Vec3s torsoComputedRot; + /* 0x1B0 */ Vec3s jointTable[ANJU1_LIMB_MAX]; + /* 0x22E */ Vec3s morphTable[ANJU1_LIMB_MAX]; /* 0x2AC */ s8 an4ObjectSlot; /* 0x2AD */ s8 msmoObjectSlot; - /* 0x2AE */ u16 unk_2AE; + /* 0x2AE */ u16 stateFlags; /* 0x2B0 */ u8 cueId; - /* 0x2B4 */ Actor* unk_2B4; - /* 0x2B8 */ s16 unk_2B8; - /* 0x2BA */ s16 unk_2BA; - /* 0x2BC */ s16 unk_2BC; - /* 0x2BE */ s16 unk_2BE; - /* 0x2C0 */ s16 unk_2C0; - /* 0x2C2 */ s16 unk_2C2; - /* 0x2C4 */ s16 unk_2C4; + /* 0x2B4 */ Actor* lookAtActor; + /* 0x2B8 */ s16 eyeTexIndex; + /* 0x2BA */ s16 eyeTimer; + /* 0x2BC */ s16 loseAttentionTimer; + /* 0x2BE */ s16 headRotZ; + /* 0x2C0 */ s16 headRotY; + /* 0x2C2 */ s16 torsoRotZ; + /* 0x2C4 */ s16 torsoRotY; /* 0x2C8 */ s32 animIndex; /* 0x2CC */ s32 prevAnimIndex; /* 0x2D0 */ s32 isCutscenePlaying; diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index d3676daa2..db31d617e 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -824,7 +824,7 @@ s32 func_80A3FE20(EnTest3* this, PlayState* play) { s32 func_80A3FF10(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { static Vec3f D_80A418BC = { -420.0f, 210.0f, -162.0f }; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_51_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_COUPLES_MASK_CUTSCENE_FINISHED)) { D_80A41D68 = 2; Math_Vec3f_Copy(&this->player.actor.world.pos, &D_80A418BC); Math_Vec3f_Copy(&this->player.actor.home.pos, &D_80A418BC); @@ -856,7 +856,7 @@ s32 func_80A3FFD0(EnTest3* this, PlayState* play2) { D_80A41D68 = 2; } } else { - SET_WEEKEVENTREG(WEEKEVENTREG_51_40); + SET_WEEKEVENTREG(WEEKEVENTREG_COUPLES_MASK_CUTSCENE_FINISHED); play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_110); } return false; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 323b6a014..e8d717b45 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -16941,19 +16941,19 @@ 0x80C1C130:("DmAl_Draw",), 0x80C1C410:("DmAn_UpdateSkelAnime",), 0x80C1C4D8:("DmAn_ChangeAnim",), - 0x80C1C5B4:("func_80C1C5B4",), - 0x80C1C62C:("func_80C1C62C",), - 0x80C1C83C:("func_80C1C83C",), - 0x80C1C8E8:("func_80C1C8E8",), - 0x80C1C958:("func_80C1C958",), - 0x80C1CAB0:("DmAn_HandleCutscene",), + 0x80C1C5B4:("DmAn_Blink",), + 0x80C1C62C:("DmAn_UpdateHeadRot",), + 0x80C1C83C:("DmAn_UpdateAttention",), + 0x80C1C8E8:("DmAn_FindAnjusMotherActor",), + 0x80C1C958:("DmAn_WaitForObject",), + 0x80C1CAB0:("DmAn_HandleCouplesMaskCs",), 0x80C1CC80:("DmAn_DoNothing",), 0x80C1CC90:("DmAn_Init",), 0x80C1CCE4:("DmAn_Destroy",), 0x80C1CCF4:("DmAn_Update",), - 0x80C1CD80:("func_80C1CD80",), - 0x80C1CEFC:("func_80C1CEFC",), - 0x80C1D0B0:("func_80C1D0B0",), + 0x80C1CD80:("DmAn_PostLimbDraw",), + 0x80C1CEFC:("DmAn_TransformLimbDraw",), + 0x80C1D0B0:("DmAn_Draw",), 0x80C1D410:("DmAh_ChangeAnim",), 0x80C1D458:("func_80C1D458",), 0x80C1D4D0:("func_80C1D4D0",), @@ -17102,19 +17102,19 @@ 0x80C23F6C:("EnEndingHero6_Draw",), 0x80C24360:("DmGm_UpdateSkelAnime",), 0x80C24428:("DmGm_ChangeAnim",), - 0x80C24504:("func_80C24504",), - 0x80C2457C:("func_80C2457C",), - 0x80C2478C:("func_80C2478C",), - 0x80C24838:("func_80C24838",), - 0x80C248A8:("func_80C248A8",), - 0x80C24A00:("DmGm_HandleCutscene",), + 0x80C24504:("DmGm_Blink",), + 0x80C2457C:("DmGm_UpdateHeadRot",), + 0x80C2478C:("DmGm_UpdateAttention",), + 0x80C24838:("DmGm_FindAnjusMotherActor",), + 0x80C248A8:("DmGm_WaitForObject",), + 0x80C24A00:("DmGm_HandleCouplesMaskCs",), 0x80C24BD0:("DmGm_DoNothing",), 0x80C24BE0:("DmGm_Init",), 0x80C24C34:("DmGm_Destroy",), 0x80C24C44:("DmGm_Update",), 0x80C24CD0:("DmGm_PostLimbDraw",), 0x80C24E4C:("DmGm_TransformLimbDraw",), - 0x80C25000:("func_80C25000",), + 0x80C25000:("DmGm_Draw",), 0x80C25360:("func_80C25360",), 0x80C253D0:("func_80C253D0",), 0x80C255DC:("ObjSwprize_Init",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 2602149cf..fad35390c 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -16414,8 +16414,8 @@ 0x80C1D2C8:("D_80C1D2C8","UNK_TYPE1","",0x1), 0x80C1D2D4:("D_80C1D2D4","UNK_TYPE1","",0x1), 0x80C1D2DC:("D_80C1D2DC","UNK_TYPE1","",0x1), - 0x80C1D2E8:("D_80C1D2E8","UNK_TYPE4","",0x4), - 0x80C1D2F4:("D_80C1D2F4","UNK_TYPE1","",0x1), + 0x80C1D2E8:("sMouthTextures","UNK_TYPE4","",0x4), + 0x80C1D2F4:("sEyeTextures","UNK_TYPE1","",0x1), 0x80C1D310:("jtbl_80C1D310","UNK_PTR","",0x4), 0x80C1DDC0:("Dm_Ah_InitVars","UNK_TYPE1","",0x1), 0x80C1DDE0:("D_80C1DDE0","UNK_PTR","",0x4), @@ -16501,8 +16501,8 @@ 0x80C25218:("D_80C25218","UNK_TYPE1","",0x1), 0x80C25224:("D_80C25224","UNK_TYPE1","",0x1), 0x80C2522C:("D_80C2522C","UNK_TYPE1","",0x1), - 0x80C25238:("D_80C25238","UNK_TYPE4","",0x4), - 0x80C25244:("D_80C25244","UNK_TYPE1","",0x1), + 0x80C25238:("sMouthTextures","UNK_TYPE4","",0x4), + 0x80C25244:("sEyeTextures","UNK_TYPE1","",0x1), 0x80C25260:("jtbl_80C25260","UNK_PTR","",0x4), 0x80C257D0:("Obj_Swprize_InitVars","UNK_TYPE1","",0x1), 0x80C257F0:("D_80C257F0","UNK_TYPE1","",0x1), diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index 35757a022..671407ad1 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -418,7 +418,7 @@ weekEventReg = { (51 << 8) | 0x08: "WEEKEVENTREG_51_08", (51 << 8) | 0x10: "WEEKEVENTREG_51_10", (51 << 8) | 0x20: "WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT", - (51 << 8) | 0x40: "WEEKEVENTREG_51_40", + (51 << 8) | 0x40: "WEEKEVENTREG_COUPLES_MASK_CUTSCENE_FINISHED", (51 << 8) | 0x80: "WEEKEVENTREG_51_80", (52 << 8) | 0x01: "WEEKEVENTREG_ESCORTED_CREMIA", (52 << 8) | 0x02: "WEEKEVENTREG_52_02", diff --git a/undefined_syms.txt b/undefined_syms.txt index 3a630cd3d..ecae60b8c 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -338,21 +338,6 @@ D_06014040 = 0x06014040; D_06002D30 = 0x06002D30; D_06011458 = 0x06011458; -// ovl_Door_Spiral - -D_06000590 = 0x06000590; -D_060007A8 = 0x060007A8; -D_06000EA0 = 0x06000EA0; -D_060012C0 = 0x060012C0; -D_060014C8 = 0x060014C8; -D_06002110 = 0x06002110; -D_06004448 = 0x06004448; -D_060051B8 = 0x060051B8; -D_06006128 = 0x06006128; -D_06009278 = 0x06009278; -D_06012B70 = 0x06012B70; -D_06013EA8 = 0x06013EA8; - // ovl_En_An D_06000308 = 0x06000308;