Demo matches (#767)

This commit is contained in:
LagoLunatic
2025-05-24 18:54:46 -04:00
committed by GitHub
parent 4a29f64e6b
commit 7cd75e8f7b
83 changed files with 945 additions and 424 deletions
+71 -32
View File
@@ -4,6 +4,7 @@
//
#include "d/actor/d_a_obj_mknjd.h"
#include "d/d_s_play.h"
#include "d/res/res_mknjd.h"
#include "f_op/f_op_actor_mng.h"
#include "f_pc/f_pc_manager.h"
@@ -85,12 +86,12 @@ static BOOL nodeCallBackL(J3DNode* i_node, int calcTiming) {
daObjMknjD::Act_c* actor = (daObjMknjD::Act_c*)mdl->getUserArea();
if (actor != NULL) {
mDoMtx_copy(mdl->getAnmMtx(jntNo), *calc_mtx);
MTXCopy(mdl->getAnmMtx(jntNo), *calc_mtx);
MtxTrans(actor->mLeftHalfPos.x, actor->mLeftHalfPos.y, actor->mLeftHalfPos.z, 1);
mdl->setAnmMtx(jntNo, *calc_mtx);
mDoMtx_copy(*calc_mtx, j3dSys.mCurrentMtx);
MTXCopy(*calc_mtx, j3dSys.mCurrentMtx);
}
}
@@ -106,12 +107,12 @@ static BOOL nodeCallBackR(J3DNode* i_node, int calcTiming) {
daObjMknjD::Act_c* actor = (daObjMknjD::Act_c*)mdl->getUserArea();
if (actor != NULL) {
mDoMtx_copy(mdl->getAnmMtx(jntNo), *calc_mtx);
MTXCopy(mdl->getAnmMtx(jntNo), *calc_mtx);
MtxTrans(actor->mRightHalfPos.x, actor->mRightHalfPos.y, actor->mRightHalfPos.z, 1);
mdl->setAnmMtx(jntNo, *calc_mtx);
mDoMtx_copy(*calc_mtx, j3dSys.mCurrentMtx);
MTXCopy(*calc_mtx, j3dSys.mCurrentMtx);
}
}
@@ -128,12 +129,12 @@ static BOOL nodeCallBack_Hahen(J3DNode* i_node, int calcTiming) {
daObjMknjD::Act_c* actor = (daObjMknjD::Act_c*)mdl->getUserArea();
if (actor != NULL) {
mDoMtx_copy(mdl->getAnmMtx(jntNo), *calc_mtx);
MTXCopy(mdl->getAnmMtx(jntNo), *calc_mtx);
MtxTrans(actor->mShardPositions[shardIdx].x, actor->mShardPositions[shardIdx].y, actor->mShardPositions[shardIdx].z, 1);
mdl->setAnmMtx(jntNo, *calc_mtx);
mDoMtx_copy(*calc_mtx, j3dSys.mCurrentMtx);
MTXCopy(*calc_mtx, j3dSys.mCurrentMtx);
}
}
@@ -166,15 +167,14 @@ s16 daObjMknjD::Act_c::XyEventCB(int) {
/* 0000031C-00000620 .text CreateHeap__Q210daObjMknjD5Act_cFv */
BOOL daObjMknjD::Act_c::CreateHeap() {
const void* temp_r26; // Fakematch to get it to use the same register for model_data_d and jntName
J3DModelData* model_data_d;
if (m043E == true) {
temp_r26 = dComIfG_getObjectRes(M_arcname, MKNJD_BDL_MKNJK);
model_data_d = (J3DModelData*)dComIfG_getObjectRes(M_arcname, MKNJD_BDL_MKNJK);
}
else {
temp_r26 = dComIfG_getObjectRes(M_arcname, MKNJD_BDL_MKNJD);
model_data_d = (J3DModelData*)dComIfG_getObjectRes(M_arcname, MKNJD_BDL_MKNJD);
}
J3DModelData* model_data_d = (J3DModelData*)temp_r26;
J3DModelData* model_data_h = (J3DModelData*)dComIfG_getObjectRes(M_arcname, MKNJD_BDL_MKNJH);
JUT_ASSERT(0x123, model_data_d != NULL)
@@ -183,17 +183,17 @@ BOOL daObjMknjD::Act_c::CreateHeap() {
mMainMdl = mDoExt_J3DModel__create(model_data_d, 0x80000, 0x31000002);
mBreakMdl = mDoExt_J3DModel__create(model_data_h, 0x80000, 0x11000002);
const char* jntName;
if (mMainMdl != NULL && mBreakMdl != NULL) {
JUTNameTab* nameTable = mMainMdl->getModelData()->getJointName();
for (u16 i = 0; i < mMainMdl->getModelData()->getJointNum(); i++) {
// const char* jntName = nameTable->getName(i);
temp_r26 = nameTable->getName(i);
jntName = nameTable->getName(i);
if (strcmp("MknjL", (const char*)temp_r26) == 0) {
if (strcmp("MknjL", jntName) == 0) {
mMainMdl->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBackL);
}
else if (strcmp("MknjR", (const char*)temp_r26) == 0) {
else if (strcmp("MknjR", jntName) == 0) {
mMainMdl->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBackR);
}
}
@@ -204,11 +204,10 @@ BOOL daObjMknjD::Act_c::CreateHeap() {
nameTable = mBreakMdl->getModelData()->getJointName();
for (u16 i = 0; i < mBreakMdl->getModelData()->getJointNum(); i++) {
// const char* jntName = nameTable->getName(i);
temp_r26 = nameTable->getName(i);
jntName = nameTable->getName(i);
for (u16 j = 0; j < 20; j++) {
if (strcmp(daObjMknjD_jointName[j], (const char*)temp_r26) == 0) {
if (strcmp(daObjMknjD_jointName[j], jntName) == 0) {
mBreakMdl->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_Hahen);
joint_number_table[curTblIdx++] = j;
@@ -248,6 +247,9 @@ BOOL daObjMknjD::Act_c::Create() {
for (int i = 0; i < 4; i++) {
mEmitters[i] = NULL;
#if VERSION == VERSION_DEMO
mSmokeCBs[i] = dPa_smokeEcallBack(0);
#endif
}
if (m043E == true) {
@@ -320,11 +322,20 @@ cPhs_State daObjMknjD::Act_c::Mthd_Create() {
/* 00000B64-00000BDC .text Delete__Q210daObjMknjD5Act_cFv */
BOOL daObjMknjD::Act_c::Delete() {
#if VERSION == VERSION_DEMO
if (mEmitters[2]) {
mSmokeCBs[2].remove();
}
if (mEmitters[3]) {
mSmokeCBs[3].remove();
}
#else
dComIfGp_att_revivalAleart();
for (int i = 0; i < 4; i++) {
mSmokeCBs[i].end();
mSmokeCBs[i].remove();
}
#endif
return TRUE;
}
@@ -334,7 +345,7 @@ BOOL daObjMknjD::Act_c::Mthd_Delete() {
int bgDeleteResult = MoveBGDelete();
if (fpcM_CreateResult(this) != cPhs_STOP_e) {
dComIfG_resDelete(&mPhs, M_arcname);
dComIfG_resDeleteDemo(&mPhs, M_arcname);
}
return bgDeleteResult;
@@ -348,7 +359,7 @@ void daObjMknjD::Act_c::set_mtx() {
mMainMdl->setBaseTRMtx(mDoMtx_stack_c::get());
mBreakMdl->setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_copy(mDoMtx_stack_c::get(), M_tmp_mtx);
cMtx_copy(mDoMtx_stack_c::get(), M_tmp_mtx);
}
/* 00000CC8-00000D28 .text init_mtx__Q210daObjMknjD5Act_cFv */
@@ -376,12 +387,12 @@ void daObjMknjD::Act_c::setGoal(int i_staffIdx) {
/* 00000E04-00000E84 .text setPlayerAngle__Q210daObjMknjD5Act_cFi */
void daObjMknjD::Act_c::setPlayerAngle(int i_staffIdx) {
u32 angle = *dComIfGp_evmng_getMyIntegerP(i_staffIdx, "angle");
s16 angle = *dComIfGp_evmng_getMyIntegerP(i_staffIdx, "angle");
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
player->setPlayerPosAndAngle(
&player->current.pos,
current.angle.y + (s16)angle
current.angle.y + angle
);
}
@@ -513,12 +524,14 @@ void daObjMknjD::Act_c::privateCut() {
mDoAud_bgmStart(JA_BGM_D_EARTH);
}
#if VERSION > VERSION_DEMO
if (mSmokeCBs[2].getEmitter() != NULL) {
mSmokeCBs[2].end();
mSmokeCBs[2].remove();
}
if (mSmokeCBs[3].getEmitter() != NULL) {
mSmokeCBs[3].end();
mSmokeCBs[3].remove();
}
#endif
doCutEnd = true;
}
@@ -683,15 +696,15 @@ bool daObjMknjD::Act_c::daObjMknjD_break() {
/* Falling shards */
// After 160 frames, the shards of the broken statue model begin to fall.
if (mBreakTimer >= 160) {
int fallingShardNum = 19 - (mBreakTimer - 160);
int i = 19 - (mBreakTimer - 160);
if (fallingShardNum < 0) {
fallingShardNum = 0;
if (i < 0) {
i = 0;
}
for (; fallingShardNum < 20; fallingShardNum++) {
mShardHeights[fallingShardNum] -= 2.0f;
mShardPositions[fallingShardNum].y += mShardHeights[fallingShardNum];
for (; i < 20; i++) {
mShardHeights[i] -= 2.0f;
mShardPositions[i].y += mShardHeights[i];
}
}
@@ -714,10 +727,16 @@ BOOL daObjMknjD::Act_c::Execute(Mtx** i_mtx) {
else if (player != NULL) {
cXyz partnerDiff = current.pos - player->current.pos;
#if VERSION > VERSION_DEMO
s16 rotDiff = cM_atan2s(partnerDiff.x, partnerDiff.z) - current.angle.y;
#endif
f32 absXZ = partnerDiff.absXZ();
if (absXZ < 800.0f && (rotDiff < -0x4000 || rotDiff > 0x4000)) {
if (absXZ < 800.0f
#if VERSION > VERSION_DEMO
&& (rotDiff < -0x4000 || rotDiff > 0x4000)
#endif
) {
if (dComIfGp_checkPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e)) {
m043F = 1;
manage_friend_draw(0);
@@ -739,12 +758,18 @@ BOOL daObjMknjD::Act_c::Execute(Mtx** i_mtx) {
case 2:
if (dComIfGp_evmng_startCheck(mCheckEventIdx) != 0) {
if (partner != NULL && player != NULL) {
#if VERSION > VERSION_DEMO
s16 rotDiff = cM_atan2s(current.pos.x - partner->current.pos.x, current.pos.z - partner->current.pos.z) - current.angle.y;
#endif
cXyz diff = player->current.pos - partner->current.pos;
f32 absXZ = diff.absXZ();
if ((absXZ < 800.0f) && ((rotDiff < -0x4000) || (rotDiff > 0x4000))) {
if ((absXZ < 800.0f)
#if VERSION > VERSION_DEMO
&& ((rotDiff < -0x4000) || (rotDiff > 0x4000))
#endif
) {
fopAcM_orderChangeEventId(this, mDemoEventIdx, 0, 0xFFFF);
dComIfGs_onEventBit(m0430);
@@ -805,15 +830,27 @@ BOOL daObjMknjD::Act_c::Execute(Mtx** i_mtx) {
mDoAud_bgmStop(30);
mDoAud_taktModeMuteOff();
#if VERSION > VERSION_DEMO
dComIfGp_att_offAleart();
#endif
if (m043E == true) {
#if VERSION == VERSION_DEMO
m0432 = 0x2B + REG20_S(2);
m0434 = 5 + REG20_S(1);
#else
m0432 = 0x2B;
m0434 = 5;
#endif
}
else {
#if VERSION == VERSION_DEMO
m0432 = 0x0E + REG20_S(2);
m0434 = 5 + REG20_S(1);
#else
m0432 = 0x0E;
m0434 = 5;
#endif
}
}
@@ -822,7 +859,9 @@ BOOL daObjMknjD::Act_c::Execute(Mtx** i_mtx) {
privateCut();
if (dComIfGp_evmng_endCheck(mDemoEventIdx)) {
#if VERSION > VERSION_DEMO
dComIfGp_att_revivalAleart();
#endif
dComIfGp_event_reset();
fopAcM_delete(this);