diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/shyguy.cpp | 20 | 
1 files changed, 18 insertions, 2 deletions
diff --git a/src/shyguy.cpp b/src/shyguy.cpp index ef807f0..34de1d9 100644 --- a/src/shyguy.cpp +++ b/src/shyguy.cpp @@ -65,6 +65,7 @@ class daShyGuy : public dEn_c {  	u32 cmgr_returnValue;  	bool isBouncing;  	float balloonSize; +	char backFire;  	char spikeTurn;  	dStageActor_c *spikeA;  	dStageActor_c *spikeB; @@ -292,7 +293,19 @@ daShyGuy *daShyGuy::build() {  		dStateBase_c *stateVar;  		if (this->type < 6) {  // Regular Shy Guys Except Jumper -			stateVar = &StateID_FireKnockBack; +			char FirePos; + +			if (this->pos.x < apOther->owner->pos.x) { FirePos = 0; } // Fire is to the right +			else 									 { FirePos = 1; } // Fire is to the left +			 + +			if (this->direction != FirePos) {	// Fire is from behind +				this->backFire = 1;				 +				stateVar = &StateID_FireKnockBack; +			} +			else { +				stateVar = &StateID_FireKnockBack; +			}  		}  		else if (this->type > 8) { // Giants  			return; @@ -1328,7 +1341,10 @@ void daShyGuy::updateModelMatrices() {  ///////////////  	void daShyGuy::beginState_FireKnockBack() {  		bindAnimChr_and_setUpdateRate("c18_C_BLOCK_BREAK_R", 1, 0.0, 1.0);  -		this->direction ^= 1; + +		if (this->backFire == 0) { this->direction ^= 1; } +		else 					 { this->backFire = 0; } +		  		this->speed.x = (this->direction) ? -this->XSpeed / 6.0f : this->XSpeed / 6.0f;  	}  	void daShyGuy::executeState_FireKnockBack() {   | 
