summaryrefslogtreecommitdiff
path: root/src/d
diff options
context:
space:
mode:
authorelijah-thomas774 <elijahthomas774@gmail.com>2026-10-19 12:57:33 -0400
committerelijah-thomas774 <elijahthomas774@gmail.com>2026-10-19 12:57:33 -0400
commitfd581ff761e08e286b99f51f6737f2bebf9bf8db (patch)
tree299571c41277bd5f4d4a3e8fd76d60aec03813ed /src/d
parent4770935cf3458c9973128921d2566731e2d87753 (diff)
d_a_obj_base - Mostly done
Diffstat (limited to 'src/d')
-rw-r--r--src/d/a/d_a_bird_base.cpp2
-rw-r--r--src/d/a/d_a_item.cpp11
-rw-r--r--src/d/a/d_a_salbage_obj.cpp4
-rw-r--r--src/d/a/obj/d_a_obj_arrow.cpp2
-rw-r--r--src/d/a/obj/d_a_obj_base.cpp205
-rw-r--r--src/d/a/obj/d_a_obj_bomb.cpp6
-rw-r--r--src/d/a/obj/d_a_obj_boomerang.cpp4
-rw-r--r--src/d/a/obj/d_a_obj_fairy.cpp4
-rw-r--r--src/d/a/obj/d_a_obj_switch.cpp2
-rw-r--r--src/d/a/obj/d_a_obj_tbox.cpp6
-rw-r--r--src/d/a/obj/d_a_obj_water_spout.cpp2
-rw-r--r--src/d/d_stage_parse.cpp2
12 files changed, 218 insertions, 32 deletions
diff --git a/src/d/a/d_a_bird_base.cpp b/src/d/a/d_a_bird_base.cpp
index 28f481bf..27eb8012 100644
--- a/src/d/a/d_a_bird_base.cpp
+++ b/src/d/a/d_a_bird_base.cpp
@@ -17,7 +17,7 @@ int dAcBirdBase_c::doDelete() {
}
int dAcBirdBase_c::draw() {
- drawModelType1(&mMdl.getModel());
+ drawModel(&mMdl.getModel());
return SUCCEEDED;
}
diff --git a/src/d/a/d_a_item.cpp b/src/d/a/d_a_item.cpp
index bedc7495..2a423ab8 100644
--- a/src/d/a/d_a_item.cpp
+++ b/src/d/a/d_a_item.cpp
@@ -1049,8 +1049,9 @@ int dAcItem_c::create() {
if (type == TEAR_MAX) {
type = TEAR_FARON;
}
- dAcObjBase_c *forceSign =
- dAcObjBase_c::create(this, fProfile::OBJ_FORCE_SIGN, type & 0xFF, nullptr, nullptr, nullptr, nullptr, 0x3F);
+ dAcObjBase_c *forceSign = dAcObjBase_c::createChildAttached(
+ fProfile::OBJ_FORCE_SIGN, type & 0xFF, nullptr, nullptr, nullptr, nullptr, 0x3F
+ );
if (forceSign != nullptr) {
mForceSignRef.link(forceSign);
}
@@ -1253,7 +1254,7 @@ int dAcItem_c::actorExecute() {
mCyl.ClrCoHit();
field_0xD65 = 0;
if ((isAnyRupeeV() || mId == ITEM_STAMINA_FRUIT) && field_0xD66 && mObjAcch.ChkGroundLanding()) {
- dJEffManager_c::spawnGroundEffect(mPosition, mPolyAttr0, mPolyAttr1, field_0x1B4, 1, 0.7f, field_0x1B0);
+ dJEffManager_c::spawnGroundEffect(mPosition, mPolyAttr0, mPolyAttr1, mGndNormal, 1, 0.7f, field_0x1B0);
}
if (isStarryFireflyV() && !checkObjectProperty(OBJ_PROP_0x200)) {
@@ -1305,13 +1306,13 @@ int dAcItem_c::draw() {
/* nothing */
} else if (mMdlScaleType == 2) {
mSphere_c v(mVec3_c(0.0f, 0.0f, 0.0f), getItemFlagStruct(getItemId())->field_0x02);
- drawShadow(mShdw, nullptr, mWorldMtx, &v, -1, -1, -1, -1, -1, field_0xD18);
+ drawShadow(mShdw, nullptr, mWorldMtx, v, -1, -1, -1, -1, -1, field_0xD18);
} else {
mSphere_c v(
mVec3_c(0.0f, field_0xCD8 * 0.5f * getItemFlagStruct(getItemId())->field_0x01, 0.0f),
field_0xCD8 * getItemFlagStruct(getItemId())->field_0x02
);
- drawShadow(mShdw, nullptr, mWorldMtx, &v, -1, -1, -1, -1, -1, field_0xD18);
+ drawShadow(mShdw, nullptr, mWorldMtx, v, -1, -1, -1, -1, -1, field_0xD18);
}
}
return SUCCEEDED;
diff --git a/src/d/a/d_a_salbage_obj.cpp b/src/d/a/d_a_salbage_obj.cpp
index 81b7173d..00d97340 100644
--- a/src/d/a/d_a_salbage_obj.cpp
+++ b/src/d/a/d_a_salbage_obj.cpp
@@ -115,8 +115,8 @@ int dAcSalbageObj_c::preDraw() {
}
int dAcSalbageObj_c::draw() {
- drawModelType1(mpMdl);
- fn_8002edb0(mShadow, *mpMdl, &mShadowSph, -1, -1, field_0x900);
+ drawModel(mpMdl);
+ drawShadow(mShadow, *mpMdl, mShadowSph, -1, -1, field_0x900);
return SUCCEEDED;
}
diff --git a/src/d/a/obj/d_a_obj_arrow.cpp b/src/d/a/obj/d_a_obj_arrow.cpp
index ee0c1097..c079a58e 100644
--- a/src/d/a/obj/d_a_obj_arrow.cpp
+++ b/src/d/a/obj/d_a_obj_arrow.cpp
@@ -945,6 +945,6 @@ int dAcArrow_c::draw() {
setInitialPosition();
unsetArrowFlag(ARROW_INITIAL_SPAWN);
}
- drawModelType1(&mModel);
+ drawModel(&mModel);
return SUCCEEDED;
}
diff --git a/src/d/a/obj/d_a_obj_base.cpp b/src/d/a/obj/d_a_obj_base.cpp
index 092aef6f..ba59688c 100644
--- a/src/d/a/obj/d_a_obj_base.cpp
+++ b/src/d/a/obj/d_a_obj_base.cpp
@@ -3,6 +3,9 @@
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/a/d_a_player.h"
+#include "d/col/bg/d_bg_pc.h"
+#include "d/col/c/c_bg_s_poly_info.h"
+#include "d/col/c/c_m3d_g_pla.h"
#include "d/d_base.h"
#include "d/d_bzs_types.h"
#include "d/d_linkage.h"
@@ -13,14 +16,18 @@
#include "f/f_base.h"
#include "f/f_list_mg.h"
#include "f/f_list_nd.h"
-#include "f/f_profile_name.h"
+#include "f/f_profile.h"
+#include "m/m3d/m_smdl.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "nw4r/math/math_geometry.h"
+#include "s/s_Math.h"
#include "toBeSorted/actor_info.h"
#include "toBeSorted/arc_managers/oarc_manager.h"
+#include "toBeSorted/d_d3d.h"
#include "toBeSorted/event_manager.h"
+#include "toBeSorted/time_area_mgr.h"
void *dAcObjBase_c::getOarcFile(const char *oarcName, const char *fileName) {
return OarcManager::GetInstance()->getData(oarcName, fileName);
@@ -55,7 +62,7 @@ dAcObjBase_c::dAcObjBase_c()
mCullingDistance(8000.0f),
field_0x1A8(400.0f),
field_0x1B0(-1e9f),
- field_0x1B4(0.0f, 1.0f, 0.0f),
+ mGndNormal(0.0f, 1.0f, 0.0f),
mStts(this),
mStartingPos(mPosition.x, mPosition.y, mPosition.z),
mStartingRot(mRotation) {
@@ -87,7 +94,10 @@ int dAcObjBase_c::preCreate() {
}
int dAcObjBase_c::preExecute() {
- bool notOk = fBase_c::preExecute() == NOT_READY;
+ bool notOk = false;
+ if (dAcBase_c::preExecute() == NOT_READY) {
+ notOk = true;
+ }
mLinkage.fn_80051190(this);
@@ -97,7 +107,12 @@ int dAcObjBase_c::preExecute() {
setObjectProperty(OBJ_PROP_0x80);
} else if (checkObjectProperty(OBJ_PROP_0x1)) {
if (checkActorProperty(AC_PROP_0x1) && checkActorProperty(AC_PROP_0x10000000)) {
- // Event Manger Check
+ if (!(EventManager::checkFlag(0x10) || EventManager::FUN_800a0570(this) ||
+ (checkActorProperty(AC_PROP_0x1000) && dTimeAreaMgr_c::fn_800BBE00()))) {
+ if (!dTimeAreaMgr_c::fn_800BBD40() || !dTgViewClip_c::checkForceOn(mViewClipIdx)) {
+ return false;
+ }
+ }
}
}
@@ -143,7 +158,7 @@ int dAcObjBase_c::preDraw() {
f32 cull = dTgViewClip_c::getCull(mViewClipIdx, mCullingDistance);
if (EventManager::checkFlag(0x20)) {
- cull = 3.402923e30f;
+ cull = FLT_MAX;
}
if (cull < 0.0f) {
if (checkActorProperty(AC_PROP_0x1) && checkActorProperty(AC_PROP_0x2)) {
@@ -235,9 +250,12 @@ bool dAcObjBase_c::isPlayer() {
}
void dAcObjBase_c::calcVelocity(const mVec3_c &pos, f32 speed) {
- // FIXME
- mVelocity.set((pos.x - mPosition.x) / speed, (pos.y - mPosition.y) / speed, (pos.z - mPosition.z) / speed);
- mVelocity.y += mAcceleration * speed / 2.0f;
+ mVec3_c v = pos - mPosition;
+
+ mVelocity.x = v.x / speed;
+ mVelocity.z = v.z / speed;
+ mVelocity.y = mAcceleration * speed * 0.5f;
+ mVelocity.y += v.y / speed;
}
void dAcObjBase_c::calcVelocity() {
@@ -262,6 +280,173 @@ bool dAcObjBase_c::drop() {
return true;
}
-void dAcObjBase_c::fn_8002EA30(f32 f0, f32 f1, f32 f2, f32 f3, f32 f4, dBgS_Acch *acch) {
- acch->OnWallSort();
+void dAcObjBase_c::setSinkDepths(f32 f0, f32 f1, f32 f2, f32 f3, f32 f4, dBgS_Acch *acch) {
+ acch->SetGroundSink();
+ mDeepSinkTarget = f0;
+ mShallowSinkTarget = f1;
+ mDeepSinkRate = f2;
+ mShallowSinkRate = f3;
+ mDefaultSinkRate = f4;
+}
+
+void dAcObjBase_c::calcSinkDepth(const cBgS_PolyInfo &gnd) {
+ f32 target = 0.0f;
+ f32 step = mDefaultSinkRate;
+
+ if (!mLinkage.checkState(dLinkage_c::STATE_ACTIVE)) {
+ int attr = dBgS::GetInstance()->GetSpecialCode(gnd);
+
+ if (attr == POLY_ATTR_SAND_DEEP_INSTANT || attr == POLY_ATTR_LAVA || attr == POLY_ATTR_SAND_DEEP_SLOW ||
+ attr == POLY_ATTR_SAND_MED || attr == POLY_ATTR_CURSED_WATER) {
+ target = mDeepSinkTarget;
+ step = mDeepSinkRate;
+ } else if (attr == POLY_ATTR_SAND_SHALLOW || attr == POLY_ATTR_SAND_SHALLOW2) {
+ target = mShallowSinkTarget;
+ step = mShallowSinkRate;
+ }
+ }
+ sLib::chase(&mYOffset, target, step);
+}
+
+void dAcObjBase_c::setGndNormal(const cBgS_PolyInfo &gnd) {
+ cM3dGPla plane;
+ dBgS::GetInstance()->GetTriPla(gnd, &plane);
+ mGndNormal = plane.GetN();
+}
+
+bool dAcObjBase_c::putInODesert(f32 depth, mVec3_c *pos) {}
+
+void dAcObjBase_c::drawModel(m3d::smdl_c *pMdl) {
+ d3d::setLight(pMdl, mLightingInfo.mLightSetIdx >= 0 ? mLightingInfo.mLightSetIdx : -1, &mLightingInfo);
+ pMdl->entry();
+}
+
+void dAcObjBase_c::drawModel(m3d::smdl_c *pMdl, int lightSetIdx) {
+ d3d::setLight(pMdl, lightSetIdx, &mLightingInfo);
+ pMdl->entry();
+}
+
+bool dAcObjBase_c::drawShadowAlone(m3d::smdl_c &mdl) {
+ bool check;
+ if (dStageMgr_c::GetInstance()->checkFlag0x88A0(0x2)) {
+ check = false;
+ } else {
+ if (mLinkage.fn_800513C0()) {
+ if (mLinkage.getControllingActor()->isActorPlayer()) {
+ static_cast<dAcPy_c *>(mLinkage.getControllingActor())->updateShadow(mdl);
+ }
+ check = false;
+ } else {
+ check = true;
+ }
+ }
+ return check;
+}
+
+bool dAcObjBase_c::drawShadow(
+ dShadowCircle_c &shadow, m3d::smdl_c &mdl, const mSphere_c &sph, s32 priority, s32 alpha, f32 height
+) {
+ return drawShadowAlone(mdl) ? shadow.drawMdl(mdl, sph, mLightingInfo, priority, alpha, this, height) : false;
+}
+
+bool dAcObjBase_c::drawShadow(
+ dShadowCircle_c &shadow, const GXTexObj *pTex, const mMtx_c &mtx, const mSphere_c &sph, s32 priority, s32 alpha,
+ s32 red, s32 green, s32 blue, f32 height
+) {
+ bool check;
+ if (dStageMgr_c::GetInstance()->checkFlag0x88A0(0x2)) {
+ check = false;
+ } else {
+ if (mLinkage.fn_800513C0()) {
+ if (mLinkage.getControllingActor()->isActorPlayer()) {
+ static_cast<dAcPy_c *>(mLinkage.getControllingActor())->updateShadow(sph, mtx);
+ }
+ check = false;
+ } else {
+ check = true;
+ }
+ }
+
+ return check ? shadow.drawTexObj(pTex, mtx, sph, mLightingInfo, priority, alpha, red, green, blue, this, height) :
+ false;
+}
+
+dAcObjBase_c *dAcObjBase_c::createChildAttached(
+ ProfileName actorId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, u32 params2, u32 roomId
+) {
+ return static_cast<dAcObjBase_c *>(createActor(actorId, params1, pos, rot, scale, params2, roomId, this));
+}
+dAcObjBase_c *dAcObjBase_c::createChildDetached(
+ ProfileName actorId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, u32 params2, u32 roomId
+) {
+ return static_cast<dAcObjBase_c *>(createActor(actorId, params1, pos, rot, scale, params2, roomId, nullptr));
+}
+
+void dAcObjBase_c::fn_8002efa0() {
+ if (isRoomFlags_0x6_Set()) {
+ setObjectProperty(OBJ_PROP_0x200);
+ } else {
+ unsetObjectProperty(OBJ_PROP_0x200);
+ }
+}
+bool dAcObjBase_c::fn_8002eff0(
+ const f32 &radius, const s16 &rollRotRange, cCcD_Obj *pCc, const f32 &heightMax, const f32 &heightMin
+) {
+ if (pCc == nullptr || pCc->ChkCoHit()) {
+ dAcPy_c *pPlayer = dAcPy_c::GetLinkM();
+
+ f32 rad = (radius + 40.0f);
+ f32 heightDiffToPlayer = dAcPy_c::GetLinkM()->mPosition.y - mPosition.y;
+
+ bool b = heightDiffToPlayer > heightMin;
+ if (b) {
+ b = heightDiffToPlayer < heightMax;
+ }
+ if (b) {
+ b = pPlayer->checkCurrentAction(12 /* ROLL */);
+ }
+ if (b) {
+ mVec3_c v = pPlayer->mPosition - mPosition;
+ b = v.squareMagXZ() < rad * rad;
+ }
+ if (b) {
+ // TODO: Find a better solution for ang bullsh*t
+ s32 a = getPostionDifference(*pPlayer).atan2sX_Z();
+ mAng b = (mAng)a - pPlayer->mAngle.y;
+ if (mAng(b).abs() < rollRotRange) {
+ pPlayer->setBonkRelatedAnimFlag(false);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+// These may not belong here
+dAcBase_c *dAcObjBase_c::createInsectActor(
+ dAcBase_c *parent, ProfileName actorId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, u32 params2,
+ s32 roomId
+) {
+ return parent->createActor(actorId, params1, pos, rot, scale, params2, roomId, parent);
+}
+
+dAcBase_c *dAcObjBase_c::createStageActor(
+ ProfileName profile, u32 roomID, u32 params, mVec3_c *pPos, mAng3_c *pRot, mVec3_c *pScale, u32 params2
+) {
+ setTempCreateParams(
+ (mVec3_c *)pPos, (mAng3_c *)pRot, (mVec3_c *)pScale, roomID, params2, nullptr, 0, 0xFFFF, 0xFF, nullptr
+ );
+ return static_cast<dAcObjBase_c *>(createBase(profile, dStage_c::getParentForRoom(roomID), params, STAGE));
+}
+
+dAcBase_c *dAcObjBase_c::createStageActor(
+ const char *name, u32 roomID, u32 params, const mVec3_c *pPos, const mAng3_c *pRot, const mVec3_c *pScale,
+ u32 params2, u16 id, s8 viewclipId
+) {
+ const ActorInfo *pInfo = getActorInfoByName(name);
+ setTempCreateParams(
+ (mVec3_c *)pPos, (mAng3_c *)pRot, (mVec3_c *)pScale, roomID, params2, nullptr, pInfo->subtype, id, viewclipId,
+ pInfo
+ );
+ return static_cast<dAcObjBase_c *>(createBase(pInfo->profileId, dStage_c::getParentForRoom(roomID), params, STAGE));
}
diff --git a/src/d/a/obj/d_a_obj_bomb.cpp b/src/d/a/obj/d_a_obj_bomb.cpp
index 05d5e931..019c3c12 100644
--- a/src/d/a/obj/d_a_obj_bomb.cpp
+++ b/src/d/a/obj/d_a_obj_bomb.cpp
@@ -784,7 +784,7 @@ void dAcBomb_c::executeState_Wait() {
if (prevVelocityY < -5.0f) {
startSoundWithFloatParam(SE_BM_BOUND, prevVelocityY * -1.0f);
if (dBgS::GetInstance()->GetPolyAtt0(mAcch.GetGnd()) != POLY_ATT_0_LAVA) {
- dJEffManager_c::spawnGroundEffect(mPosition, mPolyAttr0, mPolyAttr1, field_0x1B4, 1, 0.8f, field_0x1B0);
+ dJEffManager_c::spawnGroundEffect(mPosition, mPolyAttr0, mPolyAttr1, mGndNormal, 1, 0.8f, field_0x1B0);
}
}
@@ -1250,12 +1250,12 @@ int dAcBomb_c::draw() {
return SUCCEEDED;
}
- drawModelType1(&mMdl);
+ drawModel(&mMdl);
mSphere_c sph(mVec3_c(0.0f, mScale.x * sHIO.getBombScale(), 0.0f), mScale.x * sHIO.getBombScale());
if (!isState(StateID_FlowerWait)) {
- drawShadow(mShdw, nullptr, mWorldMtx, &sph, -1, -1, -1, -1, -1, mPosition.y - mAcch.GetGroundH());
+ drawShadow(mShdw, nullptr, mWorldMtx, sph, -1, -1, -1, -1, -1, mPosition.y - mAcch.GetGroundH());
}
return SUCCEEDED;
}
diff --git a/src/d/a/obj/d_a_obj_boomerang.cpp b/src/d/a/obj/d_a_obj_boomerang.cpp
index d7c707f1..a2320767 100644
--- a/src/d/a/obj/d_a_obj_boomerang.cpp
+++ b/src/d/a/obj/d_a_obj_boomerang.cpp
@@ -565,11 +565,11 @@ int dAcBoomerang_c::draw() {
if (mStateMgr.isState(StateID_EventReturnWait) || dAcPy_c::GetLink2()->checkModelUpdateFlag(0x10000 | 0x80)) {
return SUCCEEDED;
}
- drawModelType1(&mMdl);
+ drawModel(&mMdl);
if (!mStateMgr.isState(StateID_Wait)) {
mProc.entry();
static mSphere_c sph(mVec3_c::Zero, 50.f);
- drawShadow(mShadow, nullptr, mWorldMtx, &sph, -1, -1, -1, -1, -1, mPosition.y - mAcch.GetGroundH());
+ drawShadow(mShadow, nullptr, mWorldMtx, sph, -1, -1, -1, -1, -1, mPosition.y - mAcch.GetGroundH());
}
return SUCCEEDED;
}
diff --git a/src/d/a/obj/d_a_obj_fairy.cpp b/src/d/a/obj/d_a_obj_fairy.cpp
index e6b173e7..114941e4 100644
--- a/src/d/a/obj/d_a_obj_fairy.cpp
+++ b/src/d/a/obj/d_a_obj_fairy.cpp
@@ -255,12 +255,12 @@ int dAcOFairy_c::actorExecute() {
int dAcOFairy_c::draw() {
if (!mStateMgr.isState(StateID_CatchDemo)) {
- drawModelType1(&mModel.getModel());
+ drawModel(&mModel.getModel());
if (!isCuring()) {
static mSphere_c sph(mVec3_c(0.0f, 0.0f, 0.0f), 10.0f);
f32 f = mObjAcch.GetGroundH();
- drawShadow(mShadow, nullptr, mWorldMtx, &sph, -1, -1, -1, -1, -1, mPosition.y - f);
+ drawShadow(mShadow, nullptr, mWorldMtx, sph, -1, -1, -1, -1, -1, mPosition.y - f);
}
}
diff --git a/src/d/a/obj/d_a_obj_switch.cpp b/src/d/a/obj/d_a_obj_switch.cpp
index 6ffba7c8..11489382 100644
--- a/src/d/a/obj/d_a_obj_switch.cpp
+++ b/src/d/a/obj/d_a_obj_switch.cpp
@@ -206,7 +206,7 @@ int dAcOsw_c::actorExecuteInEvent() {
}
int dAcOsw_c::draw() {
- drawModelType1(&mModel);
+ drawModel(&mModel);
return SUCCEEDED;
}
diff --git a/src/d/a/obj/d_a_obj_tbox.cpp b/src/d/a/obj/d_a_obj_tbox.cpp
index 729d244d..f310c918 100644
--- a/src/d/a/obj/d_a_obj_tbox.cpp
+++ b/src/d/a/obj/d_a_obj_tbox.cpp
@@ -1508,9 +1508,9 @@ int dAcTbox_c::draw() {
return SUCCEEDED;
}
- drawModelType1(&mMdl1.getModel());
+ drawModel(&mMdl1.getModel());
if (fn_8026D540()) {
- drawModelType1(&mOpenFxMdl);
+ drawModel(&mOpenFxMdl);
}
static mSphere_c shadowSphs[4] = {
@@ -1520,7 +1520,7 @@ int dAcTbox_c::draw() {
mSphere_c(mVec3_c(0.0f, 45.0f, 0.0f), 100.0f),
};
- drawShadow(mShadowCircle, nullptr, mWorldMtx, &shadowSphs[mVariant], -1, -1, -1, -1, -1, 0.0f);
+ drawShadow(mShadowCircle, nullptr, mWorldMtx, shadowSphs[mVariant], -1, -1, -1, -1, -1, 0.0f);
return SUCCEEDED;
}
diff --git a/src/d/a/obj/d_a_obj_water_spout.cpp b/src/d/a/obj/d_a_obj_water_spout.cpp
index 052fa74e..e9c512f7 100644
--- a/src/d/a/obj/d_a_obj_water_spout.cpp
+++ b/src/d/a/obj/d_a_obj_water_spout.cpp
@@ -56,7 +56,7 @@ int dAcOwaterSpout_c::actorExecute() {
}
int dAcOwaterSpout_c::draw() {
- drawModelType1(&mMdl.getModel());
+ drawModel(&mMdl.getModel());
return SUCCEEDED;
}
diff --git a/src/d/d_stage_parse.cpp b/src/d/d_stage_parse.cpp
index 8433f485..8fc95a77 100644
--- a/src/d/d_stage_parse.cpp
+++ b/src/d/d_stage_parse.cpp
@@ -338,7 +338,7 @@ static void handleBzsStas(int roomid, const BzsSectionHead *section) {
u16 flag = getEnemyDefeatFlagFromId(roomid, obj->id);
s8 viewClipIdx = getViewClipIndexFromId(obj->id);
if (stage->checkEnemyDefeatFlag(flag)) {
- dAcObjBase_c::createActorUnkGroup3(
+ dAcObjBase_c::createStageActor(
obj->name, roomid, obj->params1, &obj->position, &obj->angle, &obj->scale, obj->params2, flag,
viewClipIdx
);