d_a_obj_pumpkin_bar ok

This commit is contained in:
CovenEsme
2025-03-14 04:40:02 +00:00
parent b3b140ff7f
commit 4fd686d56d
6 changed files with 105 additions and 12 deletions
@@ -11,3 +11,5 @@ REL/executor.c:
REL/d/a/obj/d_a_obj_pumpkin_bar.cpp:
.text start:0x00000070 end:0x00000490
.rodata start:0x00000000 end:0x00000020
.data start:0x00000000 end:0x00000100
@@ -2,16 +2,28 @@ _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
dAcOpumpkinBar_c_classInit__Fv = .text:0x00000070; // type:function size:0x6C
fn_391_E0 = .text:0x000000E0; // type:function size:0x7C
AcOpumpkinBar__initModels = .text:0x00000160; // type:function size:0x158
AcOpumpkinBar__init = .text:0x000002C0; // type:function size:0xF4
fn_391_3C0 = .text:0x000003C0; // type:function size:0x8
fn_391_3D0 = .text:0x000003D0; // type:function size:0x8
AcOpumpkinBar__draw = .text:0x000003E0; // type:function size:0x28
barCollisionRideCallback__16dAcOpumpkinBar_cFP4dBgWP12dAcObjBase_cP12dAcObjBase_c = .text:0x000000E0; // type:function size:0x7C
createHeap__16dAcOpumpkinBar_cFv = .text:0x00000160; // type:function size:0x158
create__16dAcOpumpkinBar_cFv = .text:0x000002C0; // type:function size:0xF4
doDelete__16dAcOpumpkinBar_cFv = .text:0x000003C0; // type:function size:0x8
actorExecute__16dAcOpumpkinBar_cFv = .text:0x000003D0; // type:function size:0x8
draw__16dAcOpumpkinBar_cFv = .text:0x000003E0; // type:function size:0x28
__dt__16dAcOpumpkinBar_cFv = .text:0x00000410; // type:function size:0x80
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
lbl_391_rodata_0 = .rodata:0x00000000; // type:object size:0x20 data:float
g_profile_OBJ_PUMPKIN_BAR = .data:0x00000000; // type:object size:0x60
lbl_391_data_60 = .data:0x00000060; // type:object size:0x20
AcOpumpkinBar__vtable = .data:0x00000080; // type:object size:0x80
lbl_391_rodata_00 = .rodata:0x00000000; // type:object size:0x4 scope:local data:float
lbl_391_rodata_04 = .rodata:0x00000004; // type:object size:0x4 scope:local data:float
lbl_391_rodata_08 = .rodata:0x00000008; // type:object size:0x4 scope:local data:float
lbl_391_rodata_0C = .rodata:0x0000000C; // type:object size:0x4 scope:local data:float
lbl_391_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float
lbl_391_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float
lbl_391_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float
lbl_391_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float
g_profile_OBJ_PUMPKIN_BAR = .data:0x00000000; // type:object size:0x10
lbl_391_data_10 = .data:0x00000010; // type:object size:0x7 scope:local data:string
lbl_391_data_18 = .data:0x00000018; // type:object size:0xE scope:local data:string
lbl_391_data_28 = .data:0x00000028; // type:object size:0xE scope:local data:string
lbl_391_data_28 = .data:0x00000038; // type:object size:0x14 scope:local data:string
lbl_391_data_4C = .data:0x0000004C; // type:object size:0x14 scope:local data:string
lbl_391_data_60 = .data:0x00000060; // type:object size:0x1F scope:local data:string
__vt__16dAcOpumpkinBar_c = .data:0x00000080; // type:object size:0x80
+1 -1
View File
@@ -1524,7 +1524,7 @@ config.libs = [
NonMatching, "d_a_obj_propeller_lift", "REL/d/a/obj/d_a_obj_propeller_lift.cpp"
),
Rel(NonMatching, "d_a_obj_propera", "REL/d/a/obj/d_a_obj_propera.cpp"),
Rel(NonMatching, "d_a_obj_pumpkin_bar", "REL/d/a/obj/d_a_obj_pumpkin_bar.cpp"),
Rel(Matching, "d_a_obj_pumpkin_bar", "REL/d/a/obj/d_a_obj_pumpkin_bar.cpp"),
Rel(Matching, "d_a_obj_pumpkin_leaf", "REL/d/a/obj/d_a_obj_pumpkin_leaf.cpp"),
Rel(NonMatching, "d_a_obj_push_block", "REL/d/a/obj/d_a_obj_push_block.cpp"),
Rel(NonMatching, "d_a_obj_puzzle_island", "REL/d/a/obj/d_a_obj_puzzle_island.cpp"),
+13 -1
View File
@@ -2,11 +2,23 @@
#define D_A_OBJ_PUMPKIN_BAR_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_w.h"
class dAcOpumpkinBar_c : public dAcObjBase_c {
public:
static void barCollisionRideCallback(dBgW *collider, dAcObjBase_c *actor, dAcObjBase_c *interactor);
dAcOpumpkinBar_c() {}
virtual ~dAcOpumpkinBar_c() {}
virtual int create() override;
virtual int doDelete() override;
virtual int draw() override;
virtual bool createHeap() override;
virtual ~dAcOpumpkinBar_c() override;
virtual int actorExecute() override;
/* 0x330 */ m3d::smdl_c mModel;
/* 0x34C */ nw4r::g3d::ResFile mResFile;
/* 0x350 */ dBgW mBarCollision;
/* 0x560 */ dBgW mBarBirdCollision;
private:
};
+3
View File
@@ -200,6 +200,9 @@ public:
u16 GetField_0x22() const {
return field_0x22;
}
void SetField_0x22(u16 val) {
field_0x22 = val;
}
bool ChkStickWall() const {
return field_0x24 & 1;
+64
View File
@@ -1,3 +1,67 @@
#include "d/a/obj/d_a_obj_pumpkin_bar.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "d/flag/storyflag_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_PUMPKIN_BAR, dAcOpumpkinBar_c, fProfile::OBJ_PUMPKIN_BAR, 0x1ED, 0, 3);
void dAcOpumpkinBar_c::barCollisionRideCallback(dBgW *collider, dAcObjBase_c *actor, dAcObjBase_c *interactor) {
if (interactor->isActorPlayer() && actor != 0 && !StoryflagManager::sInstance->getCounterOrFlag(282)) {
StoryflagManager::sInstance->setFlag(282);
}
}
bool dAcOpumpkinBar_c::createHeap() {
mResFile = nw4r::g3d::ResFile(getOarcResFile("IslBar"));
dStage_c::bindStageResToFile(&mResFile);
dStage_c::bindSkyCmnToResFile(&mResFile);
nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("IslBar");
TRY_CREATE(mModel.create(mdl, &heap_allocator, 0x120));
void *dzb = getOarcFile("IslBar", "dzb/IslBar.dzb");
void *plc = getOarcFile("IslBar", "dat/IslBar.plc");
updateMatrix();
mModel.setLocalMtx(mWorldMtx);
TRY_CREATE(!mBarCollision.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale));
mBarCollision.Lock();
dzb = getOarcFile("IslBar", "dzb/IslBar_Bird.dzb");
plc = getOarcFile("IslBar", "dat/IslBar_Bird.plc");
TRY_CREATE(!mBarBirdCollision.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale));
mBarBirdCollision.Lock();
return true;
}
int dAcOpumpkinBar_c::create() {
CREATE_ALLOCATOR(dAcOpumpkinBar_c);
dBgS::GetInstance()->Regist(&mBarCollision, this);
dBgS::GetInstance()->Regist(&mBarBirdCollision, this);
mBarBirdCollision.SetField_0x22(2);
mModel.setPriorityDraw(0x1C, 0x9);
// 100000.0 is in the rodata and the instructions need it.
// This also works if a separate variable is used but I
// think it's more likely that mCullingDistance got set twice.
mCullingDistance = 100000.0;
boundingBox.Set(mVec3_c(-2790.0f, -1450.0f, -8270.0f), mVec3_c(2880.0f, 2120.0f, 1370.0f));
mCullingDistance = 500000.0;
mBarCollision.SetRideCallback(barCollisionRideCallback);
return SUCCEEDED;
}
int dAcOpumpkinBar_c::doDelete() {
return SUCCEEDED;
}
int dAcOpumpkinBar_c::actorExecute() {
return SUCCEEDED;
}
int dAcOpumpkinBar_c::draw() {
drawModelType1(&mModel);
return SUCCEEDED;
}
dAcOpumpkinBar_c::~dAcOpumpkinBar_c() {}