diff options
Diffstat (limited to '')
| -rw-r--r-- | src/player.cpp | 19 | ||||
| -rw-r--r-- | src/player.h | 1 | ||||
| -rw-r--r-- | src/shyguy.cpp | 221 | 
3 files changed, 219 insertions, 22 deletions
| diff --git a/src/player.cpp b/src/player.cpp index d5c54aa..58960cc 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -56,4 +56,23 @@ void setNewActivePhysicsRect(dStageActor_c* actor, Vec* scale) {  	actor->aPhysics.addToList();  } +void changeActivePhysicsRect(dStageActor_c* actor, float xc, float yc, float xe, float ye) { +	ActivePhysics::Info info; +	info.xDistToCenter = xc; +	info.yDistToCenter = yc; +	info.xDistToEdge   = xe; +	info.yDistToEdge   = ye; + +	info.category1  = actor->aPhysics.info.category1; +	info.category2  = actor->aPhysics.info.category2; +	info.bitfield1  = actor->aPhysics.info.bitfield1; +	info.bitfield2  = actor->aPhysics.info.bitfield2; +	info.unkShort1C = actor->aPhysics.info.unkShort1C; +	info.callback   = actor->aPhysics.info.callback; + +	//OSReport("Making new Physics Class and adding to the list\n"); +	actor->aPhysics.removeFromList(); +	actor->aPhysics.initWithStruct(actor, &info); +	actor->aPhysics.addToList(); +} diff --git a/src/player.h b/src/player.h index 4e036ae..267729f 100644 --- a/src/player.h +++ b/src/player.h @@ -7,6 +7,7 @@  extern "C" dStageActor_c* GetSpecificPlayerActor(int number);  char NearestPlayer(dStageActor_c* actor);  void setNewActivePhysicsRect(dStageActor_c* actor, Vec* scale); +void changeActivePhysicsRect(dStageActor_c* actor, float xc, float yc, float xe, float ye);  #endif diff --git a/src/shyguy.cpp b/src/shyguy.cpp index c4a50a2..87c7749 100644 --- a/src/shyguy.cpp +++ b/src/shyguy.cpp @@ -29,12 +29,14 @@  //  // Nybble 7: Balloon Colour  //		0 - Red -//		1 - Blue +//		1 - Blue (not working)  //  // Nybble 8: Ballooneer Carries  //		0 - Nothing  //		1 - ???  // +// I_kinoko, I_fireflower, I_propeller_model, I_iceflower, I_star, I_penguin - model names +// anmChr - wait2  class daShyGuy : public dEn_c {  	int onCreate(); @@ -52,12 +54,6 @@ class daShyGuy : public dEn_c {  	m3d::mdl_c balloonModelB;  	m3d::anmChr_c chrAnimation; -	// m3d::anmChr_c animateWalk; -	// m3d::anmChr_c animateJump; -	// m3d::anmChr_c animateSpinJump; -	// m3d::anmChr_c animateIdle; -	// m3d::anmChr_c animateSleep; -	// m3d::anmChr_c animateHover;  	int timer;  	int jumpCounter; @@ -79,6 +75,8 @@ class daShyGuy : public dEn_c {  	DECLARE_STATE(Balloon_H);  	DECLARE_STATE(Balloon_V);  	DECLARE_STATE(Balloon_C); +	DECLARE_STATE(Judo); +	DECLARE_STATE(Spike);  };  daShyGuy *daShyGuy::build() { @@ -100,6 +98,8 @@ CREATE_STATE(daShyGuy, Sleep);  CREATE_STATE(daShyGuy, Balloon_H);  CREATE_STATE(daShyGuy, Balloon_V);  CREATE_STATE(daShyGuy, Balloon_C); +CREATE_STATE(daShyGuy, Judo); +CREATE_STATE(daShyGuy, Spike);  void daShyGuy::bindAnimChr_and_setUpdateRate(const char* name, int unk, float unk2, float rate) { @@ -117,7 +117,6 @@ int daShyGuy::onCreate() {  	int baln = this->settings >> 20 & 0xF;  	if (type == 3) {this->renderBalloon = 1;} -	else if (type == 0) {this->renderBalloon = 1;}  	else if (type == 4) {this->renderBalloon = 1;}  	else if (type == 5) {this->renderBalloon = 1;}  	else {this->renderBalloon = 0;} @@ -164,11 +163,24 @@ int daShyGuy::onCreate() {  	OSReport("Creating ShyGuy's Physics Struct\n");  	ActivePhysics::Info HitMeBaby; -	HitMeBaby.xDistToCenter = 0.0; -	HitMeBaby.yDistToCenter = 12.0; -	HitMeBaby.xDistToEdge = 14.0; -	HitMeBaby.yDistToEdge = 12.0; +	if (type == 8) { +		this->scale = (Vec){40.0, 40.0, 40.0}; + +		HitMeBaby.xDistToCenter = 0.0; +		HitMeBaby.yDistToCenter = 24.0; + +		HitMeBaby.xDistToEdge = 28.0; +		HitMeBaby.yDistToEdge = 24.0; +	} + +	else { +		HitMeBaby.xDistToCenter = 0.0; +		HitMeBaby.yDistToCenter = 12.0; + +		HitMeBaby.xDistToEdge = 14.0; +		HitMeBaby.yDistToEdge = 12.0;		 +	}  	HitMeBaby.category1 = 0x3;  	HitMeBaby.category2 = 0x0; @@ -187,13 +199,14 @@ int daShyGuy::onCreate() {  	this->rot.y = 0xD800; // Y is horizontal axis  	this->rot.z = 0; // Z is ... an axis >.>  	this->direction = 1; // Heading left. -	 +	this->currentLayerID = 1; +  	this->speed.x = 0;  	this->Baseline = this->pos.y;  	if (type == 0) { -		doStateChange(&StateID_Sleep); +		doStateChange(&StateID_Walk);  	}		  	else if (type == 1) {  		doStateChange(&StateID_Sleep); @@ -211,13 +224,13 @@ int daShyGuy::onCreate() {  		doStateChange(&StateID_Balloon_C);  	}		  	else if (type == 6) { -		doStateChange(&StateID_Sleep); +		doStateChange(&StateID_Judo);  	}		  	else if (type == 7) { -		doStateChange(&StateID_Sleep); +		doStateChange(&StateID_Spike);  	}		  	else if (type == 8) { -		doStateChange(&StateID_Sleep); +		doStateChange(&StateID_Walk);  	}		  	OSReport("Going to Execute ShyGuy\n"); @@ -279,24 +292,53 @@ void daShyGuy::updateModelMatrices() {  void daShyGuy::beginState_Walk() {  -	bindAnimChr_and_setUpdateRate("c18_EV_WIN_2_R", 1, 0.0, 1.0); +	bindAnimChr_and_setUpdateRate("c18_EV_WIN_2_R", 1, 0.0, 1.5);  +	this->timer = 0; +	if (this->direction == 1) { this->rot.y = 0xD800; } +	else 					  { this->rot.y = 0x2800; }  }  void daShyGuy::executeState_Walk() {  -	if(this->chrAnimation.isAnimationDone()) -		this->chrAnimation.setCurrentFrame(0.0); +	if (this->direction == 1) { this->pos.x -= 0.5; } +	else 					  { this->pos.x += 0.5; } -	this->pos.x = this->pos.x - 0.4; +	if(this->chrAnimation.isAnimationDone()) +		if (this->timer > 200) { +			doStateChange(&StateID_Turn); +		} +		else { +			this->chrAnimation.setCurrentFrame(0.0); +		} +	this->timer = this->timer + 1;  }  void daShyGuy::endState_Walk() {   }  void daShyGuy::beginState_Turn() {  +	bindAnimChr_and_setUpdateRate("c18_IDLE_R", 1, 0.0, 1.0); +	this->timer = 0;  }  void daShyGuy::executeState_Turn() {  + +	int modifier = sin(this->timer * 3.14 / 30.0) * 0x5000; + +	if (this->direction == 1) { this->rot.y = 0xD800 + modifier; } +	else 					  { this->rot.y = 0x2800 - modifier; } + +	if (this->timer >= 15) {  +		doStateChange(&StateID_Walk); +	} + +	if(this->chrAnimation.isAnimationDone()) { +		this->chrAnimation.setCurrentFrame(0.0); +	} + +	this->timer += 1;  }  void daShyGuy::endState_Turn() {  +	if (this->direction == 1) { this->direction = 0; } +	else 					  { this->direction = 1; }  }  void daShyGuy::beginState_Jump() {  @@ -362,7 +404,7 @@ void daShyGuy::executeState_Jump() {  	// While he's jumping, it's time for gravity.  	else {  -		this->speed.y = this->speed.y - 0.12;  +		this->speed.y = this->speed.y - 0.15;   		if (this->jumpCounter == 3) {  			if(this->chrAnimation.isAnimationDone()) @@ -467,3 +509,138 @@ void daShyGuy::executeState_Balloon_C() {  void daShyGuy::endState_Balloon_C() {   } +void daShyGuy::beginState_Judo() {  +	this->timer = 0; +} +void daShyGuy::executeState_Judo() {  + + +	if (this->timer == 0) { bindAnimChr_and_setUpdateRate("c18_OB_IDLE_R", 1, 0.0, 1.0); } + +	this->timer = this->timer + 1; + +	if (this->timer < 120) { +		// Always face Mario +		u8 facing = dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(this, this->pos); + +		if (facing != this->direction) { +			this->direction = facing; +			if (this->direction == 1) { +				this->rot.y = 0xD800; +			} +			else { +				this->rot.y = 0x2800; +			} +		} + +		if(this->chrAnimation.isAnimationDone()) +			this->chrAnimation.setCurrentFrame(0.0); +	} + +	else if (this->timer == 120) { +		bindAnimChr_and_setUpdateRate("c18_H_CUT_R", 1, 0.0, 1.0); +		 +	} + +	else if (this->timer == 132) { +		PlaySound(this, SE_EMY_CRASHER_PUNCH); + +		if (this->direction == 1) {  +			CreateEffect(&(Vec){this->pos.x - 18.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}, 123);  +		} +		else { +			CreateEffect(&(Vec){this->pos.x + 18.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}, 124);  +		} +		 +		changeActivePhysicsRect(this, 20.0, 12.0, 34.0, 12.0); +	} + +	else { + +		if(this->chrAnimation.isAnimationDone()) { +			if (this->direction == 1) {  +				CreateEffect(&(Vec){this->pos.x - 38.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){0.8, 0.8, 0.8}, 157); +			} +			else { +				CreateEffect(&(Vec){this->pos.x + 38.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){0.8, 0.8, 0.8}, 157); +			} + +			this->timer = 0; +			PlaySound(this, SE_EMY_BIG_PAKKUN_DAMAGE_1); +			changeActivePhysicsRect(this, 0.0, 12.0, 14.0, 12.0); +		} +	} +} +void daShyGuy::endState_Judo() {  +} + +void daShyGuy::beginState_Spike() {  +	this->timer = 0; +} +void daShyGuy::executeState_Spike() { + +	if (this->timer == 0) { bindAnimChr_and_setUpdateRate("c18_OB_IDLE_R", 1, 0.0, 1.0); } + +	this->timer = this->timer + 1; + +	if (this->timer < 120) { +		// Always face Mario +		u8 facing = dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(this, this->pos); + +		if (facing != this->direction) { +			this->direction = facing; +			if (this->direction == 1) { +				this->rot.y = 0xD800; +			} +			else { +				this->rot.y = 0x2800; +			} +		} + +		if(this->chrAnimation.isAnimationDone()) +			this->chrAnimation.setCurrentFrame(0.0); +	} + +	else if (this->timer == 120) { +		bindAnimChr_and_setUpdateRate("c18_H_SHOT_R", 1, 0.0, 1.0); +		 +	} + +	else if (this->timer == 160) { +		PlaySound(this, SE_EMY_KANIBO_THROW); + +		Vec pos; +		pos.x = this->pos.x; +		pos.y = this->pos.y; +		pos.z = this->pos.z; +	 +		if (this->direction == 1) {  +			dStageActor_c *spawned = CreateActor(89, 0x2, pos, 0, 0); +			spawned->scale.x = 0.5; +			spawned->scale.y = 0.5; +			spawned->scale.z = 0.5; + +			spawned->speed.x = -2.0; +			spawned->speed.y = 2.0; +		} +		else { +			dStageActor_c *spawned = CreateActor(89, 0x12, pos, 0, 0); +			spawned->scale.x = 0.5; +			spawned->scale.y = 0.5; +			spawned->scale.z = 0.5; + +			spawned->speed.x = 2.0; +			spawned->speed.y = 2.0; +		} +	} + +	else { + +		if(this->chrAnimation.isAnimationDone()) { +			this->timer = 0; +		} +	} +} +void daShyGuy::endState_Spike() {  +} + | 
