summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeki <treeki@gmail.com>2011-09-17 03:38:41 +0200
committerTreeki <treeki@gmail.com>2011-09-17 03:38:41 +0200
commite0ff484a06fd3f068e29eff4a125f61fbfd174c4 (patch)
treea7df31ed5108e4107ebb2aaa63a1f401a9cf86a4
parente86081a64a2f2fc3e3d0d4974572702b158dfd64 (diff)
downloadkamek-classic_controller.tar.gz
kamek-classic_controller.zip
merged level-select updates to game.h and State stuffclassic_controller
-rwxr-xr-xinclude/game.h72
-rw-r--r--kamek_ntsc.x17
-rw-r--r--kamek_ntsc2.x17
-rw-r--r--kamek_pal.x17
-rw-r--r--kamek_pal2.x17
-rw-r--r--src/eventblock.cpp23
6 files changed, 148 insertions, 15 deletions
diff --git a/include/game.h b/include/game.h
index 554e17a..7382c34 100755
--- a/include/game.h
+++ b/include/game.h
@@ -1020,6 +1020,25 @@ public:
u8 layer;
u8 someFlagByte;
u8 isLinkedIntoList;
+
+ void clear();
+ void addToList();
+ void removeFromList();
+
+ void initWithStruct(dActor_c *owner, Info *info);
+ void initWithStruct(dActor_c *owner, Info *info, u8 clMode);
+
+ u16 checkResult1(u16 param);
+ u16 checkResult3(u16 param);
+
+ float top();
+ float bottom();
+ float yCenter();
+ float right();
+ float left();
+ float xCenter();
+
+ // Plus more stuff that isn't needed in the public API, I'm pretty sure.
};
@@ -1085,6 +1104,23 @@ public:
};
+#define DECLARE_STATE(NAME) \
+ static State StateID_##NAME; \
+ void beginState_##NAME(); \
+ void executeState_##NAME(); \
+ void endState_##NAME();
+
+#define CREATE_STATE(CLASS, NAME) \
+ CLASS::State CLASS::StateID_##NAME \
+ (#CLASS "::StateID_" #NAME, \
+ &CLASS::beginState_##NAME, \
+ &CLASS::executeState_##NAME, \
+ &CLASS::endState_##NAME);
+
+#define USING_STATES(CLASS) \
+ typedef State<CLASS> State;
+
+
struct LinkListEntry {
LinkListEntry *prev;
LinkListEntry *next;
@@ -1347,6 +1383,29 @@ public:
};
+class dAc_Py_c : public dStageActor_c {
+public:
+ u8 data[0x1164 - 0x394];
+ ActivePhysics bPhysics;
+ ActivePhysics cPhysics;
+ ActivePhysics dPhysics;
+ ActivePhysics ePhysics;
+
+ dAc_Py_c();
+
+ int beforeCreate();
+ int afterCreate(int);
+ int beforeDelete();
+ int afterDelete(int);
+ int beforeExecute();
+ int afterExecute(int);
+ int beforeDraw();
+ int afterDraw(int);
+
+ ~dAc_Py_c();
+};
+
+
/* TODO
class dActorState_c : public dStageActor_c {
public:
@@ -1534,6 +1593,9 @@ public:
virtual void _vf27C(); // nullsub, params unknown
~dEn_c();
+
+
+ static void collisionCallback(ActivePhysics::Info *one, ActivePhysics::Info *two);
};
@@ -2070,5 +2132,15 @@ struct BGRender {
u16 tileNumberWithinBlock, areaID;
};
+// A HACK
+extern void *DVDClass;
+extern "C" u8 *GetRes(void *Something, const char *arcname, const char *filename);
+
+// Use THESE instead, until I write something up for dRes or dRes_c or whatever the fuck it's called
+
+inline u8 *getResource(const char *arcName, const char *fileName) {
+ return GetRes((void*)(((u8*)DVDClass)+4), arcName, fileName);
+}
+
#endif
diff --git a/kamek_ntsc.x b/kamek_ntsc.x
index ab702c3..4a7a35d 100644
--- a/kamek_ntsc.x
+++ b/kamek_ntsc.x
@@ -19,6 +19,17 @@ SECTIONS {
GenerateRandomNumber = 0x800B2EE0;
OneofManySoundPlayers = 0x800CE8C0;
BombExplodeState = 0x80B12A68;
+ NoFreezie = 0x800A0B08;
+
+/* Mr Sun Related */
+
+ BubbleModel = 0x809D0CA0;
+ BubbleDraw = 0x809D0830;
+ ActivePhysics_InitWithStruct = 0x8008C3E0;
+ ActivePhysics_AddToList = 0x8008C330;
+
+
+
_savefpr_14 = 0x802DCCA8;
_savefpr_15 = 0x802DCCAC;
@@ -165,6 +176,7 @@ SECTIONS {
StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0x80352B74;
__ct__5dEn_cFv = 0x80094E80;
+ __dt__5dEn_cFv = 0x80095130;
afterCreate__5dEn_cFi = 0x800951D0;
afterExecute__5dEn_cFi = 0x80095480;
kill__5dEn_cFv = 0x80097F70;
@@ -174,6 +186,7 @@ SECTIONS {
_vfCC__5dEn_cFP7Point2d = 0x800973F0;
_vfD0__5dEn_cFP7Point2d = 0x800974F0;
doStateChange__5dEn_cFP9StateBase = 0x800A7DF0;
+ collisionCallback__5dEn_cFPQ213ActivePhysics4InfoPQ213ActivePhysics4Info = 0x80095950;
preSpriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095CE0;
prePlayerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095D30;
preYoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095F50;
@@ -375,6 +388,10 @@ SECTIONS {
instance__10dFlagMgr_c = 0x8042A078;
+ addToList__13ActivePhysicsFv = 0x8008C330;
+ initWithStruct__13ActivePhysicsFP8dActor_cPQ213ActivePhysics4Info = 0x8008C3E0;
+
+
__ct__7PhysicsFv = 0x8007F7A0;
setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0x8007FB10;
addToList__7PhysicsFv = 0x8007F900;
diff --git a/kamek_ntsc2.x b/kamek_ntsc2.x
index f803db3..d59089a 100644
--- a/kamek_ntsc2.x
+++ b/kamek_ntsc2.x
@@ -19,6 +19,17 @@ SECTIONS {
GenerateRandomNumber = 0x800B2EE0;
OneofManySoundPlayers = 0x800CE8C0;
BombExplodeState = 0x80B12A88;
+ NoFreezie = 0x800A0B08;
+
+/* Mr Sun Related */
+
+ BubbleModel = 0x809D0CC0;
+ BubbleDraw = 0x809D0850;
+ ActivePhysics_InitWithStruct = 0x8008C3E0;
+ ActivePhysics_AddToList = 0x8008C330;
+
+
+
_savefpr_14 = 0x802DCCA8;
_savefpr_15 = 0x802DCCAC;
@@ -165,6 +176,7 @@ SECTIONS {
StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0x80352B74;
__ct__5dEn_cFv = 0x80094E80;
+ __dt__5dEn_cFv = 0x80095130;
afterCreate__5dEn_cFi = 0x800951D0;
afterExecute__5dEn_cFi = 0x80095480;
kill__5dEn_cFv = 0x80097F70;
@@ -174,6 +186,7 @@ SECTIONS {
_vfCC__5dEn_cFP7Point2d = 0x800973F0;
_vfD0__5dEn_cFP7Point2d = 0x800974F0;
doStateChange__5dEn_cFP9StateBase = 0x800A7DF0;
+ collisionCallback__5dEn_cFPQ213ActivePhysics4InfoPQ213ActivePhysics4Info = 0x80095950;
preSpriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095CE0;
prePlayerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095D30;
preYoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095F50;
@@ -375,6 +388,10 @@ SECTIONS {
instance__10dFlagMgr_c = 0x8042A078;
+ addToList__13ActivePhysicsFv = 0x8008C330;
+ initWithStruct__13ActivePhysicsFP8dActor_cPQ213ActivePhysics4Info = 0x8008C3E0;
+
+
__ct__7PhysicsFv = 0x8007F7A0;
setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0x8007FB10;
addToList__7PhysicsFv = 0x8007F900;
diff --git a/kamek_pal.x b/kamek_pal.x
index 81be80c..b910118 100644
--- a/kamek_pal.x
+++ b/kamek_pal.x
@@ -19,6 +19,17 @@ SECTIONS {
GenerateRandomNumber = 0x800B2EE0;
OneofManySoundPlayers = 0x800CE9B0;
BombExplodeState = 0x80B12A48;
+ NoFreezie = 0x800A0B08;
+
+/* Mr Sun Related */
+
+ BubbleModel = 0x809D0C80;
+ BubbleDraw = 0x809D0810;
+ ActivePhysics_InitWithStruct = 0x8008C3E0;
+ ActivePhysics_AddToList = 0x8008C330;
+
+
+
_savefpr_14 = 0x802DCF98;
_savefpr_15 = 0x802DCF9C;
@@ -165,6 +176,7 @@ SECTIONS {
StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0x80352E74;
__ct__5dEn_cFv = 0x80094E80;
+ __dt__5dEn_cFv = 0x80095130;
afterCreate__5dEn_cFi = 0x800951D0;
afterExecute__5dEn_cFi = 0x80095480;
kill__5dEn_cFv = 0x80097F70;
@@ -174,6 +186,7 @@ SECTIONS {
_vfCC__5dEn_cFP7Point2d = 0x800973F0;
_vfD0__5dEn_cFP7Point2d = 0x800974F0;
doStateChange__5dEn_cFP9StateBase = 0x800A7DF0;
+ collisionCallback__5dEn_cFPQ213ActivePhysics4InfoPQ213ActivePhysics4Info = 0x80095950;
preSpriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095CE0;
prePlayerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095D30;
preYoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095F50;
@@ -375,6 +388,10 @@ SECTIONS {
instance__10dFlagMgr_c = 0x8042A358;
+ addToList__13ActivePhysicsFv = 0x8008C330;
+ initWithStruct__13ActivePhysicsFP8dActor_cPQ213ActivePhysics4Info = 0x8008C3E0;
+
+
__ct__7PhysicsFv = 0x8007F7A0;
setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0x8007FB10;
addToList__7PhysicsFv = 0x8007F900;
diff --git a/kamek_pal2.x b/kamek_pal2.x
index f9f8a9a..87ce78f 100644
--- a/kamek_pal2.x
+++ b/kamek_pal2.x
@@ -19,6 +19,17 @@ SECTIONS {
GenerateRandomNumber = 0xDEADBEEF;
OneofManySoundPlayers = 0xDEADBEEF;
BombExplodeState = 0xDEADBEEF;
+ NoFreezie = 0xDEADBEEF;
+
+/* Mr Sun Related */
+
+ BubbleModel = 0xDEADBEEF;
+ BubbleDraw = 0xDEADBEEF;
+ ActivePhysics_InitWithStruct = 0xDEADBEEF;
+ ActivePhysics_AddToList = 0xDEADBEEF;
+
+
+
_savefpr_14 = 0xDEADBEEF;
_savefpr_15 = 0xDEADBEEF;
@@ -165,6 +176,7 @@ SECTIONS {
StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0xDEADBEEF;
__ct__5dEn_cFv = 0xDEADBEEF;
+ __dt__5dEn_cFv = 0xDEADBEEF;
afterCreate__5dEn_cFi = 0xDEADBEEF;
afterExecute__5dEn_cFi = 0xDEADBEEF;
kill__5dEn_cFv = 0xDEADBEEF;
@@ -174,6 +186,7 @@ SECTIONS {
_vfCC__5dEn_cFP7Point2d = 0xDEADBEEF;
_vfD0__5dEn_cFP7Point2d = 0xDEADBEEF;
doStateChange__5dEn_cFP9StateBase = 0xDEADBEEF;
+ collisionCallback__5dEn_cFPQ213ActivePhysics4InfoPQ213ActivePhysics4Info = 0xDEADBEEF;
preSpriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF;
prePlayerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF;
preYoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF;
@@ -375,6 +388,10 @@ SECTIONS {
instance__10dFlagMgr_c = 0xDEADBEEF;
+ addToList__13ActivePhysicsFv = 0xDEADBEEF;
+ initWithStruct__13ActivePhysicsFP8dActor_cPQ213ActivePhysics4Info = 0xDEADBEEF;
+
+
__ct__7PhysicsFv = 0xDEADBEEF;
setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0xDEADBEEF;
addToList__7PhysicsFv = 0xDEADBEEF;
diff --git a/src/eventblock.cpp b/src/eventblock.cpp
index f285da8..6f353b7 100644
--- a/src/eventblock.cpp
+++ b/src/eventblock.cpp
@@ -10,8 +10,6 @@ public:
SWAP_EVENTS = 1
};
- typedef State<daEnEventBlock_c> State;
-
TileRenderer tile;
Physics::Info physicsInfo;
@@ -28,21 +26,16 @@ public:
void calledWhenUpMoveExecutes();
void calledWhenDownMoveExecutes();
- void wait_Begin();
- void wait_Execute();
- void wait_End();
-
void blockWasHit(bool isDown);
- static State StateID_Wait;
+ USING_STATES(daEnEventBlock_c);
+ DECLARE_STATE(Wait);
+
static daEnEventBlock_c *build();
};
-daEnEventBlock_c::State daEnEventBlock_c::StateID_Wait(
- "daEnEventBlock_c::StateID_Wait",
- &daEnEventBlock_c::wait_Begin,
- &daEnEventBlock_c::wait_Execute,
- &daEnEventBlock_c::wait_End);
+
+CREATE_STATE(daEnEventBlock_c, Wait);
int daEnEventBlock_c::onCreate() {
@@ -184,13 +177,13 @@ void daEnEventBlock_c::calledWhenDownMoveExecutes() {
-void daEnEventBlock_c::wait_Begin() {
+void daEnEventBlock_c::beginState_Wait() {
}
-void daEnEventBlock_c::wait_End() {
+void daEnEventBlock_c::endState_Wait() {
}
-void daEnEventBlock_c::wait_Execute() {
+void daEnEventBlock_c::executeState_Wait() {
int result = blockResult();
if (result == 0)