mirror of
https://github.com/zeldaret/ss
synced 2026-05-25 07:23:00 -04:00
almost there
This commit is contained in:
@@ -100,24 +100,72 @@ _ctors = .ctors:0x00000000; // type:label scope:global
|
||||
_dtors = .dtors:0x00000000; // type:label scope:global
|
||||
__destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_293_rodata_0 = .rodata:0x00000000; // type:object size:0x38 data:float
|
||||
lbl_293_rodata_38 = .rodata:0x00000038; // type:object size:0x10 align:4 data:float
|
||||
lbl_293_rodata_48 = .rodata:0x00000048; // type:object size:0x10 align:4 data:float
|
||||
lbl_293_rodata_58 = .rodata:0x00000058; // type:object size:0x8 align:4 data:float
|
||||
lbl_293_rodata_38 = .rodata:0x00000038; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_40 = .rodata:0x00000040; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_44 = .rodata:0x00000044; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_48 = .rodata:0x00000048; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_50 = .rodata:0x00000050; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_54 = .rodata:0x00000054; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_58 = .rodata:0x00000058; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_60 = .rodata:0x00000060; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_64 = .rodata:0x00000064; // type:object size:0x14 align:4 data:float
|
||||
lbl_293_rodata_64 = .rodata:0x00000064; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_68 = .rodata:0x00000068; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_70 = .rodata:0x00000070; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_78 = .rodata:0x00000078; // type:object size:0x8 align:8 data:double
|
||||
lbl_293_rodata_80 = .rodata:0x00000080; // type:object size:0x8 align:4 data:float
|
||||
lbl_293_rodata_88 = .rodata:0x00000088; // type:object size:0x1C align:4 data:float
|
||||
lbl_293_rodata_A4 = .rodata:0x000000A4; // type:object size:0x8 align:4 data:float
|
||||
lbl_293_rodata_AC = .rodata:0x000000AC; // type:object size:0x8 align:4 data:float
|
||||
lbl_293_rodata_80 = .rodata:0x00000080; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_84 = .rodata:0x00000084; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_88 = .rodata:0x00000088; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_90 = .rodata:0x00000090; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_94 = .rodata:0x00000094; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_98 = .rodata:0x00000098; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_B8 = .rodata:0x000000B8; // type:object size:0x10 align:4 data:float
|
||||
lbl_293_rodata_C8 = .rodata:0x000000C8; // type:object size:0xC align:4 data:float
|
||||
lbl_293_rodata_D4 = .rodata:0x000000D4; // type:object size:0x30 align:4 data:float
|
||||
lbl_293_rodata_104 = .rodata:0x00000104; // type:object size:0x30 align:4 data:float
|
||||
lbl_293_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_100 = .rodata:0x00000100; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_104 = .rodata:0x00000104; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_108 = .rodata:0x00000108; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_110 = .rodata:0x00000110; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_114 = .rodata:0x00000114; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_118 = .rodata:0x00000118; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_120 = .rodata:0x00000120; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_124 = .rodata:0x00000124; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_128 = .rodata:0x00000128; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_130 = .rodata:0x00000130; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_134 = .rodata:0x00000134; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_138 = .rodata:0x00000138; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_13C = .rodata:0x0000013C; // type:object size:0xC align:4 data:float
|
||||
lbl_293_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_140 = .rodata:0x00000140; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_144 = .rodata:0x00000144; // type:object size:0x4 align:4 data:float
|
||||
lbl_293_rodata_148 = .rodata:0x00000148; // type:object size:0x30
|
||||
lbl_293_data_0 = .data:0x00000000; // type:object size:0x8 data:4byte
|
||||
g_profile_OBJ_BARREL = .data:0x00000008; // type:object size:0x6C
|
||||
|
||||
@@ -13,6 +13,7 @@ public:
|
||||
|
||||
bool fn_12_1C20(dAcObjBase_c *);
|
||||
void fn_12_1E00(dAcObjBase_c *, bool *);
|
||||
void fn_12_1E80(dAcObjBase_c *, bool *);
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcNpcCeLady_c);
|
||||
|
||||
@@ -25,7 +25,7 @@ class dAcOBarrel_c : public dAcObjBase_c {
|
||||
public:
|
||||
enum Type {
|
||||
Normal,
|
||||
Explode,
|
||||
Bomb,
|
||||
Type2,
|
||||
Kraken,
|
||||
};
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
/** fn_293_3DB0 */
|
||||
void fn_293_3DB0();
|
||||
|
||||
/** fn_293_4200 */
|
||||
/** Break Barrel */
|
||||
void fn_293_4200();
|
||||
|
||||
/** Check to see if the Barrel should break */
|
||||
@@ -110,7 +110,7 @@ public:
|
||||
/** fn_293_5850 */
|
||||
void fn_293_5850(f32 *, bool);
|
||||
|
||||
/** fn_293_58C0 */
|
||||
/** Set Ground Normal */
|
||||
void fn_293_58C0();
|
||||
|
||||
/** fn_293_5910 */
|
||||
@@ -136,6 +136,13 @@ public:
|
||||
return mType & 1;
|
||||
}
|
||||
|
||||
bool field0x17Check() const {
|
||||
return field_0xE17 == 0 || field_0xE17 == 1;
|
||||
}
|
||||
bool isType_1() const {
|
||||
return mType & 2;
|
||||
}
|
||||
|
||||
bool checkFlag_0xE18() {
|
||||
return field_0xE18 < 0xFF && !SceneflagManager::sInstance->checkBoolFlag(mRoomID, field_0xE18);
|
||||
}
|
||||
@@ -167,7 +174,9 @@ private:
|
||||
/* 0xDBC */ mVec3_c field_0xDBC;
|
||||
/* 0xDC8 */ mVec3_c field_0xDC8;
|
||||
/* 0xDD4 */ f32 field_0xDD4;
|
||||
/* 0xDD8 */ mVec3_c field_0xDD8;
|
||||
/* 0xDD8 */ f32 field_0xDD8;
|
||||
/* 0xDDC */ f32 field_0xDDC;
|
||||
/* 0xDE0 */ f32 field_0xDE0;
|
||||
/* 0xDE4 */ mAng3_c field_0xDE4;
|
||||
/* 0xDEA */ mAng field_0xDEA;
|
||||
/* 0xDEC */ mAng field_0xDEC;
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "m/types_m.h"
|
||||
#include "nw4r/math/math_arithmetic.h"
|
||||
|
||||
// Ghidra: ActorObjectBase
|
||||
// size: 0x330
|
||||
|
||||
@@ -55,8 +55,8 @@ public:
|
||||
void SetupFrom3Vtx(const nw4r::math::VEC3 *v1, const nw4r::math::VEC3 *v2, const nw4r::math::VEC3 *v3) {
|
||||
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) / mNormal.y;
|
||||
f32 getCrossY_NonIsZero(const mVec3_c *param_1) const {
|
||||
return -(param_1->x * mNormal.x + mNormal.z * param_1->z) / mNormal.y;
|
||||
}
|
||||
|
||||
f32 GetXZDist() const {
|
||||
|
||||
@@ -48,10 +48,6 @@ struct mAng {
|
||||
return mAng(-mVal);
|
||||
}
|
||||
|
||||
mAng operator+(const mAng &other) const {
|
||||
return mAng(mVal + other.mVal);
|
||||
}
|
||||
|
||||
mAng &operator+=(const mAng &other) {
|
||||
mVal += other.mVal;
|
||||
return *this;
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#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_light_env.h"
|
||||
#include "d/d_linkage.h"
|
||||
#include "d/d_rumble.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
@@ -37,29 +38,38 @@
|
||||
#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;
|
||||
static const f32 _0;
|
||||
static const f32 _1;
|
||||
static const f32 _2;
|
||||
static const f32 _3;
|
||||
static const f32 _4;
|
||||
static const f32 _5;
|
||||
static const s16 _6;
|
||||
static const f32 _7;
|
||||
static const s16 _8;
|
||||
static const f32 _9;
|
||||
static const f32 _10;
|
||||
static const s16 _11;
|
||||
static const f32 _12;
|
||||
static const f32 _13;
|
||||
};
|
||||
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};
|
||||
|
||||
const f32 dAcOBarrel_c_Param_c::_0 = 2.5f;
|
||||
const f32 dAcOBarrel_c_Param_c::_1 = 10.f;
|
||||
const f32 dAcOBarrel_c_Param_c::_2 = 7.f;
|
||||
const f32 dAcOBarrel_c_Param_c::_3 = 0.125f;
|
||||
const f32 dAcOBarrel_c_Param_c::_4 = 0.2f;
|
||||
const f32 dAcOBarrel_c_Param_c::_5 = 0.2f;
|
||||
const s16 dAcOBarrel_c_Param_c::_6 = 0x5A00;
|
||||
const f32 dAcOBarrel_c_Param_c::_7 = 15.f;
|
||||
const s16 dAcOBarrel_c_Param_c::_8 = 0x0500;
|
||||
const f32 dAcOBarrel_c_Param_c::_9 = 0.8f;
|
||||
const f32 dAcOBarrel_c_Param_c::_10 = 10.f;
|
||||
const s16 dAcOBarrel_c_Param_c::_11 = 0x0300;
|
||||
const f32 dAcOBarrel_c_Param_c::_12 = 0.8f;
|
||||
const f32 dAcOBarrel_c_Param_c::_13 = 5.f;
|
||||
|
||||
// End HIO
|
||||
|
||||
// Data Floats
|
||||
@@ -106,13 +116,13 @@ static dCcD_SrcSph sSrcSph = {
|
||||
|
||||
static const char *sBarrelResFile[] = {
|
||||
"Barrel", // Normal
|
||||
"BarrelBomb", // Explode
|
||||
"BarrelBomb", // Bomb
|
||||
"Barrel", // Type2
|
||||
"Barrel", // Kraken
|
||||
};
|
||||
static const char *sBarrelResMdl[] = {
|
||||
"Barrel", // Normal
|
||||
"BarrelBomb", // Explode
|
||||
"BarrelBomb", // Bomb
|
||||
"Barrel", // Type2
|
||||
"Barrel", // Kraken
|
||||
};
|
||||
@@ -170,7 +180,7 @@ int dAcOBarrel_c::actorCreate() {
|
||||
mAcceleration = -4.f;
|
||||
mMaxSpeed = -40.f;
|
||||
|
||||
field_0xDD8.y = 0.f;
|
||||
field_0xDDC = 0.f;
|
||||
field_0xDEC = mAng::Zero();
|
||||
quat_0xD50.set(1.f, 0.f, 0.f, 0.f);
|
||||
mScale.set(1.f, 1.f, 1.f);
|
||||
@@ -234,9 +244,9 @@ int dAcOBarrel_c::actorPostCreate() {
|
||||
|
||||
f32 scale;
|
||||
if (getFromParams(8, 0x3) == 0) {
|
||||
scale = 1.f;
|
||||
} else {
|
||||
scale = 2.5f;
|
||||
} else {
|
||||
scale = 1.f;
|
||||
}
|
||||
|
||||
if (field_0xE10 == 0 && isTimeshiftableType()) {
|
||||
@@ -277,7 +287,7 @@ int dAcOBarrel_c::actorExecute() {
|
||||
fn_293_3DB0();
|
||||
}
|
||||
|
||||
field_0xDD8.y += mPosition.y - mOldPosition.y;
|
||||
field_0xDDC += mPosition.y - mOldPosition.y;
|
||||
}
|
||||
|
||||
if (!b4D00) {
|
||||
@@ -326,7 +336,7 @@ int dAcOBarrel_c::actorExecute() {
|
||||
}
|
||||
|
||||
if (!b4D00 || field_0xE02 == 0) {
|
||||
updateMatrix();
|
||||
updateMtx();
|
||||
}
|
||||
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
@@ -397,7 +407,7 @@ void dAcOBarrel_c::executeState_Wait() {
|
||||
}
|
||||
field_0xE0A = true;
|
||||
} else if (mObjAcch.ChkGndHit()) {
|
||||
field_0xDD8.y = 0.f;
|
||||
field_0xDDC = 0.f;
|
||||
mVelocity.y = 0.f;
|
||||
field_0xDBC = mVec3_c::Ey;
|
||||
fn_293_5360();
|
||||
@@ -471,7 +481,7 @@ void dAcOBarrel_c::executeState_Grab() {
|
||||
}
|
||||
}
|
||||
void dAcOBarrel_c::finalizeState_Grab() {
|
||||
field_0xDD8.y = 0.f;
|
||||
field_0xDDC = 0.f;
|
||||
field_0xDD4 = cM::rndF(40.f);
|
||||
mCyl.ClrCo_0x400();
|
||||
u8 state = getLinkage().getState();
|
||||
@@ -486,14 +496,14 @@ void dAcOBarrel_c::initializeState_GrabUp() {
|
||||
MTXMultVecSR(mWorldMtx, v, v);
|
||||
|
||||
mAng rotX = mAng::fromRad(v.angle(mVec3_c::Ex));
|
||||
mAng rotY = dAcPy_c::GetLink()->mRotation.y - mRotation.y;
|
||||
|
||||
bool z = rotX > 0x4000;
|
||||
s32 ry = dAcPy_c::GetLink()->mRotation.y - mRotation.y;
|
||||
|
||||
mQuat_c qy, qz;
|
||||
qy.setAxisRotation(
|
||||
mVec3_c::Ey, mAng::short2rad(rotY.absDiff(0) > mAng::deg2short(90.f) ? rotY += mAng::deg2short(180.f) : rotY)
|
||||
);
|
||||
bool z = rotX > 0x4000;
|
||||
bool y = mAng(ry).absDiff(0) > 0x4000;
|
||||
|
||||
// Fakematch?
|
||||
qy.setAxisRotation(mVec3_c::Ey, mAng::short2rad(y ? mAng(ry) - 0x8000 : ry));
|
||||
qz.setAxisRotation(mVec3_c::Ez, mAng::short2rad(z ? 0x4000 : -0x4000));
|
||||
|
||||
quat_0xD60 = qy * qz;
|
||||
@@ -521,7 +531,7 @@ void dAcOBarrel_c::executeState_GrabUp() {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
return;
|
||||
}
|
||||
field_0xDD8.y = 0.f;
|
||||
field_0xDDC = 0.f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -531,7 +541,7 @@ void dAcOBarrel_c::executeState_GrabUp() {
|
||||
quat_0xD70.slerpTo(quat_0xD50, 0.2f, quat_0xD70);
|
||||
} else {
|
||||
if (!getLinkage().checkConnection(dLinkage_c::CONNECTION_1)) {
|
||||
field_0xDD8.y = 0.f;
|
||||
field_0xDDC = 0.f;
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
} else {
|
||||
mStateMgr.changeState(StateID_Grab);
|
||||
@@ -611,10 +621,10 @@ void dAcOBarrel_c::initializeState_Slope() {
|
||||
void dAcOBarrel_c::executeState_Slope() {
|
||||
if (mObjAcch.ChkGroundLanding() && !field_0xE0E) {
|
||||
fn_293_37B0();
|
||||
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);
|
||||
startSound(SE_Barrel_ROLL_GROUND);
|
||||
} else if (mObjAcch.ChkGndHit()) {
|
||||
field_0xDD8.y = 0.f;
|
||||
field_0xDDC = 0.f;
|
||||
mVelocity.y = 0.f;
|
||||
fn_293_30D0();
|
||||
|
||||
@@ -702,7 +712,7 @@ void dAcOBarrel_c::executeState_Water() {
|
||||
mWaterEffect.execute(mObjAcch.GetWtrGroundH(), mObjAcch.GetGroundH());
|
||||
}
|
||||
|
||||
if (mType != dAcOBarrel_c::Type2 && nw4r::math::FAbs(field_0xDD8.z + mAcceleration) < 0.1f &&
|
||||
if (mType != dAcOBarrel_c::Type2 && nw4r::math::FAbs(field_0xDE0 + mAcceleration) < 0.1f &&
|
||||
nw4r::math::FAbs(mVelocity.y + mAcceleration) < 0.1f) {
|
||||
mStateMgr.changeState(StateID_Water2);
|
||||
} else if (!fn_293_4C60()) {
|
||||
@@ -747,9 +757,9 @@ void dAcOBarrel_c::initializeState_Explode() {
|
||||
|
||||
f32 dist = mPosition.squareDistance(dAcPy_c::GetLink()->mPosition);
|
||||
if (dist < 400.f * 400.f) {
|
||||
dRumble_c::start(dRumble_c::sRumblePreset1, dRumble_c::FLAG_SLOT0 | dRumble_c::FLAG_ACTIVE);
|
||||
} else if (dist < 800.f * 800.f) {
|
||||
dRumble_c::start(dRumble_c::sRumblePreset3, dRumble_c::FLAG_SLOT0 | dRumble_c::FLAG_ACTIVE);
|
||||
} else if (dist < 800.f * 800.f) {
|
||||
dRumble_c::start(dRumble_c::sRumblePreset1, dRumble_c::FLAG_SLOT0 | dRumble_c::FLAG_ACTIVE);
|
||||
}
|
||||
}
|
||||
void dAcOBarrel_c::executeState_Explode() {
|
||||
@@ -772,10 +782,10 @@ void dAcOBarrel_c::initializeState_KrakenBorn() {
|
||||
void dAcOBarrel_c::executeState_KrakenBorn() {
|
||||
if (mObjAcch.ChkGroundLanding()) {
|
||||
fn_293_37B0();
|
||||
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);
|
||||
startSound(SE_Barrel_ROLL_GROUND);
|
||||
} else if (mObjAcch.ChkGndHit()) {
|
||||
field_0xDD8.y = 0.f;
|
||||
field_0xDDC = 0.f;
|
||||
mVelocity.y = 0.f;
|
||||
if (mSpeed > 0.f) {
|
||||
holdSoundWithFloatParam(SE_Barrel_ROLL_LV, mSpeed);
|
||||
@@ -802,7 +812,7 @@ void dAcOBarrel_c::initializeState_Rebirth() {
|
||||
|
||||
mSpeed = 0.f;
|
||||
mVelocity.y = 0.f;
|
||||
field_0xDD8.y = 0.f;
|
||||
field_0xDDC = 0.f;
|
||||
|
||||
mCyl.ClrCoSet();
|
||||
mCyl.ClrTgSet();
|
||||
@@ -821,7 +831,7 @@ void dAcOBarrel_c::initializeState_Rebirth() {
|
||||
unsetActorProperty(AC_PROP_0x1);
|
||||
}
|
||||
void dAcOBarrel_c::executeState_Rebirth() {
|
||||
field_0xDD8.y = 0.f;
|
||||
field_0xDDC = 0.f;
|
||||
|
||||
// Why??
|
||||
mPosition.set(mPositionCopy.x, mPositionCopy.y, mPositionCopy.z);
|
||||
@@ -860,12 +870,11 @@ void dAcOBarrel_c::fn_293_30D0() {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AttentionManager *pAttnMgr = AttentionManager::GetInstance();
|
||||
if (mYOffset >= 0.f) {
|
||||
pAttnMgr->addPickUpTarget(*this, 120.f);
|
||||
pAttnMgr->addUnk3Target(*this, 1, 500.f, -200.f, 200.f);
|
||||
AttentionManager *pAttnMgr = AttentionManager::GetInstance();
|
||||
if (mYOffset >= 0.f) {
|
||||
pAttnMgr->addPickUpTarget(*this, 120.f);
|
||||
pAttnMgr->addUnk3Target(*this, 1, 500.f, -200.f, 200.f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -880,46 +889,53 @@ void dAcOBarrel_c::fn_293_31B0() {
|
||||
|
||||
field_0xDBC = pla.GetN();
|
||||
|
||||
mVelocity += pla.GetN() * 7.f;
|
||||
mVelocity.y = pla.getCrossY_NonIsZero(&mVelocity);
|
||||
// Excuse me?
|
||||
mVec3_c _ = mVelocity;
|
||||
|
||||
mVelocity.x += pla.GetN().x * 7.f;
|
||||
mVelocity.z += pla.GetN().z * 7.f;
|
||||
mVelocity.y = -mVelocity.inprodXZ(pla.GetN()) / pla.GetN().y;
|
||||
|
||||
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);
|
||||
sLib::addCalcAngle(mAngle.y.ref(), pla.GetAngleY(), 5, mAng::deg2short(10), 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);
|
||||
s32 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;
|
||||
}
|
||||
|
||||
target = mAng(target).absDiff(field_0xDEA) > 0x4000 ? mAng(target) - 0x8000 : target;
|
||||
|
||||
if (field_0xE00 && field_0xE02) {
|
||||
field_0xE01 = fn_293_4ED0();
|
||||
target -= field_0xDEA;
|
||||
sLib::addCalcAngle(field_0xDEC.ref(), target, 10, mAng::deg2short(5), 0x100);
|
||||
}
|
||||
sLib::addCalcAngle(field_0xDEC.ref(), mAng(target) - field_0xDEA, 10, mAng::deg2short(5), 0x100);
|
||||
|
||||
mQuat_c q;
|
||||
q.setAxisRotation(mVec3_c::Ey, field_0xDEC.radian());
|
||||
quat_0xD70.slerpTo(q, 0.3f, quat_0xD70);
|
||||
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;
|
||||
f32 f;
|
||||
if (field_0xE11 == 3) {
|
||||
f = 0.2f;
|
||||
} else {
|
||||
f = 0.125f;
|
||||
}
|
||||
|
||||
cM3dGPla pla;
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.GetGnd(), &pla);
|
||||
@@ -944,13 +960,184 @@ void dAcOBarrel_c::fn_293_3560() {
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_37B0() {}
|
||||
void dAcOBarrel_c::fn_293_37B0() {
|
||||
mVelocity.y *= -0.5f;
|
||||
|
||||
void dAcOBarrel_c::updateMtx() {}
|
||||
bool someState;
|
||||
if (mType == Type2) {
|
||||
someState = field_0xE17 > 2;
|
||||
} else {
|
||||
someState = mVelocity.y < 8.f;
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_3DB0() {}
|
||||
if (mType != Type2 || !someState) {
|
||||
mSpeed *= 0.95f;
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_4200() {}
|
||||
if (someState) {
|
||||
mVelocity.y = 0.f;
|
||||
field_0xDE4.x = mAng::Zero();
|
||||
field_0xDDC = 0.f;
|
||||
field_0xE0E = true;
|
||||
} else {
|
||||
field_0xE17++;
|
||||
|
||||
field_0xDF2 = cM::rndInt(0x50) + 0x900;
|
||||
field_0xDE4.x = cM::rndInt(0x100) + 0x400;
|
||||
|
||||
if (mSpeed < 5.f) {
|
||||
fn_293_58C0();
|
||||
mAng nrmAngle = mAng::fromRad(field_0xDBC.angle(mVec3_c::Ey));
|
||||
mSpeed = nrmAngle.sin() * 12.5f;
|
||||
|
||||
// why is it mType & 2???
|
||||
if (isType_1() && field_0xE17 < 2) {
|
||||
mSpeed = nw4r::ut::Max(mSpeed, cM::rndFX(5.f) + 25.f);
|
||||
field_0xE00 = true;
|
||||
}
|
||||
|
||||
mAngle.y = mAng::fromVec(field_0xDBC);
|
||||
}
|
||||
field_0xE0E = false;
|
||||
}
|
||||
|
||||
if (fn_293_4BC0()) {
|
||||
field_0xDE4.x = mAng::Zero();
|
||||
mSpeed = 0.f;
|
||||
mVelocity.y = 0.f;
|
||||
field_0xE00 = false;
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::updateMtx() {
|
||||
if (!mStateMgr.isState(StateID_Water2)) {
|
||||
sLib::addCalcAngle(field_0xDE4.x.ref(), 0, 30, 0x200, 0x20);
|
||||
}
|
||||
field_0xDE4.y += field_0xDF2;
|
||||
|
||||
getLinkage().fn_800511E0(this);
|
||||
|
||||
mMtx_c m2, m1, m3, m4;
|
||||
|
||||
m1.fromQuat(quat_0xDA0);
|
||||
m2.fromQuat(quat_0xD70 * quat_0xD80 * quat_0xD90);
|
||||
|
||||
mWorldMtx += m1;
|
||||
|
||||
m3.transS(0.f, 51.f, 0.f);
|
||||
mWorldMtx += m3;
|
||||
|
||||
mWorldMtx.YrotM(field_0xDE4.y);
|
||||
mWorldMtx.XrotM(field_0xDE4.x);
|
||||
mWorldMtx.YrotM(-field_0xDE4.y);
|
||||
mWorldMtx += m2;
|
||||
|
||||
m4.transS(0.f, -51.f, 0.f);
|
||||
mWorldMtx += m4;
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_3DB0() {
|
||||
if (!field_0xE00) {
|
||||
return;
|
||||
}
|
||||
f32 f0, f1;
|
||||
f0 = 0.5f * mVelocity.mag();
|
||||
f0 = mAng(f0 * 182.f).radian();
|
||||
f1 = mAng(mAngle.y - mRotation.y).radian();
|
||||
|
||||
if (field_0xE01) {
|
||||
f0 *= -1.f;
|
||||
}
|
||||
|
||||
mQuat_c q0, q1, q2;
|
||||
q1.setAxisRotation(mVec3_c::Ey, f1);
|
||||
q0.setAxisRotation(mVec3_c::Ey, -f1);
|
||||
q2.setAxisRotation(mVec3_c::Ey, f0);
|
||||
|
||||
quat_0xD90 = q1 * q2 * q0 * quat_0xD90;
|
||||
}
|
||||
|
||||
extern "C" void fn_800307E0(const mVec3_c &, s32);
|
||||
void dAcOBarrel_c::fn_293_4200() {
|
||||
getLinkage().fn_80050EA0(this);
|
||||
|
||||
if (field_0xE04 || field_0xE05) {
|
||||
dAcNpcCeLady_c *pCeLady = mCeLady.get();
|
||||
bool b = true;
|
||||
if (pCeLady) {
|
||||
pCeLady->fn_12_1E00(this, &b);
|
||||
}
|
||||
if (!b) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
startSound(SE_Barrel_BROKEN);
|
||||
|
||||
mVec3_c emitPosition = mPosition;
|
||||
emitPosition.y += (field_0xE02 ? 25.f : 50.f);
|
||||
|
||||
if (mBrokenFlag < 0xFF && !SceneflagManager::sInstance->checkBoolFlag(mRoomID, mBrokenFlag)) {
|
||||
SceneflagManager::sInstance->setFlag(mRoomID, mBrokenFlag);
|
||||
}
|
||||
|
||||
dLightEnv_c::GetPInstance()->setBPM8_Type6_2(&mPosition);
|
||||
if (mType == Bomb) {
|
||||
mVec3_c scale = mScale;
|
||||
if (getFromParams(8, 0x3) == 0) {
|
||||
scale *= 1.5f;
|
||||
}
|
||||
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_322_, mPosition, nullptr, &scale, nullptr, nullptr, 0, 0
|
||||
);
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_323_, mPosition, nullptr, &scale, nullptr, nullptr, 0, 0
|
||||
);
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_324_, mPosition, nullptr, &scale, nullptr, nullptr, 0, 0
|
||||
);
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_325_, mPosition, nullptr, &scale, nullptr, nullptr, 0, 0
|
||||
);
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_242_, emitPosition, nullptr, &mScale, nullptr, nullptr, 0, 0
|
||||
);
|
||||
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_474_, emitPosition, nullptr, &mScale, nullptr, nullptr, 0, 0
|
||||
)
|
||||
->bindShpEmitter(0x15, true);
|
||||
|
||||
if (fn_293_4C60()) {
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_658_, emitPosition, nullptr, &mScale, nullptr, nullptr, 0, 0
|
||||
);
|
||||
}
|
||||
fn_800307E0(mPosition, 0);
|
||||
startSound(SE_Barrel_BOMB);
|
||||
mStateMgr.changeState(StateID_Explode);
|
||||
|
||||
} else {
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_243_, emitPosition, nullptr, &mScale, nullptr, nullptr, 0, 0
|
||||
);
|
||||
dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_475_, emitPosition, nullptr, &mScale, nullptr, nullptr, 0, 0
|
||||
)
|
||||
->bindShpEmitter(0x14, true);
|
||||
|
||||
if (field_0xE07) {
|
||||
itemDroppingAndGivingRelated(nullptr, 0);
|
||||
}
|
||||
|
||||
if (field_0xE0B) {
|
||||
mStateMgr.changeState(StateID_Rebirth);
|
||||
} else {
|
||||
deleteRequest();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_45A0() {
|
||||
if (field_0xE06) {
|
||||
@@ -1005,7 +1192,7 @@ bool dAcOBarrel_c::fn_293_45A0() {
|
||||
}
|
||||
}
|
||||
|
||||
if (mType == Explode && (mStateMgr.isState(StateID_Water) || mStateMgr.isState(StateID_Water2))) {
|
||||
if (mType == Bomb && (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) {
|
||||
@@ -1015,7 +1202,7 @@ bool dAcOBarrel_c::fn_293_45A0() {
|
||||
}
|
||||
|
||||
if (mObjAcch.ChkGndHit() && mYOffset >= 0.f) {
|
||||
if ((!isType_0() && field_0xDD8.y < -500.f) || (isType_0() && field_0xDD8.y < -1000.f)) {
|
||||
if ((!isType_0() && field_0xDDC < -500.f) || (isType_0() && field_0xDDC < -1000.f)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1054,7 +1241,7 @@ bool dAcOBarrel_c::fn_293_4C60() {
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_4CE0() const {
|
||||
return field_0xDD8.y < -10000.f;
|
||||
return field_0xDDC < -10000.f;
|
||||
}
|
||||
|
||||
bool dAcOBarrel_c::fn_293_4D00() {
|
||||
@@ -1074,7 +1261,7 @@ bool dAcOBarrel_c::fn_293_4ED0() const {
|
||||
mWorldMtx.multVecSR(up);
|
||||
|
||||
mQuat_c q;
|
||||
q.setAxisRotation(up, DEG_TO_RAD(1));
|
||||
q.setAxisRotation(up, mAng::short2rad(mAng::deg2short(1)));
|
||||
|
||||
mMtx_c m;
|
||||
m.fromQuat(q);
|
||||
@@ -1094,7 +1281,7 @@ bool dAcOBarrel_c::fn_293_4F80() {
|
||||
|
||||
bool dAcOBarrel_c::fn_293_50B0() {
|
||||
return (
|
||||
field_0xE00 && field_0xE02 && mSpeed > 15.f && getXZAngleToPlayer().absDiff(mAngle.y) <= mAng::deg2short(60)
|
||||
field_0xE00 && field_0xE02 && mSpeed > 15.f && getXZAngleToPlayer().absDiff(mAngle.y) < mAng::deg2short(60.005)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1103,7 +1290,7 @@ void dAcOBarrel_c::fn_293_5150() {
|
||||
v.y += field_0xE02 ? 25.f : 50.f;
|
||||
mVec3_c scale(0.75f, 0.75f, 0.75f);
|
||||
|
||||
if (mType == Explode) {
|
||||
if (mType == Bomb) {
|
||||
mTimeArea.check(mRoomID, mPosition, 0, 0.f, 0.1f);
|
||||
|
||||
f32 scaleTarget = getFromParams(8, 0x3) == 0 ? 2.5f : 1.f;
|
||||
@@ -1142,7 +1329,7 @@ void dAcOBarrel_c::fn_293_5150() {
|
||||
}
|
||||
void dAcOBarrel_c::fn_293_5360() {
|
||||
if (!field_0xE03) {
|
||||
static const s16 s = 0x2000;
|
||||
static const s16 s = {0x2000};
|
||||
field_0xE03 = fn_8002eff0(120.f, s, &mCyl, 10.f, -10.f);
|
||||
}
|
||||
|
||||
@@ -1154,7 +1341,7 @@ void dAcOBarrel_c::fn_293_5360() {
|
||||
|
||||
if (field_0xDFC != 0) {
|
||||
fn_293_4200();
|
||||
} else if (mType == Explode) {
|
||||
} else if (mType == Bomb) {
|
||||
fn_293_4200();
|
||||
|
||||
} else {
|
||||
@@ -1183,7 +1370,7 @@ void dAcOBarrel_c::fn_293_54D0() {
|
||||
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;
|
||||
field_0xDF8 *= dAcOBarrel_c_Param_c::_12;
|
||||
}
|
||||
|
||||
m.makeRotationFromVecs(mVec3_c::Ez, field_0xDB0, 1.f);
|
||||
@@ -1192,7 +1379,7 @@ void dAcOBarrel_c::fn_293_54D0() {
|
||||
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;
|
||||
field_0xDFA *= dAcOBarrel_c_Param_c::_9;
|
||||
}
|
||||
|
||||
quat_0xDA0 = qplayer0 * qplayer1;
|
||||
@@ -1204,8 +1391,34 @@ void dAcOBarrel_c::fn_293_54D0() {
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_5850(f32 *, bool) {}
|
||||
inline f32 some_calc(f32 acc, f32 gnd, f32 pos) {
|
||||
f32 a = (gnd - pos);
|
||||
return nw4r::math::FAbs(acc) * a;
|
||||
}
|
||||
void dAcOBarrel_c::fn_293_5850(f32 *pMult, bool reduceY) {
|
||||
field_0xDE0 = some_calc(mAcceleration, mObjAcch.GetWtrGroundH(), mPosition.y) / 50.f;
|
||||
|
||||
void dAcOBarrel_c::fn_293_58C0() {}
|
||||
mSpeed *= 0.93f;
|
||||
|
||||
void dAcOBarrel_c::fn_293_5910() {}
|
||||
if (reduceY) {
|
||||
mVelocity.y *= 0.85f;
|
||||
}
|
||||
mVelocity.y += field_0xDE0 * *pMult;
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_58C0() {
|
||||
cM3dGPla pla;
|
||||
dBgS::GetInstance()->GetTriPla(mObjAcch.GetGnd(), &pla);
|
||||
field_0xDBC = pla.GetN();
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::fn_293_5910() {
|
||||
static mVec3_c scale(1.f, 1.f, 1.f);
|
||||
|
||||
if (fn_293_4C20()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mEmitter0.createContinuousEffect(PARTICLE_RESOURCE_ID_MAPPING_515_, mPosition, nullptr, &scale, nullptr, nullptr);
|
||||
mEmitter1.createContinuousEffect(PARTICLE_RESOURCE_ID_MAPPING_516_, mPosition, nullptr, &scale, nullptr, nullptr);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user