diff options
| author | Treeki <treeki@gmail.com> | 2011-09-17 03:38:41 +0200 | 
|---|---|---|
| committer | Treeki <treeki@gmail.com> | 2011-09-17 03:38:41 +0200 | 
| commit | e0ff484a06fd3f068e29eff4a125f61fbfd174c4 (patch) | |
| tree | a7df31ed5108e4107ebb2aaa63a1f401a9cf86a4 | |
| parent | e86081a64a2f2fc3e3d0d4974572702b158dfd64 (diff) | |
| download | kamek-classic_controller.tar.gz kamek-classic_controller.zip  | |
merged level-select updates to game.h and State stuffclassic_controller
Diffstat (limited to '')
| -rwxr-xr-x | include/game.h | 72 | ||||
| -rw-r--r-- | kamek_ntsc.x | 17 | ||||
| -rw-r--r-- | kamek_ntsc2.x | 17 | ||||
| -rw-r--r-- | kamek_pal.x | 17 | ||||
| -rw-r--r-- | kamek_pal2.x | 17 | ||||
| -rw-r--r-- | src/eventblock.cpp | 23 | 
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)  | 
