From 48713b7a405c95022e85f4cf5ce7c27363815d74 Mon Sep 17 00:00:00 2001 From: Stephen Simpson Date: Fri, 14 Oct 2011 00:33:51 -0500 Subject: Got working anmPat animations. anmChr needs fixing added rotation to MegaGoomba based on direction. added eyes blinking to MegaGoomba. added speed and jump changes based on how many hits MG has taken. --- src/bossMegaGoomba.cpp | 134 +++++++++++++++++-------------------------------- 1 file changed, 47 insertions(+), 87 deletions(-) (limited to 'src') diff --git a/src/bossMegaGoomba.cpp b/src/bossMegaGoomba.cpp index 8d4d19a..e836afb 100644 --- a/src/bossMegaGoomba.cpp +++ b/src/bossMegaGoomba.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include "player.h" @@ -27,8 +28,6 @@ class daMegaGoomba_c : public dEn_c { unsigned int Xkey_count; HermiteKey keysY[0x10]; unsigned int Ykey_count; -// HermiteKey keysZ[0x10]; -// unsigned int Zkey_count; char life; @@ -39,27 +38,10 @@ class daMegaGoomba_c : public dEn_c { u32 marker2_start; int pickedChoice; u32 marker2_end; - u32 marker3_start; float XSpeed; - u32 marker3_end; - u32 marker4_start; float JumpHeight; - u32 marker4_end; - u32 marker5_start; float JumpDist; - u32 marker5_end; - u32 marker6_start; float JumpTime; - u32 marker6_end; - u32 marker7_start; - int playIt; - u32 marker7_end; - u32 marker8_start; - int toPlay; - u32 marker8_end; - u32 marker9_start; - bool timeToPlay; - u32 marker9_end; bool takeHit(char count); @@ -100,14 +82,14 @@ class daMegaGoomba_c : public dEn_c { DECLARE_STATE(Launch); }; -//extern "C" void *PlaySound(dStageActor_c *, int soundID); - daMegaGoomba_c *daMegaGoomba_c::build() { void *buffer = AllocFromGameHeap1(sizeof(daMegaGoomba_c)); return new(buffer) daMegaGoomba_c; } +extern "C" void *PlaySound(daMegaGoomba_c *, int soundID); + //FIXME makes these dEn_c::HandleXSpeed(); extern "C" void *HandleXSpeed(daMegaGoomba_c *); extern "C" void *HandleYSpeed(daMegaGoomba_c *); @@ -133,6 +115,10 @@ bool daMegaGoomba_c::takeHit(char count) { c = 127 - l; } this->life -= c; + this->XSpeed += 0.25; + this->JumpHeight += 12.0; + this->JumpDist += 12.0; + this->JumpTime += 5.0; doStateChange(&StateID_Shrink); setNewActivePhysicsRect(this, &this->scale); return (life <= 0) ? true : false; @@ -219,39 +205,25 @@ void HexDump(char* address, u32 length) { } void daMegaGoomba_c::setupBodyModel() { - OSReport("Here 0\n"); allocator.link(-1, GameHeaps[0], 0, 0x20); - OSReport("Here 1\n"); this->resFile.data = getResource("kuribo", "g3d/t02.brres"); nw4r::g3d::ResMdl mdl = this->resFile.GetResMdl("kuribo"); - HexDump((char*)&mdl, 0x10); bodyModel.setup(mdl, &allocator, 0x224, 1, 0); SetupTextures_Enemy(&bodyModel, 0); bool ret; - OSReport("Here 2\n"); nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("walk"); - HexDump((char*)&anmChr, 0x10); - - OSReport("Here 3\n"); ret = this->animationChr.setup(mdl, anmChr, &this->allocator, 0); - OSReport("Here 4\n"); nw4r::g3d::ResAnmTexPat anmPat = this->resFile.GetResAnmTexPat("walk"); - HexDump((char*)&anmPat, 0x10); - - OSReport("Here 5\n"); this->resTexPat = anmPat; - - OSReport("Here 6\n"); ret = this->animationPat.setup(mdl, anmPat, &this->allocator, 0, 1); - - OSReport("Here 7\n"); this->animationPat.bindEntry(&this->bodyModel, &anmPat, 0, 0); + this->bodyModel.bindAnim(&this->animationPat, 1.0); + this->animationPat.setFrameForEntry(1.0, 0); - OSReport("Here 8\n"); allocator.unlink(); } @@ -282,7 +254,9 @@ int daMegaGoomba_c::onCreate() { //FIXME move this stuff elsewhere pos.y -= 16.0; pos.z = 3000.0; - rot.x = rot.y = rot.z = speed.x = dying = 0.0; + speed.x = dying = 0.0; + rot.x = rot.z = 0; + rot.y = 0x2000; // 0x2000 is left. 0xe000 is for right. direction = 0; life = 3; //TODO 1) allow setting bounding rect with settings @@ -297,28 +271,13 @@ int daMegaGoomba_c::onCreate() { this->marker1_end = 0xaabbff11; this->marker2_start = 0xaabbcc12; this->marker2_end = 0xaabbff12; - this->marker3_start = 0xaabbcc13; - this->marker3_end = 0xaabbff13; - this->marker4_start = 0xaabbcc14; - this->marker4_end = 0xaabbff14; - this->marker5_start = 0xaabbcc15; - this->marker5_end = 0xaabbff15; - this->marker6_start = 0xaabbcc16; - this->marker6_end = 0xaabbff16; - this->marker7_start = 0xaabbcc17; - this->marker7_end = 0xaabbff17; - this->marker8_start = 0xaabbcc18; - this->marker8_end = 0xaabbff18; - this->marker9_start = 0xaabbcc19; - this->marker9_end = 0xaabbff19; + this->pickedChoice = -1; - this->XSpeed = 2.0; // GOOD FOR FINAL SPEED? + // 2.0 is good final speed + this->XSpeed = 1.5; this->JumpHeight = 48.0; this->JumpDist = 64.0; this->JumpTime = 50.0; - this->playIt = 0; - this->toPlay = 0; - this->timeToPlay = false; OSReport("Setting MegaGoomba's State\n"); doStateChange(&StateID_Grow); @@ -350,6 +309,8 @@ int daMegaGoomba_c::onExecute() { int daMegaGoomba_c::onDraw() { bodyModel.scheduleForDrawing(); + animationChr.process(); + animationPat.process(); return true; } @@ -360,10 +321,12 @@ void daMegaGoomba_c::updateModelMatrices() { if(this->life > 0) { if(this->pos.x < this->Bounding.left) { this->direction = !this->direction; + rot.y = (this->direction) ? 0xe000 : 0x2000; this->speed.x = -this->speed.x; this->pos.x = this->Bounding.left; } else if (this->pos.x > this->Bounding.right) { this->direction = !this->direction; + rot.y = (this->direction) ? 0xe000 : 0x2000; this->speed.x = -this->speed.x; this->pos.x = this->Bounding.right; } @@ -416,9 +379,8 @@ void daMegaGoomba_c::executeState_Grow() { setNewActivePhysicsRect(this, &this->scale); } - //TODO grow sound - //if(this->timer == 60.0) - // PlaySound(this, SE_GROW); + if(this->timer == 60.0) + PlaySound(this, SE_EMY_KURI_CHANGE_BIG); if (this->timer > 170.0) { doStateChange(&StateID_Walk); } @@ -442,9 +404,8 @@ void daMegaGoomba_c::executeState_Shrink() { this->scale = (Vec){modifier, modifier, modifier}; setNewActivePhysicsRect(this, &this->scale); - //TODO shrink sound - //if(this->timer == 2.0) - // PlaySound(this, SE_SHRINK); + if(this->timer == 2.0) + PlaySound(this, SE_EMY_KURIBO_L_DAMAGE_02); if (this->timer > 60.0) { doStateChange(&StateID_Walk); } } @@ -496,7 +457,7 @@ void daMegaGoomba_c::executeState_Launch() { this->timer = this->timer + 1.0; } void daMegaGoomba_c::endState_Launch() { - this->rot.y = 0; + rot.y = (this->direction) ? 0xe000 : 0x2000; } // Jump State @@ -543,23 +504,36 @@ void daMegaGoomba_c::endState_Jump() { } void daMegaGoomba_c::beginState_Walk() { this->timer = 1.0; this->direction = dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(this, this->pos); - //TODO add rot.changing on switching directions until animations added + rot.y = (this->direction) ? 0xe000 : 0x2000; - // DO SOMETHING COOL // - OSReport("Here11\n"); + //SETUP WALK ANIMATION// nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("walk"); - OSReport("Here12\n"); this->animationChr.bind(&this->bodyModel, anmChr, 0); - OSReport("Here13\n"); - this->bodyModel.bindAnim(&this->animationChr, 1.0); - OSReport("Here14\n"); + this->bodyModel.bindAnim(&this->animationChr, 2.0); + /*this->animationChr._setUpdateRate(2.0); FIXME*/ + this->bodyModel.bindAnim(&this->animationPat, 0.0); + this->animationPat.setUpdateRateForEntry(1.0, 0); + this->animationPat.setEntryByte34(0, 0); + float num = (float)GenerateRandomNumber(0xB4); + this->animationPat.setFrameForEntry(num, 0); } void daMegaGoomba_c::executeState_Walk() { + /* + nw4r::g3d::ResMdl mdl* = this->bodyModel.GetResMdl(); + ResNode resNode = mdl->GetResNode("leg_left"); + resNode._C; + mMtx mtx; + this->bodyModel.GetSomeMatrix(resNode._C, &mtx); + Vec vctr; + ConvertMatrixToTranslationVector(&mtx, &vctr); + */ //HandleAcceleration(this); - HandleXSpeed(this); - UpdateObjectPosBasedOnSpeedValues_real(this); + //HandleXSpeed(this); + //UpdateObjectPosBasedOnSpeedValues_real(this); //DoGravityMaybe(); + float delta = (this->direction) ? -this->XSpeed : this->XSpeed; + this->pos.x += delta; int Choice; float TimerMax = 150.0; @@ -577,23 +551,9 @@ void daMegaGoomba_c::executeState_Walk() { case 1: doStateChange(&StateID_Launch); break; - case 2: - break; - //FIXME test case for sound effects - case 3: - //OSReport("PlaySound(this, %d)\n", this->toPlay); - if(this->timeToPlay) { - //PlaySound(this, this->toPlay); - this->timeToPlay = false; - this->toPlay++; - if(this->toPlay > 1977) - this->toPlay = 0; - } else { - this->timeToPlay = true; - } - break; default: this->direction = dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(this, pos); + rot.y = (this->direction) ? 0xe000 : 0x2000; this->timer = 0; break; }; -- cgit v1.2.3