#include "boss.h" void DamagePlayer(dEn_c *actor, ActivePhysics *apThis, ActivePhysics *apOther) { actor->dEn_c::playerCollision(apThis, apOther); actor->_vf220(apOther->owner); // fix multiple player collisions via megazig actor->isDead = 0; actor->flags_4FC |= (1<<(31-7)); if(apOther->owner->which_player < 4) { actor->counter_504[apOther->owner->which_player] = 0; } } void SetupKameck(daBoss *actor, daKameckDemo *Kameck) { // 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){actor->pos.x - 124.0, actor->pos.y + 104.0, 3564.0}; S16Vec rot = (S16Vec){0, 0, 0}; // Create And use Kameck Kameck = (daKameckDemo*)actor->createChild(KAMECK_FOR_CASTLE_DEMO, (dStageActor_c*)actor, 0, &pos, &rot, 0); Kameck->doStateChange(&daKameckDemo::StateID_DemoWait); } void CleanupKameck(daBoss *actor, daKameckDemo *Kameck) { // Clean up the flags and Kameck dStage32C_c::instance->freezeMarioBossFlag = 0; WLClass::instance->_8 = 1; MakeMarioExitDemoMode(); StartBGMMusic(); Kameck->Delete(1); } bool GrowBoss(daBoss *actor, daKameckDemo *Kameck, float initialScale, float endScale, float yPosModifier, int timer) { if (timer == 130) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt); } if (timer == 400) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt2); } float scaleSpeed, yPosScaling; if (timer == 150) { PlaySound(actor, SE_BOSS_IGGY_WANWAN_TO_L); } if ((timer > 150) && (timer < 230)) { scaleSpeed = (endScale -initialScale) / 80.0; float modifier; modifier = initialScale + ((timer - 150) * scaleSpeed); actor->scale = (Vec){modifier, modifier, modifier}; actor->pos.y = actor->pos.y + (yPosModifier/80.0); } if (timer == 360) { Vec tempPos = (Vec){actor->pos.x - 40.0, actor->pos.y + 120.0, 3564.0}; SpawnEffect("Wm_ob_greencoinkira", 0, &tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); SpawnEffect("Wm_mr_yoshiicehit_a", 0, &tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); SpawnEffect("Wm_mr_yoshiicehit_b", 0, &tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); SpawnEffect("Wm_ob_redringget", 0, &tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); SpawnEffect("Wm_ob_keyget01", 0, &tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); SpawnEffect("Wm_ob_greencoinkira_a", 0, &tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); SpawnEffect("Wm_ob_keyget01_c", 0, &tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); } if (timer > 420) { return true; } return false; } void OutroSetup(daBoss *actor) { actor->removeMyActivePhysics(); StopBGMMusic(); WLClass::instance->_4 = 5; WLClass::instance->_8 = 0; dStage32C_c::instance->freezeMarioBossFlag = 1; } bool ShrinkBoss(daBoss *actor, Vec *pos, float scale, int timer) { PlaySound(actor, SE_BOSS_CMN_DAMAGE_LAST); // Adjust actor to equal the scale of your boss / 80. actor->scale.x -= scale / 80.0; actor->scale.y -= scale / 80.0; actor->scale.z -= scale / 80.0; actor->pos.y += 2.0; if (actor->timer == 30) { SpawnEffect("Wm_ob_starcoinget_gl", 0, pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}); SpawnEffect("Wm_mr_vshipattack_hosi", 0, pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}); SpawnEffect("Wm_ob_keyget01_b", 0, pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}); actor->timer = 0; } if (actor->scale.x < 0) { return true; } return false; } void BossExplode(daBoss *actor, Vec *pos) { actor->scale.x = 0.0; actor->scale.y = 0.0; actor->scale.z = 0.0; SpawnEffect("Wm_ob_keyget02", 0, pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}); actor->dying = 1; actor->timer = 0; PlaySound(actor, STRM_BGM_SHIRO_BOSS_CLEAR); MakeMarioEnterDemoMode(); } void PlayerVictoryCries(daBoss *actor) { UpdateGameMgr(); if (GetSpecificPlayerActor(0) != 0) { PlaySound(actor, SE_VOC_MA_CLEAR_BOSS); } if (GetSpecificPlayerActor(1) != 0) { PlaySound(actor, SE_VOC_LU_CLEAR_BOSS); } if (GetSpecificPlayerActor(2) != 0) { PlaySound(actor, SE_VOC_KO_CLEAR_BOSS); } if (GetSpecificPlayerActor(3) != 0) { PlaySound(actor, SE_VOC_KO2_CLEAR_BOSS); } }