summaryrefslogtreecommitdiff
path: root/src/d/actor/d_a_obj_figure.cpp
diff options
context:
space:
mode:
authorLagoLunatic <LagoLunatic@users.noreply.github.com>2025-06-18 19:15:47 -0400
committerLagoLunatic <LagoLunatic@users.noreply.github.com>2025-06-18 19:15:47 -0400
commit65379a432f71d54447ca837c15eb8ff5d1c39960 (patch)
treeae590993ec24e5e77dc6032626aa0fb625733bf1 /src/d/actor/d_a_obj_figure.cpp
parent8c7c7769f7afb4a804e94fd3ba3b99f5d350762c (diff)
d_a_obj_figure demo almost matches
Diffstat (limited to 'src/d/actor/d_a_obj_figure.cpp')
-rw-r--r--src/d/actor/d_a_obj_figure.cpp107
1 files changed, 89 insertions, 18 deletions
diff --git a/src/d/actor/d_a_obj_figure.cpp b/src/d/actor/d_a_obj_figure.cpp
index 518cb63d..b8c8d317 100644
--- a/src/d/actor/d_a_obj_figure.cpp
+++ b/src/d/actor/d_a_obj_figure.cpp
@@ -30,11 +30,13 @@ static const char* l_arcname_tbl[] = {
"Figure5",
"Figure3",
"Figure4",
+#if VERSION > VERSION_DEMO
"Figure2a",
"Figure2b",
"Figure6a",
"Figure6b",
"Figure6c",
+#endif
};
static u16 l_figure_comp[] = {
@@ -96,14 +98,14 @@ struct FigureData {
}; // Size: 0x0C
#if VERSION == VERSION_DEMO
-#define FIGUREDAT(bmdIdx, dlistFlags, roomId) \
+#define FIGUREDAT(bmdId, dlistFlags, roomId) \
{ \
- bmdIdx, dlistFlags \
+ bmdId, dlistFlags \
}
#else
-#define FIGUREDAT(bmdIdx, dlistFlags, roomId) \
+#define FIGUREDAT(bmdId, dlistFlags, roomId) \
{ \
- bmdIdx, dlistFlags, roomId \
+ bmdId, dlistFlags, roomId \
}
#endif
@@ -149,7 +151,9 @@ static const FigureData l_figure_dat_tbl[TOTAL_FIGURE_COUNT] = {
FIGUREDAT(0x1A, 0x37441422, -1),
FIGUREDAT(0x1B, 0x37441422, -1),
FIGUREDAT(0x1C, 0x37441422, -1),
+#if VERSION > VERSION_DEMO
FIGUREDAT(0x00, 0x37441422, 8),
+#endif
FIGUREDAT(0x01, 0x37441422, 8),
FIGUREDAT(0x02, 0x37441422, 8),
FIGUREDAT(0x03, 0x37441422, 8),
@@ -162,8 +166,22 @@ static const FigureData l_figure_dat_tbl[TOTAL_FIGURE_COUNT] = {
FIGUREDAT(0x0A, 0x37441422, 8),
FIGUREDAT(0x0B, 0x37441422, 8),
FIGUREDAT(0x0C, 0x37441422, 8),
+#if VERSION == VERSION_DEMO
+ FIGUREDAT(0x17, 0x37441422, -1),
+#endif
FIGUREDAT(0x0D, 0x37441422, 8),
FIGUREDAT(0x0E, 0x37441422, 8),
+#if VERSION == VERSION_DEMO
+ FIGUREDAT(0x18, 0x37441422, 8),
+ FIGUREDAT(0x0F, 0x37441422, 8),
+ FIGUREDAT(0x10, 0x37441422, 8),
+ FIGUREDAT(0x11, 0x37441422, 8),
+ FIGUREDAT(0x12, 0x37441422, 8),
+ FIGUREDAT(0x19, 0x37441422, 9),
+ FIGUREDAT(0x13, 0x37441422, 9),
+ FIGUREDAT(0x14, 0x37441422, 9),
+ FIGUREDAT(0x16, 0x37441422, 9),
+#else
FIGUREDAT(0x0F, 0x37441422, 8),
FIGUREDAT(0x10, 0x37441422, 8),
FIGUREDAT(0x11, 0x37441422, 8),
@@ -173,6 +191,7 @@ static const FigureData l_figure_dat_tbl[TOTAL_FIGURE_COUNT] = {
FIGUREDAT(0x01, 0x37441422, 9),
FIGUREDAT(0x02, 0x37441422, 9),
FIGUREDAT(0x05, 0x37441422, 9),
+#endif
FIGUREDAT(0x00, 0x11001222, -1),
FIGUREDAT(0x01, 0x37441422, -1),
FIGUREDAT(0x02, 0x37441422, -1),
@@ -225,13 +244,29 @@ static const FigureData l_figure_dat_tbl[TOTAL_FIGURE_COUNT] = {
FIGUREDAT(0x10, 0x37441422, -1),
FIGUREDAT(0x11, 0x37441422, -1),
FIGUREDAT(0x00, 0x37441422, 0xA),
+#if VERSION == VERSION_DEMO
+ FIGUREDAT(0x10, 0x37441422, 0xA),
+#else
FIGUREDAT(0x01, 0x37441422, 0xA),
+#endif
FIGUREDAT(0x02, 0x11001222, 0xA),
FIGUREDAT(0x03, 0x11001222, 0xA),
FIGUREDAT(0x04, 0x11001222, 0xA),
FIGUREDAT(0x05, 0x37441422, 0xA),
FIGUREDAT(0x06, 0x37441422, 0xA),
FIGUREDAT(0x07, 0x37441422, 0xA),
+#if VERSION == VERSION_DEMO
+ FIGUREDAT(0x08, 0x37441422, 0xB),
+ FIGUREDAT(0x09, 0x11001222, 0xB),
+ FIGUREDAT(0x01, 0x11001222, 0xB),
+ FIGUREDAT(0x0A, 0x37441422, 0xB),
+ FIGUREDAT(0x0B, 0x37441422, 0xB),
+ FIGUREDAT(0x0C, 0x11001222, 0xC),
+ FIGUREDAT(0x0D, 0x37441422, 0xC),
+ FIGUREDAT(0x0E, 0x11001222, 0xC),
+ FIGUREDAT(0x11, 0x11001222, 0xC),
+ FIGUREDAT(0x0F, 0x37441422, 0xC),
+#else
FIGUREDAT(0x00, 0x37441422, 0xB),
FIGUREDAT(0x01, 0x11001222, 0xB),
FIGUREDAT(0x02, 0x11001222, 0xB),
@@ -242,6 +277,7 @@ static const FigureData l_figure_dat_tbl[TOTAL_FIGURE_COUNT] = {
FIGUREDAT(0x02, 0x11001222, 0xC),
FIGUREDAT(0x03, 0x11001222, 0xC),
FIGUREDAT(0x04, 0x37441422, 0xC),
+#endif
};
struct FigureCheckTbl {
@@ -388,7 +424,12 @@ static cPhs_State phase_2(daObjFigure_c* i_this) {
cPhs_State status = dComIfG_resLoad(i_this->getPhase2P(), l_arcname_tbl[id]);
if(status == cPhs_COMPLEATE_e) {
- if(fopAcM_entrySolidHeap(i_this, CheckCreateHeap, figureNo == 0x40 ? 0x25000 : 0xCD90)) {
+#if VERSION == VERSION_DEMO
+ if(fopAcM_entrySolidHeap(i_this, CheckCreateHeap, 0))
+#else
+ if(fopAcM_entrySolidHeap(i_this, CheckCreateHeap, figureNo == 0x40 ? 0x25000 : 0xCD90))
+#endif
+ {
return i_this->createInit();
}
else {
@@ -412,15 +453,15 @@ cPhs_State daObjFigure_c::_create() {
/* 00000720-00000A90 .text createHeap__13daObjFigure_cFv */
BOOL daObjFigure_c::createHeap() {
- int id = dSnap_GetFigRoomId(getFigureNo());
+ int roomId = dSnap_GetFigRoomId(getFigureNo());
#if VERSION > VERSION_DEMO
if(l_figure_dat_tbl[getFigureNo()].mRoomId >= 0) {
- id = l_figure_dat_tbl[getFigureNo()].mRoomId;
+ roomId = l_figure_dat_tbl[getFigureNo()].mRoomId;
}
#endif
J3DModelData* pModelData;
- const char* arcname = l_arcname_tbl[id];
+ const char* arcname = l_arcname_tbl[roomId];
pModelData = (J3DModelData*)(dComIfG_getObjectIDRes(arcname, getFigureBmd(mFigureNo)));
if(pModelData == NULL) {
return false;
@@ -446,22 +487,28 @@ BOOL daObjFigure_c::createHeap() {
return false;
}
}
+ J3DModelData* pPedestalData;
if(mFigureNo == 0x40) {
- J3DModelData* p1 = (J3DModelData*)dComIfG_getObjectIDRes(arcname, FIGURE2_BDL_VF_044);
+ pPedestalData = (J3DModelData*)dComIfG_getObjectIDRes(arcname, FIGURE2_BDL_VF_044);
mpMorf = new mDoExt_McaMorf(
- p1,
+ pPedestalData,
NULL, NULL,
(J3DAnmTransformKey*)dComIfG_getObjectIDRes(arcname, FIGURE2_BCK_VF_064L),
J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1,
NULL,
0x80000,
+#if VERSION == VERSION_DEMO
+ 0x11000022
+#else
0x11001222
+#endif
);
if(mpMorf == NULL || mpMorf->getModel() == NULL) {
return false;
}
+#if VERSION > VERSION_DEMO
J3DSkinDeform* pDeform = new J3DSkinDeform;
if(pDeform == NULL) {
return false;
@@ -470,9 +517,10 @@ BOOL daObjFigure_c::createHeap() {
if(mpMorf->getModel()->setSkinDeform(pDeform, 1) != J3DErrType_Success) {
return false;
}
+#endif
}
- J3DModelData* pPedestalData = static_cast<J3DModelData*>(dComIfG_getObjectIDRes("Figure", FIGURE_BDL_VF_BS));
+ pPedestalData = static_cast<J3DModelData*>(dComIfG_getObjectIDRes("Figure", FIGURE_BDL_VF_BS));
if(pPedestalData == NULL) {
return false;
}
@@ -520,21 +568,34 @@ cPhs_State daObjFigure_c::createInit() {
return cPhs_COMPLEATE_e;
}
+#if VERSION == VERSION_DEMO
+BOOL daObjFigure_c::_delete() {
+ if (mLoadFlags & 1) {
+ dComIfG_resDeleteDemo(getPhase1P(), "Figure");
+ }
+
+ if (mLoadFlags & 2) {
+ int id = dSnap_GetFigRoomId(getFigureNo());
+ dComIfG_resDeleteDemo(getPhase2P(), l_arcname_tbl[id]);
+ }
+
+ return true;
+}
+#else
/* 00000BF4-00000C78 .text _delete__13daObjFigure_cFv */
BOOL daObjFigure_c::_delete() {
dComIfG_resDeleteDemo(getPhase1P(), "Figure");
int id = dSnap_GetFigRoomId(getFigureNo());
-#if VERSION > VERSION_DEMO
if(l_figure_dat_tbl[getFigureNo()].mRoomId >= 0) {
id = l_figure_dat_tbl[getFigureNo()].mRoomId;
}
-#endif
- dComIfG_resDeleteDemo(getPhase2P(), l_arcname_tbl[id]);
+ dComIfG_resDelete(getPhase2P(), l_arcname_tbl[id]);
return true;
}
+#endif
void linkDraw(mDoExt_McaMorf*);
@@ -542,6 +603,11 @@ void linkDraw(mDoExt_McaMorf*);
BOOL daObjFigure_c::_draw() {
g_env_light.settingTevStruct(TEV_TYPE_BG2, &current.pos, &mTevStrBG2);
g_env_light.setLightTevColorType(mpModel, &mTevStrBG2);
+#if VERSION == VERSION_DEMO
+ if(mpMorf) {
+ g_env_light.setLightTevColorType(mpMorf->getModel(), &mTevStrBG2);
+ }
+#endif
g_env_light.settingTevStruct(TEV_TYPE_BG0, &current.pos, &tevStr);
g_env_light.setLightTevColorType(mpPedestalModel, &tevStr);
@@ -562,7 +628,9 @@ BOOL daObjFigure_c::_draw() {
}
if(mpMorf) {
+#if VERSION > VERSION_DEMO
g_env_light.setLightTevColorType(mpMorf->getModel(), &mTevStrBG2);
+#endif
linkDraw(mpMorf);
}
}
@@ -615,12 +683,14 @@ void daObjFigure_c::executeNormal() {
if(mbDisplay) {
fopAc_ac_c* pLink = dComIfGp_getLinkPlayer();
+ f32 f31 = 150.0f;
+ int r31 = 13000;
f32 temp1;
s16 temp2;
dNpc_calc_DisXZ_AngY(current.pos, pLink->current.pos, &temp1, &temp2);
temp2 -= current.angle.y;
- if(150.0f > temp1 && abs(temp2) < 0x32C8) {
+ if(f31 > temp1 && r31 > abs(temp2)) {
eventInfo.onCondition(dEvtCnd_CANTALK_e);
}
}
@@ -918,11 +988,12 @@ void daObjFigure_c::setMtx() {
}
/* 00001954-000019DC .text isFigureGet__13daObjFigure_cFUc */
-BOOL daObjFigure_c::isFigureGet(u8 figureNo) {
+u8 daObjFigure_c::isFigureGet(u8 figureNo) {
if(figureNo / 8 < 0x11) {
+ int r31 = (figureNo % 8);
u8 reg = dComIfGs_getEventReg(l_figure_comp[figureNo / 8]);
- u32 ret = reg & (1 << figureNo % 8);
- return (u8)ret; // Fakematch for the clrlwi
+ u32 ret = reg & (1 << r31);
+ return ret;
}
return false;