#include "boss.h" void DamagePlayer(dEn_c *actor, ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("Damage Player\n"); 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; } OSReport("Player is good and hurt\n"); } void SetupKameck(daBoss *actor, daKameckDemo *Kameck) { OSReport("Stop BGM Music\n"); // 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; OSReport("Enter Demo Mode\n"); 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}; OSReport("Make Kameck\n"); // Create And use Kameck actor->Kameck = (daKameckDemo*)actor->createChild(KAMECK_FOR_CASTLE_DEMO, (dStageActor_c*)actor, 0, &pos, &rot, 0); actor->Kameck->doStateChange(&daKameckDemo::StateID_DemoWait); OSReport("Kameck at %x\n", actor->Kameck); } void CleanupKameck(daBoss *actor, daKameckDemo *Kameck) { // Clean up the flags and Kameck OSReport("Cleaning up ALL the Kamecks!\n"); dStage32C_c::instance->freezeMarioBossFlag = 0; WLClass::instance->_8 = 1; OSReport("Fixing ALL the BGMs and Demo Modes!\n"); MakeMarioExitDemoMode(); StartBGMMusic(); actor->Kameck->Delete(1); OSReport("KAMEX DELETZORS\n"); } bool GrowBoss(daBoss *actor, daKameckDemo *Kameck, float initialScale, float endScale, float yPosModifier, int timer) { if (timer == 130) { OSReport("Timer = 130 - Kameck = %x\n", Kameck); actor->Kameck->doStateChange(&daKameckDemo::StateID_DemoSt); } if (timer == 400) { OSReport("Timer = 400 - Kameck = %x\n", Kameck); actor->Kameck->doStateChange(&daKameckDemo::StateID_DemoSt2); } float scaleSpeed, yPosScaling; if (timer == 150) { PlaySound(actor, SE_BOSS_IGGY_WANWAN_TO_L); OSReport("Timer = 150\n"); } if ((timer > 150) && (timer < 230)) { OSReport("Timer = %d\n", timer); 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) { OSReport("Timer = 360 - Make Effects\n"); 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; OSReport("Timer = 420, returning true\n"); } 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); } }