Fix (more) weak function ordering

This commit is contained in:
HeartPiece 2022-11-25 15:04:42 +11:00 committed by EpochFlame
parent 7519fcbbe4
commit 0609c08344
7 changed files with 81 additions and 82 deletions

View File

@ -29,11 +29,10 @@ struct Container : public GenericContainer {
return get(index);
}
virtual void* getNext(void*) = 0; // _14
virtual void* getStart() = 0; // _18
virtual void* getEnd() = 0; // _1C
virtual void* getStart() = 0; // _18
virtual void* getNext(void*) = 0; // _14
virtual T* get(void*) = 0; // _20
// Gets the object at the given slot index (or null if not occupied)
// (actually constrained to taking an int argument, instead of void*).
virtual T* getAt(int index) // _24 (weak)

View File

@ -37,27 +37,17 @@ struct BaseItem : public Creature, public SysShape::MotionListener {
BaseItem(int);
// vtable 1 (Creature)
virtual Vector3f getPosition(); // _08 (weak)
virtual void getBoundingSphere(Sys::Sphere& sphere) { sphere = m_boundingSphere; } // _10 (weak)
virtual void constructor(); // _2C
virtual void doAnimation(); // _3C (weak)
virtual void doEntry(); // _40
virtual void doSimulation(f32); // _4C
virtual f32 getFaceDir(); // _64 (weak)
virtual void setVelocity(Vector3f& velocity) // _60 (weak)
virtual Vector3f getPosition(); // _08 (weak)
virtual void constructor(); // _2C
virtual void doAnimation(); // _3C (weak)
virtual void doEntry(); // _40
virtual void doSimulation(f32); // _4C
virtual f32 getFaceDir(); // _64 (weak)
virtual void setVelocity(Vector3f& velocity) // _60 (weak)
{
m_velocity = velocity;
}
virtual Vector3f getVelocity() { return m_velocity; } // _6C (weak)
virtual void onSetPosition(Vector3f& position) // _70 (weak)
{
m_position = position;
onSetPosition();
}
virtual void updateTrMatrix(); // _78
virtual void bounceCallback(Sys::Triangle* tri) { } // _E8 (weak)
virtual void collisionCallback(CollEvent& event) { } // _EC (weak)
virtual void platCallback(PlatEvent& event) { } // _F0 (weak)
virtual JAInter::Object* getJAIObject(); // _F4
virtual PSM::Creature* getPSCreature(); // _F8
virtual Vector3f* getSound_PosPtr() { return &m_position; } // _100 (weak)
@ -65,40 +55,50 @@ struct BaseItem : public Creature, public SysShape::MotionListener {
virtual void movieStartDemoAnimation(SysShape::AnimInfo* info); // _11C
virtual void movieSetAnimationLastFrame(); // _120
virtual void movieSetTranslation(Vector3f& dest, f32 faceDir); // _124
virtual void getVelocityAt(Vector3f& a, Vector3f& b) // _184 (weak)
virtual bool stimulate(Interaction& data); // _1A4
virtual char* getCreatureName(); // _1A8 (weak)
virtual s32 getCreatureID() { return -1; } // _1AC (weak)
// vtable 2 (MotionListener + self)
virtual void initDependency() { } // _1BC (weak)
virtual void startSound(u32); // _1C0
virtual void makeTrMatrix(); // _1C4
virtual void doAI(); // _1C8 (weak)
virtual void move(f32); // _1CC
virtual void changeMaterial(); // _1D0 (weak)
virtual void do_updateLOD(); // _1D4
virtual void do_setLODParm(AILODParm&) { } // _1D8 (weak)
virtual f32 getMapCollisionRadius() { return m_boundingSphere.m_radius; } // _1DC (weak)
virtual bool interactAttack(InteractAttack&) { return false; } // _1E0 (weak)
virtual bool interactBreakBridge(InteractBreakBridge&) { return false; } // _1E4 (weak)
virtual bool interactEat(InteractEat&) { return false; } // _1E8 (weak)
virtual bool interactFlockAttack(InteractFlockAttack&) { return false; } // _1EC (weak)
virtual bool interactAbsorb(InteractAbsorb&) { return false; } // _1F0 (weak)
virtual bool interactFue(InteractFue&) { return false; } // _1F4 (weak)
virtual bool interactFarmKarero(InteractFarmKarero&) { return false; } // _1F8 (weak)
virtual bool interactFarmHaero(InteractFarmHaero&) { return false; } // _1FC (weak)
virtual bool interactGotKey(InteractGotKey&) { return false; } // _200 (weak)
virtual bool getVectorField(Sys::Sphere&, Vector3f&) { return true; } // _204 (weak)
virtual f32 getWorkDistance(Sys::Sphere&) { return 128000.0f; } // _208 (weak)
virtual void do_doAnimation(); // _20C (weak)
virtual void bounceCallback(Sys::Triangle* tri) { } // _E8 (weak)
virtual void collisionCallback(CollEvent& event) { } // _EC (weak)
virtual void platCallback(PlatEvent& event) { } // _F0 (weak)
virtual void updateBoundSphere() { } // _210 (weak)
virtual void getBoundingSphere(Sys::Sphere& sphere) { sphere = m_boundingSphere; } // _10 (weak)
virtual void update(); // _214
virtual void entryShape(); // _218
virtual void onSetPosition(Vector3f& position) // _70 (weak)
{
m_position = position;
onSetPosition();
}
virtual void onSetPosition() { } // _21C (weak)
virtual Vector3f getVelocity() { return m_velocity; } // _6C (weak)
virtual void getVelocityAt(Vector3f& a, Vector3f& b) // _184 (weak)
{
b = Vector3f(0.0f);
}
virtual bool stimulate(Interaction& data); // _1A4
virtual char* getCreatureName(); // _1A8 (weak)
virtual s32 getCreatureID() { return -1; } // _1AC (weak)
// vtable 2 (MotionListener + self)
virtual void initDependency() { } // _1BC (weak)
virtual void startSound(u32); // _1C0
virtual void makeTrMatrix(); // _1C4
virtual void doAI(); // _1C8 (weak)
virtual void move(f32); // _1CC
virtual void changeMaterial(); // _1D0 (weak)
virtual void do_updateLOD(); // _1D4
virtual void do_setLODParm(AILODParm&) { } // _1D8 (weak)
virtual f32 getMapCollisionRadius() { return m_boundingSphere.m_radius; } // _1DC (weak)
virtual bool interactAttack(InteractAttack&) { return false; } // _1E0 (weak)
virtual bool interactBreakBridge(InteractBreakBridge&) { return false; } // _1E4 (weak)
virtual bool interactEat(InteractEat&) { return false; } // _1E8 (weak)
virtual bool interactFlockAttack(InteractFlockAttack&) { return false; } // _1EC (weak)
virtual bool interactAbsorb(InteractAbsorb&) { return false; } // _1F0 (weak)
virtual bool interactFue(InteractFue&) { return false; } // _1F4 (weak)
virtual bool interactFarmKarero(InteractFarmKarero&) { return false; } // _1F8 (weak)
virtual bool interactFarmHaero(InteractFarmHaero&) { return false; } // _1FC (weak)
virtual bool interactGotKey(InteractGotKey&) { return false; } // _200 (weak)
virtual bool getVectorField(Sys::Sphere&, Vector3f&) { return true; } // _204 (weak)
virtual f32 getWorkDistance(Sys::Sphere&) { return 128000.0f; } // _208 (weak)
virtual void do_doAnimation(); // _20C (weak)
virtual void updateBoundSphere() { } // _210 (weak)
virtual void update(); // _214
virtual void entryShape(); // _218
virtual void onSetPosition() { } // _21C (weak)
void updateCollTree();

View File

@ -185,14 +185,6 @@ namespace ItemOnyon {
struct Mgr : public BaseItemMgr, public Container<Onyon> {
Mgr();
virtual ~Mgr(); // _A0
virtual void initDependency(); // _38
virtual void setupSoundViewerAndBas(); // _44
virtual BaseItem* generatorBirth(Vector3f&, Vector3f&, GenItemParm*); // _5C
virtual void generatorWrite(Stream&, GenItemParm*); // _60
virtual void generatorRead(Stream&, GenItemParm*, u32); // _64
virtual J3DModelData* generatorGetShape(GenItemParm*); // _6C
virtual GenItemParm* generatorNewItemParm(); // _70
virtual u32 generatorGetID() { return 'onyn'; } // _58 (weak)
virtual u32 generatorLocalVersion() { return '0001'; } // _68 (weak)
virtual void doAnimation() { m_nodeObjectMgr.doAnimation(); } // _08 (weak)
@ -201,10 +193,18 @@ struct Mgr : public BaseItemMgr, public Container<Onyon> {
virtual void doViewCalc() { m_nodeObjectMgr.doViewCalc(); } // _14 (weak)
virtual void doSimulation(f32 constraint) { m_nodeObjectMgr.doSimulation(constraint); } // _18 (weak)
virtual void doDirectDraw(Graphics& gfx) { m_nodeObjectMgr.doDirectDraw(gfx); } // _1C (weak)
virtual void* getEnd() { return m_nodeObjectMgr.getEnd(); } // _B0 (weak)
virtual void* getStart() { return m_nodeObjectMgr.getStart(); } // _AC (weak)
virtual void* getNext(void* index) { return m_nodeObjectMgr.getNext(index); } // _A8 (weak)
virtual ~Mgr(); // _A0
virtual void initDependency(); // _38
virtual void setupSoundViewerAndBas(); // _44
virtual BaseItem* generatorBirth(Vector3f&, Vector3f&, GenItemParm*); // _5C
virtual void generatorWrite(Stream&, GenItemParm*); // _60
virtual void generatorRead(Stream&, GenItemParm*, u32); // _64
virtual J3DModelData* generatorGetShape(GenItemParm*); // _6C
virtual GenItemParm* generatorNewItemParm(); // _70
virtual Onyon* get(void* index) { return static_cast<Onyon*>(m_nodeObjectMgr.get(index)); } // _A4 (weak)
virtual void* getNext(void* index) { return m_nodeObjectMgr.getNext(index); } // _A8 (weak)
virtual void* getStart() { return m_nodeObjectMgr.getStart(); } // _AC (weak)
virtual void* getEnd() { return m_nodeObjectMgr.getEnd(); } // _B0 (weak)
Onyon* birth(int, int);
Onyon* getOnyon(int);

View File

@ -32,12 +32,12 @@ struct _BaseItemMgrParent2 {
struct BaseItemMgr : public GenericObjectMgr, virtual public _BaseItemMgrParent2 {
BaseItemMgr(int);
virtual void doAnimation(); // _08 (weak)
virtual void doEntry(); // _0C (weak)
virtual void doSetView(int viewportNumber); // _10 (weak)
virtual void doViewCalc(); // _14 (weak)
virtual void doSimulation(float rate); // _18 (weak)
virtual void doDirectDraw(Graphics& gfx); // _1C (weak)
virtual void doAnimation() { } // _08 (weak)
virtual void doEntry() { } // _0C (weak)
virtual void doSetView(int viewportNumber) { } // _10 (weak)
virtual void doViewCalc() { } // _14 (weak)
virtual void doSimulation(f32 rate) { } // _18 (weak)
virtual void doDirectDraw(Graphics& gfx) { } // _1C (weak)
virtual void loadResources(); // _24
virtual void initDependency() = 0; // _38
virtual void killAll() { } // _3C (weak)
@ -49,9 +49,9 @@ struct BaseItemMgr : public GenericObjectMgr, virtual public _BaseItemMgrParent2
virtual void onUpdateUseList(GenItemParm*, int) { } // _54 (weak)
virtual u32 generatorGetID() = 0; // _58
virtual BaseItem* generatorBirth(Vector3f&, Vector3f&, GenItemParm*) = 0; // _5C
virtual void generatorWrite(Stream&, GenItemParm*); // _60 (weak)
virtual void generatorRead(Stream&, GenItemParm*, u32); // _64 (weak)
virtual u32 generatorLocalVersion(); // _68 (weak)
virtual void generatorWrite(Stream&, GenItemParm*) { } // _60 (weak)
virtual void generatorRead(Stream&, GenItemParm*, u32) { } // _64 (weak)
virtual u32 generatorLocalVersion() { return '0000'; } // _68 (weak)
virtual J3DModelData* generatorGetShape(GenItemParm*); // _6C
virtual GenItemParm* generatorNewItemParm(); // _70

View File

@ -85,12 +85,16 @@ struct TObjectNode : public CNode {
template <typename T>
struct NodeObjectMgr : public ObjectMgr<T> {
inline NodeObjectMgr()
: ObjectMgr<T>()
, m_node()
: m_node()
{
}
// first VTBL:
// virtual ~NodeObjectMgr() { } // _08
virtual T* get(void* node) // _20
{
return ((TObjectNode<T>*)node)->m_contents;
}
virtual void* getNext(void* node) // _14
{
return ((TObjectNode<T>*)node)->m_next;
@ -103,10 +107,7 @@ struct NodeObjectMgr : public ObjectMgr<T> {
{
return nullptr;
}
virtual T* get(void* node) // _20
{
return ((TObjectNode<T>*)node)->m_contents;
}
// second VTBL:
virtual void resetMgr() // _20
{

View File

@ -14,11 +14,10 @@ struct TForever : public TSync {
// m_effectID = effectID;
}
virtual void doExecuteEmitterOperation(JPABaseEmitter*) { } // _38 (weak)
virtual ~TForever() { } // _48 (weak, thunk at _1C)
// _00 = VTBL
// _00-_0E = TSync
virtual void doExecuteEmitterOperation(JPABaseEmitter*) { } // _38 (weak)
// _00 = VTBL
// _00-_0E = TSync
};
struct TForever2 : public TSyncGroup2<TForever> {

View File

@ -35,7 +35,7 @@ struct TPodOpenA : public TForever {
{
}
virtual ~TPodOpenA() {}; // _48 (weak)
// virtual ~TPodOpenA() {}; // _48 (weak)
// _00 = VTBL
// _00-_10 = TForever