mirror of
https://github.com/zeldaret/ss
synced 2026-07-06 21:22:43 -04:00
init
This commit is contained in:
@@ -10,7 +10,7 @@ __dt__28sFStateFct_c<12dAcOBarrel_c>Fv = .text:0x00000320; // type:function size
|
||||
__dt__81sStateMgr_c<12dAcOBarrel_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000390; // type:function size:0xA0
|
||||
__dt__51sFStateMgr_c<12dAcOBarrel_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000430; // type:function size:0xA4
|
||||
fn_293_4E0 = .text:0x000004E0; // type:function size:0x5C
|
||||
fn_293_540 = .text:0x00000540; // type:function size:0xAC
|
||||
createHeap__12dAcOBarrel_cFv = .text:0x00000540; // type:function size:0xAC
|
||||
fn_293_5F0 = .text:0x000005F0; // type:function size:0x5B0
|
||||
changeState__81sStateMgr_c<12dAcOBarrel_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000BA0; // type:function size:0x10
|
||||
fn_293_BB0 = .text:0x00000BB0; // type:function size:0x248
|
||||
@@ -138,15 +138,26 @@ lbl_293_data_200 = .data:0x00000200; // type:object size:0xC
|
||||
lbl_293_data_20C = .data:0x0000020C; // type:object size:0x2A8
|
||||
lbl_293_data_4B4 = .data:0x000004B4; // type:object size:0x34
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_293_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
|
||||
lbl_293_bss_18 = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
lbl_293_bss_58 = .bss:0x00000058; // type:object size:0x80 data:4byte
|
||||
lbl_293_bss_D8 = .bss:0x000000D8; // type:object size:0x40 data:4byte
|
||||
lbl_293_bss_118 = .bss:0x00000118; // type:object size:0x80 data:4byte
|
||||
lbl_293_bss_198 = .bss:0x00000198; // type:object size:0x40 data:4byte
|
||||
lbl_293_bss_1D8 = .bss:0x000001D8; // type:object size:0x40 data:4byte
|
||||
lbl_293_bss_218 = .bss:0x00000218; // type:object size:0x40 data:4byte
|
||||
lbl_293_bss_258 = .bss:0x00000258; // type:object size:0x30 data:4byte
|
||||
@16558 = .bss:0x00000008; // type:object size:0xC scope:local data:4byte
|
||||
StateID_Wait__12dAcOBarrel_c = .bss:0x00000018; // type:object size:0x30 data:4byte
|
||||
@16562 = .bss:0x00000048; // type:object size:0xC scope:local data:4byte
|
||||
StateID_Grab__12dAcOBarrel_c = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
@16566 = .bss:0x00000088; // type:object size:0xC scope:local data:4byte
|
||||
StateID_GrabUp__12dAcOBarrel_c = .bss:0x00000098; // type:object size:0x30 data:4byte
|
||||
@16570 = .bss:0x000000C8; // type:object size:0xC scope:local data:4byte
|
||||
StateID_GrabPut__12dAcOBarrel_c = .bss:0x000000D8; // type:object size:0x30 data:4byte
|
||||
@16574 = .bss:0x00000108; // type:object size:0xC scope:local data:4byte
|
||||
StateID_Slope__12dAcOBarrel_c = .bss:0x00000118; // type:object size:0x30 data:4byte
|
||||
@16578 = .bss:0x00000148; // type:object size:0xC scope:local data:4byte
|
||||
StateID_Water__12dAcOBarrel_c = .bss:0x00000158; // type:object size:0x30 data:4byte
|
||||
@16582 = .bss:0x00000188; // type:object size:0xC scope:local data:4byte
|
||||
StateID_Water2__12dAcOBarrel_c = .bss:0x00000198; // type:object size:0x30 data:4byte
|
||||
@16586 = .bss:0x000001C8; // type:object size:0xC scope:local data:4byte
|
||||
StateID_Explode__12dAcOBarrel_c = .bss:0x000001D8; // type:object size:0x30 data:4byte
|
||||
@16590 = .bss:0x00000208; // type:object size:0xC scope:local data:4byte
|
||||
StateID_KrakenBorn__12dAcOBarrel_c = .bss:0x00000218; // type:object size:0x30 data:4byte
|
||||
@16594 = .bss:0x00000248; // type:object size:0xC scope:local data:4byte
|
||||
StateID_Rebirth__12dAcOBarrel_c = .bss:0x00000258; // type:object size:0x30 data:4byte
|
||||
lbl_293_bss_288 = .bss:0x00000288; // type:object size:0x8 data:byte
|
||||
lbl_293_bss_290 = .bss:0x00000290; // type:object size:0x10 align:4 data:float
|
||||
lbl_293_bss_2A0 = .bss:0x000002A0; // type:object size:0x1 data:byte
|
||||
|
||||
@@ -120,7 +120,7 @@ public:
|
||||
/* vt 0x64 */ virtual bool restorePosRotFromCopy();
|
||||
/* vt 0x68 */ virtual void registerInEvent();
|
||||
/* vt 0x6C */ virtual void unkVirtFunc_0x6C();
|
||||
/* vt 0x70 */ virtual void doInteraction(s32);
|
||||
/* vt 0x70 */ virtual void doInteraction(s32 /* InteractionType */);
|
||||
|
||||
public:
|
||||
dAcBase_c();
|
||||
|
||||
@@ -1,15 +1,99 @@
|
||||
#ifndef D_A_OBJ_BARREL_H
|
||||
#define D_A_OBJ_BARREL_H
|
||||
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_s_acch.h"
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "d/col/c/c_bg_s_poly_info.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_quat.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
#include "toBeSorted/time_area_mgr.h"
|
||||
|
||||
class dAcNpcCeLady_c;
|
||||
class dAcNpcCeFriend_c;
|
||||
|
||||
class dAcOBarrel_c : public dAcObjBase_c {
|
||||
public:
|
||||
enum Type {
|
||||
Normal,
|
||||
Explode,
|
||||
Type2,
|
||||
Kraken,
|
||||
};
|
||||
|
||||
dAcOBarrel_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dAcOBarrel_c() {}
|
||||
|
||||
virtual int doDelete() override;
|
||||
virtual int draw() override;
|
||||
virtual bool createHeap() override;
|
||||
virtual int actorCreate() override;
|
||||
virtual int actorPostCreate() override;
|
||||
virtual int actorExecute() override;
|
||||
|
||||
virtual void registerInEvent() override;
|
||||
virtual void unkVirtFunc_0x6C() override;
|
||||
virtual void doInteraction(s32) override;
|
||||
|
||||
/** fn_293_30D0 */
|
||||
void fn_293_30D0();
|
||||
|
||||
/** fn_293_3560 */
|
||||
void fn_293_3560();
|
||||
|
||||
/** fn_293_37B0 */
|
||||
void fn_293_37B0();
|
||||
|
||||
/** fn_293_3A20 */
|
||||
void updateMtx();
|
||||
|
||||
/** fn_293_3DB0 */
|
||||
void fn_293_3DB0();
|
||||
|
||||
/** fn_293_4200 */
|
||||
void fn_293_4200();
|
||||
|
||||
/** fn_293_45A0 */
|
||||
bool fn_293_45A0();
|
||||
|
||||
/** fn_293_4A90 */
|
||||
bool fn_293_4A90(const mAng &);
|
||||
|
||||
/** fn_293_4BC0 */
|
||||
bool fn_293_4BC0();
|
||||
|
||||
/** fn_293_4C60 */
|
||||
bool fn_293_4C60();
|
||||
|
||||
/** fn_293_4D00 */
|
||||
bool fn_293_4D00();
|
||||
|
||||
/** fn_293_4ED0 */
|
||||
bool fn_293_4ED0();
|
||||
|
||||
/** fn_293_50B0 */
|
||||
bool fn_293_50B0();
|
||||
|
||||
/** fn_293_5150 */
|
||||
bool fn_293_5150();
|
||||
|
||||
/** fn_293_5360 */
|
||||
void fn_293_5360();
|
||||
|
||||
/** fn_293_58C0 */
|
||||
void fn_293_58C0();
|
||||
|
||||
/** fn_293_5910 */
|
||||
void fn_293_5910();
|
||||
|
||||
STATE_FUNC_DECLARE(dAcOBarrel_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcOBarrel_c, Grab);
|
||||
STATE_FUNC_DECLARE(dAcOBarrel_c, GrabUp);
|
||||
@@ -21,8 +105,76 @@ public:
|
||||
STATE_FUNC_DECLARE(dAcOBarrel_c, KrakenBorn);
|
||||
STATE_FUNC_DECLARE(dAcOBarrel_c, Rebirth);
|
||||
|
||||
public:
|
||||
bool isType_0() const {
|
||||
return mType == Type2 || mType == Kraken;
|
||||
}
|
||||
|
||||
bool isTimeshiftableType() const {
|
||||
return mType & 1;
|
||||
}
|
||||
|
||||
bool checkFlag_0xE18() {
|
||||
return field_0xE18 < 0xFF && !SceneflagManager::sInstance->checkBoolFlag(mRoomID, field_0xE18);
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcOBarrel_c);
|
||||
/* 0x330 */ nw4r::g3d::ResFile mResFile;
|
||||
/* 0x334 */ m3d::smdl_c mMdl;
|
||||
/* 0x350 */ dShadowCircle_c mShadow;
|
||||
/* 0x358 */ dBgS_AcchCir mAcchCir;
|
||||
/* 0x3B4 */ dBgS_ObjAcch mObjAcch;
|
||||
/* 0x764 */ cBgS_PolyInfo mPolyInfo;
|
||||
/* 0x790 */ dBgW mBgW;
|
||||
/* 0x9A0 */ dCcD_Cyl mCyl;
|
||||
/* 0xAF0 */ dCcD_Sph mSph;
|
||||
/* 0xC40 */ STATE_MGR_DECLARE(dAcOBarrel_c);
|
||||
/* 0xC7C */ TimeAreaStruct mTimeArea;
|
||||
/* 0xC88 */ dAcRef_c<dAcNpcCeLady_c> mCeLady;
|
||||
/* 0xC94 */ dAcRef_c<dAcNpcCeFriend_c> mCeFriend;
|
||||
/* 0xCA0 */ u8 _CA0[0xD08 - 0xCA0];
|
||||
/* 0xD08 */ dWaterEffect_c mWaterEffect;
|
||||
/* 0xD70 */ mQuat_c quat_0xD50;
|
||||
/* 0xD70 */ mQuat_c quat_0xD60;
|
||||
/* 0xD70 */ mQuat_c quat_0xD70;
|
||||
/* 0xD80 */ mQuat_c quat_0xD80;
|
||||
/* 0xD90 */ mQuat_c quat_0xD90;
|
||||
/* 0xDA0 */ mQuat_c quat_0xDA0;
|
||||
/* 0xDB0 */ u8 _DB0[0xDBC - 0xDB0];
|
||||
/* 0xDBC */ mVec3_c field_0xDBC;
|
||||
/* 0xDC8 */ u8 _DC8[0xDD4 - 0xDC8];
|
||||
/* 0xDD4 */ f32 field_0xDD4;
|
||||
/* 0xDD8 */ mVec3_c field_0xDD8;
|
||||
/* 0xDE4 */ mAng3_c field_0xDE4;
|
||||
/* 0xDEE */ u8 _DEA[0xDEC - 0xDEA];
|
||||
/* 0xDEC */ u16 field_0xDEC;
|
||||
/* 0xDEE */ u8 _DEE[0xE00 - 0xDEE];
|
||||
/* 0xE00 */ bool field_0xE00; //< Can Damage ?
|
||||
/* 0xE01 */ bool field_0xE01;
|
||||
/* 0xE02 */ bool field_0xE02;
|
||||
/* 0xE03 */ bool field_0xE03;
|
||||
/* 0xE04 */ bool field_0xE04;
|
||||
/* 0xE05 */ bool field_0xE05;
|
||||
/* 0xE06 */ bool field_0xE06;
|
||||
/* 0xE07 */ bool field_0xE07;
|
||||
/* 0xE08 */ bool field_0xE08;
|
||||
/* 0xE09 */ bool field_0xE09;
|
||||
/* 0xE0A */ bool field_0xE0A;
|
||||
/* 0xE0B */ bool field_0xE0B;
|
||||
/* 0xE0C */ bool field_0xE0C;
|
||||
/* 0xE0D */ bool field_0xE0D;
|
||||
/* 0xE0E */ bool field_0xE0E;
|
||||
/* 0xE0F */ u8 mType;
|
||||
/* 0xE10 */ u8 field_0xE10;
|
||||
/* 0xE11 */ u8 field_0xE11;
|
||||
/* 0xE12 */ u8 field_0xE12;
|
||||
/* 0xE13 */ u8 field_0xE13;
|
||||
/* 0xE14 */ u8 field_0xE14;
|
||||
/* 0xE15 */ u8 field_0xE15;
|
||||
/* 0xE16 */ u8 field_0xE16;
|
||||
/* 0xE17 */ u8 field_0xE17;
|
||||
/* 0xE18 */ u8 field_0xE18;
|
||||
/* 0xE19 */ u8 mBrokenFlag;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -62,6 +62,10 @@ public:
|
||||
return field_0x0E & pBg->GetField_0x22();
|
||||
}
|
||||
|
||||
void SetField_0xC(u16 v) {
|
||||
field_0x0C = v;
|
||||
}
|
||||
|
||||
void SetExtChk(const cBgS_Chk &other) {
|
||||
mPolyPassChk = other.mPolyPassChk;
|
||||
mGrpPassChk = other.mGrpPassChk;
|
||||
|
||||
@@ -830,6 +830,12 @@ public:
|
||||
void SetAtFlag(u32 flag) {
|
||||
mAt.SetSPrm(flag);
|
||||
}
|
||||
void SetAtGrp(u32 grp) {
|
||||
mAt.SetAtFlag(GetAtGrp() | grp);
|
||||
}
|
||||
void OffAtGrp(u32 grp) {
|
||||
mAt.SetAtFlag(GetAtGrp() & ~grp);
|
||||
}
|
||||
|
||||
void SetTgFlag_0xA(u16 flag) {
|
||||
mTg.SetFlag_0xA(flag);
|
||||
@@ -907,6 +913,9 @@ public:
|
||||
void OnAtSet() {
|
||||
mAt.OnSPrm(1);
|
||||
}
|
||||
void OffAtSet() {
|
||||
mAt.OffSPrm(1);
|
||||
}
|
||||
u32 ChkAtNoMass() const {
|
||||
return mAt.MskSPrm(0x400);
|
||||
}
|
||||
@@ -1000,7 +1009,6 @@ public:
|
||||
}
|
||||
|
||||
// Co
|
||||
|
||||
void SetCoGrp(u32 grp) {
|
||||
mCo.SetGrp(grp << 4);
|
||||
}
|
||||
|
||||
@@ -39,8 +39,8 @@ public:
|
||||
~fManager_c() {}
|
||||
int getSearchTableNum();
|
||||
static fBase_c *searchBaseByID(fBaseID_e id);
|
||||
static fBase_c *searchBaseByProfName(ProfileName profID, const fBase_c *parent);
|
||||
static fBase_c *searchBaseByGroupType(u8 groupType, const fBase_c *parent);
|
||||
static fBase_c *searchBaseByProfName(ProfileName profID, const fBase_c *parent = nullptr);
|
||||
static fBase_c *searchBaseByGroupType(u8 groupType, const fBase_c *parent = nullptr);
|
||||
static void mainLoop();
|
||||
|
||||
private:
|
||||
|
||||
@@ -138,6 +138,10 @@ struct mAng {
|
||||
|
||||
s16 mVal;
|
||||
|
||||
static const mAng Zero() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
static const f32 sHalfCircleDeg;
|
||||
static const f32 sAngToDeg;
|
||||
|
||||
@@ -32,27 +32,27 @@ public:
|
||||
};
|
||||
|
||||
enum InteractionType {
|
||||
UNK_0,
|
||||
PICK_UP,
|
||||
OPEN,
|
||||
UNK_3,
|
||||
TALK,
|
||||
EXAMINE_TALK,
|
||||
EXAMINE_6,
|
||||
UNK_7,
|
||||
GET_IN,
|
||||
READY_SWORD,
|
||||
UNK_10,
|
||||
UNK_11,
|
||||
READ,
|
||||
GRAB,
|
||||
CATCH,
|
||||
UNK_15,
|
||||
UNK_16,
|
||||
DIG,
|
||||
UNK_18,
|
||||
SIT,
|
||||
UNK_20,
|
||||
/* 0 */ UNK_0,
|
||||
/* 1 */ PICK_UP,
|
||||
/* 2 */ OPEN,
|
||||
/* 3 */ UNK_3,
|
||||
/* 4 */ TALK,
|
||||
/* 5 */ EXAMINE_TALK,
|
||||
/* 6 */ EXAMINE_6,
|
||||
/* 7 */ UNK_7,
|
||||
/* 8 */ GET_IN,
|
||||
/* 9 */ READY_SWORD,
|
||||
/* 10 */ UNK_10,
|
||||
/* 11 */ UNK_11,
|
||||
/* 12 */ READ,
|
||||
/* 13 */ GRAB,
|
||||
/* 14 */ CATCH,
|
||||
/* 15 */ UNK_15,
|
||||
/* 16 */ UNK_16,
|
||||
/* 17 */ DIG,
|
||||
/* 18 */ UNK_18,
|
||||
/* 19 */ SIT,
|
||||
/* 20 */ UNK_20,
|
||||
|
||||
UNK_0x58 = 0x58,
|
||||
};
|
||||
@@ -171,7 +171,7 @@ public:
|
||||
|
||||
private:
|
||||
/* 0xBDC */ u8 field_0xBDC;
|
||||
|
||||
|
||||
public:
|
||||
static AttentionManager *sInstance;
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ public:
|
||||
static bool eventRelatedStateFlags_shift0x11_1();
|
||||
|
||||
// Something like isActorInEvent maybe?
|
||||
static bool FUN_800a0570(dAcBase_c *actor);
|
||||
static bool FUN_800a0570(const dAcBase_c *actor);
|
||||
static bool FUN_800a0ba0();
|
||||
|
||||
private:
|
||||
|
||||
@@ -1,5 +1,35 @@
|
||||
#include "d/a/obj/d_a_obj_barrel.h"
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#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_s.h"
|
||||
#include "d/col/bg/d_bg_s_gnd_chk.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/col/cc/d_cc_s.h"
|
||||
#include "d/d_linkage.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
#include "d/snd/d_snd_wzsound.h"
|
||||
#include "f/f_base.h"
|
||||
#include "f/f_profile_name.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_quat.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "nw4r/math/math_arithmetic.h"
|
||||
#include "rvl/MTX/mtxvec.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/attention.h"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
|
||||
f32 sFloats1(1.f);
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_BARREL, dAcOBarrel_c, fProfile::OBJ_BARREL, 0x239, 0, 3);
|
||||
|
||||
STATE_DEFINE(dAcOBarrel_c, Wait);
|
||||
@@ -13,18 +43,493 @@ STATE_DEFINE(dAcOBarrel_c, Explode);
|
||||
STATE_DEFINE(dAcOBarrel_c, KrakenBorn);
|
||||
STATE_DEFINE(dAcOBarrel_c, Rebirth);
|
||||
|
||||
void dAcOBarrel_c::initializeState_Wait() {}
|
||||
void dAcOBarrel_c::executeState_Wait() {}
|
||||
static dCcD_SrcCyl sSrcCyl = {
|
||||
{
|
||||
/* mObjAt */ {AT_TYPE_PHYSICS, 0x10013, {0, 0, 0}, 4, 0, 0, 0, 0, 0},
|
||||
/* mObjTg */
|
||||
{~(AT_TYPE_BUGNET | AT_TYPE_BEETLE | AT_TYPE_0x80000 | AT_TYPE_0x8000), 0x2000111, {0, 0xF, 0x407}, 0, 0},
|
||||
/* mObjCo*/ {0xE9},
|
||||
},
|
||||
{
|
||||
55.f, 110.f,
|
||||
}
|
||||
};
|
||||
static dCcD_SrcSph sSrcSph = {
|
||||
{
|
||||
/* mObjAt */ {AT_TYPE_PHYSICS, 0x10003, {0, 0, 0}, 4, 0, 0, 0, 0, 0},
|
||||
/* mObjTg */
|
||||
{~(AT_TYPE_BUGNET | AT_TYPE_BEETLE | AT_TYPE_0x80000 | AT_TYPE_0x8000 | AT_TYPE_WIND),
|
||||
0x2000111,
|
||||
{0, 0xF, 0x407},
|
||||
0,
|
||||
0},
|
||||
/* mObjCo*/ {0xE9},
|
||||
},
|
||||
{55.f}
|
||||
};
|
||||
|
||||
static const char *sBarrelResFile[] = {
|
||||
"Barrel", // Normal
|
||||
"BarrelBomb", // Explode
|
||||
"Barrel", // Type2
|
||||
"Barrel", // Kraken
|
||||
};
|
||||
static const char *sBarrelResMdl[] = {
|
||||
"Barrel", // Normal
|
||||
"BarrelBomb", // Explode
|
||||
"Barrel", // Type2
|
||||
"Barrel", // Kraken
|
||||
};
|
||||
|
||||
bool dAcOBarrel_c::createHeap() {
|
||||
mType = getFromParams(0, 0xF);
|
||||
if (mType == 0xF) {
|
||||
mType = 0;
|
||||
}
|
||||
|
||||
mResFile = nw4r::g3d::ResFile(getOarcResFile(sBarrelResFile[mType]));
|
||||
TRY_CREATE(mMdl.create(mResFile.GetResMdl(sBarrelResMdl[mType]), &mAllocator, 0x120, 1, nullptr));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcOBarrel_c::actorCreate() {
|
||||
field_0xE18 = getFromParams(12, 0xFF);
|
||||
mBrokenFlag = getFromParams(20, 0xFF);
|
||||
field_0xE10 = getFromParams(4, 0x3);
|
||||
|
||||
field_0xE04 = (int)getFromParams(6, 0x3) <= 1 && mType == Normal;
|
||||
field_0xE05 = (int)getFromParams(6, 0x3) == 1 && mType == Normal;
|
||||
|
||||
field_0xE07 = getFromParams(10, 0x3) == 0;
|
||||
field_0xE0B = getFromParams(10, 0x3) == 1;
|
||||
field_0xE08 = getFromParams(8, 0x3) == 0;
|
||||
|
||||
CREATE_ALLOCATOR(dAcOBarrel_c);
|
||||
|
||||
if (!field_0xE08 && !isType_0()) {
|
||||
fn_8002EA30(-100.f, 0.f, 2.f, 1.f, 4.f, &mObjAcch);
|
||||
}
|
||||
|
||||
mObjAcch.Set(this, 1, &mAcchCir);
|
||||
mAcchCir.SetWall(20.f, 55.f);
|
||||
mObjAcch.SetField_0xC(4);
|
||||
mStts.SetRank(9);
|
||||
|
||||
mCyl.Set(sSrcCyl);
|
||||
mCyl.SetStts(mStts);
|
||||
if (!isType_0()) {
|
||||
mCyl.ClrAtSet();
|
||||
}
|
||||
mSph.Set(sSrcSph);
|
||||
mSph.SetStts(mStts);
|
||||
mObjAcch.OffClrSpeedY();
|
||||
|
||||
mAcceleration = -4.f;
|
||||
mMaxSpeed = -40.f;
|
||||
|
||||
field_0xDD8.y = 0.f;
|
||||
field_0xDEC = 0;
|
||||
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_0xDA0.set(1.f, 0.f, 0.f, 0.f);
|
||||
|
||||
if (isType_0()) {
|
||||
mRotation.z += 0x4000;
|
||||
unsetActorProperty(AC_PROP_0x1);
|
||||
mCyl.SetAtGrp(0x10);
|
||||
}
|
||||
|
||||
/* field_0xCC8 = this */
|
||||
/* field_0xCFC = this */
|
||||
|
||||
if (mRotation.x != 0 || mRotation.z != 0) {
|
||||
field_0xE02 = true;
|
||||
mQuat_c qz, qx;
|
||||
qx.setAxisRotation(mVec3_c::Ex, mRotation.x.radian());
|
||||
qz.setAxisRotation(mVec3_c::Ez, mRotation.x.radian());
|
||||
quat_0xD80 = qx * qz;
|
||||
|
||||
mRotation.x = mAng::Zero();
|
||||
mRotation.z = mAng::Zero();
|
||||
}
|
||||
|
||||
mMdl.setPriorityDraw(0x7F, 0x7F);
|
||||
if (mBrokenFlag < 0xFF && SceneflagManager::sInstance->checkBoolFlag(mRoomID, mBrokenFlag)) {
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
if (mType == 3) {
|
||||
mStateMgr.changeState(StateID_KrakenBorn);
|
||||
} else {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
getLinkage().set(0x24, 51.f, 0.f, 0.f, nullptr);
|
||||
}
|
||||
updateMatrix();
|
||||
getLinkage().bushTpFunc(mObjAcch);
|
||||
|
||||
mBoundingBox.Set(mVec3_c(-55.f, -10.f, -55.f), mVec3_c(55.f, 150.f, 55.f));
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOBarrel_c::actorPostCreate() {
|
||||
if (field_0xE04) {
|
||||
mCeLady.link(static_cast<dAcNpcCeLady_c *>(fManager_c::searchBaseByProfName(fProfile::NPC_CE_LADY)));
|
||||
mCeFriend.link(static_cast<dAcNpcCeFriend_c *>(fManager_c::searchBaseByProfName(fProfile::NPC_CE_FRIEND)));
|
||||
}
|
||||
|
||||
if (field_0xE08) {
|
||||
if (!isType_0()) {
|
||||
if (dBgS_ObjGndChk::CheckPos(mPosition + 100.f * mVec3_c::Ey)) {
|
||||
mPosition.y = dBgS_ObjGndChk::GetGroundHeight();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
f32 scale;
|
||||
if (getFromParams(8, 0x3) == 0) {
|
||||
scale = 1.f;
|
||||
} else {
|
||||
scale = 2.5f;
|
||||
}
|
||||
|
||||
if (field_0xE10 == 0 && isTimeshiftableType()) {
|
||||
(void)mTimeArea.check(mRoomID, mPosition, 0, 0.f, 0.1f);
|
||||
if (0.f < mTimeArea.getDistMaybe()) {
|
||||
field_0xE0C = true;
|
||||
mScale.set(scale, scale, scale);
|
||||
} else {
|
||||
field_0xE0D = true;
|
||||
mScale.set(0.f, 0.f, 0.f);
|
||||
}
|
||||
}
|
||||
|
||||
mWaterEffect.init(this, 100.f, scale, 0.f);
|
||||
mWaterEffect.setIsSmall(true);
|
||||
|
||||
if (field_0xE05 || checkFlag_0xE18()) {
|
||||
mStts.SetDefaultRank();
|
||||
} else if (field_0xE04) {
|
||||
mStts.SetRank(0xC);
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOBarrel_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOBarrel_c::actorExecute() {
|
||||
bool b4D00 = fn_293_4D00();
|
||||
mStateMgr.executeState();
|
||||
|
||||
if (!getLinkage().checkConnection(dLinkage_c::CONNECTION_1)) {
|
||||
if (!b4D00) {
|
||||
calcVelocity();
|
||||
mPosition += mVelocity;
|
||||
mPosition += mStts.GetCcMove();
|
||||
fn_293_3DB0();
|
||||
}
|
||||
|
||||
field_0xDD8.y += mPosition.y - mOldPosition.y;
|
||||
}
|
||||
|
||||
if (!b4D00) {
|
||||
getLinkage().bushTpFunc(mObjAcch);
|
||||
unsetActorProperty(AC_PROP_0x1);
|
||||
} else {
|
||||
setActorProperty(AC_PROP_0x1);
|
||||
}
|
||||
|
||||
if (!mStateMgr.isState(StateID_Explode) && fn_293_45A0()) {
|
||||
fn_293_4200();
|
||||
}
|
||||
|
||||
if (!mStateMgr.isState(StateID_Explode)) {
|
||||
if (fn_293_50B0()) {
|
||||
mCyl.SetAtGrp(0xC);
|
||||
} else {
|
||||
mCyl.OffAtGrp(0xC);
|
||||
}
|
||||
}
|
||||
|
||||
if (field_0xE10 == 0 && isTimeshiftableType()) {
|
||||
fn_293_5150();
|
||||
}
|
||||
|
||||
if (!mStateMgr.isState(StateID_Explode)) {
|
||||
if (!(field_0xE10 == 0 && isTimeshiftableType() && mScale.y < 1.f)) {
|
||||
mCyl.SetAtVec(mVelocity);
|
||||
mCyl.SetC(mPosition);
|
||||
mCyl.SetR(mScale.x * 55.f);
|
||||
mCyl.SetH(mScale.y * 110.f);
|
||||
|
||||
dCcS::GetInstance()->Set(&mCyl);
|
||||
}
|
||||
} else {
|
||||
f32 radius = getFromParams(8, 0x3) == 0 ? 800.f : 400.f;
|
||||
mSph.SetR(radius);
|
||||
mSph.SetC(mPosition);
|
||||
mSph.SetAtType(AT_TYPE_BOMB);
|
||||
mSph.SetAtGrp(0x1C);
|
||||
mSph.SetAtDamage(10);
|
||||
mSph.SetAtVec(mVec3_c::Zero);
|
||||
|
||||
dCcS::GetInstance()->Set(&mSph);
|
||||
dCcS::GetInstance()->GetMassMng().SetObj(&mSph, 1);
|
||||
}
|
||||
|
||||
if (!b4D00 || field_0xE02 == 0) {
|
||||
updateMatrix();
|
||||
}
|
||||
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
mMdl.setScale(mScale);
|
||||
|
||||
mPositionCopy3 = mPositionCopy2 = mPosition + mVec3_c(0.f, 51.f, 0.f);
|
||||
mPositionCopy3.y += 71.f;
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::registerInEvent() {
|
||||
if (mStateMgr.isState(StateID_Wait) && mObjAcch.ChkGndHit()) {
|
||||
const dAcObjBase_c *pObj = dBgS::GetInstance()->GetActorPointer(mObjAcch.GetGnd());
|
||||
if (pObj && EventManager::FUN_800a0570(pObj)) {
|
||||
setActorProperty(AC_PROP_0x4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::unkVirtFunc_0x6C() {
|
||||
if (mStateMgr.isState(StateID_Wait)) {
|
||||
unsetActorProperty(AC_PROP_0x4);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::doInteraction(s32 i) {
|
||||
if (i != PICK_UP) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (checkFlag_0xE18()) {
|
||||
SceneflagManager::sInstance->setFlag(mRoomID, field_0xE18);
|
||||
}
|
||||
}
|
||||
|
||||
int dAcOBarrel_c::draw() {
|
||||
drawModelType1(&mMdl);
|
||||
|
||||
static mQuat_c shadow(0.f, 50.f, 0.f, 80.f);
|
||||
|
||||
if (mYOffset >= 0.f) {
|
||||
drawShadow(mShadow, nullptr, mWorldMtx, &shadow, -1, -1, -1, -1, -1, mPosition.y - mObjAcch.GetGroundH());
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::initializeState_Wait() {
|
||||
mAcceleration = -4.f;
|
||||
field_0xE0E = false;
|
||||
}
|
||||
void dAcOBarrel_c::executeState_Wait() {
|
||||
fn_293_30D0();
|
||||
|
||||
if (field_0xE00 && field_0xE02) {
|
||||
field_0xE01 = fn_293_4ED0();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
if (field_0xE0A) {
|
||||
startSound(SE_Barrel_ROLL_GROUND);
|
||||
}
|
||||
field_0xE0A = true;
|
||||
} else if (mObjAcch.ChkGndHit()) {
|
||||
field_0xDD8.y = 0.f;
|
||||
mVelocity.y = 0.f;
|
||||
field_0xDBC = mVec3_c::Ey;
|
||||
fn_293_5360();
|
||||
if (!field_0xE02) {
|
||||
fn_293_58C0();
|
||||
mVec3_c v = field_0xDBC;
|
||||
v.rotY(-mRotation.y);
|
||||
quat_0xD70.Set(mVec3_c::Ey, v);
|
||||
}
|
||||
|
||||
if (fn_293_4A90(mAng::deg2short(1.f))) {
|
||||
mStateMgr.changeState(StateID_Slope);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!field_0xE08 && !isType_0() && mYOffset < 0.f && fn_293_4BC0()) {
|
||||
mSpeed = 0.f;
|
||||
field_0xE00 = false;
|
||||
fn_293_5910();
|
||||
}
|
||||
|
||||
if (!field_0xE08 && !isType_0() && checkYOffsetField_0x100()) {
|
||||
killNoItemDrop();
|
||||
return;
|
||||
}
|
||||
|
||||
fn_293_3560();
|
||||
|
||||
if (mSpeed < 0.2f) {
|
||||
field_0xE00 = false;
|
||||
sLib::chase(&mSpeed, 0.f, 0.05f);
|
||||
}
|
||||
|
||||
if (mSpeed > 0.f && field_0xE02) {
|
||||
holdSoundWithFloatParam(SE_Barrel_ROLL_LV, mSpeed);
|
||||
mCyl.OnAtSet();
|
||||
} else {
|
||||
mCyl.OffAtSet();
|
||||
}
|
||||
}
|
||||
|
||||
if (fn_293_4C60()) {
|
||||
mStateMgr.changeState(StateID_Water);
|
||||
} else if (getLinkage().checkConnection(dLinkage_c::CONNECTION_1)) {
|
||||
mStateMgr.changeState(StateID_GrabUp);
|
||||
}
|
||||
}
|
||||
void dAcOBarrel_c::finalizeState_Wait() {}
|
||||
void dAcOBarrel_c::initializeState_Grab() {}
|
||||
void dAcOBarrel_c::executeState_Grab() {}
|
||||
void dAcOBarrel_c::finalizeState_Grab() {}
|
||||
void dAcOBarrel_c::initializeState_GrabUp() {}
|
||||
void dAcOBarrel_c::executeState_GrabUp() {}
|
||||
void dAcOBarrel_c::finalizeState_GrabUp() {}
|
||||
void dAcOBarrel_c::initializeState_GrabPut() {}
|
||||
void dAcOBarrel_c::executeState_GrabPut() {}
|
||||
void dAcOBarrel_c::finalizeState_GrabPut() {}
|
||||
|
||||
void dAcOBarrel_c::initializeState_Grab() {
|
||||
mVelocity = mVec3_c::Zero;
|
||||
mAngle = mAng3_c::Zero;
|
||||
|
||||
field_0xE00 = false;
|
||||
|
||||
mCyl.SetCo_0x400();
|
||||
mCyl.ClrAtSet();
|
||||
}
|
||||
void dAcOBarrel_c::executeState_Grab() {
|
||||
if (!getLinkage().checkState(dLinkage_c::STATE_DELETE)) {
|
||||
field_0xE11 = getLinkage().getState();
|
||||
}
|
||||
|
||||
if (dAcPy_c::GetLink()->checkCurrentAction(/* PUT_DOWN_MEDIUM */ 0x42)) {
|
||||
field_0xE00 = false;
|
||||
mStateMgr.changeState(StateID_GrabPut);
|
||||
} else if (!getLinkage().checkConnection(dLinkage_c::CONNECTION_1)) {
|
||||
field_0xE00 = true;
|
||||
field_0xE01 = fn_293_4ED0();
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dAcOBarrel_c::finalizeState_Grab() {
|
||||
field_0xDD8.y = 0.f;
|
||||
field_0xDD4 = cM::rndF(40.f);
|
||||
mCyl.ClrCo_0x400();
|
||||
u8 state = getLinkage().getState();
|
||||
if (state == dLinkage_c::STATE_2 || state == dLinkage_c::STATE_3) {
|
||||
mCyl.OnAtSet();
|
||||
}
|
||||
}
|
||||
|
||||
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 rotY = dAcPy_c::GetLink()->mRotation.y - mRotation.y;
|
||||
|
||||
mQuat_c qy, qz;
|
||||
qy.setAxisRotation(mVec3_c::Ey, mAng::short2rad(sLib::absDiff(rotY, 0) > 0x4000 ? rotY += 0x8000 : rotY));
|
||||
qz.setAxisRotation(mVec3_c::Ez, mAng::short2rad(z ? 0x4000 : -0x4000));
|
||||
|
||||
quat_0xD60 = qy * qz;
|
||||
if (!field_0xE02) {
|
||||
quat_0xD70 = quat_0xD50;
|
||||
}
|
||||
|
||||
mCyl.SetCo_0x400();
|
||||
mCyl.OffAtSet();
|
||||
|
||||
if (field_0xE04) {
|
||||
field_0xE15 = 10;
|
||||
}
|
||||
|
||||
mStts.SetRank(9);
|
||||
}
|
||||
void dAcOBarrel_c::executeState_GrabUp() {
|
||||
if (field_0xE04 || field_0xE05) {
|
||||
dAcNpcCeLady_c *pCeLady = mCeLady.get();
|
||||
dAcNpcCeFriend_c *pCeFriend = mCeFriend.get();
|
||||
if (0 == sLib::calcTimer(&field_0xE15)) {
|
||||
if ((pCeLady && pCeLady->fn_12_1C20(this)) || (pCeFriend && pCeFriend->fn_11_17C0(this))) {
|
||||
getLinkage().fn_80050EA0(this);
|
||||
quat_0xD80 = quat_0xD60;
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
return;
|
||||
}
|
||||
field_0xDD8.y = 0.f;
|
||||
}
|
||||
}
|
||||
|
||||
if (dAcPy_c::GetLink()->checkCurrentAction(/* PICK UP */ 0x40)) {
|
||||
quat_0xD80.slerpTo(quat_0xD60, 0.2f, quat_0xD80);
|
||||
quat_0xD80.normalise();
|
||||
quat_0xD70.slerpTo(quat_0xD50, 0.2f, quat_0xD70);
|
||||
} else {
|
||||
if (!getLinkage().checkConnection(dLinkage_c::CONNECTION_1)) {
|
||||
field_0xDD8.y = 0.f;
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
} else {
|
||||
mStateMgr.changeState(StateID_Grab);
|
||||
}
|
||||
}
|
||||
}
|
||||
void dAcOBarrel_c::finalizeState_GrabUp() {
|
||||
mCyl.ClrCo_0x400();
|
||||
mCyl.OffAtSet();
|
||||
field_0xE02 = true;
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::initializeState_GrabPut() {
|
||||
field_0xE12 = 8;
|
||||
|
||||
if (EventManager::isInEvent() && EventManager::isCurrentEvent("CarryReqCancel")) {
|
||||
if (field_0xE05 || checkFlag_0xE18()) {
|
||||
mStts.SetDefaultRank();
|
||||
} else if (field_0xE04) {
|
||||
mStts.SetRank(0xC);
|
||||
}
|
||||
}
|
||||
}
|
||||
void dAcOBarrel_c::executeState_GrabPut() {
|
||||
if (dAcPy_c::GetLink()->checkCurrentAction(/* PUT_DOWN_MEDIUM */ 0x42) && 0 == sLib::calcTimer(&field_0xE12)) {
|
||||
quat_0xD80.slerpTo(quat_0xD50, 0.2f, quat_0xD80);
|
||||
quat_0xD80.normalise();
|
||||
}
|
||||
if (!getLinkage().checkConnection(dLinkage_c::CONNECTION_1)) {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dAcOBarrel_c::finalizeState_GrabPut() {
|
||||
field_0xE02 = false;
|
||||
quat_0xD80 = quat_0xD50;
|
||||
|
||||
if (dBgS_ObjGndChk::CheckPos(mPosition + mVec3_c::Ey * 10.f) &&
|
||||
nw4r::math::FAbs(mPosition.y - dBgS_ObjGndChk::GetGroundHeight()) < 100.f) {
|
||||
return;
|
||||
}
|
||||
mCyl.OnAtSet();
|
||||
}
|
||||
|
||||
void dAcOBarrel_c::initializeState_Slope() {}
|
||||
void dAcOBarrel_c::executeState_Slope() {}
|
||||
void dAcOBarrel_c::finalizeState_Slope() {}
|
||||
|
||||
@@ -152,7 +152,7 @@ int dAcOSeatSword_c::actorExecuteInEvent() {
|
||||
}
|
||||
|
||||
void dAcOSeatSword_c::doInteraction(s32 param0) {
|
||||
if (param0 == 5) {
|
||||
if (param0 == EXAMINE_TALK) {
|
||||
field_0x7EA = true;
|
||||
Event evt((char *)sEventName, 0x190, 0x100001, nullptr, nullptr);
|
||||
mEvent.scheduleEvent(evt, 0);
|
||||
|
||||
@@ -130,7 +130,7 @@ bool dAcOtoD3StoneFigure_c::isStoneOfTrialsPlaced() const {
|
||||
}
|
||||
|
||||
void dAcOtoD3StoneFigure_c::doInteraction(s32 arg) {
|
||||
if (arg == 5) {
|
||||
if (arg == EXAMINE_TALK) {
|
||||
Event event = Event("D3OpenStart", 100, 0x100001, nullptr, nullptr);
|
||||
EventManager::alsoSetAsCurrentEvent(this, &event, nullptr);
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "m/m_heap.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "toBeSorted/actor_info.h"
|
||||
#include "toBeSorted/attention.h"
|
||||
#include "toBeSorted/event.h"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
#include "toBeSorted/file_manager.h"
|
||||
@@ -676,7 +677,7 @@ void dAcBase_c::registerInEvent() {}
|
||||
void dAcBase_c::unkVirtFunc_0x6C() {}
|
||||
|
||||
void dAcBase_c::doInteraction(s32 param) {
|
||||
if (param == 4 || param == 5 || param == 12) {
|
||||
if (param == TALK || param == EXAMINE_TALK || param == READ) {
|
||||
Event event = Event("DefaultTalk", 400, 0x100001, nullptr, nullptr);
|
||||
EventManager::alsoSetAsCurrentEvent(this, &event, nullptr);
|
||||
}
|
||||
|
||||
@@ -197,7 +197,7 @@ void dAcSalbageObj_c::initSalbageObj() {
|
||||
}
|
||||
|
||||
void dAcSalbageObj_c::doInteraction(s32 arg) {
|
||||
if (arg == 4 || arg == 5 || arg == 12) {
|
||||
if (arg == TALK || arg == EXAMINE_TALK || arg == READ) {
|
||||
if (mStateMgr.isState(StateID_Wait) && dSalvageMgr_c::sInstance->hasObjAndSlb()) {
|
||||
dAcNpcTalkKensei_c::GetInstance()->triggerSalvageQuestion(this);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user