mirror of
https://github.com/zeldaret/ss
synced 2026-05-29 08:42:57 -04:00
porgress
This commit is contained in:
@@ -52,13 +52,13 @@ executeState_KrakenBorn__12dAcOBarrel_cFv = .text:0x00002CF0; // type:function s
|
||||
finalizeState_KrakenBorn__12dAcOBarrel_cFv = .text:0x00002DB0; // type:function size:0x4
|
||||
initializeState_Rebirth__12dAcOBarrel_cFv = .text:0x00002DC0; // type:function size:0x1AC
|
||||
executeState_Rebirth__12dAcOBarrel_cFv = .text:0x00002F70; // type:function size:0xE8
|
||||
fn_293_3060 = .text:0x00003060; // type:function size:0x1C
|
||||
calcTimer<Us>__4sLibFPUs_Us = .text:0x00003060; // type:function size:0x1C
|
||||
finalizeState_Rebirth__12dAcOBarrel_cFv = .text:0x00003080; // type:function size:0x4C
|
||||
fn_293_30D0__12dAcOBarrel_cFv = .text:0x000030D0; // type:function size:0xE0
|
||||
fn_293_31B0__12dAcOBarrel_cFv = .text:0x000031B0; // type:function size:0x3B0
|
||||
fn_293_3560__12dAcOBarrel_cFv = .text:0x00003560; // type:function size:0x24C
|
||||
fn_293_37B0__12dAcOBarrel_cFv = .text:0x000037B0; // type:function size:0x26C
|
||||
fn_293_3A20 = .text:0x00003A20; // type:function size:0x384
|
||||
updateMtx__12dAcOBarrel_cFv = .text:0x00003A20; // type:function size:0x384
|
||||
fn_293_3DB0__12dAcOBarrel_cFv = .text:0x00003DB0; // type:function size:0x44C
|
||||
fn_293_4200__12dAcOBarrel_cFv = .text:0x00004200; // type:function size:0x39C
|
||||
fn_293_45A0__12dAcOBarrel_cFv = .text:0x000045A0; // type:function size:0x4E4
|
||||
|
||||
@@ -3370,7 +3370,7 @@ fn_80096A60 = .text:0x80096A60; // type:function size:0x50
|
||||
targetScore__16AttentionManagerFP12dAcObjBase_cP12dAcObjBase_c = .text:0x80096AB0; // type:function size:0x88
|
||||
fn_80096B40__16AttentionManagerFP12dAcObjBase_c = .text:0x80096B40; // type:function size:0x80
|
||||
addPickUpTarget__16AttentionManagerFR12dAcObjBase_cf = .text:0x80096BC0; // type:function size:0x18
|
||||
addSitTarget__16AttentionManagerFR12dAcObjBase_cUlf = .text:0x80096BE0; // type:function size:0x20
|
||||
addSitTarget__16AttentionManagerFR12dAcObjBase_cfQ216AttentionManager7Flags_e = .text:0x80096BE0; // type:function size:0x20
|
||||
addExamineTalkTarget__16AttentionManagerFR12dAcObjBase_cUlffff = .text:0x80096C00; // type:function size:0x28
|
||||
addExamineTalkTarget__16AttentionManagerFR12dAcObjBase_cUlfff = .text:0x80096C30; // type:function size:0x28
|
||||
addCatchTarget__16AttentionManagerFR12dAcObjBase_cUlfff = .text:0x80096C60; // type:function size:0x30
|
||||
|
||||
@@ -149,10 +149,14 @@ public:
|
||||
return mRotation;
|
||||
}
|
||||
|
||||
mVec3_c getPostionDifference(const dAcBase_c &other) {
|
||||
mVec3_c getPostionDifference(const dAcBase_c &other) const {
|
||||
return mPosition - other.mPosition;
|
||||
}
|
||||
|
||||
f32 getHeightDifference(const dAcBase_c &b) const {
|
||||
return mPosition.y - b.mPosition.y;
|
||||
}
|
||||
|
||||
f32 getSquareDistanceTo(const mVec3_c &point) const {
|
||||
mVec3_c diff = mPosition - point;
|
||||
return diff.x * diff.x + diff.z * diff.z;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define D_A_PLAYER_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/d_a_item.h"
|
||||
#include "d/col/c/c_bg_s_poly_info.h"
|
||||
#include "d/d_player_mdl.h"
|
||||
@@ -93,6 +94,12 @@ public:
|
||||
return LINK;
|
||||
}
|
||||
|
||||
static dAcPy_c &GetLinkRM() {
|
||||
return *LINK;
|
||||
}
|
||||
static const dAcPy_c &GetLinkR() {
|
||||
return *LINK;
|
||||
}
|
||||
static dAcPy_c *GetLinkM() {
|
||||
return LINK;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ public:
|
||||
virtual ~dAcNpcCeFriend_c() {}
|
||||
|
||||
bool fn_11_17C0(dAcObjBase_c *);
|
||||
bool fn_11_2A40();
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcNpcCeFriend_c);
|
||||
|
||||
@@ -65,23 +65,29 @@ public:
|
||||
/** fn_293_4200 */
|
||||
void fn_293_4200();
|
||||
|
||||
/** fn_293_45A0 */
|
||||
/** Check to see if the Barrel should break */
|
||||
bool fn_293_45A0();
|
||||
|
||||
/** fn_293_4A90 */
|
||||
bool fn_293_4A90(const mAng &);
|
||||
|
||||
/** fn_293_4BC0 */
|
||||
/** Checks if On Lava or Sink Sand */
|
||||
bool fn_293_4BC0();
|
||||
|
||||
/** Checks if On Lava */
|
||||
bool fn_293_4C20() const;
|
||||
|
||||
/** fn_293_4C60 */
|
||||
bool fn_293_4C60();
|
||||
|
||||
/** fn_293_4D00 */
|
||||
/** Check to see if its below some range */
|
||||
bool fn_293_4CE0() const;
|
||||
|
||||
/** Check to see if its being moved. (like Conveyor) */
|
||||
bool fn_293_4D00();
|
||||
|
||||
/** fn_293_4ED0 */
|
||||
bool fn_293_4ED0();
|
||||
/** Check to see if it is being moved upwards? */
|
||||
bool fn_293_4ED0() const;
|
||||
|
||||
/** fn_293_4F80 */
|
||||
bool fn_293_4F80();
|
||||
@@ -89,12 +95,18 @@ public:
|
||||
/** fn_293_50B0 */
|
||||
bool fn_293_50B0();
|
||||
|
||||
/** fn_293_5150 */
|
||||
bool fn_293_5150();
|
||||
/** Perform Timeslip */
|
||||
void fn_293_5150();
|
||||
|
||||
/** fn_293_5360 */
|
||||
void fn_293_5360();
|
||||
|
||||
/** fn_293_5440 */
|
||||
void fn_293_5440();
|
||||
|
||||
/** fn_293_54D0 */
|
||||
void fn_293_54D0();
|
||||
|
||||
/** fn_293_5850 */
|
||||
void fn_293_5850(f32 *, bool);
|
||||
|
||||
@@ -151,7 +163,7 @@ private:
|
||||
/* 0xD80 */ mQuat_c quat_0xD80;
|
||||
/* 0xD90 */ mQuat_c quat_0xD90;
|
||||
/* 0xDA0 */ mQuat_c quat_0xDA0;
|
||||
/* 0xDB0 */ u8 _DB0[0xDBC - 0xDB0];
|
||||
/* 0xDB0 */ mVec3_c field_0xDB0; //< player direction vector
|
||||
/* 0xDBC */ mVec3_c field_0xDBC;
|
||||
/* 0xDC8 */ mVec3_c field_0xDC8;
|
||||
/* 0xDD4 */ f32 field_0xDD4;
|
||||
@@ -162,8 +174,12 @@ private:
|
||||
/* 0xDEE */ mAng field_0xDEE;
|
||||
/* 0xDF0 */ mAng field_0xDF0;
|
||||
/* 0xDF2 */ mAng field_0xDF2;
|
||||
/* 0xDF4 */ u8 _DF4[0xDFE - 0xDF4];
|
||||
/* 0xDF4 */ u16 field_0xDFE;
|
||||
/* 0xDF4 */ mAng field_0xDF4;
|
||||
/* 0xDF6 */ mAng field_0xDF6;
|
||||
/* 0xDF8 */ mAng field_0xDF8;
|
||||
/* 0xDFA */ mAng field_0xDFA;
|
||||
/* 0xDFC */ u16 field_0xDFC;
|
||||
/* 0xDFE */ u16 field_0xDFE;
|
||||
/* 0xE00 */ bool field_0xE00; //< Can Damage ?
|
||||
/* 0xE01 */ bool field_0xE01;
|
||||
/* 0xE02 */ bool field_0xE02;
|
||||
@@ -176,8 +192,8 @@ private:
|
||||
/* 0xE09 */ bool field_0xE09; //< for OBJ_VSD Present
|
||||
/* 0xE0A */ bool field_0xE0A;
|
||||
/* 0xE0B */ bool field_0xE0B;
|
||||
/* 0xE0C */ bool field_0xE0C;
|
||||
/* 0xE0D */ bool field_0xE0D;
|
||||
/* 0xE0C */ bool field_0xE0C; //< Timeslip Active
|
||||
/* 0xE0D */ bool field_0xE0D; //< Timeslip_rev Active
|
||||
/* 0xE0E */ bool field_0xE0E;
|
||||
/* 0xE0F */ u8 mType;
|
||||
/* 0xE10 */ u8 field_0xE10;
|
||||
|
||||
@@ -113,14 +113,18 @@ public:
|
||||
return mYOffset;
|
||||
}
|
||||
|
||||
bool checkStopped() const {
|
||||
return getVelocityMag() <= EGG::Math<f32>::epsilon();
|
||||
bool isFullyStopped(f32 speed = EGG::Math<f32>::epsilon()) const {
|
||||
return getVelocityMag() <= speed;
|
||||
}
|
||||
|
||||
bool checkSlower(f32 speed) const {
|
||||
bool isSpeedStopped(f32 speed = EGG::Math<f32>::epsilon()) const {
|
||||
return std::fabsf(mSpeed) <= speed;
|
||||
}
|
||||
|
||||
bool isVerticalSpeedStopped(f32 speed = EGG::Math<f32>::epsilon()) const {
|
||||
return std::fabsf(mVelocity.y) <= speed;
|
||||
}
|
||||
|
||||
bool checkYOffsetField_0x100() const {
|
||||
return mYOffset <= field_0x100;
|
||||
}
|
||||
@@ -205,7 +209,7 @@ public:
|
||||
u32 roomId
|
||||
);
|
||||
void fn_8002efa0();
|
||||
bool fn_8002eff0(f32 *, s16 *, f32 *, f32 *, f32 *);
|
||||
bool fn_8002eff0(const f32 &, const s16 &, cCcD_Obj *, const f32 &, const f32 &);
|
||||
void createChildAttached2(
|
||||
fProfile::PROFILE_NAME_e actorId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, u32 params2,
|
||||
u32 roomId
|
||||
|
||||
@@ -6,13 +6,11 @@
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/d_shadow.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dAcOChair_c : public dAcObjBase_c {
|
||||
public:
|
||||
|
||||
@@ -521,10 +521,16 @@ public:
|
||||
dBgS_GndChk &GetGnd() {
|
||||
return mGnd;
|
||||
}
|
||||
const dBgS_GndChk &GetGnd() const {
|
||||
return mGnd;
|
||||
}
|
||||
|
||||
dBgS_RoofChk &GetRoof() {
|
||||
return mRoof;
|
||||
}
|
||||
const dBgS_RoofChk &GetRoof() const {
|
||||
return mRoof;
|
||||
}
|
||||
|
||||
void SetField_0xD4(f32 v) {
|
||||
field_0x0D4 = v;
|
||||
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
cM3d_CalcPla(v1, v2, v3, &mNormal, &mD);
|
||||
}
|
||||
f32 getCrossY_NonIsZero(const mVec3_c *param_1) {
|
||||
return ((-mNormal.x * param_1->x - mNormal.z * param_1->z) - mD) / mNormal.y;
|
||||
return -(mNormal.x * param_1->x + mNormal.z * param_1->z) / mNormal.y;
|
||||
}
|
||||
|
||||
f32 GetXZDist() const {
|
||||
|
||||
+9
-1
@@ -6,6 +6,7 @@
|
||||
#include "m/m_vec.h"
|
||||
#include "math.h"
|
||||
#include "nw4r/math/math_triangular.h"
|
||||
#include "s/s_Math.h"
|
||||
|
||||
struct mAng {
|
||||
mAng() {}
|
||||
@@ -35,6 +36,9 @@ struct mAng {
|
||||
void set(s16 val) {
|
||||
mVal = val;
|
||||
}
|
||||
void setF(const f32 &val) {
|
||||
mVal = val;
|
||||
}
|
||||
|
||||
s16 *ref() {
|
||||
return &mVal;
|
||||
@@ -65,6 +69,10 @@ struct mAng {
|
||||
return *this;
|
||||
}
|
||||
|
||||
s32 absDiff(const mAng &other) const {
|
||||
return sLib::absDiff(mVal, other.mVal);
|
||||
}
|
||||
|
||||
static s32 abs(const mAng b) {
|
||||
return labs(b);
|
||||
}
|
||||
@@ -98,7 +106,7 @@ struct mAng {
|
||||
return mVal * sAngToRad;
|
||||
}
|
||||
|
||||
static s16 fromRad(f32 rad) {
|
||||
static mAng fromRad(f32 rad) {
|
||||
return rad * sRadToAng;
|
||||
}
|
||||
|
||||
|
||||
+6
-2
@@ -147,11 +147,15 @@ public:
|
||||
MTXMultVecSR(*this, in, out);
|
||||
}
|
||||
mVec3_c multVecSR(const mVec3_c &v) const {
|
||||
mVec3_c ret = v;
|
||||
MTXMultVecSR(*this, ret, ret);
|
||||
mVec3_c ret;
|
||||
multVecSR(v, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void multVecSR(mVec3_c &v) const {
|
||||
multVecSR(v, v);
|
||||
}
|
||||
|
||||
mMtx_c &operator+=(const mMtx_c &rhs) {
|
||||
MTXConcat(*this, rhs, *this);
|
||||
return *this;
|
||||
|
||||
@@ -174,7 +174,12 @@ private:
|
||||
|
||||
public:
|
||||
static AttentionManager *sInstance;
|
||||
|
||||
enum Flags_e {
|
||||
FLAGS_0,
|
||||
FLAGS_1,
|
||||
FLAGS_2,
|
||||
FLAGS_3,
|
||||
};
|
||||
bool create();
|
||||
bool createHeap();
|
||||
bool execute();
|
||||
@@ -183,7 +188,7 @@ public:
|
||||
void addTarget(dAcObjBase_c &actor, const InteractionTargetDef &def, u32, mVec3_c *);
|
||||
|
||||
void addPickUpTarget(dAcObjBase_c &actor, f32 field_0x14);
|
||||
void addSitTarget(dAcObjBase_c &actor, u32 flags, f32 field_0x14);
|
||||
void addSitTarget(dAcObjBase_c &actor, f32 field_0x14, Flags_e flags);
|
||||
|
||||
void addTalkTarget_unused(dAcObjBase_c &actor);
|
||||
|
||||
|
||||
@@ -8,10 +8,12 @@
|
||||
#include "d/a/npc/d_a_npc_ce_friend.h"
|
||||
#include "d/a/npc/d_a_npc_ce_lady.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_pc.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/col/bg/d_bg_s_gnd_chk.h"
|
||||
#include "d/col/bg/d_bg_s_lin_chk.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/c/c_m3d_g_tri.h"
|
||||
#include "d/col/c/c_m3d_g_pla.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/col/cc/d_cc_s.h"
|
||||
#include "d/d_linkage.h"
|
||||
@@ -22,18 +24,45 @@
|
||||
#include "f/f_base.h"
|
||||
#include "f/f_profile_name.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_quat.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "math.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "nw4r/math/math_arithmetic.h"
|
||||
#include "rvl/MTX/mtxvec.h"
|
||||
#include "rvl/MTX/vec.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/attention.h"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
#include "toBeSorted/special_item_drop_mgr.h"
|
||||
|
||||
// Begin HIO
|
||||
// Pattern based on TP naming sceme class_HIOParam/class_Param_c
|
||||
struct dAcOBarrel_c_HIOParam {
|
||||
f32 _0;
|
||||
f32 _1;
|
||||
f32 _2;
|
||||
f32 _3;
|
||||
f32 _4;
|
||||
f32 _5;
|
||||
s16 _6;
|
||||
f32 _7;
|
||||
s16 _8;
|
||||
f32 _9;
|
||||
f32 _10;
|
||||
s16 _12;
|
||||
f32 _11;
|
||||
f32 _13;
|
||||
};
|
||||
struct dAcOBarrel_c_Param_c {
|
||||
static const dAcOBarrel_c_HIOParam m;
|
||||
};
|
||||
const dAcOBarrel_c_HIOParam dAcOBarrel_c_Param_c::m = {2.5f, 10.f, 7.f, 0.125f, 0.2f, 0.2f, 0x5A00,
|
||||
15.f, 0x0500, 0.8f, 10.f, 0x0300, 0.8f, 5.f};
|
||||
// End HIO
|
||||
|
||||
// Data Floats
|
||||
f32 sFloats1(1.f);
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_BARREL, dAcOBarrel_c, fProfile::OBJ_BARREL, 0x239, 0, 3);
|
||||
@@ -48,7 +77,7 @@ STATE_DEFINE(dAcOBarrel_c, Water2);
|
||||
STATE_DEFINE(dAcOBarrel_c, Explode);
|
||||
STATE_DEFINE(dAcOBarrel_c, KrakenBorn);
|
||||
STATE_DEFINE(dAcOBarrel_c, Rebirth);
|
||||
|
||||
namespace {
|
||||
static dCcD_SrcCyl sSrcCyl = {
|
||||
{
|
||||
/* mObjAt */ {AT_TYPE_PHYSICS, 0x10013, {0, 0, 0}, 4, 0, 0, 0, 0, 0},
|
||||
@@ -73,6 +102,7 @@ static dCcD_SrcSph sSrcSph = {
|
||||
},
|
||||
{55.f}
|
||||
};
|
||||
} // namespace
|
||||
|
||||
static const char *sBarrelResFile[] = {
|
||||
"Barrel", // Normal
|
||||
@@ -99,6 +129,12 @@ bool dAcOBarrel_c::createHeap() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void dummy_func() {
|
||||
struct f {
|
||||
f32 a;
|
||||
} a = {2.f};
|
||||
}
|
||||
|
||||
int dAcOBarrel_c::actorCreate() {
|
||||
field_0xE18 = getFromParams(12, 0xFF);
|
||||
mBrokenFlag = getFromParams(20, 0xFF);
|
||||
@@ -138,9 +174,9 @@ int dAcOBarrel_c::actorCreate() {
|
||||
field_0xDEC = mAng::Zero();
|
||||
quat_0xD50.set(1.f, 0.f, 0.f, 0.f);
|
||||
mScale.set(1.f, 1.f, 1.f);
|
||||
quat_0xD70.set(1.f, 0.f, 0.f, 0.f);
|
||||
quat_0xD80.set(1.f, 0.f, 0.f, 0.f);
|
||||
quat_0xD90.set(1.f, 0.f, 0.f, 0.f);
|
||||
quat_0xD80.set(1.f, 0.f, 0.f, 0.f);
|
||||
quat_0xD70.set(1.f, 0.f, 0.f, 0.f);
|
||||
quat_0xDA0.set(1.f, 0.f, 0.f, 0.f);
|
||||
|
||||
if (isType_0()) {
|
||||
@@ -156,7 +192,7 @@ int dAcOBarrel_c::actorCreate() {
|
||||
field_0xE02 = true;
|
||||
mQuat_c qz, qx;
|
||||
qx.setAxisRotation(mVec3_c::Ex, mRotation.x.radian());
|
||||
qz.setAxisRotation(mVec3_c::Ez, mRotation.x.radian());
|
||||
qz.setAxisRotation(mVec3_c::Ez, mRotation.z.radian());
|
||||
quat_0xD80 = qx * qz;
|
||||
|
||||
mRotation.x = mAng::Zero();
|
||||
@@ -168,13 +204,13 @@ int dAcOBarrel_c::actorCreate() {
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
if (mType == 3) {
|
||||
if (mType == Kraken) {
|
||||
mStateMgr.changeState(StateID_KrakenBorn);
|
||||
} else {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
getLinkage().set(0x24, 51.f, 0.f, 0.f, nullptr);
|
||||
}
|
||||
updateMatrix();
|
||||
updateMtx();
|
||||
getLinkage().bushTpFunc(mObjAcch);
|
||||
|
||||
mBoundingBox.Set(mVec3_c(-55.f, -10.f, -55.f), mVec3_c(55.f, 150.f, 55.f));
|
||||
@@ -353,7 +389,7 @@ void dAcOBarrel_c::executeState_Wait() {
|
||||
if (mObjAcch.ChkGroundLanding() && !field_0xE0E) {
|
||||
fn_293_37B0();
|
||||
if (mVelocity.y > 0.f) {
|
||||
dJEffManager_c::spawnGroundEffect(mPosition, mPolyAttr0, mPolyAttr1, mVelocity, 0, 1.f, field_0x1B0);
|
||||
dJEffManager_c::spawnGroundEffect(mPosition, mPolyAttr0, mPolyAttr1, field_0x1B4, 0, 1.f, field_0x1B0);
|
||||
}
|
||||
|
||||
if (field_0xE0A) {
|
||||
@@ -448,13 +484,16 @@ void dAcOBarrel_c::initializeState_GrabUp() {
|
||||
// This entire function seems goofy
|
||||
mVec3_c v = mVec3_c::Ey;
|
||||
MTXMultVecSR(mWorldMtx, v, v);
|
||||
mAng rotX = mAng::fromRad(v.angle(mVec3_c::Ex));
|
||||
bool z = rotX > 0x4000;
|
||||
|
||||
mAng rotX = mAng::fromRad(v.angle(mVec3_c::Ex));
|
||||
mAng rotY = dAcPy_c::GetLink()->mRotation.y - mRotation.y;
|
||||
|
||||
bool z = rotX > 0x4000;
|
||||
|
||||
mQuat_c qy, qz;
|
||||
qy.setAxisRotation(mVec3_c::Ey, mAng::short2rad(sLib::absDiff(rotY, 0) > 0x4000 ? rotY += 0x8000 : rotY));
|
||||
qy.setAxisRotation(
|
||||
mVec3_c::Ey, mAng::short2rad(rotY.absDiff(0) > mAng::deg2short(90.f) ? rotY += mAng::deg2short(180.f) : rotY)
|
||||
);
|
||||
qz.setAxisRotation(mVec3_c::Ez, mAng::short2rad(z ? 0x4000 : -0x4000));
|
||||
|
||||
quat_0xD60 = qy * qz;
|
||||
@@ -525,6 +564,11 @@ void dAcOBarrel_c::executeState_GrabPut() {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dumb_rodata_ordering() {
|
||||
struct {
|
||||
f32 a;
|
||||
} a = {-0.f};
|
||||
}
|
||||
void dAcOBarrel_c::finalizeState_GrabPut() {
|
||||
field_0xE02 = false;
|
||||
quat_0xD80 = quat_0xD50;
|
||||
@@ -535,13 +579,11 @@ void dAcOBarrel_c::finalizeState_GrabPut() {
|
||||
}
|
||||
mCyl.OnAtSet();
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::initializeState_Slope() {
|
||||
mVec3_c vz_out;
|
||||
cM3dGTri tri;
|
||||
cM3dGPla tri;
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.GetGnd(), &tri);
|
||||
|
||||
if (checkSlower(EGG::Math<f32>::epsilon())) {
|
||||
if (isSpeedStopped()) {
|
||||
mAngle.y = tri.GetAngleY();
|
||||
mSpeed = 5.f;
|
||||
}
|
||||
@@ -551,8 +593,8 @@ void dAcOBarrel_c::initializeState_Slope() {
|
||||
mAng ang(mAng::abs(mAngle.y - field_0xDEE));
|
||||
field_0xDF0 = nw4r::math::FSqrt(ang.degree2() / 180.f) * 910.f;
|
||||
|
||||
MTXMultVecSR(mWorldMtx, -mVec3_c::Ez, vz_out);
|
||||
field_0xDEA = vz_out.atan2sX_Z();
|
||||
mVec3_c v = mWorldMtx.multVecSR(-mVec3_c::Ez);
|
||||
field_0xDEA = mAng::fromVec(v);
|
||||
|
||||
field_0xE09 = false;
|
||||
|
||||
@@ -592,7 +634,7 @@ void dAcOBarrel_c::executeState_Slope() {
|
||||
|
||||
fn_293_3560();
|
||||
|
||||
if (checkSlower(EGG::Math<f32>::epsilon())) {
|
||||
if (isSpeedStopped(EGG::Math<f32>::epsilon())) {
|
||||
field_0xE00 = false;
|
||||
} else if (field_0xE02) {
|
||||
field_0xE00 = fn_293_4F80();
|
||||
@@ -809,3 +851,361 @@ void dAcOBarrel_c::finalizeState_Rebirth() {
|
||||
setActorProperty(AC_PROP_0x1);
|
||||
mStts.SetRank(9);
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_30D0() {
|
||||
if (isSpeedStopped() && field_0xDFC == 0) {
|
||||
if (field_0xE05 && mCeFriend.isLinked()) {
|
||||
dAcNpcCeFriend_c *pFriend = mCeFriend.get();
|
||||
if (pFriend && pFriend->fn_11_2A40()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AttentionManager *pAttnMgr = AttentionManager::GetInstance();
|
||||
if (mYOffset >= 0.f) {
|
||||
pAttnMgr->addPickUpTarget(*this, 120.f);
|
||||
pAttnMgr->addUnk3Target(*this, 1, 500.f, -200.f, 200.f);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_31B0() {
|
||||
cM3dGPla pla;
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.GetGnd(), &pla);
|
||||
|
||||
mAng nrmAngle = mAng::fromRad(field_0xDBC.angle(pla.GetN()));
|
||||
if (nrmAngle > mAng::deg2short(75)) {
|
||||
field_0xE06 = true;
|
||||
}
|
||||
|
||||
field_0xDBC = pla.GetN();
|
||||
|
||||
mVelocity += pla.GetN() * 7.f;
|
||||
mVelocity.y = pla.getCrossY_NonIsZero(&mVelocity);
|
||||
|
||||
mSpeed = nw4r::math::FSqrt(mVelocity.squareMagXZ());
|
||||
mSpeed = cM::minMaxLimit(mSpeed, -20.f, 20.f);
|
||||
|
||||
if (mAng::fromVec(pla.GetN()).absDiff(mAngle.y) < 0x2000) {
|
||||
sLib::addCalcAngle(mAngle.y.ref(), pla.GetAngleY(), 5, 0x71C, 0x100);
|
||||
} else {
|
||||
mAngle.y = mAng::fromVec(mVelocity);
|
||||
}
|
||||
|
||||
if (!isSpeedStopped()) {
|
||||
mAng ang = pla.GetAngleY();
|
||||
mAng target = ang - 0x8000;
|
||||
mVec3_c v = mWorldMtx.multVecSR(-mVec3_c::Ez);
|
||||
|
||||
field_0xDEA = mAng::fromVec(v);
|
||||
if (target.absDiff(field_0xDEA) > 0x4000) {
|
||||
target = ang;
|
||||
} else {
|
||||
target = ang - 0x8000;
|
||||
}
|
||||
if (field_0xE00 && field_0xE02) {
|
||||
field_0xE01 = fn_293_4ED0();
|
||||
target -= field_0xDEA;
|
||||
sLib::addCalcAngle(field_0xDEC.ref(), target, 10, mAng::deg2short(5), 0x100);
|
||||
}
|
||||
|
||||
mQuat_c q;
|
||||
q.setAxisRotation(mVec3_c::Ey, field_0xDEC.radian());
|
||||
quat_0xD70.slerpTo(q, 0.3f, quat_0xD70);
|
||||
}
|
||||
if (field_0xE09) {
|
||||
quat_0xD70.set(1.f, 0.f, 0.f, 0.f);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_3560() {
|
||||
f32 f = field_0xE11 == 3 ? 0.2f : 0.125f;
|
||||
|
||||
cM3dGPla pla;
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.GetGnd(), &pla);
|
||||
|
||||
mAng nrmAngle = mAng::fromRad(mVec3_c::Ey.angle(pla.GetN()));
|
||||
|
||||
f *= nrmAngle.cos();
|
||||
if (nrmAngle < mAng::deg2short(5) || mAng::fromVec(pla.GetN()).absDiff(mAngle.y) > 0x4000) {
|
||||
if (!field_0xE00) {
|
||||
f *= 8.f;
|
||||
}
|
||||
sLib::chase(&mSpeed, 0.f, f + getYOffset() * -0.05f);
|
||||
} else {
|
||||
if (!field_0xE00) {
|
||||
if (mStateMgr.isState(StateID_Slope)) {
|
||||
f = -f * 2.f - 1.5f;
|
||||
} else {
|
||||
f *= -8.f;
|
||||
}
|
||||
}
|
||||
mSpeed = cM::minMaxLimit(mSpeed + f, 0.f, 30.f);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_37B0() {}
|
||||
|
||||
void dAcOBarrel_c::updateMtx() {}
|
||||
|
||||
void dAcOBarrel_c::fn_293_3DB0() {}
|
||||
|
||||
void dAcOBarrel_c::fn_293_4200() {}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_45A0() {
|
||||
if (field_0xE06) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Amos -> Armos. A Barrel hitting a Armos will break it
|
||||
if (mCyl.ChkAtHit()) {
|
||||
if (mCyl.GetAtFlag0x2() || mCyl.GetAtFlag0x4() || mCyl.GetAtActor()->mProfileName == fProfile::E_AM) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (mObjAcch.ChkWallHit(nullptr)) {
|
||||
if (mAng(mAcchCir.GetWallAngleY()).absDiff(mAngle.y) > mAng::deg2short(70) && mSpeed > 5.f) {
|
||||
return true;
|
||||
}
|
||||
if (mStateMgr.isState(StateID_GrabPut) && dAcPy_c::GetLink()->checkCurrentAction(/* PUT_DOWN_MEDIUM */ 0x42)) {
|
||||
mVec3_c put = mVec3_c::Ez * 50.f;
|
||||
put.rotY(mAcchCir.GetWallAngleY());
|
||||
|
||||
mVec3_c end = mPosition + put;
|
||||
if (dBgS_ObjLinChk::LineCross(&mPosition, &end, this)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mCyl.ChkTgHit() &&
|
||||
mCyl.ChkTgAtHitType(AT_TYPE_SWORD | AT_TYPE_BOMB | AT_TYPE_DAMAGE | AT_TYPE_BUBBLE | AT_TYPE_0x800000)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mCyl.ChkTgHit() && mCyl.ChkTgAtHitType(AT_TYPE_PHYSICS)) {
|
||||
if (mCyl.GetTgActor()->mProfileName == fProfile::OBJ_STEP_STATUE ||
|
||||
mCyl.GetTgActor()->mProfileName == fProfile::OBJ_PUSH_BLOCK) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Unreachable condition due to first check
|
||||
if (mCyl.ChkTgHit() && mCyl.ChkTgAtHitType(AT_TYPE_DAMAGE)) {
|
||||
if (mCyl.GetTgActor()->mProfileName == fProfile::E_BC) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!mObjAcch.ChkGndHit()) {
|
||||
if (mCyl.ChkCoHit() && !getLinkage().checkState(dLinkage_c::STATE_ACTIVE) &&
|
||||
mCyl.GetCoActor()->mTargetFiRelated == 4 && mSpeed > 0.f) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (mType == Explode && (mStateMgr.isState(StateID_Water) || mStateMgr.isState(StateID_Water2))) {
|
||||
if (mCyl.ChkCoHit()) {
|
||||
dAcObjBase_c *pActor = mCyl.GetCoActor();
|
||||
if (pActor->isPlayer() || pActor->mProfileName == fProfile::OBJ_TIME_BOAT) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mObjAcch.ChkGndHit() && mYOffset >= 0.f) {
|
||||
if ((!isType_0() && field_0xDD8.y < -500.f) || (isType_0() && field_0xDD8.y < -1000.f)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return fn_293_4CE0();
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_4A90(const mAng &ang) {
|
||||
f32 rad;
|
||||
s32 diff;
|
||||
cM3dGPla tri;
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.GetGnd(), &tri);
|
||||
|
||||
rad = mVec3_c::Ey.angle(tri.GetN());
|
||||
return ang < mAng::fromRad(rad).absDiff(0);
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_4BC0() {
|
||||
int code = dBgS::GetInstance()->GetSpecialCode(mObjAcch.GetGnd());
|
||||
return code == POLY_ATTR_LAVA || code == POLY_ATTR_SAND_MED || code == POLY_ATTR_SAND_DEEP_INSTANT ||
|
||||
code == POLY_ATTR_SAND_DEEP_SLOW;
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_4C20() const {
|
||||
int code = dBgS::GetInstance()->GetSpecialCode(mObjAcch.GetGnd());
|
||||
return code == POLY_ATTR_LAVA;
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_4C60() {
|
||||
f32 f = mPosition.y - 51.f;
|
||||
if (mType == Type2) {
|
||||
f = mPosition.y + 51.f * mAng(0); // eh this works
|
||||
}
|
||||
|
||||
return mObjAcch.ChkWaterHit() && f < mObjAcch.GetWtrGroundH();
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_4CE0() const {
|
||||
return field_0xDD8.y < -10000.f;
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_4D00() {
|
||||
return (
|
||||
!getLinkage().checkState(dLinkage_c::STATE_ACTIVE) // ensure not Linked
|
||||
&& mStateMgr.isState(StateID_Wait) // Must be on normal ground
|
||||
&& !field_0xE02 && !field_0xE08 //
|
||||
&& mYOffset >= 0.f //
|
||||
&& mObjAcch.ChkGndHit() && dBgS::GetInstance()->ChkMoveBG(mObjAcch.GetGnd(), true) //
|
||||
&& isSpeedStopped() && isVerticalSpeedStopped() // No Movement XZ or Y
|
||||
&& !fn_293_4A90(mAng::deg2short(0.09f)) // Perfectly Flat Ground
|
||||
);
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_4ED0() const {
|
||||
mVec3_c up = mVec3_c::Ey, v;
|
||||
mWorldMtx.multVecSR(up);
|
||||
|
||||
mQuat_c q;
|
||||
q.setAxisRotation(up, DEG_TO_RAD(1));
|
||||
|
||||
mMtx_c m;
|
||||
m.fromQuat(q);
|
||||
|
||||
m.multVecSR(mVelocity, v);
|
||||
return (v.y - mVelocity.y) > 0.f;
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_4F80() {
|
||||
mVec3_c up = mVec3_c::Ey;
|
||||
mWorldMtx.multVecSR(up);
|
||||
|
||||
f32 rad = up.angle(mVelocity);
|
||||
mAng ang = mAng::fromRad(rad);
|
||||
return mAng::deg2short(75.f) < ang && ang < (mAng::deg2short(105.005f));
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_50B0() {
|
||||
return (
|
||||
field_0xE00 && field_0xE02 && mSpeed > 15.f && getXZAngleToPlayer().absDiff(mAngle.y) <= mAng::deg2short(60)
|
||||
);
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_5150() {
|
||||
mVec3_c v = mPosition;
|
||||
v.y += field_0xE02 ? 25.f : 50.f;
|
||||
mVec3_c scale(0.75f, 0.75f, 0.75f);
|
||||
|
||||
if (mType == Explode) {
|
||||
mTimeArea.check(mRoomID, mPosition, 0, 0.f, 0.1f);
|
||||
|
||||
f32 scaleTarget = getFromParams(8, 0x3) == 0 ? 2.5f : 1.f;
|
||||
scale *= scaleTarget;
|
||||
|
||||
if (isWithinPlayerRadius(5800.f)) {
|
||||
if (mScale.y == 0.f) {
|
||||
if (!field_0xE0C) {
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_465_, v, nullptr, &scale, nullptr, nullptr, 0, 0
|
||||
);
|
||||
startSound(SE_TIMESLIP_TIMESLIP);
|
||||
field_0xE0C = true;
|
||||
}
|
||||
} else {
|
||||
field_0xE0C = false;
|
||||
}
|
||||
sLib::chase(&mScale.y, scaleTarget, scaleTarget * 0.2f);
|
||||
} else {
|
||||
if (mScale.y == scaleTarget) {
|
||||
if (!field_0xE0D) {
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_465_, v, nullptr, &scale, nullptr, nullptr, 0, 0
|
||||
);
|
||||
startSound(SE_TIMESLIP_TIMESLIP_REV);
|
||||
field_0xE0D = true;
|
||||
}
|
||||
} else {
|
||||
field_0xE0D = false;
|
||||
}
|
||||
sLib::chase(&mScale.y, 0.f, 0.2f);
|
||||
}
|
||||
|
||||
mScale.x = mScale.z = mScale.y;
|
||||
}
|
||||
}
|
||||
void dAcOBarrel_c::fn_293_5360() {
|
||||
if (!field_0xE03) {
|
||||
static const s16 s = 0x2000;
|
||||
field_0xE03 = fn_8002eff0(120.f, s, &mCyl, 10.f, -10.f);
|
||||
}
|
||||
|
||||
if (!field_0xE04 && !field_0xE05) {
|
||||
fn_293_54D0();
|
||||
|
||||
if (field_0xE03 && dAcPy_c::GetLink()->checkFlags0x350(0x2000)) {
|
||||
field_0xE03 = false;
|
||||
|
||||
if (field_0xDFC != 0) {
|
||||
fn_293_4200();
|
||||
} else if (mType == Explode) {
|
||||
fn_293_4200();
|
||||
|
||||
} else {
|
||||
fn_293_5440();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_5440() {
|
||||
field_0xDB0 = dAcPy_c::GetLink()->mVelocity;
|
||||
field_0xDB0.y = 0.f;
|
||||
field_0xDB0.normalize();
|
||||
field_0xDF8.setF(1820.f);
|
||||
field_0xDFA.setF(2730.f);
|
||||
field_0xDFC = 90;
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_54D0() {
|
||||
if (0 != sLib::calcTimer(&field_0xDFC)) {
|
||||
mMtx_c m;
|
||||
|
||||
mVec3_c vy = mVec3_c::Ey, vx = mVec3_c::Ex;
|
||||
mQuat_c qplayer1, qplayer0;
|
||||
|
||||
qplayer0.setAxisRotation(field_0xDB0, mAng(field_0xDF4.sin() * field_0xDF8).radian());
|
||||
field_0xDF4 += mAng::deg2short(12);
|
||||
if (mAng::abs(field_0xDF4) < mAng::deg2short(12)) {
|
||||
field_0xDF8 *= dAcOBarrel_c_Param_c::m._11;
|
||||
}
|
||||
|
||||
m.makeRotationFromVecs(mVec3_c::Ez, field_0xDB0, 1.f);
|
||||
m.multVecSR(vx);
|
||||
|
||||
qplayer1.setAxisRotation(vx, mAng(field_0xDF6.sin() * field_0xDFA).radian());
|
||||
field_0xDF6 += mAng::deg2short(20);
|
||||
if (mAng::abs(field_0xDF6) < mAng::deg2short(20)) {
|
||||
field_0xDFA *= dAcOBarrel_c_Param_c::m._9;
|
||||
}
|
||||
|
||||
quat_0xDA0 = qplayer0 * qplayer1;
|
||||
|
||||
} else {
|
||||
mQuat_c q;
|
||||
q.set(1.f, 0.f, 0.f, 0.f);
|
||||
quat_0xDA0.slerpTo(q, 0.2f, quat_0xDA0);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_5850(f32 *, bool) {}
|
||||
|
||||
void dAcOBarrel_c::fn_293_58C0() {}
|
||||
|
||||
void dAcOBarrel_c::fn_293_5910() {}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "d/a/obj/d_a_obj_chair.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/d_a_item.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
@@ -160,7 +161,7 @@ int dAcOChair_c::actorExecute() {
|
||||
|
||||
if (!isBench()) {
|
||||
if (isChairTypeIdk0() && !checkObjectProperty(OBJ_PROP_0x8000)) {
|
||||
if (sLib::absDiff(getRotation().y, getXZAngleToPlayer()) > 910) {
|
||||
if (mRotation.y.absDiff(getXZAngleToPlayer()) > mAng::deg2short(5)) {
|
||||
getRotation().y = getXZAngleToPlayer();
|
||||
}
|
||||
}
|
||||
@@ -174,7 +175,7 @@ int dAcOChair_c::actorExecute() {
|
||||
mMdl.calc(false);
|
||||
} else {
|
||||
if (isChairTypeIdk0() && !checkObjectProperty(OBJ_PROP_0x8000)) {
|
||||
if (sLib::absDiff(getRotation().y, getXZAngleToPlayer()) > 910) {
|
||||
if (mRotation.y.absDiff(getXZAngleToPlayer()) > mAng::deg2short(5)) {
|
||||
getRotation().y = getXZAngleToPlayer();
|
||||
}
|
||||
}
|
||||
@@ -197,7 +198,7 @@ int dAcOChair_c::draw() {
|
||||
void dAcOChair_c::initializeState_Wait() {}
|
||||
|
||||
void dAcOChair_c::executeState_Wait() {
|
||||
const f32 height_diff = mPosition.y - dAcPy_c::GetLink()->mPosition.y;
|
||||
const f32 height_diff = getHeightDifference(dAcPy_c::GetLinkR());
|
||||
if (!isBench() || (50.f < height_diff && height_diff < 60.f)) {
|
||||
if (field_0xB1A && field_0xB1B) {
|
||||
if (dAcPy_c::GetLink()->checkActionFlagsCont(0x1000)) {
|
||||
@@ -207,12 +208,13 @@ void dAcOChair_c::executeState_Wait() {
|
||||
return;
|
||||
}
|
||||
if (field_0xB1C && mChairType == CHAIR_E) {
|
||||
const f32 mag = (mChairPos - mPositionCopy2).squareMagXZ();
|
||||
if (mag < 10000.f) {
|
||||
if (mChairPos.squareDistanceToXZ(mPositionCopy2) < 10000.f) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
AttentionManager::GetInstance()->addSitTarget(*this, isBench() ? 0 : 3, 120.f);
|
||||
AttentionManager::GetInstance()->addSitTarget(
|
||||
*this, 120.f, isBench() ? AttentionManager::FLAGS_0 : AttentionManager::FLAGS_3
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,8 +164,7 @@ void dAcOGrave_c::executeState_Wait() {
|
||||
mAnmMatClr.setRate(1.f, 0);
|
||||
}
|
||||
}
|
||||
mAng ang = getXZAngleToPlayer();
|
||||
s32 diff = sLib::absDiff(ang, mRotation.y);
|
||||
s32 diff = getXZAngleToPlayer().absDiff(mRotation.y);
|
||||
if (field_0x7F6) {
|
||||
mOrigPos2 = mPosition;
|
||||
vecCylCalc(mOrigPos2, mAngle.y, dAcPy_c::sPushRelatedConstant);
|
||||
|
||||
@@ -626,7 +626,7 @@ void dAcOtubo_c::attemptDestroy() {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mObjAcch.ChkWallHit(nullptr) && sLib::absDiff(mAcchCir.GetWallAngleY(), mAngle.y) > mAng::deg2short(70.f)) {
|
||||
if (mObjAcch.ChkWallHit(nullptr) && mAng(mAcchCir.GetWallAngleY()).absDiff(mAngle.y) > mAng::deg2short(70.f)) {
|
||||
attemptDestroyOnWall();
|
||||
mAngle.y = mAcchCir.GetWallAngleY();
|
||||
mSpeed *= 0.5f;
|
||||
@@ -672,7 +672,7 @@ void dAcOtubo_c::attemptDestroy() {
|
||||
}
|
||||
|
||||
void dAcOtubo_c::attemptDestroyOnWall(const u32 ¶m0, const bool ¶m1) {
|
||||
if (param1 && sLib::absDiff(mAcchCir.GetWallAngleY(), mAngle.y) > mAng::deg2short(70.f) && 15.f < mSpeed) {
|
||||
if (param1 && mAng(mAcchCir.GetWallAngleY()).absDiff(mAngle.y) > mAng::deg2short(70.f) && 15.f < mSpeed) {
|
||||
destroy();
|
||||
}
|
||||
}
|
||||
@@ -746,8 +746,7 @@ void dAcOtubo_c::adjustAngle() {
|
||||
mSpeed = nw4r::math::FSqrt(mVelocity.x * mVelocity.x + mVelocity.z * mVelocity.z);
|
||||
mSpeed = cM::minMaxLimit(mSpeed, -30.f, 30.f);
|
||||
|
||||
mAng a = mAng::fromVec(pla.GetN()); // Probably mean to be angle from Ey
|
||||
if (sLib::absDiff(a, mAngle.y) < mAng::deg2short(90.f)) {
|
||||
if (mAng::fromVec(pla.GetN()).absDiff(mAngle.y) < mAng::deg2short(90.f)) {
|
||||
sLib::addCalcAngle(mAngle.y.ref(), pla.GetAngleY(), 5, 0x71C, 0x100);
|
||||
} else {
|
||||
mAngle.y = mAng::fromVec(mVelocity);
|
||||
@@ -761,8 +760,7 @@ void dAcOtubo_c::adjustSpeed() {
|
||||
mAng gndAngle = mAng::fromRad(mVec3_c::Ey.angle(pla.GetN()));
|
||||
step *= gndAngle.cos();
|
||||
|
||||
if (gndAngle < mAng::deg2short(5) ||
|
||||
sLib::absDiff(cM::atan2s(pla.mNormal.x, pla.mNormal.z), mAngle.y) > mAng::deg2short(90)) {
|
||||
if (gndAngle < mAng::deg2short(5) || mAng::fromVec(pla.GetN()).absDiff(mAngle.y) > mAng::deg2short(90)) {
|
||||
f32 stepSize = mYOffset;
|
||||
sLib::chase(&mSpeed, 0.f, step + stepSize * -0.05f);
|
||||
} else {
|
||||
@@ -777,10 +775,10 @@ void dAcOtubo_c::adjustSpeed() {
|
||||
|
||||
bool dAcOtubo_c::checkSlope() {
|
||||
cM3dGPla pla;
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.mGnd, &pla);
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.GetGnd(), &pla);
|
||||
mAng gndAngle = mAng::fromRad(mVec3_c::Ey.angle(pla.GetN()));
|
||||
|
||||
return sLib::absDiff(gndAngle, 0) > mAng::deg2short(5);
|
||||
return gndAngle.absDiff(0) > mAng::deg2short(5);
|
||||
}
|
||||
|
||||
bool dAcOtubo_c::fn_272_3660() {
|
||||
|
||||
@@ -94,7 +94,7 @@ int dAcOTumbleWeed_c::doDelete() {
|
||||
}
|
||||
|
||||
int dAcOTumbleWeed_c::actorExecute() {
|
||||
if (!field_0x98C && !checkStopped()) {
|
||||
if (!field_0x98C && !isFullyStopped()) {
|
||||
field_0x968 = mVelocity;
|
||||
field_0x968.y = 0.0f;
|
||||
field_0x968.normalize();
|
||||
@@ -246,7 +246,7 @@ bool dAcOTumbleWeed_c::checkSlope() {
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.mGnd, &pla);
|
||||
|
||||
mAng ang = mAng::fromRad(mVec3_c::Ey.angle(pla.GetN()));
|
||||
return sLib::absDiff(ang, 0) > mAng::deg2short(1);
|
||||
return ang.absDiff(0) > mAng::deg2short(1);
|
||||
}
|
||||
|
||||
bool dAcOTumbleWeed_c::checkCollect() {
|
||||
@@ -311,15 +311,14 @@ void dAcOTumbleWeed_c::adjustSpeed() {
|
||||
// Tumbleweed speeds to the target + 5.0f much quicker than intended
|
||||
mAng gndAngle = mAng::fromRad(mVec3_c::Ey.angle(pla.GetN()));
|
||||
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.mGnd, &pla);
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.GetGnd(), &pla);
|
||||
|
||||
f32 speedStep = 0.5f;
|
||||
f32 step = gndAngle.cos() * speedStep;
|
||||
|
||||
// Flat Ground or not in the direction of the slope
|
||||
// Slows down
|
||||
if (gndAngle < mAng::deg2short(1) ||
|
||||
sLib::absDiff(cM::atan2s(pla.GetN().x, pla.GetN().z), getAngle().y) > mAng::deg2short(90)) {
|
||||
if (gndAngle < mAng::deg2short(1) || mAng::fromVec(pla.GetN()).absDiff(mAngle.y) > mAng::deg2short(90)) {
|
||||
sLib::chase(&mSpeed, mSpeedTarget, step);
|
||||
}
|
||||
// Sloped Ground and in the direction of the slope
|
||||
|
||||
@@ -128,12 +128,9 @@ int dAcOFairy_c::create() {
|
||||
}
|
||||
mPreventCatchAfterSpawnTimer = 45;
|
||||
|
||||
if (isWithinPlayerRadius(200.0f)) {
|
||||
s16 ang = mVelocity.atan2sX_Z();
|
||||
if (sLib::absDiff(getXZAngleToPlayer(), ang) < 0x2000) {
|
||||
mVelocity.rotY(0x8000);
|
||||
mAngle.y += 0x8000;
|
||||
}
|
||||
if (isWithinPlayerRadius(200.0f) && getXZAngleToPlayer().absDiff(mAng::fromVec(mVelocity)) < 0x2000) {
|
||||
mVelocity.rotY(0x8000);
|
||||
mAngle.y += 0x8000;
|
||||
}
|
||||
|
||||
mModel.setAnm("PutFairy_fly", m3d::PLAY_MODE_4, 0.0f);
|
||||
@@ -461,7 +458,8 @@ void dAcOFairy_c::executeState_CureStart() {
|
||||
}
|
||||
} else {
|
||||
calcCurePosition(50.0f, 50.0f);
|
||||
s32 diff = sLib::absDiff(mCureAngle, 0);
|
||||
|
||||
s32 diff = mCureAngle.absDiff(0);
|
||||
if (diff < mCureAngularSpeed && mCurePosYOffset == 50.0f) {
|
||||
mStateMgr.changeState(StateID_Cure);
|
||||
}
|
||||
@@ -627,7 +625,7 @@ f32 dAcOFairy_c::randMaxSpeedY() const {
|
||||
}
|
||||
|
||||
bool dAcOFairy_c::shouldAvoidLink() const {
|
||||
return isWithinPlayerRadius(150.0f) && sLib::absDiff(mAngle.y, getXZAngleToPlayer()) < 0x2000;
|
||||
return isWithinPlayerRadius(150.0f) && mAngle.y.absDiff(getXZAngleToPlayer()) < 0x2000;
|
||||
}
|
||||
|
||||
bool dAcOFairy_c::isMovingAwayFromOrigY() const {
|
||||
|
||||
@@ -443,7 +443,7 @@ void AttentionManager::addPickUpTarget(dAcObjBase_c &actor, f32 field_0x14) {
|
||||
addTarget(actor, pickUpTarget, 0, nullptr);
|
||||
}
|
||||
|
||||
void AttentionManager::addSitTarget(dAcObjBase_c &actor, u32 flags, f32 field_0x14) {
|
||||
void AttentionManager::addSitTarget(dAcObjBase_c &actor, f32 field_0x14, AttentionManager::Flags_e flags) {
|
||||
static InteractionTargetDef sitTarget = {0, 2, 0, SIT, 2, 0.0f, 60.0f, 0.0f, -75.0f, 75.0f, 20.0f, 1.0f};
|
||||
sitTarget.interactFlags = flags;
|
||||
sitTarget.field_0x14 = field_0x14;
|
||||
|
||||
Reference in New Issue
Block a user