summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
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;
};