From 9f4cf0c308b483556a513d6b438041a47b52a71a Mon Sep 17 00:00:00 2001 From: elijah-thomas774 Date: Sat, 18 Apr 2026 14:35:02 -0400 Subject: [PATCH] dAcEremly_c equivalent --- config/SOUE01/rels/d_a_e_remlyNP/symbols.txt | 42 ++-- config/SOUE01/symbols.txt | 22 +- include/d/a/e/d_a_e_remly.h | 15 +- include/d/a/e/d_a_en_base.h | 2 +- include/m/m_angle.h | 2 + include/toBeSorted/event_manager.h | 3 + src/REL/d/a/e/d_a_e_remly.cpp | 216 +++++++++++++++++-- src/REL/d/a/e/d_a_e_sm.cpp | 2 +- 8 files changed, 243 insertions(+), 61 deletions(-) diff --git a/config/SOUE01/rels/d_a_e_remlyNP/symbols.txt b/config/SOUE01/rels/d_a_e_remlyNP/symbols.txt index bf3e6b48..99dce6b4 100644 --- a/config/SOUE01/rels/d_a_e_remlyNP/symbols.txt +++ b/config/SOUE01/rels/d_a_e_remlyNP/symbols.txt @@ -94,29 +94,29 @@ finalizeState_NightJumpAttack__11dAcEremly_cFv = .text:0x00006860; // type:funct initializeState_BirthWait__11dAcEremly_cFv = .text:0x00006870; // type:function size:0x7C executeState_BirthWait__11dAcEremly_cFv = .text:0x000068F0; // type:function size:0x13C finalizeState_BirthWait__11dAcEremly_cFv = .text:0x00006A30; // type:function size:0x4 -fn_177_6A40 = .text:0x00006A40; // type:function size:0xCC +playWink__11dAcEremly_cFv = .text:0x00006A40; // type:function size:0xCC fn_177_6B10__11dAcEremly_cFbRC4mAng = .text:0x00006B10; // type:function size:0x38C -fn_177_6EA0 = .text:0x00006EA0; // type:function size:0x120 -fn_177_6FC0 = .text:0x00006FC0; // type:function size:0x78 -fn_177_7040 = .text:0x00007040; // type:function size:0x2EC -fn_177_7330 = .text:0x00007330; // type:function size:0x90 -fn_177_73C0 = .text:0x000073C0; // type:function size:0x144 -fn_177_7510 = .text:0x00007510; // type:function size:0xC8 -fn_177_75E0 = .text:0x000075E0; // type:function size:0x6C +fn_177_6EA0__11dAcEremly_cFb = .text:0x00006EA0; // type:function size:0x120 +adjustHeadRotation__11dAcEremly_cFb = .text:0x00006FC0; // type:function size:0x78 +fn_177_7040__11dAcEremly_cFUlf = .text:0x00007040; // type:function size:0x2EC +isScary__11dAcEremly_cFv = .text:0x00007330; // type:function size:0x90 +shouldBeScared__11dAcEremly_cFv = .text:0x000073C0; // type:function size:0x144 +fn_177_7510__11dAcEremly_cFf = .text:0x00007510; // type:function size:0xC8 +fn_177_75E0__11dAcEremly_cFv = .text:0x000075E0; // type:function size:0x6C fn_177_7650__11dAcEremly_cCFb = .text:0x00007650; // type:function size:0x164 -fn_177_77C0 = .text:0x000077C0; // type:function size:0x108 -fn_177_78D0 = .text:0x000078D0; // type:function size:0xF4 -fn_177_79D0 = .text:0x000079D0; // type:function size:0x134 -fn_177_7B10 = .text:0x00007B10; // type:function size:0x1B4 -AcERemly__handleRemlitEventsMaybe2 = .text:0x00007CD0; // type:function size:0x844 -fn_177_8520 = .text:0x00008520; // type:function size:0xD8 -fn_177_8600 = .text:0x00008600; // type:function size:0xC0 -fn_177_86C0 = .text:0x000086C0; // type:function size:0x2B4 -fn_177_8980 = .text:0x00008980; // type:function size:0x13C -fn_177_8AC0 = .text:0x00008AC0; // type:function size:0x160 -fn_177_8C20 = .text:0x00008C20; // type:function size:0x36C -fn_177_8F90 = .text:0x00008F90; // type:function size:0x3E0 -fn_177_9370 = .text:0x00009370; // type:function size:0xE8 +fn_177_77C0__11dAcEremly_cFv = .text:0x000077C0; // type:function size:0x108 +fn_177_78D0__11dAcEremly_cFv = .text:0x000078D0; // type:function size:0xF4 +fn_177_79D0__11dAcEremly_cFb = .text:0x000079D0; // type:function size:0x134 +fn_177_7B10__11dAcEremly_cFv = .text:0x00007B10; // type:function size:0x1B4 +nightSleepDemoImpl__11dAcEremly_cFv = .text:0x00007CD0; // type:function size:0x844 +fn_177_8520__11dAcEremly_cFb = .text:0x00008520; // type:function size:0xD8 +fn_177_8600__11dAcEremly_cFv = .text:0x00008600; // type:function size:0xC0 +fn_177_86C0__11dAcEremly_cFv = .text:0x000086C0; // type:function size:0x2B4 +fn_177_8980__11dAcEremly_cFf = .text:0x00008980; // type:function size:0x13C +fn_177_8AC0__11dAcEremly_cFv = .text:0x00008AC0; // type:function size:0x160 +fn_177_8C20__11dAcEremly_cF4mAng = .text:0x00008C20; // type:function size:0x36C +fn_177_8F90__11dAcEremly_cFv = .text:0x00008F90; // type:function size:0x3E0 +fn_177_9370__11dAcEremly_cFf = .text:0x00009370; // type:function size:0xE8 vt_0x88__11dAcEnBase_cFi = .text:0x00009460; // type:function size:0x8 vt_0x84__11dAcEnBase_cFv = .text:0x00009470; // type:function size:0x4 vt_0x80__11dAcEnBase_cFv = .text:0x00009480; // type:function size:0x4 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index faa037fc..f53009d5 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -976,7 +976,7 @@ setupEffect__10dEmitter_cFbUsRC7mVec3_cPC7mAng3_cPC7mVec3_cPC8_GXColorPC8_GXColo setupEffect__10dEmitter_cFbUsRC6mMtx_cPC8_GXColorPC8_GXColor = .text:0x8002A230; // type:function size:0x150 polyAttrsToGroundEffectIdx__14dJEffManager_cFll = .text:0x8002A380; // type:function size:0xCC spawnGroundEffect__14dJEffManager_cFRC7mVec3_cUcUcRC7mVec3_clff = .text:0x8002A450; // type:function size:0x1C0 -fn_8002A610 = .text:0x8002A610; // type:function size:0x678 +spawnHitMarkEffect__14dJEffManager_cFiR8cCcD_ObjPC7mVec3_cb = .text:0x8002A610; // type:function size:0x678 fn_8002AC90 = .text:0x8002AC90; // type:function size:0x460 vt_0x1C0__17daPlayerActBase_cCFv = .text:0x8002B0F0; // type:function size:0x8 init__14dWaterEffect_cFP12dAcObjBase_cfff = .text:0x8002B100; // type:function size:0x14 @@ -1153,7 +1153,7 @@ preDraw__11dAcEnBase_cFv = .text:0x8002F540; // type:function size:0x74 fn_8002F5C0 = .text:0x8002F5C0; // type:function size:0x110 checkBeetleActorReferences__17daPlayerActBase_cFl = .text:0x8002F6D0; // type:function size:0x8 getBeetleActorReferencesSize__17daPlayerActBase_cFv = .text:0x8002F6E0; // type:function size:0x8 -fn_8002F6F0 = .text:0x8002F6F0; // type:function size:0xC +getBombWithinRadius__17daPlayerActBase_cFP9dAcBase_cRC7mVec3_cf = .text:0x8002F6F0; // type:function size:0xC fn_8002F700 = .text:0x8002F700; // type:function size:0x8 fn_8002F710 = .text:0x8002F710; // type:function size:0x110 checkRefArrayAtIndex__17daPlayerActBase_cFv = .text:0x8002F820; // type:function size:0x8 @@ -1172,12 +1172,12 @@ fn_8002FBF0 = .text:0x8002FBF0; // type:function size:0x20 fn_8002FC10 = .text:0x8002FC10; // type:function size:0xF4 someEnemyDamageCollisionStuffMaybe__11dAcEnBase_cFR19dColliderLinkedListPUs = .text:0x8002FD10; // type:function size:0x7C fn_8002FD90 = .text:0x8002FD90; // type:function size:0x4C -fn_8002FDE0 = .text:0x8002FDE0; // type:function size:0x170 +fn_8002FDE0__11dAcEnBase_cFR8cCcD_ObjPUs = .text:0x8002FDE0; // type:function size:0x170 fn_8002FF50 = .text:0x8002FF50; // type:function size:0xD4 -fn_80030030 = .text:0x80030030; // type:function size:0x174 -fn_800301B0 = .text:0x800301B0; // type:function size:0x1D4 +fn_80030030__11dAcEnBase_cFRC7mVec3_cRsRsf = .text:0x80030030; // type:function size:0x174 +fn_800301b0__11dAcEnBase_cFRC7mVec3_c4mAngbf = .text:0x800301B0; // type:function size:0x1D4 fn_80030390 = .text:0x80030390; // type:function size:0x64 -fn_80030400 = .text:0x80030400; // type:function size:0x168 +fn_80030400__11dAcEnBase_cFRQ23m3d5mdl_cUcbUc = .text:0x80030400; // type:function size:0x168 fn_80030570 = .text:0x80030570; // type:function size:0x144 fn_800306C0 = .text:0x800306C0; // type:function size:0x10 fn_800306D0 = .text:0x800306D0; // type:function size:0x24 @@ -1186,7 +1186,7 @@ fn_80030730 = .text:0x80030730; // type:function size:0xB0 fn_800307E0 = .text:0x800307E0; // type:function size:0x34 fn_80030820 = .text:0x80030820; // type:function size:0x14 fn_80030840 = .text:0x80030840; // type:function size:0x13C -fn_80030980 = .text:0x80030980; // type:function size:0x188 +fn_80030980__11dAcEnBase_cFRQ23m3d5mdl_clb = .text:0x80030980; // type:function size:0x188 fn_80030B10 = .text:0x80030B10; // type:function size:0x10C fn_80030c20__11dAcEnBase_cFUlffff = .text:0x80030C20; // type:function size:0x28 fn_80030C50 = .text:0x80030C50; // type:function size:0x8 @@ -3545,7 +3545,7 @@ ActorEventRelated__isInEvent = .text:0x8009D950; // type:function size:0x54 isThisActorInEvent__17ActorEventRelatedFv = .text:0x8009D9B0; // type:function size:0x5C fn_8009DA10 = .text:0x8009DA10; // type:function size:0x30 fn_8009DA40 = .text:0x8009DA40; // type:function size:0x40 -getSkipOnlyEvent = .text:0x8009DA80; // type:function size:0xC +getSkipOnlyEvent__12EventManagerFv = .text:0x8009DA80; // type:function size:0xC EventManager__ctorCont = .text:0x8009DA90; // type:function size:0x11C fn_8009DBB0 = .text:0x8009DBB0; // type:function size:0x128 startEventManager = .text:0x8009DCE0; // type:function size:0x280 @@ -3566,7 +3566,7 @@ fn_8009EEA0 = .text:0x8009EEA0; // type:function size:0x53C alsoSetAsCurrentEvent__12EventManagerFP9dAcBase_cP5EventPv = .text:0x8009F3E0; // type:function size:0x470 fn_8009F850 = .text:0x8009F850; // type:function size:0x134 fn_8009F990__12EventManagerFv = .text:0x8009F990; // type:function size:0x80 -fn_8009FA10 = .text:0x8009FA10; // type:function size:0x8 +fn_8009FA10__12EventManagerFP9dAcBase_cP5EventPv = .text:0x8009FA10; // type:function size:0x8 attachSkipEvent = .text:0x8009FA20; // type:function size:0x1A0 setEvent__12EventManagerFP9dAcBase_cP5EventP9dAcBase_c = .text:0x8009FBC0; // type:function size:0x120 changeOwnEvent__12EventManagerFP9dAcBase_cP9dAcBase_cP5Eventi = .text:0x8009FCE0; // type:function size:0x11C @@ -3594,7 +3594,7 @@ getCurrentEventActorBasedOnGroup = .text:0x800A0890; // type:function size:0x58 fn_800A08F0__12EventManagerFQ27fBase_c12GROUP_TYPE_e = .text:0x800A08F0; // type:function size:0x58 checkButton2HeldForCutscenes = .text:0x800A0950; // type:function size:0x60 canSkipCurrentEvent__12EventManagerFv = .text:0x800A09B0; // type:function size:0x1D0 -fn_800A0B80 = .text:0x800A0B80; // type:function size:0x10 +fn_800A0B80__12EventManagerFv = .text:0x800A0B80; // type:function size:0x10 eventRelatedStateFlags_shift0x11_1__12EventManagerFv = .text:0x800A0B90; // type:function size:0x10 fn_800A0BA0 = .text:0x800A0BA0; // type:function size:0x94 __ct__5EventFPCcUlUlPvPv = .text:0x800A0C40; // type:function size:0xEC @@ -10411,7 +10411,7 @@ GoddessChestsOpenedCounter__init_vtable = .text:0x801947A0; // type:function siz GoddessChestsOpenedCounter__dtor = .text:0x801947C0; // type:function size:0x58 GoddessChestsOpenedCounter__getMaxGoddessChests = .text:0x80194820; // type:function size:0x8 GoddessChestsOpenedCounter__init = .text:0x80194830; // type:function size:0x3C -angleToRotate = .text:0x80194870; // type:function size:0x194 +getForce__11dTgStream_cFRC7mVec3_cR7mVec3_cRC9fLiMgBa_c = .text:0x80194870; // type:function size:0x194 fn_80194A10 = .text:0x80194A10; // type:function size:0xC getStatueType__10dAcOSave_cCFv = .text:0x80194A20; // type:function size:0xC getStatueNameId__10dAcOSave_cCFv = .text:0x80194A30; // type:function size:0x24 diff --git a/include/d/a/e/d_a_e_remly.h b/include/d/a/e/d_a_e_remly.h index f90d622d..7935e323 100644 --- a/include/d/a/e/d_a_e_remly.h +++ b/include/d/a/e/d_a_e_remly.h @@ -100,6 +100,10 @@ public: STATE_FUNC_DECLARE(dAcEremly_c, NightJumpAttack); STATE_FUNC_DECLARE(dAcEremly_c, BirthWait); + bool isState(State_e state) { + return field_0xB60 == (u32)state; + } + STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcEremly_c); STATE_MGR_DEFINE_UTIL_ISSTATE(dAcEremly_c); STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcEremly_c); @@ -167,9 +171,12 @@ private: /* 0xA5C */ dWaterEffect_c mWaterEffect; /* 0xAA4 */ mVec3_c field_0xAA4; - - /* 0xAB0 */ u8 _AB0[0xAF8 - 0xAB0]; - + /* 0xAB0 */ mVec3_c field_0xAB0; + /* 0xABC */ mVec3_c field_0xABC; + /* 0xAC8 */ mVec3_c field_0xAC8; + /* 0xAD4 */ mVec3_c field_0xAD4; + /* 0xAE0 */ mVec3_c field_0xAE0; + /* 0xAEC */ mVec3_c field_0xAEC; /* 0xAF8 */ mVec3_c field_0xAF8; /* 0xB04 */ f32 field_0xB04; @@ -207,7 +214,7 @@ private: /* 0xB60 */ u8 field_0xB60; // Some State representation /* 0xB61 */ u8 field_0xB61; /* 0xB62 */ u8 mSleepDemoPlayedSceneflag; - /* */ u8 _B63; + /* 0xB63 */ u8 field_0xB63; /* 0xB64 */ u8 field_0xB64; /* 0xB65 */ u8 field_0xB65; /* 0xB66 */ u8 field_0xB66; diff --git a/include/d/a/e/d_a_en_base.h b/include/d/a/e/d_a_en_base.h index 77eb12e4..4424cfdf 100644 --- a/include/d/a/e/d_a_en_base.h +++ b/include/d/a/e/d_a_en_base.h @@ -70,7 +70,7 @@ public: // Deals with dealing damage to Enemy // Returns a value 0-13 (similar to mStts rank?) - int fn_8002fde0(cCcD_Obj &mCc, u16 *pTgOut); + int fn_8002FDE0(cCcD_Obj &mCc, u16 *pTgOut); void fn_80030030(const mVec3_c &pos, s16 &, s16 &, f32); // Returns 0-3 based on collision int fn_800301b0(const mVec3_c &pos, mAng ang, bool, f32); diff --git a/include/m/m_angle.h b/include/m/m_angle.h index 4aea9f51..bd3e30f3 100644 --- a/include/m/m_angle.h +++ b/include/m/m_angle.h @@ -68,6 +68,8 @@ public: s32 absDiff(const mAng &other) const { return sLib::absDiff(mVal, other.mVal); } + // NOTE: Try not to use this one... + // May need a better home in future. template static s32 absDiff2(T a, T b) { return abs(a - b); diff --git a/include/toBeSorted/event_manager.h b/include/toBeSorted/event_manager.h index 3f3946ab..929cb869 100644 --- a/include/toBeSorted/event_manager.h +++ b/include/toBeSorted/event_manager.h @@ -20,6 +20,9 @@ public: static bool canSkipCurrentEvent(); static dAcBase_c *getMainActorInEvent(); + static Event *getSkipOnlyEvent(); + static bool fn_800A0B80(); + static void fn_8009FA10(dAcBase_c *actor, Event *event, void *unknown); static void execute(); static EventManager *sInstance; diff --git a/src/REL/d/a/e/d_a_e_remly.cpp b/src/REL/d/a/e/d_a_e_remly.cpp index 8d80ef03..413cc16d 100644 --- a/src/REL/d/a/e/d_a_e_remly.cpp +++ b/src/REL/d/a/e/d_a_e_remly.cpp @@ -17,7 +17,10 @@ #include "d/d_camera.h" #include "d/d_light_env.h" #include "d/d_linkage.h" +#include "d/d_rumble.h" #include "d/d_sc_game.h" +#include "d/d_stage_mgr.h" +#include "d/d_vec.h" #include "d/flag/sceneflag_manager.h" #include "d/flag/storyflag_manager.h" #include "d/snd/d_snd_wzsound.h" @@ -42,6 +45,7 @@ #include "toBeSorted/attention.h" #include "toBeSorted/d_d3d.h" #include "toBeSorted/d_emitter.h" +#include "toBeSorted/event.h" #include "toBeSorted/event_manager.h" SPECIAL_ACTOR_PROFILE(E_REMLY, dAcEremly_c, fProfile::E_REMLY, 0xE1, 0, 3); @@ -348,7 +352,7 @@ int dAcEremly_c::actorExecute() { } if (0 == sLib::calcTimer(&field_0xB4E)) { - s32 damageTypeMaybe = fn_8002fde0(mSph, nullptr); + s32 damageTypeMaybe = fn_8002FDE0(mSph, nullptr); switch (damageTypeMaybe) { case 7: { if (isState(StateID_Fly) && field_0xB60 != 20) { @@ -569,6 +573,11 @@ int dAcEremly_c::actorExecute() { return SUCCEEDED; } +/// Ugh +inline f32 getValue0() { + s32 _weird_zero = 0; + return _weird_zero + 70.f; +} int dAcEremly_c::draw() { s32 _weird_zero = 0; @@ -588,7 +597,7 @@ int dAcEremly_c::draw() { drawModelType1(&mdl); // elp - static mQuat_c shadow(0.f, 70.f + _weird_zero, 0.f, 290.f + _weird_zero); + static mQuat_c shadow(0.f, getValue0(), 0.f, _weird_zero + 290.f); fn_8002edb0(mShadow, mdl, &shadow, -1, -1, mPosition.y - mAcch.GetGroundH()); return SUCCEEDED; @@ -911,8 +920,8 @@ void dAcEremly_c::executeState_EscapeDash() { } if (field_0xB6B != 0) { - mVec3_c v(getPosition()); - sLib::addCalcScaledDiff(&mSpeed, 30.f, 0.7f, 3.f); + mVec3_c v; + sLib::addCalcScaledDiff(&mSpeed, (v = mPosition, 30.f), 0.7f, 3.f); if (fn_177_8C20(mRotation.y)) { changeState(StateID_Scared); @@ -2233,7 +2242,7 @@ bool dAcEremly_c::fn_177_7650(bool comparePlayer) const { // NONMATCHING void dAcEremly_c::fn_177_77C0() { const dAcPy_c *pPlayer = dAcPy_c::GetLink(); - mAng a0 = getXZAngleToPlayer() + -0x7800; + s32 a0 = getXZAngleToPlayer().mVal + -(s32)(0x7800); mAng a1 = getXZAngleToPlayer() + 0x7800; field_0xB32 = getXZAngleToPlayer() + 0x8000; @@ -2304,7 +2313,174 @@ bool dAcEremly_c::fn_177_7B10() { return false; } -void dAcEremly_c::nightSleepDemoImpl() {} +void dAcEremly_c::nightSleepDemoImpl() { + s32 _weird_zero = 0; + + if (mSleepDemoPlayedSceneflag == 0xFF || + SceneflagManager::sInstance->checkBoolFlag(mRoomID, mSleepDemoPlayedSceneflag)) { + return; + } + + dAcPy_c *pPlayer = dAcPy_c::GetLinkM(); + dCamera_c *pCamera = dScGame_c::getCamera(); + + f32 x, y, z; + mVec3_c v, v2; + mMtx_c m, m2; + mAng a = mAngle.y - 0x4000; + + switch (field_0xB63) { + case 0: { + if (!isWithinPlayerRadius(1500.f)) { + break; + } + field_0xB63++; + } // fallthrough + case 1: { + { + Event e("dAcEremly_c_nightRemly", 100, Event::makeEventFlag(1, 0x100001), nullptr, nullptr); + EventManager::alsoSetAsCurrentEvent(this, &e, nullptr); + } + if (!EventManager::isInEvent(this, "dAcEremly_c_nightRemly")) { + break; + } + mStartingRot = mRotation; + EventManager::fn_8009FA10(this, EventManager::getSkipOnlyEvent(), nullptr); + pPlayer->vt_0x2AC(); + field_0xB63++; + } // fallthrough + case 2: { + mMdl.setAnm("RemlyDemo", m3d::PLAY_MODE_4, 0.f); + field_0xB60 = 26; + + z = _weird_zero + -160.f; + y = _weird_zero + 80.f; + x = _weird_zero + 410.f; + v.set(x, y, z); + m.YrotS(a + 0x8000); + m.multVec(v, field_0xAB0); + + field_0xAB0 += mStartingPos; + field_0xAC8 = field_0xAB0; + field_0xAE0 = field_0xAB0; + + x = _weird_zero + 30.f; + y = _weird_zero + 30.f; + z = _weird_zero + 30.f; + v.set(z, y, x); + + m.YrotS(a); + m.multVec(v, field_0xABC); + + field_0xABC += mStartingPos; + field_0xAD4 = field_0xABC; + field_0xAEC = field_0xABC; + + x = _weird_zero + -370.f; + y = 0.f; + z = 250.f; + v.set(x, y, z); + + m.YrotS(a); + m.multVec(v, v2); + v2 += mStartingPos; + + mAng3_c rot(0, getXZAngleToPlayer() + 0x8000, 0); + dAcPy_c::GetLinkM()->setPosRot(&v2, &rot, true, 0, 0); + dAcPy_c::GetLinkM()->triggerMoveEventMaybe(13, 1, 0, 0, 0, 0, 0); + field_0xB63++; + } // fallthrough + case 3: { + if (sLib::calcTimer(&field_0xB48)) { + break; + } + field_0xB48 = 60; + field_0xB63++; + } // fallthrough + case 4: { + if (sLib::calcTimer(&field_0xB48)) { + if (field_0xB48 == 58) { + z = _weird_zero + 170.f; + x = _weird_zero + -120.f; + v.set(x, 0.f, z); + m.YrotS(a); + m.multVec(v, v2); + v2 += mStartingPos; + dAcPy_c::GetLinkM()->triggerMoveEventMaybe(2, 0, 0, &v2, 0, 0, 0); + } + break; + } + field_0xB48 = 100; + field_0xB63++; + } // fallthrough + case 5: { + a = cLib::targetAngleY(field_0xAD4, field_0xAC8); + m.YrotS(a); + z = _weird_zero + -330.f; + y = _weird_zero; + x = _weird_zero; + v.set(x, y, z); + m.multVec(v, field_0xAE0); + field_0xAE0 += field_0xAC8; + if (sLib::calcTimer(&field_0xB48)) { + break; + } + field_0xB63++; + } // fallthrough + case 6: { + if (mMdl.getAnm().checkFrame(320.f)) { + mMtx_c m3, m4; + s32 scale = 95; + m2.transS(0.5f, 0.5f, 0.f); + y = scale / 100.f; + x = scale / 100.f; + m3.scaleS(x, y, 0.f); + m2 += m3; + m4.transS(-0.5f, -0.5f, 0.f); + m2 += m4; + dStageMgr_c::GetInstance()->procfn_800192F0(150, m2, 100); + dRumble_c::start(dRumble_c::sRumblePreset1, 1); + } + if (mMdl.getAnm().isStop()) { + mMdl.setRate(0.f); + field_0xB63 = 10; + } + break; + } + case 10: { + mSph.OnTgSet(); + mSph.OnCoSet(); + EventManager::finishEvent(this, nullptr); + dScGame_c::getCamera()->fn_8019EA70(true); + field_0xB48 = 3; + field_0xB63 = 11; + break; + } + case 11: { + if (0 == sLib::calcTimer(&field_0xB48)) { + changeState(StateID_NightWait); + mMdl.setAnm("RemlyWaitStandNight", m3d::PLAY_MODE_4, 0.f); + mAngle.y = mStartingRot.y + -30000; + mRotation.y = mAngle.y; + if (mSleepDemoPlayedSceneflag != 0xFF) { + SceneflagManager::sInstance->setFlag(mRoomID, mSleepDemoPlayedSceneflag); + } + } + } + } + + if (field_0xB63 == 5) { + cLib::addCalcPos2(&field_0xAB0, field_0xAE0, 0.3f, 10.f); + } + if (field_0xB63 == 2 || field_0xB63 == 3 || field_0xB63 == 4 || field_0xB63 == 5 || field_0xB63 == 6 || + field_0xB63 == 7 || field_0xB63 == 8 || field_0xB63 == 9) { + pCamera->setEventCamView(field_0xABC, field_0xAB0, 50.f, 0.f); + if (EventManager::fn_800A0B80()) { + mMdl.setRate(0.f); + field_0xB63 = 10; + } + } +} void dAcEremly_c::fn_177_8520(bool b) { s32 _weird_zero = 0; @@ -2371,21 +2547,15 @@ bool dAcEremly_c::fn_177_86C0() { return false; } -// TODO - Have its own location -inline void offsetWithAngle(mVec3_c &v, const mAng &a, f32 f) { - v.x += f * a.sin(); - v.z += f * a.cos(); -} - bool dAcEremly_c::fn_177_8980(f32 f) { dBgS_ObjGndChk gndChk; mVec3_c v(mPosition); v.y += 100.f; - offsetWithAngle(v, mRotation.y, f); + getXZCirclePoint(v, mRotation.y, f); - gndChk.SetPos(v); + gndChk.SetPos(&v); f32 cross = dBgS::GetInstance()->GroundCross(&gndChk); if (cross < mPosition.y - 1000.f || cross == -1e9f || dBgS::GetInstance()->GetGroundCode(gndChk) == 4) { @@ -2396,14 +2566,14 @@ bool dAcEremly_c::fn_177_8980(f32 f) { // NONMATCHING bool dAcEremly_c::fn_177_8AC0() { - if ((field_0xB60 != STATE_16) && (field_0xB60 != STATE_17) && (field_0xB60 != STATE_13) && - (field_0xB60 != STATE_14) && (field_0xB60 != STATE_15) && (field_0xB60 != STATE_5) && - (field_0xB60 != STATE_21) && (field_0xB60 != STATE_6) && (field_0xB60 != STATE_8) && (field_0xB60 != STATE_7) && - (field_0xB60 != STATE_10) && (field_0xB60 != STATE_22) && (field_0xB60 != STATE_23) && - (field_0xB60 != STATE_24)) { - return false; - } else { + bool b = (isState(STATE_16)) || (isState(STATE_17)) || (isState(STATE_13)) || (isState(STATE_14)) || + (isState(STATE_15)) || (isState(STATE_5)) || (isState(STATE_21)) || (isState(STATE_6)) || + (isState(STATE_8)) || (isState(STATE_7)) || (isState(STATE_10)) || (isState(STATE_22)) || + (isState(STATE_23)) || (isState(STATE_24)); + if (b) { return true; + } else { + return false; } } @@ -2420,7 +2590,7 @@ bool dAcEremly_c::fn_177_8C20(mAng a) { if (field_0xB6C || field_0xB6A || isState(StateID_Escape) || isState(StateID_EscapeDash)) { mVec3_c v(mPosition); f32 f = 150.f + _weird_zero; - offsetWithAngle(v, mAngle.y, f); + getXZCirclePoint(v, mAngle.y, f); if (dBgS_WtrChk::CheckPos(&v, true, 600.f + _weird_zero, -100.f + _weird_zero)) { if (mPosition.y < dBgS_WtrChk::GetWaterHeight() && mAcch.GetGroundH() < dBgS_WtrChk::GetWaterHeight()) { return true; @@ -2510,7 +2680,7 @@ bool dAcEremly_c::fn_177_9370(f32 f) { const dAcPy_c *pPlayer = dAcPy_c::GetLink(); if (!pPlayer->isRecovering() && pPlayer->mPosition.absXZTo(mStartingPos) < field_0xB08 && - std::abs(mPosition.y - pPlayer->mPosition.y) < f + 2000.f) { + std::abs(mPosition.y - pPlayer->mPosition.y) < f + 200.f) { return true; } diff --git a/src/REL/d/a/e/d_a_e_sm.cpp b/src/REL/d/a/e/d_a_e_sm.cpp index 195289f9..fec93ee2 100644 --- a/src/REL/d/a/e/d_a_e_sm.cpp +++ b/src/REL/d/a/e/d_a_e_sm.cpp @@ -512,7 +512,7 @@ int dAcEsm_c::actorExecute() { mHitPos.set(0.f, 0.f, 0.f); if (0 == sLib::calcTimer(&mDamageTimer)) { - field_0xB94 = fn_8002fde0(mSph, nullptr); + field_0xB94 = fn_8002FDE0(mSph, nullptr); if (field_0xB94 != 0) { if (mSph.ChkTgHit()) { if (field_0xB94 == 7) {