diff options
| author | Colin Noga <Tempus@chronometry.ca> | 2012-03-22 18:43:21 -0500 | 
|---|---|---|
| committer | Colin Noga <Tempus@chronometry.ca> | 2012-03-22 18:43:21 -0500 | 
| commit | 0ae957fcb9d1cb69602bf937c5111a184c3fbc79 (patch) | |
| tree | ecac5435b445fd3ce7fa8f45b90920a85eb9ae95 | |
| parent | c6becbea298ed12b34f8ad6365e1db0a2870e3e7 (diff) | |
| download | kamek-0ae957fcb9d1cb69602bf937c5111a184c3fbc79.tar.gz kamek-0ae957fcb9d1cb69602bf937c5111a184c3fbc79.zip | |
simple updates to challenge collectible and the clown car
Diffstat (limited to '')
| -rw-r--r-- | bossCaptainBowser.yaml | 18 | ||||
| -rw-r--r-- | src/bossCaptainBowser.cpp | 7 | ||||
| -rw-r--r-- | src/bossPlayerClown.cpp | 171 | ||||
| -rw-r--r-- | src/challengeStar.cpp | 17 | 
4 files changed, 162 insertions, 51 deletions
| diff --git a/bossCaptainBowser.yaml b/bossCaptainBowser.yaml index 2bd930d..b227ff4 100644 --- a/bossCaptainBowser.yaml +++ b/bossCaptainBowser.yaml @@ -14,9 +14,9 @@ hooks:    - name: UpdateaptainBoswerSpriteInfo      type: patch -    addr_pal: 0x8030C4AC +    addr_pal: 0x8030C48C      #      [010] (  16,  16) (   0, 0   32:  32)   64?   64?    0?    0? | [0:No Flags] -    data: '0002 0000' +    data: '00000010 00000010  00000000 00000000 00000200 00000200  0000 0000 0200 0200 0002 0000'      # 0x8030A340 + sprite num * 0x28 == offset (+24 in this case) @@ -96,3 +96,17 @@ hooks:      type: add_func_pointer      src_addr_pal: 0x8095FF14      target_func: 'CConDraw(dEn_c *)' + + + + + + + +  # Clown Shot - Replaces WM_PAKKUN +  - name: ClownShotBuild +    type: add_func_pointer +    src_addr_pal: 0x80988934 +    target_func: 'daClownShot::build(void)' + + diff --git a/src/bossCaptainBowser.cpp b/src/bossCaptainBowser.cpp index 729c1cf..ba78977 100644 --- a/src/bossCaptainBowser.cpp +++ b/src/bossCaptainBowser.cpp @@ -86,7 +86,7 @@ daCaptainBowser *daCaptainBowser::build() {  }  void ShipPhysicsCallback(daCaptainBowser *self, dStageActor_c *other) { -	if (other->name == EN_CANNON_BULLET) { +	if (other->name == 657) {  		OSReport("CANNON COLLISION");  		if (self->isInvulnerable) {  			return; @@ -122,7 +122,7 @@ void ShipPhysicsCallback(daCaptainBowser *self, dStageActor_c *other) {  	void daCaptainBowser::addScoreWhenHit(void *other) { };  	void daCaptainBowser::spriteCollision(ActivePhysics *apThis, ActivePhysics *apOther) { -		if (apOther->owner->name == EN_CANNON_BULLET) { //time to get hurt +		if (apOther->owner->name == 657) { //time to get hurt  			if (this->isInvulnerable) {  				return;  			} @@ -319,9 +319,6 @@ int daCaptainBowser::onDraw() {  		if (num == 0) {  			doStateChange(&StateID_Fire); 		  		} -		else if (num == 1) { -			doStateChange(&StateID_Roar); 		 -		}  		else{  			doStateChange(&StateID_Throw); 		  		} diff --git a/src/bossPlayerClown.cpp b/src/bossPlayerClown.cpp index 15aa2dd..2db1d90 100644 --- a/src/bossPlayerClown.cpp +++ b/src/bossPlayerClown.cpp @@ -5,10 +5,10 @@  #include "boss.h" -#define cPlayerOccupying (*(dStageActor_c**)(((u32)(clown)) + 0x738 )) +// #define cPlayerOccupying (*(dStageActor_c**)(((u32)(clown)) + 0x738 ))  #define cAllocator ((mHeapAllocator_c*)(((u32)(clown)) + 0xFD0 ))  #define cModel ((m3d::mdl_c*)( ((u32)(clown)) + 0xFEC )) - +#define cTimer (**(u32**)((u32)(clown) + sizeof(m3d::mdl_c) + 0xFEC ))  extern "C" int PClownCarExecute(dEn_c *clown);  extern "C" void PClownCarAfterCreate(dEn_c *clown, u32); @@ -18,12 +18,21 @@ extern "C" void PClownCarMove(dEn_c *clown);  int CConDraw(dEn_c *clown) {  	// setup cannon model -	clown->matrix.translation(clown->pos.x, clown->pos.y, clown->pos.z); -	short newrot = 0x4000; -	clown->matrix.applyRotationYXZ(&clown->rot.x, &newrot, &clown->rot.z); +	clown->matrix.translation(clown->pos.x, clown->pos.y + 8.0, clown->pos.z-100.0); +	short newrotz = -0x2000; +	short newroty = ((clown->rot.y * 0x4000) / 0x800) - 0x4000; +	short newrotx; +	if (clown->rot.x < 0x8000) { +		newrotx = -clown->rot.x; +	} +	else { +		newrotx = clown->rot.x; +	} +	// OSReport("Angle?: %x, %x", clown->rot.y, newroty); +	clown->matrix.applyRotationYXZ(&clown->rot.x, &newroty, &newrotz);  	cModel->setDrawMatrix(clown->matrix); -	cModel->setScale(&clown->scale); +	cModel->setScale(&(Vec){0.25, 0.5, 0.25});  	cModel->calcWorld(false);  	cModel->scheduleForDrawing(); @@ -43,26 +52,17 @@ void CCafterCreate(dEn_c *clown, u32 param) {  	clown->scale.y *= 1.25;  	clown->scale.z *= 1.25; -	OSReport("AfterCreate");  	// setup the model  	nw4r::g3d::ResFile resFile; -	OSReport("defined"); -  	cAllocator->link(-1, GameHeaps[0], 0, 0x20); -	OSReport("allocated");  	resFile.data = getResource("koopaJr_clown_ply", "g3d/cannon.brres"); -	OSReport("resource");  	nw4r::g3d::ResMdl mdl = resFile.GetResMdl("Cannon"); -	OSReport("model");  	cModel->setup(mdl, cAllocator, 0x224, 1, 0); -	OSReport("setup");  	SetupTextures_MapObj(cModel, 0); -	OSReport("lightmaps");  	cAllocator->unlink(); -	OSReport("unlinked");  	// Original AfterCreate  	PClownCarAfterCreate(clown, param); @@ -70,39 +70,38 @@ void CCafterCreate(dEn_c *clown, u32 param) {  void CConExecuteMove(dEn_c *clown) { -	u8 player = cPlayerOccupying->which_player; +	// u8 player = cPlayerOccupying->which_player;  	// OSReport("Angle = %x, %x, %x", (GetSpecificPlayerActor(player))->rot.y, (GetSpecificPlayerActor(player))->rot.x, (GetSpecificPlayerActor(player))->rot.z);  	// OSReport("Clown = %x, %x, %x", (clown)->rot.y, (clown)->rot.x, (clown)->rot.z); -	RemoconMngClass* Remo = GetRemoconMng(); -  	Vec tempPos; -	u32 buttonPushed = Remocon_GetPressed(Remo->controllers[player]); +	u32 buttonPushed = Remocon_GetPressed(GetRemoconMng()->controllers[0]);  	if (buttonPushed & 0x0100) { -		if (clown->direction == 0) { // Going right -			tempPos = (Vec){clown->pos.x + 32.0, clown->pos.y + 32.0, 3564.0}; -			dStageActor_c *spawned = CreateActor(347, clown->direction, tempPos, 0, 0); -			spawned->speed.x = 5.0; -		} -		else { -			tempPos = (Vec){clown->pos.x - 32.0, clown->pos.y + 32.0, 3564.0}; -			dStageActor_c *spawned = CreateActor(347, clown->direction, tempPos, 0, 0); -			spawned->speed.x = -5.0; -		} - -		SpawnEffect("Wm_en_killervanish", 0, &tempPos, &(S16Vec){0,0,0}, &(Vec){0.25, 0.25, 0.25}); -		PlaySoundAsync(clown, SE_OBJ_HOUDAI_S_SHOT); - +		// if (cTimer > 90) { +			if (clown->direction == 0) { // Going right +				tempPos = (Vec){clown->pos.x + 32.0, clown->pos.y + 32.0, 3564.0}; +				dStageActor_c *spawned = CreateActor(657, 0, tempPos, 0, 0); +				spawned->speed.x = 5.0; +			} +			else { +				tempPos = (Vec){clown->pos.x - 32.0, clown->pos.y + 32.0, 3564.0}; +				dStageActor_c *spawned = CreateActor(657, 0, tempPos, 0, 0); +				spawned->speed.x = -5.0; +			} + +			SpawnEffect("Wm_en_killervanish", 0, &tempPos, &(S16Vec){0,0,0}, &(Vec){0.1, 0.1, 0.1}); +			PlaySoundAsync(clown, SE_OBJ_HOUDAI_S_SHOT); + +		// cTimer = 0; +		// }  	} +	// cTimer++; +  	// run normal move  	PClownCarMove(clown); - -	// check for wiimote button presses - -	// spawn effect and attack if there are any  } @@ -111,7 +110,6 @@ extern "C" mHeapAllocator_c *__ct__16mHeapAllocator_cFv(mHeapAllocator_c *al);  extern "C" dEn_c *__ct__20daJrClownForPlayer_cFv(dEn_c *clown);  dEn_c *newClownCtor(dEn_c *clown) { -	OSReport("ctor");  	__ct__20daJrClownForPlayer_cFv(clown);  	__ct__16mHeapAllocator_cFv(cAllocator);  	__ct__Q23m3d5mdl_cFv(cModel); @@ -128,3 +126,100 @@ void newClownDtor(dEn_c *clown, u32 willDelete) {  	__dt__16mHeapAllocator_cFv(cAllocator, 0xFFFFFFFF);  	__dt__20daJrClownForPlayer_cFv(clown, willDelete);  } + + + + + + + + +// Below is the projectile used byt eh clown car - Replaces WM_PAKKUN + +class daClownShot : public dEn_c { +	int onCreate(); +	int onExecute(); +	int onDraw(); + +	mHeapAllocator_c allocator; +	nw4r::g3d::ResFile resFile; +	m3d::mdl_c bodyModel; + +	mEf::es2 effect; +	static daClownShot *build(); + +	void playerCollision(ActivePhysics *apThis, ActivePhysics *apOther); +}; + +void daClownShot::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { } + +daClownShot *daClownShot::build() { +	void *buffer = AllocFromGameHeap1(sizeof(daClownShot)); +	return new(buffer) daClownShot; +} + + +int daClownShot::onCreate() { +	allocator.link(-1, GameHeaps[0], 0, 0x20); +	this->resFile.data = getResource("koopaJr_clown_ply", "g3d/houdai_ball.brres"); +	nw4r::g3d::ResMdl mdl = this->resFile.GetResMdl("houdai_ball"); +	bodyModel.setup(mdl, &allocator, 0x224, 1, 0); +	allocator.unlink(); + +	ActivePhysics::Info GreatBalls; +	 +	GreatBalls.xDistToCenter = 0.0; +	GreatBalls.yDistToCenter = 0.0; +	GreatBalls.xDistToEdge = 8.0; +	GreatBalls.yDistToEdge = 7.0; +	 +	GreatBalls.category1 = 0x3; +	GreatBalls.category2 = 0x0; +	GreatBalls.bitfield1 = 0x6F; +	GreatBalls.bitfield2 = 0xffbafffe; +	GreatBalls.unkShort1C = 0; +	GreatBalls.callback = &dEn_c::collisionCallback; + +	this->aPhysics.initWithStruct(this, &GreatBalls); +	this->aPhysics.addToList(); + +	this->speed.y = 4.0; +	this->y_speed_inc = -0.1875; +	 +	this->onExecute(); +	return true; +} + +int daClownShot::onDraw() { +	matrix.translation(this->pos.x, this->pos.y, this->pos.z); + +	matrix.applyRotationYXZ(&this->rot.x, &this->rot.y, &this->rot.z); + +	bodyModel.setDrawMatrix(matrix); +	bodyModel.setScale(&scale); +	bodyModel.calcWorld(true); + +	bodyModel.scheduleForDrawing(); +	return true; +} + + +int daClownShot::onExecute() { +	HandleXSpeed(); +	HandleYSpeed(); +	doSpriteMovement(); + +	effect.spawn("Wm_en_killersmoke", 0, &(Vec){pos.x, pos.y, pos.z}, &(S16Vec){0,0,0}, &(Vec){0.7, 0.7, 0.7}); + +	float rect[] = {0.0, 0.0, 8.0, 8.0}; +	int ret = this->outOfZone(this->pos, (float*)&rect, this->currentZoneID); +	if(ret) { +		this->Delete(1); +	} + +	return true; +} + + + + diff --git a/src/challengeStar.cpp b/src/challengeStar.cpp index 1f9c91a..dda35cc 100644 --- a/src/challengeStar.cpp +++ b/src/challengeStar.cpp @@ -8,6 +8,7 @@ extern "C" void *PlaySound(dEn_c *, int soundID);  extern "C" void *PlaySoundAsync(dStageActor_c *, int soundID);  extern "C" bool SpawnEffect(const char*, int, Vec*, S16Vec*, Vec*); +extern "C" dStageActor_c* GetSpecificPlayerActor(int number);  extern int GlobalStarsCollected; @@ -47,11 +48,10 @@ void dChallengeStar::playerCollision(ActivePhysics *apThis, ActivePhysics *apOth  	PlaySoundAsync(this, SE_OBJ_BROOM_KEY_SHOW);  	SpawnEffect("Wm_ob_greencoinkira_a", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){0.8, 0.8, 0.8}); -	GlobalStarsCollected++; -	if (GlobalStarsCollected == 50) { -		GlobalStarsCollected = 0; +	GlobalStarsCollected--; +	if (GlobalStarsCollected == 0) {  		EventTable->events |= this->eventFlag; -		OSReport("50 collected, triggered Event!\n"); +		OSReport("All stars spawned collected, triggered Event!\n");  	}  	OSReport("%d Stars Collected\n", GlobalStarsCollected); @@ -73,9 +73,14 @@ dChallengeStar *dChallengeStar::build() {  int dChallengeStar::onCreate() { +	char die = this->settings & 0xF; +	if (GetSpecificPlayerActor(die) == 0) { this->Delete(1); } + +	GlobalStarsCollected++; +  	allocator.link(-1, GameHeaps[0], 0, 0x20); -	nw4r::g3d::ResFile rf(getResource("I_star", "g3d/I_star.brres")); +	nw4r::g3d::ResFile rf(getResource("I_star", "g3d/silver_star.brres"));  	bodyModel.setup(rf.GetResMdl("I_star"), &allocator, 0x224, 1, 0);  	SetupTextures_Map(&bodyModel, 0); @@ -134,7 +139,7 @@ void dChallengeStar::updateModelMatrices() {  int dChallengeStar::onExecute() {  	updateModelMatrices(); -	effect.spawn("Wm_ob_keyget02_kira", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); +	effect.spawn("Wm_ob_keyget02_kira", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){0.8, 0.8, 0.8});  	this->rot.y += 0x200;  	return true;  } | 
