mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-04 04:30:40 -04:00
Demo matches (#767)
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user