From df8f49f422456c659c2101e00eac5132ab09accc Mon Sep 17 00:00:00 2001 From: Carco_21 <144170194+carter-ktb21@users.noreply.github.com> Date: Tue, 6 May 2025 20:30:19 -0400 Subject: [PATCH] More d_ev_camera work (#2422) * Work on fixedFrameEvCamera * Work on stokerEvCamera * Small work * Cleanup and started on transEvCamera * Work on watchActorEvCamera * Work on gameOverEvCamera and other cleanup * Implemented mWork pointer logic where needed * Small work on useItem0EvCamera * Work on bSplineEvCamera * work on twoActor0EvCamera function and cleanup * Work on transEvCamera * Cleanup * Work on possessedEvCamera * Work on fixedFramesEvCamera & started on digHoleEvCamera * All functions have been at least somewhat worked on * Further general work and cleanup --- include/d/actor/d_a_midna.h | 2 +- include/d/d_camera.h | 163 ++- src/d/d_ev_camera.cpp | 2350 +++++++++++++++++++++-------------- 3 files changed, 1528 insertions(+), 987 deletions(-) diff --git a/include/d/actor/d_a_midna.h b/include/d/actor/d_a_midna.h index 1fbd049e340..98f85830a44 100644 --- a/include/d/actor/d_a_midna.h +++ b/include/d/actor/d_a_midna.h @@ -281,7 +281,7 @@ public: BOOL checkNoHairScale() const { return checkStateFlg0(FLG0_NO_HAIR_SCALE); } BOOL checkNpcNear() { return checkStateFlg0(FLG0_NPC_NEAR); } BOOL checkNpcFar() { return checkStateFlg0(FLG0_NPC_FAR); } - BOOL checkNoDraw() const { return checkStateFlg0(FLG0_NO_DRAW); } + u32 checkNoDraw() const { return checkStateFlg0(FLG0_NO_DRAW); } BOOL checkNoInput() const { return checkStateFlg0(FLG0_NO_INPUT); } BOOL checkWolfNoPos() const { return checkStateFlg0(FLG0_WOLF_NO_POS); } int checkMetamorphoseEnable() { return (this->*mpFunc)(); } diff --git a/include/d/d_camera.h b/include/d/d_camera.h index 4618c0ab5a9..4f9ddfec5a4 100644 --- a/include/d/d_camera.h +++ b/include/d/d_camera.h @@ -752,11 +752,11 @@ public: /* 0x0C */ u8 field_0xc[0x10 - 0xc]; /* 0x10 */ cXyz field_0x10; /* 0x1C */ f32 mFovy; - /* 0x20 */ f32 field_0x20; + /* 0x20 */ f32 mBank; /* 0x24 */ fopAc_ac_c* mRelActor; - /* 0x28 */ char field_0x28; + /* 0x28 */ char mRelUseMask; /* 0x29 */ char field_0x29; - /* 0x2C */ int field_0x2c; + /* 0x2C */ int mTimer; /* 0x30 */ bool field_0x30; /* 0x34 */ cXyz mBasePos; /* 0x40 */ char field_0x40; @@ -772,7 +772,12 @@ public: /* 0x6C */ int field_0x6c; } event; struct { - /* 0x00 */ u8 field_0x0[0x4 - 0x0]; + /* 0x00 */ + } fixedFrame; + struct { + /* 0x00 */ bool field_0x0; + /* 0x01 */ bool field_0x1; + /* 0x02 */ u8 field_0x2[2]; /* 0x04 */ cXyz field_0x4; /* 0x10 */ cXyz field_0x10; /* 0x1C */ f32 field_0x1c; @@ -787,20 +792,21 @@ public: /* 0x40 */ u32 field_0x40; } stoker; struct { - /* 0x00 */ u8 field_0x0[0x10 - 0x0]; + /* 0x00 */ u8 field_0x0[0x4 - 0x0]; + /* 0x04 */ cXyz field_0x4; /* 0x10 */ cXyz field_0x10; - /* 0x1C */ cXyz field_0x1c; - /* 0x28 */ cXyz field_0x28; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ fopAc_ac_c* field_0x3c; + /* 0x1C */ cXyz mEye; + /* 0x28 */ cXyz mCenter; + /* 0x34 */ f32 mFovy; + /* 0x38 */ f32 mBank; + /* 0x3C */ fopAc_ac_c* mRelActor; /* 0x40 */ fopAc_ac_c* field_0x40; - /* 0x44 */ int field_0x44; - /* 0x48 */ int field_0x48; - /* 0x4C */ f32 field_0x4c; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; + /* 0x44 */ int mTimer; + /* 0x48 */ int mTransType; + /* 0x4C */ f32 mRoll; + /* 0x50 */ f32 mRadiusAdd; + /* 0x54 */ f32 mLatitude; + /* 0x58 */ f32 mCtrCus; } rolling; struct { /* 0x00 */ u8 field_0x0[0x4 - 0x0]; @@ -816,7 +822,7 @@ public: /* 0x40 */ fopAc_ac_c* field_0x40; /* 0x44 */ fpc_ProcID field_0x44; /* 0x48 */ u8 field_0x48[0x4c - 0x48]; - /* 0x4C */ s32 field_0x4c; + /* 0x4C */ u32 field_0x4c; } fixedPos; struct trans { /* 0x00 */ cXyz mStartEye; @@ -833,6 +839,7 @@ public: /* 0x49 */ char field_0x49; /* 0x4A */ char field_0x4a; /* 0x4B */ char field_0x4b; + /* 0x4C */ u8 field_0x4c[4]; /* 0x50 */ int mTimer; /* 0x54 */ int mTransType; /* 0x58 */ f32 mCushion; @@ -842,25 +849,25 @@ public: /* 0x6C */ int mBSpCurve; } trans; struct actor { - /* 0x00 */ cXyz field_0x0; + /* 0x00 */ cXyz mCtrGap; /* 0x0C */ cXyz field_0xc; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ int field_0x1c; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ int field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ fopAc_ac_c* field_0x34; - /* 0x38 */ fpc_ProcID field_0x38; + /* 0x18 */ f32 mCushion; + /* 0x1C */ int mNearTimer; + /* 0x20 */ f32 mNearDist; + /* 0x24 */ int mFarTimer; + /* 0x28 */ f32 mFarDist; + /* 0x2C */ f32 mZoomDist; + /* 0x30 */ f32 mZoomVAngle; + /* 0x34 */ fopAc_ac_c* mTargetActor; + /* 0x38 */ fpc_ProcID mTargetActorID; /* 0x3C */ cSGlobe field_0x3c; /* 0x44 */ int field_0x44; /* 0x48 */ u8 field_0x48[4]; /* 0x4C */ cSGlobe field_0x4c; /* 0x54 */ int field_0x54; - /* 0x58 */ int field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ f32 field_0x60; + /* 0x58 */ int mBlure; + /* 0x5C */ f32 mFrontAngle; + /* 0x60 */ f32 mFovy; /* 0x64 */ u8 field_0x64[4]; /* 0x68 */ int field_0x68; } actor; @@ -921,19 +928,64 @@ public: /* 0x44 */ f32 field_0x44; /* 0x48 */ f32 field_0x48; } load; - struct item0 { + struct item { /* 0x00 */ int field_0x0; /* 0x04 */ int field_0x4; - /* 0x08 */ int field_0x8; + /* 0x08 */ int mType; /* 0x0C */ cXyz field_0xc; /* 0x18 */ f32 field_0x18; /* 0x1C */ int field_0x1c; /* 0x20 */ int field_0x20; /* 0x24 */ cSGlobe field_0x24; + /* 0x2C */ cXyz field_0x2c; + /* 0x38 */ cXyz field_0x38; /* 0x44 */ cXyz field_0x44; /* 0x50 */ cXyz field_0x50; /* 0x5C */ f32 field_0x5c; - } item0; + } item; + struct getItem { + /* 0x000 */ u8 field_0x0[4]; + /* 0x004 */ int mTimer; + /* 0x008 */ int field_0x8; + /* 0x00C */ fopAc_ac_c* mRelActor; + /* 0x010 */ fpc_ProcID mRelActorID; + /* 0x014 */ f32* mCurvePoints; + /* 0x018 */ int field_0x18; + /* 0x01C */ cXyz mStartCenter; + /* 0x028 */ cXyz mStartEye; + /* 0x034 */ u8 field_0x34[8]; + /* 0x03C */ cSGlobe field_0x3c; + /* 0x044 */ cXyz field_0x44; + /* 0x050 */ cXyz field_0x50; + /* 0x100 */ cSGlobe field_0x100; + } getItem; + struct possessed { + /* 0x00 */ int field_0x0; + /* 0x04 */ int mType; + /* 0x08 */ int mTimer; + /* 0x0C */ int field_0xc; + /* 0x10 */ f32 mRadius; + /* 0x14 */ cSAngle mLatitude; + /* 0x16 */ cSAngle mLongitude; + /* 0x18 */ f32 mFovy; + /* 0x1C */ f32 mCushion; + /* 0x20 */ int mBlure; + /* 0x24 */ fopAc_ac_c* mTargetActor; + /* 0x28 */ cSGlobe field_0x28; + } possessed; + struct { + /* 0x00 */ bool field_0x0; + /* 0x04 */ cXyz field_0x4; + /* 0x10 */ cXyz field_0x10; + /* 0x1C */ cXyz* field_0x1c[2]; + /* 0x24 */ f32* field_0x24[2]; + /* 0x2C */ fopAc_ac_c* mRelActor; + /* 0x30 */ char mRelUseMask; + /* 0x31 */ char field_0x31; + /* 0x34 */ int mTimer; + /* 0x38 */ int field_0x38; + /* 0x3C */ int mChoice; + } fixedFrames; struct bSpline { /* 0x00 */ cXyz* mCenters; /* 0x04 */ cXyz* mEyes; @@ -969,6 +1021,51 @@ public: /* 0x58 */ cSAngle field_0x58; /* 0x5A */ cSAngle field_0x5a; } twoActor0; + struct digHole { + /* 0x00 */ int field_0x0; + /* 0x04 */ int mType; + /* 0x08 */ int field_0x8; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ s8 field_0x10; + /* 0x11 */ u8 field_0x11[3]; + /* 0x14 */ cXyz field_0x14; + /* 0x20 */ cXyz field_0x20; + } digHole; + struct hintTalk { + /* 0x00 */ fopAc_ac_c* mTeacher; + /* 0x04 */ fopAc_ac_c* mStudent; + /* 0x08 */ cXyz field_0x8; + /* 0x14 */ cXyz field_0x14; + /* 0x20 */ cSGlobe mDirection; + /* 0x28 */ cSGlobe field_0x28; + /* 0x30 */ f32 mRadius; + /* 0x34 */ f32 mFovy; + /* 0x38 */ f32 mCtrGapY; + /* 0x3C */ int mTimer; + /* 0x40 */ cXyz field_0x40; + } hintTalk; + struct bspTrans { + /* 0x00 */ int mTimer; + /* 0x04 */ f32* mBase; + /* 0x08 */ f32* mSet1; + /* 0x0C */ d2DBSplinePath mSplinePath1; + /* 0x40 */ f32* mSet2; + /* 0x44 */ d2DBSplinePath mSplinePath2; + /* 0x78 */ cXyz field_0x78; + /* 0x84 */ cXyz field_0x84; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ cXyz field_0x94; + /* 0xA0 */ cXyz field_0xa0; + /* 0xAC */ f32 field_0xac; + /* 0xB0 */ fopAc_ac_c* mRelActor; + /* 0xB4 */ fpc_ProcID mRelActorID; + /* 0xB8 */ char mRelUseMask; + /* 0xB9 */ char field_0xb9; + /* 0xBC */ f32 mCushion; + /* 0xC0 */ u32 field_0xc0[6]; + + + } bspTrans; struct { u8 field_0x0[0x100]; } bytes; diff --git a/src/d/d_ev_camera.cpp b/src/d/d_ev_camera.cpp index bdfc42e0881..785d5fce039 100644 --- a/src/d/d_ev_camera.cpp +++ b/src/d/d_ev_camera.cpp @@ -9,13 +9,17 @@ #include "d/d_demo.h" #include "m_Do/m_Do_controller_pad.h" #include "d/d_camera.h" +#include "d/d_camera.h" #include "d/actor/d_a_midna.h" #include "d/actor/d_a_player.h" +#include "m_Do/m_Do_lib.h" +#include "d/d_drawlist.h" +#include "d/actor/d_a_alink.h" extern "C" extern u8 struct_80450F88[8]; -/* 800889F8-80088A7C 083338 0084+00 1/1 0/0 0/0 .text isStageEvent__25@unnamed@d_ev_camera_cpp@Fi */ namespace { + /* 800889F8-80088A7C 083338 0084+00 1/1 0/0 0/0 .text isStageEvent__25@unnamed@d_ev_camera_cpp@Fi */ static bool isStageEvent(int param_0) { dStage_MapEventInfo_c* info = dComIfGp_getStage()->getMapEventInfo(); if (info != NULL) { @@ -25,7 +29,6 @@ namespace { } } } - return false; } } // namespace @@ -519,42 +522,43 @@ namespace { /* 800897E8-8008A510 084128 0D28+00 0/0 1/0 0/0 .text fixedFrameEvCamera__9dCamera_cFv */ bool dCamera_c::fixedFrameEvCamera() { + // FAKEMATCH??? if (mCurCamStyleTimer == 0) { cXyz sp38, sp44; getEvXyzData(&sp44, "Eye", mEye); getEvXyzData(&sp38, "Center", mCenter); getEvXyzData(&mWork.event.mBasePos, "BasePos", cXyz::Zero); getEvFloatData(&mWork.event.mFovy, "Fovy", mFovy); - mWork.event.field_0x30 = getEvFloatData(&mWork.event.field_0x20, "Bank", 0.0f); - mWork.event.field_0x0 = getEvIntData(&mWork.event.field_0x2c, "Timer", -1); - getEvStringData(&mWork.event.field_0x28, "RelUseMask", "oo"); + mWork.event.field_0x30 = getEvFloatData(&mWork.event.mBank, "Bank", 0.0f); + mWork.event.field_0x0 = getEvIntData(&mWork.event.mTimer, "Timer", -1); + getEvStringData(&mWork.event.mRelUseMask, "RelUseMask", "oo"); #ifdef DEBUG - if (strlen(&mWork.event.field_0x28) != 2) { + if (strlen(&mWork.event.mRelUseMask) != 2) { OSReport("camera: event: bad length -> xx\n"); - strcpy(&mWork.event.field_0x28, "xx"); + strcpy(&mWork.event.mRelUseMask, "xx"); JUTAssertion::showAssert(JUTAssertion::getSDevice(), "d_ev_camera.cpp", 0x32e, "0"); OSPanic("d_ev_camera.cpp", 0x32e, "Halt"); } #endif mWork.event.mRelActor = getEvActor("RelActor"); - if (mWork.event.mRelActor && mWork.event.field_0x28 == 111) { + if (mWork.event.mRelActor && mWork.event.mRelUseMask == 111) { mWork.event.field_0x10 = relationalPos(mWork.event.mRelActor, &sp38); - } else if (mWork.event.mRelActor && mWork.event.field_0x28 == 119) { + } else if (mWork.event.mRelActor && mWork.event.mRelUseMask == 119) { if (mIsWolf == 1) { sp38 += WolfAdditionVec; } mWork.event.field_0x10 = relationalPos(mWork.event.mRelActor, &sp38); - } else if (mWork.event.mRelActor && mWork.event.field_0x28 == 87) { + } else if (mWork.event.mRelActor && mWork.event.mRelUseMask == 87) { if (mIsWolf == 1) { sp38 -= WolfAdditionVec; } mWork.event.field_0x10 = relationalPos(mWork.event.mRelActor, &sp38); - } else if (mWork.event.field_0x28 == 110) { + } else if (mWork.event.mRelUseMask == 110) { cSGlobe sg28 = mEye - positionOf(mWork.event.mRelActor); cSAngle sa260 = sg28.U() - directionOf(mWork.event.mRelActor); if (sa260.Val() < cSAngle::_0) { @@ -562,7 +566,7 @@ bool dCamera_c::fixedFrameEvCamera() { } mWork.event.field_0x10 = relationalPos(mWork.event.mRelActor, &sp38); - } else if (mWork.event.field_0x28 == 112) { + } else if (mWork.event.mRelUseMask == 112) { cXyz mRelPos = relationalPos(mWork.event.mRelActor, &sp38); f32 fVar1 = cXyz(mRelPos - positionOf(mpPlayerActor)).abs(); sp38.x = -sp38.x; @@ -573,7 +577,7 @@ bool dCamera_c::fixedFrameEvCamera() { } mWork.event.field_0x10 = relationalPos(mWork.event.mRelActor, &sp38); - } else if (mWork.event.field_0x28 == 116) { + } else if (mWork.event.mRelUseMask == 116) { mWork.event.field_0x10 = attentionPos(mWork.event.mRelActor) + sp38; } else { @@ -645,11 +649,11 @@ bool dCamera_c::fixedFrameEvCamera() { field_0x5c.mFovy = mWork.event.mFovy; if (mWork.event.field_0x30) { - field_0x5c.mBank = cAngle::d2s(mWork.event.field_0x20); + field_0x5c.mBank = cAngle::d2s(mWork.event.mBank); setFlag(0x400); } - if (mWork.event.field_0x0 && mCurCamStyleTimer < mWork.event.field_0x2c) { + if (mWork.event.field_0x0 && mCurCamStyleTimer < mWork.event.mTimer) { return 0; } @@ -659,6 +663,7 @@ bool dCamera_c::fixedFrameEvCamera() { /* 8008A510-8008A974 084E50 0464+00 0/0 1/0 0/0 .text stokerEvCamera__9dCamera_cFv */ bool dCamera_c::stokerEvCamera() { + // FAKEMATCH??? if (mCurCamStyleTimer == 0) { cXyz unused_0, unused_1; getEvXyzData(&mWork.stoker.field_0x4, "EyeGap", cXyz::Zero); @@ -667,8 +672,8 @@ bool dCamera_c::stokerEvCamera() { getEvFloatData(&mWork.stoker.field_0x1c, "CtrCus", 1.0f); getEvFloatData(&mWork.stoker.field_0x24, "Fovy", mFovy); - mWork.event.field_0x1 = getEvFloatData(&mWork.stoker.field_0x28, "Bank", 0.0f); - mWork.event.field_0x0 = getEvIntData(&mWork.talk.field_0x40, "Timer", -1); + mWork.stoker.field_0x1 = getEvFloatData(&mWork.stoker.field_0x28, "Bank", 0.0f); + mWork.stoker.field_0x0 = getEvIntData(&mWork.talk.field_0x40, "Timer", -1); mWork.stoker.field_0x2c = getEvActor("Stoker", "@STARTER"); mWork.stoker.field_0x30 = getEvActor("Target", "@PLAYER"); @@ -704,7 +709,6 @@ bool dCamera_c::stokerEvCamera() { } cStack_d0.Val(mWork.talk.field_0x4); - //cSAngle acStack_e0; cStack_d0.V(cStack_d0.V() + mWork.stoker.field_0x2c->shape_angle.x); cStack_d0.U(cStack_d0.U() + mWork.stoker.field_0x2c->shape_angle.y); cXyz tmp_vec = attentionPos(mWork.stoker.field_0x2c) + cStack_d0.Xyz(); @@ -714,13 +718,13 @@ bool dCamera_c::stokerEvCamera() { field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); field_0x5c.mFovy = mWork.stoker.field_0x24; - if (mWork.event.field_0x1) { + if (mWork.stoker.field_0x1) { cAngle this_00; - field_0x5c.mBank = this_00.d2s(mWork.chase.field_0x28); + field_0x5c.mBank = this_00.d2s(mWork.stoker.field_0x28); setFlag(0x400); } - if (mWork.event.field_0x0 && mCurCamStyleTimer < mWork.stoker.field_0x40) { + if (mWork.stoker.field_0x0 && mCurCamStyleTimer < mWork.stoker.field_0x40) { return 0; } @@ -729,141 +733,140 @@ bool dCamera_c::stokerEvCamera() { /* 8008A974-8008B9B0 0852B4 103C+00 0/0 1/0 0/0 .text rollingEvCamera__9dCamera_cFv */ bool dCamera_c::rollingEvCamera() { - // FAKEMATCH??? - HARD TO TELL + // FAKEMATCH??? if (mCurCamStyleTimer == 0) { - getEvXyzData(&mWork.rolling.field_0x1c, "Eye", mEye); - getEvXyzData(&mWork.rolling.field_0x28, "Center", mCenter); - getEvFloatData(&mWork.rolling.field_0x58, "CtrCus", 1.0f); - getEvIntData(&mWork.rolling.field_0x48, "TransType", 0); - getEvFloatData(&mWork.rolling.field_0x34, "Fovy", mFovy); - mWork.event.field_0x1 = getEvFloatData(&mWork.rolling.field_0x38, "Bank", 0.0f); - getEvFloatData(&mWork.rolling.field_0x4c, "Roll", 2.0f); - getEvFloatData(&mWork.rolling.field_0x50, "RadiusAdd", 0.0f); - cSGlobe cStack_2ac = mWork.rolling.field_0x1c - mWork.rolling.field_0x28; - getEvFloatData(&mWork.rolling.field_0x54, "Latitude", cStack_2ac.V().Degree()); - mWork.event.field_0x0 = getEvIntData(&mWork.rolling.field_0x44, "Timer", -1); + getEvXyzData(&mWork.rolling.mEye, "Eye", mEye); + getEvXyzData(&mWork.rolling.mCenter, "Center", mCenter); + getEvFloatData(&mWork.rolling.mCtrCus, "CtrCus", 1.0f); + getEvIntData(&mWork.rolling.mTransType, "TransType", 0); + getEvFloatData(&mWork.rolling.mFovy, "Fovy", mFovy); + mWork.event.field_0x1 = getEvFloatData(&mWork.rolling.mBank, "Bank", 0.0f); + getEvFloatData(&mWork.rolling.mRoll, "Roll", 2.0f); + getEvFloatData(&mWork.rolling.mRadiusAdd, "RadiusAdd", 0.0f); + cSGlobe cStack_2ac = mWork.rolling.mEye - mWork.rolling.mCenter; + getEvFloatData(&mWork.rolling.mLatitude, "Latitude", cStack_2ac.V().Degree()); + mWork.event.field_0x0 = getEvIntData(&mWork.rolling.mTimer, "Timer", -1); getEvStringData(&mWork.event.field_0x40, "RelUseMask", "oo"); - mWork.rolling.field_0x3c = getEvActor("RelActor"); - if (mWork.rolling.field_0x3c) { + mWork.rolling.mRelActor = getEvActor("RelActor"); + if (mWork.rolling.mRelActor) { if (mWork.event.field_0x40 == 111) { - mWork.rolling.field_0x10 = relationalPos(mWork.rolling.field_0x3c, &mWork.rolling.field_0x28); + mWork.rolling.field_0x10 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mCenter); } else if (mWork.event.field_0x40 == 110) { - cSGlobe cStack_2b4 = mEye - positionOf(mWork.rolling.field_0x3c); - cSAngle acStack_2f0 = cStack_2b4.U() - directionOf(mWork.rolling.field_0x3c); + cSGlobe cStack_2b4 = mEye - positionOf(mWork.rolling.mRelActor); + cSAngle acStack_2f0 = cStack_2b4.U() - directionOf(mWork.rolling.mRelActor); if (acStack_2f0 < cSAngle::_0) { - mWork.chase.field_0x28 = -mWork.chase.field_0x28; + mWork.rolling.mCenter.x = -mWork.rolling.mCenter.x; } - mWork.rolling.field_0x10 = relationalPos(mWork.rolling.field_0x3c, &mWork.rolling.field_0x28); + mWork.rolling.field_0x10 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mCenter); } else if (mWork.event.field_0x40 == 112) { - cXyz sp2E0 = relationalPos(mWork.rolling.field_0x3c, &mWork.rolling.field_0x28); + cXyz sp2E0 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mCenter); f32 fVar1 = cXyz(sp2E0 - positionOf(mpPlayerActor)).abs(); - mWork.chase.field_0x28 = -mWork.chase.field_0x28; - sp2E0 = relationalPos(mWork.rolling.field_0x3c, &mWork.rolling.field_0x28); + mWork.rolling.mCenter.x = -mWork.rolling.mCenter.x; + sp2E0 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mCenter); f32 fVar2 = cXyz(sp2E0 - positionOf(mpPlayerActor)).abs(); if (fVar1 > fVar2) { - mWork.chase.field_0x28 = -mWork.chase.field_0x28; + mWork.rolling.mCenter.x = -mWork.rolling.mCenter.x; } - mWork.rolling.field_0x10 = relationalPos(mWork.rolling.field_0x3c, &mWork.rolling.field_0x28); + mWork.rolling.field_0x10 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mCenter); } } else { - mWork.rolling.field_0x10 = mWork.rolling.field_0x28; + mWork.rolling.field_0x10 = mWork.rolling.mCenter; } - if (mWork.rolling.field_0x3c && mWork.event.field_0x41 == 111) { - mWork.talk.field_0x4 = relationalPos(mWork.rolling.field_0x3c, &mWork.talk.field_0x1c); + if (mWork.rolling.mRelActor && mWork.event.field_0x41 == 111) { + mWork.rolling.field_0x4 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mEye); - } else if (mWork.rolling.field_0x3c && mWork.event.field_0x41 == 114) { + } else if (mWork.rolling.mRelActor && mWork.event.field_0x41 == 114) { if ((field_0xac & 1) != 0) { - mWork.talk.field_0x1c.x = -mWork.talk.field_0x1c.x; + mWork.rolling.mEye.x = -mWork.rolling.mEye.x; } - mWork.talk.field_0x4 = relationalPos(mWork.rolling.field_0x3c, &mWork.talk.field_0x1c); - if (lineBGCheck(&mWork.talk.field_0x10, &mWork.talk.field_0x4, 0x4007)) { - mWork.talk.field_0x1c.x = -mWork.talk.field_0x1c.x; + mWork.rolling.field_0x4 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mEye); + if (lineBGCheck(&mWork.rolling.field_0x10, &mWork.rolling.field_0x4, 0x4007)) { + mWork.rolling.mEye.x = -mWork.rolling.mEye.x; } - mWork.talk.field_0x4 = relationalPos(mWork.rolling.field_0x3c, &mWork.talk.field_0x1c); + mWork.rolling.field_0x4 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mEye); } else if (mWork.event.field_0x41 == 110) { - cSGlobe cStack_2e8 = mEye - positionOf(mWork.rolling.field_0x3c); - cSAngle acStack_2f8 = cStack_2e8.U() - directionOf(mWork.rolling.field_0x3c);; + cSGlobe cStack_2e8 = mEye - positionOf(mWork.rolling.mRelActor); + cSAngle acStack_2f8 = cStack_2e8.U() - directionOf(mWork.rolling.mRelActor);; if (acStack_2f8 < cSAngle::_0) { - mWork.talk.field_0x1c.x = -mWork.talk.field_0x1c.x; + mWork.rolling.mEye.x = -mWork.rolling.mEye.x; } - mWork.talk.field_0x4 = relationalPos(mWork.rolling.field_0x3c, &mWork.talk.field_0x1c); + mWork.rolling.field_0x4 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mEye); } else if (mWork.event.field_0x41 == 112) { - cXyz sp2D4 = relationalPos(mWork.rolling.field_0x3c, &mWork.talk.field_0x1c); + cXyz sp2D4 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mEye); f32 fVar3 = cXyz(sp2D4 - positionOf(mpPlayerActor)).abs(); - mWork.talk.field_0x1c.x = -mWork.talk.field_0x1c.x; - sp2D4 = relationalPos(mWork.rolling.field_0x3c, &mWork.talk.field_0x1c); + mWork.rolling.mEye.x = -mWork.rolling.mEye.x; + sp2D4 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mEye); f32 fVar4 = cXyz(sp2D4 - positionOf(mpPlayerActor)).abs(); if (fVar3 > fVar4) { - mWork.talk.field_0x1c.x = -mWork.talk.field_0x1c.x; + mWork.rolling.mEye.x = -mWork.rolling.mEye.x; } - mWork.talk.field_0x4 = relationalPos(mWork.rolling.field_0x3c, &mWork.talk.field_0x1c); + mWork.rolling.field_0x4 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mEye); } else { - mWork.talk.field_0x4 = mWork.talk.field_0x1c; + mWork.rolling.field_0x4 = mWork.rolling.mEye; } field_0x158.field_0x0 = true; } - if ((mWork.talk.field_0x48 == 1 || mWork.talk.field_0x48 == 2) && mWork.rolling.field_0x3c) { + if ((mWork.rolling.mTransType == 1 || mWork.rolling.mTransType == 2) && mWork.rolling.mRelActor) { if (mWork.event.field_0x40 == 111) { - mWork.rolling.field_0x10 = relationalPos(mWork.rolling.field_0x3c, &mWork.rolling.field_0x28); + mWork.rolling.field_0x10 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mCenter); } else if (mWork.event.field_0x40 == 110) { - cSGlobe cStack_2f0 = mEye - positionOf(mWork.rolling.field_0x3c); - cSAngle acStack_2fc = cStack_2f0.U() - directionOf(mWork.rolling.field_0x3c); + cSGlobe cStack_2f0 = mEye - positionOf(mWork.rolling.mRelActor); + cSAngle acStack_2fc = cStack_2f0.U() - directionOf(mWork.rolling.mRelActor); if (acStack_2fc < cSAngle::_0) { - mWork.rolling.field_0x28.x = -mWork.rolling.field_0x28.x; + mWork.rolling.mCenter.x = -mWork.rolling.mCenter.x; } - mWork.rolling.field_0x10 = relationalPos(mWork.rolling.field_0x3c, &mWork.rolling.field_0x28); + mWork.rolling.field_0x10 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mCenter); } else if (mWork.event.field_0x40 == 112) { - cXyz sp2C8 = relationalPos(mWork.rolling.field_0x3c, &mWork.rolling.field_0x28); + cXyz sp2C8 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mCenter); f32 fVar5 = cXyz(sp2C8 - positionOf(mpPlayerActor)).abs(); - mWork.rolling.field_0x28.x = -mWork.rolling.field_0x28.x; - sp2C8 = relationalPos(mWork.rolling.field_0x3c, &mWork.rolling.field_0x28); + mWork.rolling.mCenter.x = -mWork.rolling.mCenter.x; + sp2C8 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mCenter); f32 fVar6 = cXyz(sp2C8 - positionOf(mpPlayerActor)).abs(); if (fVar5 > fVar6) { - mWork.rolling.field_0x28.x = -mWork.rolling.field_0x28.x; + mWork.rolling.mCenter.x = -mWork.rolling.mCenter.x; } - mWork.rolling.field_0x10 = relationalPos(mWork.rolling.field_0x3c, &mWork.rolling.field_0x28); + mWork.rolling.field_0x10 = relationalPos(mWork.rolling.mRelActor, &mWork.rolling.mCenter); } } - field_0x5c.mCenter += (mWork.rolling.field_0x10 - field_0x5c.mCenter) * mWork.chase.field_0x58.x; - field_0x5c.mDirection.Val(mWork.talk.field_0x4 - mWork.talk.field_0x10); + field_0x5c.mCenter += (mWork.rolling.field_0x10 - field_0x5c.mCenter) * mWork.rolling.mCtrCus; + field_0x5c.mDirection.Val(mWork.rolling.field_0x4 - mWork.rolling.field_0x10); - if (mWork.talk.field_0x48 == 2) { - field_0x5c.mDirection.V(mWork.chase.field_0x54); + if (mWork.rolling.mTransType == 2) { + field_0x5c.mDirection.V(mWork.rolling.mLatitude); } - field_0x5c.mDirection.U(field_0x5c.mDirection.U() + (cSAngle)(mCurCamStyleTimer * mWork.chase.field_0x4c)); - field_0x5c.mDirection.R(mCurCamStyleTimer * mWork.chase.field_0x50 + field_0x5c.mDirection.R()); + field_0x5c.mDirection.U(field_0x5c.mDirection.U() + (cSAngle)(mCurCamStyleTimer * mWork.rolling.mRoll)); + field_0x5c.mDirection.R(mCurCamStyleTimer * mWork.rolling.mRadiusAdd + field_0x5c.mDirection.R()); field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = mWork.chase.field_0x34; + field_0x5c.mFovy = mWork.rolling.mFovy; if (mWork.event.field_0x1) { cAngle this_00; - field_0x5c.mBank = this_00.d2s(mWork.rolling.field_0x38); + field_0x5c.mBank = this_00.d2s(mWork.rolling.mBank); setFlag(0x400); } - if (mWork.event.field_0x0 && mCurCamStyleTimer < mWork.chase.field_0x44) { + if (mWork.event.field_0x0 && mCurCamStyleTimer < mWork.rolling.mTimer) { return 0; } return 1; } - namespace { /* 804253CC-804253D8 0520EC 000C+00 1/2 0/0 0/0 .bss MidnaAdditionVec__25@unnamed@d_ev_camera_cpp@ */ static cXyz MidnaAdditionVec; @@ -887,7 +890,7 @@ bool dCamera_c::fixedPositionEvCamera() { getEvFloatData(&mWork.fixedPos.field_0x28, "Fovy", mFovy); getEvFloatData(&mWork.fixedPos.field_0x30, "CtrCus", 1.0f); getEvFloatData(&mWork.fixedPos.field_0x38, "Radius", 100000.0f); - getEvFloatData(&mWork.fixedPos.field_0x34, "StartRadius", mWork.rolling.field_0x38); + getEvFloatData(&mWork.fixedPos.field_0x34, "StartRadius", mWork.rolling.mBank); mWork.event.field_0x1 = getEvFloatData(&mWork.fixedPos.field_0x2c, "Bank", 0.0f); getEvStringData(&mWork.event.field_0x48, "RelUseMask", "o"); mWork.event.field_0x0 = getEvIntData(&mWork.event.field_0x4c, "Timer", -1); @@ -921,9 +924,9 @@ bool dCamera_c::fixedPositionEvCamera() { field_0x5c.mEye = mWork.talk.field_0x4; field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); - f32 fVar1 = mWork.rolling.field_0x38; + f32 fVar1 = mWork.rolling.mBank; if (mWork.event.field_0x0 && mCurCamStyleTimer < mWork.fixedPos.field_0x4c) { - fVar1 = mWork.rolling.field_0x34 + (mWork.rolling.field_0x38 - mWork.rolling.field_0x34) * (mCurCamStyleTimer / f32(mWork.fixedPos.field_0x4c)); + fVar1 = mWork.rolling.mFovy + (mWork.rolling.mBank - mWork.rolling.mFovy) * (mCurCamStyleTimer / f32(mWork.fixedPos.field_0x4c)); rv = false; } @@ -961,11 +964,18 @@ bool dCamera_c::uniformAcceleEvCamera() { transEvCamera(3); } +namespace { + inline static bool lineCollisionCheck(cXyz param_0, cXyz param_1, fopAc_ac_c* param_2, + fopAc_ac_c* param_3, fopAc_ac_c* param_4) { + return dComIfG_Ccsp()->ChkCamera(param_0, param_1, 15.0f, param_2, param_3, param_4); + } +} // namespace + /* 8008BE98-8008E750 0867D8 28B8+00 3/3 0/0 0/0 .text transEvCamera__9dCamera_cFi */ bool dCamera_c::transEvCamera(int param_1) { // NONMATCHING struct mWork::trans* trans = &mWork.trans; - + struct { cXyz sp58; } pos; @@ -974,11 +984,19 @@ bool dCamera_c::transEvCamera(int param_1) { cXyz sp70; } pos2; - char cVar13; - f32 fVar15; + cXyz sp64, sp4c; + bool rv = 0; - f32 local_d0[5] = { 0, 4, 7, 7, 0 }; - cXyz spf0, spfc; + + s32 lit_5984[4] = { 0x00000000, 0x00000000, 0x3F800000, 0x3F800000 }; + f32 lit_5985[7] = { 0x00000000, 0x00000000, 0x3ECCCCCD, 0x3F333333, 0x3F666666, 0x3F800000, 0x3F800000 }; + // u32 lit_5986[7] = { 0x00000000, 0x00000000, 0x3DCCCCCD, 0x3E99999A, 0x3F19999A, 0x3F800000, 0x3F800000 }; + // u32 lit_5987[5] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }; + + // u32* local_894 = lit_5986; + // u32* local_b0 = lit_5987; + + // f32 local_d0[5] = { 0, 4, 7, 7, 0 }; if (mCurCamStyleTimer == 0) { if (!getEvIntData(&trans->mTimer, "Timer")) { @@ -987,13 +1005,14 @@ bool dCamera_c::transEvCamera(int param_1) { } getEvIntData(&trans->mBSpCurve, "BSpCurve", param_1); + int iVar1 = trans->mBSpCurve; if (trans->mBSpCurve != 0) { - mEventData.field_0xf0.Init(local_d0[trans->mBSpCurve], trans->mTimer++); + mEventData.field_0xf0.Init(lit_5984[iVar1], trans->mTimer + 1); mEventData.field_0xf0.Step(); } else { - int iVar1 = getEvFloatListData(&trans->mBSpPoints, "BSpPoints"); + iVar1 = getEvFloatListData(&trans->mBSpPoints, "BSpPoints"); if (iVar1 != 0) { - mEventData.field_0xf0.Init(iVar1, trans->mTimer++); + mEventData.field_0xf0.Init(iVar1, trans->mTimer + 1); mEventData.field_0xf0.Step(); trans->mBSpCurve = -1; } @@ -1006,10 +1025,11 @@ bool dCamera_c::transEvCamera(int param_1) { getEvFloatData(&trans->mFovy, "Fovy", mFovy); trans->field_0x68 = getEvFloatData(&trans->field_0x3c, "Bank", mBank.Degree()); } else { - trans->mCenter = field_0xd0[slot].mCenter; - trans->mEye = field_0xd0[slot].mEye; - trans->mFovy = field_0xd0[slot].mFovy; - s16 sVar1 = field_0xd0[slot].mBank.Val(); + dCamInfo_c* ptr1 = &field_0xd0[slot]; + trans->mCenter = (*ptr1).mCenter; + trans->mEye = (*ptr1).mEye; + trans->mFovy = (*ptr1).mFovy; + s16 sVar1 = (*ptr1).mBank.Val(); trans->field_0x3c = sVar1; if (sVar1 != 0.0f) { trans->field_0x68 = true; @@ -1022,10 +1042,11 @@ bool dCamera_c::transEvCamera(int param_1) { getEvFloatData(&trans->mStartFovy, "StartFovy", mFovy); trans->field_0x68 |= getEvFloatData(&trans->field_0x1c, "StartBank", mBank.Degree()); } else { - trans->mStartCenter = field_0xd0[slot].mCenter; - trans->mStartEye = field_0xd0[slot].mEye; - trans->mStartFovy = field_0xd0[slot].mFovy; - s16 sVar2 = field_0xd0[slot].mBank.Val(); + dCamInfo_c* ptr2 = &field_0xd0[slot]; + trans->mStartCenter = (*ptr2).mCenter; + trans->mStartEye = (*ptr2).mEye; + trans->mStartFovy = (*ptr2).mFovy; + s16 sVar2 = (*ptr2).mBank.Val(); trans->field_0x1c = sVar2; if (sVar2 != 0.0f) { trans->field_0x68 = true; @@ -1038,6 +1059,7 @@ bool dCamera_c::transEvCamera(int param_1) { getEvFloatData(&trans->mCushion, "Cushion", 1.0f); if (trans->mRelActor) { + cXyz spf0, spfc; trans->mRelActorID = fopAcM_GetID(trans->mRelActor); if (mIsWolf == 1 && trans->mRelActor == mpPlayerActor) { daPy_py_c* mPlayer = (daPy_py_c*)mpPlayerActor; @@ -1183,13 +1205,13 @@ bool dCamera_c::transEvCamera(int param_1) { if (trans->field_0x4a == 112) { cXyz sp114(trans->mCenter); - f32 fVar1 = cXyz((relationalPos(trans->mRelActor, &sp114) - positionOf(mpPlayerActor))).abs(); + cXyz sp120 = relationalPos(trans->mRelActor, &sp114); + f32 fVar1 = cXyz(sp120 - positionOf(mpPlayerActor)).abs(); sp114.x = -sp114.x; - cXyz cStack_30c; - cStack_30c = relationalPos(trans->mRelActor, &sp114); - f32 fVar2 = cXyz((cStack_30c - positionOf(mpPlayerActor))).abs(); + sp120 = relationalPos(trans->mRelActor, &sp114); + f32 fVar2 = cXyz(sp120 - positionOf(mpPlayerActor)).abs(); if (fVar1 < fVar2) { - trans->mCenter.x -trans->mCenter.x; + trans->mCenter.x = -trans->mCenter.x; } } else if (trans->field_0x4a == 102) { cSGlobe cStack_7e8(trans->mCenter); @@ -1200,12 +1222,11 @@ bool dCamera_c::transEvCamera(int param_1) { if (trans->field_0x4b == 112) { cXyz sp12c = trans->mEye; - // cXyz cStack_314(relationalPos(trans->mRelActor, &sp12c)); - f32 fVar3 = cXyz(relationalPos(trans->mRelActor, &sp12c) - positionOf(mpPlayerActor)).abs(); + cXyz sp138(relationalPos(trans->mRelActor, &sp12c)); + f32 fVar3 = cXyz(sp138 - positionOf(mpPlayerActor)).abs(); sp12c.x = -sp12c.x; - cXyz cStack_314; - cStack_314 = relationalPos(trans->mRelActor, &sp12c); - f32 fVar4 = cXyz(cStack_314 - positionOf(mpPlayerActor)).abs(); + sp138 = relationalPos(trans->mRelActor, &sp12c); + f32 fVar4 = cXyz(sp138 - positionOf(mpPlayerActor)).abs(); if (fVar3 < fVar4) { trans->mEye.x = -trans->mEye.x; } @@ -1246,36 +1267,37 @@ bool dCamera_c::transEvCamera(int param_1) { return 1; } else { + f32 fVar15; if (mCurCamStyleTimer >= trans->mTimer) { rv = 1; fVar15 = 1.0f; + } else if (trans->mBSpCurve == -1) { + mEventData.field_0xf0.Step(); + mEventData.field_0xf0.Calc(trans->mBSpPoints); + } else if (trans->mBSpCurve != 0) { + mEventData.field_0xf0.Step(); + mEventData.field_0xf0.Calc(&lit_5985[trans->mBSpCurve]); } else { - if (trans->mBSpCurve == -1) { - mEventData.field_0xf0.Step(); - mEventData.field_0xf0.Calc(trans->mBSpPoints); - } else { - mEventData.field_0xf0.Step(); - mEventData.field_0xf0.Calc(&local_d0[trans->mBSpCurve]); - } + fVar15 = (mCurCamStyleTimer + 1) / trans->mTimer; } - cXyz sp4c, sp64; + char cVar1; if (trans->mRelActor) { if (trans->mRelUseMask == 116) { sp4c = attentionPos(trans->mRelActor) + trans->mStartCenter; - cVar13 = -1; + cVar1 = -1; } else if (trans->mRelUseMask == 99) { cSGlobe cStack_7f8(trans->mStartCenter); cStack_7f8.U(trans->field_0x60.U() + cStack_7f8.U()); sp4c = attentionPos(trans->mRelActor) + cStack_7f8.Xyz(); - cVar13 = -1; + cVar1 = -1; } else if (trans->mRelUseMask == 119 || trans->mRelUseMask == 87) { sp4c = relationalPos(trans->mRelActor, &trans->mStartCenter); - cVar13 = -1; + cVar1 = -1; } else { if (isRelChar(trans->mRelUseMask)) { sp4c = relationalPos(trans->mRelActor, &trans->mStartCenter); - cVar13 = -1; + cVar1 = -1; } else { sp4c = trans->mStartCenter; } @@ -1283,19 +1305,19 @@ bool dCamera_c::transEvCamera(int param_1) { if (trans->field_0x49 == 116) { pos.sp58 = attentionPos(trans->mRelActor) + trans->mStartEye; - cVar13 = -1; + cVar1 = -1; } else if (trans->field_0x49 == 99) { cSGlobe cStack_800(trans->mStartEye); cStack_800.U(cStack_800.U() + trans->field_0x60.U()); pos.sp58 = attentionPos(trans->mRelActor) + cStack_800.Xyz(); - cVar13 = -1; + cVar1 = -1; } else if (trans->field_0x49 == 119 || trans->field_0x49 == 87) { pos.sp58 = relationalPos(trans->mRelActor, &trans->mStartEye); - cVar13 = -1; + cVar1 = -1; } else { if (isRelChar(trans->field_0x49)) { pos.sp58 = relationalPos(trans->mRelActor, &trans->mStartEye); - cVar13 = -1; + cVar1 = -1; } else { pos.sp58 = trans->mStartEye; } @@ -1324,8 +1346,8 @@ bool dCamera_c::transEvCamera(int param_1) { cStack_810.U(cStack_810.U() + trans->field_0x60.U()); pos2.sp70 = attentionPos(trans->mRelActor) + cStack_810.Xyz(); } else { - cVar13 = trans->field_0x4b; - if (cVar13 == 119 || trans->field_0x4b == 87) { + cVar1 = trans->field_0x4b; + if (cVar1 == 119 || trans->field_0x4b == 87) { pos2.sp70 = relationalPos(trans->mRelActor, &trans->mEye); } else if (isRelChar(trans->field_0x4b)) { pos2.sp70 = relationalPos(trans->mRelActor, &trans->mEye); @@ -1377,8 +1399,8 @@ bool dCamera_c::transEvCamera(int param_1) { } } - cSAngle acStack_91c(fVar15 * (cStack_838.V() - cStack_830.V())); - cSGlobe cStack_840(cStack_830.R() + (fVar15 * (cStack_838.R() - cStack_830.R())), + cSAngle acStack_91c((cStack_838.V() - cStack_830.V()) * fVar15); + cSGlobe cStack_840(cStack_830.R() + ((cStack_838.R() - cStack_830.R()) * fVar15), (cStack_830.V() + acStack_91c), (cStack_830.U() + acStack_91c)); @@ -1429,8 +1451,7 @@ bool dCamera_c::transEvCamera(int param_1) { field_0x5c.mFovy += trans->mCushion * (fVar16 - field_0x5c.mFovy); if (trans->field_0x68) { - cSAngle acStack_938(trans->field_0x1c + (trans->field_0x3c - trans->field_0x1c)); - field_0x5c.mBank += trans->mCushion * (acStack_938 - field_0x5c.mBank); + field_0x5c.mBank += (cSAngle(trans->field_0x1c + (trans->field_0x3c - trans->field_0x1c)) - field_0x5c.mBank) * trans->mCushion; setFlag(0x400); } @@ -1440,59 +1461,43 @@ bool dCamera_c::transEvCamera(int param_1) { return rv; } -namespace { - inline static bool lineCollisionCheck(cXyz param_0, cXyz param_1, fopAc_ac_c* param_2, - fopAc_ac_c* param_3, fopAc_ac_c* param_4) { - return dComIfG_Ccsp()->ChkCamera(param_0, param_1, 15.0f, param_2, param_3, param_4); - } -} // namespace - /* 8008E938-8008FA58 089278 1120+00 0/0 1/0 0/0 .text watchActorEvCamera__9dCamera_cFv */ bool dCamera_c::watchActorEvCamera() { // NONMATCHING f32 fVar6; - bool bVar3; - bool bVar2; - bool bVar4; - bool bVar14; bool bVar15; - static cXyz DefaultGap_6755; - if (struct_80450F88[0] == 0) { - DefaultGap_6755 = cXyz::Zero; - struct_80450F88[0] = 1; - } + static cXyz DefaultGap(cXyz::Zero); struct mWork::actor* actor = &mWork.actor; if (mCurCamStyleTimer == 0) { - cXyz mDefaultGap(DefaultGap_6755); - getEvXyzData(&actor->field_0x0, "CtrGap", mDefaultGap); - getEvFloatData(&actor->field_0x18, "Cushion", 1.0f); - getEvFloatData(&actor->field_0x20, "NearDist", 750.0f); - getEvFloatData(&actor->field_0x2c, "ZoomDist", 400.0f); - getEvFloatData(&actor->field_0x30, "ZoomVAngle", 0.0f); - getEvFloatData(&actor->field_0x28, "FarDist", 1500.0f); - getEvFloatData(&actor->field_0x60, "Fovy", 62.0f); - getEvIntData(&actor->field_0x1c, "NearTimer", 20); - getEvIntData(&actor->field_0x24, "FarTimer", 30); - getEvFloatData(&actor->field_0x5c, "FrontAngle", 179.0f); - getEvIntData(&actor->field_0x58, "Blure", 0); + getEvXyzData(&actor->mCtrGap, "CtrGap", DefaultGap); + getEvFloatData(&actor->mCushion, "Cushion", 1.0f); + getEvFloatData(&actor->mNearDist, "NearDist", 750.0f); + getEvFloatData(&actor->mZoomDist, "ZoomDist", 400.0f); + getEvFloatData(&actor->mZoomVAngle, "ZoomVAngle", 0.0f); + getEvFloatData(&actor->mFarDist, "FarDist", 1500.0f); + getEvFloatData(&actor->mFovy, "Fovy", 62.0f); + getEvIntData(&actor->mNearTimer, "NearTimer", 20); + getEvIntData(&actor->mFarTimer, "FarTimer", 30); + getEvFloatData(&actor->mFrontAngle, "FrontAngle", 179.0f); + getEvIntData(&actor->mBlure, "Blure", 0); - actor->field_0x34 = getEvActor("Target", "@STARTER"); - if (actor->field_0x34 == NULL) { + actor->mTargetActor = getEvActor("Target", "@STARTER"); + if (actor->mTargetActor == NULL) { OS_REPORT("camera: event: error: target actor missing\n"); return 1; } - actor->field_0x38 = fopAcM_GetID(actor->field_0x34); - actor->field_0xc = relationalPos(actor->field_0x34, &actor->field_0x0); + actor->mTargetActorID = fopAcM_GetID(actor->mTargetActor); + actor->field_0xc = relationalPos(actor->mTargetActor, &actor->mCtrGap); actor->field_0x3c.Val(mEye - actor->field_0xc); - if (actor->field_0x3c.R() < actor->field_0x20) { + if (actor->field_0x3c.R() < actor->mNearDist) { if (pointInSight(&actor->field_0xc)) { actor->field_0x54 = 0; } else { actor->field_0x54 = 1; } - } else if (actor->field_0x3c.R() < actor->field_0x28) { + } else if (actor->field_0x3c.R() < actor->mFarDist) { actor->field_0x54 = 2; } else { actor->field_0x54 = 3; @@ -1501,14 +1506,14 @@ bool dCamera_c::watchActorEvCamera() { field_0x158.field_0x0 = true; } - if (fopAcM_SearchByID(actor->field_0x38) == NULL) { + if (fopAcM_SearchByID(actor->mTargetActorID) == NULL) { OS_REPORT("camera: event: error: target actor dead\n"); return 1; } bool bVar5 = false; bool bVar1 = true; - if (fopAcM_GetProfName(actor->field_0x34) == 232 || fopAcM_GetProfName(actor->field_0x34) == 550) { + if (fopAcM_GetProfName(actor->mTargetActor) == 232 || fopAcM_GetProfName(actor->mTargetActor) == 550) { bVar5 = true; } @@ -1523,146 +1528,52 @@ bool dCamera_c::watchActorEvCamera() { cXyz cStack_dc = attentionPos(mpPlayerActor); cStack_dc.y += 10.0f; cSGlobe cStack_288(cStack_dc - actor->field_0xc); - cSGlobe cStack_290(field_0x5c.mEye - positionOf(actor->field_0x34)); + cSGlobe cStack_290(field_0x5c.mEye - positionOf(actor->mTargetActor)); - cSAngle acStack_2e8 = cStack_290.U() - directionOf(actor->field_0x34); + cSAngle acStack_2e8 = cStack_290.U() - directionOf(actor->mTargetActor); if (acStack_2e8 < cSAngle::_0) { - cSAngle acStack_320(5.0f); - cStack_288.U(cStack_288.U() + acStack_320); + cStack_288.U(cStack_288.U() + cSAngle(5.0f)); } else { cStack_288.U(cStack_288.U() + cSAngle(-5.0f)); } - cSAngle acStack_2ec = cStack_288.U() - directionOf(actor->field_0x34); - if (acStack_2ec != cSAngle(-actor->field_0x5c)) { - cStack_288.U(directionOf(actor->field_0x34) + cSAngle(-actor->field_0x5c)); - } else if (acStack_2ec < cSAngle(actor->field_0x5c)) { - cStack_288.U(directionOf(actor->field_0x34) + cSAngle(-actor->field_0x5c)); + cSAngle acStack_2ec = cStack_288.U() - directionOf(actor->mTargetActor); + if (acStack_2ec < cSAngle(-actor->mFrontAngle)) { + cStack_288.U(directionOf(actor->mTargetActor) + cSAngle(-actor->mFrontAngle)); + } else if (acStack_2ec > cSAngle(actor->mFrontAngle)) { + cStack_288.U(directionOf(actor->mTargetActor) + cSAngle(actor->mFrontAngle)); + } + + actor->field_0x4c.Val(cStack_288.R() + 120.0f, cStack_288.V(), cStack_288.U()); + + cSAngle acStack_2f4; + if (acStack_2ec >= cSAngle::_0) { + acStack_2f4.Val(8.0f); } else { - if (acStack_2ec > cSAngle(actor->field_0x5c)) { - cStack_288.U(directionOf(actor->field_0x34) + cSAngle(actor->field_0x5c)); - } + acStack_2f4.Val(-8.0f); + } - actor->field_0x4c.Val(cStack_288.R() + 120.0f, cStack_288.V(), cStack_288.U()); + cXyz cStack_e8; + int i; + cSGlobe cStack_298 = actor->field_0x4c; + for (i = 0; i < 45; i++) { + cStack_e8 = actor->field_0xc + cStack_298.Xyz(); - cSAngle acStack_2f4; - if (acStack_2ec >= cSAngle::_0) { - acStack_2f4.Val(8.0f); - } else { - acStack_2f4.Val(-8.0f); - } - - cXyz cStack_e8; - cSGlobe cStack_298 = actor->field_0x4c; - for (u32 i = 0; i < 45; i++) { - cXyz cStack_e8(actor->field_0xc + cStack_298.Xyz()); - - if (bVar1) { - if (!lineBGCheck(&actor->field_0xc, &cStack_e8, 0x4007)) { - bVar3 = true; - bVar2 = true; - if (!lineCollisionCheck(actor->field_0xc, cStack_e8, mpPlayerActor, actor->field_0x34, NULL)) { - actor->field_0x4c = cStack_298; - break; - } + if (bVar1) { + if (!lineBGCheck(&actor->field_0xc, &cStack_e8, 0x4007)) { + if (!lineCollisionCheck(actor->field_0xc, cStack_e8, mpPlayerActor, actor->mTargetActor, NULL)) { + actor->field_0x4c = cStack_298; + break; } } - - cStack_298.U(cStack_298.U() + acStack_2f4); - - if (bVar5) { - cSAngle acStack_2f8 = cStack_298.U() - directionOf(actor->field_0x34); - if (fabsf(acStack_2f8.Degree()) < 70.0f) { - bVar1 = true; - } else { - bVar1 = false; - } - } - - if ((i & 2) != 0) { - fVar6 = -5.0f; - } else { - fVar6 = 5.0f; - } - - cSAngle acStack_35c(fVar6); - cStack_298.V((cStack_298.V() + acStack_35c) - (cStack_298.V() * 0.1f)); - } - } - - if (mCurCamStyleTimer < actor->field_0x24) { - fVar6 = mCurCamStyleTimer / actor->field_0x1c; - field_0x5c.mCenter += (actor->field_0xc - field_0x5c.mCenter) * fVar6; - - field_0x5c.mDirection.R(field_0x5c.mDirection.R() + (fVar6 * (actor->field_0x4c.R() - field_0x5c.mDirection.R()))); - - field_0x5c.mDirection.U(field_0x5c.mDirection.U() + ((actor->field_0x4c.U() - field_0x5c.mDirection.U()) * fVar6)); - - field_0x5c.mDirection.V(field_0x5c.mDirection.V() + ((actor->field_0x4c.V() - field_0x5c.mDirection.V()) * fVar6)); - - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - - field_0x5c.mFovy += fVar6 * (actor->field_0x60 - mFovy); - return 0; - } - } - break; - - case 2: - if (mCurCamStyleTimer == 0) { - cSGlobe cStack_2a0(attentionPos(mpPlayerActor) - actor->field_0xc); - if (actor->field_0x30 != 0.0f) { - cStack_2a0.V(actor->field_0x30); - } - - cSAngle acStack_2fc(cStack_2a0.U() - directionOf(actor->field_0x34)); - cSAngle acStack_38c(-actor->field_0x5c); - - if (acStack_2fc < acStack_38c) { - cStack_2a0.U(cSAngle(-actor->field_0x5c) + directionOf(actor->field_0x34)); - } else if (acStack_2fc > (cSAngle)(actor->field_0x5c)) { - cStack_2a0.U(cSAngle(actor->field_0x5c) + directionOf(actor->field_0x34)); - } - - if (fabsf(cStack_2a0.R() - actor->field_0x2c) < 30.0f) { - cStack_2a0.U(cStack_2a0.U() + *(cSAngle*)900); - } - - actor->field_0x4c.Val(actor->field_0x2c, cStack_2a0.V(), cStack_2a0.U()); - - cSAngle acStack_304; - if (acStack_2fc >= cSAngle::_0) { - acStack_304.Val(8.0f); - } else { - acStack_304.Val(-8.0f); - } - - cSGlobe cStack_2a8(actor->field_0x4c); - for (int i = 0; i < 45; i++) { - cXyz cStack_f4 = actor->field_0xc + cStack_2a8.Xyz(); - bVar3 = false; - bVar2 = false; - bVar4 = false; - bVar15 = false; - - if (bVar1 && !lineBGCheck(&actor->field_0xc, &cStack_f4, 0x4007)) { - bVar15 = true; } - if (bVar15) { - bVar3 = true; - // cXyz cStack_1f0 = mWork.actor.field_0xc; - bVar2 = true; - if (!lineCollisionCheck(actor->field_0xc, cStack_f4, mpPlayerActor, actor->field_0x34, NULL)) { - actor->field_0x4c = cStack_2a8; - break; - } - } + cStack_298.U(cStack_298.U() + acStack_2f4); - cStack_2a8.U(cStack_2a8.U() + acStack_304); if (bVar5) { - if (fabsf(cSAngle(cStack_2a8.U() - directionOf(actor->field_0x34)).Degree()) < 70.0f) { + cSAngle acStack_2f8 = cStack_298.U() - directionOf(actor->mTargetActor); + if (fabsf(acStack_2f8.Degree()) < 70.0f) { bVar1 = true; } else { bVar1 = false; @@ -1675,13 +1586,95 @@ bool dCamera_c::watchActorEvCamera() { fVar6 = 5.0f; } - cSAngle acStack_3b8(fVar6); - cStack_2a8.V(cStack_2a8.V() + acStack_3b8 - (acStack_3b8 * 0.1f)); + cStack_298.V((cStack_298.V() + cSAngle(fVar6)) - (cStack_298.V() * 0.1f)); } + + OS_REPORT("camera: event: search %d time(s)\n", i); } - if (mCurCamStyleTimer < actor->field_0x24) { - fVar6 = mCurCamStyleTimer / actor->field_0x24; + if (mCurCamStyleTimer < actor->mFarTimer) { + fVar6 = mCurCamStyleTimer / actor->mNearTimer; + field_0x5c.mCenter += (actor->field_0xc - field_0x5c.mCenter) * fVar6; + + field_0x5c.mDirection.R(field_0x5c.mDirection.R() + (fVar6 * (actor->field_0x4c.R() - field_0x5c.mDirection.R()))); + + field_0x5c.mDirection.U(field_0x5c.mDirection.U() + ((actor->field_0x4c.U() - field_0x5c.mDirection.U()) * fVar6)); + + field_0x5c.mDirection.V(field_0x5c.mDirection.V() + ((actor->field_0x4c.V() - field_0x5c.mDirection.V()) * fVar6)); + + field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + + field_0x5c.mFovy += fVar6 * (actor->mFovy - mFovy); + + return 0; + } + break; + + case 2: + if (mCurCamStyleTimer == 0) { + cSGlobe cStack_2a0(attentionPos(mpPlayerActor) - actor->field_0xc); + if (actor->mZoomVAngle != 0.0f) { + cStack_2a0.V(actor->mZoomVAngle); + } + + cSAngle acStack_2fc(cStack_2a0.U() - directionOf(actor->mTargetActor)); + + if (acStack_2fc < cSAngle(-actor->mFrontAngle)) { + cStack_2a0.U(directionOf(actor->mTargetActor) + cSAngle(-actor->mFrontAngle)); + } else if (acStack_2fc > (cSAngle)(actor->mFrontAngle)) { + cStack_2a0.U(directionOf(actor->mTargetActor) + cSAngle(actor->mFrontAngle)); + } + + if (fabsf(cStack_2a0.R() - actor->mZoomDist) < 30.0f) { + cStack_2a0.U(cStack_2a0.U() + (s16)900); + } + + actor->field_0x4c.Val(actor->mZoomDist, cStack_2a0.V(), cStack_2a0.U()); + + cSAngle acStack_304; + if (acStack_2fc >= cSAngle::_0) { + acStack_304.Val(8.0f); + } else { + acStack_304.Val(-8.0f); + } + + cXyz cStack_f4; + cSGlobe cStack_2a8(actor->field_0x4c); + int i; + for (i = 0; i < 45; i++) { + cStack_f4 = actor->field_0xc + cStack_2a8.Xyz(); + + if (bVar1 && !lineBGCheck(&actor->field_0xc, &cStack_f4, 0x4007)) { + if (!lineCollisionCheck(actor->field_0xc, cStack_f4, mpPlayerActor, actor->mTargetActor, NULL)) { + actor->field_0x4c = cStack_2a8; + break; + } + } + + cStack_2a8.U(cStack_2a8.U() + acStack_304); + if (bVar5) { + cSAngle acStack_3b4 = cStack_2a8.U() - directionOf(actor->mTargetActor); + if (fabsf(acStack_3b4.Degree()) < 70.0f) { + bVar1 = true; + } else { + bVar1 = false; + } + } + + if ((i & 2) != 0) { + fVar6 = -5.0f; + } else { + fVar6 = 5.0f; + } + + cStack_2a8.V((cStack_2a8.V() + cSAngle(fVar6)) - (cStack_2a8.V() * 0.1f)); + } + + OS_REPORT("camera: event: search %d time(s)\n", i); + } + + if (mCurCamStyleTimer < actor->mFarTimer) { + fVar6 = mCurCamStyleTimer / actor->mFarTimer; field_0x5c.mCenter += (actor->field_0xc - field_0x5c.mCenter) * fVar6; field_0x5c.mDirection.R(field_0x5c.mDirection.R() + @@ -1695,7 +1688,7 @@ bool dCamera_c::watchActorEvCamera() { field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy += fVar6 * (actor->field_0x60 - mFovy); + field_0x5c.mFovy += fVar6 * (actor->mFovy - mFovy); return 0; } @@ -1706,20 +1699,20 @@ bool dCamera_c::watchActorEvCamera() { field_0x5c.mCenter = actor->field_0xc; cSGlobe cStack_2b0(attentionPos(mpPlayerActor) - actor->field_0xc); - cStack_2b0.R(actor->field_0x2c); + cStack_2b0.R(actor->mZoomDist); - cSAngle acStack_30c = cStack_2b0.U() - directionOf(actor->field_0x34); - if (acStack_30c < cSAngle(-actor->field_0x5c)) { - cStack_2b0.U(directionOf(actor->field_0x34) + cSAngle(-actor->field_0x5c)); - } else if (acStack_30c > cSAngle(actor->field_0x5c)) { - cStack_2b0.U(directionOf(actor->field_0x34) + cSAngle(actor->field_0x5c)); + cSAngle acStack_30c = cStack_2b0.U() - directionOf(actor->mTargetActor); + if (acStack_30c < cSAngle(-actor->mFrontAngle)) { + cStack_2b0.U(directionOf(actor->mTargetActor) + cSAngle(-actor->mFrontAngle)); + } else if (acStack_30c > cSAngle(actor->mFrontAngle)) { + cStack_2b0.U(directionOf(actor->mTargetActor) + cSAngle(actor->mFrontAngle)); } - if (actor->field_0x30 != 0.0f) { - cStack_2b0.V(actor->field_0x30); + if (actor->mZoomVAngle != 0.0f) { + cStack_2b0.V(actor->mZoomVAngle); } - actor->field_0x4c.Val(actor->field_0x2c, cStack_2b0.V(), cStack_2b0.U()); + actor->field_0x4c.Val(actor->mZoomDist, cStack_2b0.V(), cStack_2b0.U()); cSAngle acStack_314; if (acStack_30c >= cSAngle::_0) { @@ -1733,26 +1726,19 @@ bool dCamera_c::watchActorEvCamera() { for (int i = 0; i < 45; i++) { cStack_100 = actor->field_0xc + cStack_2b8.Xyz(); - bVar3 = false; - bVar2 = false; - bVar4 = false; - bVar14 = false; - if (bVar1) { if (!lineBGCheck(&actor->field_0xc, &cStack_100, 0x4007)) { - if (!lineCollisionCheck(actor->field_0xc, cStack_100, mpPlayerActor, actor->field_0x34, NULL)) { + if (!lineCollisionCheck(actor->field_0xc, cStack_100, mpPlayerActor, actor->mTargetActor, NULL)) { actor->field_0x4c = cStack_2b8; break; } } } - // cSAngle acStack_408 = cStack_2b8.U() + acStack_314; cStack_2b8.U(cStack_2b8.U() + acStack_314); if (bVar5) { - // cSAngle acStack_40c = directionOf(mWork.actor.field_0x34); - cSAngle acStack_318 = cStack_2b8.U() - directionOf(actor->field_0x34); + cSAngle acStack_318 = cStack_2b8.U() - directionOf(actor->mTargetActor); if (fabsf(acStack_318.Degree()) < 70.0f) { bVar1 = true; } else { @@ -1772,7 +1758,7 @@ bool dCamera_c::watchActorEvCamera() { field_0x5c.mDirection = actor->field_0x4c; field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - field_0x5c.mFovy = actor->field_0x60; + field_0x5c.mFovy = actor->mFovy; } field_0x158.field_0x0 = true; @@ -2016,21 +2002,9 @@ bool dCamera_c::styleEvCamera() { /* 80090514-80091468 08AE54 0F54+00 0/0 1/0 0/0 .text gameOverEvCamera__9dCamera_cFv */ bool dCamera_c::gameOverEvCamera() { // NONMATCHING - float fVar1; + f32 fVar1; bool bVar3; bool bVar9; - cXyz *local_438; - cXyz *local_434; - cXyz *local_430; - cXyz *local_42c; - cXyz *local_428; - cXyz *local_424; - cXyz *local_420; - cXyz *local_41c; - cXyz *local_414; - int local_410; - int local_40c; - cXyz *local_408; int local_404; daPy_py_c* mPlayer = (daPy_py_c*)mpPlayerActor; @@ -2044,16 +2018,12 @@ bool dCamera_c::gameOverEvCamera() { mWork.gameOver.field_0x3c = local_458; } - cXyz spa8[4]; cXyz sp1e8(0.0f, -45.0f, 0.0f); - spa8[0] = cXyz(cXyz(85.0f, -50.0f, 165.0f)); - spa8[1] = cXyz(cXyz(72.0f, -64.0f, 60.0f)); - spa8[2] = cXyz(cXyz(165.0f, -20.0f, 45.0f)); - spa8[3] = cXyz(cXyz(85.0f, 165.0f, 40.0f)); - - cXyz sp290(10.0f, -70.0f, 110.0f); - cXyz sp48(sp290); - + cXyz spa8[4] = { + cXyz(85.0f, -50.0f, 165.0f), cXyz(72.0f, -64.0f, 60.0f), + cXyz(165.0f, -20.0f, 45.0f), cXyz(85.0f, 165.0f, 40.0f), + }; + cXyz sp290(cXyz(10.0f, -70.0f, 110.0f)); cXyz sp6c(cXyz(0.0f, 0.0f, 0.0f)); if (mWork.gameOver.field_0x3c != 0) { @@ -2076,34 +2046,36 @@ bool dCamera_c::gameOverEvCamera() { cXyz sp120(cXyz(20.0f, -75.0f, 115.0f)); cXyz sp114(cXyz(0.0f, 0.0f, 0.0f)); - cXyz* pcVar10; + cXyz* pos; if (mIsWolf != 1) { - pcVar10 = &sp1f4; + pos = &sp1f4; } else if (mWork.gameOver.field_0x3c != 0) { - pcVar10 = &sp20c; + pos = &sp200; } else { - pcVar10 = &sp200; + pos = &sp20c; } - cXyz sp218 = *pcVar10; + cXyz sp218(*pos); if (mIsWolf == 1) { - if (mWork.gameOver.field_0x3c == 0) { - pcVar10 = &sp108; - } else { - pcVar10 = &sp138; - } + pos = &spd8; + } else if (mWork.gameOver.field_0x3c == 0) { + pos = &sp108; } else { - pcVar10 = &spd8; + pos = &sp138; } + // cXyz* pc408; + // pc408 = pos; cXyz sp224; cXyz sp230; + cXyz sp23c; + cXyz sp248; cXyz sp254(0.0f, -40.0f, 0.0f); cXyz sp168(cXyz(0.0f, 135.0f, 140.0f)); cXyz sp15c(cXyz(-100.0f, 112.0f, 150.0f)); cXyz sp150(cXyz(65.0f, 100.0f, 70.0f)); cXyz sp144(cXyz(0.0f, 0.0f, 0.0f)); - cXyz sp261(0.0f, -45.0f, -50.0f); + cXyz sp260(0.0f, -45.0f, -50.0f); cXyz sp198(cXyz(0.0f, 150.0f, 115.0f)); cXyz sp18c(cXyz(-120.0f, 180.0f, -40.0f)); cXyz sp180(cXyz(40.0f, 100.0f, 5.0f)); @@ -2113,27 +2085,27 @@ bool dCamera_c::gameOverEvCamera() { cXyz sp1bc(cXyz(-200.0f, 140.0f, 50.0f)); cXyz sp1b0(cXyz(50.0f, 230.0f, 0.0f)); cXyz sp1a4(cXyz(0.0f, 0.0f, 0.0f)); - local_410 = 3; - cXyz* pcVar11; + cXyz* pos2; if (mIsWolf != 1) { - pcVar11 = &sp254; + pos2 = &sp254; } else if (mWork.gameOver.field_0x3c != 0) { - pcVar11 = &sp26c; - } else { - pcVar11 = &sp261; - } - cXyz sp278(*pcVar11); + pos2 = &sp260; + } + // else { + // pos2 = &sp26c; + // } + cXyz sp278(*pos2); if (mIsWolf != 1) { - if (mWork.gameOver.field_0x3c != 0) { - pcVar11 = &sp1c8; - } else { - pcVar11 = &sp198; - } - } else { - pcVar11 = &sp168; - } + pos2 = &sp168; + } else if (mWork.gameOver.field_0x3c != 0) { + pos2 = &sp1c8; + } + // else { + // pos2 = &sp198; + // } + // cXyz* pc414 = pos2; bVar3 = false; if (dComIfGp_checkPlayerStatus0(mPadID, 0x100000) || mPlayer->checkMagneBootsOn()) { @@ -2158,8 +2130,9 @@ bool dCamera_c::gameOverEvCamera() { field_0x158.field_0x0 = true; cXyz sp284 = field_0x5c.mEye - attentionPos(mpPlayerActor); cSAngle acStack_440(mpPlayerActor->shape_angle.y); - dCamMath cStack_2c0; - cStack_2c0.xyzRotateY(sp284, acStack_440); + sp284 = dCamMath::xyzRotateY(sp284, acStack_440); + *(pos2 + 3) = sp284; + // *(pos + 3) = *(pos2 + 3); spa8[local_404] = sp284; } @@ -2232,20 +2205,20 @@ bool dCamera_c::gameOverEvCamera() { sp224 = sp291 + field_0x5c.mDirection.Norm(); } - for (int i = 0; i < local_40c; i++) { + for (int i = 0; i < 3; i++) { if (mWork.gameOver.field_0x8 != 0) { - local_408->x = -local_408->x; + pos2->x = -pos2->x; } - sp230 = relationalPos(mpPlayerActor, local_408); + sp230 = relationalPos(mpPlayerActor, pos2); if (sp230.y < (mBG.field_0x108.field_0x4 + positionOf(mpPlayerActor).y)) { sp230.y = mBG.field_0x108.field_0x4 + positionOf(mpPlayerActor).y; } if (!lineBGCheck(&sp291, &sp230, 0x40b7)) break; - local_408->x = -local_408->x; - sp230 = relationalPos(mpPlayerActor, local_408); + pos2->x = -pos2->x; + sp230 = relationalPos(mpPlayerActor, pos2); if (sp230.y < (mBG.field_0x108.field_0x4 + positionOf(mpPlayerActor).y)) { sp230.y = mBG.field_0x108.field_0x4 + positionOf(mpPlayerActor).y; @@ -2271,17 +2244,17 @@ bool dCamera_c::gameOverEvCamera() { sp224 = sp291 + field_0x5c.mDirection.Norm(); } - for (int i = 0; i < local_410; i++) { + for (int i = 0; i < 3; i++) { if (mWork.gameOver.field_0x8 != 0) { - local_414->x = -local_414->x; + pos2->x = -pos2->x; } - sp230 = relationalPos(mpPlayerActor, local_414); + sp230 = relationalPos(mpPlayerActor, pos2); if (!lineBGCheck(&sp291, &sp230, 0x40b7)) break; - local_414->x = -local_414->x; - sp230 = relationalPos(mpPlayerActor, local_414); + pos2->x = -pos2->x; + sp230 = relationalPos(mpPlayerActor, pos2); if (!lineBGCheck(&sp291, &sp230, 0x40b7)) break; mWork.gameOver.field_0x8 ^= 1; @@ -2384,13 +2357,6 @@ SECTION_RODATA static u8 const lit_5988[20] = { COMPILER_STRIP_GATE(0x8037A858, &lit_5988); #pragma pop -/* 8037A86C-8037A884 006ECC 0018+00 1/1 0/0 0/0 .rodata @8236 */ -SECTION_RODATA static u8 const lit_8236[24] = { - 0x3F, 0x40, 0x00, 0x00, 0x3E, 0xB3, 0x33, 0x33, 0x3F, 0x4C, 0xCC, 0xCD, - 0x3F, 0x4C, 0xCC, 0xCD, 0x3F, 0x4C, 0xCC, 0xCD, 0x3F, 0x4C, 0xCC, 0xCD, -}; -COMPILER_STRIP_GATE(0x8037A86C, &lit_8236); - /* 80091468-8009236C 08BDA8 0F04+00 1/0 1/0 0/0 .text tactEvCamera__9dCamera_cFv */ bool dCamera_c::tactEvCamera() { // NONMATCHING @@ -2576,8 +2542,7 @@ bool dCamera_c::tactEvCamera() { } cSAngle acStack_488 = acStack_47c; - dCamMath cStack_304; - local_250 = cStack_304.xyzRotateY(local_250, acStack_488); + local_250 = dCamMath::xyzRotateY(local_250, acStack_488); cXyz cStack_22c = attentionPos(mpPlayerActor) + local_250; @@ -2789,242 +2754,72 @@ bool dCamera_c::loadEvCamera() { } } -/* ############################################################################################## */ -/* 8037A89C-8037AA08 006EFC 016C+00 1/1 0/0 0/0 .rodata @8969 */ -SECTION_RODATA static u8 const lit_8969[364] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2D, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x34, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, -}; -COMPILER_STRIP_GATE(0x8037A89C, &lit_8969); - -/* 80452A88-80452A8C 001088 0004+00 1/1 0/0 0/0 .sdata2 @9395 */ -SECTION_SDATA2 static f32 lit_9395 = 64.0f; - -/* 80452A8C-80452A90 00108C 0004+00 1/1 0/0 0/0 .sdata2 @9396 */ -SECTION_SDATA2 static f32 lit_9396 = 118.0f; - -/* 80452A90-80452A94 001090 0004+00 1/1 0/0 0/0 .sdata2 @9397 */ -SECTION_SDATA2 static f32 lit_9397 = -32.0f; - -/* 80452A94-80452A98 001094 0004+00 1/1 0/0 0/0 .sdata2 @9398 */ -SECTION_SDATA2 static f32 lit_9398 = -52.0f; - -/* 80452A98-80452A9C 001098 0004+00 1/1 0/0 0/0 .sdata2 @9399 */ -SECTION_SDATA2 static f32 lit_9399 = 34.0f; - -/* 80452A9C-80452AA0 00109C 0004+00 1/1 0/0 0/0 .sdata2 @9400 */ -SECTION_SDATA2 static f32 lit_9400 = 116.0f; - -/* 80452AA0-80452AA4 0010A0 0004+00 1/1 0/0 0/0 .sdata2 @9401 */ -SECTION_SDATA2 static f32 lit_9401 = 88.0f; - -/* 80452AA4-80452AA8 0010A4 0004+00 1/1 0/0 0/0 .sdata2 @9402 */ -SECTION_SDATA2 static f32 lit_9402 = -33.0f; - -/* 80452AA8-80452AAC 0010A8 0004+00 1/1 0/0 0/0 .sdata2 @9403 */ -SECTION_SDATA2 static f32 lit_9403 = -55.0f; - -/* 80452AAC-80452AB0 0010AC 0004+00 1/1 0/0 0/0 .sdata2 @9404 */ -SECTION_SDATA2 static f32 lit_9404 = 16.0f; - -/* 80452AB0-80452AB4 0010B0 0004+00 1/1 0/0 0/0 .sdata2 @9405 */ -SECTION_SDATA2 static f32 lit_9405 = 52.0f; - -/* 80452AB4-80452AB8 0010B4 0004+00 3/3 0/0 0/0 .sdata2 @9406 */ -SECTION_SDATA2 static f32 lit_9406 = -85.0f; - -/* 80452AB8-80452ABC 0010B8 0004+00 1/1 0/0 0/0 .sdata2 @9407 */ -SECTION_SDATA2 static f32 lit_9407 = -95.0f; - -/* 80452ABC-80452AC0 0010BC 0004+00 1/1 0/0 0/0 .sdata2 @9408 */ -SECTION_SDATA2 static f32 lit_9408 = 92.0f; - -/* 80452AC0-80452AC4 0010C0 0004+00 1/1 0/0 0/0 .sdata2 @9409 */ -SECTION_SDATA2 static f32 lit_9409 = 155.0f; - -/* 80452AC4-80452AC8 0010C4 0004+00 2/2 0/0 0/0 .sdata2 @9410 */ -SECTION_SDATA2 static f32 lit_9410 = -27.0f; - -/* 80452AC8-80452ACC 0010C8 0004+00 1/1 0/0 0/0 .sdata2 @9411 */ -SECTION_SDATA2 static f32 lit_9411 = -90.0f; - -/* 80452ACC-80452AD0 0010CC 0004+00 1/1 0/0 0/0 .sdata2 @9412 */ -SECTION_SDATA2 static f32 lit_9412 = -68.0f; - -/* 80452AD0-80452AD4 0010D0 0004+00 1/1 0/0 0/0 .sdata2 @9413 */ -SECTION_SDATA2 static f32 lit_9413 = 114.0f; - -/* 80452AD4-80452AD8 0010D4 0004+00 1/1 0/0 0/0 .sdata2 @9414 */ -SECTION_SDATA2 static f32 lit_9414 = -110.0f; - -/* 80452AD8-80452ADC 0010D8 0004+00 1/1 0/0 0/0 .sdata2 @9415 */ -SECTION_SDATA2 static f32 lit_9415 = 30.240999221801758f; - -/* 80452ADC-80452AE0 0010DC 0004+00 1/1 0/0 0/0 .sdata2 @9416 */ -SECTION_SDATA2 static f32 lit_9416 = 12.652999877929688f; - -/* 80452AE0-80452AE4 0010E0 0004+00 1/1 0/0 0/0 .sdata2 @9417 */ -SECTION_SDATA2 static f32 lit_9417 = 13.949999809265137f; - -/* 80452AE4-80452AE8 0010E4 0004+00 1/1 0/0 0/0 .sdata2 @9418 */ -SECTION_SDATA2 static f32 lit_9418 = 23.638999938964844f; - -/* 80452AE8-80452AEC 0010E8 0004+00 1/1 0/0 0/0 .sdata2 @9419 */ -SECTION_SDATA2 static f32 lit_9419 = 96.63600158691406f; - -/* 80452AEC-80452AF0 0010EC 0004+00 1/1 0/0 0/0 .sdata2 @9420 */ -SECTION_SDATA2 static f32 lit_9420 = 57.31800079345703f; - -/* 80452AF0-80452AF4 0010F0 0004+00 1/1 0/0 0/0 .sdata2 @9421 */ -SECTION_SDATA2 static f32 lit_9421 = -2.8489999771118164f; - -/* 80452AF4-80452AF8 0010F4 0004+00 1/1 0/0 0/0 .sdata2 @9422 */ -SECTION_SDATA2 static f32 lit_9422 = 96.63899993896484f; - -/* 80452AF8-80452AFC 0010F8 0004+00 1/1 0/0 0/0 .sdata2 @9423 */ -SECTION_SDATA2 static f32 lit_9423 = 42.75299835205078f; - -/* 80452AFC-80452B00 0010FC 0004+00 2/2 0/0 0/0 .sdata2 @9424 */ -SECTION_SDATA2 static f32 lit_9424 = -130.0f; - -/* 80452B00-80452B04 001100 0004+00 1/1 0/0 0/0 .sdata2 @9425 */ -SECTION_SDATA2 static f32 lit_9425 = -420.0f; - -/* 80452B04-80452B08 001104 0004+00 1/1 0/0 0/0 .sdata2 @9426 */ -SECTION_SDATA2 static f32 lit_9426 = -400.0f; - -/* 80452B08-80452B0C 001108 0004+00 1/1 0/0 0/0 .sdata2 @9427 */ -SECTION_SDATA2 static f32 lit_9427 = 95.0f; - -/* 80452B0C-80452B10 00110C 0004+00 1/1 0/0 0/0 .sdata2 @9428 */ -SECTION_SDATA2 static f32 lit_9428 = -245.0f; - -/* 80452B10-80452B14 001110 0004+00 1/1 0/0 0/0 .sdata2 @9429 */ -SECTION_SDATA2 static f32 lit_9429 = -58.0f; - -/* 80452B14-80452B18 001114 0004+00 1/1 0/0 0/0 .sdata2 @9430 */ -SECTION_SDATA2 static f32 lit_9430 = -250.0f; - -/* 80452B18-80452B1C 001118 0004+00 1/1 0/0 0/0 .sdata2 @9431 */ -SECTION_SDATA2 static f32 lit_9431 = -105.0f; - -/* 80452B1C-80452B20 00111C 0004+00 1/1 0/0 0/0 .sdata2 @9432 */ -SECTION_SDATA2 static f32 lit_9432 = 1.5f; - -/* 80452B20-80452B24 001120 0004+00 1/1 0/0 0/0 .sdata2 @9433 */ -SECTION_SDATA2 static f32 lit_9433 = 47.0f; - -/* 80452B24-80452B28 001124 0004+00 1/1 0/0 0/0 .sdata2 @9434 */ -SECTION_SDATA2 static f32 lit_9434 = 113.0f; - -/* 80452B28-80452B2C 001128 0004+00 1/1 0/0 0/0 .sdata2 @9435 */ -SECTION_SDATA2 static f32 lit_9435 = 96.0f; - -/* 80452B2C-80452B30 00112C 0004+00 1/1 0/0 0/0 .sdata2 @9436 */ -SECTION_SDATA2 static f32 lit_9436 = 38.0f; - -/* 80452B30-80452B34 001130 0004+00 1/1 0/0 0/0 .sdata2 @9437 */ -SECTION_SDATA2 static f32 lit_9437 = 82.0f; - -/* 80452B34-80452B38 001134 0004+00 1/1 0/0 0/0 .sdata2 @9438 */ -SECTION_SDATA2 static f32 lit_9438 = 340.0f; - -/* 80452B38-80452B3C 001138 0004+00 1/1 0/0 0/0 .sdata2 @9439 */ -SECTION_SDATA2 static f32 lit_9439 = -115.0f; - -/* 80452B3C-80452B40 00113C 0004+00 1/1 0/0 0/0 .sdata2 @9440 */ -SECTION_SDATA2 static f32 lit_9440 = 270.0f; - -/* 80452B40-80452B44 001140 0004+00 2/2 0/0 0/0 .sdata2 @9441 */ -SECTION_SDATA2 static f32 lit_9441 = 300.0f; - /* 800929AC-800937AC 08D2EC 0E00+00 0/0 1/0 0/0 .text useItem0EvCamera__9dCamera_cFv */ bool dCamera_c::useItem0EvCamera() { // NONMATCHING - cXyz sp394(10.0f, -15.0f, 20.0f); - cXyz sp238(cXyz(30.0f, 115.0f, 70.0f)); - cXyz sp22c(cXyz(0.0f, 120.0f, 64.0f)); - cXyz sp220(cXyz(65.0f, 120.0f, -10.0f)); - cXyz sp214(cXyz(40.0f, 118.0f, 0.0f)); - cXyz sp3a0(cXyz(0.0f, -32.0f, 15.0f)); - cXyz sp208(cXyz(80.0f, -50.0f, 140.0f)); - cXyz sp1fc(cXyz(-52.0f, 34.0f, 80.0f)); - cXyz sp1f0(cXyz(80.0f, 116.0f, 88.0f)); - cXyz sp1e4(cXyz(55.0f, -33.0f, 100.0f)); - cXyz sp1d8(cXyz(105.0f, -55.0f, 70.0f)); - cXyz sp1cc(cXyz(16.0f, 52.0f, -8.0f)); - cXyz sp3ac(cXyz(0.0f, -80.0f, 25.0f)); - cXyz sp268(cXyz(-85.0f, -15.0f, 240.0f)); - cXyz sp25c(cXyz(-95.0f, 92.0f, 165.0f)); - cXyz sp250(cXyz(155.0f, 80.0f, 120.0f)); - cXyz sp244(cXyz(5.0f, 108.0f, 155.0f)); - cXyz sp3b8(cXyz(0.0f, -27.0f, 25.0f)); - cXyz sp298(cXyz(-90.0f, -70.0f, 150.0f)); - cXyz sp28c(cXyz(130.0f, -68.0f, 114.0f)); - cXyz sp280(cXyz(5.0f, 130.0f, 110.0f)); - cXyz sp274(cXyz(-45.0f, -50.0f, -110.0f)); - cXyz sp3c4(cXyz(30.241f, 12.653f, 13.95f)); - cXyz sp2bc(cXyz(23.639f, 96.636f, 57.318f)); - cXyz sp2b0(cXyz(-2.849f, 96.639f, 42.753f)); - cXyz sp2a4(cXyz(23.639f, 96.636f, 57.318)); - cXyz sp3d0(cXyz(0.0f, -60.0f, -15.0f)); - cXyz sp2e0(cXyz(-90.0f, 115.0f, 120.0f)); - cXyz sp2d4(cXyz(75.0f, 105.0f, 65.0f)); - cXyz sp2c8(cXyz(80.0f, 110.0f, -130.0f)); - cXyz sp3dc(cXyz(0.0f, -15.0f, -100.0f)); - cXyz sp370(cXyz(-100.0f, -60.0f, -420.0f)); - cXyz sp364(cXyz(110.0f, -55.0f, -400.0f)); - cXyz sp3e8(cXyz(0.0f, 10.0f, -30.0f)); - cXyz sp388(cXyz(95.0f, -55.0f, -245.0f)); - cXyz sp37c(cXyz(-58.0f, -65.0f, -250.0f)); - cXyz sp3f4(cXyz(0.0f, -15.0f, 20.0f)); - cXyz sp310(cXyz(-105.0f, 1.5f, 47.0f)); - cXyz sp304(cXyz(113.0f, -28.0f, -12.0f)); - cXyz sp2f8(cXyz(96.0f, 50.0f, 38.0f)); - cXyz sp2ec(cXyz(-68.0f, 70.0f, 82.0f)); - cXyz sp400(cXyz(0.0f, 15.0f, -40.0f)); - cXyz sp334(cXyz(65.0f, 350.0f, -85.0f)); - cXyz sp328(cXyz(-110.0f, 340.0f, -115.0f)); - cXyz sp31c(cXyz(100.0f, 30.0f, 270.0f)); - cXyz sp40c(cXyz(0.0f, -20.0f, 30.0f)); - cXyz sp358(cXyz(-85.0f, -10.0f, 300.0f)); - cXyz sp34c(cXyz(50.0f, 165.0f, 160.0f)); - cXyz sp340(cXyz(-260.0f, -50.0f, 30.0f)); + cXyz sp394[49] = { + cXyz(10.0f, -15.0f, 20.0f), cXyz(30.0f, 115.0f, 70.0f), cXyz(0.0f, 120.0f, 64.0f), + cXyz(65.0f, 120.0f, -10.0f), cXyz(40.0f, 118.0f, 0.0f), cXyz(0.0f, -32.0f, 15.0f), + cXyz(80.0f, -50.0f, 140.0f), cXyz(-52.0f, 34.0f, 80.0f), cXyz(80.0f, 116.0f, 88.0f), + cXyz(55.0f, -33.0f, 100.0f), cXyz(105.0f, -55.0f, 70.0f), cXyz(16.0f, 52.0f, -8.0f), + cXyz(0.0f, -80.0f, 25.0f), cXyz(-85.0f, -15.0f, 240.0f), cXyz(-95.0f, 92.0f, 165.0f), + cXyz(155.0f, 80.0f, 120.0f), cXyz(5.0f, 108.0f, 155.0f), cXyz(0.0f, -27.0f, 25.0f), + cXyz(-90.0f, -70.0f, 150.0f), cXyz(130.0f, -68.0f, 114.0f), cXyz(5.0f, 130.0f, 110.0f), + cXyz(-45.0f, -50.0f, -110.0f), cXyz(30.241f, 12.653f, 13.95f), cXyz(23.639f, 96.636f, 57.318f), + cXyz(-2.849f, 96.639f, 42.753f), cXyz(23.639f, 96.636f, 57.318), cXyz(0.0f, -60.0f, -15.0f), + cXyz(-90.0f, 115.0f, 120.0f), cXyz(75.0f, 105.0f, 65.0f), cXyz(80.0f, 110.0f, -130.0f), + cXyz(0.0f, -15.0f, -100.0f), cXyz(-100.0f, -60.0f, -420.0f), cXyz(110.0f, -55.0f, -400.0f), + cXyz(0.0f, 10.0f, -30.0f), cXyz(95.0f, -55.0f, -245.0f), cXyz(-58.0f, -65.0f, -250.0f), + cXyz(0.0f, -15.0f, 20.0f), cXyz(-105.0f, 1.5f, 47.0f), cXyz(113.0f, -28.0f, -12.0f), + cXyz(96.0f, 50.0f, 38.0f), cXyz(-68.0f, 70.0f, 82.0f), cXyz(0.0f, 15.0f, -40.0f), + cXyz(65.0f, 350.0f, -85.0f), cXyz(-110.0f, 340.0f, -115.0f), cXyz(100.0f, 30.0f, 270.0f), + cXyz(0.0f, -20.0f, 30.0f), cXyz(-85.0f, -10.0f, 300.0f), cXyz(50.0f, 165.0f, 160.0f), + cXyz(-260.0f, -50.0f, 30.0f), + }; - int local_1a8[5]; - local_1a8[0] = 4; + cXyz* local_1b0[49]; + *local_1b0 = sp394; - struct mWork::item0* item0 = &mWork.item0; + u32 local_1a8[91] = { + 0x00000000, 0x00000000, 0x00000000, 0x42820000, + 0x0000001E, 0x00000000, 0xFFFFFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x42820000, 0x00000028, + 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x42820000, 0x00000028, 0x00000000, + 0x00000007, 0x00000000, 0x00000000, 0x00000000, + 0x42820000, 0x00000028, 0x00000000, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x42820000, + 0x0000000A, 0x00000049, 0xFFFFFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x428C0000, 0x0000002D, + 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x42700000, 0x00000028, 0x00000000, + 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x42700000, 0x00000028, 0x00000000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x42340000, + 0x00000050, 0x0000000A, 0xFFFFFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x42820000, 0x00000028, + 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x42700000, 0x00000028, 0x00000000, + 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x42700000, 0x00000001, 0x0000003C, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x42820000, + 0x00000014, 0x00000000, 0xFFFFFFFF, + }; + + cSAngle acStack_53c, acStack_540; + cXyz sp408; + + struct mWork::item* item = &mWork.item; if (mCurCamStyleTimer == 0) { - item0->field_0x0 = 0; - item0->field_0x44 = mCenter; - item0->field_0x50 = mEye; - item0->field_0x5c = mFovy; + item->field_0x0 = 0; + item->field_0x44 = mCenter; + item->field_0x50 = mEye; + item->field_0x5c = mFovy; } - cXyz sp424(attentionPos(mpPlayerActor)); - switch (item0->field_0x0) { + cXyz sp414 = attentionPos(mpPlayerActor); + cXyz sp424; + switch (item->field_0x0) { case 3: case 4: case 5: @@ -3033,212 +2828,594 @@ bool dCamera_c::useItem0EvCamera() { case 8: case 9: case 0: - getEvIntData(&item0->field_0x8, "Type", 0); - item0->field_0x1c = 0; - item0->field_0x20 = 0; + getEvIntData(&item->mType, "Type", 0); + item->field_0x1c = 0; + item->field_0x20 = 0; break; case 11: - item0->field_0x0 = 10; - int iVar1 = item0->field_0x20 + 1; - item0->field_0x20 = iVar1;; - if (local_1a8[item0->field_0x8] <= iVar1) { - item0->field_0x20 = 0; - if ((field_0xa8 & local_1a8[item0->field_0x8]) == 0) { + item->field_0x0 = 10; + int iVar1 = item->field_0x20 + 1; + item->field_0x20 = iVar1; + if (local_1a8[item->mType * 7 + 3] >= iVar1) { + item->field_0x20 = 0; + if ((field_0xa8 & local_1a8[item->mType]) == 0) { + local_1b0[item->mType * 7 + -1 + 12] = local_1b0[item->mType * 7 + -1]; + } + item->field_0xc = relationalPos(mpPlayerActor, local_1b0[item->mType * 7]); + item->field_0x18 = local_1a8[item->mType * 7 + 1]; + item->field_0x4 = local_1a8[item->mType * 7 + 2]; + + if (lineBGCheck(&sp414, &item->field_0xc, 0x40b7)) { + item->field_0xc = sp424 + cSGlobe().Norm(); + } + + int i; + for (i = 0; i < local_1a8[item->mType * 7]; i++) { + sp408 = relationalPos(mpPlayerActor, local_1b0[item->mType + i * 12]); + if ((((sp408.y < mBG.field_0x108.field_0x4 + positionOf(mpPlayerActor).y) << 3) << 28) < 0) { + sp408.y = mBG.field_0x108.field_0x4 + positionOf(mpPlayerActor).y; + } + + fopAc_ac_c* mActor = NULL; + if (item->mType == 10 || (item->mType < 10 && item->mType != 1)) { + if (daPy_getPlayerActorClass()->checkHorseRide() != 0) { + mActor = (fopAc_ac_c*)dComIfGp_getHorseActor(); + } else if (daPy_getPlayerActorClass()->checkCanoeRide() != 0) { + mActor = fopAcM_SearchByName(0xed); + } + } + + if (!lineBGCheck(&item->field_0xc, &sp408, 0x4007) && !lineBGCheck(&sp414, &sp408, 0x4007)) { + if (!lineCollisionCheck(item->field_0xc, sp408, mpPlayerActor, mActor, NULL)) { + break; + } + } + } + + if (local_1a8[item->mType * 7] >= i) { + item->field_0xc = item->field_0x44; + item->field_0x18 = item->field_0x5c; + sp408 = item->field_0x50; + } + + item->field_0x24.Val(sp408 - item->field_0xc); + item->field_0x0 = 1; + } + break; + + case 1: + f32 fVar1 = item->field_0x20 / item->field_0x4; + field_0x5c.mFovy += fVar1 * (item->field_0x18 - field_0x5c.mFovy); + field_0x5c.mCenter += (item->field_0xc - field_0x5c.mCenter) * fVar1; + + f32 fVar2 = field_0x5c.mDirection.R(); + acStack_540 = field_0x5c.mDirection.V(); + acStack_53c = field_0x5c.mDirection.U(); + fVar2 = fVar2 + (fVar1 * (item->field_0x24.R() - fVar2)); + acStack_540 += (item->field_0x24.V() - acStack_540) * fVar1; + acStack_53c += (item->field_0x24.U() - acStack_53c) * fVar1; + + field_0x5c.mDirection.Val(fVar2, acStack_540, acStack_53c); + field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + + if (item->field_0x20 < item->field_0x4) break; + + item->field_0x0 = 2; + // fallthrough + case 2: + field_0x5c.mCenter = item->field_0xc; + field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + + item->field_0x1c++; + if (item->field_0x1c == 1) { + if (item->mType == 0) { + item->field_0x0 = 11; + item->mType = 4; + break; + } + + if (item->mType == 7) { + item->field_0x0 = 11; + item->mType = 8; + break; + } + + if (item->mType == 11) { + item->field_0x0 = 999; + break; + } + } + + item->field_0x0 = 99; + // fallthrough + default: + field_0x158.field_0x0 = true; + field_0x5c.mCenter = item->field_0xc; + field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + } + + item->field_0x20++; + return 1; +} + +/* 800937AC-80094240 08E0EC 0A94+00 0/0 1/0 0/0 .text useItem1EvCamera__9dCamera_cFv */ +bool dCamera_c::useItem1EvCamera() { + // NONMATCHING + if (mCurCamStyleTimer == 0 && getEvIntData(&mWork.item.mType, "Type", 0), mWork.item.mType == 0) { + mWork.item.field_0x2c = field_0x5c.mCenter - attentionPos(mpPlayerActor); + mWork.item.field_0x38 = field_0x5c.mEye - attentionPos(mpPlayerActor); + } + + if (mWork.item.mType == 0) { + mWork.item.field_0x2c.y += 0.05f * (20.0f - mWork.item.field_0x2c.y); + mWork.item.field_0x2c.x += -mWork.item.field_0x2c.x * 0.05f; + mWork.item.field_0x2c.z += -mWork.item.field_0x2c.z * 0.05f; + + field_0x5c.mCenter = attentionPos(mpPlayerActor) + mWork.item.field_0x2c; + field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + field_0x5c.mDirection.R(field_0x5c.mDirection.R()); + + if (field_0x5c.mDirection.V() > cSAngle(70.0f)) { + field_0x5c.mDirection.V(cSAngle(70.0f)); + } + + if (field_0x5c.mDirection.V() < cSAngle(0.0f)) { + field_0x5c.mDirection.V(cSAngle(0.0f)); + } + + field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + field_0x5c.mFovy += (20.0f - field_0x5c.mFovy) * 0.05f; + return 1; + } + + cXyz spec(0.0f, 0.0f, 0.0f); + cXyz spf8(0.0f, -70.0f, 70.0f); + cXyz sp104(0.0f, -30.0f, 70.0f); + + daPy_py_c* mPlayer = daPy_getPlayerActorClass(); + daMidna_c* mMidna = (daMidna_c*)daPy_py_c::getMidnaActor(); + cXyz* sp264; + if (mIsWolf == 1) { + if (mPlayer->checkMidnaRide() && mMidna->checkNoDraw()) { + sp264 = &sp104; + } else { + sp264 = &spf8; + } + } + + cXyz sp11c(10.0f, -60.0f, 0.0f); + cXyz spa8(90.0f, 20.0f, 180.0f); + cXyz sp9c(-100.0f, 50.0f, -180.0f); + cXyz sp90(60.0f, 150.0f, 165.0f); + cXyz sp84(-150.0f, 30.0f, 170.0f); + cXyz sp78(0.0f, -20.0f, 165.0f); + cXyz sp6c(40.0f, 150.0f, -85.0f); + int local_d8[12] = { 6, 65, 1, 1, 7, 0, 0, -1, 30, 80, 0, -1 }; + cXyz* local_e0[2] = { &sp11c, &spa8 }; + bool rv = false; + + if (mCurCamStyleTimer == 0) { + mWork.item.field_0x0 = 0; + mWork.item.field_0x44 = mCenter; + mWork.item.field_0x50 = mEye; + mWork.item.field_0x5c = mFovy; + } + + cXyz sp134 = attentionPos(mpPlayerActor); + cXyz sp140; + switch (mWork.item.field_0x0) { + case 0: + mWork.item.field_0x1c = 0; + mWork.item.field_0x0 = 1; + // fallthrough + case 1: + mWork.item.field_0x18 = local_d8[mWork.item.field_0x1c + mWork.item.mType]; + mWork.item.field_0xc = field_0x5c.mCenter; + if (local_e0[mWork.item.field_0x1c + mWork.item.mType] != NULL) { + mWork.item.field_0xc = relationalPos(mpPlayerActor, &(*local_e0[mWork.item.mType + mWork.item.field_0x1c] + *sp264)); + + if ((field_0xa8 & local_d8[mWork.item.mType * 56 + mWork.item.field_0x1c * 28]) == 0) { + cXyz cStack_14c = *local_e0[mWork.item.field_0x1c + mWork.item.mType]; + local_e0[mWork.item.field_0x1c + mWork.item.mType] += 12; + local_e0[mWork.item.field_0x1c + mWork.item.mType] = &cStack_14c; + } + + if (lineBGCheck(&sp134, &mWork.item.field_0xc, &sp140, 0x40b7)) { + mWork.item.field_0xc = sp140 + cSGlobe().Norm(); + } + } + + cXyz sp128 = field_0x5c.mEye; + if (local_d8[mWork.item.field_0x1c + mWork.item.mType] != 0) { + int i; + for (i = 0; i < local_d8[mWork.item.field_0x1c + mWork.item.mType]; i++) { + sp128 = relationalPos(mpPlayerActor, local_e0[mWork.item.field_0x1c]); + fopAc_ac_c* mHorseActor = (fopAc_ac_c*)dComIfGp_getHorseActor(); + if (!lineBGCheck(&mWork.item.field_0xc, &sp128, 0x4007) && !lineBGCheck(&sp134, &sp128, 0x4007)) { + if (!lineCollisionCheck(mWork.item.field_0xc, sp128, mpPlayerActor, mHorseActor, NULL)) { + break; + } + } + } + + if (local_d8[mWork.item.field_0x1c] <= i) { + sp128 = field_0x5c.mEye; + } + } + + mWork.item.field_0x24.Val(sp128 - mWork.item.field_0xc); + mWork.item.field_0x0 = 2; + mWork.item.field_0x4 = local_d8[mWork.item.field_0x1c]; + mWork.item.field_0x20 = 1; + break; + + case 2: + if (mWork.item.field_0x4 > 1) { + f32 fVar1 = mWork.item.field_0x20 / mWork.item.field_0x4; + field_0x5c.mFovy += fVar1 * (mWork.item.field_0x18 - field_0x5c.mFovy); + field_0x5c.mCenter += (mWork.item.field_0xc - field_0x5c.mCenter) * fVar1; + + f32 fVar2 = field_0x5c.mDirection.R(); + cSAngle acStack_28c = field_0x5c.mDirection.V(); + cSAngle acStack_288 = field_0x5c.mDirection.U(); + fVar2 = fVar2 + (fVar1 * (mWork.item.field_0x24.R() - fVar2)); + acStack_28c += (mWork.item.field_0x24.V() - acStack_28c) * fVar1; + acStack_288 += (mWork.item.field_0x24.U() - acStack_288) * fVar1; + field_0x5c.mDirection.Val(fVar2, acStack_28c, acStack_288); + field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + + if (mWork.item.field_0x20 < mWork.item.field_0x4) break; + } + + mWork.item.field_0x0 = 3; + mWork.item.field_0x4 = local_d8[mWork.item.field_0x1c * 28 + mWork.item.mType]; + mWork.item.field_0x20 = 1; + // fallthrough + case 3: + field_0x5c.mCenter = mWork.item.field_0xc; + field_0x5c.mEye = field_0x5c.mCenter + mWork.item.field_0x24.Xyz(); + field_0x5c.mDirection = mWork.item.field_0x24; + field_0x5c.mFovy = mWork.item.field_0x18; + + if (mWork.item.field_0x20 < mWork.item.field_0x4) break; + + if (local_d8[mWork.item.mType * 14 + 7] != 0 && mWork.item.field_0x1c == 0) { + mWork.item.field_0x1c = 1; + mWork.item.field_0x0 = 1; + break; + } + + mWork.item.field_0x0 = 99; + // fallthrough + default: + field_0x158.field_0x0 = true; + rv = true; + } + + mWork.item.field_0x20++; + return rv; +} + +/* 80094240-80094A70 08EB80 0830+00 0/0 1/0 0/0 .text getItemEvCamera__9dCamera_cFv */ +bool dCamera_c::getItemEvCamera() { + // NONMATCHING + cXyz cStack_90[8] = { + cXyz(0.0f, -27.0f, 32.0f), + cXyz(84.0f, -18.0f, 134.0f), + cXyz(17.0f, 10.0f, -45.0f), + cXyz(-45.0f, 128.0f, 45.0f), + cXyz(0.0f, -27.0f, -62.0f), + cXyz(-84.0f, -18.0f, -164.0f), + cXyz(-12.0f, 10.0f, -130.0f), + cXyz(50.0f, 128.0f, -220.0f), + }; + + int local_fc[25] = { + 0x00000000, 0x00000000, 0x42480000, 0x0000000C, 0x00000001, + 0x00000000, 0x00000000, 0x42480000, 0x0000000C, 0x00000000, + 0x00000000, 0x00000000, 0x42480000, 0x00000011, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x42480000, 0x00000011, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x42480000, 0x00000011, 0x00000000, + }; + + cXyz* local_f8[8]; + *local_f8 = cStack_90; + + f32 fStack_ec[6] = { 0x00000000, 0x00000000, 0x3DCCCCCD, 0x3F333333, 0x3F800000, 0x3F800000 }; + + if (mCurCamStyleTimer == 0) { + getEvIntData(&mWork.getItem.field_0x8, "Type", mIsWolf == 1); + + if (mWork.getItem.field_0x8 == 2) { + if (mIsWolf != 1) { + mWork.getItem.field_0x8 = 3; + } else { + mWork.getItem.field_0x8 = 4; + } + + OS_REPORT("camera: event: => %d\n", mWork.getItem.field_0x8); + } + + getEvIntData(&mWork.getItem.mTimer, "Timer", local_fc[mWork.getItem.field_0x8 * 5]); + int iVar1 = getEvFloatListData(&mWork.getItem.mCurvePoints, "CurvePoints"); + mWork.getItem.field_0x18 = iVar1; + if (iVar1 == 0) { + mWork.getItem.mCurvePoints = fStack_ec; + mWork.getItem.field_0x18 = 6; + } + + getEvXyzData(&mWork.getItem.mStartCenter, "StartCenter", mCenter); + getEvXyzData(&mWork.getItem.mStartEye, "StartEye", mEye); + + mWork.getItem.mRelActor = getEvActor("RelActor", "@PLAYER"); + mWork.getItem.mRelActorID = fopAcM_GetID(mWork.getItem.mRelActor); + + cXyz mCenter; + getEvXyzData(&mCenter, "Center", *local_f8[mWork.getItem.field_0x8 * 5]); + mWork.getItem.field_0x44 = relationalPos(mWork.getItem.mRelActor, &mCenter); + + if (local_fc[mWork.getItem.field_0x8 * 5] == 1) { + cSGlobe cStack_208(mEye - positionOf(mWork.getItem.mRelActor)); + cSAngle acStack_224(cStack_208.U() - directionOf(mWork.getItem.mRelActor)); + if (acStack_224 < cSAngle::_0) { + local_f8[mWork.getItem.field_0x8 * 5 + 1]->x = -local_f8[mWork.getItem.field_0x8 * 5 + 1]->x; + } + + mCenter = relationalPos(mWork.getItem.mRelActor, local_f8[mWork.getItem.field_0x8 * 5 + 1]); + if (lineBGCheck(&mWork.getItem.field_0x44, &mCenter, 0x4007)) { + local_f8[mWork.getItem.field_0x8 * 5 + 1]->x = -local_f8[mWork.getItem.field_0x8 * 5 + 1]->x; + } + } else if (local_fc[mWork.getItem.field_0x8 * 5] == -1) { + cSGlobe cStack_210(mEye - positionOf(mWork.getItem.mRelActor)); + cSAngle acStack_228(cStack_210.U() - directionOf(mWork.getItem.mRelActor)); + if (acStack_228 > cSAngle::_0) { + local_f8[mWork.getItem.field_0x8 * 5 + 1]->x = -local_f8[mWork.getItem.field_0x8 * 5 + 1]->x; + } + + mCenter = relationalPos(mWork.getItem.mRelActor, local_f8[mWork.getItem.field_0x8 * 5 + 1]); + if (lineBGCheck(&mWork.getItem.field_0x44, &mCenter, 0x4007)) { + local_f8[mWork.getItem.field_0x8 * 5 + 1]->x = -local_f8[mWork.getItem.field_0x8 * 5 + 1]->x; + } + } + + getEvXyzData(&mCenter, "Eye", *local_f8[mWork.getItem.field_0x8 * 5 + 1]); + mWork.getItem.field_0x50 = relationalPos(mWork.getItem.mRelActor, &mCenter); + mWork.getItem.field_0x3c.Val(mWork.getItem.mStartEye - mWork.getItem.mStartCenter); + mWork.getItem.field_0x100.Val(mWork.getItem.field_0x50 - mWork.getItem.field_0x44); + + mEventData.field_0xf0.Init(mWork.getItem.field_0x18, mWork.getItem.mTimer + 1); + mEventData.field_0xf0.Step(); + } + + if (mWork.getItem.mRelActor && fopAcM_SearchByID(mWork.getItem.mRelActorID) == NULL) { + OS_REPORT("camera: event: error: relational base actor dead\n"); + return 1; + } + + if (mCurCamStyleTimer < mWork.getItem.mTimer) { + mEventData.field_0xf0.Step(); + f32 fVar1 = mEventData.field_0xf0.Calc(mWork.getItem.mCurvePoints); + + field_0x5c.mCenter = mWork.getItem.mStartCenter + ((mWork.getItem.field_0x44 - mWork.getItem.mStartCenter) * fVar1); + field_0x5c.mDirection.R(mWork.getItem.field_0x3c.R() + (fVar1 * (mWork.getItem.field_0x100.R() - mWork.getItem.field_0x3c.R()))); + field_0x5c.mDirection.V(mWork.getItem.field_0x3c.V() + ((mWork.getItem.field_0x100.V() - mWork.getItem.field_0x3c.V()) * fVar1)); + field_0x5c.mDirection.U(mWork.getItem.field_0x3c.U() + ((mWork.getItem.field_0x100.U() - mWork.getItem.field_0x3c.U()) * fVar1)); + field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + field_0x5c.mFovy += fVar1 * (fStack_ec[mWork.getItem.field_0x8 * 5 + -1] - field_0x5c.mFovy); + + return 0; + } + + return 1; +} + +namespace { + inline static int get_camera_id(camera_class* i_camera) { + return fopCamM_GetParam(i_camera); + } + + inline static dDlst_window_c* get_window(camera_class* i_camera) { + return dComIfGp_getWindow(dComIfGp_getCameraWinID(get_camera_id(i_camera))); + } +} + +/* 80094A70-80095010 08F3B0 05A0+00 0/0 1/0 0/0 .text possessedEvCamera__9dCamera_cFv */ +bool dCamera_c::possessedEvCamera() { + // NONMATCHING + fopAc_ac_c* a_this = (fopAc_ac_c*)this; + struct mWork::possessed* possessed = &mWork.possessed; + + bool rv = 0; + if (mCurCamStyleTimer == 0) { + possessed->field_0x0 = 0; + } + + switch (possessed->field_0x0) { + default: + if (!(possessed->mTargetActor = getEvActor("Target", "@PLAYER"))) { + rv = 1; + } else { + getEvIntData(&possessed->mType, "Type", 0); + getEvIntData(&possessed->mTimer, "Timer", 10); + getEvFloatData(&possessed->mRadius, "Radius", 60.0f); + getEvFloatData(&possessed->mCushion, "Cushion", 1.0f); + + f32 fVar1; + getEvFloatData(&fVar1, "Latitude", -5.0f); + possessed->mLatitude.Val(fVar1); + getEvFloatData(&fVar1, "Longitude", 0.0f); + possessed->mLongitude.Val(fVar1); + + getEvFloatData(&possessed->mFovy, "Fovy", 45.0f); + getEvIntData(&possessed->mBlure, "Blure", 0); + + if (possessed->mType == 0) { + possessed->field_0x28.Val(possessed->mRadius, possessed->mLatitude, possessed->mLongitude + directionOf(possessed->mTargetActor)); + pushInfo(&field_0xd0[1], 2); + field_0xd0[1].field_0x1e = 2; + } else { + field_0x5c.mCenter = eyePos(a_this); + possessed->field_0x28.Val(field_0xd0[1].mEye - field_0xd0[1].mCenter); + field_0x5c.mDirection.Val(possessed->mRadius, possessed->mLatitude, possessed->mLongitude + directionOf(possessed->mTargetActor)); + field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + field_0x5c.mFovy = possessed->mFovy; + } + + possessed->field_0x0 = 1; + possessed->field_0xc = possessed->mTimer; + switch (possessed->mBlure) { + case 1: + StartBlure(possessed->mTimer, possessed->mTargetActor, 0.5f, 0.99f); + break; + + case 2: + StartBlure(possessed->mTimer, possessed->mTargetActor, 0.63f, 0.99f); } } break; case 1: - f32 fVar1 = item0->field_0x20 / item0->field_0x4; - field_0x5c.mFovy += fVar1 * (item0->field_0x18 - field_0x5c.mFovy); - field_0x5c.mCenter += (item0->field_0xc - field_0x5c.mCenter) * fVar1; + f32 fVar1 = 1.0f / possessed->field_0xc; + field_0x5c.mCenter += ((eyePos(a_this) - field_0x5c.mCenter) * fVar1); + field_0x5c.mDirection.R(field_0x5c.mDirection.R() + (fVar1 * (possessed->field_0x28.R() - field_0x5c.mDirection.R()))); + field_0x5c.mDirection.V(field_0x5c.mDirection.V() + ((possessed->field_0x28.V() - field_0x5c.mDirection.V()) * fVar1)); + field_0x5c.mDirection.U(field_0x5c.mDirection.U() + ((possessed->field_0x28.U() - field_0x5c.mDirection.U()) * fVar1)); + field_0x5c.mEye += ((field_0x5c.mCenter + field_0x5c.mDirection.Xyz()) - field_0x5c.mEye) * possessed->mCushion; + field_0x5c.mFovy += fVar1 * (possessed->mFovy - field_0x5c.mFovy); - f32 fVar2 = field_0x5c.mDirection.R(); - cSAngle acStack_540 = field_0x5c.mDirection.V(); - cSAngle acStack_53c = field_0x5c.mDirection.U(); - fVar2 = fVar2 + (fVar1 * (item0->field_0x24.R() - fVar2)); - acStack_540 += (item0->field_0x24.V() - acStack_540) * fVar1; - acStack_53c += (item0->field_0x24.U() - acStack_53c) * fVar1; - - field_0x5c.mDirection.Val(fVar2, acStack_540, acStack_53c); - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - - if (item0->field_0x20 < item0->field_0x4) break; - - item0->field_0x0 = 2; - // fallthrough - case 2: - field_0x5c.mCenter = item0->field_0xc; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); - - item0->field_0x1c++; - if (item0->field_0x1c == 1) { - if (item0->field_0x8 == 0) { - item0->field_0x0 = 11; - item0->field_0x8 = 4; - break; - } - - if (item0->field_0x8 == 7) { - item0->field_0x0 = 11; - item0->field_0x8 = 8; - break; - } - - if (item0->field_0x8 == 11) { - item0->field_0x0 = 999; - break; - } + if (possessed->mBlure != 1) { + camera_class* mCamera; + dDlst_window_c* window = get_window(mCamera); + scissor_class* scissor = window->getScissor(); + cXyz sp60; + cXyz mEyePos = eyePos(a_this); + mDoLib_project(&mEyePos, &sp60); + SetBlurePosition(sp60.x / scissor->width, sp60.y / scissor->height, 0.0f); + SetBlureAlpha((fVar1 * 0.699999988079071f) + 0.5f); + SetBlureScale((fVar1 * 0.09000000357627869f) + 1.1f, 0.98f - (fVar1 * 0.18000000715255737f), 0.0f); } - item0->field_0x0 = 99; - // fallthrough - default: + possessed->field_0xc--; + if (possessed->field_0xc <= 0) { + possessed->field_0x0 = 99; + } + break; + + case 99: + rv = 1; field_0x158.field_0x0 = true; - field_0x5c.mCenter = item0->field_0xc; - field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); } - item0->field_0x20++; - return 1; + return rv; } -/* ############################################################################################## */ -/* 8037AA08-8037AA40 007068 0038+00 1/1 0/0 0/0 .rodata @9468 */ -SECTION_RODATA static u8 const lit_9468[56] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x82, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, -}; -COMPILER_STRIP_GATE(0x8037AA08, &lit_9468); - -/* 80452B44-80452B48 001144 0004+00 2/2 0/0 0/0 .sdata2 @9798 */ -SECTION_SDATA2 static f32 lit_9798 = 1.0f / 20.0f; - -/* 80452B48-80452B4C 001148 0004+00 1/1 0/0 0/0 .sdata2 @9799 */ -SECTION_SDATA2 static f32 lit_9799 = 90.0f; - -/* 80452B4C-80452B50 00114C 0004+00 1/1 0/0 0/0 .sdata2 @9800 */ -SECTION_SDATA2 static f32 lit_9800 = -180.0f; - -/* 80452B50-80452B54 001150 0004+00 1/1 0/0 0/0 .sdata2 @9801 */ -SECTION_SDATA2 static f32 lit_9801 = 170.0f; - -/* 800937AC-80094240 08E0EC 0A94+00 0/0 1/0 0/0 .text useItem1EvCamera__9dCamera_cFv */ -bool dCamera_c::useItem1EvCamera() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8037AA40-8037AAA4 0070A0 0064+00 1/1 0/0 0/0 .rodata @9811 */ -SECTION_RODATA static u8 const lit_9811[100] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8037AA40, &lit_9811); - -/* 8037AAA4-8037AABC 007104 0018+00 1/1 0/0 0/0 .rodata @9812 */ -SECTION_RODATA static u8 const lit_9812[24] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xCC, 0xCC, 0xCD, - 0x3F, 0x33, 0x33, 0x33, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8037AAA4, &lit_9812); - -/* 8037AAF4-8037AAF4 007154 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037AC79 = "CurvePoints"; -#pragma pop - -/* 80452B54-80452B58 001154 0004+00 1/1 0/0 0/0 .sdata2 @10118 */ -SECTION_SDATA2 static f32 lit_10118 = 32.0f; - -/* 80452B58-80452B5C 001158 0004+00 1/1 0/0 0/0 .sdata2 @10119 */ -SECTION_SDATA2 static f32 lit_10119 = 84.0f; - -/* 80452B5C-80452B60 00115C 0004+00 1/1 0/0 0/0 .sdata2 @10120 */ -SECTION_SDATA2 static f32 lit_10120 = 134.0f; - -/* 80452B60-80452B64 001160 0004+00 1/1 0/0 0/0 .sdata2 @10121 */ -SECTION_SDATA2 static f32 lit_10121 = 17.0f; - -/* 80452B64-80452B68 001164 0004+00 1/1 0/0 0/0 .sdata2 @10122 */ -SECTION_SDATA2 static f32 lit_10122 = 128.0f; - -/* 80452B68-80452B6C 001168 0004+00 1/1 0/0 0/0 .sdata2 @10123 */ -SECTION_SDATA2 static f32 lit_10123 = -62.0f; - -/* 80452B6C-80452B70 00116C 0004+00 1/1 0/0 0/0 .sdata2 @10124 */ -SECTION_SDATA2 static f32 lit_10124 = -84.0f; - -/* 80452B70-80452B74 001170 0004+00 1/1 0/0 0/0 .sdata2 @10125 */ -SECTION_SDATA2 static f32 lit_10125 = -164.0f; - -/* 80452B74-80452B78 001174 0004+00 1/1 0/0 0/0 .sdata2 @10126 */ -SECTION_SDATA2 static f32 lit_10126 = -220.0f; - -/* 80094240-80094A70 08EB80 0830+00 0/0 1/0 0/0 .text getItemEvCamera__9dCamera_cFv */ -bool dCamera_c::getItemEvCamera() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8037AAF4-8037AAF4 007154 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037AC85 = "Longitude"; -#pragma pop - -/* 80452B78-80452B7C 001178 0004+00 1/1 0/0 0/0 .sdata2 @10278 */ -SECTION_SDATA2 static f32 lit_10278 = 0.5f; - -/* 80452B7C-80452B80 00117C 0004+00 1/1 0/0 0/0 .sdata2 @10279 */ -SECTION_SDATA2 static f32 lit_10279 = 99.0f / 100.0f; - -/* 80452B80-80452B84 001180 0004+00 1/1 0/0 0/0 .sdata2 @10280 */ -SECTION_SDATA2 static f32 lit_10280 = 63.0f / 100.0f; - -/* 80452B84-80452B88 001184 0004+00 1/1 0/0 0/0 .sdata2 @10281 */ -SECTION_SDATA2 static f32 lit_10281 = 7.0f / 10.0f; - -/* 80452B88-80452B8C 001188 0004+00 1/1 0/0 0/0 .sdata2 @10282 */ -SECTION_SDATA2 static f32 lit_10282 = 11.0f / 10.0f; - -/* 80452B8C-80452B90 00118C 0004+00 1/1 0/0 0/0 .sdata2 @10283 */ -SECTION_SDATA2 static f32 lit_10283 = 9.0f / 100.0f; - -/* 80452B90-80452B94 001190 0004+00 1/1 0/0 0/0 .sdata2 @10284 */ -SECTION_SDATA2 static f32 lit_10284 = 9.0f / 50.0f; - -/* 80094A70-80095010 08F3B0 05A0+00 0/0 1/0 0/0 .text possessedEvCamera__9dCamera_cFv */ -bool dCamera_c::possessedEvCamera() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 8037AAF4-8037AAF4 007154 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037AC8F = "Centers"; -SECTION_DEAD static char const* const stringBase_8037AC97 = "Eyes"; -SECTION_DEAD static char const* const stringBase_8037AC9C = "Fovys"; -SECTION_DEAD static char const* const stringBase_8037ACA2 = "Choice"; -#pragma pop - -/* 80452B94-80452B98 001194 0004+00 1/1 0/0 0/0 .sdata2 @10437 */ -SECTION_SDATA2 static f32 lit_10437 = 1.0f / 100.0f; - /* 80095010-8009544C 08F950 043C+00 0/0 1/0 0/0 .text fixedFramesEvCamera__9dCamera_cFv */ bool dCamera_c::fixedFramesEvCamera() { // NONMATCHING + if (mCurCamStyleTimer == 0) { + cXyz sp30, sp3c; + mWork.fixedFrames.field_0x38 = 9999; + + int substanceNum = dComIfGp_evmng_getMySubstanceNum(mEventData.field_0x4, "Centers"); + if (substanceNum != 0) { + mWork.fixedFrames.field_0x1c[1] = dComIfGp_evmng_getMyXyzP(mEventData.field_0x4, "Centers"); + if (mWork.fixedFrames.field_0x38 > substanceNum) { + mWork.fixedFrames.field_0x38 = substanceNum; + } + } else { + OS_REPORT("camera: event: error: %s (xyz*) not found\n", "Centers"); + return 1; + } + + + substanceNum = dComIfGp_evmng_getMySubstanceNum(mEventData.field_0x4, "Eyes"); + if (substanceNum != 0) { + mWork.fixedFrames.field_0x1c[0] = dComIfGp_evmng_getMyXyzP(mEventData.field_0x4, "Eyes"); + if (mWork.fixedFrames.field_0x38 > substanceNum) { + mWork.fixedFrames.field_0x38 = substanceNum; + } + } else { + OS_REPORT("camera: event: error: %s (xyz*) not found\n", "Eyes"); + return 1; + } + + + substanceNum = dComIfGp_evmng_getMySubstanceNum(mEventData.field_0x4, "Fovys"); + if (substanceNum != 0) { + mWork.fixedFrames.field_0x24[0] = dComIfGp_evmng_getMyFloatP(mEventData.field_0x4, "Fovys"); + if (mWork.fixedFrames.field_0x38 > substanceNum) { + mWork.fixedFrames.field_0x38 = substanceNum; + } + } else { + OS_REPORT("camera: event: error: %s (float*) not found\n", "Fovys"); + return 1; + } + + + mWork.fixedFrames.field_0x0 = getEvIntData(&mWork.fixedFrames.mTimer, "Timer", 1); + getEvStringData(&mWork.fixedFrames.mRelUseMask, "RelUseMask", "oo"); + #ifdef DEBUG + if (strlen(&mWork.fixedFrames.mRelUseMask) != 2) { + OSReport("camera: event: bad length -> xx\n"); + strcpy(&mWork.fixedFrames.mRelUseMask, "xx"); + JUTAssertion::showAssert(JUTAssertion::getSDevice(), "d_ev_camera.cpp", 0x129c, "Halt"); + OSPanic("d_ev_camera.cpp", 0x129c, "Halt"); + } + #endif + + mWork.fixedFrames.mRelActor = getEvActor("RelActor"); + + int iVar1 = 0; + getEvIntData(&mWork.fixedFrames.mChoice, "Choice", 0); + if (mWork.fixedFrames.mChoice == 1) { + iVar1 = fabsf(cM_rndFX(mWork.fixedFrames.field_0x38 - 0.01f)); + } + + for (int i = 0; i < mWork.fixedFrames.field_0x38; i++) { + sp30 = *mWork.fixedFrames.field_0x1c[iVar1 * 12]; + sp3c = *mWork.fixedFrames.field_0x1c[iVar1 * 12]; + + if (mWork.fixedFrames.mRelActor && mWork.fixedFrames.mRelUseMask == 111) { + mWork.fixedFrames.field_0x4 = relationalPos(mWork.fixedFrames.mRelActor, &sp30); + } else { + mWork.fixedFrames.field_0x4 = sp30; + } + + if (mWork.fixedFrames.mRelActor && mWork.fixedFrames.field_0x31 == 111) { + mWork.fixedFrames.field_0x10 = relationalPos(mWork.fixedFrames.mRelActor, &sp3c); + } else { + mWork.fixedFrames.field_0x10 = sp3c; + } + + mWork.fixedFrames.field_0x24[1] = mWork.fixedFrames.field_0x24[iVar1]; + + if (!lineBGCheck(&mWork.fixedFrames.field_0x4, &mWork.fixedFrames.field_0x10, 0x4007)) { + if (!lineCollisionCheck(mWork.fixedFrames.field_0x4, mWork.fixedFrames.field_0x10, mpPlayerActor, mWork.fixedFrames.mRelActor, NULL)) { + break; + } + } + + iVar1++; + + if (iVar1 >= mWork.fixedFrames.field_0x38) { + iVar1 = 0; + } + } + + field_0x158.field_0x0 = true; + } + + field_0x5c.mCenter = mWork.fixedFrames.field_0x4; + field_0x5c.mEye = mWork.fixedFrames.field_0x10; + field_0x5c.mFovy = *mWork.fixedFrames.field_0x24[1]; + field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + if (mWork.fixedFrames.field_0x0 && mWork.fixedFrames.mTimer < mCurCamStyleTimer) { + return 0; + } + + return 1; } /* 8009544C-800956E4 08FD8C 0298+00 0/0 1/0 0/0 .text bSplineEvCamera__9dCamera_cFv */ @@ -3465,91 +3642,426 @@ bool dCamera_c::peepHoleEvCamera() { return 1; } -/* ############################################################################################## */ -/* 8037AAF4-8037AAF4 007154 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037AD14 = "R_SP01"; -#pragma pop - -/* 80452BA4-80452BA8 0011A4 0004+00 1/1 0/0 0/0 .sdata2 @11068 */ -SECTION_SDATA2 static f32 lit_11068 = 245.0f; - /* 80095FD0-800965AC 090910 05DC+00 0/0 1/0 0/0 .text digHoleEvCamera__9dCamera_cFv */ bool dCamera_c::digHoleEvCamera() { // NONMATCHING + struct mWork::digHole* digHole = &mWork.digHole; + if (mCurCamStyleTimer == 0) { + digHole->field_0x0 = 0; + getEvIntData(&digHole->mType, "Type", 3); + if (digHole->mType == 1) { + mEventData.field_0x20 = 0; + } + + digHole->field_0x8 = 60; + digHole->field_0xc = 0.05f; + digHole->field_0x10 = 1; + if ((digHole->mType & 1) != 0) { + cSAngle acStack_158(field_0x5c.mDirection.U() - directionOf(mpPlayerActor)); + s16 sVar1 = cSAngle::_90.Val(); + s16 sVar2 = acStack_158.Abs(); + if (sVar2 < sVar1) { + cXyz sp70, sp7c; + cSGlobe cStack_138; + sp70 = relationalPos(mpPlayerActor, &cXyz(0.0f, -70.0f, -10.0f)); + cStack_138.R(350.0f); + cStack_138.V(cSAngle(30.0f)); + + cSAngle acStack_164 = directionOf(mpPlayerActor); + f32 fVar1; + if (acStack_164 < cSAngle::_0) { + fVar1 = 10.0f; + } else { + fVar1 = -10.0f; + } + + cStack_138.U(acStack_164.Inv() + fVar1); + + sp7c = sp70 + cStack_138.Xyz(); + + if (!lineBGCheck(&sp70, &sp7c, 0x4007)) { + field_0x5c.mFovy = 60.0f; + field_0x5c.mCenter = sp70; + field_0x5c.mDirection = cStack_138; + field_0x5c.mEye = sp7c; + } else { + digHole->field_0x10 = 0; + } + } + } + + if ((digHole->mType & 2) != 0) { + digHole->field_0x14 = relationalPos(mpPlayerActor, &cXyz(0.0f, 0.0f, 245.0f)); + + cXyz sp64[3] = { cXyz(-85.0f, -10.0f, 300.0f), cXyz(50.0f, 165.0f, 160.0f), cXyz(-260.0f, -50.0f, 30.0f)}; + fopAc_ac_c* mMidnaActor = (fopAc_ac_c*)daPy_py_c::getMidnaActor(); + cXyz spa0; + for (int i = 0; i < 3; i++) { + spa0 = dCamMath::xyzRotateY(sp64[i], directionOf(mpPlayerActor)); + + digHole->field_0x20 = digHole->field_0x14 + spa0; + + if (!lineBGCheck(&digHole->field_0x14, &digHole->field_0x20, 0x4007)) { + if (!lineCollisionCheck(digHole->field_0x14, digHole->field_0x20, mpPlayerActor, mMidnaActor, NULL)) { + break; + } + } + } + } + + cXyz spac = attentionPos(mpPlayerActor); + if (dCamMath::xyzHorizontalDistance(field_0x5c.mCenter, spac) > 120.0f) { + digHole->field_0x10 = 0; + } + } + + digHole->field_0x0++; + + if (digHole->mType != 2) { + if (digHole->field_0x10 != 0) { + f32 fVar2 = field_0x5c.mDirection.R(); + f32 fVar3 = field_0x5c.mDirection.V().Degree(); + field_0x5c.mDirection.R(fVar2 + (350.0f - fVar2) * digHole->field_0xc); + field_0x5c.mDirection.V(fVar3 + (40.0f - fVar3) * digHole->field_0xc); + field_0x5c.mFovy += (60.0f - field_0x5c.mFovy) * digHole->field_0xc; + field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + } else if (!strcmp(dComIfGp_getStartStageName(), "R_SP01")) { + field_0x88 = 0; + } + + if (digHole->field_0x0 >= digHole->field_0x8 && digHole->mType != 1) { + digHole->field_0x0 = 0; + digHole->mType = 2; + } + } else if (digHole->field_0x0 == 1) { + field_0x5c.mCenter = digHole->field_0x14; + field_0x5c.mEye = digHole->field_0x20; + field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + field_0x5c.mFovy = 60.0f; + } + + return 1; } -/* ############################################################################################## */ -/* 8037AABC-8037AAE4 00711C 0028+00 1/1 0/0 0/0 .rodata @11087 */ -SECTION_RODATA static u8 const lit_11087[40] = { - 0x42, 0x20, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x41, 0xC8, 0x00, 0x00, 0x42, 0x48, - 0x00, 0x00, 0x42, 0x96, 0x00, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x41, 0x70, 0x00, 0x00, - 0x42, 0xB4, 0x00, 0x00, 0x42, 0xDC, 0x00, 0x00, 0x43, 0x0C, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8037AABC, &lit_11087); - -/* 8037AAF4-8037AAF4 007154 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037AD1B = "Teacher"; -SECTION_DEAD static char const* const stringBase_8037AD23 = "Midna"; -SECTION_DEAD static char const* const stringBase_8037AD29 = "Student"; -SECTION_DEAD static char const* const stringBase_8037AD31 = "CtrGapY"; -#pragma pop - -/* 80452BA8-80452BAC 0011A8 0004+00 1/1 0/0 0/0 .sdata2 @11415 */ -SECTION_SDATA2 static f32 lit_11415 = 280.0f; - -/* 80452BAC-80452BB0 0011AC 0004+00 1/1 0/0 0/0 .sdata2 @11416 */ -SECTION_SDATA2 static f32 lit_11416 = 4.0f / 5.0f; - -/* 80452BB0-80452BB4 0011B0 0004+00 1/1 0/0 0/0 .sdata2 @11417 */ -SECTION_SDATA2 static f32 lit_11417 = -1.0f; - -/* 80452BB4-80452BB8 0011B4 0004+00 1/1 0/0 0/0 .sdata2 @11418 */ -SECTION_SDATA2 static f32 lit_11418 = 1.0f / 5.0f; - -/* 80452BB8-80452BBC 0011B8 0004+00 1/1 0/0 0/0 .sdata2 @11419 */ -SECTION_SDATA2 static f32 lit_11419 = -2.5f; - -/* 80452BBC-80452BC0 0011BC 0004+00 1/1 0/0 0/0 .sdata2 @11420 */ -SECTION_SDATA2 static f32 lit_11420 = 4.5f; - -/* 80452BC0-80452BC4 0011C0 0004+00 1/1 0/0 0/0 .sdata2 @11421 */ -SECTION_SDATA2 static f32 lit_11421 = 0.75f; - -/* 80452BC4-80452BC8 0011C4 0004+00 1/1 0/0 0/0 .sdata2 @11422 */ -SECTION_SDATA2 static f32 lit_11422 = 2.0f / 5.0f; - /* 800965AC-80096EDC 090EEC 0930+00 0/0 1/0 0/0 .text hintTalkEvCamera__9dCamera_cFv */ bool dCamera_c::hintTalkEvCamera() { // NONMATCHING + bool rv; + f32 fVar22; + fopAc_ac_c* mRideActor; + cXyz spc0, spcc, spd8, spe4, spf0, spfc; + + struct mWork::hintTalk* hintTalk = &mWork.hintTalk; + daAlink_c* mLink = (daAlink_c*)mpPlayerActor; + + if (mCurCamStyleTimer == 0) { + hintTalk->mTeacher = getEvActor("Teacher", "Midna"); + hintTalk->mStudent = getEvActor("Student", "@PLAYER"); + getEvFloatData(&hintTalk->mFovy, "Fovy", 55.0f); + getEvFloatData(&hintTalk->mRadius, "Radius", 280.0f); + getEvFloatData(&hintTalk->mCtrGapY, "CtrGapY", -25.0f); + getEvIntData(&hintTalk->mTimer, "Timer", 20); + } + + if (hintTalk->mTeacher == NULL || hintTalk->mStudent == NULL) { + OS_REPORT("camera: event: error: actor 1 or 2 missing\n"); + return 1; + } + + if (mCurCamStyleTimer == 0) { + spc0 = attentionPos(hintTalk->mTeacher); + spcc = attentionPos(hintTalk->mStudent); + mRideActor = NULL; + + if (fopAcM_GetName(hintTalk->mTeacher) == 0xff) { + spc0 = *mLink->getShadowTalkAtnPos(); + } + + if (hintTalk->mStudent == mpPlayerActor && mIsWolf == 1) { + spd8 = positionOf(mpPlayerActor); + spd8.y = spcc.y; + spfc = spd8 - spcc; + spcc += spfc.norm() * 40.0f; + } + + hintTalk->field_0x40 = spc0; + hintTalk->mDirection = field_0x5c.mDirection; + spf0 = spcc - spc0; + hintTalk->field_0x28.Val(spf0); + + if ((dComIfGp_getCameraAttentionStatus(0) & 0x800) != 0) { + hintTalk->field_0x28.V(cSAngle(15.0f)); + } + + spe4 = spc0 + (spf0 * 0.8f); + spe4.y += hintTalk->mCtrGapY; + hintTalk->mDirection.R(hintTalk->mRadius); + + f32 local_b0[10] = { 40.0f, 60.0f, 25.0f, 50.0f, 75.0f, 35.0f, 15.0f, 90.0f, 110.0f, 140.0f }; + f32 fVar1; + if ((field_0xa8 & 16) != 0) { + fVar1 = local_b0[0]; + local_b0[0] = local_b0[3]; + local_b0[3] = fVar1; + } + if ((field_0xa8 & 4) != 0) { + fVar1 = local_b0[2]; + local_b0[2] = local_b0[1]; + local_b0[1] = fVar1; + } + if ((field_0xa8 & 2) != 0) { + fVar1 = local_b0[0]; + local_b0[0] = local_b0[1]; + local_b0[1] = fVar1; + } + + bool bVar9 = false; + cSAngle acStack_1f8(hintTalk->field_0x28.U()); + if (mLink->checkRide() != 0) { + mRideActor = mLink->getRideActor(); + acStack_1f8 = directionOf(mpPlayerActor); + if ((hintTalk->field_0x28.U() - acStack_1f8) < cSAngle::_0) { + fVar22 = -1.0f; + } else { + fVar22 = 1.0f; + } + } else if (hintTalk->field_0x28.U() - hintTalk->mDirection.U() > cSAngle::_0) { + fVar22 = -1.0f; + } else { + fVar22 = 1.0f; + } + + cSAngle acStack_1fc(20.0f); + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 12; j++) { + cSAngle acStack_200(local_b0[j] * fVar22); + hintTalk->mDirection.U(acStack_1f8 + acStack_200); + hintTalk->mDirection.V(((hintTalk->field_0x28.V() * acStack_200.Cos()) * 0.2f) + acStack_1fc); + hintTalk->field_0x8 = spe4 - ((spf0 * 0.2f) * acStack_200.Cos()); + hintTalk->field_0x14 = hintTalk->field_0x8 + hintTalk->mDirection.Xyz(); + + if (!lineBGCheck(&spcc, &hintTalk->field_0x14, 0x4007) && !lineBGCheck(&spc0, &hintTalk->field_0x14, 0x4007)) { + if (!lineBGCheck(&hintTalk->field_0x8, &hintTalk->field_0x14, 0x4007)) { + if (!lineCollisionCheck(spcc, hintTalk->field_0x14, hintTalk->mStudent, hintTalk->mTeacher, mRideActor)) { + if (!lineCollisionCheck(spc0, hintTalk->field_0x14, hintTalk->mStudent, hintTalk->mTeacher, mRideActor)) { + bVar9 = true; + break; + } + } + } + } + + int iVar1 = j >> 31; + if ((iVar1 * 4 | (j * 0x40000000 + iVar1) >> 30) - iVar1 == 3) { + f32 fVar2; + if (i != 0) { + fVar2 = -2.5f; + } else { + fVar2 = 4.5f; + } + + acStack_1fc += cSAngle(fVar2); + } + } + + if (bVar9) break; + + fVar22 = -fVar22; + hintTalk->mDirection.R(hintTalk->mDirection.R() * 0.75f); + } + } + + if (!field_0x158.field_0x0) { + f32 fVar3 = mCurCamStyleTimer + 1; + fVar22 = dCamMath::rationalBezierRatio(fVar3 / hintTalk->mTimer, 0.4f); + field_0x5c.mCenter += (hintTalk->field_0x8 - field_0x5c.mCenter) * fVar22; + field_0x5c.mDirection.R(field_0x5c.mDirection.R() + ((hintTalk->mDirection.R() - field_0x5c.mDirection.R()) * fVar22)); + field_0x5c.mDirection.V(field_0x5c.mDirection.V() + ((hintTalk->mDirection.V() - field_0x5c.mDirection.V()) * fVar22)); + field_0x5c.mDirection.U(field_0x5c.mDirection.U() + ((hintTalk->mDirection.U() - field_0x5c.mDirection.U()) * fVar22)); + field_0x5c.mEye = field_0x5c.mCenter + field_0x5c.mDirection.Xyz(); + field_0x5c.mFovy += fVar22 * (hintTalk->mFovy - field_0x5c.mFovy); + + if (mCurCamStyleTimer == (hintTalk->mTimer - 1)) { + field_0x158.field_0x0 = true; + } + + rv = 0; + } else { + rv = 1; + } + + return rv; } -/* ############################################################################################## */ -/* 8037AAE4-8037AAF4 007144 0010+00 1/1 0/0 0/0 .rodata @11437 */ -SECTION_RODATA static u8 const lit_11437[16] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8037AAE4, &lit_11437); - -/* 8037AAF4-8037AAF4 007154 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8037AD39 = "Base"; -SECTION_DEAD static char const* const stringBase_8037AD3E = "xxxxxx"; -SECTION_DEAD static char const* const stringBase_8037AD45 = "Set1"; -SECTION_DEAD static char const* const stringBase_8037AD4A = "Use1"; -SECTION_DEAD static char const* const stringBase_8037AD4F = "ooxxxx"; -SECTION_DEAD static char const* const stringBase_8037AD56 = "Set2"; -SECTION_DEAD static char const* const stringBase_8037AD5B = "Use2"; -SECTION_DEAD static char const* const stringBase_8037AD60 = "xxooox"; -#pragma pop - /* 80096EDC-80097694 09181C 07B8+00 0/0 1/0 0/0 .text bspTransEvCamera__9dCamera_cFv */ bool dCamera_c::bspTransEvCamera() { // NONMATCHING + cXyz sp64, sp3c; + struct mWork::bspTrans* bspTrans = &mWork.bspTrans; + f32 local_7c[4] = { 0x000000, 0x000000, 0x3F000000, 0x3F000000 }; + + if (mCurCamStyleTimer == 0) { + field_0x158.field_0x0 = true; + if (!getEvIntData(&bspTrans->mTimer, "Timer")) { + OS_REPORT("camera: event: error: BSPTRANS no Timer\n"); + return 1; + } + + int iVar1 = getEvFloatListData(&bspTrans->mBase, "Base"); + if (iVar1 != 0) { + mEventData.field_0xf0.Init(iVar1, bspTrans->mTimer + 1); + } else { + OS_REPORT("camera: event: use 0.0 0.0 1.0 1.0\n"); + mEventData.field_0xf0.Init(4, bspTrans->mTimer + 1); + } + mEventData.field_0xf0.Step(); + + bspTrans->mSet1 = 0; + char* use1; + strcpy(use1, "xxxxxx"); + + iVar1 = getEvFloatListData(&bspTrans->mSet1, "Set1"); + if (iVar1 != 0) { + bspTrans->mSplinePath1.Init(iVar1, bspTrans->mTimer + 1); + bspTrans->mSplinePath1.Step(); + getEvStringData(use1, "Use1", "ooxxxx"); + + #ifdef DEBUG + if (strlen(use1) != 6) { + OSReport("camera: event: bad length -> xxxxxx\n"); + strcpy(use1, "xxxxxx"); + JUTAssertion::showAssert(JUTAssertion::getSDevice(), "d_ev_camera.cpp", 0x14f9, "0"); + OSPanic("d_ev_camera.cpp", 0x14f9, "Halt"); + } + #endif + } + + bspTrans->mSet2 = 0; + char* use2; + strcpy(use2, "xxxxxx"); + + iVar1 = getEvFloatListData(&bspTrans->mSet2, "Set2"); + if (iVar1 != 0) { + bspTrans->mSplinePath2.Init(iVar1, bspTrans->mTimer + 1); + bspTrans->mSplinePath2.Step(); + getEvStringData(use2, "Use2", "xxooox"); + + #ifdef DEBUG + if (strlen(use2) != 6) { + OSReport_Error("camera: event: bad length -> xxxxxx\n"); + strcpy(use2, "xxxxxx"); + JUTAssertion::showAssert(JUTAssertion::getSDevice(), "d_ev_camera.cpp", 0x1509, "0"); + OSPanic("d_ev_camera.cpp", 0x1509, "Halt"); + } + #endif + } + + bspTrans->mRelActorID = -1; + bspTrans->mRelActor = getEvActor("RelActor"); + if (bspTrans->mRelActor) { + getEvStringData(&bspTrans->mRelUseMask, "RelUseMask", "oo"); + + #ifdef DEBUG + if (strlen(bspTrans->mRelUseMask) != 2) { + OSReport_Error("camera: event: bad length -> xx\n"); + strcpy(&bspTrans->mRelUseMask, "xx"); + JUTAssertion::showAssert(JUTAssertion::getSDevice(), "d_ev_camera.cpp", 0x1515, "0"); + OSPanic("d_ev_camera.cpp", 0x1515, "Halt"); + } + #endif + + bspTrans->mRelActorID = fopAcM_GetID(bspTrans->mRelActor); + } + + getEvXyzData(&bspTrans->field_0x94, "Center", mCenter); + getEvXyzData(&bspTrans->field_0xa0, "Eye", mEye); + getEvFloatData(&bspTrans->field_0xac, "Fovy", mFovy); + getEvFloatData(&bspTrans->mCushion, "Cushion", 1.0f); + + for (int i = 0; i < 6; i++) { + int iVar2, iVar3; + if (isRelChar(*use1)) { + if (!isRelChar(*use2)) { + iVar3 = 1; + } else { + iVar3 = 2; + } + + iVar2 = iVar3; + } else { + iVar2 = 0; + } + + bspTrans->field_0xc0[i] = iVar2; + } + + bspTrans->field_0x78 = mCenter; + bspTrans->field_0x84 = mEye; + bspTrans->field_0x90 = mFovy; + } + + if (bspTrans->mRelActor == NULL || fopAcM_SearchByID(bspTrans->mRelActorID) == NULL) { + OS_REPORT("camera: event: error: relational base actor dead\n"); + return 1; + } + + cXyz sp60, sp70; + if (mCurCamStyleTimer < bspTrans->mTimer) { + struct { + cXyz sp48; + } pos; + + if (bspTrans->mRelActor == NULL) { + if (isRelChar(bspTrans->mRelUseMask)) { + pos.sp48 = relationalPos(bspTrans->mRelActor, &bspTrans->field_0x94); + } else { + pos.sp48 = bspTrans->field_0x94; + } + + if (isRelChar(bspTrans->field_0xb9)) { + sp3c = relationalPos(bspTrans->mRelActor, &bspTrans->field_0xa0); + } else { + sp3c = bspTrans->field_0xa0; + } + } else { + pos.sp48 = bspTrans->field_0x94; + sp3c = bspTrans->field_0xa0; + } + + mEventData.field_0xf0.Step(); + local_7c[0] = mEventData.field_0xf0.Calc(bspTrans->mBase); + if (bspTrans->mSet1 != 0) { + bspTrans->mSplinePath1.Step(); + local_7c[1] = bspTrans->mSplinePath1.Calc(bspTrans->mSet1); + } + + if (bspTrans->mSet2 != 0) { + bspTrans->mSplinePath2.Step(); + local_7c[2] = bspTrans->mSplinePath2.Calc(bspTrans->mSet2); + } + + sp64.x = bspTrans->field_0x78.x + (pos.sp48.x - bspTrans->field_0x78.x) * local_7c[bspTrans->field_0xc0[1]]; + sp64.y = bspTrans->field_0x78.y + (pos.sp48.y - bspTrans->field_0x78.y) * local_7c[bspTrans->field_0xc0[0]]; + sp64.z = bspTrans->field_0x78.z + (pos.sp48.z - bspTrans->field_0x78.z) * local_7c[bspTrans->field_0xc0[1]]; + + field_0x5c.mCenter += (sp64 - field_0x5c.mCenter) * bspTrans->mCushion; + + cSGlobe cStack_130(bspTrans->field_0x84 - bspTrans->field_0x78); + cSGlobe cStack_138(sp3c - pos.sp48); + cSGlobe cStack_140; + + cStack_140.R(cStack_130.R() + ((cStack_138.R() - cStack_130.R()) * local_7c[bspTrans->field_0xc0[2]])); + cStack_140.V(cStack_130.V() + ((cStack_138.V() - cStack_130.V()) * local_7c[bspTrans->field_0xc0[3]])); + cStack_140.U(cStack_130.U() + ((cStack_138.U() - cStack_130.U()) * local_7c[bspTrans->field_0xc0[4]])); + + sp70 = field_0x5c.mCenter + cStack_140.Xyz(); + field_0x5c.mEye += (sp70 - field_0x5c.mEye) * bspTrans->mCushion; + field_0x5c.mFovy += bspTrans->mCushion * ((bspTrans->field_0x90 + (bspTrans->field_0xac - bspTrans->field_0x90) * local_7c[bspTrans->field_0xc0[5]]) - field_0x5c.mFovy); + field_0x5c.mDirection.Val(field_0x5c.mEye - field_0x5c.mCenter); + return 0; + } else { + return 1; + } } /* 80097694-8009769C 091FD4 0008+00 0/0 1/0 0/0 .text portalWarpEvCamera__9dCamera_cFv */ @@ -3558,61 +4070,23 @@ bool dCamera_c::portalWarpEvCamera() { } /* 8009771C-80097738 09205C 001C+00 11/11 22/22 0/0 .text attentionPos__9dCamera_cFP10fopAc_ac_c */ -cXyz dCamera_c::attentionPos(fopAc_ac_c* param_0) { - // NONMATCHING +cXyz dCamera_c::attentionPos(fopAc_ac_c* a_this) { + return a_this->attention_info.position; } /* 80097738-8009775C 092078 0024+00 10/10 10/10 0/0 .text directionOf__9dCamera_cFP10fopAc_ac_c */ -// cSAngle dCamera_c::directionOf(fopAc_ac_c* param_0) { -extern "C" void directionOf__9dCamera_cFP10fopAc_ac_c() { - // NONMATCHING +cSAngle dCamera_c::directionOf(fopAc_ac_c* a_this) { + return a_this->shape_angle.y; } /* 8009775C-80097778 09209C 001C+00 9/9 20/20 0/0 .text positionOf__9dCamera_cFP10fopAc_ac_c */ -// void dCamera_c::positionOf(fopAc_ac_c* param_0) { -extern "C" void positionOf__9dCamera_cFP10fopAc_ac_c() { - // NONMATCHING -} - -/* 80097778-8009778C 0920B8 0014+00 1/1 4/4 0/0 .text setFlag__9dCamera_cFUl */ -// void dCamera_c::setFlag(u32 param_0) { -extern "C" void setFlag__9dCamera_cFUl() { - // NONMATCHING +cXyz dCamera_c::positionOf(fopAc_ac_c* a_this) { + return a_this->current.pos; } /* 8009778C-800977A8 0920CC 001C+00 1/1 2/2 0/0 .text eyePos__9dCamera_cFP10fopAc_ac_c */ -cXyz dCamera_c::eyePos(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 800977A8-800977B4 0920E8 000C+00 1/1 0/0 0/0 .text checkNoDraw__9daMidna_cCFv */ -// BOOL daMidna_c::checkNoDraw() const -extern "C" void checkNoDraw__9daMidna_cCFv() { - // NONMATCHING -} - -/* 800977B4-800977C0 0920F4 000C+00 1/1 1/1 0/0 .text checkMidnaRide__9daPy_py_cCFv */ -// void daPy_py_c::checkMidnaRide() const { -extern "C" void checkMidnaRide__9daPy_py_cCFv() { - // NONMATCHING -} - -/* 800977C0-800977D8 092100 0018+00 1/1 1/1 0/0 .text fopAcM_GetID__FPCv */ -// void fopAcM_GetID(void const* param_0) { -extern "C" void fopAcM_GetID__FPCv() { - // NONMATCHING -} - -/* 800977D8-800977F4 092118 001C+00 5/5 9/9 0/0 .text __as__4cXyzFRC4cXyz */ -// void cXyz::operator=(cXyz const& param_0) { -extern "C" void __as__4cXyzFRC4cXyz() { - // NONMATCHING -} - -/* 800977F4-80097810 092134 001C+00 5/5 9/9 0/0 .text __ct__4cXyzFRC4cXyz */ -// cXyz::cXyz(cXyz const& param_0) { -extern "C" void __ct__4cXyzFRC4cXyz() { - // NONMATCHING +cXyz dCamera_c::eyePos(fopAc_ac_c* a_this) { + return a_this->eyePos; } /* 80097810-8009784C 092150 003C+00 1/1 0/0 0/0 .text @@ -3627,33 +4101,3 @@ void func_80097810() { void func_8009784C() { /* empty function */ } - -/* 80097850-80097858 092190 0008+00 0/0 1/0 0/0 .text checkCanoeRide__9daPy_py_cCFv */ -// bool daPy_py_c::checkCanoeRide() const { -extern "C" bool checkCanoeRide__9daPy_py_cCFv() { - return false; -} - -/* 80097858-80097860 092198 0008+00 0/0 1/0 0/0 .text checkBoardRide__9daPy_py_cCFv */ -// bool daPy_py_c::checkBoardRide() const { -extern "C" bool checkBoardRide__9daPy_py_cCFv() { - return false; -} - -/* 80097860-80097868 0921A0 0008+00 0/0 1/0 0/0 .text checkSpinnerRide__9daPy_py_cCFv */ -// bool daPy_py_c::checkSpinnerRide() const { -extern "C" bool checkSpinnerRide__9daPy_py_cCFv() { - return false; -} - -/* 80097868-80097870 0921A8 0008+00 0/0 1/0 0/0 .text checkBoarRide__9daPy_py_cCFv */ -// bool daPy_py_c::checkBoarRide() const { -extern "C" bool checkBoarRide__9daPy_py_cCFv() { - return false; -} - -/* 80097870-80097878 0921B0 0008+00 0/0 1/0 0/0 .text getShadowTalkAtnPos__9daAlink_cFv */ -// void daAlink_c::getShadowTalkAtnPos() { -extern "C" void getShadowTalkAtnPos__9daAlink_cFv() { - // NONMATCHING -}