diff --git a/configure.py b/configure.py index 7c5423956..022f43035 100644 --- a/configure.py +++ b/configure.py @@ -419,7 +419,7 @@ config.libs = [ Object(NonMatching, "d/d_salvage.cpp"), Object(Matching, "d/d_snap.cpp"), Object(Matching, "d/d_point_wind.cpp"), - Object(NonMatching, "d/actor/d_a_agb.cpp", extra_cflags=['-pragma "nosyminline on"']), + Object(Matching, "d/actor/d_a_agb.cpp", extra_cflags=['-pragma "nosyminline on"']), Object(Matching, "d/actor/d_a_arrow.cpp", extra_cflags=["-sym off"]), Object(Matching, "d/actor/d_a_bg.cpp"), Object(NonMatching, "d/actor/d_a_bomb.cpp", extra_cflags=['-pragma "nosyminline on"']), diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index b8a99bd9a..0d72a4164 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -473,11 +473,11 @@ public: virtual MtxP getLeftHandMatrix() = 0; virtual MtxP getRightHandMatrix() = 0; virtual f32 getGroundY() = 0; - virtual s32 getTactMusic() const { return -1; } + virtual s32 getTactMusic() const;// { return -1; } virtual int getTactTimerCancel() const { return 0; } virtual BOOL checkPlayerGuard() const { return FALSE; } virtual fopAc_ac_c* getGrabMissActor() { return NULL; } - virtual u32 checkPlayerFly() const { return 0; } + virtual u32 checkPlayerFly() const;// { return 0; } virtual BOOL checkFrontRoll() const { return FALSE; } virtual BOOL checkBottleSwing() const { return FALSE; } virtual BOOL checkCutCharge() const { return FALSE; } diff --git a/src/d/actor/d_a_arrow.cpp b/src/d/actor/d_a_arrow.cpp index a48f53c08..e457af610 100644 --- a/src/d/actor/d_a_arrow.cpp +++ b/src/d/actor/d_a_arrow.cpp @@ -3,6 +3,13 @@ // Translation Unit: d_a_arrow.cpp // +// Fakematch: This is supposed to be a weak function defined in d_a_player.h that wind up at the end of the +// d_a_agb TU. But weak function ordering is currently broken, so to get d_a_agb to match, we define it +// here (at the start of the *next* TU after d_a_agb) so that it gets placed into the correct spot in +// the DOL, even though this is an ugly hack and they're now in the wrong translation unit instead. +#include "d/actor/d_a_player.h" +u32 daPy_py_c::checkPlayerFly() const { return 0; } + #include "d/actor/d_a_arrow.h" #include "m_Do/m_Do_mtx.h" #include "d/d_com_inf_game.h"