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
This commit is contained in:
LagoLunatic
2025-11-20 21:17:51 -08:00
committed by GitHub
parent 6f7457a870
commit 91011befd7
41 changed files with 217 additions and 182 deletions
@@ -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
@@ -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
+7 -7
View File
@@ -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"),
-4
View File
@@ -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; }
-1
View File
@@ -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);
+1
View File
@@ -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;
+1 -1
View File
@@ -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;
+3 -2
View File
@@ -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; }
+1 -1
View File
@@ -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;
+9 -9
View File
@@ -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,
};
+4 -6
View File
@@ -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<JAUSeqDataBlock>* link = getFirst(); link != NULL;
JSULink<JAUSeqDataBlock>* 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
+12 -4
View File
@@ -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;
}
+2 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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;
}
+2 -2
View File
@@ -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()) {
+6 -3
View File
@@ -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;
+5 -7
View File
@@ -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;
}
+2 -3
View File
@@ -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;
+1 -1
View File
@@ -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);
-1
View File
@@ -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 */

Some files were not shown because too many files have changed in this diff Show More