From 4161c5d1c46436e3b942d707da1b40317e87180e Mon Sep 17 00:00:00 2001 From: Treeki Date: Sun, 10 Jul 2011 22:06:08 +0200 Subject: custom blocks, states and static initialisers. fuck yeah --- include/game.h | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 75 insertions(+), 8 deletions(-) (limited to 'include/game.h') diff --git a/include/game.h b/include/game.h index 4927345..ff2e2de 100755 --- a/include/game.h +++ b/include/game.h @@ -1,11 +1,14 @@ #ifndef __KAMEK_GAME_H #define __KAMEK_GAME_H +//#define offsetof(type, member) ((__std(size_t)) &(((type *) 0)->member)) + #include #include #include #include #include +#define offsetof(type, member) ((u32) &(((type *) 0)->member)) extern "C" { @@ -974,6 +977,66 @@ public: }; +#include + +class dActorState_c; +class dActorMultiState_c; + + +class AcStateMgrBase { +public: + virtual ~AcStateMgrBase(); + + u32 cls1, cls2, cls3; + dActorMultiState_c *owner; + u32 unkZero; + + StateMgr manager; + + // All these are passed straight through to the manager + virtual void _vfC(); + virtual void _vf10(); + virtual void _vf14(); + virtual void _vf18(); + virtual void _vf1C(); + virtual void _vf20(); + virtual void _vf24(); + virtual void _vf28(); + virtual void _vf2C(); +}; + +class AcStateMgr : public AcStateMgrBase { +public: + ~AcStateMgr(); +}; + +class MultiStateMgrBase { +public: + virtual ~MultiStateMgrBase(); + + AcStateMgr s1, s2; + AcStateMgr *ptrToStateMgr; + + virtual void _vfC(); // calls vfC on ptrToStateMgr + virtual void execute(); // calls vf10 on ptrToStateMgr + virtual void _vf14(); // if (isSecondStateMgr()) { disableSecond(); } else { ptrToStateMgr->_vf14(); } + virtual void setState(StateBase *state); // calls vf18 on ptrToStateMgr + virtual void _vf1C(); // calls vf1C on ptrToStateMgr + virtual void _vf20(); // calls vf20 on ptrToStateMgr + virtual void _vf24(); // calls vf24 on ptrToStateMgr + virtual StateBase *getCurrentState(); // calls vf28 on ptrToStateMgr + virtual void _vf2C(); // calls vf2C on ptrToStateMgr + virtual void enableSecond(); // sets ptrToStateMgr to s2, calls vf18 on it + virtual void disableSecond(); // if (isSecondStateMgr()) { ptrToStateMgr->vf14(); ptrToStateMgr = &s1; } + virtual bool isSecondStateMgr(); + virtual void _vf3C(); // calls vf28 on s1 +}; + +class MultiStateMgr : public MultiStateMgrBase { +public: + // what the fuck does this do + ~MultiStateMgr(); +}; struct LinkListEntry { @@ -1169,7 +1232,7 @@ public: u8 direction; u8 currentZoneID; u8 _34A, _34B; - u32 _350, _354, _358, _35C, _360; + u32 _34C, _350, _354, _358, _35C, _360; u8 _364, _365, _366, _367; u32 _368; u8 _36C, _36D; @@ -1248,13 +1311,9 @@ class dActorMultiState_c : public dStageActor_c { public: ~dActorMultiState_c(); - // fuck all of this. I'll just use a data blob here - // because I don't feel like reimplementing the State stuff in C++ - // right now. - - u8 stateClassesAndStuff[0x410 - 0x394]; + MultiStateMgr acState; - virtual void doStateChange(void *state); // might return bool? overridden by dEn_c + virtual void doStateChange(StateBase *state); // might return bool? overridden by dEn_c virtual void _vfD8(); // nullsub ?? virtual void _vfDC(); // nullsub ?? virtual void _vfE0(); // nullsub ?? @@ -1306,7 +1365,7 @@ public: void _vfCC(Vec2 *p); void _vfD0(Vec2 *p); - void doStateChange(void *state); // might return bool, dunno + void doStateChange(StateBase *state); // might return bool, dunno // Now here's where the fun starts. @@ -1450,6 +1509,7 @@ public: // Regular methods void blockInit(float initialY); void blockUpdate(); + u8 blockResult(); virtual void calledWhenUpMoveBegins(); virtual void calledWhenDownMoveBegins(); @@ -1490,6 +1550,13 @@ public: static void *OPhysicsCallback2; static void *OPhysicsCallback3; + static State StateID_UpMove; + static State StateID_DownMove; + static State StateID_DownMoveEnd; + static State StateID_UpMove_Diff; + static State StateID_DownMove_Diff; + static State StateID_DownMove_DiffEnd; + ~daEnBlockMain_c(); }; -- cgit v1.2.3