states finished

This commit is contained in:
elijah-thomas774
2025-11-16 01:13:40 -05:00
parent e696b17adb
commit 1e29b7940c
6 changed files with 341 additions and 67 deletions
+29 -29
View File
@@ -4,24 +4,24 @@ _unresolved = .text:0x00000060; // type:function size:0x4 scope:global
__register_global_object = .text:0x00000070; // type:function size:0x1C scope:global
__destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global
dAcOBarrel_c_classInit__Fv = .text:0x000000F0; // type:function size:0x16C
fn_293_260 = .text:0x00000260; // type:function size:0x58
__dt__15dShadowCircle_cFv = .text:0x00000260; // type:function size:0x58
__dt__25sFState_c<12dAcOBarrel_c>Fv = .text:0x000002C0; // type:function size:0x58
__dt__28sFStateFct_c<12dAcOBarrel_c>Fv = .text:0x00000320; // type:function size:0x6C
__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
__dt__14dWaterEffect_cFv = .text:0x000004E0; // type:function size:0x5C
createHeap__12dAcOBarrel_cFv = .text:0x00000540; // type:function size:0xAC
fn_293_5F0 = .text:0x000005F0; // type:function size:0x5B0
actorCreate__12dAcOBarrel_cFv = .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
fn_293_E00 = .text:0x00000E00; // type:function size:0x8
fn_293_E10 = .text:0x00000E10; // type:function size:0x3F4
actorPostCreate__12dAcOBarrel_cFv = .text:0x00000BB0; // type:function size:0x248
doDelete__12dAcOBarrel_cFv = .text:0x00000E00; // type:function size:0x8
actorExecute__12dAcOBarrel_cFv = .text:0x00000E10; // type:function size:0x3F4
executeState__81sStateMgr_c<12dAcOBarrel_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00001210; // type:function size:0x10
getStateID__81sStateMgr_c<12dAcOBarrel_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00001220; // type:function size:0x10
fn_293_1230 = .text:0x00001230; // type:function size:0xA0
fn_293_12D0 = .text:0x000012D0; // type:function size:0x70
fn_293_1340 = .text:0x00001340; // type:function size:0x9C
fn_293_13E0 = .text:0x000013E0; // type:function size:0xE8
registerInEvent__12dAcOBarrel_cFv = .text:0x00001230; // type:function size:0xA0
unkVirtFunc_0x6C__12dAcOBarrel_cFv = .text:0x000012D0; // type:function size:0x70
doInteraction__12dAcOBarrel_cFl = .text:0x00001340; // type:function size:0x9C
draw__12dAcOBarrel_cFv = .text:0x000013E0; // type:function size:0xE8
initializeState_Wait__12dAcOBarrel_cFv = .text:0x000014D0; // type:function size:0x18
executeState_Wait__12dAcOBarrel_cFv = .text:0x000014F0; // type:function size:0x35C
finalizeState_Wait__12dAcOBarrel_cFv = .text:0x00001850; // type:function size:0x4
@@ -54,30 +54,30 @@ initializeState_Rebirth__12dAcOBarrel_cFv = .text:0x00002DC0; // type:function s
executeState_Rebirth__12dAcOBarrel_cFv = .text:0x00002F70; // type:function size:0xE8
fn_293_3060 = .text:0x00003060; // type:function size:0x1C
finalizeState_Rebirth__12dAcOBarrel_cFv = .text:0x00003080; // type:function size:0x4C
fn_293_30D0 = .text:0x000030D0; // type:function size:0xE0
fn_293_31B0 = .text:0x000031B0; // type:function size:0x3B0
fn_293_3560 = .text:0x00003560; // type:function size:0x24C
fn_293_37B0 = .text:0x000037B0; // type:function size:0x26C
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
fn_293_3DB0 = .text:0x00003DB0; // type:function size:0x44C
fn_293_4200 = .text:0x00004200; // type:function size:0x39C
fn_293_45A0 = .text:0x000045A0; // type:function size:0x4E4
fn_293_4A90 = .text:0x00004A90; // type:function size:0x12C
fn_293_4BC0 = .text:0x00004BC0; // type:function size:0x58
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
fn_293_4A90__12dAcOBarrel_cFRC4mAng = .text:0x00004A90; // type:function size:0x12C
fn_293_4BC0__12dAcOBarrel_cFv = .text:0x00004BC0; // type:function size:0x58
fn_293_4C20 = .text:0x00004C20; // type:function size:0x40
fn_293_4C60 = .text:0x00004C60; // type:function size:0x78
fn_293_4C60__12dAcOBarrel_cFv = .text:0x00004C60; // type:function size:0x78
fn_293_4CE0 = .text:0x00004CE0; // type:function size:0x1C
fn_293_4D00 = .text:0x00004D00; // type:function size:0x1C4
fn_293_4ED0 = .text:0x00004ED0; // type:function size:0xA8
fn_293_4F80 = .text:0x00004F80; // type:function size:0x130
fn_293_50B0 = .text:0x000050B0; // type:function size:0x98
fn_293_5150 = .text:0x00005150; // type:function size:0x208
fn_293_5360 = .text:0x00005360; // type:function size:0xDC
fn_293_4D00__12dAcOBarrel_cFv = .text:0x00004D00; // type:function size:0x1C4
fn_293_4ED0__12dAcOBarrel_cFv = .text:0x00004ED0; // type:function size:0xA8
fn_293_4F80__12dAcOBarrel_cFv = .text:0x00004F80; // type:function size:0x130
fn_293_50B0__12dAcOBarrel_cFv = .text:0x000050B0; // type:function size:0x98
fn_293_5150__12dAcOBarrel_cFv = .text:0x00005150; // type:function size:0x208
fn_293_5360__12dAcOBarrel_cFv = .text:0x00005360; // type:function size:0xDC
fn_293_5440 = .text:0x00005440; // type:function size:0x8C
fn_293_54D0 = .text:0x000054D0; // type:function size:0x380
fn_293_5850 = .text:0x00005850; // type:function size:0x70
fn_293_58C0 = .text:0x000058C0; // type:function size:0x50
fn_293_5910 = .text:0x00005910; // type:function size:0xC0
fn_293_5850__12dAcOBarrel_cFPfb = .text:0x00005850; // type:function size:0x70
fn_293_58C0__12dAcOBarrel_cFv = .text:0x000058C0; // type:function size:0x50
fn_293_5910__12dAcOBarrel_cFv = .text:0x00005910; // type:function size:0xC0
__dt__12dAcOBarrel_cFv = .text:0x000059D0; // type:function size:0x164
build__28sFStateFct_c<12dAcOBarrel_c>FRC12sStateIDIf_c = .text:0x00005B40; // type:function size:0x60
dispose__28sFStateFct_c<12dAcOBarrel_c>FRP10sStateIf_c = .text:0x00005BA0; // type:function size:0xC
+22 -6
View File
@@ -10,6 +10,7 @@
#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_quat.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
@@ -46,6 +47,9 @@ public:
/** fn_293_30D0 */
void fn_293_30D0();
/** fn_293_31B0 */
void fn_293_31B0();
/** fn_293_3560 */
void fn_293_3560();
@@ -79,6 +83,9 @@ public:
/** fn_293_4ED0 */
bool fn_293_4ED0();
/** fn_293_4F80 */
bool fn_293_4F80();
/** fn_293_50B0 */
bool fn_293_50B0();
@@ -88,6 +95,9 @@ public:
/** fn_293_5360 */
void fn_293_5360();
/** fn_293_5850 */
void fn_293_5850(f32 *, bool);
/** fn_293_58C0 */
void fn_293_58C0();
@@ -132,7 +142,8 @@ private:
/* 0xC7C */ TimeAreaStruct mTimeArea;
/* 0xC88 */ dAcRef_c<dAcNpcCeLady_c> mCeLady;
/* 0xC94 */ dAcRef_c<dAcNpcCeFriend_c> mCeFriend;
/* 0xCA0 */ u8 _CA0[0xD08 - 0xCA0];
/* 0xCA0 */ EffectsStruct mEmitter0;
/* 0xCD4 */ EffectsStruct mEmitter1;
/* 0xD08 */ dWaterEffect_c mWaterEffect;
/* 0xD70 */ mQuat_c quat_0xD50;
/* 0xD70 */ mQuat_c quat_0xD60;
@@ -142,13 +153,17 @@ private:
/* 0xDA0 */ mQuat_c quat_0xDA0;
/* 0xDB0 */ u8 _DB0[0xDBC - 0xDB0];
/* 0xDBC */ mVec3_c field_0xDBC;
/* 0xDC8 */ u8 _DC8[0xDD4 - 0xDC8];
/* 0xDC8 */ mVec3_c field_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];
/* 0xDEA */ mAng field_0xDEA;
/* 0xDEC */ mAng field_0xDEC;
/* 0xDEE */ mAng field_0xDEE;
/* 0xDF0 */ mAng field_0xDF0;
/* 0xDF2 */ mAng field_0xDF2;
/* 0xDF4 */ u8 _DF4[0xDFE - 0xDF4];
/* 0xDF4 */ u16 field_0xDFE;
/* 0xE00 */ bool field_0xE00; //< Can Damage ?
/* 0xE01 */ bool field_0xE01;
/* 0xE02 */ bool field_0xE02;
@@ -158,7 +173,7 @@ private:
/* 0xE06 */ bool field_0xE06;
/* 0xE07 */ bool field_0xE07;
/* 0xE08 */ bool field_0xE08;
/* 0xE09 */ bool field_0xE09;
/* 0xE09 */ bool field_0xE09; //< for OBJ_VSD Present
/* 0xE0A */ bool field_0xE0A;
/* 0xE0B */ bool field_0xE0B;
/* 0xE0C */ bool field_0xE0C;
@@ -175,6 +190,7 @@ private:
/* 0xE17 */ u8 field_0xE17;
/* 0xE18 */ u8 field_0xE18;
/* 0xE19 */ u8 mBrokenFlag;
/* 0xE1C */ s32 mDropItem;
};
#endif
-3
View File
@@ -913,9 +913,6 @@ public:
void OnAtSet() {
mAt.OnSPrm(1);
}
void OffAtSet() {
mAt.OffSPrm(1);
}
u32 ChkAtNoMass() const {
return mAt.MskSPrm(0x400);
}
+3 -3
View File
@@ -17,9 +17,9 @@ enum SpecialItemDropTable {
SPECIAL_ITEM_8,
SPECIAL_ITEM_9,
SPECIAL_ITEM_10,
SPECIAL_ITEM_11,
SPECIAL_ITEM_12,
SPECIAL_ITEM_13,
SPECIAL_ITEM_10BOMBS,
SPECIAL_ITEM_ARROWS,
SPECIAL_ITEM_SEEDS,
// ...
};
+283 -22
View File
@@ -3,6 +3,7 @@
#include "c/c_math.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/npc/d_a_npc_ce_friend.h"
#include "d/a/npc/d_a_npc_ce_lady.h"
@@ -10,11 +11,14 @@
#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/c/c_m3d_g_tri.h"
#include "d/col/cc/d_cc_d.h"
#include "d/col/cc/d_cc_s.h"
#include "d/d_linkage.h"
#include "d/d_rumble.h"
#include "d/flag/sceneflag_manager.h"
#include "d/snd/d_snd_wzsound.h"
#include "egg/math/eggMath.h"
#include "f/f_base.h"
#include "f/f_profile_name.h"
#include "m/m_angle.h"
@@ -23,10 +27,12 @@
#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"
f32 sFloats1(1.f);
@@ -129,7 +135,7 @@ int dAcOBarrel_c::actorCreate() {
mMaxSpeed = -40.f;
field_0xDD8.y = 0.f;
field_0xDEC = 0;
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);
@@ -143,8 +149,8 @@ int dAcOBarrel_c::actorCreate() {
mCyl.SetAtGrp(0x10);
}
/* field_0xCC8 = this */
/* field_0xCFC = this */
mEmitter0.init(this);
mEmitter1.init(this);
if (mRotation.x != 0 || mRotation.z != 0) {
field_0xE02 = true;
@@ -393,7 +399,7 @@ void dAcOBarrel_c::executeState_Wait() {
holdSoundWithFloatParam(SE_Barrel_ROLL_LV, mSpeed);
mCyl.OnAtSet();
} else {
mCyl.OffAtSet();
mCyl.ClrAtSet();
}
}
@@ -457,7 +463,7 @@ void dAcOBarrel_c::initializeState_GrabUp() {
}
mCyl.SetCo_0x400();
mCyl.OffAtSet();
mCyl.ClrAtSet();
if (field_0xE04) {
field_0xE15 = 10;
@@ -495,7 +501,7 @@ void dAcOBarrel_c::executeState_GrabUp() {
}
void dAcOBarrel_c::finalizeState_GrabUp() {
mCyl.ClrCo_0x400();
mCyl.OffAtSet();
mCyl.ClrAtSet();
field_0xE02 = true;
}
@@ -530,21 +536,276 @@ void dAcOBarrel_c::finalizeState_GrabPut() {
mCyl.OnAtSet();
}
void dAcOBarrel_c::initializeState_Slope() {}
void dAcOBarrel_c::executeState_Slope() {}
void dAcOBarrel_c::finalizeState_Slope() {}
void dAcOBarrel_c::initializeState_Water() {}
void dAcOBarrel_c::executeState_Water() {}
void dAcOBarrel_c::finalizeState_Water() {}
void dAcOBarrel_c::initializeState_Water2() {}
void dAcOBarrel_c::executeState_Water2() {}
void dAcOBarrel_c::finalizeState_Water2() {}
void dAcOBarrel_c::initializeState_Explode() {}
void dAcOBarrel_c::executeState_Explode() {}
void dAcOBarrel_c::initializeState_Slope() {
mVec3_c vz_out;
cM3dGTri tri;
dBgS::GetInstance()->GetTriPla(mObjAcch.GetGnd(), &tri);
if (checkSlower(EGG::Math<f32>::epsilon())) {
mAngle.y = tri.GetAngleY();
mSpeed = 5.f;
}
field_0xDEE = tri.GetAngleY();
field_0xDEE -= mAngle.y;
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();
field_0xE09 = false;
if (dBgS_ObjGndChk::CheckPos(mPosition + mVec3_c::Ey * 100.f)) {
const dAcObjBase_c *pObj = dBgS::GetInstance()->GetActorPointer(dBgS_ObjGndChk::GetInstance());
if (dBgS::GetInstance()->ChkMoveBG(dBgS_ObjGndChk::GetInstance(), true)) {
if (pObj && pObj->mProfileName == fProfile::OBJ_VSD) {
field_0xE09 = true;
quat_0xD70.set(1.f, 0.f, 0.f, 0.f);
}
}
}
}
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);
startSound(SE_Barrel_ROLL_GROUND);
} else if (mObjAcch.ChkGndHit()) {
field_0xDD8.y = 0.f;
mVelocity.y = 0.f;
fn_293_30D0();
if (field_0xE02) {
fn_293_31B0();
} else {
fn_293_58C0();
mVec3_c v = field_0xDBC;
v.rotY(-mRotation.y);
if (field_0xE09) {
v = mVec3_c::Ey;
}
quat_0xD70.Set(mVec3_c::Ey, v);
}
fn_293_3560();
if (checkSlower(EGG::Math<f32>::epsilon())) {
field_0xE00 = false;
} else if (field_0xE02) {
field_0xE00 = fn_293_4F80();
}
if (!field_0xE08 && !isType_0() && mYOffset < 0.f && fn_293_4BC0()) {
mSpeed = 0.f;
field_0xE00 = false;
fn_293_5910();
}
if (mSpeed > 0.f && field_0xE02) {
holdSoundWithFloatParam(SE_Barrel_ROLL_LV, mSpeed);
mCyl.OnAtSet();
} else {
mCyl.ClrAtSet();
}
if (!field_0xE08 && !isType_0() && checkYOffsetField_0x100()) {
killNoItemDrop();
return;
}
if (!fn_293_4A90(mAng::deg2short(1))) {
mStateMgr.changeState(StateID_Wait);
return;
}
}
if (fn_293_4C60()) {
mStateMgr.changeState(StateID_Water);
} else if (getLinkage().checkConnection(dLinkage_c::CONNECTION_1)) {
mStateMgr.changeState(StateID_GrabUp);
}
}
void dAcOBarrel_c::finalizeState_Slope() {
field_0xE09 = false;
}
void dAcOBarrel_c::initializeState_Water() {
field_0xDE4.x = cM::rndInt(0x100) + 0x900;
field_0xDF2 = cM::rndInt(0x100) + 0x1000;
mAcceleration *= 0.25f;
mVelocity.y *= 0.25f;
mStts.SetRank(9);
field_0xE16 = 120;
startSound(SE_Barrel_ROLL_FLOAT);
startSound(SE_O_FALL_WATER_M);
}
void dAcOBarrel_c::executeState_Water() {
if (mType == dAcOBarrel_c::Type2 && 0 == sLib::calcTimer(&field_0xE16)) {
mVelocity.y = nw4r::ut::Max(mVelocity.y + mAcceleration * 0.2f, mMaxSpeed * 0.2f);
if (mObjAcch.ChkGndHit()) {
fn_293_4200();
}
} else {
fn_293_5850(&sFloats1, true);
if (mScale.y > 0.f) {
mWaterEffect.execute(mObjAcch.GetWtrGroundH(), mObjAcch.GetGroundH());
}
if (mType != dAcOBarrel_c::Type2 && nw4r::math::FAbs(field_0xDD8.z + mAcceleration) < 0.1f &&
nw4r::math::FAbs(mVelocity.y + mAcceleration) < 0.1f) {
mStateMgr.changeState(StateID_Water2);
} else if (!fn_293_4C60()) {
mStateMgr.changeState(StateID_Wait);
}
}
}
void dAcOBarrel_c::finalizeState_Water() {
field_0xDF2 = mAng::Zero();
}
void dAcOBarrel_c::initializeState_Water2() {
mVelocity.y = cM::rndFX(0.1f) + 0.2f;
field_0xDF2 = cM::rndInt(0x50) + 0x300;
field_0xDE4.x = cM::rndInt(0x100) + 0x400;
}
void dAcOBarrel_c::executeState_Water2() {
static f32 sFloat = 1.f;
fn_293_5850(&sFloat, false);
if (mScale.y > 0.f) {
mWaterEffect.execute(mObjAcch.GetWtrGroundH(), mObjAcch.GetGroundH());
}
if (!fn_293_4C60()) {
mStateMgr.changeState(StateID_Wait);
}
}
void dAcOBarrel_c::finalizeState_Water2() {
field_0xDF2 = mAng::Zero();
}
void dAcOBarrel_c::initializeState_Explode() {
setActorProperty(AC_PROP_0x4);
mSpeed = 0.f;
mVelocity = mVec3_c::Zero;
mAcceleration = 0.f;
mSph.ClrTgSet();
mSph.ClrCoSet();
mSph.OnAtSet();
field_0xE13 = 5;
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);
}
}
void dAcOBarrel_c::executeState_Explode() {
if (0 == sLib::calcTimer(&field_0xE13)) {
if (field_0xE07) {
itemDroppingAndGivingRelated(nullptr, 0);
}
deleteRequest();
}
}
void dAcOBarrel_c::finalizeState_Explode() {}
void dAcOBarrel_c::initializeState_KrakenBorn() {}
void dAcOBarrel_c::executeState_KrakenBorn() {}
void dAcOBarrel_c::initializeState_KrakenBorn() {
mSpeed = 30.f;
mCyl.OffAtGrp(0x2);
field_0xE00 = true;
field_0xE02 = true;
}
void dAcOBarrel_c::executeState_KrakenBorn() {
if (mObjAcch.ChkGroundLanding()) {
fn_293_37B0();
dJEffManager_c::spawnGroundEffect(mPosition, mPolyAttr0, mPolyAttr1, mVelocity, 0, 1.f, field_0x1B0);
startSound(SE_Barrel_ROLL_GROUND);
} else if (mObjAcch.ChkGndHit()) {
field_0xDD8.y = 0.f;
mVelocity.y = 0.f;
if (mSpeed > 0.f) {
holdSoundWithFloatParam(SE_Barrel_ROLL_LV, mSpeed);
}
}
if (fn_293_4C60()) {
deleteRequest();
}
}
void dAcOBarrel_c::finalizeState_KrakenBorn() {}
void dAcOBarrel_c::initializeState_Rebirth() {}
void dAcOBarrel_c::executeState_Rebirth() {}
void dAcOBarrel_c::finalizeState_Rebirth() {}
void dAcOBarrel_c::initializeState_Rebirth() {
SpecialItemDropMgr::GetInstance()->giveSpecialDropItem(
getParams2UpperByte(), mRoomID, &mPosition, 0, mRotation.y, -1
);
field_0xDC8 = mPosition;
mpPosition = &field_0xDC8;
mRotation = mRotationCopy;
quat_0xD90.set(1.f, 0.f, 0.f, 0.f);
quat_0xD70.set(1.f, 0.f, 0.f, 0.f);
quat_0xD80.set(1.f, 0.f, 0.f, 0.f);
quat_0xDA0.set(1.f, 0.f, 0.f, 0.f);
mSpeed = 0.f;
mVelocity.y = 0.f;
field_0xDD8.y = 0.f;
mCyl.ClrCoSet();
mCyl.ClrTgSet();
getLinkage().fn_80050EA0(this);
mStts.SetRank(0);
setObjectProperty(OBJ_PROP_0x200);
switch (getParams2UpperByte()) {
case SPECIAL_ITEM_10BOMBS: mDropItem = 2; break;
case SPECIAL_ITEM_ARROWS: mDropItem = 0; break;
case SPECIAL_ITEM_SEEDS: mDropItem = 1; break;
}
field_0xDFE = 150;
unsetActorProperty(AC_PROP_0x1);
}
void dAcOBarrel_c::executeState_Rebirth() {
field_0xDD8.y = 0.f;
// Why??
mPosition.set(mPositionCopy.x, mPositionCopy.y, mPositionCopy.z);
mOldPosition.set(mPositionCopy.x, mPositionCopy.y, mPositionCopy.z);
u8 count = 0xFF;
switch (mDropItem) {
case 2: count = dAcItem_c::getTotalBombCount(); break;
case 0: count = dAcItem_c::getTotalArrowCount(); break;
case 1: count = dAcItem_c::getTotalSeedCount(); break;
}
if (checkObjectProperty(OBJ_PROP_0x2) && count <= 3) {
if (0 == sLib::calcTimer(&field_0xDFE)) {
mStateMgr.changeState(StateID_Wait);
}
} else {
field_0xDFE = 150;
}
}
void dAcOBarrel_c::finalizeState_Rebirth() {
mCyl.OnCoSet();
mCyl.OnTgSet();
field_0xE02 = false;
mpPosition = &mPosition;
unsetObjectProperty(OBJ_PROP_0x200);
setActorProperty(AC_PROP_0x1);
mStts.SetRank(9);
}
+4 -4
View File
@@ -407,10 +407,10 @@ void dAcOtubo_c::initializeState_Rebirth() {
int item_drop_table = getParams2UpperByte();
switch (item_drop_table) {
default: break;
case SPECIAL_ITEM_11: field_0x9FC = 2; break;
case SPECIAL_ITEM_12: field_0x9FC = 0; break;
case SPECIAL_ITEM_13: field_0x9FC = 1; break;
default: break;
case SPECIAL_ITEM_10BOMBS: field_0x9FC = 2; break;
case SPECIAL_ITEM_ARROWS: field_0x9FC = 0; break;
case SPECIAL_ITEM_SEEDS: field_0x9FC = 1; break;
}
mTimer_0x9E8 = 150;
unsetActorProperty(AC_PROP_0x1);