diff --git a/configure.py b/configure.py index d4f49b7ee7a..198579ee58f 100755 --- a/configure.py +++ b/configure.py @@ -755,9 +755,9 @@ 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(Equivalent, "d/actor/d_a_npc.cpp"), # weak func order (daNpcF_MoveBgActor_c::Delete) + Object(MatchingFor(ALL_GCN), "d/actor/d_a_npc.cpp"), 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_npc_cd2.cpp"), Object(MatchingFor(ALL_GCN), "d/actor/d_a_obj_item.cpp"), Object(MatchingFor(ALL_GCN), "d/d_insect.cpp"), Object(MatchingFor(ALL_GCN), "d/actor/d_a_obj_ss_base.cpp"), diff --git a/include/d/actor/d_a_npc4.h b/include/d/actor/d_a_npc4.h index 76a6cd8381d..bcecb54f5c8 100644 --- a/include/d/actor/d_a_npc4.h +++ b/include/d/actor/d_a_npc4.h @@ -409,6 +409,15 @@ public: class daNpcF_MoveBgActor_c : public daNpcF_c { private: public: + // these functions are inferred based on daBaseNpc_moveBgActor_c - + // defining them in this order fixes weak function order for this class in d_a_npc + // (otherwise Delete is placed under Draw instead of under Create) + int MoveBGCreateHeap(); + int MoveBGCreate(); + int MoveBGDelete(); + int MoveBGExecute(); + int MoveBGDraw(); + virtual bool CreateHeap() { return true; } virtual bool Create() { return true; } virtual bool Execute(Mtx**) { return true; } diff --git a/src/d/actor/d_a_npc4.cpp b/src/d/actor/d_a_npc4.cpp index a8f6db90d5b..9e59ae820fd 100644 --- a/src/d/actor/d_a_npc4.cpp +++ b/src/d/actor/d_a_npc4.cpp @@ -2137,6 +2137,27 @@ static void dummyVirtual() { daNpcF_MoveBgActor_c dummy; } +// see note in header, this fixes weak function order for daNpcF_MoveBgActor_c functions +int daNpcF_MoveBgActor_c::MoveBGCreateHeap() { + return CreateHeap(); +} + +int daNpcF_MoveBgActor_c::MoveBGCreate() { + return Create(); +} + +int daNpcF_MoveBgActor_c::MoveBGDelete() { + return Delete(); +} + +int daNpcF_MoveBgActor_c::MoveBGExecute() { + return Execute((Mtx**)NULL); +} + +int daNpcF_MoveBgActor_c::MoveBGDraw() { + return Draw(); +} + dCcD_SrcGObjInf const daBaseNpc_c::mCcDObj = { {0, {{0, 0, 0}, {0x0, 0x0}, {0x79}}}, {dCcD_SE_NONE, 0, 0, 0, 0}, diff --git a/src/d/actor/d_a_npc_cd2.cpp b/src/d/actor/d_a_npc_cd2.cpp index 721afc93f33..227ea5703be 100644 --- a/src/d/actor/d_a_npc_cd2.cpp +++ b/src/d/actor/d_a_npc_cd2.cpp @@ -195,6 +195,53 @@ dCcD_SrcCyl const daNpcCd2_c::m_cylDat = { } }; +static char* const* l_resNameTbl[30] = { + l_resMANa, l_resMADa, l_resMCNa, l_resMONa, l_resMANb, l_resMANc, l_resMASa, l_resMBNa, + l_resMANa2, l_resMADa2, l_resMCNa2, l_resMONa2, l_resMANb2, l_resMANc2, l_resMASa2, l_resMBNa2, + l_resWANa, l_resWADa, l_resMATa, l_resWCNa, l_resWONa, l_resWGNa, l_resWANb, l_resWANa2, + l_resWADa2, l_resMATa2, l_resWCNa2, l_resWONa2, l_resWGNa2, l_resWANb2, +}; + +static anmTblPrm const l_bmdTbl[30] = { + l_resMANa[0], 3, l_resMADa[0], 3, l_resMCNa[0], 4, l_resMONa[0], 4, l_resMANb[0], 3, + l_resMANc[0], 4, l_resMASa[0], 4, l_resMBNa[0], 4, l_resMANa2[0], 4, l_resMADa2[0], 4, + l_resMCNa2[0], 4, l_resMONa2[0], 4, l_resMANb2[0], 3, l_resMANc2[0], 4, l_resMASa2[0], 4, + l_resMBNa2[0], 4, l_resWANa[0], 4, l_resWADa[0], 4, l_resMATa[0], 3, l_resWCNa[0], 4, + l_resWONa[0], 4, l_resWGNa[0], 4, l_resWANb[0], 4, l_resWANa2[0], 4, l_resWADa2[0], 4, + l_resMATa2[0], 3, l_resWCNa2[0], 4, l_resWONa2[0], 4, l_resWGNa2[0], 4, l_resWANb2[0], 4, +}; + +static anmTblPrm const l_bmdTWTbl[30] = { + l_resMANa[1], 3, l_resMADa[1], 3, l_resMCNa[1], 4, l_resMONa[1], 4, l_resMANb[1], 3, + l_resMANc[1], 4, l_resMASa[1], 4, l_resMBNa[1], 4, l_resMANa2[1], 4, l_resMADa2[1], 3, + l_resMCNa2[1], 4, l_resMONa2[1], 4, l_resMANb2[1], 3, l_resMANc2[1], 4, l_resMASa2[1], 4, + l_resMBNa2[1], 4, l_resWANa[1], 4, l_resWADa[1], 4, l_resMATa[1], 3, l_resWCNa[1], 4, + l_resWONa[1], 4, l_resWGNa[1], 4, l_resWANb[1], 4, l_resWANa2[1], 4, l_resWADa2[1], 4, + l_resMATa2[1], 3, l_resWCNa2[1], 4, l_resWONa2[1], 4, l_resWGNa2[1], 4, l_resWANb2[1], 4, +}; + +static anmTblPrm const l_btpTbl[30] = { + l_resMANa[0], -1, l_resMADa[0], -1, l_resMCNa[0], 7, l_resMONa[0], 7, l_resMANb[0], -1, + l_resMANc[0], 7, l_resMASa[0], 7, l_resMBNa[0], 7, l_resMANa2[0], 7, l_resMADa2[0], 7, + l_resMCNa2[0], 7, l_resMONa2[0], 7, l_resMANb2[0], -1, l_resMANc2[0], 7, l_resMASa2[0], 7, + l_resMBNa2[0], 7, l_resWANa[0], 7, l_resWADa[0], 7, l_resMATa[0], -1, l_resWCNa[0], 7, + l_resWONa[0], 7, l_resWGNa[0], 7, l_resWANb[0], 7, l_resWANa2[0], 7, l_resWADa2[0], 7, + l_resMATa2[0], -1, l_resWCNa2[0], 7, l_resWONa2[0], 7, l_resWGNa2[0], 7, l_resWANb2[0], 7, +}; + +static anmTblPrm const l_btpTWTbl[30] = { + l_resMANa[1], -1, l_resMADa[1], -1, l_resMCNa[1], 7, l_resMONa[1], 7, l_resMANb[1], -1, + l_resMANc[1], 7, l_resMASa[1], 7, l_resMBNa[1], 7, l_resMANa2[1], 7, l_resMADa2[1], -1, + l_resMCNa2[1], 7, l_resMONa2[1], 7, l_resMANb2[1], -1, l_resMANc2[1], 7, l_resMASa2[1], 7, + l_resMBNa2[1], 7, l_resWANa[1], 7, l_resWADa[1], 7, l_resMATa[1], -1, l_resWCNa[1], 7, + l_resWONa[1], 7, l_resWGNa[1], 7, l_resWANb[1], 7, l_resWANa2[1], 7, l_resWADa2[1], 7, + l_resMATa2[1], -1, l_resWCNa2[1], 7, l_resWONa2[1], 7, l_resWGNa2[1], 7, l_resWANb2[1], 7, +}; + +#include "d/actor/d_a_npc_cd2_HIO.inc" + +daNpcCd2_HIO_c l_Cd2_HIO; + int daNpcCd2_c::NpcCreate(int param_1) { J3DModelData* a_mdlData_p = getNpcMdlDataP(param_1); JUT_ASSERT(590, NULL != a_mdlData_p); @@ -292,51 +339,6 @@ bool daNpcCd2_c::isM_() { return a_jntNum == JntM_NUM_e; } -static char* const* l_resNameTbl[30] = { - l_resMANa, l_resMADa, l_resMCNa, l_resMONa, l_resMANb, l_resMANc, l_resMASa, l_resMBNa, - l_resMANa2, l_resMADa2, l_resMCNa2, l_resMONa2, l_resMANb2, l_resMANc2, l_resMASa2, l_resMBNa2, - l_resWANa, l_resWADa, l_resMATa, l_resWCNa, l_resWONa, l_resWGNa, l_resWANb, l_resWANa2, - l_resWADa2, l_resMATa2, l_resWCNa2, l_resWONa2, l_resWGNa2, l_resWANb2, -}; - -static anmTblPrm const l_bmdTbl[30] = { - l_resMANa[0], 3, l_resMADa[0], 3, l_resMCNa[0], 4, l_resMONa[0], 4, l_resMANb[0], 3, - l_resMANc[0], 4, l_resMASa[0], 4, l_resMBNa[0], 4, l_resMANa2[0], 4, l_resMADa2[0], 4, - l_resMCNa2[0], 4, l_resMONa2[0], 4, l_resMANb2[0], 3, l_resMANc2[0], 4, l_resMASa2[0], 4, - l_resMBNa2[0], 4, l_resWANa[0], 4, l_resWADa[0], 4, l_resMATa[0], 3, l_resWCNa[0], 4, - l_resWONa[0], 4, l_resWGNa[0], 4, l_resWANb[0], 4, l_resWANa2[0], 4, l_resWADa2[0], 4, - l_resMATa2[0], 3, l_resWCNa2[0], 4, l_resWONa2[0], 4, l_resWGNa2[0], 4, l_resWANb2[0], 4, -}; - -static anmTblPrm const l_bmdTWTbl[30] = { - l_resMANa[1], 3, l_resMADa[1], 3, l_resMCNa[1], 4, l_resMONa[1], 4, l_resMANb[1], 3, - l_resMANc[1], 4, l_resMASa[1], 4, l_resMBNa[1], 4, l_resMANa2[1], 4, l_resMADa2[1], 3, - l_resMCNa2[1], 4, l_resMONa2[1], 4, l_resMANb2[1], 3, l_resMANc2[1], 4, l_resMASa2[1], 4, - l_resMBNa2[1], 4, l_resWANa[1], 4, l_resWADa[1], 4, l_resMATa[1], 3, l_resWCNa[1], 4, - l_resWONa[1], 4, l_resWGNa[1], 4, l_resWANb[1], 4, l_resWANa2[1], 4, l_resWADa2[1], 4, - l_resMATa2[1], 3, l_resWCNa2[1], 4, l_resWONa2[1], 4, l_resWGNa2[1], 4, l_resWANb2[1], 4, -}; - -static anmTblPrm const l_btpTbl[30] = { - l_resMANa[0], -1, l_resMADa[0], -1, l_resMCNa[0], 7, l_resMONa[0], 7, l_resMANb[0], -1, - l_resMANc[0], 7, l_resMASa[0], 7, l_resMBNa[0], 7, l_resMANa2[0], 7, l_resMADa2[0], 7, - l_resMCNa2[0], 7, l_resMONa2[0], 7, l_resMANb2[0], -1, l_resMANc2[0], 7, l_resMASa2[0], 7, - l_resMBNa2[0], 7, l_resWANa[0], 7, l_resWADa[0], 7, l_resMATa[0], -1, l_resWCNa[0], 7, - l_resWONa[0], 7, l_resWGNa[0], 7, l_resWANb[0], 7, l_resWANa2[0], 7, l_resWADa2[0], 7, - l_resMATa2[0], -1, l_resWCNa2[0], 7, l_resWONa2[0], 7, l_resWGNa2[0], 7, l_resWANb2[0], 7, -}; - -static anmTblPrm const l_btpTWTbl[30] = { - l_resMANa[1], -1, l_resMADa[1], -1, l_resMCNa[1], 7, l_resMONa[1], 7, l_resMANb[1], -1, - l_resMANc[1], 7, l_resMASa[1], 7, l_resMBNa[1], 7, l_resMANa2[1], 7, l_resMADa2[1], -1, - l_resMCNa2[1], 7, l_resMONa2[1], 7, l_resMANb2[1], -1, l_resMANc2[1], 7, l_resMASa2[1], 7, - l_resMBNa2[1], 7, l_resWANa[1], 7, l_resWADa[1], 7, l_resMATa[1], -1, l_resWCNa[1], 7, - l_resWONa[1], 7, l_resWGNa[1], 7, l_resWANb[1], 7, l_resWANa2[1], 7, l_resWADa2[1], 7, - l_resMATa2[1], -1, l_resWCNa2[1], 7, l_resWONa2[1], 7, l_resWGNa2[1], 7, l_resWANb2[1], 7, -}; - -#include "d/actor/d_a_npc_cd2_HIO.inc" - J3DAnmTransform* daNpcCd2_c::getAnmP(int param_1, int param_2) { int a_anmNum = param_1; switch (a_anmNum) { @@ -597,8 +599,6 @@ J3DAnmTransform* daNpcCd2_c::getAnmP(int param_1, int param_2) { return (J3DAnmTransform*)dComIfG_getObjectRes(name, index); } -daNpcCd2_HIO_c l_Cd2_HIO; - int daNpcCd2_c::setAttention(int param_1) { static cXyz a_eyeOfsTbl[30] = { cXyz(0.0f, 10.0f, 0.0f),