diff options
| -rw-r--r-- | src/bossSamurshai.cpp | 48 | 
1 files changed, 43 insertions, 5 deletions
| diff --git a/src/bossSamurshai.cpp b/src/bossSamurshai.cpp index 3a1ecc4..b608916 100644 --- a/src/bossSamurshai.cpp +++ b/src/bossSamurshai.cpp @@ -69,6 +69,8 @@ class daSamurshai : public daBoss {  	void addScoreWhenHit(void *other);  	int randomPlayer(); +	bool isNearWall(); +  	USING_STATES(daSamurshai);  	DECLARE_STATE(Intro); @@ -420,7 +422,7 @@ void daSamurshai::updateModelMatrices() {  		WLClass::instance->_4 = 4;  		WLClass::instance->_8 = 0; -		BossGoalForAllPlayers(); +		MakeMarioEnterDemoMode();  		// Make sure to use the correct position  		Vec KamekPos = (Vec){pos.x - 124.0, pos.y + 104.0, 3564.0}; @@ -535,8 +537,9 @@ void daSamurshai::updateModelMatrices() {  			amountCharged += abs(speed.x);  			// should we stop charging? -			if (amountCharged > 480.0f) { -				doStateChange(&StateID_ChargeSlash); +			if (amountCharged > 480.0f && !isNearWall()) { +				speed.x = (this->direction) ? -this->XSpeed : this->XSpeed; +				doStateChange(&StateID_Uppercut);  			}  		} @@ -558,7 +561,8 @@ void daSamurshai::updateModelMatrices() {  			// if (xDistance < 32.0) { doStateChange(&StateID_SpinAttack); }  			// Condition for Uppercut -			if ((xDistance > 48.0) && (xDistance < 64.0)) { doStateChange(&StateID_Uppercut); } +			if ((xDistance > 48.0) && (xDistance < 64.0) && !isNearWall()) +				doStateChange(&StateID_Uppercut);  		}  		bool ret = calculateTileCollisions();  @@ -918,6 +922,7 @@ void daSamurshai::updateModelMatrices() {  	}  	void daSamurshai::executeState_Outro() { +		calculateTileCollisions();  		if (this->dying == 1) {  @@ -937,7 +942,7 @@ void daSamurshai::updateModelMatrices() {  			SpawnEffect("Wm_mr_wirehit_hit", 0, &(Vec){pos.x + 8.0, pos.y, pos.z + 500.0}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0});  			MapSoundPlayer(SoundRelatedClass, STRM_BGM_SHIRO_BOSS_CLEAR, 1); -			MakeMarioEnterDemoMode(); +			BossGoalForAllPlayers();  			this->dying = 1;  			this->timer = 0;	 @@ -947,3 +952,36 @@ void daSamurshai::updateModelMatrices() {  	}  	void daSamurshai::endState_Outro() { } +bool daSamurshai::isNearWall() { +	// back up our current settings +	VEC3 savePos = pos; +	VEC3 saveSpeed = speed; +	int saveDirection = direction; + +	float checkLeft = (direction == 0) ? 8.0f : 104.0f; +	float checkRight = (direction == 0) ? 104.0f : 8.0f; + +	bool result = false; + +	speed.x = -0.1f; +	speed.y = 0.0f; +	pos.x = savePos.x - checkLeft; +	direction = 1; // left +	if (collMgr.calculateAdjacentCollision()) +		result = true; + +	speed.x = 0.1f; +	speed.y = 0.0f; +	pos.x = savePos.x + checkRight; +	direction = 0; // right +	if (collMgr.calculateAdjacentCollision()) +		result = true; + +	// restore our settings +	pos = savePos; +	speed = saveSpeed; +	direction = saveDirection; + +	return result; +} + | 
