Skip to content
Merged
2 changes: 1 addition & 1 deletion config/SOUE01/rels/d_a_bombfNP/symbols.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,4 @@ lbl_17_data_190 = .data:0x00000190; // type:object size:0x34
lbl_17_data_1C4 = .data:0x000001C4; // type:object size:0x5 data:string
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
lbl_17_bss_8 = .bss:0x00000008; // type:object size:0x10
AcBombf__StateID_Wait = .bss:0x00000018; // type:object size:0x30 data:4byte
StateID_Wait__10dAcBombf_c = .bss:0x00000018; // type:object size:0x30 data:4byte
230 changes: 115 additions & 115 deletions config/SOUE01/symbols.txt

Large diffs are not rendered by default.

3 changes: 1 addition & 2 deletions include/d/a/d_a_bombf.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ class dAcBombf_c : public dAcObjBase_c {
dAcBombf_c() : mStateMgr(*this) {}
virtual ~dAcBombf_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int actorExecute() override;
virtual int draw() override;
virtual int doDelete() override;
Expand All @@ -31,7 +30,7 @@ class dAcBombf_c : public dAcObjBase_c {
/* 0x394 */ UNKWORD field_0x394;
/* 0x398 */ cBgS_PolyInfo field_0x398;
/* 0x3C4 */ TimeAreaStruct mTimeAreaStruct;
/* 0x3D0 */ bool field_0x3D0;
/* 0x3D0 */ bool mIsUnderground;
/* 0x3D1 */ u8 mDespawnSceneFlag;
/* 0x3D2 */ u8 field_0x3D2;
/* 0x3D3 */ u8 field_0x3D3;
Expand Down
60 changes: 56 additions & 4 deletions include/d/a/d_a_player.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/a/d_a_item.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/c/c_bg_s_poly_info.h"
#include "d/d_player_mdl.h"
#include "m/m_angle.h"
Expand Down Expand Up @@ -32,13 +33,44 @@ class dAcPy_c : public daPlayerModelBase_c {
/* vt 0x314 */ virtual void vt_0x314();
/* vt 0x318 */ virtual void vt_0x318();

struct ObjectArray {
static const size_t sNumObjects = 16;

bool insert(dAcObjBase_c *);
void execute();
dAcObjBase_c *get(s32 index);
void removeBombs();

dAcObjRef_c mObjs[sNumObjects];
u32 mCounter[sNumObjects];
};

protected:
/* 0x137C */ u8 _0x137C[0x16F0 - 0x137C];
/* 0x137C */ ObjectArray mOwnedObjects;
/* 0x147C */ ObjectArray mOwnedProjectiles;
/* 0x157C */ u8 _0x157C[0x16F0 - 0x157C];
/* 0x16F0 */ nw4r::g3d::ResFile mHeldResFile;
/* 0x16F4 */ u8 _0x16F4[0x4564 - 0x16F4];
/* 0x4564 */ f32 field_0x4564;

public:
// Bomb Function [0x80202CA0 - 0x80202DF0?]
static f32 getBombDistanceUnknown0();
static s32 getBombExplodeTimer();
static f32 getBombAcceleration();
static f32 getBombMaxSpeed();
static f32 getBombUnknown0_0();
static f32 getBombUnknown0_1();
static f32 getBombUnknown1_0();
static f32 getBombUnknown1_1();
static f32 getBombAcceleration_1();
static f32 getBombMaxSpeed_1();
static f32 getBombBounceSpeed();
static f32 getBombParticleScale();
static f32 getBombExplodeRadius();
static f32 getBombStopSpeedY();
static f32 getBombMaxSpeedY();

// Beetle Functions [0x8021AA70 - 0x8021BE20]
s16 getBeetleFlightTime();
mAng getBeetleAngle0();
Expand All @@ -58,6 +90,7 @@ class dAcPy_c : public daPlayerModelBase_c {
void setBeetleFlashClr(const mColor &);
void setBeetleBackAnim();
s32 getBeetleWarningTimeLeft();
void setBeetleReleasedObject(dAcObjBase_c *pObj);

// Item select/equip/use functions [0x801E3160 - 0x801E7AD0] ?
static s32 calcItemWheelSelection(bool reset, s32 numOptions);
Expand All @@ -75,6 +108,20 @@ class dAcPy_c : public daPlayerModelBase_c {
f32 fn_802097C0(); // 1000.0f
f32 fn_802097D0(); // 4000.0f

// Minigame Functions [0x8023BB60 - 0x8023BDD0]
static bool isInMinigameInsectCapture();
static bool isInMinigamePumpkinCarry();
static bool isInMinigameBambooCutting();
static bool isInMinigameThrillDigger();
static bool isInMinigameFunFunIsland();
static bool isInMinigameHouseCleaning();
static bool isInMinigameTrialTimeAttack();
static bool isInMinigameBossRush();
static bool isInMinigamePumpkinArchery();
static bool isInMinigameHarpPlaying();
static bool isInMinigameRollerCoaster();
static bool isInMinigameSprialChargeTutorial();

public:
f32 getField_0x4564() const {
return field_0x4564;
Expand Down Expand Up @@ -117,6 +164,14 @@ class dAcPy_c : public daPlayerModelBase_c {
return LINK2;
}

static bool insertOwnedObject(dAcObjBase_c *pObj) {
return LINK2->mOwnedObjects.insert(pObj);
}

ObjectArray &getOwnedObjects() {
return mOwnedObjects;
}

void onShieldUpdate();

static dAcPy_c *LINK;
Expand All @@ -130,9 +185,6 @@ class dAcPy_c : public daPlayerModelBase_c {
}
static s32 getCurrentBugNetType();

static bool isInBambooCuttingMinigame() {
return MinigameManager::isInMinigameState(MinigameManager::BAMBOO_CUTTING);
}
static bool isItemRestrictedByBokoBase(ITEM_ID item);

static u32 getCurrentHealthCapacity();
Expand Down
1 change: 1 addition & 0 deletions include/d/a/e/d_a_en_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ class dAcEnBase_c : public dAcObjBase_c {
bool fn_80030570(m3d::mdl_c &, u8, f32); // lighting related
void fn_800306D0();
void fn_80030700();
static void fn_800307E0(mVec3_c *pPos, s32);
dAcObjBase_c *targetPlayerOrScrapper(f32 biasToScrapper);
static void fn_80030980(m3d::mdl_c &, s32, bool markDirty);

Expand Down
3 changes: 0 additions & 3 deletions include/d/a/obj/d_a_obj_base.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#ifndef D_A_OBJ_BASE_H
#define D_A_OBJ_BASE_H

#include "c/c_math.h"
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/a/d_a_salbage_if.h"
Expand All @@ -14,11 +13,9 @@
#include "m/m3d/m_shadow.h"
#include "m/m3d/m_smdl.h"
#include "m/m_angle.h"
#include "m/m_color.h"
#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
Expand Down
137 changes: 110 additions & 27 deletions include/d/a/obj/d_a_obj_bomb.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,64 @@
#include "d/col/cc/d_cc_d.h"
#include "d/d_shadow.h"
#include "m/m3d/m_smdl.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateID.hpp"
#include "toBeSorted/d_emitter.h"

// This may need its own file and could be independent of a bomb
class UnkBombColInfo : public cBgS_PolyInfo {
public:
UnkBombColInfo() : field_0x10(0), field_0x14(0), field_0x18(0) {}
u32 field_0x10;
u32 field_0x14;
u32 field_0x18;
};

class dAcBomb_c : public dAcObjBase_c {
public:
dAcBomb_c() : mStateMgr(*this), mSelfRef(this), mEffect1(this), mEffect2(this) {}
virtual ~dAcBomb_c();
dAcBomb_c() : mStateMgr(*this), mUnkRef(this), mEffect1(this), mEffect2(this) {}
virtual ~dAcBomb_c() {}

enum Type_e {
BOMB_0 = 0, // Explode
BOMBF = 1,
BOMBF_CRAWLSPACE = 2,
BOMB_PLAYER_CARRY = 3, // Carry
BOMB_4 = 4, // Explode
BOMB_5 = 5, // Flower
BOMB_EXPLODE_NO_DAMAGE = 6,
BOMB_BOCO_CARRY = 7,
BOMB_MAX,
};

enum Flag_e {
FLAG_PLAYER_MAKE = (1 << 0),
FLAG_CHAIN_BOMB = (1 << 1), // When another bomb blows another bomb up
FLAG_BOMB_HIT = (1 << 2),
FLAG_0x8 = (1 << 3),
FLAG_0x10 = (1 << 4),
FLAG_UNDERWATER = (1 << 5),
FLAG_0x40 = (1 << 6),
FLAG_0x80 = (1 << 7),
FLAG_0x100 = (1 << 8),
FLAG_NEAR_TIMEDOOR = (1 << 9),
FLAG_0x400 = (1 << 10),
FLAG_FALL_IN_WATER = (1 << 11),
FLAG_DELETE_BOMB = (1 << 12),
FLAG_0x2000 = (1 << 13),
FLAG_0x4000 = (1 << 14),
FLAG_0x8000 = (1 << 15),
FLAG_0x10000 = (1 << 16),
FLAG_0x20000 = (1 << 17),
FLAG_ROLL = (1 << 18),
FLAG_0x80000 = (1 << 19),
FLAG_0x100000 = (1 << 20),
FLAG_0x200000 = (1 << 21),
FLAG_0x400000 = (1 << 22),
FLAG_FUSE_PAUSED = (1 << 23), // Like in cutscenes
FLAG_FLOWER = (1 << 24),
FLAG_BEETLE_CARRY = (1 << 25),
FLAG_0x4000000 = (1 << 26),
FLAG_BOKO_CARRY = (1 << 27),
FLAG_0x10000000 = (1 << 28),
FLAG_0x20000000 = (1 << 29),
FLAG_0x40000000 = (1 << 30),
FLAG_0x80000000 = (1 << 31),
};

/* vt 0x08 */ virtual int create() override;
/* vt 0x14 */ virtual int doDelete() override;
Expand All @@ -44,36 +83,80 @@ class dAcBomb_c : public dAcObjBase_c {
STATE_FUNC_DECLARE(dAcBomb_c, Carry);
STATE_FUNC_DECLARE(dAcBomb_c, WindCarry);

STATE_MGR_DEFINE_UTIL_ISSTATE(dAcBomb_c);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcBomb_c);
STATE_MGR_DEFINE_UTIL_GETSTATEID(dAcBomb_c);
STATE_MGR_DEFINE_UTIL_GETOLDSTATEID(dAcBomb_c);
STATE_MGR_DEFINE_UTIL_GETNEWSTATEID(dAcBomb_c);
STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcBomb_c);

void coHitCallback(cCcD_Obj *i_objInfB);
void tgHitCallback(dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfA, cCcD_Obj *i_objInfB);

void setTarget(const mVec3_c &t);

void setRoomId();
void setSmokePos();
bool checkWaterIn();
void setTransformFromFlower(const mMtx_c &);
void setPickupTarget();
bool checkExplode();
void lookAt();
void bounceWall(mAng angle);
void getVelocity(mVec3_c &out);
void setBombColor();
void rollTo(const mVec3_c &dir);
void rollToInternal(const mVec3_c &dir);

void Off_0xA3C(u32 mask) {
field_0xA3C &= ~mask;
s16 getFuseTimer() const {
return mFuseTime;
}
bool checkFlag(u32 mask) const {
return (mFlag & mask);
}
void unsetFlag(u32 mask) {
mFlag &= ~mask;
}
void On_0xA3C(u32 mask) {
field_0xA3C |= mask;
void setFlag(u32 mask) {
mFlag |= mask;
}

u32 getBombType() const {
return mParams;
}

private:
bool createModel();

public:
/* 0x330 */ nw4r::g3d::ResFile mBrres;
/* 0x330 */ nw4r::g3d::ResFile mRes;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ dShadowCircle_c mShdw;
/* 0x358 */ dBgS_BombAcch mAcch;
/* 0x708 */ dBgS_AcchCir mAcchCir;
/* 0x764 */ dCcD_Sph mCcDSph;
/* 0x764 */ dCcD_Sph mSph;
/* 0x8B4 */ mMtx_c mMtx;
/* 0x8E4 */ dBgS_BombLinChk mLinChk;
/* 0x97C */ UnkBombColInfo mUnkInfo;
/* 0x9B4 */ u8 _9B4[0x9B8 - 0x9B4];
/* 0x9B8 */ dAcBomb_c *mSelfRef;
/* 0x9BC */ u8 _9BC[0x9D4 - 0x9BC];
/* 0x97C */ cBgS_PolyInfo mUnkInfo;
/* 0x9A8 */ dAcObjRef_unk mUnkRef;
/* 0x9D4 */ dEmitter_c mEffect1;
/* 0xA08 */ dEmitter_c mEffect2;
/* 0xA3C */ u32 field_0xA3C;
/* 0xA40 */ u32 field_0xA40;
/* 0xA44 */ s16 field_0xA44;
/* 0xA46 */ u8 _3[0xA50 - 0xA46];
/* 0xA3C */ u32 mFlag;
/* 0xA40 */ u8 mRollFrameTimer; // Set to `60` upon roll - Uses additional force to roll bomb
/* 0xA41 */ u8 mMainMatID;
/* 0xA42 */ u8 field_0xA42;
/* 0xA44 */ s16 mFuseTime;
/* 0xA46 */ u16 mCarryTimer;
/* 0xA48 */ mAng mGndAngle;
/* 0xA4A */ mAng mRollRotationY;
/* 0xA4C */ f32 mRollSpeed;
/* 0xA50 */ f32 field_0xA50;
/* 0xA54 */ u8 _4[0xA9C - 0xA54];
/* 0xA54 */ mVec3_c mSmokePosNext;
/* 0xA60 */ mVec3_c mSmokePosPrev;
/* 0xA6C */ mVec3_c mSmokePos;
/* 0xA78 */ mVec3_c mExternalTranslation;
/* 0xA84 */ mVec3_c mHitForce;
/* 0xA90 */ mVec3_c mStreamForce;
/* 0xA9C */ STATE_MGR_DECLARE(dAcBomb_c);
};

Expand Down
1 change: 1 addition & 0 deletions include/d/col/bg/d_bg_pc.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ enum dBgPc_Attribute {
POLY_ATTR_DAMAGE = 13,
POLY_ATTR_SLOPE_RUN = 15,
POLY_ATTR_SAND_DEEP_SLOW = 16,
POLY_ATTR_CURSED_WATER = 17,
};
class dBgPc {
public:
Expand Down
27 changes: 21 additions & 6 deletions include/d/col/bg/d_bg_s_acch.h
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,12 @@ class dBgS_Acch : public cBgS_Chk, public dBgS_Chk {
const dBgS_GndChk &GetGnd() const {
return mGnd;
}
dBgS_WtrChk &GetWtr() {
return mWtr;
}
const dBgS_WtrChk &GetWtr() const {
return mWtr;
}

dBgS_RoofChk &GetRoof() {
return mRoof;
Expand All @@ -532,8 +538,17 @@ class dBgS_Acch : public cBgS_Chk, public dBgS_Chk {
return mRoof;
}

void SetField_0xD4(f32 v) {
field_0x0D4 = v;
void SetGndChkOffset(f32 v) {
mGndChkOffset = v;
}
void SetRoofCrrHeight(f32 v) {
mRoofCrrHeight = v;
}
void SetWaterCheckOffset(f32 v) {
mWtrCheckOffset = v;
}
void SetWtrChkMode(u8 v) {
mWtrMode = v;
}

public:
Expand All @@ -555,12 +570,12 @@ class dBgS_Acch : public cBgS_Chk, public dBgS_Chk {
/* 0x0A8 */ f32 field_0x0A8;
/* 0x0AC */ f32 field_0x0AC;
/* 0x0B0 */ f32 mGroundHeight;
/* 0x0B4 */ f32 field_0x0B4;
/* 0x0B4 */ f32 mGndChkOffset;
/* 0x0B8 */ cM3dGPla mPlane_0x0B8;
/* 0x0C8 */ f32 field_0x0C8;
/* 0x0CC */ f32 field_0x0CC;
/* 0x0D0 */ f32 mRoofHeight;
/* 0x0D4 */ f32 field_0x0D4;
/* 0x0D4 */ f32 mRoofCrrHeight;
/* 0x0D8 */ f32 field_0x0D8;
/* 0x0DC */ cBgS_PolyInfo *mpOutPolyInfo;
/* 0x0E0 */ f32 mRoofH_0x0E0;
Expand All @@ -572,9 +587,9 @@ class dBgS_Acch : public cBgS_Chk, public dBgS_Chk {
/* 0x1D0 */ f32 field_0x1D0;
/* 0x1D4 */ dBgS_GndChk mGnd;
/* 0x264 */ dBgS_RoofChk mRoof;
/* 0x2F4 */ f32 field_0x2F4;
/* 0x2F4 */ f32 mWtrCheckOffset;
/* 0x2F8 */ dBgS_WtrChk mWtr;
/* 0x390 */ u8 field_0x390;
/* 0x390 */ u8 mWtrMode;
/* 0x394 */ s32 field_0x394;
/* 0x398 */ mVec3_c field_0x398;
/* 0x3A4 */ mVec3_c field_0x3A4;
Expand Down
Loading
Loading