diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/boss.cpp | 140 | ||||
-rw-r--r-- | src/boss.h | 48 | ||||
-rw-r--r-- | src/bossBalboaWrench.cpp | 182 | ||||
-rw-r--r-- | src/bossFuzzyBear.cpp | 348 | ||||
-rw-r--r-- | src/bossMegaGoomba.cpp | 30 | ||||
-rw-r--r-- | src/bossPodouble.cpp | 204 | ||||
-rw-r--r-- | src/bossRamboo.cpp | 178 | ||||
-rw-r--r-- | src/bossThwompaDomp.cpp | 136 | ||||
-rw-r--r-- | src/bossTopman.cpp | 196 | ||||
-rw-r--r-- | src/bossWrenchThrow.cpp | 40 | ||||
-rw-r--r-- | src/effectvideo.cpp | 26 | ||||
-rw-r--r-- | src/electricLine.cpp | 3 | ||||
-rw-r--r-- | src/fakeStarCoin.cpp | 27 | ||||
-rwxr-xr-x | src/firelaser.cpp | 4 | ||||
-rw-r--r-- | src/levelspecial.cpp | 186 | ||||
-rwxr-xr-x | src/mrsun.cpp | 26 | ||||
-rw-r--r-- | src/penguin.cpp | 2 | ||||
-rw-r--r-- | src/shyguy.cpp | 24 | ||||
-rw-r--r-- | src/topman.cpp | 7 |
19 files changed, 596 insertions, 1211 deletions
diff --git a/src/boss.cpp b/src/boss.cpp new file mode 100644 index 0000000..e90dd2c --- /dev/null +++ b/src/boss.cpp @@ -0,0 +1,140 @@ +#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); } +}
\ No newline at end of file diff --git a/src/boss.h b/src/boss.h new file mode 100644 index 0000000..784c5fa --- /dev/null +++ b/src/boss.h @@ -0,0 +1,48 @@ +#ifndef __PLAYER_H +#define __PLAYER_H + +#include <common.h> +#include <game.h> +#include <g3dhax.h> +#include <stage.h> +#include <sfx.h> + +extern "C" void *PlaySound(dStageActor_c *, int soundID); +extern "C" void *PlaySoundAsync(dStageActor_c *, int soundID); + +extern "C" bool SpawnEffect(const char*, int, Vec*, S16Vec*, Vec*); + +extern "C" dStageActor_c* GetSpecificPlayerActor(int number); +extern "C" dStageActor_c *CreateActor(u16 classID, int settings, Vec pos, char rot, char layer); + +extern "C" u32 GenerateRandomNumber(int max); +extern "C" u8 dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(dEn_c *, Vec pos); +extern "C" char usedForDeterminingStatePress_or_playerCollision(dEn_c* t, ActivePhysics *apThis, ActivePhysics *apOther, int unk1); + +extern "C" void *StopBGMMusic(); +extern "C" void *StartBGMMusic(); + +extern "C" void *MakeMarioEnterDemoMode(); +extern "C" void *MakeMarioExitDemoMode(); +extern "C" void *UpdateGameMgr(); + + +class daBoss : public dEn_c { +public: + u32 timer; + char dying; +}; + + +// Functions +void DamagePlayer(dEn_c* actor, ActivePhysics *apThis, ActivePhysics *apOther); +void SetupKameck(daBoss* actor, daKameckDemo *Kameck); +void CleanupKameck(daBoss* actor, daKameckDemo *Kameck); +bool GrowBoss(daBoss* actor, daKameckDemo *Kameck, float initialScale, float endScale, float yPosModifier, int timer); +void OutroSetup(daBoss* actor); +bool ShrinkBoss(daBoss *actor, Vec *pos, float scale, int timer); +void BossExplode(daBoss* actor, Vec *pos); +void PlayerVictoryCries(daBoss* actor); + +#endif + diff --git a/src/bossBalboaWrench.cpp b/src/bossBalboaWrench.cpp index 1b1cf6b..f19e852 100644 --- a/src/bossBalboaWrench.cpp +++ b/src/bossBalboaWrench.cpp @@ -3,10 +3,9 @@ #include <g3dhax.h> #include <sfx.h> #include <stage.h> -#include "effects.h" -#include "player.h" +#include "boss.h" -class daBalboa_c : public dEn_c { +class daBalboa_c : public daBoss { int onCreate(); int onDelete(); int onExecute(); @@ -31,7 +30,7 @@ class daBalboa_c : public dEn_c { char isRevenging; int spinner; - dEn_c *Kameck; + daKameckDemo *Kameck; static daBalboa_c *build(); @@ -68,21 +67,6 @@ daBalboa_c *daBalboa_c::build() { } // Externs - extern "C" u32 GenerateRandomNumber(int max); - extern "C" dStageActor_c *CreateActor(u16 classID, int settings, Vec pos, char rot, char layer); - extern "C" u8 dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(daBalboa_c *, Vec pos); - extern "C" dStageActor_c *GetSpecificPlayerActor(int number); - extern "C" void *PlaySound(daBalboa_c *, int soundID); - extern "C" void *PlaySoundAsync(daBalboa_c *, int soundID); - extern "C" char usedForDeterminingStatePress_or_playerCollision(dEn_c* t, ActivePhysics *apThis, ActivePhysics *apOther, int unk1); - - extern "C" void *StopBGMMusic(); - extern "C" void *StartBGMMusic(); - - extern "C" void *MakeMarioEnterDemoMode(); - extern "C" void *MakeMarioExitDemoMode(); - extern "C" void *UpdateGameMgr(); - CREATE_STATE(daBalboa_c, Grow); CREATE_STATE(daBalboa_c, ManholeUp); @@ -143,7 +127,7 @@ daBalboa_c *daBalboa_c::build() { dActor_c *block = apOther->owner; dEn_c *mario = (dEn_c*)block; - CreateEffect(mario, 33); + SpawnEffect("Wm_en_vshit", 0, &mario->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); mario->speed.y = -mario->speed.y; mario->pos.y += mario->speed.y; @@ -300,23 +284,7 @@ void daBalboa_c::updateModelMatrices() { void daBalboa_c::beginState_Grow() { this->timer = 0; - // 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); bindAnimChr_and_setUpdateRate("throw_2", 1, 0.0, 0.6); } @@ -326,54 +294,18 @@ void daBalboa_c::updateModelMatrices() { if(this->animationChr.isAnimationDone()) this->animationChr.setCurrentFrame(0.0); - if (this->timer == 130) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt); } - if (this->timer == 400) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt2); } - - this->timer = this->timer + 1; - - float scaleSpeed, yPosScaling; - - if (this->timer == 150) { PlaySound(this, SE_BOSS_IGGY_WANWAN_TO_L); } - - if ((this->timer > 150) && (this->timer < 230)) { - - scaleSpeed = 0.015625; + this->timer += 1; - float modifier; + bool ret; + ret = GrowBoss(this, Kameck, 1.0, 2.25, 0, this->timer); - modifier = 1.0 + ((this->timer - 150) * scaleSpeed); - - this->scale = (Vec){modifier, modifier, modifier}; - - } - - 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 - } - - if (this->timer > 420) { + if (ret) { PlaySound(this, SE_EMY_CHOROPU_BOUND); - this->upsideDown = 0; doStateChange(&StateID_BackDown); - } + } } void daBalboa_c::endState_Grow() { - - // Clean up the flags and Kameck - dStage32C_c::instance->freezeMarioBossFlag = 0; - WLClass::instance->_8 = 1; - - MakeMarioExitDemoMode(); - StartBGMMusic(); - - Kameck->Delete(1); + CleanupKameck(this, Kameck); } @@ -419,17 +351,14 @@ void daBalboa_c::updateModelMatrices() { // this->direction = 1; } else if (randChoice == 2) { // In the Center! - char PlayerID = NearestPlayer(this); - dStageActor_c *Player = GetSpecificPlayerActor(PlayerID); + char Pdir = dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(this, this->pos); - this->upsideDown = 0; - this->rot.z = 0; - if (Player->pos.x < this->pos.x) { - this->rot.y = 0xE000; - this->direction = 0; } - else { + if (Pdir) { this->rot.y = 0x2000; this->direction = 1; } + else { + this->rot.y = 0xE000; + this->direction = 0; } } PlaySound(this, 0x21F); @@ -556,8 +485,8 @@ void daBalboa_c::updateModelMatrices() { PlaySound(this, 0x221); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 1.0, 1.0}, 351); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 1.0, 1.0}, 352); + SpawnEffect("Wm_mr_sanddive_out", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 1.0, 1.0}); + SpawnEffect("Wm_mr_sanddive_smk", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 1.0, 1.0}); } void daBalboa_c::executeState_BackDown() { @@ -581,11 +510,7 @@ void daBalboa_c::updateModelMatrices() { bindAnimChr_and_setUpdateRate("dead", 1, 0.0, 1.0); - WLClass::instance->_4 = 5; - WLClass::instance->_8 = 0; - dStage32C_c::instance->freezeMarioBossFlag = 1; - - this->removeMyActivePhysics(); + OutroSetup(this); this->timer = 0; this->rot.x = 0x0; // X is vertical axis this->rot.z = 0x0; // Z is ... an axis >.> @@ -597,73 +522,20 @@ void daBalboa_c::updateModelMatrices() { this->animationChr.setCurrentFrame(0.0); if (this->dying == 1) { - if (this->timer > 180) { - ExitStage(WORLD_MAP, 0, BEAT_LEVEL, MARIO_WIPE); - } - - if (this->timer == 60) { - - 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_BOSS_CMN_DAMAGE_LAST); - PlaySound(this, SE_EMY_BIG_TERESA_DEAD); - - // Adjust this to equal the scale of your boss / 80. - this->scale.x -= 0.028125; - this->scale.y -= 0.028125; - this->scale.z -= 0.028125; - - this->pos.y -= 0.02; - - if (this->timer == 30) { - Vec tempPos = (Vec){this->pos.x + 0.0, this->pos.y - 0.0, 5500.0}; - - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 756); - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 801); - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 957); - this->timer = 0; - } - } - else { - this->scale.x = 0.0; - this->scale.y = 0.0; - this->scale.z = 0.0; - - Vec tempPos = (Vec){this->pos.x + 0.0, this->pos.y - 0.0, 5500.0}; - - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 588); - this->dying = 1; - this->timer = 0; - - PlaySound(this, STRM_BGM_SHIRO_BOSS_CLEAR); - MakeMarioEnterDemoMode(); - } + bool ret; + ret = ShrinkBoss(this, &this->pos, 2.25, this->timer); + this->pos.y -= 0.02; + if (ret) { BossExplode(this, &this->pos); } + else { PlaySound(this, SE_EMY_CHOROPU_SIGN); } + this->timer += 1; } diff --git a/src/bossFuzzyBear.cpp b/src/bossFuzzyBear.cpp index 3fe4085..55b907e 100644 --- a/src/bossFuzzyBear.cpp +++ b/src/bossFuzzyBear.cpp @@ -3,11 +3,10 @@ #include <g3dhax.h> #include <sfx.h> #include <stage.h> -#include "effects.h" -#include "player.h" +#include "boss.h" -class daFuzzyBear_c : public dEn_c { +class daFuzzyBear_c : public daBoss { int onCreate(); int onDelete(); int onExecute(); @@ -35,7 +34,7 @@ class daFuzzyBear_c : public dEn_c { char roly; char isInvulnerable; - dEn_c *Kameck; + daKameckDemo *Kameck; static daFuzzyBear_c *build(); @@ -58,7 +57,7 @@ class daFuzzyBear_c : public dEn_c { USING_STATES(daFuzzyBear_c); DECLARE_STATE(Grow); DECLARE_STATE(Bounce); - DECLARE_STATE(Needles); + // DECLARE_STATE(Needles); DECLARE_STATE(Spray); DECLARE_STATE(RolyPoly); DECLARE_STATE(Wait); @@ -71,25 +70,10 @@ daFuzzyBear_c *daFuzzyBear_c::build() { } -extern "C" void *PlaySound(daFuzzyBear_c *, int soundID); -extern "C" void *StopSound(int soundID); - -extern "C" u32 GenerateRandomNumber(int max); -extern "C" dStageActor_c *CreateActor(u16 classID, int settings, Vec pos, char rot, char layer); -extern "C" u8 dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(daFuzzyBear_c *, Vec pos); -extern "C" dStageActor_c *GetSpecificPlayerActor(int num); - -extern "C" void *StopBGMMusic(); -extern "C" void *StartBGMMusic(); - -extern "C" void *MakeMarioEnterDemoMode(); -extern "C" void *MakeMarioExitDemoMode(); -extern "C" void *UpdateGameMgr(); - CREATE_STATE(daFuzzyBear_c, Grow); CREATE_STATE(daFuzzyBear_c, Bounce); -CREATE_STATE(daFuzzyBear_c, Needles); +// CREATE_STATE(daFuzzyBear_c, Needles); CREATE_STATE(daFuzzyBear_c, Spray); CREATE_STATE(daFuzzyBear_c, RolyPoly); CREATE_STATE(daFuzzyBear_c, Wait); @@ -97,28 +81,15 @@ CREATE_STATE(daFuzzyBear_c, Outro); -void daFuzzyBear_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { - - this->dEn_c::playerCollision(apThis, apOther); - this->_vf220(apOther->owner); - - this->isDead = 0; - this->flags_4FC |= (1<<(31-7)); - if(apOther->owner->which_player < 4) { - this->counter_504[apOther->owner->which_player] = 0; - } -} -void daFuzzyBear_c::yoshiCollision(ActivePhysics *apThis, ActivePhysics *apOther) { - this->playerCollision(apThis, apOther); -} +void daFuzzyBear_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } +void daFuzzyBear_c::yoshiCollision(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } void daFuzzyBear_c::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) { - if (this->isInvulnerable == 1) { return; } this->timer = 0; PlaySound(this, SE_BOSS_KOOPA_FIRE_DISAPP); - CreateEffect(&apOther->owner->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 102); + SpawnEffect("Wm_mr_fireball_hit", 0, &apOther->owner->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); this->damage++; if (this->damage > 14) { doStateChange(&StateID_Outro); } } @@ -138,7 +109,7 @@ void daFuzzyBear_c::collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhy mario->doSpriteMovement(); } void daFuzzyBear_c::collisionCat7_WMWaggleWaterYoshi(ActivePhysics *apThis, ActivePhysics *apOther) { - this->collisionCat7_WMWaggleWater(apThis, apOther); + this->collisionCat9_RollingObject(apThis, apOther); } void daFuzzyBear_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther) { @@ -172,7 +143,7 @@ void daFuzzyBear_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhy PlaySound(this, SE_EMY_BLOW_PAKKUN_DOWN); - CreateEffect(&blah->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 161); + SpawnEffect("Wm_mr_kickhit", 0, &blah->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); if (this->damage > 14) { doStateChange(&StateID_Outro); } else { doStateChange(&StateID_RolyPoly); } @@ -191,7 +162,7 @@ void daFuzzyBear_c::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics * this->timer = 0; this->damage += 5; - CreateEffect(&apOther->owner->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 162); + SpawnEffect("Wm_mr_kick_glow", 0, &apOther->owner->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); if (this->damage > 14) { doStateChange(&StateID_Outro); } else { doStateChange(&StateID_RolyPoly); } @@ -199,7 +170,7 @@ void daFuzzyBear_c::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics * bool daFuzzyBear_c::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther) { return false; } void daFuzzyBear_c::collisionCat14_YoshiFire(ActivePhysics *apThis, ActivePhysics *apOther) { } -void daFuzzyBear_c::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther) { } +void daFuzzyBear_c::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } @@ -332,84 +303,27 @@ void daFuzzyBear_c::updateModelMatrices() { void daFuzzyBear_c::beginState_Grow() { this->timer = 0; - // 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 daFuzzyBear_c::executeState_Grow() { - - if (this->timer == 130) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt); } - if (this->timer == 400) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt2); } - - this->timer = this->timer + 1; - - float scaleSpeed, yPosScaling; - - if (this->timer == 150) { PlaySound(this, SE_BOSS_IGGY_WANWAN_TO_L); } - - if ((this->timer > 150) && (this->timer < 230)) { - - if (BigBossFuzzyBear == 1) { - scaleSpeed = 0.025; - yPosScaling = 25; } - else { - scaleSpeed = 0.01875; - yPosScaling = 18; } + this->timer += 1; - float modifier; - - modifier = 1.0 + ((this->timer - 150) * scaleSpeed); - - this->scale = (Vec){modifier, modifier, modifier}; - this->pos.y = this->pos.y + (yPosScaling/80); - - } - - if (this->timer == 360) { + bool ret; + if (BigBossFuzzyBear == 1) { + ret = GrowBoss(this, Kameck, 1.0, 3.0, 25, this->timer); } + else { + ret = GrowBoss(this, Kameck, 1.0, 2.5, 18, this->timer); } - 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 + if (ret) { doStateChange(&StateID_Bounce); } - } - - if (this->timer > 420) { doStateChange(&StateID_Bounce); } - } void daFuzzyBear_c::endState_Grow() { this->Baseline = this->pos.y; - // Clean up the flags and Kameck - dStage32C_c::instance->freezeMarioBossFlag = 0; - WLClass::instance->_8 = 1; - - MakeMarioExitDemoMode(); - StartBGMMusic(); - - Kameck->Delete(1); + CleanupKameck(this, Kameck); } @@ -483,7 +397,7 @@ void daFuzzyBear_c::executeState_Bounce() { } else if (this->timer == 10) { Vec tempPos = (Vec){this->pos.x, this->pos.y - wallDistance, 5500.0}; - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 66); + SpawnEffect("Wm_mr_beachlandsmk", 0, &tempPos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); } else { float modifier; @@ -532,76 +446,76 @@ void daFuzzyBear_c::endState_Bounce() { OSReport("No more bouncing."); } // Needles State - shoots out some black icicles -void daFuzzyBear_c::beginState_Needles() { - this->timer = 0; - this->speed.y = 0; - this->speed.x = 0; - OSReport("Fuzzy Needle State Begin"); -} -void daFuzzyBear_c::executeState_Needles() { - float origScale; - - this->speed.y = 0; - this->speed.x = 0; - - if (BigBossFuzzyBear == 0) { - origScale = 2.5; - } - else { - origScale = 3.0; - } - - this->timer = this->timer + 1; - OSReport("Needle Timer: %d", this->timer); - - if (this->timer <= 120) { - this->scale.y = (sin(this->timer * 3.14 / 5.0) / 2.0) + origScale; // 3 shakes per second, exactly 24 shakes overall - this->scale.x = (sin(this->timer * 3.14 / 5.0) / 2.0) + origScale; // 3 shakes per second, exactly 24 shakes overall - - if (this->timer == 30) { - dStageActor_c *spawner = CreateActor(339, 0, this->pos, 0, 0); - spawner->speed.x = -6.0; - spawner->speed.y = 0.0; - spawner->scale = (Vec){1.0, 1.0, 1.0}; - } - - if (this->timer == 45) { - dStageActor_c *spawner = CreateActor(339, 0, this->pos, 0, 0); - spawner->speed.x = 6.0; - spawner->speed.y = 6.0; - spawner->scale = (Vec){1.0, 1.0, 1.0}; - } - - if (this->timer == 60) { - dStageActor_c *spawner = CreateActor(339, 0, this->pos, 0, 0); - spawner->speed.x = 0.0; - spawner->speed.y = 6.0; - spawner->scale = (Vec){1.0, 1.0, 1.0}; - } - - if (this->timer == 75) { - dStageActor_c *spawner = CreateActor(339, 0, this->pos, 0, 0); - spawner->speed.x = -6.0; - spawner->speed.y = 6.0; - spawner->scale = (Vec){1.0, 1.0, 1.0}; - } - - if (this->timer == 90) { - dStageActor_c *spawner = CreateActor(339, 0, this->pos, 0, 0); - spawner->speed.x = -6.0; - spawner->speed.y = 0.0; - spawner->scale = (Vec){1.0, 1.0, 1.0}; - } - } - else { doStateChange(&StateID_Bounce); } - - this->HandleXSpeed(); - this->HandleYSpeed(); - - this->UpdateObjectPosBasedOnSpeedValuesReal(); - -} -void daFuzzyBear_c::endState_Needles() { OSReport("Fuzzy Needle State End"); } +// void daFuzzyBear_c::beginState_Needles() { +// this->timer = 0; +// this->speed.y = 0; +// this->speed.x = 0; +// OSReport("Fuzzy Needle State Begin"); +// } +// void daFuzzyBear_c::executeState_Needles() { +// float origScale; + +// this->speed.y = 0; +// this->speed.x = 0; + +// if (BigBossFuzzyBear == 0) { +// origScale = 2.5; +// } +// else { +// origScale = 3.0; +// } + +// this->timer = this->timer + 1; +// OSReport("Needle Timer: %d", this->timer); + +// if (this->timer <= 120) { +// this->scale.y = (sin(this->timer * 3.14 / 5.0) / 2.0) + origScale; // 3 shakes per second, exactly 24 shakes overall +// this->scale.x = (sin(this->timer * 3.14 / 5.0) / 2.0) + origScale; // 3 shakes per second, exactly 24 shakes overall + +// if (this->timer == 30) { +// dStageActor_c *spawner = CreateActor(339, 0, this->pos, 0, 0); +// spawner->speed.x = -6.0; +// spawner->speed.y = 0.0; +// spawner->scale = (Vec){1.0, 1.0, 1.0}; +// } + +// if (this->timer == 45) { +// dStageActor_c *spawner = CreateActor(339, 0, this->pos, 0, 0); +// spawner->speed.x = 6.0; +// spawner->speed.y = 6.0; +// spawner->scale = (Vec){1.0, 1.0, 1.0}; +// } + +// if (this->timer == 60) { +// dStageActor_c *spawner = CreateActor(339, 0, this->pos, 0, 0); +// spawner->speed.x = 0.0; +// spawner->speed.y = 6.0; +// spawner->scale = (Vec){1.0, 1.0, 1.0}; +// } + +// if (this->timer == 75) { +// dStageActor_c *spawner = CreateActor(339, 0, this->pos, 0, 0); +// spawner->speed.x = -6.0; +// spawner->speed.y = 6.0; +// spawner->scale = (Vec){1.0, 1.0, 1.0}; +// } + +// if (this->timer == 90) { +// dStageActor_c *spawner = CreateActor(339, 0, this->pos, 0, 0); +// spawner->speed.x = -6.0; +// spawner->speed.y = 0.0; +// spawner->scale = (Vec){1.0, 1.0, 1.0}; +// } +// } +// else { doStateChange(&StateID_Bounce); } + +// this->HandleXSpeed(); +// this->HandleYSpeed(); + +// this->UpdateObjectPosBasedOnSpeedValuesReal(); + +// } +// void daFuzzyBear_c::endState_Needles() { OSReport("Fuzzy Needle State End"); } // Spray State - jumps in the air and shakes out some small fuzzies @@ -702,7 +616,9 @@ void daFuzzyBear_c::executeState_RolyPoly() { Vec tempPos = (Vec){this->pos.x, this->pos.y - 34.0, 5500.0}; - if (this->timer & 0x1) { CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){0.4, 0.4, 0.4}, 242); } + if (this->timer & 0x1) { + SpawnEffect("Wm_ob_icehitsmk", 0, &tempPos, &(S16Vec){0,0,0}, &(Vec){0.4, 0.4, 0.4}); + } } if (this->direction == 0) { // is even @@ -763,8 +679,6 @@ void daFuzzyBear_c::endState_RolyPoly() { - - void daFuzzyBear_c::beginState_Wait() { this->timer = 0;} void daFuzzyBear_c::executeState_Wait() { @@ -782,83 +696,25 @@ void daFuzzyBear_c::endState_Wait() { } void daFuzzyBear_c::beginState_Outro() { - - WLClass::instance->_4 = 5; - WLClass::instance->_8 = 0; - - this->removeMyActivePhysics(); - this->timer = 0; - StopBGMMusic(); - - dStage32C_c::instance->freezeMarioBossFlag = 1; - + OutroSetup(this); } void daFuzzyBear_c::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_BOSS_CMN_DAMAGE_LAST); - - // Adjust this to equal the scale of your boss / 80. - this->scale.x -= 0.015; - this->scale.y -= 0.015; - this->scale.z -= 0.015; + bool ret; + ret = ShrinkBoss(this, &this->pos, 2.75, 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; - } + if (ret) { BossExplode(this, &this->pos); } - 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; + this->timer += 1; - PlaySound(this, STRM_BGM_SHIRO_BOSS_CLEAR); - MakeMarioEnterDemoMode(); - } } void daFuzzyBear_c::endState_Outro() { } diff --git a/src/bossMegaGoomba.cpp b/src/bossMegaGoomba.cpp index f701ee7..e353c23 100644 --- a/src/bossMegaGoomba.cpp +++ b/src/bossMegaGoomba.cpp @@ -3,7 +3,29 @@ #include <g3dhax.h> #include <sfx.h> -#include "player.h" +//Enable this if you're fixing it +// void setNewActivePhysicsRect(dStageActor_c* actor, Vec* scale) { +// float amtX = scale->x; +// float amtY = scale->y; + +// ActivePhysics::Info info; +// info.xDistToCenter = 0.0; +// info.yDistToCenter = 7.65 * amtY; +// info.xDistToEdge = 4.0 * amtX; +// info.yDistToEdge = 7.7 * amtY; + +// info.category1 = actor->aPhysics.info.category1; +// info.category2 = actor->aPhysics.info.category2; +// info.bitfield1 = actor->aPhysics.info.bitfield1; +// info.bitfield2 = actor->aPhysics.info.bitfield2; +// info.unkShort1C = actor->aPhysics.info.unkShort1C; +// info.callback = actor->aPhysics.info.callback; + +// //OSReport("Making new Physics Class and adding to the list\n"); +// actor->aPhysics.removeFromList(); +// actor->aPhysics.initWithStruct(actor, &info); +// actor->aPhysics.addToList(); +// } class daMegaGoomba_c : public dEn_c { int onCreate(); @@ -465,7 +487,7 @@ void daMegaGoomba_c::executeState_Grow() { float modifier = GetHermiteCurveValue(this->timer, this->keysX, Xkey_count); this->scale = (Vec){modifier, modifier, modifier}; - setNewActivePhysicsRect(this, &this->scale); + // setNewActivePhysicsRect(this, &this->scale); } if(this->timer == 60.0) @@ -488,7 +510,7 @@ void daMegaGoomba_c::beginState_Shrink() { // disable being hit Vec tempVec = (Vec){0.0, 0.0, 0.0}; - setNewActivePhysicsRect(this, &tempVec ); + // setNewActivePhysicsRect(this, &tempVec ); } void daMegaGoomba_c::executeState_Shrink() { this->timer += 1.0; @@ -503,7 +525,7 @@ void daMegaGoomba_c::executeState_Shrink() { } void daMegaGoomba_c::endState_Shrink() { // enable being hit - setNewActivePhysicsRect(this, &this->scale); + // setNewActivePhysicsRect(this, &this->scale); this->already_hit = false; } 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() { } diff --git a/src/bossRamboo.cpp b/src/bossRamboo.cpp index 08a04f7..ff14fdc 100644 --- a/src/bossRamboo.cpp +++ b/src/bossRamboo.cpp @@ -3,10 +3,9 @@ #include <g3dhax.h> #include <sfx.h> #include <stage.h> -#include "effects.h" -#include "player.h" +#include "boss.h" -class daRamboo_c : public dEn_c { +class daRamboo_c : public daBoss { int onCreate(); int onDelete(); int onExecute(); @@ -35,7 +34,7 @@ class daRamboo_c : public dEn_c { u64 eventFlag; - dEn_c *Kameck; + daKameckDemo *Kameck; static daRamboo_c *build(); @@ -66,21 +65,6 @@ daRamboo_c *daRamboo_c::build() { } -extern "C" u32 GenerateRandomNumber(int max); -extern "C" dStageActor_c *CreateActor(u16 classID, int settings, Vec pos, char rot, char layer); -extern "C" u8 dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(daRamboo_c *, Vec pos); -extern "C" dStageActor_c *GetSpecificPlayerActor(int number); -extern "C" void *PlaySound(daRamboo_c *, int soundID); - -extern "C" void *StopBGMMusic(); -extern "C" void *StartBGMMusic(); - -extern "C" void *MakeMarioEnterDemoMode(); -extern "C" void *MakeMarioExitDemoMode(); -extern "C" void *UpdateGameMgr(); - - - CREATE_STATE(daRamboo_c, Grow); CREATE_STATE(daRamboo_c, Advance); CREATE_STATE(daRamboo_c, Wait); @@ -96,19 +80,10 @@ struct EventTable_t { extern EventTable_t *EventTable; -void daRamboo_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { - this->dEn_c::playerCollision(apThis, apOther); - this->_vf220(apOther->owner); - - this->isDead = 0; - this->flags_4FC |= (1<<(31-7)); - if(apOther->owner->which_player < 4) { - this->counter_504[apOther->owner->which_player] = 0; - } -} +void daRamboo_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } void daRamboo_c::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("Hit Fireball"); - CreateEffect(378, &apOther->owner->pos, &(S16Vec){0,0,0}, &(Vec){0.5, 0.5, 0.5}); + SpawnEffect("Wm_en_obakedoor_sm", 0, &apOther->owner->pos, &(S16Vec){0,0,0}, &(Vec){0.5, 0.5, 0.5}); this->pos.x += 6.0; } bool daRamboo_c::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther) { return false; } @@ -116,8 +91,8 @@ void daRamboo_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysic OSReport("Hit Rolling Object"); if (apOther->owner->name == 412) { // Check if it's a glow block - CreateEffect(378, &apOther->owner->pos); - CreateEffect(380, &apOther->owner->pos); + SpawnEffect("Wm_en_obakedoor_sm", 0, &apOther->owner->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); + SpawnEffect("Wm_mr_yoshistep", 0, &apOther->owner->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); doStateChange(&StateID_Flee); //FIXME changed to dStageActor_c::Delete(u8) from fBase_c::Delete(void) @@ -125,8 +100,8 @@ void daRamboo_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysic } } void daRamboo_c::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther) { } -void daRamboo_c::collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther) { } -void daRamboo_c::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther) { } +void daRamboo_c::collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } +void daRamboo_c::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } @@ -272,13 +247,6 @@ int daRamboo_c::onExecute() { this->fogSrt.process(); if(this->fogSrt.isEntryAnimationDone(0)) this->fogSrt.setFrameForEntry(1.0, 0); - - // if (this->aPhysics.result1 == 1) { - // char PlayerID = NearestPlayer(this); - // dStageActor_c *Player = GetSpecificPlayerActor(PlayerID); - - // this->_vf220(Player); - // } if (EventTable->events & this->eventFlag) { doStateChange(&StateID_Outro); @@ -326,60 +294,15 @@ void daRamboo_c::beginState_Grow() { OSReport("Growing when Kameck Tells me to."); this->timer = 0; - // 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); } void daRamboo_c::executeState_Grow() { - if (this->timer == 130) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt); } - if (this->timer == 400) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt2); } - - this->timer = this->timer + 1; - - float scaleSpeed, yPosScaling; - - if (this->timer == 150) { PlaySound(this, SE_BOSS_IGGY_WANWAN_TO_L); } - - if ((this->timer > 150) && (this->timer < 230)) { - - scaleSpeed = 0.175; - - float modifier; - - modifier = 1.0 + ((this->timer - 150) * scaleSpeed); - - this->scale = (Vec){modifier, modifier, modifier}; - - } + bool ret; + ret = GrowBoss(this, Kameck, 1.0, 15.0, 0, this->timer); - 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 - } - - if (this->timer > 420) { + if (ret) { PlaySound(this, SE_EMY_CS_TERESA_BRING_IT); doStateChange(&StateID_Advance); } @@ -387,14 +310,7 @@ void daRamboo_c::executeState_Grow() { void daRamboo_c::endState_Grow() { this->Baseline = this->pos.y; - // Clean up the flags and Kameck - dStage32C_c::instance->freezeMarioBossFlag = 0; - WLClass::instance->_8 = 1; - - MakeMarioExitDemoMode(); - StartBGMMusic(); - - Kameck->Delete(1); + CleanupKameck(this, Kameck); } @@ -542,18 +458,12 @@ void daRamboo_c::beginState_Outro() { this->hideModel.bindAnim(&this->anmWaitB, 0.0); this->anmWaitB.setUpdateRate(1.0); - this->removeMyActivePhysics(); this->timer = 0; this->rot.x = 0x0; // X is vertical axis this->rot.y = 0xE000; // Y is horizontal axis this->rot.z = 0x0; // Z is ... an axis >.> - StopBGMMusic(); - - WLClass::instance->_4 = 5; - WLClass::instance->_8 = 0; - dStage32C_c::instance->freezeMarioBossFlag = 1; - + OutroSetup(this); } void daRamboo_c::executeState_Outro() { @@ -566,66 +476,22 @@ void daRamboo_c::executeState_Outro() { } if (this->timer == 60) { - - 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 - } + PlayerVictoryCries(this); } this->timer += 1; return; } - if (this->scale.x > 0) { - - PlaySound(this, SE_BOSS_CMN_DAMAGE_LAST); - PlaySound(this, SE_EMY_BIG_TERESA_DEAD); - - // Adjust this to equal the scale of your boss / 80. - this->scale.x -= 0.175; - this->scale.y -= 0.175; - this->scale.z -= 0.175; - - this->pos.y += 2.0; - - Vec tempPos = (Vec){this->pos.x + 160.0, this->pos.y - 80.0, 5500.0}; + bool ret; + Vec tempPos = (Vec){this->pos.x + 160.0, this->pos.y - 80.0, 5500.0}; + ret = ShrinkBoss(this, &tempPos, 15.0, this->timer); - if (this->timer == 30) { - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 756); - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 801); - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 957); - this->timer = 0; - } + if (ret) { + BossExplode(this, &tempPos); } else { - this->scale.x = 0.0; - this->scale.y = 0.0; - this->scale.z = 0.0; - - Vec tempPos = (Vec){this->pos.x + 160.0, this->pos.y - 80.0, 5500.0}; - - CreateEffect(&tempPos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 588); - this->dying = 1; - this->timer = 0; - - PlaySound(this, STRM_BGM_SHIRO_BOSS_CLEAR); - MakeMarioEnterDemoMode(); + PlaySound(this, SE_EMY_BIG_TERESA_DEAD); } this->timer += 1; diff --git a/src/bossThwompaDomp.cpp b/src/bossThwompaDomp.cpp index 89f2c14..b19045e 100644 --- a/src/bossThwompaDomp.cpp +++ b/src/bossThwompaDomp.cpp @@ -3,7 +3,7 @@ #include <g3dhax.h> #include <sfx.h> #include <stage.h> -#include "effects.h" +#include "boss.h" // Externs extern "C" int posIsInZone(Vec,float*,float*,u8 zone); @@ -15,19 +15,8 @@ extern "C" Vec ConvertStagePositionIntoScreenPosition__Maybe(Vec); extern "C" void AnotherSoundRelatedFunction(void*,SFX,Vec,int); - extern "C" void *PlaySound(dEn_c *, int soundID); - extern "C" void *PlaySoundAsync(dEn_c *, int soundID); - extern "C" dStageActor_c *GetSpecificPlayerActor(int number); - extern "C" void *StopBGMMusic(); - extern "C" void *StartBGMMusic(); - - extern "C" void *MakeMarioEnterDemoMode(); - extern "C" void *MakeMarioExitDemoMode(); - extern "C" void *UpdateGameMgr(); - - -class daEnMegaDosun_c : public dEn_c { +class daEnMegaDosun_c : public daBoss { int onCreate(); int onDelete(); int onExecute(); @@ -56,7 +45,7 @@ class daEnMegaDosun_c : public dEn_c { bool isOutofScreen; Vec OutOfScreenPosition; - dEn_c *Kameck; + daKameckDemo *Kameck; void setupBodyModel(); @@ -99,23 +88,15 @@ daEnMegaDosun_c *daEnMegaDosun_c::build() { // Collisions void daEnMegaDosun_c::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 < 4) { - this->counter_504[apOther->owner->which_player] = 0; - } + DamagePlayer(this, apThis, apOther); } void daEnMegaDosun_c::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) { } bool daEnMegaDosun_c::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther) { return false; } - void daEnMegaDosun_c::collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther) { } + void daEnMegaDosun_c::collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } void daEnMegaDosun_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther) { } void daEnMegaDosun_c::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther) { } void daEnMegaDosun_c::collisionCat14_YoshiFire(ActivePhysics *apThis, ActivePhysics *apOther) { } - void daEnMegaDosun_c::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther) { } + void daEnMegaDosun_c::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } void daEnMegaDosun_c::setupBodyModel() { @@ -252,77 +233,24 @@ int daEnMegaDosun_c::onDelete() { void daEnMegaDosun_c::beginState_Grow() { this->scale = (Vec){0.5, 0.5, 0.5}; - this->timer = 0; - // 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); } void daEnMegaDosun_c::executeState_Grow() { - - if (this->timer == 130) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt); } - if (this->timer == 400) { Kameck->doStateChange(&daKameckDemo::StateID_DemoSt2); } - - this->timer = this->timer + 1; - - float scaleSpeed, yPosScaling; - - if (this->timer == 150) { PlaySound(this, SE_BOSS_IGGY_WANWAN_TO_L); } - - if ((this->timer > 150) && (this->timer < 230)) { - - scaleSpeed = 0.00625; - - float modifier; - - modifier = 0.5 + ((this->timer - 150) * scaleSpeed); - - this->scale = (Vec){modifier, modifier, modifier}; - } + bool ret; + ret = GrowBoss(this, Kameck, 0.5, 1.0, 0, this->timer); - 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 - } - - if (this->timer > 420) { + if (ret) { PlaySound(this, SE_EMY_BIG_DOSSUN); doStateChange(&StateID_UpMove); } + this->timer += 1; } void daEnMegaDosun_c::endState_Grow() { - - // Clean up the flags and Kameck - dStage32C_c::instance->freezeMarioBossFlag = 0; - WLClass::instance->_8 = 1; - - MakeMarioExitDemoMode(); - StartBGMMusic(); - - Kameck->Delete(1); + CleanupKameck(this, Kameck); } // StateID_UpWait @@ -337,14 +265,14 @@ int daEnMegaDosun_c::onDelete() { } if (this->pos.x > this->rightBuffer) { - CreateEffect(&(Vec){this->pos.x + 38.0, this->pos.y + 32.0, 5500.0}, &(S16Vec){0,0,0x4000}, &(Vec){1.0, 1.0, 1.0}, 364); + SpawnEffect("Wm_en_dossunfall02", 0, &(Vec){this->pos.x + 38.0, this->pos.y + 32.0, 5500.0}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); PlaySoundAsync(this, SE_OBJ_TEKKYU_G_CRASH); this->direction = 0; } if (this->pos.x < this->leftBuffer) { - CreateEffect(&(Vec){this->pos.x - 40.0, this->pos.y + 32.0, 5500.0}, &(S16Vec){0,0,0xC000}, &(Vec){1.0, 1.0, 1.0}, 364); + SpawnEffect("Wm_en_dossunfall02", 0, &(Vec){this->pos.x - 40.0, this->pos.y + 32.0, 5500.0}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); PlaySoundAsync(this, SE_OBJ_TEKKYU_G_CRASH); this->direction = 1; @@ -493,16 +421,8 @@ int daEnMegaDosun_c::onDelete() { // Outro void daEnMegaDosun_c::beginState_Outro() { - OSReport("Outro Being\n"); - - WLClass::instance->_4 = 5; - WLClass::instance->_8 = 0; - - this->removeMyActivePhysics(); + OutroSetup(this); this->timer = 0; - StopBGMMusic(); - - dStage32C_c::instance->freezeMarioBossFlag = 1; this->speed.y = 0.0; this->y_speed_inc = 0.0; @@ -516,8 +436,8 @@ int daEnMegaDosun_c::onDelete() { PlaySound(this, SE_EMY_BIG_DOSSUN_DEAD); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 988); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}, 989); + SpawnEffect("Wm_mr_stockitemuse_b", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}); + SpawnEffect("Wm_mr_stockitemuse_c", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){2.0, 2.0, 2.0}); } if (this->timer == 60) { @@ -529,27 +449,7 @@ int daEnMegaDosun_c::onDelete() { if (this->timer == 120) { OSReport("Outro Play Victory Cry\n"); - 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 - } + PlayerVictoryCries(this); } if (this->timer > 240) { diff --git a/src/bossTopman.cpp b/src/bossTopman.cpp index a52c66b..625e957 100644 --- a/src/bossTopman.cpp +++ b/src/bossTopman.cpp @@ -3,10 +3,9 @@ #include <g3dhax.h> #include <sfx.h> #include <stage.h> -#include "effects.h" -#include "player.h" +#include "boss.h" -class daDreidel : public dEn_c { +class daDreidel : public daBoss { int onCreate(); int onDelete(); int onExecute(); @@ -30,7 +29,7 @@ class daDreidel : public dEn_c { float dying; - dEn_c *Kameck; + daKameckDemo *Kameck; static daDreidel *build(); @@ -77,25 +76,10 @@ daDreidel *daDreidel::build() { /////////////////////// // Externs and States /////////////////////// - extern "C" void *PlaySound(dStageActor_c *, int soundID); - extern "C" void *PlaySoundAsync(dStageActor_c *, int soundID); extern "C" void *EN_LandbarrelPlayerCollision(dEn_c* t, ActivePhysics *apThis, ActivePhysics *apOther); - - extern "C" dStageActor_c *CreateActor(u16 classID, int settings, Vec pos, char rot, char layer); - extern "C" u8 dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(daDreidel *, Vec pos); - extern "C" dStageActor_c *GetSpecificPlayerActor(int num); -// CalculateDistanceFromActorsNextPosToFurthestPlayer - - //FIXME make this dEn_c->used... - extern "C" char usedForDeterminingStatePress_or_playerCollision(dEn_c* t, ActivePhysics *apThis, ActivePhysics *apOther, int unk1); + // CalculateDistanceFromActorsNextPosToFurthestPlayer??? extern "C" int SmoothRotation(short* rot, u16 amt, int unk2); - extern "C" void *StopBGMMusic(); - extern "C" void *StartBGMMusic(); - - extern "C" void *MakeMarioEnterDemoMode(); - extern "C" void *MakeMarioExitDemoMode(); - extern "C" void *UpdateGameMgr(); CREATE_STATE(daDreidel, Walk); CREATE_STATE(daDreidel, Turn); @@ -167,41 +151,17 @@ daDreidel *daDreidel::build() { this->playerCollision(apThis, apOther); } - void daDreidel::collisionCatD_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther) { - this->dEn_c::playerCollision(apThis, apOther); - this->_vf220(apOther->owner); - - this->isDead = 0; - this->flags_4FC |= (1<<(31-7)); - if(apOther->owner->which_player < 4) { - this->counter_504[apOther->owner->which_player] = 0; - } - } - - void daDreidel::collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther) { - this->collisionCatD_GroundPound(apThis, apOther); - } + void daDreidel::collisionCatD_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } + void daDreidel::collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } + void daDreidel::collisionCat7_WMWaggleWaterYoshi(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } - void daDreidel::collisionCat7_WMWaggleWaterYoshi(ActivePhysics *apThis, ActivePhysics *apOther) { - this->collisionCatD_GroundPound(apThis, apOther); - } - - void daDreidel::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther) { - doStateChange(&StateID_KnockBack); - } + void daDreidel::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther) { doStateChange(&StateID_KnockBack); } + void daDreidel::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther){ doStateChange(&StateID_KnockBack); } void daDreidel::collisionCat3_StarPower(ActivePhysics *apThis, ActivePhysics *apOther){ } - void daDreidel::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther) { } - - void daDreidel::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther){ - doStateChange(&StateID_KnockBack); - } - void daDreidel::collisionCat14_YoshiFire(ActivePhysics *apThis, ActivePhysics *apOther){ } - void daDreidel::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) { } - bool daDreidel::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther) { return true; } @@ -407,23 +367,7 @@ void daDreidel::updateModelMatrices() { this->timer = 0; - // 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); } void daDreidel::executeState_Grow() { @@ -432,52 +376,18 @@ void daDreidel::updateModelMatrices() { this->chrAnimation.setCurrentFrame(0.0); } - this->timer = this->timer + 1; - - float scaleSpeed, yPosScaling; - + this->timer += 1; - if ((this->timer > 150) && (this->timer < 230)) { + bool ret; + ret = GrowBoss(this, Kameck, 0.2, 0.4, 0, this->timer); - scaleSpeed = 0.005; - yPosScaling = 18; - - float modifier; - - modifier = 0.2 + ((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_MECHAKOOPA_BOUND); doStateChange(&StateID_Walk); } - - 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 daDreidel::endState_Grow() { - // Clean up the flags and Kameck - dStage32C_c::instance->freezeMarioBossFlag = 0; - WLClass::instance->_8 = 1; - - MakeMarioExitDemoMode(); - StartBGMMusic(); - - Kameck->Delete(1); + CleanupKameck(this, Kameck); } @@ -627,82 +537,24 @@ void daDreidel::updateModelMatrices() { // Outro State /////////////// void daDreidel::beginState_Outro() { - - WLClass::instance->_4 = 5; - WLClass::instance->_8 = 0; - - this->removeMyActivePhysics(); - this->timer = 0; - StopBGMMusic(); - - dStage32C_c::instance->freezeMarioBossFlag = 1; - + OutroSetup(this); } void daDreidel::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.0075; - this->scale.y -= 0.0075; - this->scale.z -= 0.0075; + bool ret; + ret = ShrinkBoss(this, &this->pos, 0.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; - - PlaySound(this, STRM_BGM_SHIRO_BOSS_CLEAR); - MakeMarioEnterDemoMode(); - } + if (ret) { BossExplode(this, &this->pos); } + else { PlaySound(this, SE_EMY_BUBBLE_EXTINCT); } + + this->timer += 1; } void daDreidel::endState_Outro() { } diff --git a/src/bossWrenchThrow.cpp b/src/bossWrenchThrow.cpp index 1abc226..af5e272 100644 --- a/src/bossWrenchThrow.cpp +++ b/src/bossWrenchThrow.cpp @@ -1,10 +1,8 @@ #include <common.h> #include <game.h> #include <g3dhax.h> -#include "player.h" -#include "effects.h" #include <sfx.h> - +#include "boss.h" class daWrench : public dEn_c { int onCreate(); @@ -46,24 +44,10 @@ CREATE_STATE(daWrench, Straight); CREATE_STATE(daWrench, Kaboom); -extern "C" void *PlaySound(dEn_c *, int soundID); -extern "C" void *PlaySoundAsync(dEn_c *, int soundID); extern "C" void *PlayWrenchSound(dEn_c *); -extern "C" dStageActor_c *GetSpecificPlayerActor(int number); -extern "C" u32 GenerateRandomNumber(int max); - - -void daWrench::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { - this->dEn_c::playerCollision(apThis, apOther); - this->_vf220(apOther->owner); - this->isDead = 0; - this->flags_4FC |= (1<<(31-7)); - if(apOther->owner->which_player < 4) { - this->counter_504[apOther->owner->which_player] = 0; - } -} +void daWrench::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } void daWrench::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) { } bool daWrench::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther) { @@ -71,7 +55,7 @@ bool daWrench::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePh } void daWrench::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther) {} void daWrench::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther) { - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){0.5, 0.5, 0.5}, 48); + SpawnEffect("Wm_ob_cmnboxgrain", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){0.5, 0.5, 0.5}); PlaySoundAsync(this, SE_BOSS_JR_FLOOR_BREAK); this->Delete(1); @@ -80,7 +64,7 @@ void daWrench::collisionCat14_YoshiFire(ActivePhysics *apThis, ActivePhysics *ap void daWrench::collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther) { this->_vf220(apOther->owner); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){0.5, 0.5, 0.5}, 48); + SpawnEffect("Wm_ob_cmnboxgrain", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){0.5, 0.5, 0.5}); PlaySoundAsync(this, SE_BOSS_JR_FLOOR_BREAK); this->Delete(1); @@ -239,8 +223,8 @@ void daWrench::executeState_Kaboom() { // hit the ground PlaySoundAsync(this, SE_BOSS_JR_BOMB_BURST); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){0.75, 0.75, 0.75}, 9); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.25, 1.25, 1.25}, 167); + SpawnEffect("Wm_en_burst_s", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){0.75, 0.75, 0.75}); + SpawnEffect("Wm_mr_wirehit", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.25, 1.25, 1.25}); this->Delete(1); } if (collMgr.bitfield_for_checks & (0x15 << direction)) { @@ -248,12 +232,12 @@ void daWrench::executeState_Kaboom() { PlaySoundAsync(this, SE_BOSS_JR_BOMB_BURST); if (this->direction == 0) { // directions 1 spins clockwise, fly rightwards - CreateEffect(&this->pos, &(S16Vec){0,0x4000,0}, &(Vec){0.75, 0.75, 0.75}, 9); - CreateEffect(&this->pos, &(S16Vec){0,0x4000,0}, &(Vec){1.25, 1.25, 1.25}, 167); + SpawnEffect("Wm_en_burst_s", 0, &this->pos, &(S16Vec){0,0x4000,0}, &(Vec){0.75, 0.75, 0.75}); + SpawnEffect("Wm_mr_wirehit", 0, &this->pos, &(S16Vec){0,0x4000,0}, &(Vec){1.25, 1.25, 1.25}); } else { // directions 0 spins anti-clockwise, fly leftwards - CreateEffect(&this->pos, &(S16Vec){0,0xE000,0}, &(Vec){0.75, 0.75, 0.75}, 9); - CreateEffect(&this->pos, &(S16Vec){0,0xE000,0}, &(Vec){1.25, 1.25, 1.25}, 167); + SpawnEffect("Wm_en_burst_s", 0, &this->pos, &(S16Vec){0,0xE000,0}, &(Vec){0.75, 0.75, 0.75}); + SpawnEffect("Wm_mr_wirehit", 0, &this->pos, &(S16Vec){0,0xE000,0}, &(Vec){1.25, 1.25, 1.25}); } this->Delete(1); @@ -298,14 +282,14 @@ void daWrench::executeState_Straight() { // hit the ground PlaySoundAsync(this, SE_BOSS_JR_FLOOR_BREAK); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){0.75, 0.75, 0.75}, 9); + SpawnEffect("Wm_en_burst_s", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){0.75, 0.75, 0.75}); this->Delete(1); } if (collMgr.bitfield_for_checks & (0x15 << direction)) { // hit the wall PlaySoundAsync(this, SE_BOSS_JR_FLOOR_BREAK); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){0.75, 0.75, 0.75}, 9); + SpawnEffect("Wm_en_burst_s", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){0.75, 0.75, 0.75}); this->Delete(1); } diff --git a/src/effectvideo.cpp b/src/effectvideo.cpp index 3aa43fb..6264142 100644 --- a/src/effectvideo.cpp +++ b/src/effectvideo.cpp @@ -1,12 +1,11 @@ #include <common.h> #include <game.h> #include <g3dhax.h> -#include "player.h" -#include "effects.h" #include <sfx.h> extern "C" void *PlaySoundAsync(dEn_c *, int soundID); +extern "C" bool SpawnEffect(const char*, int, Vec*, S16Vec*, Vec*); class EffectVideo : public dEn_c { @@ -76,7 +75,28 @@ int EffectVideo::onExecute() { } else { // Plays an Effect - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){this->scale, this->scale, this->scale}, this->effect); + + switch (this->effect) { + + case 43: + SpawnEffect("Wm_ob_cmnspark", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){this->scale, this->scale, this->scale}); + break; + + case 177: + SpawnEffect("Wm_ob_greencoinkira_b", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){this->scale, this->scale, this->scale}); + break; + + case 193: + SpawnEffect("Wm_mr_electricshock_biri01_s", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){this->scale, this->scale, this->scale}); + break; + + case 365: + SpawnEffect("Wm_en_kuribobigsplit", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){this->scale, this->scale, this->scale}); + break; + + default: + break; + } } this->timer = 0; diff --git a/src/electricLine.cpp b/src/electricLine.cpp index 28822f1..d8a72e2 100644 --- a/src/electricLine.cpp +++ b/src/electricLine.cpp @@ -2,9 +2,6 @@ #include <game.h> #include <g3dhax.h> #include <sfx.h> -#include <stage.h> -#include "effects.h" -#include "player.h" class daElectricLine : public dEn_c { int onCreate(); diff --git a/src/fakeStarCoin.cpp b/src/fakeStarCoin.cpp index 5160545..9dcbad3 100644 --- a/src/fakeStarCoin.cpp +++ b/src/fakeStarCoin.cpp @@ -1,12 +1,11 @@ #include <common.h> #include <game.h> #include <g3dhax.h> -#include "player.h" -#include "effects.h" #include <sfx.h> extern "C" void *PlaySound(dEn_c *, int soundID); +extern "C" bool SpawnEffect(const char*, int, Vec*, S16Vec*, Vec*); class daFakeStarCoin : public dEn_c { @@ -42,15 +41,15 @@ class daFakeStarCoin : public dEn_c { void daFakeStarCoin::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { PlaySound(this, SE_EMY_CS_TERESA_BEAT_YOU); - CreateEffect(377, &this->pos); + SpawnEffect("Wm_en_obakedoor", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); //FIXME changed to dStageActor_c::Delete(u8) from fBase_c::Delete(void) this->Delete(this->_390); } void daFakeStarCoin::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) { - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 336); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){3.0, 3.0, 3.0}, 342); + SpawnEffect("Wm_en_explosion", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); + SpawnEffect("Wm_en_explosion_smk", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){3.0, 3.0, 3.0}); PlaySound(this, SE_OBJ_EMY_FIRE_DISAPP); @@ -58,9 +57,9 @@ void daFakeStarCoin::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, A this->Delete(this->_390); } bool daFakeStarCoin::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther) { - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}, 44); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 231); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}, 235); + SpawnEffect("Wm_ob_cmnicekira", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}); + SpawnEffect("Wm_ob_icebreakwt", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); + SpawnEffect("Wm_ob_iceattack", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}); PlaySound(this, SE_OBJ_PNGN_ICE_BREAK); @@ -69,8 +68,8 @@ bool daFakeStarCoin::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, Ac return false; } void daFakeStarCoin::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther) { - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 48); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 378); + SpawnEffect("Wm_ob_cmnboxgrain", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); + SpawnEffect("Wm_en_obakedoor_sm", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); PlaySound(this, SE_BOSS_JR_FLOOR_BREAK); @@ -78,8 +77,8 @@ void daFakeStarCoin::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePh this->Delete(this->_390); } void daFakeStarCoin::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther) { - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 48); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 378); + SpawnEffect("Wm_ob_cmnboxgrain", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); + SpawnEffect("Wm_en_obakedoor_sm", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); PlaySound(this, SE_BOSS_JR_FLOOR_BREAK); @@ -87,8 +86,8 @@ void daFakeStarCoin::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics this->Delete(this->_390); } void daFakeStarCoin::collisionCat14_YoshiFire(ActivePhysics *apThis, ActivePhysics *apOther) { - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 336); - CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){3.0, 3.0, 3.0}, 342); + SpawnEffect("Wm_en_explosion", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); + SpawnEffect("Wm_en_explosion_smk", 0, &this->pos, &(S16Vec){0,0,0}, &(Vec){3.0, 3.0, 3.0}); PlaySound(this, SE_OBJ_EMY_FIRE_DISAPP); diff --git a/src/firelaser.cpp b/src/firelaser.cpp index db615ec..32eb0bd 100755 --- a/src/firelaser.cpp +++ b/src/firelaser.cpp @@ -33,7 +33,6 @@ CREATE_STATE(daFireLaser_c, pewpewpew); struct EventTable_t { u64 events; - // ... }; extern EventTable_t *EventTable; @@ -41,7 +40,6 @@ extern EventTable_t *EventTable; int daFireLaser_c::onCreate() { - OSReport("Creating a fiery laser"); this->timer = 0; this->direction = this->settings & 0xF; @@ -74,7 +72,6 @@ int daFireLaser_c::onDraw() { // Pew Pew State void daFireLaser_c::beginState_pewpewpew() { - OSReport("Firin' mah lazer."); this->timer = 0; } void daFireLaser_c::executeState_pewpewpew() { @@ -85,7 +82,6 @@ void daFireLaser_c::executeState_pewpewpew() { this->timer = this->timer + 1; if (this->timer < 20) { - OSReport("Pew pew pew!"); float xlaunch; float ylaunch; diff --git a/src/levelspecial.cpp b/src/levelspecial.cpp index 75d7ecc..3ce6aab 100644 --- a/src/levelspecial.cpp +++ b/src/levelspecial.cpp @@ -26,8 +26,8 @@ struct EventTable_t { extern EventTable_t *EventTable; -extern u16 TimeStopFlag; -extern u32 TimerBranch; +// extern u16 TimeStopFlag; +// extern u32 TimerBranch; extern u32 AlwaysDrawFlag; extern u32 AlwaysDrawBranch; @@ -35,7 +35,7 @@ extern float MarioDescentRate; extern float MarioJumpMax; extern float MarioJumpArc; extern float MiniMarioJumpArc; -extern float MarioSize; +// extern float MarioSize; extern float GlobalSpriteSize; extern float GlobalSpriteSpeed; @@ -61,13 +61,13 @@ fBase_c *FindActorByID(u32 id); bool ResetAfterLevel(void) { - TimeStopFlag = 0; - TimerBranch = 0x3403FFA4; + // TimeStopFlag = 0; + // TimerBranch = 0x3403FFA4; MarioDescentRate = -4; MarioJumpMax = 3.628; MarioJumpArc = 2.5; MiniMarioJumpArc = 2.5; - MarioSize = 1.0; + // MarioSize = 1.0; GlobalSpriteSize = 1.0; GlobalSpriteSpeed = 1.0; GlobalRiderSize = 1.0; @@ -121,13 +121,13 @@ void LevelSpecial_Update(LevelSpecial *self) { OSReport("Activate Special Event!", offState); switch (self->type) { - case 1: // Time Freeze - TimeStopFlag = self->effect * 0x100; - break; + // case 1: // Time Freeze + // TimeStopFlag = self->effect * 0x100; + // break; - case 2: // Stop Timer - TimerBranch = 0x7C601B78; - break; + // case 2: // Stop Timer + // TimerBranch = 0x7C601B78; + // break; case 3: // Mario Gravity @@ -147,80 +147,80 @@ void LevelSpecial_Update(LevelSpecial *self) { } break; - case 4: // Mario Size - dAc_Py_c *Mario; - if (self->effect == 0) //Super Size - { - MarioSize = 4.0; +// case 4: // Mario Size +// dAc_Py_c *Mario; +// if (self->effect == 0) //Super Size +// { +// MarioSize = 4.0; - for(int n=0; n<4; n++) { - OSReport("Changing Physics for Player %d\n", n); - Mario = GetSpecificPlayerActor(n); - OSReport("Player Actor at %08x\n", Mario); - if(Mario == 0) - continue; -// Mario->aPhysics.info.xDistToCenter = Mario->aPhysics.info.xDistToCenter * 4.0; -// Mario->aPhysics.info.xDistToEdge = Mario->aPhysics.info.xDistToEdge * 4.0; -// Mario->aPhysics.info.yDistToCenter = Mario->aPhysics.info.yDistToCenter * 4.0; -// Mario->aPhysics.info.yDistToEdge = Mario->aPhysics.info.yDistToEdge * 4.0; -// - Mario->bPhysics.info.xDistToCenter = Mario->bPhysics.info.xDistToCenter * 4.0; - Mario->bPhysics.info.xDistToEdge = Mario->bPhysics.info.xDistToEdge * 4.0; - Mario->bPhysics.info.yDistToCenter = Mario->bPhysics.info.yDistToCenter * 4.0; - Mario->bPhysics.info.yDistToEdge = Mario->bPhysics.info.yDistToEdge * 4.0; -// -// Mario->cPhysics.info.xDistToCenter = Mario->cPhysics.info.xDistToCenter * 4.0; -// Mario->cPhysics.info.xDistToEdge = Mario->cPhysics.info.xDistToEdge * 4.0; -// Mario->cPhysics.info.yDistToCenter = Mario->cPhysics.info.yDistToCenter * 4.0; -// Mario->cPhysics.info.yDistToEdge = Mario->cPhysics.info.yDistToEdge * 4.0; -// -// Mario->dPhysics.info.xDistToCenter = Mario->dPhysics.info.xDistToCenter * 4.0; -// Mario->dPhysics.info.xDistToEdge = Mario->dPhysics.info.xDistToEdge * 4.0; -// Mario->dPhysics.info.yDistToCenter = Mario->dPhysics.info.yDistToCenter * 4.0; -// Mario->dPhysics.info.yDistToEdge = Mario->dPhysics.info.yDistToEdge * 4.0; -// -// Mario->ePhysics.info.xDistToCenter = Mario->ePhysics.info.xDistToCenter * 4.0; -// Mario->ePhysics.info.xDistToEdge = Mario->ePhysics.info.xDistToEdge * 4.0; -// Mario->ePhysics.info.yDistToCenter = Mario->ePhysics.info.yDistToCenter * 4.0; -// Mario->ePhysics.info.yDistToEdge = Mario->ePhysics.info.yDistToEdge * 4.0; - } - } +// for(int n=0; n<4; n++) { +// OSReport("Changing Physics for Player %d\n", n); +// Mario = GetSpecificPlayerActor(n); +// OSReport("Player Actor at %08x\n", Mario); +// if(Mario == 0) +// continue; +// // Mario->aPhysics.info.xDistToCenter = Mario->aPhysics.info.xDistToCenter * 4.0; +// // Mario->aPhysics.info.xDistToEdge = Mario->aPhysics.info.xDistToEdge * 4.0; +// // Mario->aPhysics.info.yDistToCenter = Mario->aPhysics.info.yDistToCenter * 4.0; +// // Mario->aPhysics.info.yDistToEdge = Mario->aPhysics.info.yDistToEdge * 4.0; +// // +// Mario->bPhysics.info.xDistToCenter = Mario->bPhysics.info.xDistToCenter * 4.0; +// Mario->bPhysics.info.xDistToEdge = Mario->bPhysics.info.xDistToEdge * 4.0; +// Mario->bPhysics.info.yDistToCenter = Mario->bPhysics.info.yDistToCenter * 4.0; +// Mario->bPhysics.info.yDistToEdge = Mario->bPhysics.info.yDistToEdge * 4.0; +// // +// // Mario->cPhysics.info.xDistToCenter = Mario->cPhysics.info.xDistToCenter * 4.0; +// // Mario->cPhysics.info.xDistToEdge = Mario->cPhysics.info.xDistToEdge * 4.0; +// // Mario->cPhysics.info.yDistToCenter = Mario->cPhysics.info.yDistToCenter * 4.0; +// // Mario->cPhysics.info.yDistToEdge = Mario->cPhysics.info.yDistToEdge * 4.0; +// // +// // Mario->dPhysics.info.xDistToCenter = Mario->dPhysics.info.xDistToCenter * 4.0; +// // Mario->dPhysics.info.xDistToEdge = Mario->dPhysics.info.xDistToEdge * 4.0; +// // Mario->dPhysics.info.yDistToCenter = Mario->dPhysics.info.yDistToCenter * 4.0; +// // Mario->dPhysics.info.yDistToEdge = Mario->dPhysics.info.yDistToEdge * 4.0; +// // +// // Mario->ePhysics.info.xDistToCenter = Mario->ePhysics.info.xDistToCenter * 4.0; +// // Mario->ePhysics.info.xDistToEdge = Mario->ePhysics.info.xDistToEdge * 4.0; +// // Mario->ePhysics.info.yDistToCenter = Mario->ePhysics.info.yDistToCenter * 4.0; +// // Mario->ePhysics.info.yDistToEdge = Mario->ePhysics.info.yDistToEdge * 4.0; +// } +// } - else //Half-Pint - { - MarioSize = 0.25; - - for(int n=0; n<4; n++) { - Mario = GetSpecificPlayerActor(n); - if(Mario == 0) - continue; - Mario->aPhysics.info.xDistToCenter = Mario->aPhysics.info.xDistToCenter * 0.25; - Mario->aPhysics.info.xDistToEdge = Mario->aPhysics.info.xDistToEdge * 0.25; - Mario->aPhysics.info.yDistToCenter = Mario->aPhysics.info.yDistToCenter * 0.25; - Mario->aPhysics.info.yDistToEdge = Mario->aPhysics.info.yDistToEdge * 0.25; - - Mario->bPhysics.info.xDistToCenter = Mario->bPhysics.info.xDistToCenter * 0.25; - Mario->bPhysics.info.xDistToEdge = Mario->bPhysics.info.xDistToEdge * 0.25; - Mario->bPhysics.info.yDistToCenter = Mario->bPhysics.info.yDistToCenter * 0.25; - Mario->bPhysics.info.yDistToEdge = Mario->bPhysics.info.yDistToEdge * 0.25; - - Mario->cPhysics.info.xDistToCenter = Mario->cPhysics.info.xDistToCenter * 0.25; - Mario->cPhysics.info.xDistToEdge = Mario->cPhysics.info.xDistToEdge * 0.25; - Mario->cPhysics.info.yDistToCenter = Mario->cPhysics.info.yDistToCenter * 0.25; - Mario->cPhysics.info.yDistToEdge = Mario->cPhysics.info.yDistToEdge * 0.25; - - Mario->dPhysics.info.xDistToCenter = Mario->dPhysics.info.xDistToCenter * 0.25; - Mario->dPhysics.info.xDistToEdge = Mario->dPhysics.info.xDistToEdge * 0.25; - Mario->dPhysics.info.yDistToCenter = Mario->dPhysics.info.yDistToCenter * 0.25; - Mario->dPhysics.info.yDistToEdge = Mario->dPhysics.info.yDistToEdge * 0.25; - - Mario->ePhysics.info.xDistToCenter = Mario->ePhysics.info.xDistToCenter * 0.25; - Mario->ePhysics.info.xDistToEdge = Mario->ePhysics.info.xDistToEdge * 0.25; - Mario->ePhysics.info.yDistToCenter = Mario->ePhysics.info.yDistToCenter * 0.25; - Mario->ePhysics.info.yDistToEdge = Mario->ePhysics.info.yDistToEdge * 0.25; - } - } - break; +// else //Half-Pint +// { +// MarioSize = 0.25; + +// for(int n=0; n<4; n++) { +// Mario = GetSpecificPlayerActor(n); +// if(Mario == 0) +// continue; +// Mario->aPhysics.info.xDistToCenter = Mario->aPhysics.info.xDistToCenter * 0.25; +// Mario->aPhysics.info.xDistToEdge = Mario->aPhysics.info.xDistToEdge * 0.25; +// Mario->aPhysics.info.yDistToCenter = Mario->aPhysics.info.yDistToCenter * 0.25; +// Mario->aPhysics.info.yDistToEdge = Mario->aPhysics.info.yDistToEdge * 0.25; + +// Mario->bPhysics.info.xDistToCenter = Mario->bPhysics.info.xDistToCenter * 0.25; +// Mario->bPhysics.info.xDistToEdge = Mario->bPhysics.info.xDistToEdge * 0.25; +// Mario->bPhysics.info.yDistToCenter = Mario->bPhysics.info.yDistToCenter * 0.25; +// Mario->bPhysics.info.yDistToEdge = Mario->bPhysics.info.yDistToEdge * 0.25; + +// Mario->cPhysics.info.xDistToCenter = Mario->cPhysics.info.xDistToCenter * 0.25; +// Mario->cPhysics.info.xDistToEdge = Mario->cPhysics.info.xDistToEdge * 0.25; +// Mario->cPhysics.info.yDistToCenter = Mario->cPhysics.info.yDistToCenter * 0.25; +// Mario->cPhysics.info.yDistToEdge = Mario->cPhysics.info.yDistToEdge * 0.25; + +// Mario->dPhysics.info.xDistToCenter = Mario->dPhysics.info.xDistToCenter * 0.25; +// Mario->dPhysics.info.xDistToEdge = Mario->dPhysics.info.xDistToEdge * 0.25; +// Mario->dPhysics.info.yDistToCenter = Mario->dPhysics.info.yDistToCenter * 0.25; +// Mario->dPhysics.info.yDistToEdge = Mario->dPhysics.info.yDistToEdge * 0.25; + +// Mario->ePhysics.info.xDistToCenter = Mario->ePhysics.info.xDistToCenter * 0.25; +// Mario->ePhysics.info.xDistToEdge = Mario->ePhysics.info.xDistToEdge * 0.25; +// Mario->ePhysics.info.yDistToCenter = Mario->ePhysics.info.yDistToCenter * 0.25; +// Mario->ePhysics.info.yDistToEdge = Mario->ePhysics.info.yDistToEdge * 0.25; +// } +// } +// break; case 5: // Global Enemy Size @@ -263,13 +263,13 @@ void LevelSpecial_Update(LevelSpecial *self) { OSReport("Deactivate Special Event", offState); switch (self->type) { - case 1: // Time Freeze - TimeStopFlag = 0; - break; + // case 1: // Time Freeze + // TimeStopFlag = 0; + // break; - case 2: // Stop Timer - TimerBranch = 0x3403FFA4; - break; + // case 2: // Stop Timer + // TimerBranch = 0x3403FFA4; + // break; case 3: // Mario Gravity @@ -279,8 +279,8 @@ void LevelSpecial_Update(LevelSpecial *self) { MarioJumpMax = 3.628; break; - case 4: // Mario Size - dAc_Py_c *Mario; + // case 4: // Mario Size + // dAc_Py_c *Mario; // if (self->effect == 0) //Super Size // { // MarioSize = 4.0; @@ -352,7 +352,7 @@ void LevelSpecial_Update(LevelSpecial *self) { // Mario->ePhysics.info.yDistToEdge = Mario->ePhysics.info.yDistToEdge / 0.25; // } // } - break; + // break; case 5: // Global Enemy Size SizerOn = 0; diff --git a/src/mrsun.cpp b/src/mrsun.cpp index a93c06f..4e92d7a 100755 --- a/src/mrsun.cpp +++ b/src/mrsun.cpp @@ -2,7 +2,7 @@ #include <game.h> #include <g3dhax.h> -#include "player.h" +#include "boss.h" class daMrSun_c : public dEn_c { int onCreate(); @@ -52,6 +52,8 @@ class daMrSun_c : public dEn_c { void collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther); void collisionCat3_StarPower(ActivePhysics *apThis, ActivePhysics *apOther); void collisionCatD_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther); + void collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther); + void collisionCat7_WMWaggleWaterYoshi(ActivePhysics *apThis, ActivePhysics *apOther); USING_STATES(daMrSun_c); DECLARE_STATE(Follow); @@ -68,13 +70,6 @@ daMrSun_c *daMrSun_c::build() { } -extern "C" u32 GenerateRandomNumber(int max); -extern "C" u8 dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(daMrSun_c *, Vec pos); -extern "C" dStageActor_c *CreateActor(u16 classID, int settings, Vec pos, char rot, char layer); -extern "C" dStageActor_c *GetSpecificPlayerActor(int number); -extern "C" void *PlaySound(daMrSun_c *, int soundID); - - CREATE_STATE(daMrSun_c, Follow); CREATE_STATE(daMrSun_c, Swoop); CREATE_STATE(daMrSun_c, Spiral); @@ -95,10 +90,7 @@ extern EventTable_t *EventTable; -void daMrSun_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { - this->_vf220(apOther->owner); - OSReport("I hit Mario."); -} +void daMrSun_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } void daMrSun_c::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("Hit Fireball"); } bool daMrSun_c::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther) { @@ -126,7 +118,9 @@ void daMrSun_c::collisionCat3_StarPower(ActivePhysics *apThis, ActivePhysics *ap OSReport("Hit StarMario"); this->timer = 0; doStateChange(&StateID_DieFall); } -void daMrSun_c::collisionCatD_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("Groundpound"); } +void daMrSun_c::collisionCatD_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } +void daMrSun_c::collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } +void daMrSun_c::collisionCat7_WMWaggleWaterYoshi(ActivePhysics *apThis, ActivePhysics *apOther) { DamagePlayer(this, apThis, apOther); } @@ -269,12 +263,6 @@ int daMrSun_c::onExecute() { //OSReport("Oh Mr.Sun, Sun, Mr.Golden Sun"); acState.execute(); updateModelMatrices(); - if (this->aPhysics.result1 == 1) { - char PlayerID = NearestPlayer(this); - dStageActor_c *Player = GetSpecificPlayerActor(PlayerID); - - this->_vf220(Player); - } if (EventTable->events & this->eventFlag) { if (this->killFlag == 0) { diff --git a/src/penguin.cpp b/src/penguin.cpp index 82c0091..6d12204 100644 --- a/src/penguin.cpp +++ b/src/penguin.cpp @@ -3,8 +3,6 @@ #include <g3dhax.h> #include <sfx.h> #include <stage.h> -#include "effects.h" -#include "player.h" class daPengi : public dEn_c { int onCreate(); diff --git a/src/shyguy.cpp b/src/shyguy.cpp index d09edb2..73aaa44 100644 --- a/src/shyguy.cpp +++ b/src/shyguy.cpp @@ -2,9 +2,6 @@ #include <game.h> #include <g3dhax.h> #include <sfx.h> -#include <stage.h> -#include "effects.h" -#include "player.h" // Shy Guy Settings @@ -135,6 +132,7 @@ daShyGuy *daShyGuy::build() { /////////////////////// extern "C" void *PlaySound(dStageActor_c *, int soundID); extern "C" void *PlaySoundAsync(dStageActor_c *, int soundID); + extern "C" bool SpawnEffect(const char*, int, Vec*, S16Vec*, Vec*); extern "C" dStageActor_c *CreateActor(u16 classID, int settings, Vec pos, char rot, char layer); extern "C" u8 dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(daShyGuy *, Vec pos); @@ -989,10 +987,10 @@ void daShyGuy::updateModelMatrices() { if (this->timer == 80) { if (this->direction == 1) { - CreateEffect(&(Vec){this->pos.x + 7.0, this->pos.y + 14.0, this->pos.z - 5500.0}, &(S16Vec){0,0,0}, &(Vec){0.8, 0.8, 0.8}, 966); + SpawnEffect("Wm_ob_keyget02_lighit", 0, &(Vec){this->pos.x + 7.0, this->pos.y + 14.0, this->pos.z - 5500.0}, &(S16Vec){0,0,0}, &(Vec){0.8, 0.8, 0.8}); } else { - CreateEffect(&(Vec){this->pos.x - 7.0, this->pos.y + 14.0, this->pos.z + 5500.0}, &(S16Vec){0,0,0}, &(Vec){0.8, 0.8, 0.8}, 966); + SpawnEffect("Wm_ob_keyget02_lighit", 0, &(Vec){this->pos.x - 7.0, this->pos.y + 14.0, this->pos.z + 5500.0}, &(S16Vec){0,0,0}, &(Vec){0.8, 0.8, 0.8}); } } @@ -1024,11 +1022,11 @@ void daShyGuy::updateModelMatrices() { PlaySoundAsync(this, SE_EMY_CRASHER_PUNCH); if (this->direction == 1) { - CreateEffect(&(Vec){this->pos.x - 18.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}, 123); + SpawnEffect("Wm_mr_wallkick_b_l", 0, &(Vec){this->pos.x - 18.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}); Chuckles.addToList(); } else { - CreateEffect(&(Vec){this->pos.x + 18.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}, 124); + SpawnEffect("Wm_mr_wallkick_s_r", 0, &(Vec){this->pos.x + 18.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}); Knuckles.addToList(); } } @@ -1037,11 +1035,11 @@ void daShyGuy::updateModelMatrices() { if(this->chrAnimation.isAnimationDone()) { if (this->direction == 1) { - CreateEffect(&(Vec){this->pos.x - 38.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 171); + SpawnEffect("Wm_mr_wirehit_hit", 0, &(Vec){this->pos.x - 38.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); Chuckles.removeFromList(); } else { - CreateEffect(&(Vec){this->pos.x + 38.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 171); + SpawnEffect("Wm_mr_wirehit_hit", 0, &(Vec){this->pos.x + 38.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); Knuckles.removeFromList(); } @@ -1228,7 +1226,7 @@ void daShyGuy::updateModelMatrices() { void daShyGuy::beginState_GoDizzy() { bindAnimChr_and_setUpdateRate("c18_L_DMG_F_1_R", 1, 0.0, 1.0); - CreateEffect(318, &(Vec){this->pos.x, this->pos.y + 24.0, 0}, 0); + SpawnEffect("Wm_en_spindamage", 0, &(Vec){this->pos.x, this->pos.y + 24.0, 0}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); this->max_speed.x = 0; this->speed.x = 0; @@ -1309,7 +1307,7 @@ void daShyGuy::updateModelMatrices() { // this->baln = 0; balloonPhysics.removeFromList(); - CreateEffect(&(Vec){this->pos.x, this->pos.y - 32.0, 0}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 337); + SpawnEffect("Wm_en_explosion_ln", 0, &(Vec){this->pos.x, this->pos.y - 32.0, 0}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); type = 0; } @@ -1322,7 +1320,7 @@ void daShyGuy::updateModelMatrices() { bool ret = calculateTileCollisions(); if (speed.y == 0.0) { - CreateEffect(&(Vec){this->pos.x, this->pos.y, 0}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 6); + SpawnEffect("Wm_en_sndlandsmk_s", 0, &(Vec){this->pos.x, this->pos.y, 0}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); doStateChange(&StateID_GoDizzy); } } @@ -1410,7 +1408,7 @@ void daShyGuy::updateModelMatrices() { if (type > 5 && type < 9) { this->renderBalloon = 0; - CreateEffect(&(Vec){this->pos.x, this->pos.y - 32.0, 0}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 337); + SpawnEffect("Wm_en_explosion_ln", 0, &(Vec){this->pos.x, this->pos.y - 32.0, 0}, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); } } void daShyGuy::executeState_Die() { diff --git a/src/topman.cpp b/src/topman.cpp index a255a82..c9a679d 100644 --- a/src/topman.cpp +++ b/src/topman.cpp @@ -2,9 +2,6 @@ #include <game.h> #include <g3dhax.h> #include <sfx.h> -#include <stage.h> -#include "effects.h" -#include "player.h" class daTopman : public dEn_c { int onCreate(); @@ -548,11 +545,11 @@ void daTopman::updateModelMatrices() { } void daTopman::endState_KnockBack() { if (this->rot.y == 0x2800) { - // CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 175); + this->direction = 0; } else { - // CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}, 192); + this->direction = 1; } // OSReport("Rotation: %x", this->rot.y); |