From 039505373732d70534f598f0d3f8d3eca62482ab Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 20 Dec 2025 01:59:16 -0500 Subject: [PATCH] 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 * Improve d_a_npc weak func order --------- Co-authored-by: Cuyler36 --- configure.py | 4 ++-- include/d/actor/d_a_npc2.h | 1 - include/d/actor/d_a_npc4.h | 1 - src/d/actor/d_a_npc2.cpp | 3 +-- src/d/actor/d_a_npc4.cpp | 12 ++---------- src/d/d_npc_lib.cpp | 10 +++++----- 6 files changed, 10 insertions(+), 21 deletions(-) diff --git a/configure.py b/configure.py index 7b7c9b869f3..bbd94f9da6b 100755 --- a/configure.py +++ b/configure.py @@ -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"), diff --git a/include/d/actor/d_a_npc2.h b/include/d/actor/d_a_npc2.h index ba6a59299a2..ea5548696a0 100644 --- a/include/d/actor/d_a_npc2.h +++ b/include/d/actor/d_a_npc2.h @@ -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; } diff --git a/include/d/actor/d_a_npc4.h b/include/d/actor/d_a_npc4.h index d84fdadf7e0..76a6cd8381d 100644 --- a/include/d/actor/d_a_npc4.h +++ b/include/d/actor/d_a_npc4.h @@ -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; } diff --git a/src/d/actor/d_a_npc2.cpp b/src/d/actor/d_a_npc2.cpp index 778f0c7efe9..7573fbeb546 100644 --- a/src/d/actor/d_a_npc2.cpp +++ b/src/d/actor/d_a_npc2.cpp @@ -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()); diff --git a/src/d/actor/d_a_npc4.cpp b/src/d/actor/d_a_npc4.cpp index 75143632022..0ce78f03052 100644 --- a/src/d/actor/d_a_npc4.cpp +++ b/src/d/actor/d_a_npc4.cpp @@ -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 = { diff --git a/src/d/d_npc_lib.cpp b/src/d/d_npc_lib.cpp index d94816f7943..f29d8720adb 100644 --- a/src/d/d_npc_lib.cpp +++ b/src/d/d_npc_lib.cpp @@ -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));