From 91011befd7f834db307ab4b35d7937b470c9f333 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Fri, 21 Nov 2025 00:17:51 -0500 Subject: [PATCH] Remove fake matches, fix false equivalencies, and other small matches (#2837) * Debug matches and remove fake matches * Fix false equivalencies, regallocs, and vtable orders * Fix PAL splits --- config/GZ2P01/rels/d_a_obj_swhang/splits.txt | 1 + config/GZ2P01/rels/d_a_obj_swhang/symbols.txt | 2 +- configure.py | 14 ++--- include/d/actor/d_a_alink.h | 4 -- include/d/actor/d_a_npc_kasi_mich.h | 1 - include/d/actor/d_a_obj_mirror_table.h | 1 + include/d/actor/d_a_obj_ss_drink.h | 2 +- include/d/actor/d_a_obj_swhang.h | 5 +- include/d/d_select_cursor.h | 2 +- include/f_op/f_op_actor.h | 18 +++---- src/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp | 10 ++-- src/JSystem/JUtility/JUTNameTab.cpp | 16 ++++-- src/Z2AudioLib/Z2SoundObject.cpp | 3 +- src/d/actor/d_a_alink.cpp | 2 +- src/d/actor/d_a_alink_grab.inc | 4 +- src/d/actor/d_a_b_mgn.cpp | 9 ++-- src/d/actor/d_a_crod.cpp | 12 ++--- src/d/actor/d_a_door_bossL1.cpp | 5 +- src/d/actor/d_a_e_arrow.cpp | 2 +- src/d/actor/d_a_e_hp.cpp | 1 - src/d/actor/d_a_e_ws.cpp | 37 ++++++++++---- src/d/actor/d_a_kytag12.cpp | 2 - src/d/actor/d_a_ni.cpp | 15 +++--- src/d/actor/d_a_npc4.cpp | 4 +- src/d/actor/d_a_npc_besu.cpp | 1 - src/d/actor/d_a_npc_grs.cpp | 1 - src/d/actor/d_a_npc_kasi_mich.cpp | 46 ++++++++--------- src/d/actor/d_a_npc_zrc.cpp | 1 - src/d/actor/d_a_obj_Lv5Key.cpp | 15 +++--- src/d/actor/d_a_obj_fmobj.cpp | 22 ++++---- src/d/actor/d_a_obj_master_sword.cpp | 2 +- src/d/actor/d_a_obj_mirror_chain.cpp | 4 +- src/d/actor/d_a_obj_oiltubo.cpp | 2 +- src/d/actor/d_a_obj_ss_drink.cpp | 2 +- src/d/actor/d_a_obj_ss_item.cpp | 2 +- src/d/actor/d_a_tag_Lv8Gate.cpp | 49 ++++++++++++------ src/d/d_kankyo_rain.cpp | 10 ++-- src/d/d_npc_lib.cpp | 1 - src/d/d_ovlp_fade2.cpp | 10 ++-- src/d/d_ovlp_fade3.cpp | 8 +-- src/m_Do/m_Do_ext.cpp | 51 ++++++++++--------- 41 files changed, 217 insertions(+), 182 deletions(-) diff --git a/config/GZ2P01/rels/d_a_obj_swhang/splits.txt b/config/GZ2P01/rels/d_a_obj_swhang/splits.txt index 9410542649d..f6cf8841083 100644 --- a/config/GZ2P01/rels/d_a_obj_swhang/splits.txt +++ b/config/GZ2P01/rels/d_a_obj_swhang/splits.txt @@ -13,3 +13,4 @@ d/actor/d_a_obj_swhang.cpp: .text start:0x00000078 end:0x00001914 .rodata start:0x00000000 end:0x000000DC .data start:0x00000000 end:0x00000214 + .bss start:0x00000000 end:0x00000004 diff --git a/config/GZ2P01/rels/d_a_obj_swhang/symbols.txt b/config/GZ2P01/rels/d_a_obj_swhang/symbols.txt index a98652a9d0c..21e2093ba0a 100644 --- a/config/GZ2P01/rels/d_a_obj_swhang/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_swhang/symbols.txt @@ -77,4 +77,4 @@ __vt__8cM3dGSph = .data:0x0000019C; // type:object size:0xC scope:global __vt__8cM3dGAab = .data:0x000001A8; // type:object size:0xC scope:global __vt__17dEvLib_callback_c = .data:0x000001B4; // type:object size:0x18 scope:global __vt__13daObjSwHang_c = .data:0x000001CC; // type:object size:0x48 scope:global -lbl_643_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte +init$2095 = .bss:0x00000000; // type:object size:0x1 align:1 data:byte diff --git a/configure.py b/configure.py index 855d4aaab26..ccdc6bdb411 100755 --- a/configure.py +++ b/configure.py @@ -686,7 +686,7 @@ config.libs = [ Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_file_sel_info.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_bright_check.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_scope.cpp"), - Object(Equivalent, "d/d_select_cursor.cpp"), # vtable order + Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_select_cursor.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_select_icon.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_shop_camera.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_shop_item_ctrl.cpp"), @@ -1886,7 +1886,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_jagar"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_kasi_hana"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_kasi_kyu"), - ActorRel(Equivalent, "d_a_npc_kasi_mich"), # idk this why can't link + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_kasi_mich"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01", "Shield"), "d_a_npc_kdk"), ActorRel(NonMatching, "d_a_npc_kn"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_knj"), @@ -1980,7 +1980,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_bubblePilar"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_catdoor"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_cb"), - ActorRel(Equivalent, "d_a_obj_cblock"), # weird weak data issue + ActorRel(Equivalent, "d_a_obj_cblock"), # weird weak data issue - needs a ...data pool, but no functions use it ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_cdoor"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_chandelier"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_chest"), @@ -2134,7 +2134,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mhole"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mie"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mirror_6pole"), - ActorRel(Equivalent, "d_a_obj_mirror_chain"), # stack order + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mirror_chain"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mirror_sand"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mirror_screw"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_mirror_table"), @@ -2190,8 +2190,8 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_snowEffTag"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_snow_soup"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_so"), - ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_spinLift"), # extra weak dtors? - ActorRel(Equivalent, "d_a_obj_ss_drink"), # vtable order + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_spinLift"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_ss_drink"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_ss_item"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_stairBlock"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_stone"), @@ -2204,7 +2204,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swBallC"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swLight"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swchain"), - ActorRel(Equivalent, "d_a_obj_swhang"), # vtable order + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swhang"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_sword"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swpush2"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swspinner"), diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index 28c160a6bd5..c6eeac089d8 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -3359,11 +3359,7 @@ public: BOOL checkSmallUpperGuardAnime() const { return checkUpperAnime(0x16); } BOOL checkFmChainGrabAnime() const { return checkUpperAnime(0x62) || checkUpperAnime(0x2A0); } - // this might be a fake match, but helps fix usage in many functions -#pragma push -#pragma optimization_level 2 BOOL checkAttentionLock() { return mAttention->Lockon(); } -#pragma pop bool checkUpperAnime(u16 i_idx) const { return mUpperAnmHeap[UPPER_2].getIdx() == i_idx; } bool checkUnderAnime(u16 i_idx) const { return mUnderAnmHeap[UNDER_2].getIdx() == i_idx; } diff --git a/include/d/actor/d_a_npc_kasi_mich.h b/include/d/actor/d_a_npc_kasi_mich.h index 219b6e8bd70..4db9aa41cfa 100644 --- a/include/d/actor/d_a_npc_kasi_mich.h +++ b/include/d/actor/d_a_npc_kasi_mich.h @@ -75,7 +75,6 @@ public: /* 80A28F74 */ int escape(int); /* 80A2908C */ int iyan_look(int); /* 80A29164 */ int turn_hana(int); - void dummy(); /* 80A291E8 */ int wait_dummy(int); /* 80A2926C */ int cheer(int); /* 80A29458 */ BOOL _turn_to_link(s16); diff --git a/include/d/actor/d_a_obj_mirror_table.h b/include/d/actor/d_a_obj_mirror_table.h index 6d3229bff4a..031d588631b 100644 --- a/include/d/actor/d_a_obj_mirror_table.h +++ b/include/d/actor/d_a_obj_mirror_table.h @@ -27,6 +27,7 @@ public: u8 getSwitchNo() { return (fopAcM_GetParam(this) >> 8) & 0xff; } void setAnmSpeed(f32 speed) { mpTableUpBckAnm->setPlaySpeed(speed); } + void setEffect() { field_0x874 = true; } /* 0x568 */ J3DModel* mpTableModel; /* 0x56C */ J3DModel* mpMirrorModel; diff --git a/include/d/actor/d_a_obj_ss_drink.h b/include/d/actor/d_a_obj_ss_drink.h index 19cde3e393b..10663a754ec 100644 --- a/include/d/actor/d_a_obj_ss_drink.h +++ b/include/d/actor/d_a_obj_ss_drink.h @@ -44,8 +44,8 @@ public: /* 80CE6454 */ int talk(void*); /* 80CE6514 */ int drink(void*); - /* 80CE59FC */ virtual void setSoldOut(); /* 80CE4F78 */ virtual ~daObj_SSDrink_c(); + /* 80CE59FC */ virtual void setSoldOut(); static dCcD_SrcGObjInf const mCcDObjInfo; static dCcD_SrcCyl mCcDCyl; diff --git a/include/d/actor/d_a_obj_swhang.h b/include/d/actor/d_a_obj_swhang.h index 513d898ad4f..1f66b68e9ce 100644 --- a/include/d/actor/d_a_obj_swhang.h +++ b/include/d/actor/d_a_obj_swhang.h @@ -50,8 +50,6 @@ public: /* 80CFC6AC */ void modeOffWait(); /* 80CFCA34 */ void init_modeOnWait(); /* 80CFCA40 */ void modeOnWait(); - /* 80CFCCE0 */ bool eventStart(); - /* 80CFD034 */ virtual ~daObjSwHang_c() {} daObjSwHang_c() : dEvLib_callback_c(this) {} @@ -61,6 +59,9 @@ public: /* 80CFCD04 */ virtual int Draw(); /* 80CFCD98 */ virtual int Delete(); + /* 80CFCCE0 */ virtual bool eventStart(); + /* 80CFD034 */ virtual ~daObjSwHang_c() {} + cXyz getHangPos() { return mHangPos; } void setHangPlayer() { mHangPlayer = 1; } diff --git a/include/d/d_select_cursor.h b/include/d/d_select_cursor.h index 99af9373d5e..8a392d3e6b8 100644 --- a/include/d/d_select_cursor.h +++ b/include/d/d_select_cursor.h @@ -39,8 +39,8 @@ public: /* 801958E0 */ void setBckAnimation(J2DAnmTransformKey*); /* 80195940 */ void moveCenter(J2DPane*, f32, f32); - /* 80194C30 */ virtual void draw(); /* 801949EC */ virtual ~dSelect_cursor_c(); + /* 80194C30 */ virtual void draw(); void setPos(f32 x, f32 y) { mPositionX = x; diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 9818dc6f457..52d10ce1d40 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -83,9 +83,9 @@ enum fopAc_Cull_e { }; enum fopAc_attention_type { - fopAc_attn_LOCK_e, - fopAc_attn_TALK_e, - fopAc_attn_BATTLE_e, + /* 0x0 */ fopAc_attn_LOCK_e, + /* 0x1 */ fopAc_attn_TALK_e, + /* 0x2 */ fopAc_attn_BATTLE_e, #if !PLATFORM_GCN fopAc_attn_UNK_3, @@ -93,17 +93,17 @@ enum fopAc_attention_type { fopAc_attn_UNK_5, #endif - fopAc_attn_SPEAK_e, - fopAc_attn_CARRY_e, - fopAc_attn_DOOR_e, - fopAc_attn_JUEL_e, + /* 0x3 */ fopAc_attn_SPEAK_e, + /* 0x4 */ fopAc_attn_CARRY_e, + /* 0x5 */ fopAc_attn_DOOR_e, + /* 0x6 */ fopAc_attn_JUEL_e, #if !PLATFORM_GCN fopAc_attn_UNK_10, #endif - fopAc_attn_ETC_e, - fopAc_attn_CHECK_e, + /* 0x7 */ fopAc_attn_ETC_e, + /* 0x8 */ fopAc_attn_CHECK_e, fopAc_attn_MAX_e, }; diff --git a/src/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp b/src/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp index 5e5224d7700..77759567226 100644 --- a/src/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp +++ b/src/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp @@ -15,13 +15,11 @@ JAUSeqDataBlock::JAUSeqDataBlock() : field_0x0(this) {} /* 802A6928-802A6974 2A1268 004C+00 1/1 0/0 0/0 .text getSeqData__16JAUSeqDataBlocksF10JAISoundID */ u8* JAUSeqDataBlocks::getSeqData(JAISoundID param_0) { - // fake match. Should be - // if (param_0.isAnonymous()) { - // But doesn't match - if ((u32)param_0 == 0xffffffff) { + if (param_0.isAnonymous()) { return NULL; } - for (JSULink* link = getFirst(); link != NULL; + JSULink* link; + for (link = getFirst(); link != NULL; link = link->getNext()) { if ((u32)link->getObject()->field_0x10 == (u32)param_0) { @@ -86,7 +84,7 @@ JAUDynamicSeqDataBlocks::JAUDynamicSeqDataBlocks() { /* 802A6AA0-802A6AA8 -00001 0008+00 0/0 0/0 0/0 .text * setSeqDataArchive__23JAUDynamicSeqDataBlocksFP10JKRArchive */ void JAUDynamicSeqDataBlocks::setSeqDataArchive(JKRArchive* param_0) { - *(u32*)(((u8*)this) + 36) /* this->field_0x24 */ = (u32)(param_0); + seqDataArchive_ = param_0; } /* 802A6AA8-802A6B8C 2A13E8 00E4+00 0/0 1/1 0/0 .text diff --git a/src/JSystem/JUtility/JUTNameTab.cpp b/src/JSystem/JUtility/JUTNameTab.cpp index 4c5d7bd0c26..dcf0d9a14e5 100644 --- a/src/JSystem/JUtility/JUTNameTab.cpp +++ b/src/JSystem/JUtility/JUTNameTab.cpp @@ -29,20 +29,28 @@ void JUTNameTab::setResource(const ResNTAB* pNameTable) { } s32 JUTNameTab::getIndex(const char* pName) const { + JUT_ASSERT(101, mNameTable != NULL); + const ResNTAB::Entry* pEntry = mNameTable->mEntries; u16 keyCode = calcKeyCode(pName); - for (u16 i = 0; i < mNameNum; pEntry++, i++) - if (pEntry->mKeyCode == keyCode && - strcmp((mNameTable->mEntries[i].mOffs + ((const char*)mNameTable)), pName) == 0) + for (u16 i = 0; i < mNameNum; i++) { + if ( + pEntry->mKeyCode == keyCode && + strcmp((mNameTable->mEntries[i].mOffs + ((const char*)mNameTable)), pName) == 0 + ) { return i; + } + pEntry++; + } return -1; } const char* JUTNameTab::getName(u16 index) const { + JUT_ASSERT(138, mNameTable != NULL); if (index < mNameNum) - return mNameTable->getName(index); + return ((const char*)mNameTable) + mNameTable->mEntries[index].mOffs; return NULL; } diff --git a/src/Z2AudioLib/Z2SoundObject.cpp b/src/Z2AudioLib/Z2SoundObject.cpp index 839b7730b61..e4422c37e51 100644 --- a/src/Z2AudioLib/Z2SoundObject.cpp +++ b/src/Z2AudioLib/Z2SoundObject.cpp @@ -422,7 +422,7 @@ void Z2SoundObjAnime::updateSoundLifeTime_(f32 param_0, f32 param_1) { switch (getHandle(i)->getSound()->getAnimationState()) { case 0: break; - case 1: + case 1: { JAUSoundAnimationSound* sound = (JAUSoundAnimationSound*)getHandle(i)->getSound()->getUserData(); bool bvar1 = param_1 == 0.0f && sound->stopsWhenSpeedIsZero(); @@ -446,6 +446,7 @@ void Z2SoundObjAnime::updateSoundLifeTime_(f32 param_0, f32 param_1) { } } break; + } case 2: break; } diff --git a/src/d/actor/d_a_alink.cpp b/src/d/actor/d_a_alink.cpp index b75b3258e67..276c467de8f 100644 --- a/src/d/actor/d_a_alink.cpp +++ b/src/d/actor/d_a_alink.cpp @@ -9951,7 +9951,7 @@ void daAlink_c::setSpeedAndAngleAtn() { * checkRequestTalkActor__9daAlink_cFP10dAttList_cP10fopAc_ac_c */ int daAlink_c::checkRequestTalkActor(dAttList_c* param_0, fopAc_ac_c* param_1) { if (param_0 != NULL && - (param_0->mType == 3 || (param_0->mType == 1 && mTargetedActor == param_1))) + (param_0->mType == fopAc_attn_SPEAK_e || (param_0->mType == fopAc_attn_TALK_e && mTargetedActor == param_1))) { return true; } diff --git a/src/d/actor/d_a_alink_grab.inc b/src/d/actor/d_a_alink_grab.inc index 040129eb74d..56f8ef8ae56 100644 --- a/src/d/actor/d_a_alink_grab.inc +++ b/src/d/actor/d_a_alink_grab.inc @@ -531,7 +531,7 @@ BOOL daAlink_c::checkNextActionGrab() { setCarryArmAngle(0.0f, 1.0f); - if (mTargetedActor == NULL && mAttList != NULL && mAttList->mType == 5 && fopAcM_CheckStatus(temp_r3, 0x2000000)) { + if (mTargetedActor == NULL && mAttList != NULL && mAttList->mType == fopAc_attn_DOOR_e && fopAcM_CheckStatus(temp_r3, 0x2000000)) { setDoStatus(6); } else if ((field_0x27f4 == NULL) || !checkGrabTalkActor(field_0x27f4) || !setTalkStatus()) { if (checkModeFlg(0x400)) { @@ -2601,7 +2601,7 @@ int daAlink_c::procGoronMove() { int temp_r28 = cLib_distanceAngleS(field_0x2fe2, shape_angle.y); - if (mAttention->getActionBtnB() != NULL && mAttention->getActionBtnB()->mType == 4) { + if (mAttention->getActionBtnB() != NULL && mAttention->getActionBtnB()->mType == fopAc_attn_CARRY_e) { setDoStatus(0x91); if (doTrigger()) { diff --git a/src/d/actor/d_a_b_mgn.cpp b/src/d/actor/d_a_b_mgn.cpp index 7ccffc7a4af..c55bebb951a 100644 --- a/src/d/actor/d_a_b_mgn.cpp +++ b/src/d/actor/d_a_b_mgn.cpp @@ -2269,7 +2269,7 @@ void daB_MGN_c::executeFall() { } switch (mMoveMode) { - case 0: + case 0: { onBodyCo(); f32 var_f31 = player->speedF * 60.0f; s16 sp8 = player->current.angle.y; @@ -2309,6 +2309,7 @@ void daB_MGN_c::executeFall() { mpMgnBtk->init(mpMgnModelMorf->getModel()->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("B_mgn", 0x3a), 1, 0, 0.0f, 0, -1); + } case 1: cLib_chaseF(&field_0xae8, 1.0f, 0.02f); @@ -2531,7 +2532,7 @@ void daB_MGN_c::executeOpening() { cXyz sp94(0.0f, 220.0f, -1390.0f); switch (mMoveMode) { - case 0: + case 0: { attention_info.flags = 0; if (!eventInfo.checkCommandDemoAccrpt()) { @@ -2590,6 +2591,7 @@ void daB_MGN_c::executeOpening() { Z2GetAudioMgr()->bgmStreamPrepare(0x2000062); Z2GetAudioMgr()->bgmStreamPlay(); return; + } case 1: cLib_addCalc2(&field_0xadc, 0.0f, 0.1f, 5.0f); cLib_addCalcAngleS2(&field_0xae2, 0x50, 8, 8); @@ -2813,7 +2815,7 @@ void daB_MGN_c::executeDeath() { s16 sp8 = nREG_S(0) + 0x6800; switch (mMoveMode) { - case 0: + case 0: { if (!eventInfo.checkCommandDemoAccrpt()) { fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); eventInfo.onCondition(2); @@ -2865,6 +2867,7 @@ void daB_MGN_c::executeDeath() { mSound.startCreatureVoice(Z2SE_EN_MGN_DEMO_END, -1); return; + } case 1: current.pos = sp48; current.angle.y = 0x6800; diff --git a/src/d/actor/d_a_crod.cpp b/src/d/actor/d_a_crod.cpp index e0a7da80cee..396ffab37e8 100644 --- a/src/d/actor/d_a_crod.cpp +++ b/src/d/actor/d_a_crod.cpp @@ -165,13 +165,11 @@ void daCrod_c::setMatrix() { /* 804A3500-804A3580 000740 0080+00 1/1 0/0 0/0 .text posMove__8daCrod_cFv */ void daCrod_c::posMove() { - f32 cosx = cM_scos(current.angle.x); - f32 cosy = cM_scos(current.angle.y); - f32 speedfy = (speedF * cosy); - //probably fake match - f32 speedz; - speed.set(speedF * cM_ssin(current.angle.y) * cM_scos(current.angle.x), - speedF * cM_ssin(current.angle.x), speedz = speedfy * cosx); + speed.set( + speedF * cM_ssin(current.angle.y) * cM_scos(current.angle.x), + speedF * cM_ssin(current.angle.x), + speedF * cM_scos(current.angle.y) * cM_scos(current.angle.x) + ); current.pos += speed; } diff --git a/src/d/actor/d_a_door_bossL1.cpp b/src/d/actor/d_a_door_bossL1.cpp index 587c2a1beee..6ae33006291 100644 --- a/src/d/actor/d_a_door_bossL1.cpp +++ b/src/d/actor/d_a_door_bossL1.cpp @@ -845,8 +845,7 @@ int daBdoorL1_c::checkArea() { daPy_py_c* player = daPy_getPlayerActorClass(); cXyz local_48; cXyz local_54; - // Fake Match. Not the first time this solves this. Something is up with the check wolf (maybe only in REL). - if (dComIfGp_getLinkPlayer()->mNoResetFlg1 & daPy_py_c::FLG1_IS_WOLF) { + if (daPy_py_c::checkNowWolf()) { local_48 = player->attention_info.position - current.pos; local_54 = player->current.pos - current.pos; } else { @@ -857,7 +856,7 @@ int daBdoorL1_c::checkArea() { if (fabsf(local_48.x) > 200.0f) { return 0; } - if (dComIfGp_getLinkPlayer()->mNoResetFlg1 & daPy_py_c::FLG1_IS_WOLF) { + if (daPy_py_c::checkNowWolf()) { mDoMtx_stack_c::multVec(&local_54, &local_54); if (fabsf(local_54.x) > 130.0f) { return 0; diff --git a/src/d/actor/d_a_e_arrow.cpp b/src/d/actor/d_a_e_arrow.cpp index ba0af975854..2f168cb378a 100644 --- a/src/d/actor/d_a_e_arrow.cpp +++ b/src/d/actor/d_a_e_arrow.cpp @@ -452,7 +452,7 @@ static void atHit_CB(fopAc_ac_c* i_atActor, dCcD_GObjInf* i_atObjInf, fopAc_ac_c /* 8067DB5C-8067DC58 00147C 00FC+00 1/1 0/0 0/0 .text e_arrow_shield__FP13e_arrow_class */ static void e_arrow_shield(e_arrow_class* i_this) { - e_arrow_class* a_this = (e_arrow_class*)i_this; // necessary for reg alloc + e_arrow_class* a_this = (e_arrow_class*)i_this; daAlink_getAlinkActorClass()->setArrowShieldPos(&a_this->current.pos, &a_this->shape_angle, &i_this->field_0x9d4, &i_this->field_0x9c8); diff --git a/src/d/actor/d_a_e_hp.cpp b/src/d/actor/d_a_e_hp.cpp index 78a9362f393..a8133e38e10 100644 --- a/src/d/actor/d_a_e_hp.cpp +++ b/src/d/actor/d_a_e_hp.cpp @@ -1325,7 +1325,6 @@ int daE_HP_c::create() { /* 806E9900-806E9ABC 003C00 01BC+00 1/1 0/0 0/0 .text __ct__8daE_HP_cFv */ daE_HP_c::daE_HP_c() { - // NONMATCHING } /* 806E9CD0-806E9CF0 003FD0 0020+00 1/0 0/0 0/0 .text daE_HP_Create__FP8daE_HP_c */ diff --git a/src/d/actor/d_a_e_ws.cpp b/src/d/actor/d_a_e_ws.cpp index 6b74a412b92..9a4d163bf58 100644 --- a/src/d/actor/d_a_e_ws.cpp +++ b/src/d/actor/d_a_e_ws.cpp @@ -311,7 +311,6 @@ void daE_WS_c::executeWait() { } /* 807E4AB8-807E4E68 001198 03B0+00 1/1 0/0 0/0 .text executeAttack__8daE_WS_cFv */ -// NONMATCHING void daE_WS_c::executeAttack() { cXyz player_pos; mDoMtx_stack_c::copy(daPy_getLinkPlayerActorClass()->getModelJointMtx(0)); @@ -326,13 +325,15 @@ void daE_WS_c::executeAttack() { case 1: setFootSound(); - if (!checkAttackEnd()) { - if (cLib_chaseAngleS(&shape_angle.y, calcTargetAngle(current.pos, player_pos), 0x300)) { - mMode = 2; - setBck(10, 2, 3.0f, 1.0f); - mSound.startCreatureVoice(Z2SE_EN_WS_V_YOKOKU, -1); - mMoveWaitTimer = 10; - } + if (checkAttackEnd()) { + return; + } + + if (cLib_chaseAngleS(&shape_angle.y, calcTargetAngle(current.pos, player_pos), 0x300)) { + mMode = 2; + setBck(10, 2, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_WS_V_YOKOKU, -1); + mMoveWaitTimer = 10; } break; case 2: @@ -347,11 +348,24 @@ void daE_WS_c::executeAttack() { } break; - case 3: + case 3: { setFootSound(); cLib_chaseAngleS(&shape_angle.y, calcTargetAngle(current.pos, player_pos), 0x400); - if (checkBeforeBg(shape_angle.y) || (mCcSph.ChkAtHit() && fopAcM_GetName(dCc_GetAc(mCcSph.GetAtHitObj()->GetAc())) == PROC_ALINK) || !checkInSearchRange(current.pos, field_0x65c)) { + BOOL r28 = false; + if (checkBeforeBg(shape_angle.y)) { + r28 = true; + } + if (mCcSph.ChkAtHit()) { + cCcD_Obj* r27 = mCcSph.GetAtHitObj(); + if (fopAcM_GetName(dCc_GetAc(r27->GetAc())) == PROC_ALINK) { + r28 = true; + } + } + if (!checkInSearchRange(current.pos, field_0x65c)) { + r28 = true; + } + if (r28) { mMode = 4; speedF = 0.0f; setBck(4, 0, 3.0f, 1.0f); @@ -362,6 +376,7 @@ void daE_WS_c::executeAttack() { return; } break; + } case 4: if (mpModelMorf->checkFrame(7.5f)) { mSound.startCreatureVoice(Z2SE_EN_WS_V_ATTACK, -1); @@ -370,7 +385,7 @@ void daE_WS_c::executeAttack() { if (mpModelMorf->isStop()) { setActionMode(ACTION_WAIT_e); } - break; + /* fallthrough */ } current.angle.y = shape_angle.y; diff --git a/src/d/actor/d_a_kytag12.cpp b/src/d/actor/d_a_kytag12.cpp index 9243e14af86..0b76c9c6eb0 100644 --- a/src/d/actor/d_a_kytag12.cpp +++ b/src/d/actor/d_a_kytag12.cpp @@ -77,7 +77,6 @@ static void daKytag12_light_swprd_proc(kytag12_class* i_this) { /* 8085BD0C-8085D1DC 00024C 14D0+00 2/1 0/0 0/0 .text * daKytag12_Execute_standard__FP13kytag12_class */ -// NONMATCHING minor regalloc static int daKytag12_Execute_standard(kytag12_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); @@ -467,7 +466,6 @@ static int daKytag12_Execute_standard(kytag12_class* i_this) { /* 8085D1DC-8085DFF0 00171C 0E14+00 1/1 0/0 0/0 .text daKytag12_Execute_arrival__FP13kytag12_class */ -// NONMATCHING minor regalloc static int daKytag12_Execute_arrival(kytag12_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); diff --git a/src/d/actor/d_a_ni.cpp b/src/d/actor/d_a_ni.cpp index 6ca58479868..5126ab88339 100644 --- a/src/d/actor/d_a_ni.cpp +++ b/src/d/actor/d_a_ni.cpp @@ -318,7 +318,7 @@ static BOOL move_gake_check(ni_class* i_this, f32 param_1) { /* 8094C7B4-8094CE7C 000C74 06C8+00 1/1 0/0 0/0 .text ni_normal__FP8ni_class */ static void ni_normal(ni_class* i_this) { - fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; // temp var and casts necessary atm. fake match? + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0); cXyz sp50; cXyz sp5C; @@ -377,9 +377,8 @@ static void ni_normal(ni_class* i_this) { i_this->field_0x60e = 30; } - if ((s16)(a_this->shape_angle.y - i_this->mAngleToPlayer) < 0x2000 && - (s16)(a_this->shape_angle.y - i_this->mAngleToPlayer) > 0x2000) - { + s16 sp0A = a_this->shape_angle.y - i_this->mAngleToPlayer; + if (sp0A < 0x2000 && sp0A > 0x2000) { i_this->field_0x60e = 0; } @@ -427,7 +426,7 @@ static void ni_normal(ni_class* i_this) { /* 8094CE7C-8094D2A4 00133C 0428+00 1/1 0/0 0/0 .text ni_away__FP8ni_class */ static void ni_away(ni_class* i_this) { - ni_class* a_this = (ni_class*)i_this; // temp var and cast necessary to match atm. fake match? + ni_class* a_this = (ni_class*)i_this; fopAc_ac_c* player = dComIfGp_getPlayer(0); cXyz sp4C; cXyz sp58; @@ -476,7 +475,7 @@ static void ni_away(ni_class* i_this) { } if (a_this->mTimers[1] == 0) { - a_this->mMoveAngle = cM_atan2s(sp4C.x, sp4C.z); + a_this->mMoveAngle = (s16)cM_atan2s(sp4C.x, sp4C.z); if (fopAcM_wayBgCheck(a_this, 100.0f, 30.0f)) { a_this->mTimers[1] = 30; @@ -584,7 +583,7 @@ static void ni_swim(ni_class* i_this) { /* 8094D60C-8094D7BC 001ACC 01B0+00 1/1 0/0 0/0 .text ni_carry__FP8ni_class */ static int ni_carry(ni_class* i_this) { - ni_class* a_this = (ni_class*)i_this; // temp var and cast necessary to match atm. fake match? + ni_class* a_this = (ni_class*)i_this; cXyz sp40; cXyz sp4C; cXyz sp58; @@ -1424,7 +1423,7 @@ static void play_camera(ni_class* i_this) { /* 8094F5D8-809502B4 003A98 0CDC+00 2/1 0/0 0/0 .text action__FP8ni_class */ static void action(ni_class* i_this) { - fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; // necessary for reg alloc + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; cXyz sp148; cXyz sp154; diff --git a/src/d/actor/d_a_npc4.cpp b/src/d/actor/d_a_npc4.cpp index 0a3edc854ee..e57be33bfdf 100644 --- a/src/d/actor/d_a_npc4.cpp +++ b/src/d/actor/d_a_npc4.cpp @@ -1917,7 +1917,7 @@ BOOL daNpcF_chkDoBtnEqSpeak(fopAc_ac_c* i_actor_p) { for (int i = 0; i < dComIfGp_getAttention()->GetActionCount(); i++) { if (dComIfGp_getAttention()->ActionTarget(i) == i_actor_p && dComIfGp_getAttention()->getActionBtnB() && - dComIfGp_getAttention()->getActionBtnB()->mType == 3) + dComIfGp_getAttention()->getActionBtnB()->mType == fopAc_attn_SPEAK_e) { ret = TRUE; } @@ -1926,7 +1926,7 @@ BOOL daNpcF_chkDoBtnEqSpeak(fopAc_ac_c* i_actor_p) { for (int i = 0; i < dComIfGp_getAttention()->GetLockonCount(); i++) { if (dComIfGp_getAttention()->LockonTarget(i) == i_actor_p && dComIfGp_getAttention()->getActionBtnB() && - dComIfGp_getAttention()->getActionBtnB()->mType == 1) + dComIfGp_getAttention()->getActionBtnB()->mType == fopAc_attn_TALK_e) { ret = TRUE; } diff --git a/src/d/actor/d_a_npc_besu.cpp b/src/d/actor/d_a_npc_besu.cpp index e501dfd34ec..75f09f0059c 100644 --- a/src/d/actor/d_a_npc_besu.cpp +++ b/src/d/actor/d_a_npc_besu.cpp @@ -1356,7 +1356,6 @@ void daNpc_Besu_c::beforeMove() { /* 80538C18-805391B8 001EB8 05A0+00 1/0 0/0 0/0 .text setAttnPos__12daNpc_Besu_cFv */ void daNpc_Besu_c::setAttnPos() { - // NONMATCHING cXyz eyeOffset(10.0f, 30.0f, 0.0f); if (field_0x112f) { daPy_getPlayerActorClass()->onWolfEyeKeep(); diff --git a/src/d/actor/d_a_npc_grs.cpp b/src/d/actor/d_a_npc_grs.cpp index ddb2386df71..1e8db418b73 100644 --- a/src/d/actor/d_a_npc_grs.cpp +++ b/src/d/actor/d_a_npc_grs.cpp @@ -112,7 +112,6 @@ daNpc_grS_c::cutFunc daNpc_grS_c::mEvtCutList[2] = { /* 809E40CC-809E4250 0000EC 0184+00 1/1 0/0 0/0 .text __ct__11daNpc_grS_cFv */ daNpc_grS_c::daNpc_grS_c() { - // NONMATCHING } /* 809E42E0-809E44E0 000300 0200+00 1/0 0/0 0/0 .text __dt__11daNpc_grS_cFv */ diff --git a/src/d/actor/d_a_npc_kasi_mich.cpp b/src/d/actor/d_a_npc_kasi_mich.cpp index 3e1fdf2aa1e..9b30fb1388f 100644 --- a/src/d/actor/d_a_npc_kasi_mich.cpp +++ b/src/d/actor/d_a_npc_kasi_mich.cpp @@ -761,7 +761,6 @@ BOOL daNpcKasiMich_c::chkFindPlayer() { /* 80A27F08-80A282B4 001E28 03AC+00 8/0 0/0 0/0 .text wait__15daNpcKasiMich_cFi */ int daNpcKasiMich_c::wait(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -777,7 +776,7 @@ int daNpcKasiMich_c::wait(int param_1) { mMode = 1; break; - case 1: + case 1: { chkFindPlayer(); if (mActorMngr[0].getActorP() != NULL) { @@ -846,7 +845,7 @@ int daNpcKasiMich_c::wait(int param_1) { orderEvent(field_0x1469, l_evtNames[mOrderEvtNo], 0xFFFF, 40, 0xFF, 1); } break; - + } default: JUT_ASSERT(1301, FALSE); break; @@ -973,9 +972,15 @@ int daNpcKasiMich_c::getWolfPathNearIdx() { return rv; } +void dummy() { + daNpcKasiMich_c::actionFunc temp; + temp = &daNpcKasiMich_c::wait; + temp = &daNpcKasiMich_c::wait; + temp = &daNpcKasiMich_c::wait; +} + /* 80A286FC-80A287A0 00261C 00A4+00 2/0 0/0 0/0 .text chace_st__15daNpcKasiMich_cFi */ int daNpcKasiMich_c::chace_st(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -988,7 +993,7 @@ int daNpcKasiMich_c::chace_st(int param_1) { case 1: if (_turn_to_link(0xC00)) { - setAction(&daNpcKasiMich_c::wait); + setAction(&daNpcKasiMich_c::chace); } break; } @@ -998,7 +1003,6 @@ int daNpcKasiMich_c::chace_st(int param_1) { /* 80A287A0-80A28910 0026C0 0170+00 4/0 0/0 0/0 .text chace__15daNpcKasiMich_cFi */ int daNpcKasiMich_c::chace(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1021,7 +1025,7 @@ int daNpcKasiMich_c::chace(int param_1) { setAction(&daNpcKasiMich_c::wait); } } else { - setAction(&daNpcKasiMich_c::wait); + setAction(&daNpcKasiMich_c::chace_st); } break; } @@ -1029,6 +1033,11 @@ int daNpcKasiMich_c::chace(int param_1) { return 1; } +void dummy2() { + daNpcKasiMich_c::actionFunc temp; + temp = &daNpcKasiMich_c::chace; +} + /* 80A28910-80A289CC 002830 00BC+00 1/1 0/0 0/0 .text getChacePos__15daNpcKasiMich_cFv */ cXyz daNpcKasiMich_c::getChacePos() { int plPoint = mPlPoint; @@ -1052,7 +1061,6 @@ cXyz daNpcKasiMich_c::getChacePos() { /* 80A289CC-80A28A8C 0028EC 00C0+00 2/0 0/0 0/0 .text turn_link__15daNpcKasiMich_cFi */ int daNpcKasiMich_c::turn_link(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1065,7 +1073,7 @@ int daNpcKasiMich_c::turn_link(int param_1) { case 1: if (_turn_to_link(0x1000)) { - setAction(&daNpcKasiMich_c::chace); + setAction(&daNpcKasiMich_c::wait); break; } } @@ -1075,7 +1083,6 @@ int daNpcKasiMich_c::turn_link(int param_1) { /* 80A28A8C-80A28B70 0029AC 00E4+00 1/0 0/0 0/0 .text turn_home__15daNpcKasiMich_cFi */ int daNpcKasiMich_c::turn_home(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1093,7 +1100,7 @@ int daNpcKasiMich_c::turn_home(int param_1) { shape_angle.y = current.angle.y; if (bVar1) { - setAction(&daNpcKasiMich_c::wait); + setAction(&daNpcKasiMich_c::wait_dummy); } break; } @@ -1103,7 +1110,6 @@ int daNpcKasiMich_c::turn_home(int param_1) { /* 80A28B70-80A28C40 002A90 00D0+00 1/0 0/0 0/0 .text turn_center__15daNpcKasiMich_cFi */ int daNpcKasiMich_c::turn_center(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1117,7 +1123,7 @@ int daNpcKasiMich_c::turn_center(int param_1) { case 1: if (_turn_pos(mCenterPos, 0x1000)) { - setAction(&daNpcKasiMich_c::chace_st); + setAction(&daNpcKasiMich_c::wait_dummy); } break; } @@ -1197,14 +1203,13 @@ int daNpcKasiMich_c::kya2(int param_1) { /* 80A28E28-80A28EFC 002D48 00D4+00 1/0 0/0 0/0 .text kya_stop__15daNpcKasiMich_cFi */ int daNpcKasiMich_c::kya_stop(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; case 0: if (mMotion != MOT_MICH_KYA_TALK) { - setAction(&daNpcKasiMich_c::chace); + setAction(&daNpcKasiMich_c::wait); } else { mMode = 1; } @@ -1212,7 +1217,7 @@ int daNpcKasiMich_c::kya_stop(int param_1) { case 1: if (mAnm_p->getFrame() == 19.0f || mAnm_p->getFrame() == 1.0f) { - setAction(&daNpcKasiMich_c::wait); + setAction(&daNpcKasiMich_c::wait_dummy); } break; } @@ -1272,7 +1277,6 @@ int daNpcKasiMich_c::escape(int param_1) { /* 80A2908C-80A29164 002FAC 00D8+00 1/0 0/0 0/0 .text iyan_look__15daNpcKasiMich_cFi */ int daNpcKasiMich_c::iyan_look(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1296,13 +1300,6 @@ int daNpcKasiMich_c::iyan_look(int param_1) { return 1; } -void daNpcKasiMich_c::dummy() { - setAction(&daNpcKasiMich_c::wait_dummy); - setAction(&daNpcKasiMich_c::wait); - setAction(&daNpcKasiMich_c::wait_dummy); - setAction(&daNpcKasiMich_c::wait_dummy); -} - /* 80A29164-80A291E8 003084 0084+00 1/0 0/0 0/0 .text turn_hana__15daNpcKasiMich_cFi */ int daNpcKasiMich_c::turn_hana(int param_1) { switch (mMode) { @@ -1345,7 +1342,6 @@ int daNpcKasiMich_c::wait_dummy(int param_1) { /* 80A2926C-80A29458 00318C 01EC+00 1/0 0/0 0/0 .text cheer__15daNpcKasiMich_cFi */ int daNpcKasiMich_c::cheer(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; diff --git a/src/d/actor/d_a_npc_zrc.cpp b/src/d/actor/d_a_npc_zrc.cpp index 758006220ed..a216a13f5b0 100644 --- a/src/d/actor/d_a_npc_zrc.cpp +++ b/src/d/actor/d_a_npc_zrc.cpp @@ -199,7 +199,6 @@ daNpc_zrC_c::EventFn daNpc_zrC_c::mEvtCutList[2] = { /* 80B8DC0C-80B8DD90 0000EC 0184+00 1/1 0/0 0/0 .text __ct__11daNpc_zrC_cFv */ daNpc_zrC_c::daNpc_zrC_c() { - // NONMATCHING } /* 80B8DE20-80B8E03C 000300 021C+00 1/0 0/0 0/0 .text __dt__11daNpc_zrC_cFv */ diff --git a/src/d/actor/d_a_obj_Lv5Key.cpp b/src/d/actor/d_a_obj_Lv5Key.cpp index fc7943067a2..848cad45515 100644 --- a/src/d/actor/d_a_obj_Lv5Key.cpp +++ b/src/d/actor/d_a_obj_Lv5Key.cpp @@ -39,7 +39,7 @@ int daObjLv5Key_c::Init() { setStatus(STATUS_WAIT); mAction = NULL; - setAction(&Wait, 1); + setAction(&daObjLv5Key_c::Wait, 1); return cPhs_COMPLEATE_e; } @@ -137,9 +137,9 @@ void daObjLv5Key_c::Wait(int param_0) { case 1: if (is_open_start()) { setBgc(); - setAction(&Open, 1); + setAction(&daObjLv5Key_c::Open, 1); } else if (is_shake_start()) { - setAction(&Shake, 1); + setAction(&daObjLv5Key_c::Shake, 1); } } } @@ -158,7 +158,7 @@ void daObjLv5Key_c::Open(int param_0) { mBck.play(); if (mBck.isStop()) { - setAction(&Fall, 1); + setAction(&daObjLv5Key_c::Fall, 1); } } } @@ -174,7 +174,7 @@ void daObjLv5Key_c::Fall(int param_0) { fopAcM_SetGravity(this, -6.0f); mMode = 1; break; - case 1: + case 1: { fopAcM_calcSpeed(this); fopAcM_posMove(this, NULL); @@ -194,6 +194,7 @@ void daObjLv5Key_c::Fall(int param_0) { mMode = 2; } break; + } case 2: RotateAngle(); @@ -207,7 +208,7 @@ void daObjLv5Key_c::Fall(int param_0) { current.pos.y = prev_y; if (mAcch.ChkGroundHit()) { - setAction(&Land, 1); + setAction(&daObjLv5Key_c::Land, 1); } } } @@ -267,7 +268,7 @@ void daObjLv5Key_c::Shake(int param_0) { decShakeNum(); if (is_shake_end()) { - setAction(&Wait, 1); + setAction(&daObjLv5Key_c::Wait, 1); } } } diff --git a/src/d/actor/d_a_obj_fmobj.cpp b/src/d/actor/d_a_obj_fmobj.cpp index b00430f58e1..478905a3840 100644 --- a/src/d/actor/d_a_obj_fmobj.cpp +++ b/src/d/actor/d_a_obj_fmobj.cpp @@ -11,13 +11,14 @@ #include "d/d_procname.h" #include "d/d_s_play.h" #include "SSystem/SComponent/c_math.h" +#include "f_op/f_op_actor_mng.h" /* 8057CBD8-8057CC44 000078 006C+00 1/0 0/0 0/0 .text daObj_Fmobj_Draw__FP15obj_fmobj_class */ static int daObj_Fmobj_Draw(obj_fmobj_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)&i_this->mActor; J3DModel* model_p = i_this->mpModel; - g_env_light.settingTevStruct(0x40, &a_this->current.pos, &a_this->tevStr); + g_env_light.settingTevStruct(0x40, &a_this->current.pos, &i_this->mActor.tevStr); g_env_light.setLightTevColorType_MAJI(model_p, &a_this->tevStr); mDoExt_modelUpdateDL(model_p); return 1; @@ -25,6 +26,7 @@ static int daObj_Fmobj_Draw(obj_fmobj_class* i_this) { /* 8057CC44-8057CC84 0000E4 0040+00 1/0 0/0 0/0 .text daObj_Fmobj_Execute__FP15obj_fmobj_class */ static int daObj_Fmobj_Execute(obj_fmobj_class* i_this) { + fopAc_ac_c* actor = &i_this->mActor; i_this->field_0x578++; for (int i = 0; i < 2; i++) { @@ -43,6 +45,8 @@ static int daObj_Fmobj_IsDelete(obj_fmobj_class* i_this) { /* 8057CC8C-8057CCDC 00012C 0050+00 1/0 0/0 0/0 .text daObj_Fmobj_Delete__FP15obj_fmobj_class */ static int daObj_Fmobj_Delete(obj_fmobj_class* i_this) { + fopAc_ac_c* actor = &i_this->mActor; + fopAcM_RegisterDeleteID(i_this, "Obj_Fmobj"); dComIfG_resDelete(&i_this->mPhase, "Obj_Fmobj"); dComIfG_Bgsp().Release(i_this->mpBgW); return 1; @@ -53,6 +57,7 @@ static int useHeapInit(fopAc_ac_c* i_this) { obj_fmobj_class* a_this = (obj_fmobj_class*)i_this; J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_Fmobj", 4); + JUT_ASSERT(213, modelData != NULL); a_this->mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); if (a_this->mpModel == NULL) { return 0; @@ -63,8 +68,7 @@ static int useHeapInit(fopAc_ac_c* i_this) { return 0; } - cBgD_t* pdzb = (cBgD_t*)dComIfG_getObjectRes("Obj_Fmobj", 7); - if (a_this->mpBgW->Set(pdzb, cBgW::MOVE_BG_e, &a_this->mBgMtx) == 1) { + if (a_this->mpBgW->Set((cBgD_t*)dComIfG_getObjectRes("Obj_Fmobj", 7), cBgW::MOVE_BG_e, &a_this->mBgMtx) == 1) { return 0; } @@ -74,13 +78,11 @@ static int useHeapInit(fopAc_ac_c* i_this) { /* 8057CDE0-8057CF60 000280 0180+00 1/0 0/0 0/0 .text daObj_Fmobj_Create__FP10fopAc_ac_c */ -static int daObj_Fmobj_Create(fopAc_ac_c* i_this_param) { - // Fake match - debug says i_this is fake - fopAc_ac_c* i_this = (fopAc_ac_c*)i_this_param; - obj_fmobj_class* a_this = (obj_fmobj_class*)i_this_param; - fopAcM_ct(i_this, obj_fmobj_class); +static int daObj_Fmobj_Create(fopAc_ac_c* i_this) { + obj_fmobj_class* a_this = (obj_fmobj_class*)i_this; + fopAcM_ct(&a_this->mActor, obj_fmobj_class); + int phase; - phase = dComIfG_resLoad(&a_this->mPhase, "Obj_Fmobj"); if (phase == cPhs_COMPLEATE_e) { OS_REPORT("OBJ_FMOBJ PARAM %x\n", fopAcM_GetParam(i_this)); @@ -97,7 +99,7 @@ static int daObj_Fmobj_Create(fopAc_ac_c* i_this_param) { } OS_REPORT("//////////////OBJ_FMOBJ SET 2 !!\n"); - if (dComIfG_Bgsp().Regist(a_this->mpBgW, i_this)) { + if (dComIfG_Bgsp().Regist(a_this->mpBgW, &a_this->mActor)) { return cPhs_ERROR_e; } diff --git a/src/d/actor/d_a_obj_master_sword.cpp b/src/d/actor/d_a_obj_master_sword.cpp index 13568508e86..f8b9a69b2bb 100644 --- a/src/d/actor/d_a_obj_master_sword.cpp +++ b/src/d/actor/d_a_obj_master_sword.cpp @@ -39,7 +39,7 @@ void daObjMasterSword_c::executeWait() { for (int i = 0; i < dComIfGp_getAttention()->GetActionCount(); i++) { if (dComIfGp_getAttention()->ActionTarget(i) == this) { if (dComIfGp_getAttention()->getActionBtnB() != NULL && - dComIfGp_getAttention()->getActionBtnB()->mType == 4) + dComIfGp_getAttention()->getActionBtnB()->mType == fopAc_attn_CARRY_e) { dComIfGp_setDoStatusForce(8, 0); } diff --git a/src/d/actor/d_a_obj_mirror_chain.cpp b/src/d/actor/d_a_obj_mirror_chain.cpp index 63368abb13e..e9d9238e0e9 100644 --- a/src/d/actor/d_a_obj_mirror_chain.cpp +++ b/src/d/actor/d_a_obj_mirror_chain.cpp @@ -19,7 +19,6 @@ static u8 l_begin; #endif /* 80C96698-80C96DAC 000078 0714+00 1/0 0/0 0/0 .text draw__22dScissorBegin_packet_cFv */ -// NONMATCHING - slight stack order issue void dScissorBegin_packet_c::draw() { GXGetScissor(&l_scissor[0], &l_scissor[1], &l_scissor[2], &l_scissor[3]); @@ -39,8 +38,7 @@ void dScissorBegin_packet_c::draw() { f32 sp68 = l_scissor[1]; f32 sp64 = sp68 + l_scissor[3]; - cXyz spEC[4]; - cXyz sp11C; + cXyz spEC[5]; int sp60 = 4; view_class* view_p = dComIfGd_getView(); f32 sp58 = -view_p->near; diff --git a/src/d/actor/d_a_obj_oiltubo.cpp b/src/d/actor/d_a_obj_oiltubo.cpp index 6f41579d21b..824d05d7027 100644 --- a/src/d/actor/d_a_obj_oiltubo.cpp +++ b/src/d/actor/d_a_obj_oiltubo.cpp @@ -163,7 +163,7 @@ void daObj_Oiltubo_c::restart() { current.angle.set(0, home.angle.y, 0); shape_angle = current.angle; - setProcess(&wait); + setProcess(&daObj_Oiltubo_c::wait); } /* 80CA7068-80CA720C 0009C8 01A4+00 1/1 0/0 0/0 .text initialize__15daObj_Oiltubo_cFv */ diff --git a/src/d/actor/d_a_obj_ss_drink.cpp b/src/d/actor/d_a_obj_ss_drink.cpp index 72701f47926..ada7eb9b7c1 100644 --- a/src/d/actor/d_a_obj_ss_drink.cpp +++ b/src/d/actor/d_a_obj_ss_drink.cpp @@ -375,7 +375,7 @@ void daObj_SSDrink_c::setMtx() { /* 80CE60E8-80CE6170 0011E8 0088+00 1/1 0/0 0/0 .text setAttnPos__15daObj_SSDrink_cFv */ void daObj_SSDrink_c::setAttnPos() { - if (!checkProcess(&daObj_SSDrink_c::drink)) { + if (!checkProcess(&daObj_SSDrink_c::talk)) { attention_info.position = current.pos; } diff --git a/src/d/actor/d_a_obj_ss_item.cpp b/src/d/actor/d_a_obj_ss_item.cpp index e3c0ffe7279..3d12397408b 100644 --- a/src/d/actor/d_a_obj_ss_item.cpp +++ b/src/d/actor/d_a_obj_ss_item.cpp @@ -243,7 +243,7 @@ u16 daObj_SSItem_c::getValue() { void daObj_SSItem_c::restart() { current.angle.set(0, home.angle.y, 0); shape_angle = current.angle; - setProcess(&wait); + setProcess(&daObj_SSItem_c::wait); } /* 80CE7950-80CE7B04 000DB0 01B4+00 1/1 0/0 0/0 .text initialize__14daObj_SSItem_cFv */ diff --git a/src/d/actor/d_a_tag_Lv8Gate.cpp b/src/d/actor/d_a_tag_Lv8Gate.cpp index 7b6891355dc..dd8a5c95228 100644 --- a/src/d/actor/d_a_tag_Lv8Gate.cpp +++ b/src/d/actor/d_a_tag_Lv8Gate.cpp @@ -128,58 +128,77 @@ static int daTagLv8Gate_Execute(daTagLv8Gate_c* i_this) { } /* 80D51F48-80D522F0 000388 03A8+00 1/1 0/0 0/0 .text execute__14daTagLv8Gate_cFv */ -int daTagLv8Gate_c::execute() { - dComIfG_inf_c& game_info = g_dComIfG_gameInfo; // Fake match? - - if (game_info.getPlay().getEvent().runCheck() && !eventInfo.checkCommandTalk()) { - s32 cut_index = dComIfGp_getEventManager().getMyStaffId(l_arcName, NULL, 0); +inline int daTagLv8Gate_c::execute() { + #if VERSION != VERSION_SHIELD_DEBUG + // TODO: gameInfo fake match to force reuse of pointer + dComIfG_play_c* play = &g_dComIfG_gameInfo.play; + if (play->getEvent().runCheck() && !eventInfo.checkCommandTalk()) { + #else + if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk()) { + #endif + dEvent_manager_c& eventManager = dComIfGp_getEventManager(); + s32 cut_index = eventManager.getMyStaffId(l_arcName, NULL, 0); if (cut_index != -1) { - int* cut_name = (int*)dComIfGp_getEventManager().getMyNowCutName(cut_index); + int* cut_name = (int*)eventManager.getMyNowCutName(cut_index); - if (dComIfGp_getEventManager().getIsAddvance(cut_index)) { + if (eventManager.getIsAddvance(cut_index)) { switch (*cut_name) { - case '0001': - dComIfGp_getEvent().setSkipProc(this, dEv_noFinishSkipProc, 0); + case '0001': { + dComIfGp_getEvent().startCheckSkipEdge(this); daPy_getPlayerActorClass()->setPlayerPosAndAngle(¤t.pos, shape_angle.y, 0); fopAc_ac_c* mirror_table = fopAcM_SearchByName(PROC_Obj_MirrorTable); if (mirror_table != NULL) { - static_cast(mirror_table)->field_0x874 = true; + static_cast(mirror_table)->setEffect(); } break; - + } case '0002': dStage_changeScene(getSceneNo(), 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); break; + + default: + JUT_ASSERT(139, FALSE); } } + #if VERSION != VERSION_SHIELD_DEBUG + dEvt_control_c& eventControl = play->getEvent(); + #endif if (dComIfGp_getEvent().checkSkipEdge()) { + #if VERSION != VERSION_SHIELD_DEBUG + dComIfGp_getEvent().reset(); + #else dComIfGp_event_reset(); + #endif dStage_changeScene(getSceneNo(), 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); } switch (*cut_name) { case '0001': case '0002': - dComIfGp_evmng_cutEnd(cut_index); + eventManager.cutEnd(cut_index); + break; + default: + JUT_ASSERT(154, FALSE); break; } if (eventInfo.checkCommandDemoAccrpt() && mEventID != -1) { - if (dComIfGp_evmng_endCheck(mEventID)) { + if (eventManager.endCheck(mEventID)) { mEventID = -1; } } } } else { if (daPy_getPlayerActorClass()->checkPriActorOwn(this)) { + JUT_ASSERT(169, NULL != dComIfGp_getAttention()); for (int i = 0; i < dComIfGp_getAttention()->GetActionCount(); i++) { if (dComIfGp_getAttention()->ActionTarget(i) == this) { if (dComIfGp_getAttention()->getActionBtnB() != NULL && - dComIfGp_getAttention()->getActionBtnB()->mType == 4) + dComIfGp_getAttention()->getActionBtnB()->mType == fopAc_attn_CARRY_e) { dComIfGp_setDoStatusForce(7, 0); } @@ -189,7 +208,7 @@ int daTagLv8Gate_c::execute() { if (fopAcM_checkCarryNow(this)) { fopAcM_cancelCarryNow(this); - attention_info.flags &= ~fopAc_AttnFlag_CARRY_e; + cLib_offBit(attention_info.flags, fopAc_AttnFlag_CARRY_e); eventInfo.setArchiveName(l_arcName); dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName()); mEventID = dComIfGp_getEventManager().getEventIdx(this, "LV8_GATE_ENTRY", -1); diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp index 8f2cfcf053d..b9640b2539a 100644 --- a/src/d/d_kankyo_rain.cpp +++ b/src/d/d_kankyo_rain.cpp @@ -1902,15 +1902,18 @@ void vrkumo_move() { } for (int i = 0; i < 100; i++) { + s16 sp8; + f32 sp34; + f32 var_f31; switch (vrkumo_packet->mVrkumoEff[i].mStatus) { case 0: - s16 sp8 = cM_rndF(65535.0f); - f32 sp34 = cM_rndF(18000.0f); + sp8 = cM_rndF(65535.0f); + sp34 = cM_rndF(18000.0f); if (sp34 > 15000.0f) { sp34 = 14000.0 + cM_rndF(1000.0f); } - f32 var_f31 = sp34 * cM_ssin(sp8); + var_f31 = sp34 * cM_ssin(sp8); // @bug - parenthesis should not be on the condition if ((f32)fabs(var_f31 < 5000.0f)) { if (var_f31 > 0.0f) { @@ -4577,7 +4580,6 @@ inline float cosf(float x) { } /* 8006A090-8006B190 0649D0 1100+00 0/0 1/1 0/0 .text drawVrkumo__FPA4_fR8_GXColorPPUc */ -// NONMATCHING - regalloc, j/k getting put in too low of registers? void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) { dKankyo_sun_Packet* sun_packet = g_env_light.mpSunPacket; dScnKy_env_light_c* envlight = dKy_getEnvlight(); diff --git a/src/d/d_npc_lib.cpp b/src/d/d_npc_lib.cpp index 8f8440e1d06..07d66387262 100644 --- a/src/d/d_npc_lib.cpp +++ b/src/d/d_npc_lib.cpp @@ -38,7 +38,6 @@ void dNpcLib_lookat_c::init(J3DModel* i_mdl_p, int* param_1, csXyz* param_2, csX void dNpcLib_lookat_c::action(cXyz param_0, cXyz param_1, fopAc_ac_c* param_2, Mtx param_3, int param_4) { cXyz sp90; - int i; Mtx spA0; cMtx_copy(param_3, spA0); diff --git a/src/d/d_ovlp_fade2.cpp b/src/d/d_ovlp_fade2.cpp index 25c8bc94209..d0dc1bc2534 100644 --- a/src/d/d_ovlp_fade2.cpp +++ b/src/d/d_ovlp_fade2.cpp @@ -106,7 +106,7 @@ void dOvlpFd2_dlst_c::draw() { /* 80252990-802529F4 24D2D0 0064+00 1/1 0/0 0/0 .text __ct__10dOvlpFd2_cFv */ dOvlpFd2_c::dOvlpFd2_c() { - setExecute(&execFirstSnap); + setExecute(&dOvlpFd2_c::execFirstSnap); dComIfGp_2dShowOff(); mTimer = 2; } @@ -115,7 +115,7 @@ dOvlpFd2_c::dOvlpFd2_c() { void dOvlpFd2_c::execFirstSnap() { if (field_0x11c != 0) { if (cLib_calcTimer(&mTimer) == 0) { - setExecute(&execFadeOut); + setExecute(&dOvlpFd2_c::execFadeOut); fopOvlpM_Done(this); mTimer = -12; } @@ -138,7 +138,7 @@ void dOvlpFd2_c::execFadeOut() { if (mTimer == 0) { if (fopOvlpM_IsOutReq(this)) { fopOvlpM_SceneIsStart(); - setExecute(&execNextSnap); + setExecute(&dOvlpFd2_c::execNextSnap); field_0x110 = -0x4000; mTimer = 15; } @@ -154,7 +154,7 @@ void dOvlpFd2_c::execFadeOut() { cLib_calcTimer(&mTimer); } - field_0x114 += TREG_S(0) + 0x800; + field_0x114 += (s16)(TREG_S(0) + 0x800); cLib_addCalc2(&field_0x118, TREG_F(1) + 1.0f, 1.0f, TREG_F(2) + 0.05f); } @@ -167,7 +167,7 @@ void dOvlpFd2_c::execNextSnap() { dComIfGp_setWindowNum(1); dComIfGp_2dShowOff(); - setExecute(&execFadeIn); + setExecute(&dOvlpFd2_c::execFadeIn); } } } diff --git a/src/d/d_ovlp_fade3.cpp b/src/d/d_ovlp_fade3.cpp index 7752b8a0c8a..592bfc85fb4 100644 --- a/src/d/d_ovlp_fade3.cpp +++ b/src/d/d_ovlp_fade3.cpp @@ -115,7 +115,7 @@ void dOvlpFd3_dlst_c::draw() { /* 8025343C-80253518 24DD7C 00DC+00 1/1 0/0 0/0 .text __ct__10dOvlpFd3_cFv */ dOvlpFd3_c::dOvlpFd3_c() { - setExecute(&execFirstSnap); + setExecute(&dOvlpFd3_c::execFirstSnap); dComIfGp_2dShowOff(); mTimer = 2; @@ -132,7 +132,7 @@ dOvlpFd3_c::dOvlpFd3_c() { void dOvlpFd3_c::execFirstSnap() { if (cLib_calcTimer(&field_0x11f) == 0 && field_0x11c != 0) { if (cLib_calcTimer(&mTimer) == 0) { - setExecute(&execFadeOut); + setExecute(&dOvlpFd3_c::execFadeOut); fopOvlpM_Done(this); mTimer = 0xFF; } @@ -148,7 +148,7 @@ void dOvlpFd3_c::execFadeOut() { if (mTimer == 0) { if (fopOvlpM_IsOutReq(this)) { fopOvlpM_SceneIsStart(); - setExecute(&execNextSnap); + setExecute(&dOvlpFd3_c::execNextSnap); field_0x110 = -0x4000; mTimer = 1; } @@ -173,7 +173,7 @@ void dOvlpFd3_c::execNextSnap() { field_0x110 += field_0x112; dComIfGp_setWindowNum(1); - setExecute(&execFadeIn); + setExecute(&dOvlpFd3_c::execFadeIn); } } } diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index d87c007bab4..9f54014c35f 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -1176,20 +1176,23 @@ int mDoExt_McaMorf::create(J3DModelData* modelData, mDoExt_McaMorfCallBack1_c* c if (!mpQuat) { goto cleanup; } - J3DTransformInfo* info = mpTransformInfo; - Quaternion* quat = mpQuat; - J3DModelData* r23 = mpModel->getModelData(); - u16 jointNum = r23->getJointNum(); - for (int i = 0; i < jointNum; i++) { - J3DJoint* joint = r23->getJointNodePointer(i); - *info = joint->getTransformInfo(); - JMAEulerToQuat(info->mRotation.x, info->mRotation.y, info->mRotation.z, quat); - info++; - quat++; + { + J3DTransformInfo* info = mpTransformInfo; + Quaternion* quat = mpQuat; + J3DModelData* r23 = mpModel->getModelData(); + int jointNum = r23->getJointNum(); + for (int i = 0; i < jointNum; i++) { + J3DJoint* joint = r23->getJointNodePointer(i); + J3DTransformInfo& transInfo = joint->getTransformInfo(); + *info = transInfo; + JMAEulerToQuat(info->mRotation.x, info->mRotation.y, info->mRotation.z, quat); + info++; + quat++; + } + mpCallback1 = callback1; + mpCallback2 = callback2; + return 1; } - mpCallback1 = callback1; - mpCallback2 = callback2; - return 1; cleanup: if (mpSound) { mpSound->stopAnime(); @@ -1351,7 +1354,7 @@ void mDoExt_McaMorf::modelCalc() { mpAnm->setFrame(mFrameCtrl.getFrame()); } - mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc((J3DMtxCalc*)this); + mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc(this); mpModel->calc(); } } @@ -1441,17 +1444,19 @@ int mDoExt_McaMorfSO::create(J3DModelData* i_modelData, mDoExt_McaMorfCallBack1_ mpQuat = new Quaternion[i_modelData->getJointNum()]; if (mpQuat != NULL) { - J3DTransformInfo* transInfo = mpTransformInfo; + J3DTransformInfo* transInfo_p = mpTransformInfo; Quaternion* quat = mpQuat; J3DModelData* modelData = mpModel->getModelData(); - u16 jointNum = modelData->getJointNum(); + int jointNum = modelData->getJointNum(); for (int i = 0; i < jointNum; i++) { - *transInfo = modelData->getJointNodePointer(i)->getTransformInfo(); - JMAEulerToQuat(transInfo->mRotation.x, transInfo->mRotation.y, - transInfo->mRotation.z, quat); + J3DJoint* joint = modelData->getJointNodePointer(i); + J3DTransformInfo& transInfo = joint->getTransformInfo();; + *transInfo_p = transInfo; + JMAEulerToQuat(transInfo_p->mRotation.x, transInfo_p->mRotation.y, + transInfo_p->mRotation.z, quat); - transInfo++; + transInfo_p++; quat++; } @@ -1633,7 +1638,7 @@ void mDoExt_McaMorfSO::updateDL() { mpAnm->setFrame(mFrameCtrl.getFrame()); } - mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc((J3DMtxCalc*)this); + mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc(this); mDoExt_modelUpdateDL(mpModel); mPrevMorf = mCurMorf; } @@ -1655,7 +1660,7 @@ void mDoExt_McaMorfSO::modelCalc() { mpAnm->setFrame(mFrameCtrl.getFrame()); } - mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc((J3DMtxCalc*)this); + mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc(this); mpModel->calc(); } } @@ -2058,7 +2063,7 @@ void mDoExt_McaMorf2::modelCalc() { field_0x40->setFrame(mFrameCtrl.getFrame()); } - mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc((J3DMtxCalc*)this); + mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc(this); mpModel->calc(); } }