d_a_obj_utajima OK (#72)

This commit is contained in:
robojumper
2024-10-19 20:27:02 +02:00
committed by GitHub
parent b96e6ee19f
commit 01b132f934
22 changed files with 136 additions and 42 deletions
@@ -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
View File
@@ -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 -8
View File
@@ -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
+17
View File
@@ -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
+2 -2
View File
@@ -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;
}
+1 -1
View File
@@ -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;
+2 -2
View File
@@ -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;
}
+2 -2
View File
@@ -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;
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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
);
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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;
}
+81
View File
@@ -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;
}
+1 -1
View File
@@ -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;
}
+2 -2
View File
@@ -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;
}