diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bossSamurshai.cpp | 60 |
1 files changed, 48 insertions, 12 deletions
diff --git a/src/bossSamurshai.cpp b/src/bossSamurshai.cpp index d765293..3a1ecc4 100644 --- a/src/bossSamurshai.cpp +++ b/src/bossSamurshai.cpp @@ -37,7 +37,9 @@ class daSamurshai : public daBoss { dStageActor_c *chosenOne; bool topHurts; bool slowDown; - bool isBouncing; + bool isBouncing; + bool walkStateIsCharging; + float amountCharged; ActivePhysics Chuckles; ActivePhysics Knuckles; @@ -111,7 +113,16 @@ daSamurshai *daSamurshai::build() { void daSamurshai::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { - char hitType = usedForDeterminingStatePress_or_playerCollision(this, apThis, apOther, 2); + char hitType = 0; + // this is shit code + dStateBase_c *whatState = acState.getCurrentState(); + if (whatState == &StateID_Damage) { + // nothing + } else if (whatState == &StateID_Walk && walkStateIsCharging) { + // also nothing + } else { + hitType = usedForDeterminingStatePress_or_playerCollision(this, apThis, apOther, 2); + } if (hitType == 2) { // Mini jump @@ -432,7 +443,7 @@ void daSamurshai::updateModelMatrices() { this->timer += 1; OSReport("Timer: %d", timer); - if (timer == 230) { bindAnimChr_and_setUpdateRate("c18_H_CUT_R", 1, 0.0, 1.0); } + if (timer == 230) { bindAnimChr_and_setUpdateRate("c18_INTRO", 1, 0.0, 1.0); } if ((timer > 220) && (timer < 240)) { pos.x += (224.0 / 20.0); @@ -462,6 +473,7 @@ void daSamurshai::updateModelMatrices() { if (timer == 500) { MapSoundPlayer(SoundRelatedClass, SE_BOSS_WENDY_RING_BOUND, 1); + walkStateIsCharging = false; doStateChange(&StateID_Walk); } } @@ -494,10 +506,12 @@ void daSamurshai::updateModelMatrices() { Chuckles.removeFromList(); Knuckles.removeFromList(); - bindAnimChr_and_setUpdateRate("c18_RUNNING", 1, 0.0, 0.5); + bindAnimChr_and_setUpdateRate(walkStateIsCharging ? "c18_CHARGE" : "c18_RUNNING", 1, 0.0, 0.5); chosenOne = GetSpecificPlayerActor(this->randomPlayer()); speed.x = (this->direction) ? -this->XSpeed : this->XSpeed; + if (walkStateIsCharging) + speed.x *= 1.7f; this->max_speed.y = -4.0; this->speed.y = -4.0; @@ -512,16 +526,25 @@ void daSamurshai::updateModelMatrices() { float yDistance = pos.y - chosenOne->pos.y; // OSReport("Distance: %f, %f", xDistance, yDistance); - if ((xDistance > 64.0) && (direction == 0)) { doStateChange(&StateID_Turn); } - if ((xDistance < -64.0) && (direction == 1)) { doStateChange(&StateID_Turn); } + if (!walkStateIsCharging && (xDistance > 64.0) && (direction == 0)) { doStateChange(&StateID_Turn); } + if (!walkStateIsCharging && (xDistance < -64.0) && (direction == 1)) { doStateChange(&StateID_Turn); } if (xDistance < 0.0) { xDistance = -xDistance; } + if (walkStateIsCharging) { + amountCharged += abs(speed.x); + + // should we stop charging? + if (amountCharged > 480.0f) { + doStateChange(&StateID_ChargeSlash); + } + } + // Condition for Chop - if (xDistance < 32.0) { doStateChange(&StateID_Chop); } + if (!walkStateIsCharging && xDistance < 32.0) { doStateChange(&StateID_Chop); } // Condition For Charge Slash - if (isBigBoss) { + if (!walkStateIsCharging && isBigBoss) { if ((xDistance < 96.0) && (xDistance > 64.0)) { int charge = MakeRandomNumber(100); if (charge > 95) { doStateChange(&StateID_ChargeSlash); } @@ -529,7 +552,7 @@ void daSamurshai::updateModelMatrices() { } // Aerial Attacks! - if (yDistance < -24.0) { + if (!walkStateIsCharging && yDistance < -24.0) { // Condition For Spin Attack // if (xDistance < 32.0) { doStateChange(&StateID_SpinAttack); } @@ -615,6 +638,7 @@ void daSamurshai::updateModelMatrices() { if(this->chrAnimation.isAnimationDone()) { timer += 1; if (timer > 45) { + walkStateIsCharging = false; doStateChange(&StateID_Walk); } } @@ -633,7 +657,11 @@ void daSamurshai::updateModelMatrices() { void daSamurshai::executeState_ChargeSlash() { // End if the animation is finally over - if ((chrAnimation.isAnimationDone()) && (slowDown) ) { doStateChange(&StateID_Walk); return; } + if ((chrAnimation.isAnimationDone()) && (slowDown) ) { + walkStateIsCharging = false; + doStateChange(&StateID_Walk); + return; + } // What to do if he hits a wall bool ret = calculateTileCollisions(); @@ -715,6 +743,7 @@ void daSamurshai::updateModelMatrices() { if ((slowDown) && (this->chrAnimation.isAnimationDone())) { timer++; if (timer > 45) { + walkStateIsCharging = false; doStateChange(&StateID_Walk); } } @@ -809,7 +838,10 @@ void daSamurshai::updateModelMatrices() { else { Knuckles.removeFromList(); } } - if ((this->chrAnimation.isAnimationDone()) && (speed.y == 0.0)) { doStateChange(&StateID_Walk); } + if ((this->chrAnimation.isAnimationDone()) && (speed.y == 0.0)) { + walkStateIsCharging = false; + doStateChange(&StateID_Walk); + } bool ret = calculateTileCollisions(); @@ -848,7 +880,11 @@ void daSamurshai::updateModelMatrices() { if (this->chrAnimation.isAnimationDone()) { if (timer == 0) { bindAnimChr_and_setUpdateRate("c18_L_DMG_F_3_R", 1, 0.0, 1.0); timer = 1; } else if (timer == 1) { bindAnimChr_and_setUpdateRate("c18_L_DMG_F_4_R", 1, 0.0, 1.0); timer = 2; } - else if (timer == 2) { doStateChange(&StateID_Walk); } + else if (timer == 2) { + walkStateIsCharging = true; + amountCharged = 0.0f; + doStateChange(&StateID_Walk); + } } } void daSamurshai::endState_Damage() { |