diff options
-rw-r--r-- | src/bossMegaGoomba.cpp | 303 |
1 files changed, 11 insertions, 292 deletions
diff --git a/src/bossMegaGoomba.cpp b/src/bossMegaGoomba.cpp index cd20c4d..2dcc3d7 100644 --- a/src/bossMegaGoomba.cpp +++ b/src/bossMegaGoomba.cpp @@ -70,19 +70,12 @@ class daMegaGoomba_c : public dEn_c { void removeMyActivePhysics(); void addMyActivePhysics(); - // bool preSpriteCollision(ActivePhysics *apThis, ActivePhysics *apOther); - // bool prePlayerCollision(ActivePhysics *apThis, ActivePhysics *apOther); -// bool preYoshiCollision(ActivePhysics *apThis, ActivePhysics *apOther); - -// bool stageActorCollision(ActivePhysics *apThis, ActivePhysics *apOther); void spriteCollision(ActivePhysics *apThis, ActivePhysics *apOther); void playerCollision(ActivePhysics *apThis, ActivePhysics *apOther); -// void yoshiCollision(ActivePhysics *apThis, ActivePhysics *apOther); void 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 collisionCat5_Mario(ActivePhysics *apThis, ActivePhysics *apOther); void collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther); void collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther); void collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther); @@ -100,15 +93,9 @@ class daMegaGoomba_c : public dEn_c { void dieOther_End(); USING_STATES(daMegaGoomba_c); - // DECLARE_STATE(Grow); DECLARE_STATE(Shrink); DECLARE_STATE(Walk); DECLARE_STATE(Turn); - // DECLARE_STATE(Jump); - // DECLARE_STATE(Launch); - - // DECLARE_STATE(Kameck); - // DECLARE_STATE(Outro); }; @@ -146,36 +133,17 @@ void setNewActivePhysicsRect(daMegaGoomba_c *actor, Vec *scale) { actor->adjacentSensor.x = s32((amtX * 32.0f) * 4096.0f); actor->adjacentSensor.y = s32((amtY * 22.0f) * 4096.0f); - // 0, 20.0, 18.0, 20.0 - ActivePhysics::Info info; - // info.xDistToCenter = 0.0; - // info.yDistToCenter = 7.65 * amtY; - // info.xDistToEdge = 8.0 * amtX; - // info.yDistToEdge = 8.7 * amtY; - - info.xDistToCenter = 0.0f; - info.yDistToCenter = 57.0f * amtY; - info.xDistToEdge = 14.0f * amtX; - info.yDistToEdge = 32.0f * 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; - - /*actor->aPhysics.trpValue0 = amtX * -12.0f; - actor->aPhysics.trpValue1 = amtX * 12.0f; - actor->aPhysics.trpValue2 = amtX * -48.0f; - actor->aPhysics.trpValue3 = amtX * 48.0f;*/ + u8 cat1 = 3, cat2 = 0, bitfield1 = 0x6f, bitfield2 = 0xffbafffe; + ActivePhysics::Info info = { + 0.0f, amtY*57.0f, amtX*14.0f, amtY*31.0f, + cat1, cat2, bitfield1, bitfield2, 0, &dEn_c::collisionCallback}; actor->aPhysics.initWithStruct(actor, &info); // Original trapezium was -12,12 to -48,48 ActivePhysics::Info left = { amtX*-28.0f, amtY*56.0f, amtX*14.0f, amtY*31.0f, - 3, 0, 0x6f, 0xffbafffe, 0, &dEn_c::collisionCallback}; + cat1, cat2, bitfield1, bitfield2, 0, &dEn_c::collisionCallback}; actor->leftTrapAPhysics.initWithStruct(actor, &left); actor->leftTrapAPhysics.trpValue0 = amtX * 14.0f; actor->leftTrapAPhysics.trpValue1 = amtX * 14.0f; @@ -185,7 +153,7 @@ void setNewActivePhysicsRect(daMegaGoomba_c *actor, Vec *scale) { ActivePhysics::Info right = { amtX*28.0f, amtY*56.0f, amtX*14.0f, amtY*31.0f, - 3, 0, 0x6f, 0xffbafffe, 0, &dEn_c::collisionCallback}; + cat1, cat2, bitfield1, bitfield2, 0, &dEn_c::collisionCallback}; actor->rightTrapAPhysics.initWithStruct(actor, &right); actor->rightTrapAPhysics.trpValue0 = amtX * -14.0f; actor->rightTrapAPhysics.trpValue1 = amtX * -14.0f; @@ -195,7 +163,7 @@ void setNewActivePhysicsRect(daMegaGoomba_c *actor, Vec *scale) { ActivePhysics::Info stalk = { 0.0f, amtY*12.0f, amtX*28.0f, amtY*12.0f, - 3, 0, 0x6f, 0xffbafffe, 0, &dEn_c::collisionCallback}; + cat1, cat2, bitfield1, bitfield2, 0, &dEn_c::collisionCallback}; actor->stalkAPhysics.initWithStruct(actor, &stalk); } @@ -207,13 +175,9 @@ extern "C" void DoStuffAndMarkDead(dStageActor_c *actor, Vec vector, float unk); extern "C" int SmoothRotation(short* rot, u16 amt, int unk2); -// CREATE_STATE(daMegaGoomba_c, Grow); CREATE_STATE(daMegaGoomba_c, Shrink); CREATE_STATE(daMegaGoomba_c, Walk); CREATE_STATE(daMegaGoomba_c, Turn); -// CREATE_STATE(daMegaGoomba_c, Jump); -// CREATE_STATE(daMegaGoomba_c, Launch); -// CREATE_STATE(daMegaGoomba_c, Outro); //TODO better fix for possible bug with sign (ex. life=120; count=-9;) @@ -281,16 +245,12 @@ void daMegaGoomba_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOth //char ret = usedForDeterminingStatePress_or_playerCollision(this, apThis, apOther, 0); char ret = usedForDeterminingStatePress_or_playerCollision(this, apThis, apOther, 2); -// OSReport("I hate my life: %d\n", ret); if(ret == 1) { // regular jump apOther->someFlagByte |= 2; if(this->takeHit(1)) { // kill me VEC2 eSpeed = {speed.x, speed.y}; - OSReport("I'M DYING\n"); - OSReport("State: %s\n", acState.getCurrentState()->getName()); killWithSpecifiedState(apOther->owner, &eSpeed, &dEn_c::StateID_DieOther); - OSReport("State: %s\n", acState.getCurrentState()->getName()); } } else if(ret == 3) { // spinning apOther->someFlagByte |= 2; @@ -302,28 +262,16 @@ void daMegaGoomba_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOth } else if(ret == 2) { } else { } - - //this->flags_4FC |= (1<<(31-7)); } void daMegaGoomba_c::collisionCat7_WMWaggleWater(ActivePhysics *apThis, ActivePhysics *apOther) { - OSReport("Ground Pounded"); apOther->someFlagByte |= 2; if(this->takeHit(1)) doStateChange(&StateID_DieFall); - - // dEn_c *mario = (dEn_c*)apOther->owner; - // mario->speed.y = 6.0; - - // EN_LandbarrelPlayerCollision(this, apThis, apOther); - - // mario->speed.x += 16.0; - //this->flags_4FC |= (1<<(31-7)); } 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::collisionCat5_Mario(ActivePhysics *apThis, ActivePhysics *apOther) { } void daMegaGoomba_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther) { if(this->takeHit(1)) doStateChange(&StateID_DieFall); @@ -404,11 +352,6 @@ void daMegaGoomba_c::setupCollision() { this->_518 = 2; - this->aPhysics.info.xDistToCenter = 0.0; - this->aPhysics.info.yDistToCenter = 12.0; - this->aPhysics.info.xDistToEdge = 14.0; - this->aPhysics.info.yDistToEdge = 12.0; - //NOT NEEDED //this->doStateChange(&StateID_Walk); } @@ -424,30 +367,9 @@ int daMegaGoomba_c::onCreate() { isBigBoss = this->settings & 0xF; this->animationChr.setCurrentFrame(69.0); - ActivePhysics::Info hm; - hm.xDistToCenter = 0.0; - hm.yDistToCenter = 8.0; - hm.xDistToEdge = 12.0; - hm.yDistToEdge = 12.0; - hm.category1 = 0x3; - hm.category2 = 0x0; - hm.bitfield1 = 0x6f; - hm.bitfield2 = 0xffbafffe; - hm.unkShort1C = 0; - hm.callback = &dEn_c::collisionCallback; - this->aPhysics.initWithStruct(this, &hm); - this->aPhysics.addToList(); - - ActivePhysics::Info stalk = { - 0.0f, 24.0f, 32.0f, 22.0f, - 3, 0, 0x6f, 0xffbafffe, 0, &dEn_c::collisionCallback}; - stalkAPhysics.initWithStruct(this, &stalk); + aPhysics.addToList(); stalkAPhysics.addToList(); - - // for dummy purposes, we'll replace the info later - leftTrapAPhysics.initWithStruct(this, &stalk); leftTrapAPhysics.addToList(); - rightTrapAPhysics.initWithStruct(this, &stalk); rightTrapAPhysics.addToList(); this->_120 |= 0x200; @@ -472,9 +394,9 @@ int daMegaGoomba_c::onCreate() { // doStateChange(&StateID_Grow); - scale.x = 4.0; - scale.y = 4.0; - scale.z = 4.0; + scale.x = 4.0f; + scale.y = 4.0f; + scale.z = 4.0f; setNewActivePhysicsRect(this, &this->scale); doStateChange(&StateID_Walk); @@ -487,17 +409,9 @@ int daMegaGoomba_c::onDelete() { } int daMegaGoomba_c::onExecute() { - // what state am I in? -// OSReport("State for %p: %s\n", this, acState.getCurrentState()->getName()); //80033450 acState.execute(); - //if(CheckSomethingEnemyRelated()) // checks class1EC bitfield - // sub_80033f10(this); // spawn hit effect and play hit sound - //else - // dStageActor_c__checkZoneBoundaries(this, 0); - //// dont do updateModelMatrices //// checkZoneBoundaries(0); - updateModelMatrices(); return true; @@ -505,11 +419,6 @@ int daMegaGoomba_c::onExecute() { int daMegaGoomba_c::onDraw() { bodyModel.scheduleForDrawing(); - - //DONT DO REST HERE// -#if 0 - bodyModel._vf1C(); -#endif return true; } @@ -524,71 +433,6 @@ void daMegaGoomba_c::updateModelMatrices() { bodyModel.calcWorld(false); } -/////////////// -// Grow State -/////////////// - // void daMegaGoomba_c::beginState_Grow() { - // this->timer = 0; - - // SetupKameck(this, Kameck); - // } - - // void daMegaGoomba_c::executeState_Grow() { - // this->timer += 1; - - // bool ret; - // // ret = GrowBoss(this, Kameck, 1.0, 16.0, 0, this->timer); - // ret = GrowBoss(this, Kameck, 1.0, 5.0, 0, this->timer); - - // if (ret) { - // setNewActivePhysicsRect(this, &this->scale); - // PlaySound(this, SE_EMY_KURI_CHANGE_BIG); - // doStateChange(&StateID_Walk); - // } - // } - // void daMegaGoomba_c::endState_Grow() { - // CleanupKameck(this, Kameck); - // } - - // Grow State - // void daMegaGoomba_c::beginState_Grow() { - // this->timer = 1.0; - - // float start, end, shift1, shift2; - // start = 59.0; - // shift1 = 90.0; - // shift2 = 120.0; - // end = 139.0; - // /* keysX[i] = { frame, value, slope }; */ - // Xkey_count = 7; - // keysX[0] = (HermiteKey){ start, 1.0, 1.0 }; - // keysX[1] = (HermiteKey){ (start+shift1)/2, 2.0, 1.0 }; - // keysX[2] = (HermiteKey){ shift1, 4.0, 1.0 }; - // keysX[3] = (HermiteKey){ (shift1+shift2)/2, 3.0, 1.0 }; - // keysX[3] = (HermiteKey){ shift2, 6.0, 1.0 }; - // keysX[3] = (HermiteKey){ (shift2+end)/2, 5.0, 1.0 }; - // keysX[6] = (HermiteKey){ end, 7.0, 1.0 }; - // } - // void daMegaGoomba_c::executeState_Grow() { - - // this->timer += 1.0; - - // if ((this->timer > 60.0) && (this->timer < 140.0)) { - - // float modifier = GetHermiteCurveValue(this->timer, this->keysX, Xkey_count); - // this->scale = (Vec){modifier, modifier, modifier}; - // setNewActivePhysicsRect(this, &this->scale); - - // } - // if(this->timer == 60.0) - // PlaySound(this, SE_EMY_KURI_CHANGE_BIG); - - // if (this->timer > 170.0) { doStateChange(&StateID_Walk); } - - // } - // void daMegaGoomba_c::endState_Grow() { } - - // Shrink State @@ -623,96 +467,6 @@ void daMegaGoomba_c::endState_Shrink() { -// Launch State - Launches some small goombas up in arcs - // void daMegaGoomba_c::beginState_Launch() { - // this->timer = 0.0; - // rot.y = 0x0; - // } - // void daMegaGoomba_c::executeState_Launch() { - - // if (this->timer < 120.0) { - // // 3 shakes per second, exactly 24 shakes overall - // this->rot.y = sin(this->timer * 3.14 / 5) * 4000; - - // dStageActor_c *spawner = NULL; - // // 120ticks / 120numbers * 3cases = 3avg kuribo - // int randChoice = GenerateRandomNumber(120); - // int randChoiceX = GenerateRandomNumber(10); - // int randChoiceY = GenerateRandomNumber(7); - // switch(randChoice) { - // case 0: - // case 1: - // spawner = CreateActor(EN_KURIBO, 0, this->pos, 0, 0); - // spawner->speed.x = randChoiceX - 5.0; - // spawner->speed.y = randChoiceY + 6.0; - // spawner->scale = (Vec){1.0, 1.0, 1.0}; - // break; - // case 2: - // spawner = CreateActor(EN_BEANS_KURIBO, 0, this->pos, 0, 0); - // spawner->speed.x = randChoiceX - 5.0; - // spawner->speed.y = randChoiceY + 6.0; - // spawner->scale = (Vec){1.0, 1.0, 1.0}; - // break; - // case 3: - // spawner = CreateActor(EN_PATA_KURIBO, 0, this->pos, 0, 0); - // spawner->speed.x = randChoiceX - 5.0; - // spawner->speed.y = randChoiceY + 6.0; - // spawner->scale = (Vec){1.0, 1.0, 1.0}; - // break; - // default: - // break; - // }; - // } - - // if (this->timer > 150.0) { doStateChange(&StateID_Walk); } - // this->timer = this->timer + 1.0; - // } - // void daMegaGoomba_c::endState_Launch() { - // //rot.y = (this->direction) ? 0xe000 : 0x2000; - // } - -// Jump State - // void daMegaGoomba_c::beginState_Jump() { - // this->timer = 1.0; - - // //Variables for choosing a curve - // float jump_height = this->JumpHeight; - // float delta = (this->direction) ? -JumpDist : JumpDist; - // float fullTime = this->JumpTime; - // //Key count - // Xkey_count = 2; - // Ykey_count = 3; - - // //Initial Position - // keysX[0] = (HermiteKey){ 0.0, this->pos.x, 0.0 }; - // keysY[0] = (HermiteKey){ 0.0, this->pos.y, 0.8 }; - - // //Middle Position - // keysY[1] = (HermiteKey){ (fullTime/2.0), this->pos.y + jump_height, 0.0 }; - - // //End Position - // keysX[1] = (HermiteKey){ fullTime, this->pos.x + delta, 0.0 }; - // keysY[2] = (HermiteKey){ fullTime, this->pos.y, 0.8 }; - - // // using this to stop walk animation - // this->animationChr.setCurrentFrame(900.0); - // } - // void daMegaGoomba_c::executeState_Jump() { - - // this->pos.x = GetHermiteCurveValue(this->timer, this->keysX, Xkey_count); - // this->pos.y = GetHermiteCurveValue(this->timer, this->keysY, Ykey_count); - - // float TimerMax = JumpTime + 1.0; - // if (this->timer > TimerMax) { - // doStateChange(&StateID_Walk); - // } - - // this->timer = this->timer + 1.0; - - // } - // void daMegaGoomba_c::endState_Jump() { } - - // Turn State void daMegaGoomba_c::beginState_Turn() { this->direction ^= 1; @@ -824,41 +578,6 @@ void daMegaGoomba_c::endState_Walk() { } -/////////////// -// Outro State -/////////////// - // void daMegaGoomba_c::beginState_Outro() { - - // OutroSetup(this); - // this->aPhysics.removeFromList(); - // } - // void daMegaGoomba_c::executeState_Outro() { - - // if (this->dying == 1) { - - // if (this->timer > 180) { ExitStage(WORLD_MAP, 0, BEAT_LEVEL, MARIO_WIPE); } - // if (this->timer == 60) { PlayerVictoryCries(this); } - - // this->timer += 1; - // return; - // } - - // bool ret; - // ret = ShrinkBoss(this, &this->pos, 1.0, this->timer); - - // if (ret == true) { - // BossExplode(this, &this->pos); - // this->dying = 1; - // this->timer = 0; - // } - // else { PlaySound(this, SE_EMY_BIG_KURIBO_DOWN); } - - // this->timer += 1; - // } - // void daMegaGoomba_c::endState_Outro() { } - - - extern "C" void stunPlayer(void *, int); extern "C" void unstunPlayer(void *); |