diff options
Diffstat (limited to 'src/bossMegaGoomba.cpp')
-rw-r--r-- | src/bossMegaGoomba.cpp | 105 |
1 files changed, 68 insertions, 37 deletions
diff --git a/src/bossMegaGoomba.cpp b/src/bossMegaGoomba.cpp index 6314aaf..44d4de7 100644 --- a/src/bossMegaGoomba.cpp +++ b/src/bossMegaGoomba.cpp @@ -72,24 +72,26 @@ class daMegaGoomba_c : public dEn_c { void removeMyActivePhysics(); void addMyActivePhysics(); + int tryHandleJumpedOn(ActivePhysics *apThis, ActivePhysics *apOther); + void spriteCollision(ActivePhysics *apThis, ActivePhysics *apOther); void playerCollision(ActivePhysics *apThis, ActivePhysics *apOther); - void collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther); + bool collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther); bool collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther); - void collisionCat3_StarPower(ActivePhysics *apThis, ActivePhysics *apOther); - void collisionCat7_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther); - void collisionCat7_GroundPoundYoshi(ActivePhysics *apThis, ActivePhysics *apOther); - void collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther); - void collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther); - void collisionCatD_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther); - void collisionCat11_PipeCannon(ActivePhysics *apThis, ActivePhysics *apOther); - void collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther); - void collisionCat14_YoshiFire(ActivePhysics *apThis, ActivePhysics *apOther); + bool collisionCat3_StarPower(ActivePhysics *apThis, ActivePhysics *apOther); + bool collisionCat7_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther); + bool collisionCat7_GroundPoundYoshi(ActivePhysics *apThis, ActivePhysics *apOther); + bool collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther); + bool collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther); + bool collisionCatD_Drill(ActivePhysics *apThis, ActivePhysics *apOther); + bool collisionCat11_PipeCannon(ActivePhysics *apThis, ActivePhysics *apOther); + bool collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther); + bool collisionCat14_YoshiFire(ActivePhysics *apThis, ActivePhysics *apOther); void addScoreWhenHit(void *other); - void _vf120(ActivePhysics *apThis, ActivePhysics *apOther); - void _vf110(ActivePhysics *apThis, ActivePhysics *apOther); - void _vf108(ActivePhysics *apThis, ActivePhysics *apOther); + bool _vf120(ActivePhysics *apThis, ActivePhysics *apOther); + bool _vf110(ActivePhysics *apThis, ActivePhysics *apOther); + bool _vf108(ActivePhysics *apThis, ActivePhysics *apOther); void dieOther_Begin(); void dieOther_Execute(); @@ -249,6 +251,14 @@ void daMegaGoomba_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOth //unk=0 does _vfs, unk=1 does playSeCmnStep //char ret = usedForDeterminingStatePress_or_playerCollision(this, apThis, apOther, 0); + if (tryHandleJumpedOn(apThis, apOther) == 0) { + this->dEn_c::playerCollision(apThis, apOther); + this->_vf220(apOther->owner); + this->counter_504[apOther->owner->which_player] = 180; + } +} + +int daMegaGoomba_c::tryHandleJumpedOn(ActivePhysics *apThis, ActivePhysics *apOther) { float saveBounce = EnemyBounceValue; EnemyBounceValue = 5.2f; @@ -267,47 +277,68 @@ void daMegaGoomba_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOth apOther->someFlagByte |= 2; if(this->takeHit(1)) doStateChange(&StateID_DieFall); - } else if(ret == 0) { - this->dEn_c::playerCollision(apThis, apOther); - this->_vf220(apOther->owner); - this->counter_504[apOther->owner->which_player] = 180; - } else if(ret == 2) { - } else { } + + return ret; } -void daMegaGoomba_c::collisionCat7_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther) { - if (this->counter_504[apOther->owner->which_player] > 0) { return; } +bool daMegaGoomba_c::collisionCat7_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther) { + if (this->counter_504[apOther->owner->which_player] > 0) { return false; } VEC2 eSpeed = {speed.x, speed.y}; killWithSpecifiedState(apOther->owner, &eSpeed, &dEn_c::StateID_DieOther); + return true; } -void daMegaGoomba_c::collisionCat7_GroundPoundYoshi(ActivePhysics *apThis, ActivePhysics *apOther) { - if (this->counter_504[apOther->owner->which_player] > 0) { return; } - VEC2 eSpeed = {speed.x, speed.y}; - killWithSpecifiedState(apOther->owner, &eSpeed, &dEn_c::StateID_DieOther); +bool daMegaGoomba_c::collisionCat7_GroundPoundYoshi(ActivePhysics *apThis, ActivePhysics *apOther) { + return collisionCat7_GroundPound(apThis, apOther); } -void daMegaGoomba_c::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) {} -bool daMegaGoomba_c::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther) { return false; } -void daMegaGoomba_c::collisionCat3_StarPower(ActivePhysics *apThis, ActivePhysics *apOther) { doStateChange(&StateID_DieFall); } -void daMegaGoomba_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther) { +bool daMegaGoomba_c::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) { + return false; +} +bool daMegaGoomba_c::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther) { + return false; +} +extern "C" void dAcPy_vf3F8(void* player, dEn_c* monster, int t); +bool daMegaGoomba_c::collisionCat3_StarPower(ActivePhysics *apThis, ActivePhysics *apOther) { + if (tryHandleJumpedOn(apThis, apOther) == 0) { + dAcPy_vf3F8(apOther->owner, this, 3); + this->counter_504[apOther->owner->which_player] = 0xA; + } + return true; +} +bool daMegaGoomba_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther) { if(this->takeHit(1)) doStateChange(&StateID_DieFall); + return true; } -void daMegaGoomba_c::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther) { +bool daMegaGoomba_c::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther) { if(this->takeHit(1)) doStateChange(&StateID_DieFall); + return true; } -void daMegaGoomba_c::collisionCatD_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther) { } -void daMegaGoomba_c::collisionCat11_PipeCannon(ActivePhysics *apThis, ActivePhysics *apOther) {} -void daMegaGoomba_c::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther) {} -void daMegaGoomba_c::collisionCat14_YoshiFire(ActivePhysics *apThis, ActivePhysics *apOther) { +bool daMegaGoomba_c::collisionCatD_Drill(ActivePhysics *apThis, ActivePhysics *apOther) { + return collisionCat7_GroundPound(apThis, apOther); +} +bool daMegaGoomba_c::collisionCat11_PipeCannon(ActivePhysics *apThis, ActivePhysics *apOther) { + return true; +} +bool daMegaGoomba_c::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther) { + return true; +} +bool daMegaGoomba_c::collisionCat14_YoshiFire(ActivePhysics *apThis, ActivePhysics *apOther) { if(this->takeHit(1)) doStateChange(&StateID_DieFall); + return true; } void daMegaGoomba_c::addScoreWhenHit(void *other) {} -void daMegaGoomba_c::_vf120(ActivePhysics *apThis, ActivePhysics *apOther) { } -void daMegaGoomba_c::_vf110(ActivePhysics *apThis, ActivePhysics *apOther) { } -void daMegaGoomba_c::_vf108(ActivePhysics *apThis, ActivePhysics *apOther) { } +bool daMegaGoomba_c::_vf120(ActivePhysics *apThis, ActivePhysics *apOther) { + return true; // Replicate existing broken behaviour +} +bool daMegaGoomba_c::_vf110(ActivePhysics *apThis, ActivePhysics *apOther) { + return true; // Replicate existing broken behaviour +} +bool daMegaGoomba_c::_vf108(ActivePhysics *apThis, ActivePhysics *apOther) { + return true; // Replicate existing broken behaviour +} void daMegaGoomba_c::bindAnimChr_and_setUpdateRate(const char* name, int unk, float unk2, float rate) { nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr(name); |