diff options
Diffstat (limited to 'src/bossPodouble.cpp')
-rw-r--r-- | src/bossPodouble.cpp | 204 |
1 files changed, 28 insertions, 176 deletions
diff --git a/src/bossPodouble.cpp b/src/bossPodouble.cpp index 77dae1a..e79f20a 100644 --- a/src/bossPodouble.cpp +++ b/src/bossPodouble.cpp @@ -3,8 +3,7 @@ #include <g3dhax.h> #include <sfx.h> #include <stage.h> -#include "effects.h" -#include "player.h" +#include "boss.h" void poodleCollisionCallback(ActivePhysics *apThis, ActivePhysics *apOther); @@ -14,7 +13,7 @@ void poodleCollisionCallback(ActivePhysics *apThis, ActivePhysics *apOther) { else { dEn_c::collisionCallback(apThis, apOther); } } -class daPodouble : public dEn_c { +class daPodouble : public daBoss { int onCreate(); int onDelete(); int onExecute(); @@ -45,7 +44,7 @@ class daPodouble : public dEn_c { char isInvulnerable; int countdown; - dEn_c *Kameck; + daKameckDemo *Kameck; static daPodouble *build(); @@ -84,21 +83,10 @@ daPodouble *daPodouble::build() { /////////////////////// // Externs and States /////////////////////// - extern "C" void *PlaySound(dStageActor_c *, int soundID); - extern "C" void *PlaySoundAsync(dStageActor_c *, int soundID); - - extern "C" u32 GenerateRandomNumber(int max); - extern "C" dStageActor_c *GetSpecificPlayerActor(int num); extern "C" int SmoothRotation(short* rot, u16 amt, int unk2); extern "C" void* WaterManager; extern "C" u32 CheckforLiquid(void*, Vec, int, int, int, int layer); - extern "C" void *StopBGMMusic(); - extern "C" void *StartBGMMusic(); - - extern "C" void *MakeMarioEnterDemoMode(); - extern "C" void *MakeMarioExitDemoMode(); - extern "C" void *UpdateGameMgr(); CREATE_STATE(daPodouble, Bounce); @@ -114,17 +102,7 @@ daPodouble *daPodouble::build() { // Collision Functions //////////////////////// - void daPodouble::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { - this->dEn_c::playerCollision(apThis, apOther); - this->_vf220(apOther->owner); - - // fix multiple player collisions via megazig - this->isDead = 0; - this->flags_4FC |= (1<<(31-7)); - if(apOther->owner->which_player < 3) { - this->counter_504[apOther->owner->which_player] = 0; - } - } + void daPodouble::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } void daPodouble::yoshiCollision(ActivePhysics *apThis, ActivePhysics *apOther) { this->playerCollision(apThis, apOther); } void daPodouble::collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther) { this->playerCollision(apThis, apOther); } @@ -359,79 +337,27 @@ int daPodouble::onDraw() { this->timer = 0; if (isFire) { return; } - // Stop the BGM Music - StopBGMMusic(); - - // Set the necessary Flags and make Mario enter Demo Mode - dStage32C_c::instance->freezeMarioBossFlag = 1; - WLClass::instance->_4 = 4; - WLClass::instance->_8 = 0; - - MakeMarioEnterDemoMode(); - - // Make sure to use the correct position - Vec pos = (Vec){this->pos.x - 124.0, this->pos.y + 104.0, 3564.0}; - S16Vec rot = (S16Vec){0, 0, 0}; - - // Create And use Kameck - Kameck = (daKameckDemo*)createChild(KAMECK_FOR_CASTLE_DEMO, (dStageActor_c*)this, 0, &pos, &rot, 0); - Kameck->doStateChange(&daKameckDemo::StateID_DemoWait); - + SetupKameck(this, Kameck); this->scale = (Vec){1.0, 1.0, 1.0}; } void daPodouble::executeState_Grow() { - this->timer = this->timer + 1; - - float scaleSpeed, yPosScaling; - - - if ((this->timer > 150) && (this->timer < 230)) { - - scaleSpeed = 0.03125; - yPosScaling = 18; + this->timer += 1; - float modifier; + bool ret; + ret = GrowBoss(this, Kameck, 1.0, 3.5, 18, this->timer); - modifier = 1.0 + ((this->timer - 150) * scaleSpeed); - - this->scale = (Vec){modifier, modifier, modifier}; - this->pos.y = this->pos.y + (yPosScaling/80); - - } - if (this->timer > 420) { + if (ret) { PlaySound(this, SE_EMY_CS_MOVE_W8_BUBBLE_APP); doStateChange(&StateID_Bounce); } - - if (isFire) { return; } - if (this->timer == 130) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt); } - if (this->timer == 150) { PlaySound(this, SE_BOSS_IGGY_WANWAN_TO_L); } - if (this->timer == 400) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt2); } - if (this->timer == 360) { - Vec tempPos = (Vec){this->pos.x - 40.0, this->pos.y + 120.0, 3564.0}; - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 175); // 400 & 401 // 564 // 583 // 754 // 958 - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 400); // 400 & 401 // 564 // 583 // 754 // 958 - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 401); // 400 & 401 // 564 // 583 // 754 // 958 - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 564); // 400 & 401 // 564 // 583 // 754 // 958 - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 583); // 400 & 401 // 564 // 583 // 754 // 958 - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 754); // 400 & 401 // 564 // 583 // 754 // 958 - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 958); // 400 & 401 // 564 // 583 // 754 // 958 - } } void daPodouble::endState_Grow() { this->Baseline = this->pos.y; if (isFire) { return; } - // Clean up the flags and Kameck - dStage32C_c::instance->freezeMarioBossFlag = 0; - WLClass::instance->_8 = 1; - - MakeMarioExitDemoMode(); - StartBGMMusic(); - - Kameck->Delete(1); + CleanupKameck(this, Kameck); } @@ -474,11 +400,11 @@ int daPodouble::onDraw() { OSReport("Liquid type %d", liquid); if (liquid == 1) { - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){3.0, 3.0, 3.0}, 415); + SpawnEffect("Wm_mr_magmawave", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){3.0, 3.0, 3.0}); PlaySoundAsync(this, SE_EMY_BUBBLE_SPLASH); } if (liquid == 0) { - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){3.0, 3.0, 3.0}, 422); + SpawnEffect("Wm_mr_waterwave_in", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){3.0, 3.0, 3.0}); PlaySoundAsync(this, SE_OBJ_CMN_SPLASH); } @@ -534,10 +460,10 @@ int daPodouble::onDraw() { if (this->isFire == 0) { PlaySoundAsync(this, SE_OBJ_PNGN_ICE_THAW); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 243); } + SpawnEffect("Wm_ob_iceevaporate", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}); } else { PlaySoundAsync(this, SE_EMY_FIRE_SNAKE_EXTINCT); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){3.0, 3.0, 3.0}, 252); } + SpawnEffect("Wm_en_firesnk_icehitsmk_b", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){3.0, 3.0, 3.0}); } } void daPodouble::executeState_Damage() { @@ -580,82 +506,28 @@ int daPodouble::onDraw() { daPodouble *other = (daPodouble*)FindActorByType(SHIP_WINDOW, (Actor*)this); if (other != 0) { other->doStateChange(&StateID_SyncDie); } - WLClass::instance->_4 = 5; - WLClass::instance->_8 = 0; - - this->removeMyActivePhysics(); + OutroSetup(this); this->timer = 0; - StopBGMMusic(); - - dStage32C_c::instance->freezeMarioBossFlag = 1; } void daPodouble::executeState_Outro() { if (this->dying == 1) { - if (this->timer > 180) { - ExitStage(WORLD_MAP, 0, BEAT_LEVEL, MARIO_WIPE); - } - - if (this->timer == 60) { - - UpdateGameMgr(); - - if (GetSpecificPlayerActor(0) != 0) { - PlaySound(this, SE_VOC_MA_CLEAR_BOSS); - // Send PlBase into DemoGoal State here, kthxbai - } - - if (GetSpecificPlayerActor(1) != 0) { - PlaySound(this, SE_VOC_LU_CLEAR_BOSS); - // Send PlBase into DemoGoal State here, kthxbai - } - - if (GetSpecificPlayerActor(2) != 0) { - PlaySound(this, SE_VOC_KO_CLEAR_BOSS); - // Send PlBase into DemoGoal State here, kthxbai - } - - if (GetSpecificPlayerActor(3) != 0) { - PlaySound(this, SE_VOC_KO2_CLEAR_BOSS); - // Send PlBase into DemoGoal State here, kthxbai - } - } + if (this->timer > 180) { ExitStage(WORLD_MAP, 0, BEAT_LEVEL, MARIO_WIPE); } + if (this->timer == 60) { PlayerVictoryCries(this); } this->timer += 1; return; } - if (this->scale.x > 0.1) { - - PlaySound(this, SE_EMY_BUBBLE_EXTINCT); - - // Adjust this to equal the scale of your boss / 80. - this->scale.x -= 0.04375; - this->scale.y -= 0.04375; - this->scale.z -= 0.04375; + bool ret; + ret = ShrinkBoss(this, &this->pos, 3.5, this->timer); - if (this->timer == 30) { - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 756); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 801); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 957); - this->timer = 0; - } - - this->timer += 1; - } - else { - this->scale.x = 0.0; - this->scale.y = 0.0; - this->scale.z = 0.0; - - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 588); - this->dying = 1; - this->timer = 0; + if (ret) { BossExplode(this, &this->pos); } + else { PlaySound(this, SE_EMY_BUBBLE_EXTINCT); } + + this->timer += 1; - PlaySound(this, STRM_BGM_SHIRO_BOSS_CLEAR); - MakeMarioEnterDemoMode(); - } } void daPodouble::endState_Outro() { } @@ -673,32 +545,12 @@ int daPodouble::onDraw() { if (this->dying == 1) { return; } - if (this->scale.x > 0.1) { + bool ret; + ret = ShrinkBoss(this, &this->pos, 3.5, this->timer); - PlaySound(this, SE_EMY_BUBBLE_EXTINCT); - - // Adjust this to equal the scale of your boss / 80. - this->scale.x -= 0.04375; - this->scale.y -= 0.04375; - this->scale.z -= 0.04375; - - if (this->timer == 30) { - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 756); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 801); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 957); - this->timer = 0; - } + if (ret) { BossExplode(this, &this->pos); } + else { PlaySound(this, SE_EMY_BUBBLE_EXTINCT); } + this->timer += 1; - this->timer += 1; - } - else { - this->scale.x = 0.0; - this->scale.y = 0.0; - this->scale.z = 0.0; - - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 588); - this->dying = 1; - this->timer = 0; - } } void daPodouble::endState_SyncDie() { } |