summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMax Roncace <me@caseif.net>2025-11-29 15:11:21 -0500
committerGitHub <noreply@github.com>2025-11-29 22:11:21 +0200
commit89ccf4c7ef3dee9fd488eac19ccc2f62c920c28a (patch)
treed4b27f78e433f4614f3e43d35524084e697f5d1b /src
parent72c37de758cd3e2fa754fc3a961dda64a8500e44 (diff)
d_a_bg debug work + matching for retail (#2890)
Diffstat (limited to 'src')
-rw-r--r--src/d/actor/d_a_bg.cpp79
-rw-r--r--src/d/d_bg_parts.cpp18
2 files changed, 73 insertions, 24 deletions
diff --git a/src/d/actor/d_a_bg.cpp b/src/d/actor/d_a_bg.cpp
index dc836e4af5..1dc9e70e4d 100644
--- a/src/d/actor/d_a_bg.cpp
+++ b/src/d/actor/d_a_bg.cpp
@@ -61,8 +61,7 @@ int daBg_btkAnm_c::create(J3DModelData* i_modelData, J3DAnmTextureSRTKey* i_btk,
J3DAnmTextureSRTKey* btk = mpBtk->getBtkAnm();
for (u16 i = 0; i < btk->getUpdateMaterialNum(); i++) {
- u16 id = btk->getUpdateMaterialID(i);
- if (!createMatAnm(i_modelData, id)) {
+ if (!createMatAnm(i_modelData, btk->getUpdateMaterialID(i))) {
return 0;
}
}
@@ -96,15 +95,13 @@ int daBg_brkAnm_c::create(J3DModelData* i_modelData, J3DAnmTevRegKey* i_brk, int
J3DAnmTevRegKey* brk = mpBrk->getBrkAnm();
for (u16 i = 0; i < brk->getCRegUpdateMaterialNum(); i++) {
- u16 id = brk->getCRegUpdateMaterialID(i);
- if (!createMatAnm(i_modelData, id)) {
+ if (!createMatAnm(i_modelData, brk->getCRegUpdateMaterialID(i))) {
return 0;
}
}
for (u16 i = 0; i < brk->getKRegUpdateMaterialNum(); i++) {
- u16 id = brk->getKRegUpdateMaterialID(i);
- if (!createMatAnm(i_modelData, id)) {
+ if (!createMatAnm(i_modelData, brk->getKRegUpdateMaterialID(i))) {
return 0;
}
}
@@ -140,7 +137,7 @@ int daBg_c::createHeap() {
int roomNo = fopAcM_GetParam(this);
daBg_Part* bgPart = mBgParts;
- for (int i = 0; i < 6; bgPart++, i++) {
+ for (int i = 0; i < 6; i++) {
J3DModelData* modelData = (J3DModelData*)dComIfG_getStageRes(arcName, l_modelName[i]);
if (modelData == NULL) {
modelData = (J3DModelData*)dComIfG_getStageRes(arcName, l_modelName2[i]);
@@ -188,10 +185,11 @@ int daBg_c::createHeap() {
}
for (u16 j = 0; j < modelData->getMaterialNum(); j++) {
+ const char* name;
JUTNameTab* nametab = modelData->getMaterialName();
J3DMaterial* material = modelData->getMaterialNodePointer(j);
- const char* name = nametab->getName(j);
+ name = nametab->getName(j);
if (name[3] == 'M' && name[4] == 'A') {
if (!memcmp(&name[5], "00", 2)) {
@@ -216,6 +214,8 @@ int daBg_c::createHeap() {
dKy_tevstr_init(bgPart->tevstr, roomNo, 0xFF);
}
+
+ bgPart++;
}
cBgD_t* dzb = (cBgD_t*)dComIfG_getStageRes(arcName, "room.dzb");
@@ -230,7 +230,7 @@ int daBg_c::createHeap() {
return 0;
}
- dStage_roomControl_c::setBgW(roomNo, (dBgW_base*)mpBgW);
+ dStage_roomControl_c::setBgW(roomNo, (dBgW_Base*)mpBgW);
mpBgW->SetPriority(dBgW_Base::PRIORITY_0);
} else {
void* kcl = dComIfG_getStageRes(arcName, "room.kcl");
@@ -258,6 +258,11 @@ int daBg_c::createHeap() {
daBg_c::~daBg_c() {
int roomNo = fopAcM_GetParam(this);
+ dBgp_c* bgp = dStage_roomControl_c::getBgp(roomNo);
+ if (bgp != NULL) {
+ bgp->releaseBg();
+ }
+
if (heap != NULL && mpBgW != NULL) {
dComIfG_Bgsp().Release((dBgW_Base*)mpBgW);
dStage_roomControl_c::setBgW(roomNo, NULL);
@@ -280,7 +285,6 @@ static int daBg_Draw(daBg_c* i_this) {
}
/* 804588C4-80458F38 000D44 0674+00 1/1 0/0 0/0 .text draw__6daBg_cFv */
-// NONMATCHING - just regalloc + some reorder issues
int daBg_c::draw() {
dScnKy_env_light_c* kankyo = dKy_getEnvlight();
@@ -300,7 +304,7 @@ int daBg_c::draw() {
mDoLib_clipper::changeFar(1000000.0f);
J3DModelData* modelData;
- for (int i = 0; i < 6; bgPart++, i++) {
+ for (int i = 0; i < 6; i++) {
sp8 = 0;
spA = 0;
sp9 = 0;
@@ -327,7 +331,8 @@ int daBg_c::draw() {
for (u16 j = 0; j < modelData->getShapeNum(); j++) {
J3DShape* shape = modelData->getShapeNodePointer(j);
- if (mDoLib_clipper::clip(j3dSys.getViewMtx(), shape->getMin(), shape->getMax())) {
+ if (mDoLib_clipper::clip(j3dSys.getViewMtx(), (Vec*)shape->getMin(),
+ (Vec*)shape->getMax())) {
shape->hide();
} else {
shape->show();
@@ -360,7 +365,7 @@ int daBg_c::draw() {
field_0x5f0 = 0;
}
- /* Main Event - Get shadow crystal (can now transform) */
+ /* Main Event - Get shadow crystal (can now transform) */
if (dComIfGs_isEventBit(dSv_event_flag_c::M_077)) {
field_0x5f0 = 9;
}
@@ -371,16 +376,18 @@ int daBg_c::draw() {
field_0x5f1 = 0;
}
} else if (!memcmp(&name[3], "MA09", 4)) {
- bgPart->btk_speed = 1.0f - (1.0f - g_env_light.mWaterSurfaceShineRate) * 0.9f;
+ bgPart->btk_speed =
+ 1.0f - (1.0f - g_env_light.mWaterSurfaceShineRate) * 0.9f;
} else if (!memcmp(&name[3], "MA05", 4)) {
bgPart->tevstr->Material_id |= (u8)j;
}
if (!strcmp(dComIfGp_getStartStageName(), "F_SP127") ||
- !strcmp(dComIfGp_getStartStageName(), "R_SP127")) {
+ !strcmp(dComIfGp_getStartStageName(), "R_SP127"))
+ {
if (!memcmp(&name[3], "MA00_Enkei_Tree_Color", 21) ||
- !memcmp(&name[3], "MA00_Gake", 9) ||
- !memcmp(&name[3], "MA00_Kusa", 9)) {
+ !memcmp(&name[3], "MA00_Gake", 9) || !memcmp(&name[3], "MA00_Kusa", 9))
+ {
J3DGXColorS10 colorS10;
J3DGXColor color;
@@ -408,12 +415,12 @@ int daBg_c::draw() {
break;
}
- #ifdef DEBUG
- s16 sp56 = 0xFF;
+#ifdef DEBUG
+ sp50.a = 0xFF;
if (g_kankyoHIO.navy.fish_pond_colreg_adjust_ON) {
sp50 = g_kankyoHIO.navy.fish_pond_colreg_c0;
}
- #endif
+#endif
f32 var_f31 = bgPart->tevstr->AmbCol.r / 10.0f;
var_f31 *= var_f31;
@@ -451,11 +458,18 @@ int daBg_c::draw() {
mDoExt_modelEntryDL(bg_model);
dComIfGd_setListBG();
}
+
+ bgPart++;
}
dComIfGd_setList();
g_env_light.settingTevStruct(0x10, NULL, dComIfGp_roomControl_getTevStr(roomNo));
+ dBgp_c* bgp = dStage_roomControl_c::getBgp(roomNo);
+ if (bgp != NULL) {
+ bgp->draw(this);
+ }
+
return 1;
}
@@ -465,7 +479,8 @@ int daBg_c::execute() {
for (int i = 0; i < 6; i++) {
if (bgPart->btk != NULL) {
if (field_0x5f1 != 0) {
- bgPart->btk->playspeed((field_0x5f1 - 1) / 100.0f);
+ f32 speed = (field_0x5f1 - 1) / 100.0f;
+ bgPart->btk->playspeed(speed);
}
if (bgPart->btk_speed >= 0.0f) {
@@ -489,9 +504,13 @@ static int daBg_Execute(daBg_c* i_this) {
return i_this->execute();
}
+int daBg_c::isDelete() {
+ return 1;
+}
+
/* 8045901C-80459024 00149C 0008+00 1/0 0/0 0/0 .text daBg_IsDelete__FP6daBg_c */
static int daBg_IsDelete(daBg_c* i_this) {
- return 1;
+ return i_this->isDelete();
}
/* 80459024-8045904C 0014A4 0028+00 1/0 0/0 0/0 .text daBg_Delete__FP6daBg_c */
@@ -512,6 +531,7 @@ int daBg_c::create() {
int roomNo = fopAcM_GetParam(this);
field_0x5f0 = 0;
field_0x5f1 = 0;
+ dBgp_c* bgp = dStage_roomControl_c::getBgp(roomNo);
if (this->heap == NULL) {
fopAcM_ct(this, daBg_c);
@@ -539,7 +559,6 @@ int daBg_c::create() {
}
daBg_Part* bgPart = mBgParts;
- J3DModelData* modelData;
for (int i = 0; i < 6; i++) {
if (bgPart->model != NULL) {
J3DModelData* modelData = bgPart->model->getModelData();
@@ -555,13 +574,15 @@ int daBg_c::create() {
bgPart++;
}
+ J3DModelData* modelData;
f32 transX;
f32 transY;
s16 angle;
if (dComIfGp_getMapTrans(roomNo, &transX, &transY, &angle)) {
daBg_Part* bgPart = mBgParts;
+ J3DModel* model;
for (int i = 0; i < 6; i++) {
- J3DModel* model = bgPart->model;
+ model = bgPart->model;
if (model != NULL) {
mDoMtx_stack_c::transS(transX, 0.0f, transY);
@@ -598,6 +619,16 @@ int daBg_c::create() {
dKy_tevstr_c* tevstr = dComIfGp_roomControl_getTevStr(roomNo);
dKy_tevstr_init(tevstr, roomNo, 0xFF);
+
+ if (bgp != NULL) {
+ bgp->registBg(this);
+ }
+ }
+
+ if (bgp != NULL) {
+ if (!bgp->execute(false)) {
+ return cPhs_INIT_e;
+ }
}
dComIfGp_roomControl_onStatusFlag(roomNo, 0x10);
diff --git a/src/d/d_bg_parts.cpp b/src/d/d_bg_parts.cpp
index a68c6a9643..581766df8e 100644
--- a/src/d/d_bg_parts.cpp
+++ b/src/d/d_bg_parts.cpp
@@ -2,6 +2,24 @@
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
+int dBgp_c::registBg(fopAc_ac_c* i_actor) {
+ // NONMATCHING
+ return 0;
+}
+
+void dBgp_c::draw(fopAc_ac_c* i_actor) {
+ // NONMATCHING
+}
+
+int dBgp_c::execute(bool param_0) {
+ // NONMATCHING
+ return 0;
+}
+
+void dBgp_c::releaseBg() {
+ // NONMATCHING
+}
+
static void dummy() {
((J3DAnmTextureSRTKey*)0)->getUpdateMaterialID(0);
((J3DAnmTextureSRTKey*)0)->getUpdateMaterialNum();