diff options
Diffstat (limited to '')
-rwxr-xr-x | src/mrsun.cpp | 58 |
1 files changed, 48 insertions, 10 deletions
diff --git a/src/mrsun.cpp b/src/mrsun.cpp index 5cd2d9c..7d8628a 100755 --- a/src/mrsun.cpp +++ b/src/mrsun.cpp @@ -37,6 +37,19 @@ class daMrSun_c : public dEn_c { void updateModelMatrices(); + void playerCollision(ActivePhysics *apThis, ActivePhysics *apOther); + void yoshiCollision(ActivePhysics *apThis, ActivePhysics *apOther); + void collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther); + void collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther); + void collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther); + void collisionCat14_YoshiFire(ActivePhysics *apThis, ActivePhysics *apOther); + void collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther); + + void dieFumi_Begin(); + void dieFumi_Execute(); + void dieFumi_End(); + + USING_STATES(daMrSun_c); DECLARE_STATE(Follow); DECLARE_STATE(Swoop); @@ -44,6 +57,7 @@ class daMrSun_c : public dEn_c { DECLARE_STATE(Spit); DECLARE_STATE(Spin); DECLARE_STATE(Wait); +// DECLARE_STATE(dieFumi); }; daMrSun_c *daMrSun_c::build() { @@ -68,11 +82,29 @@ CREATE_STATE(daMrSun_c, Spiral); CREATE_STATE(daMrSun_c, Spit); CREATE_STATE(daMrSun_c, Spin); CREATE_STATE(daMrSun_c, Wait); +//CREATE_STATE(daMrSun_c, dieFumi); #define ACTIVATE 1 #define DEACTIVATE 0 +void daMrSun_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("Hit Player"); } +void daMrSun_c::yoshiCollision(ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("Hit Yoshi"); } + +void daMrSun_c::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("Hit Fireball"); } +void daMrSun_c::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("Hit Iceball"); } +void daMrSun_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("Hit Rolling Object"); doStateChange(&StateID_Wait); } +void daMrSun_c::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther) { + OSReport("Hit Hammer"); + doStateChange(&StateID_Wait); +} +void daMrSun_c::collisionCat14_YoshiFire(ActivePhysics *apThis, ActivePhysics *apOther) { OSReport("Hit Yoshi Fire"); } + + +void daMrSun_c::dieFumi_Begin() { this->dieFall_Begin(); } +void daMrSun_c::dieFumi_Execute() { this->dieFall_Execute(); } +void daMrSun_c::dieFumi_End() { this->dieFall_End(); } + @@ -94,14 +126,14 @@ int daMrSun_c::onCreate() { } else { // It's a moon - hasGlow = true; + hasGlow = false; nw4r::g3d::ResFile rf(getResource("bilikyu", "g3d/moon.brres")); bodyModel.setup(rf.GetResMdl("Moon"), &allocator, 0x224, 1, 0); SetupTextures_Map(&bodyModel, 0); - glowModel.setup(rf.GetResMdl("MoonGlow"), &allocator, 0x224, 1, 0); - SetupTextures_Map(&glowModel, 0); +// glowModel.setup(rf.GetResMdl("MoonGlow"), &allocator, 0x224, 1, 0); +// SetupTextures_Map(&glowModel, 0); } allocator.unlink(); @@ -119,7 +151,14 @@ int daMrSun_c::onCreate() { HitMeBaby.category1 = 0x3; HitMeBaby.category2 = 0x0; HitMeBaby.bitfield1 = 0x4F; - HitMeBaby.bitfield2 = 0x8820C; + + if (this->settings == 0) { // It's a sun + HitMeBaby.bitfield2 = 0x3E020C; // Can be hit by iceballs of all kinds, shells and rollies, pipe cannons, and star power + } + else { // It's a moon + HitMeBaby.bitfield2 = 0x3E0200; // Can be hit by fireballs of all kinds, shells and rollies, pipe cannons, and star power + } + HitMeBaby.unkShort1C = 0; HitMeBaby.callback = &dEn_c::collisionCallback; @@ -217,17 +256,19 @@ void daMrSun_c::executeState_Follow() { if (this->settings == 0) { speedDelta = 0.1; } // It's a sun else { speedDelta = 0.15; } // It's a moon + OSReport("Speed: %f", this->speed.x); + if (this->direction == 0) { this->speed.x = this->speed.x + speedDelta; if (this->speed.x < 0) { this->speed.x = this->speed.x + (speedDelta / 2); } - if (this->speed.x < 50.0) { this->speed.x = this->speed.x + (speedDelta); } + if (this->speed.x < 6.0) { this->speed.x = this->speed.x + (speedDelta); } } else { this->speed.x = this->speed.x - speedDelta; if (this->speed.x > 0) { this->speed.x = this->speed.x - (speedDelta / 2); } - if (this->speed.x < 50.0) { this->speed.x = this->speed.x - (speedDelta); } + if (this->speed.x > 6.0) { this->speed.x = this->speed.x - (speedDelta); } } HandleXSpeed(this); @@ -236,10 +277,7 @@ void daMrSun_c::executeState_Follow() { float yDiff; yDiff = (this->Baseline - this->pos.y) / 8; this->speed.y = yDiff; - - - OSReport("YSpeed = %f", this->speed.y); - + HandleYSpeed(this); UpdateObjectPosBasedOnSpeedValues_real(this); |