mirror of
https://github.com/zeldaret/ss
synced 2026-06-25 09:41:57 -04:00
d_a_obj_utajima OK (#72)
This commit is contained in:
@@ -11,3 +11,5 @@ REL/executor.c:
|
||||
|
||||
REL/d/a/obj/d_a_obj_utajima.cpp:
|
||||
.text start:0x00000070 end:0x000004E0
|
||||
.rodata start:0x00000000 end:0x0000000C
|
||||
.data start:0x00000000 end:0x000000F8
|
||||
|
||||
@@ -2,19 +2,19 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global
|
||||
_epilog = .text:0x00000030; // type:function size:0x2C scope:global
|
||||
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
|
||||
dAcOutajima_c_classInit__Fv = .text:0x00000070; // type:function size:0x7C
|
||||
AcOutajima__bgInteraction = .text:0x000000F0; // type:function size:0x7C
|
||||
AcOutajima__initModels = .text:0x00000170; // type:function size:0x18C
|
||||
AcOutajima__init = .text:0x00000300; // type:function size:0xD8
|
||||
fn_368_3E0 = .text:0x000003E0; // type:function size:0x8
|
||||
fn_368_3F0 = .text:0x000003F0; // type:function size:0x8
|
||||
AcOutajima__draw = .text:0x00000400; // type:function size:0x60
|
||||
rideCallback__13dAcOutajima_cFP4dBgWP12dAcObjBase_cP12dAcObjBase_c = .text:0x000000F0; // type:function size:0x7C
|
||||
createHeap__13dAcOutajima_cFv = .text:0x00000170; // type:function size:0x18C
|
||||
create__13dAcOutajima_cFv = .text:0x00000300; // type:function size:0xD8
|
||||
doDelete__13dAcOutajima_cFv = .text:0x000003E0; // type:function size:0x8
|
||||
actorExecute__13dAcOutajima_cFv = .text:0x000003F0; // type:function size:0x8
|
||||
draw__13dAcOutajima_cFv = .text:0x00000400; // type:function size:0x60
|
||||
__dt__13dAcOutajima_cFv = .text:0x00000460; // type:function size:0x80
|
||||
_ctors = .ctors:0x00000000; // type:label scope:global
|
||||
_dtors = .dtors:0x00000000; // type:label scope:global
|
||||
lbl_368_rodata_0 = .rodata:0x00000000; // type:object size:0x8 data:4byte
|
||||
lbl_368_rodata_8 = .rodata:0x00000008; // type:object size:0x4 data:float
|
||||
lbl_368_data_0 = .data:0x00000000; // type:object size:0x8
|
||||
lbl_368_data_8 = .data:0x00000008; // type:object size:0x10
|
||||
g_profile_OBJ_UTAJIMA = .data:0x00000018; // type:object size:0x44
|
||||
lbl_368_data_5C = .data:0x0000005C; // type:object size:0x1C
|
||||
lbl_368_data_78 = .data:0x00000078; // type:object size:0x80
|
||||
lbl_368_rodata_0 = .rodata:0x00000000; // type:object size:0x8 scope:local data:4byte
|
||||
lbl_368_rodata_8 = .rodata:0x00000008; // type:object size:0x4 scope:local data:float
|
||||
lbl_368_data_0 = .data:0x00000000; // type:object size:0x8 scope:local
|
||||
lbl_368_data_8 = .data:0x00000008; // type:object size:0x10 scope:local
|
||||
g_profile_OBJ_UTAJIMA = .data:0x00000018; // type:object size:0x10
|
||||
lbl_368_data_5C = .data:0x0000005C; // type:object size:0x1C scope:local
|
||||
__vt__13dAcOutajima_c = .data:0x00000078; // type:object size:0x80
|
||||
|
||||
+1
-1
@@ -1704,7 +1704,7 @@ config.libs = [
|
||||
),
|
||||
Rel(NonMatching, "d_a_obj_under_cloud", "REL/d/a/obj/d_a_obj_under_cloud.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_updown_lava", "REL/d/a/obj/d_a_obj_updown_lava.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_utajima", "REL/d/a/obj/d_a_obj_utajima.cpp"),
|
||||
Rel(Matching, "d_a_obj_utajima", "REL/d/a/obj/d_a_obj_utajima.cpp"),
|
||||
Rel(
|
||||
NonMatching, "d_a_obj_utajima_island", "REL/d/a/obj/d_a_obj_utajima_island.cpp"
|
||||
),
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define D_A_OBJ_BASE_H
|
||||
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/col/c/c_m3d_g_aab.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "m/m3d/m_shadow.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
@@ -60,7 +61,7 @@ public:
|
||||
/* 0x14C */ f32 forwardMaxSpeed;
|
||||
/* 0x150 */ mVec3_c velocity;
|
||||
/* 0x15C */ mMtx_c mWorldMtx;
|
||||
/* 0x18C */ nw4r::math::AABB boundingBox;
|
||||
/* 0x18C */ cM3dGAab boundingBox;
|
||||
/* 0x1A4 */ f32 mCullingDistance;
|
||||
/* 0x1A8 */ f32 field_0x1A8;
|
||||
/* 0x1AC */ u32 mObjectActorFlags;
|
||||
@@ -161,13 +162,6 @@ public:
|
||||
char *name, u32 roomId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, u32 params2, u16 id,
|
||||
u8 viewclipId
|
||||
);
|
||||
|
||||
protected:
|
||||
// TODO May be cM3dGAab (has a very similar set func)
|
||||
inline void setBoundingBox(mVec3_c min, mVec3_c max) {
|
||||
boundingBox.min = min;
|
||||
boundingBox.max = max;
|
||||
}
|
||||
};
|
||||
|
||||
// Actors' createHeap functions often have patterns that can be matched with this macro
|
||||
|
||||
@@ -2,13 +2,30 @@
|
||||
#define D_A_OBJ_UTAJIMA_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
|
||||
class dAcOutajima_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcOutajima_c() {}
|
||||
virtual ~dAcOutajima_c() {}
|
||||
|
||||
virtual bool createHeap() override;
|
||||
virtual int create() override;
|
||||
virtual int doDelete() override;
|
||||
virtual int actorExecute() override;
|
||||
virtual int draw() override;
|
||||
|
||||
private:
|
||||
|
||||
static void rideCallback(dBgW *, dAcObjBase_c *, dAcObjBase_c *);
|
||||
|
||||
m3d::smdl_c mMdls[2];
|
||||
nw4r::g3d::ResFile mRes;
|
||||
dBgW mBgW;
|
||||
mVec3_c mVec;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -13,8 +13,8 @@ STATE_DEFINE(dAcTWoodArea_c, Wait);
|
||||
int dAcTWoodArea_c::actorCreate() {
|
||||
mStateMgr.changeState(StateID_Init);
|
||||
PSMTXTrans(mWorldMtx.m, position.x, position.y, position.z);
|
||||
boundingBox.min = mVec3_c(-0.0f, -0.0f, -0.0f);
|
||||
boundingBox.max = mVec3_c(0.0f, 0.0f, 0.0f);
|
||||
boundingBox.mMin = mVec3_c(-0.0f, -0.0f, -0.0f);
|
||||
boundingBox.mMax = mVec3_c(0.0f, 0.0f, 0.0f);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ bool dAcEhb_leaf_c::createHeap() {
|
||||
int dAcEhb_leaf_c::create() {
|
||||
CREATE_ALLOCATOR(dAcEhb_leaf_c);
|
||||
|
||||
setBoundingBox(mVec3_c(-100.0f, -100.0f, -100.0f), mVec3_c(100.0f, 100.0f, 100.0f));
|
||||
boundingBox.Set(mVec3_c(-100.0f, -100.0f, -100.0f), mVec3_c(100.0f, 100.0f, 100.0f));
|
||||
|
||||
rotation.y = cM::rndF(65535.0f);
|
||||
someRot = rotation.y.mVal;
|
||||
|
||||
@@ -28,7 +28,7 @@ bool dAcOappearBridge_c::createHeap() {
|
||||
PLC *plc = (PLC *)getOarcFile("TongueStage", "dat/TongueStage.plc");
|
||||
updateMatrix();
|
||||
mModel.setLocalMtx(mWorldMtx);
|
||||
TRY_CREATE(!mCollision.Set(dzb, plc, 1, &mWorldMtx, &mScale));
|
||||
TRY_CREATE(!mCollision.Set(dzb, plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale));
|
||||
mCollision.Lock();
|
||||
return true;
|
||||
}
|
||||
@@ -48,7 +48,7 @@ int dAcOappearBridge_c::create() {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
mModel.setPriorityDraw(0x1C, 0x9);
|
||||
|
||||
setBoundingBox(mVec3_c(-3000.0f, -200.0f, -600.0f), mVec3_c(50.0f, 800.0f, 600.0f));
|
||||
boundingBox.Set(mVec3_c(-3000.0f, -200.0f, -600.0f), mVec3_c(50.0f, 800.0f, 600.0f));
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ bool dAcObambooIsland_c::createHeap() {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mModels[i].setLocalMtx(mWorldMtx);
|
||||
}
|
||||
TRY_CREATE(!mCollision.Set(dzb, plc, 1, &mWorldMtx, &mScale));
|
||||
TRY_CREATE(!mCollision.Set(dzb, plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale));
|
||||
mCollision.Lock();
|
||||
return true;
|
||||
}
|
||||
@@ -45,7 +45,7 @@ int dAcObambooIsland_c::create() {
|
||||
dBgS::GetInstance()->Regist(&mCollision, this);
|
||||
mModels[0].setPriorityDraw(0x1C, 9);
|
||||
mModels[1].setPriorityDraw(0x22, 9);
|
||||
setBoundingBox(mVec3_c(-2400.0f, -1600.0f, -2300.0f), mVec3_c(2400.0f, 3900.0f, 2400.0f));
|
||||
boundingBox.Set(mVec3_c(-2400.0f, -1600.0f, -2300.0f), mVec3_c(2400.0f, 3900.0f, 2400.0f));
|
||||
mCullingDistance = 500000.0f;
|
||||
mCollision.SetRideCallback(rideCallback);
|
||||
return SUCCEEDED;
|
||||
|
||||
@@ -39,7 +39,7 @@ int dAcOJunkRep_c::create() {
|
||||
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
|
||||
setBoundingBox(mVec3_c(-30.0f, -0.0f, -20.0f), mVec3_c(30.0f, 120.0f, 20.0f));
|
||||
boundingBox.Set(mVec3_c(-30.0f, -0.0f, -20.0f), mVec3_c(30.0f, 120.0f, 20.0f));
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ int dAcOlavaF200_c::create() {
|
||||
|
||||
mModels[0].setPriorityDraw(0x1C, 9);
|
||||
mModels[1].setPriorityDraw(0x22, 9);
|
||||
setBoundingBox(mVec3_c(-0.0f, -0.0f, -0.0f), mVec3_c(0.0f, 0.0f, 0.0f));
|
||||
boundingBox.Set(mVec3_c(-0.0f, -0.0f, -0.0f), mVec3_c(0.0f, 0.0f, 0.0f));
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ int dAcOmoleSoil_c::create() {
|
||||
dAcBase_c::mScale.set(sHalfScale, sHalfScale, sHalfScale);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
|
||||
setBoundingBox(mVec3_c(-100.0f, -0.0f, -100.0f), mVec3_c(100.0f, 100.0f, 100.0f));
|
||||
boundingBox.Set(mVec3_c(-100.0f, -0.0f, -100.0f), mVec3_c(100.0f, 100.0f, 100.0f));
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ int dAcOPoolCock_c::actorCreate() {
|
||||
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
|
||||
setBoundingBox(mVec3_c(-300.0f, -100.0f, -300.0f), mVec3_c(300.0f, 100.0f, 300.0f));
|
||||
boundingBox.Set(mVec3_c(-300.0f, -100.0f, -300.0f), mVec3_c(300.0f, 100.0f, 300.0f));
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ int dAcOPumpkinLeaf_c::create() {
|
||||
forwardMaxSpeed = -40.0f;
|
||||
updateMatrix();
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
setBoundingBox(mVec3_c(-50.0f, -10.0f, -50.0f), mVec3_c(50.0f, 50.0f, 50.0f));
|
||||
boundingBox.Set(mVec3_c(-50.0f, -10.0f, -50.0f), mVec3_c(50.0f, 50.0f, 50.0f));
|
||||
dAcObjBase_c::create(
|
||||
"PmpknBd", getRoomId(), 0, &position, &rotation, &mScale, getParams2_ignoreLower(), -1, viewclip_index
|
||||
);
|
||||
|
||||
@@ -20,7 +20,7 @@ int dAcOring_c::create() {
|
||||
|
||||
field_0x388 = getArgFromParams();
|
||||
|
||||
setBoundingBox(mVec3_c(-100.0f, -100.0f, -100.0f), mVec3_c(100.0f, 100.0f, 100.0f));
|
||||
boundingBox.Set(mVec3_c(-100.0f, -100.0f, -100.0f), mVec3_c(100.0f, 100.0f, 100.0f));
|
||||
updateMatrix();
|
||||
mModel.setScale(mScale);
|
||||
mModel.setLocalMtx(mWorldMtx);
|
||||
|
||||
@@ -32,7 +32,7 @@ int dAcOsmoke_c::create() {
|
||||
mModel.setLocalMtx(mWorldMtx);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
mModel.setPriorityDraw(0x1C, 9);
|
||||
setBoundingBox(mVec3_c(-0.0f, -0.0f, -0.0f), mVec3_c(0.0f, 0.0f, 0.0f));
|
||||
boundingBox.Set(mVec3_c(-0.0f, -0.0f, -0.0f), mVec3_c(0.0f, 0.0f, 0.0f));
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ int dAcOspike_c::create() {
|
||||
|
||||
mCollision.Set(tmp2, tmp3);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
setBoundingBox(mVec3_c(-10.0f, -250.0f, -480.0f), mVec3_c(80.0f, 260.0f, 490.0f));
|
||||
boundingBox.Set(mVec3_c(-10.0f, -250.0f, -480.0f), mVec3_c(80.0f, 260.0f, 490.0f));
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ int dAcOstageCover_c::create() {
|
||||
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
mModel.setPriorityDraw(0x1C, 9);
|
||||
setBoundingBox(mVec3_c(-0.0f, -0.0f, -0.0f), mVec3_c(0.0f, 0.0f, 0.0f));
|
||||
boundingBox.Set(mVec3_c(-0.0f, -0.0f, -0.0f), mVec3_c(0.0f, 0.0f, 0.0f));
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ int dAcOsunLight_c::create() {
|
||||
mModel.setAnm(mTexAnm);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
mModel.setPriorityDraw(0x1C, 9);
|
||||
setBoundingBox(mVec3_c(-200.0f, -100.0f, -200.0f), mVec3_c(200.0f, 600.0f, 500.0f));
|
||||
boundingBox.Set(mVec3_c(-200.0f, -100.0f, -200.0f), mVec3_c(200.0f, 600.0f, 500.0f));
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,84 @@
|
||||
#include "d/a/obj/d_a_obj_utajima.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/col/c/c_m3d_g_aab.h"
|
||||
#include "toBeSorted/item_story_flag_manager.h"
|
||||
#include "toBeSorted/room_manager.h"
|
||||
|
||||
static const char *const mMdlNames[] = {
|
||||
"IslSon",
|
||||
"IslSon_s",
|
||||
};
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_UTAJIMA, dAcOutajima_c, fProfile::OBJ_UTAJIMA, 0x1D4, 0, 3);
|
||||
|
||||
void dAcOutajima_c::rideCallback(dBgW *bg, dAcObjBase_c *o1, dAcObjBase_c *o2) {
|
||||
if (o2->isActorPlayer() && o1 != nullptr) {
|
||||
if (StoryflagManager::sInstance->getCounterOrFlag(285) == 0) {
|
||||
StoryflagManager::sInstance->setFlag(285);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool dAcOutajima_c::createHeap() {
|
||||
mRes = getOarcResFile("IslSon");
|
||||
RoomManager::bindStageResToFile(&mRes);
|
||||
RoomManager::bindSkyCmnToResFile(&mRes);
|
||||
|
||||
nw4r::g3d::ResMdl m = nullptr;
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
m = mRes.GetResMdl(mMdlNames[i]);
|
||||
TRY_CREATE(mMdls[i].create(m, &heap_allocator, 0x120));
|
||||
}
|
||||
|
||||
m = mRes.GetResMdl(mMdlNames[0]);
|
||||
void *dzb = getOarcFile("IslSon", "dzb/IslSon.dzb");
|
||||
void *plc = getOarcFile("IslSon", "dat/IslSon.plc");
|
||||
|
||||
updateMatrix();
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mMdls[i].setLocalMtx(mWorldMtx);
|
||||
}
|
||||
|
||||
TRY_CREATE(!mBgW.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale));
|
||||
mBgW.Lock();
|
||||
|
||||
mMdls[0].calc(true);
|
||||
nw4r::g3d::ResNode nd = m.GetResNode("SetLineGoal");
|
||||
mMdls[0].getNodeWorldMtxMultVecZero(nd.GetID(), mVec);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcOutajima_c::create() {
|
||||
CREATE_ALLOCATOR(dAcOutajima_c);
|
||||
dBgS::GetInstance()->Regist(&mBgW, this);
|
||||
mMdls[0].setPriorityDraw(0x1C, 9);
|
||||
mMdls[1].setPriorityDraw(0x22, 9);
|
||||
mVec3_c min;
|
||||
mVec3_c max;
|
||||
mMdls[0].getBounds(&min, &max);
|
||||
boundingBox.Set(min, max);
|
||||
mCullingDistance = 500000.0f;
|
||||
mBgW.SetRideCallback(rideCallback);
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOutajima_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOutajima_c::actorExecute() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOutajima_c::draw() {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
drawModelType1(&mMdls[i]);
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ int dAcObjFairy_c::create() {
|
||||
mStateMgr.changeState(StateID_CureStart);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
mModel.getModel().setPriorityDraw(0x7F, 0x7F);
|
||||
setBoundingBox(mVec3_c(-20.0f, -200.0f, -20.0f), mVec3_c(20.0f, 20.0f, 20.0f));
|
||||
boundingBox.Set(mVec3_c(-20.0f, -200.0f, -20.0f), mVec3_c(20.0f, 20.0f, 20.0f));
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ bool dAcOsw_c::createHeap() {
|
||||
field_0x5B8.set(mWorldMtx);
|
||||
mModel.setLocalMtx(mWorldMtx);
|
||||
|
||||
bool set = mCollision.Set(dbzData, plcData, 1, &field_0x5B8, &mScale);
|
||||
bool set = mCollision.Set(dbzData, plcData, cBgW::MOVE_BG_e, &field_0x5B8, &mScale);
|
||||
mCollision.SetCrrFunc(dBgS_MoveBGProc_TypicalRotY);
|
||||
return !set;
|
||||
}
|
||||
@@ -101,7 +101,7 @@ int dAcOsw_c::actorCreate() {
|
||||
} else {
|
||||
mStateMgr.changeState(StateID_OnWait);
|
||||
}
|
||||
setBoundingBox(mVec3_c(-90.0f, -10.0f, -90.0f), mVec3_c(90.0f, 70.0f, 90.0f));
|
||||
boundingBox.Set(mVec3_c(-90.0f, -10.0f, -90.0f), mVec3_c(90.0f, 70.0f, 90.0f));
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user