Debug+retail matches and clean up some fakematches (#2910)

* Debug matches

* Match daAlink_c::procGrassWhistleWait

* Match JASAramStream::channelProc

* More debug matches

* Match JAUStreamStaticAramMgr_::deleteStreamAram and bitset inlines

* Fix some fakematches

* Fix gameinfo player info not being a struct

* Update bug comments

* Fix procids in alink

* d_a_scene_exit OK
This commit is contained in:
LagoLunatic
2025-12-03 18:09:56 -05:00
committed by GitHub
parent ecbb3eb776
commit b51274a3dd
43 changed files with 278 additions and 251 deletions
+13 -12
View File
@@ -9,6 +9,7 @@
#include "JSystem/J2DGraph/J2DAnmLoader.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "JSystem/J3DGraphLoader/J3DAnmLoader.h"
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
#include "JSystem/JKernel/JKRExpHeap.h"
#include "SSystem/SComponent/c_math.h"
#include "d/d_item.h"
@@ -34,6 +35,7 @@
#include "d/actor/d_a_tag_mhint.h"
#include "d/actor/d_a_tag_mmsg.h"
#include "d/actor/d_a_tag_lantern.h"
#include "d/actor/d_a_horse.h"
#include "m_Do/m_Do_controller_pad.h"
#include "d/d_bomb.h"
#include "d/d_meter2_info.h"
@@ -2687,7 +2689,7 @@ cXyz* daAlink_c::getNeckAimPos(cXyz* param_0, int* param_1, int param_2) {
}
}
} else {
field_0x28fc = -1;
field_0x28fc = fpcM_ERROR_PROCESS_ID_e;
field_0x30f8 = 0;
}
}
@@ -4279,12 +4281,12 @@ void daAlink_c::playerInit() {
field_0x2f97 = -1;
for (int i = 0; i < 0x10; i++) {
mShieldArrowIDs[i] = -1;
mShieldArrowIDs[i] = fpcM_ERROR_PROCESS_ID_e;
}
mAtnActorID = -1;
mMsgClassID = -1;
field_0x28f8 = -1;
field_0x28fc = -1;
mAtnActorID = fpcM_ERROR_PROCESS_ID_e;
mMsgClassID = fpcM_ERROR_PROCESS_ID_e;
field_0x28f8 = fpcM_ERROR_PROCESS_ID_e;
field_0x28fc = fpcM_ERROR_PROCESS_ID_e;
field_0x2e54.init(&mLinkAcch, mpHIO->mBasic.m.mWaterSurfaceEffectHeight, field_0x598);
field_0x3108 = shape_angle.y;
@@ -4581,7 +4583,7 @@ int daAlink_c::create() {
field_0x2900 = fopAcM_create(PROC_Obj_IceLeaf, 0x1FFFF, &current.pos,
fopAcM_GetRoomNo(this), &shape_angle, NULL, -1);
} else {
field_0x2900 = -1;
field_0x2900 = fpcM_ERROR_PROCESS_ID_e;
}
}
@@ -4592,7 +4594,7 @@ int daAlink_c::create() {
(startMode == 14 && !dComIfG_Bgsp().ChkMoveBG(mLinkAcch.m_gnd)) ||
(startPoint == -4 &&
!(var_r24 = fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchPortal, &current.pos))) ||
(field_0x2900 != -1 && !fopAcM_SearchByID(field_0x2900)) ||
(field_0x2900 != fpcM_ERROR_PROCESS_ID_e && !fopAcM_SearchByID(field_0x2900)) ||
(checkCanoeStart() && !fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchCanoe, NULL)) ||
(checkBoarStart() && !fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchBoar, NULL)) ||
(startMode == 13 &&
@@ -4699,7 +4701,7 @@ static int daAlink_Create(fopAc_ac_c* i_this) {
return static_cast<daAlink_c*>(i_this)->create();
}
s32 daAlink_c::setRoomInfo() {
int daAlink_c::setRoomInfo() {
s32 roomID;
if (mProcID != PROC_TW_GATE) {
@@ -15585,9 +15587,8 @@ int daAlink_c::procFrontRollSuccessInit() {
setFrontRollCrashShock(mRollCrashFlg);
onResetFlg0(RFLG0_FRONT_ROLL_CRASH);
} else {
f32 tmp_3 = 3.0f;
mUnderFrameCtrl[0].setFrame(tmp_3);
getNowAnmPackUnder(UNDER_0)->setFrame(tmp_3);
mUnderFrameCtrl[0].setFrame(3.0f);
getNowAnmPackUnder(UNDER_0)->setFrame(3.0f);
}
field_0x3588 = l_halfAtnWaitBaseAnime;
+1 -1
View File
@@ -69,7 +69,7 @@ void daAlink_c::cancelBoomerangLock(fopAc_ac_c* i_actor) {
}
fopAc_ac_c* daAlink_c::getBoomerangActor() {
if (mThrowBoomerangAcKeep.getID() != 0xFFFFFFFF) {
if (mThrowBoomerangAcKeep.getID() != fpcM_ERROR_PROCESS_ID_e) {
return mThrowBoomerangAcKeep.getActor();
}
+3 -3
View File
@@ -31,12 +31,12 @@ static int daAlink_bottleModelCallBack(J3DJoint* i_joint, int param_1) {
return 1;
}
s32 daAlink_c::getBottleOpenAppearItem() const {
fpc_ProcID daAlink_c::getBottleOpenAppearItem() const {
if (mProcID == PROC_BOTTLE_OPEN) {
return mEquipItem;
}
return -1;
return fpcM_ERROR_PROCESS_ID_e;
}
BOOL daAlink_c::checkOilBottleItemNotGet(u16 i_itemNo) {
@@ -735,7 +735,7 @@ int daAlink_c::procBottleGetInit(int param_0) {
}
dComIfGp_setPlayerStatus1(0, 0x4001000);
mMsgClassID = -1;
mMsgClassID = fpcM_ERROR_PROCESS_ID_e;
field_0x3194 = 0;
field_0x32cc = var_r30 + 0x65;
+16 -6
View File
@@ -678,12 +678,12 @@ int daAlink_c::procCanoeWait() {
return 1;
}
// NONMATCHING - incorrect code gen related to daAlink_ANM
// NONMATCHING - regalloc, equivalent
int daAlink_c::procCanoeRowInit(int param_0) {
fopAc_ac_c* temp_r26 = mRideAcKeep.getActor();
field_0x3198 = -2;
daAlink_ANM var_r29;
int var_r29;
if (param_0 < 0) {
if (checkInputOnR()) {
s16 sp8 = (s16)(field_0x2fe2 - shape_angle.y);
@@ -722,19 +722,26 @@ int daAlink_c::procCanoeRowInit(int param_0) {
}
if (spC == 1) {
var_r29 = (daAlink_ANM)(var_r28 == 2 ? (int)ANM_CANOE_ROW_RIGHT_BACK : (int)ANM_CANOE_ROW_LEFT_BACK);
if (var_r28 == 2) {
var_r29 = ANM_CANOE_ROW_RIGHT_BACK;
} else {
var_r29 = ANM_CANOE_ROW_LEFT_BACK;
}
if ((var_r29 == ANM_CANOE_ROW_RIGHT_BACK && mProcVar5.field_0x3012 == 0) || (var_r29 == ANM_CANOE_ROW_LEFT_BACK && mProcVar5.field_0x3012 == 1)) {
return procCanoePaddleShiftInit(var_r29);
}
} else {
var_r29 = (daAlink_ANM)(var_r28 == 2 ? (int)ANM_CANOE_ROW_RIGHT : (int)ANM_CANOE_ROW_LEFT);
if (var_r28 == 2) {
var_r29 = ANM_CANOE_ROW_RIGHT;
} else {
var_r29 = ANM_CANOE_ROW_LEFT;
}
if ((var_r29 == ANM_CANOE_ROW_RIGHT && mProcVar5.field_0x3012 == 0) || (var_r29 == ANM_CANOE_ROW_LEFT && mProcVar5.field_0x3012 == 1)) {
return procCanoePaddleShiftInit(var_r29);
}
}
} else {
if (param_0 == -3) {
if (mProcVar5.field_0x3012 == 1) {
@@ -751,8 +758,11 @@ int daAlink_c::procCanoeRowInit(int param_0) {
var_r29 = ANM_CANOE_ROW_LEFT;
}
}
// Need something here that generates no code in order for debug branches to match.
(void)0;
} else {
var_r29 = (daAlink_ANM)param_0;
var_r29 = param_0;
}
commonProcInit(PROC_CANOE_ROW);
+3 -3
View File
@@ -44,10 +44,10 @@ void daAlink_c::stickArrowIncrement(int param_0) {
s16 arrow_num = 0;
for (int i = 0; i < 16; i++) {
if (mShieldArrowIDs[i] != -1) {
if (mShieldArrowIDs[i] != fpcM_ERROR_PROCESS_ID_e) {
if (field_0x2f7c[i] == 0 || param_0) {
arrow_num++;
mShieldArrowIDs[i] = -1;
mShieldArrowIDs[i] = fpcM_ERROR_PROCESS_ID_e;
field_0x2f7c[i] = 0;
} else {
field_0x2f7c[i]--;
@@ -75,7 +75,7 @@ void daAlink_c::setArrowShieldActor(fopAc_ac_c* i_actor, int param_1) {
int arrow_num = 0;
for (; arrow_num < 16; arrow_num++) {
if (mShieldArrowIDs[arrow_num] == -1) {
if (mShieldArrowIDs[arrow_num] == fpcM_ERROR_PROCESS_ID_e) {
mShieldArrowIDs[arrow_num] = new_arrow_id;
field_0x2f7c[arrow_num] = 10;
break;
+1 -1
View File
@@ -1174,7 +1174,7 @@ int daAlink_c::checkNextActionHorse() {
return procHorseWaitInit();
}
// NONMATCHING - regalloc
// NONMATCHING - regalloc, equivalent
BOOL daAlink_c::checkHorseGetOff() {
return (checkHorseRide() && dComIfGp_getHorseActor() != NULL &&
dComIfGp_getHorseActor()->checkGetOff()) ||
+2 -3
View File
@@ -146,7 +146,7 @@ int daAlink_c::procGrassWhistleWaitInit(int param_0, int param_1, int param_2, s
mProcVar0.field_0x3008 = 0;
mProcVar4.field_0x3010 = 0;
mProcVar5.field_0x3012 = 0;
mMsgClassID = -1;
mMsgClassID = fpcM_ERROR_PROCESS_ID_e;
mNormalSpeed = 0.0f;
current.angle.y = shape_angle.y;
field_0x2f98 = 4;
@@ -168,7 +168,6 @@ int daAlink_c::procGrassWhistleWaitInit(int param_0, int param_1, int param_2, s
}
// NONMATCHING - small regalloc
int daAlink_c::procGrassWhistleWait() {
if (mProcVar5.field_0x3012 != 0) {
if (checkEndMessage(field_0x32cc)) {
@@ -189,7 +188,7 @@ int daAlink_c::procGrassWhistleWait() {
mProcVar0.field_0x3008--;
if (mProcVar0.field_0x3008 == 0) {
daHorse_c* horse_p = dComIfGp_getHorseActor();
daHorse_c* horse_p = (daHorse_c*)dComIfGp_getHorseActor();
daNPC_TK_c* tk_p = (daNPC_TK_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchWhistle, NULL);
if (tk_p != NULL) {
+2 -2
View File
@@ -3814,7 +3814,7 @@ static void* daAlink_searchWolfHowl(fopAc_ac_c* i_actor, void* i_data) {
}
void daAlink_c::setWolfHowlNotHappen(int param_0) {
mMsgClassID = -1;
mMsgClassID = fpcM_ERROR_PROCESS_ID_e;
if (field_0x3198 == 0xEE) {
field_0x32cc = 0x532;
@@ -3945,7 +3945,7 @@ int daAlink_c::procWolfHowlDemoInit() {
dCam_getBody()->StartEventCamera(12, fopAcM_GetID(this), 0);
mProcVar1.field_0x300a = 0;
mMsgClassID = -1;
mMsgClassID = fpcM_ERROR_PROCESS_ID_e;
field_0x32cc = 0x5DD;
mProcVar2.field_0x300c = 0;
mProcVar3.field_0x300e = -1;
+8 -8
View File
@@ -880,17 +880,17 @@ void daB_DR_c::mHabatakiAnmSet(int param_0) {
}
break;
case ANM_DR_BRAKE_TO_HOVER:
if (mpModelMorf->isStop()) {
if (param_0 != 4) {
goto lbl_805bc4e0; // fakematch?
}
setBck(ANM_DR_FLAP, 2, 3.0f, 1.0f);
if (!mpModelMorf->isStop()) {
break;
}
break;
if (param_0 == 4) {
setBck(ANM_DR_FLAP, 2, 3.0f, 1.0f);
break;
}
/* fallthrough */
default:
lbl_805bc4e0:
setBck(ANM_DR_HOVERING, 2, 3.0f, 1.0f);
/* fallthrough */
case ANM_DR_HOVERING:
if ((int)mpModelMorf->getFrame() >= (int)(mpModelMorf->getEndFrame() - 1.0f) && param_0 == 4) {
setBck(ANM_DR_FLAP, 2, 3.0f, 1.0f);
+8 -2
View File
@@ -658,15 +658,21 @@ void daNpc_Bans_c::reset() {
switch (mType) {
case TYPE_POST_TWILIGHT:
break;
case TYPE_TWILIGHT:
break;
case TYPE_COLIN_KIDNAPPED:
break;
case TYPE_MAKING_BOMBS:
break;
case TYPE_SHOP:
break;
default:
daNpcT_offTmpBit(57); // dSv_event_tmp_flag_c::T_0057 - Kakariko Village (inside) - Barnes bomb shop <purchase>
setAngle(angle);
break;
}
daNpcT_offTmpBit(57); // dSv_event_tmp_flag_c::T_0057 - Kakariko Village (inside) - Barnes bomb shop <purchase>
setAngle(angle);
}
void daNpc_Bans_c::afterJntAnm(int param_1) {
+1 -1
View File
@@ -503,7 +503,7 @@ void daNpcImpal_c::setMotionAnm(int i_idx, f32 i_morf) {
case ANM_10:
case ANM_11:
break;
// Is this a bug from the original developers?
// !@bug Is this a bug from the original developers?
case ANM_12:
iVar5 = 1;
case ANM_2:
+3
View File
@@ -411,8 +411,11 @@ void daNpc_Sha_c::reset() {
switch (mType) {
case 0:
break;
case 1:
break;
default:
break;
}
setAngle(angle);
+4 -1
View File
@@ -366,12 +366,15 @@ void daNpc_Zelda_c::reset() {
acStack_20.setall(0);
acStack_20.y = home.angle.y;
switch (field_0xf80) {
case 0:
break;
default:
setAngle(acStack_20);
break;
}
setAngle(acStack_20);
}
void daNpc_Zelda_c::afterJntAnm(int param_0) {
+2 -6
View File
@@ -496,15 +496,11 @@ u32 daPy_py_c::checkCarryStartLightBallB() {
}
f32 daPy_py_c::getSpinnerRideSpeed() const {
f32 rideSpeed;
if (checkSpinnerRide()) {
rideSpeed = speedF;
return speedF;
} else {
rideSpeed = 0.0f;
return 0.0f;
}
return rideSpeed;
}
bool daPy_py_c::checkSpinnerReflectEffect() {
-1
View File
@@ -56,7 +56,6 @@ static int daScex_Execute(daScex_c* i_this) {
return i_this->execute();
}
// NONMATCHING - regalloc, this matches debug but not retail :/
int daScex_c::execute() {
daPy_py_c* player = daPy_getPlayerActorClass();
cXyz spC;
+14 -7
View File
@@ -221,13 +221,14 @@ int daTagLv7Gate_c::execute() {
// Fakematch
dComIfG_play_c& play = g_dComIfG_gameInfo.getPlay();
if (dComIfGp_event_runCheck() != 0 && !eventInfo.checkCommandTalk()) {
s32 cut_index = dComIfGp_evmng_getMyStaffId(l_arcName, NULL, 0);
dEvent_manager_c& evtMgr = dComIfGp_getEventManager();
s32 cut_index = evtMgr.getMyStaffId(l_arcName, NULL, 0);
if (cut_index != -1) {
int* cut_name = (int*)play.getEvtManager().getMyNowCutName(cut_index); // Fakematch
int* cut_name = (int*)evtMgr.getMyNowCutName(cut_index); // Fakematch
daPy_getPlayerActorClass()->onShieldBackBone();
if (dComIfGp_evmng_getIsAddvance(cut_index)) {
if (evtMgr.getIsAddvance(cut_index)) {
switch (*cut_name) {
case '0002':
field_0x5b1 = true;
@@ -237,25 +238,31 @@ int daTagLv7Gate_c::execute() {
break;
case '0003':
break;
default:
JUT_ASSERT(455, FALSE);
break;
}
}
switch (*cut_name) {
case '0001':
dComIfGp_evmng_cutEnd(cut_index);
evtMgr.cutEnd(cut_index);
break;
case '0002':
mDoAud_seStartLevel(Z2SE_EN_DR_DEMO_FIRST, &mPos1, 0, 0);
Z2GetAudioMgr()->seStartLevel(Z2SE_EN_DR_DEMO_FIRST, &mPos1, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
if (!field_0x5b1) {
dComIfGp_evmng_cutEnd(cut_index);
evtMgr.cutEnd(cut_index);
}
break;
case '0003':
break;
default:
JUT_ASSERT(477, FALSE);
break;
}
if (eventInfo.checkCommandDemoAccrpt() && mEvtId != -1 &&
dComIfGp_evmng_endCheck(mEvtId)) {
evtMgr.endCheck(mEvtId)) {
// dComIfGp_event_reset();
play.getEvent().reset(); // Fakematch
mEvtId = -1;
+7 -5
View File
@@ -38,13 +38,15 @@ static __d_timer_info_c dComIfG_mTimerInfo;
dComIfG_inf_c g_dComIfG_gameInfo;
void dComIfG_play_c::init() {
for (int i = 0; i < 1; i++) {
mPlayer[i] = NULL;
mPlayerCameraID[i] = -1;
for (int i = 0; i < ARRAY_SIZE(mPlayerInfo); i++) {
mPlayerInfo[i].mpPlayer = NULL;
mPlayerInfo[i].mCameraID = -1;
}
for (int i = 0; i < ARRAY_SIZE(mCameraInfo); i++) {
mCameraInfo[i].mCamera = NULL;
}
mCameraInfo[0].mCamera = NULL;
for (int i = 0; i < 2; i++) {
for (int i = 0; i < ARRAY_SIZE(mPlayerPtr); i++) {
mPlayerPtr[i] = NULL;
}