Match dNpcLib_lookat_c::action and daBaseNpc_lookat_c::calc (#2973)

* Match dNpcLib_lookat_c::action and daBaseNpc_lookat_c::calc

Co-authored-by: Cuyler36 <Cuyler36@users.noreply.github.com>

* Improve d_a_npc weak func order

---------

Co-authored-by: Cuyler36 <Cuyler36@users.noreply.github.com>
This commit is contained in:
LagoLunatic 2025-12-20 01:59:16 -05:00 committed by GitHub
parent ac9a361676
commit 0395053737
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 10 additions and 21 deletions

View File

@ -770,7 +770,7 @@ config.libs = [
Object(Equivalent, "d/actor/d_a_alink.cpp"), # weak func order, vtable order
Object(MatchingFor(ALL_GCN), "d/actor/d_a_itembase.cpp"),
Object(MatchingFor(ALL_GCN), "d/actor/d_a_no_chg_room.cpp"),
Object(NonMatching, "d/actor/d_a_npc.cpp"),
Object(Equivalent, "d/actor/d_a_npc.cpp"), # weak func order (daNpcF_MoveBgActor_c::Delete)
Object(MatchingFor(ALL_GCN), "d/actor/d_a_npc_cd.cpp"),
Object(NonMatching, "d/actor/d_a_npc_cd2.cpp"), # stripped vtable order
Object(MatchingFor(ALL_GCN), "d/actor/d_a_obj_item.cpp"),
@ -844,7 +844,7 @@ config.libs = [
Object(MatchingFor(ALL_GCN), "d/d_msg_string.cpp"),
Object(MatchingFor(ALL_GCN), "d/d_msg_flow.cpp"),
Object(MatchingFor(ALL_GCN), "d/d_name.cpp"),
Object(NonMatching, "d/d_npc_lib.cpp"),
Object(MatchingFor(ALL_GCN), "d/d_npc_lib.cpp"),
Object(MatchingFor(ALL_GCN), "d/d_ovlp_fade.cpp"),
Object(MatchingFor(ALL_GCN), "d/d_ovlp_fade2.cpp"),
Object(MatchingFor(ALL_GCN), "d/d_ovlp_fade3.cpp"),

View File

@ -165,7 +165,6 @@ public:
return ret;
}
virtual ~daBaseNpc_moveBgActor_c() {}
virtual int CreateHeap() { return 1; }
virtual int Create() { return 1; }
virtual int Execute(Mtx**) { return 1; }

View File

@ -409,7 +409,6 @@ public:
class daNpcF_MoveBgActor_c : public daNpcF_c {
private:
public:
~daNpcF_MoveBgActor_c() {}
virtual bool CreateHeap() { return true; }
virtual bool Create() { return true; }
virtual bool Execute(Mtx**) { return true; }

View File

@ -275,7 +275,6 @@ void daBaseNpc_lookat_c::limitter(s16 i_value, s16* o_value_p, s16 i_max, s16 i_
*o_value_p = 0;
}
// NONMATCHING - regalloc, equivalent ? (matches debug)
void daBaseNpc_lookat_c::calc(fopAc_ac_c* param_0, Mtx param_1, s16 param_2) {
if (mpAttnPos == NULL) {
for (int i = 0; i < 4; i++) {
@ -335,6 +334,7 @@ void daBaseNpc_lookat_c::calc(fopAc_ac_c* param_0, Mtx param_1, s16 param_2) {
csXyz sp2C;
cXyz sp94;
cXyz sp88;
s16 sp16, sp14, sp12, sp10;
for (int i = 2; i >= -1; i--) {
sp2C = csXyz::Zero;
@ -368,7 +368,6 @@ void daBaseNpc_lookat_c::calc(fopAc_ac_c* param_0, Mtx param_1, s16 param_2) {
if (!sp88.isZero()) {
sp88.normalize();
s16 sp16, sp14, sp12, sp10;
sp16 = -cM_atan2s(sp94.y, sp94.absXZ());
sp12 = cM_atan2s(sp94.x, sp94.z);
sp14 = -cM_atan2s(sp88.y, sp88.absXZ());

View File

@ -2131,16 +2131,8 @@ void daNpcF_clearMessageTmpBit() {
}
// TODO: dummy to generate weak functions, proper fix later
static void dummyVirtual(daNpcF_MoveBgActor_c* dummy) {
dummy->~daNpcF_MoveBgActor_c();
dummy->CreateHeap();
dummy->Create();
dummy->Execute(NULL);
dummy->Draw();
dummy->Delete();
dummy->IsDelete();
dummy->ToFore();
dummy->ToBack();
static void dummyVirtual() {
daNpcF_MoveBgActor_c dummy;
}
dCcD_SrcGObjInf const daBaseNpc_c::mCcDObj = {

View File

@ -29,7 +29,6 @@ void dNpcLib_lookat_c::init(J3DModel* i_mdl_p, int* param_1, csXyz* param_2, csX
}
}
// NONMATCHING - regswap, equivalent
void dNpcLib_lookat_c::action(cXyz param_0, cXyz param_1, fopAc_ac_c* param_2, Mtx param_3, int param_4) {
cXyz sp90;
@ -63,6 +62,7 @@ void dNpcLib_lookat_c::action(cXyz param_0, cXyz param_1, fopAc_ac_c* param_2, M
cXyz sp84;
cXyz sp78;
s16 sp1A, sp18, sp16, sp14;
f32 var_f30 = 0.0f;
f32 var_f31 = 1.0f;
@ -76,11 +76,11 @@ void dNpcLib_lookat_c::action(cXyz param_0, cXyz param_1, fopAc_ac_c* param_2, M
if (!sp78.isZero()) {
sp78.normalize();
s16 sp1A = -cM_atan2s(sp84.y, sp84.absXZ());
s16 sp18 = cM_atan2s(sp84.x, sp84.z);
sp1A = -cM_atan2s(sp84.y, sp84.absXZ());
sp18 = cM_atan2s(sp84.x, sp84.z);
s16 sp16 = -cM_atan2s(sp78.y, sp78.absXZ());
s16 sp14 = cM_atan2s(sp78.x, sp78.z);
sp16 = -cM_atan2s(sp78.y, sp78.absXZ());
sp14 = cM_atan2s(sp78.x, sp78.z);
field_0x4c[i].x += (s16)(var_f31 * (f32)(sp1A - sp16));
field_0x4c[i].y += (s16)(var_f31 * (f32)(sp18 - sp14));