summaryrefslogtreecommitdiff
path: root/src/bossMegaGoomba.cpp
diff options
context:
space:
mode:
authorStephen Simpson <megazig@gmail.com>2011-10-14 00:33:51 -0500
committerStephen Simpson <megazig@gmail.com>2011-10-14 00:33:51 -0500
commit48713b7a405c95022e85f4cf5ce7c27363815d74 (patch)
treee15dd9b056a8991365506bf085c4086de19e0d7c /src/bossMegaGoomba.cpp
parent9098cb8b28c089d8abe1b2ff7d9010ab5c6d8766 (diff)
downloadkamek-48713b7a405c95022e85f4cf5ce7c27363815d74.tar.gz
kamek-48713b7a405c95022e85f4cf5ce7c27363815d74.zip
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.
Diffstat (limited to '')
-rw-r--r--src/bossMegaGoomba.cpp134
1 files changed, 47 insertions, 87 deletions
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 <common.h>
#include <game.h>
#include <g3dhax.h>
+#include <sfx.h>
#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;
};