summaryrefslogtreecommitdiff
path: root/src/bossMegaGoomba.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bossMegaGoomba.cpp')
-rw-r--r--src/bossMegaGoomba.cpp141
1 files changed, 110 insertions, 31 deletions
diff --git a/src/bossMegaGoomba.cpp b/src/bossMegaGoomba.cpp
index 65bbdb2..e6c2b0b 100644
--- a/src/bossMegaGoomba.cpp
+++ b/src/bossMegaGoomba.cpp
@@ -14,7 +14,6 @@ class daMegaGoomba_c : public dEn_c {
m3d::mdl_c bodyModel;
float timer;
- nw4r::ut::Rect Bounding;
float dying;
HermiteKey keysX[0x10];
@@ -25,6 +24,35 @@ class daMegaGoomba_c : public dEn_c {
// unsigned int Zkey_count;
char life;
+
+ //TODO use these for MegaGecko testing of params
+ u32 marker1_start;
+ nw4r::ut::Rect Bounding;
+ u32 marker1_end;
+ 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;
+ u32 marker9_end;
+
bool takeHit(char count);
void dieFall_Execute();
@@ -192,18 +220,45 @@ int daMegaGoomba_c::onCreate() {
this->aPhysics.initWithStruct(this, &HitMeBaby);
this->aPhysics.addToList();
- pos.y -= 20.0;
+ pos.y -= 16.0;
pos.z = 3000.0;
rot.x = rot.y = rot.z = speed.x = dying = 0.0;
direction = 0;
life = 3;
//TODO 1) allow setting bounding rect with settings
//TODO 2) don't use bounding rect. use wall/floor/ceiling detection
- Bounding.left = pos.x - 350.0;
+ Bounding.left = pos.x - 212.0;
Bounding.top = pos.y + 500.0;
- Bounding.right = pos.x + 350.0;
+ Bounding.right = pos.x + 212.0;
Bounding.bottom = pos.y;
+ //TODO for tests
+ this->marker1_start = 0xaabbcc11;
+ 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?
+ this->JumpHeight = 48.0;
+ this->JumpDist = 64.0;
+ this->JumpTime = 50.0;
+ this->playIt = 0;
+ this->toPlay = 0;
+
OSReport("Setting MegaGoomba's State\n");
doStateChange(&StateID_Grow);
@@ -241,21 +296,23 @@ int daMegaGoomba_c::onDraw() {
void daMegaGoomba_c::updateModelMatrices() {
// Bounds checking
// TODO possibly change to a state change
- if(this->pos.x < this->Bounding.left) {
- this->direction = !this->direction;
- this->speed.x = -this->speed.x;
- this->pos.x = this->Bounding.left;
- } else if (this->pos.x > this->Bounding.right) {
- this->direction = !this->direction;
- this->speed.x = -this->speed.x;
- this->pos.x = this->Bounding.right;
- }
- if(this->pos.y < this->Bounding.bottom) {
- this->speed.y = 0.0;
- this->pos.y = this->Bounding.bottom;
- } else if (this->pos.y > this->Bounding.top) {
- this->speed.y = 0.0;
- this->pos.y = this->Bounding.bottom;
+ if(this->life > 0) {
+ if(this->pos.x < this->Bounding.left) {
+ this->direction = !this->direction;
+ this->speed.x = -this->speed.x;
+ this->pos.x = this->Bounding.left;
+ } else if (this->pos.x > this->Bounding.right) {
+ this->direction = !this->direction;
+ this->speed.x = -this->speed.x;
+ this->pos.x = this->Bounding.right;
+ }
+ if(this->pos.y < this->Bounding.bottom) {
+ this->speed.y = 0.0;
+ this->pos.y = this->Bounding.bottom;
+ } else if (this->pos.y > this->Bounding.top) {
+ this->speed.y = 0.0;
+ this->pos.y = this->Bounding.bottom;
+ }
}
// This won't work with wrap because I'm lazy.
@@ -345,22 +402,34 @@ void daMegaGoomba_c::executeState_Launch() {
this->rot.y = sin(this->timer * 3.14 / 5) * 4000;
dStageActor_c *spawner = NULL;
- // 120ticks / 40numbers * 2cases = 6avg kuribo
- int randChoice = GenerateRandomNumber(40);
+ // 120ticks / 80numbers * 4cases = 6avg kuribo
+ int randChoice = GenerateRandomNumber(80);
int randChoiceX = GenerateRandomNumber(12);
- int randChoiceY = GenerateRandomNumber(12);
+ int randChoiceY = GenerateRandomNumber(7);
switch(randChoice) {
case 0:
case 1:
spawner = CreateActor(EN_KURIBO, 0, this->pos, 0, 0);
spawner->speed.x = randChoiceX - 6.0;
- spawner->speed.y = randChoiceY * 1.0;
+ spawner->speed.y = randChoiceY + 3.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 - 12.0;
- spawner->speed.y = randChoiceY * 1.0;
+ spawner->speed.x = randChoiceX - 6.0;
+ spawner->speed.y = randChoiceY + 3.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 - 6.0;
+ spawner->speed.y = randChoiceY + 3.0;
+ spawner->scale = (Vec){1.0, 1.0, 1.0};
+ break;
+ case 4:
+ spawner = CreateActor(EN_MAME_KURIBO, 0, this->pos, 0, 0);
+ spawner->speed.x = randChoiceX - 6.0;
+ spawner->speed.y = randChoiceY + 3.0;
spawner->scale = (Vec){1.0, 1.0, 1.0};
break;
default:
@@ -380,9 +449,9 @@ void daMegaGoomba_c::beginState_Jump() {
this->timer = 1.0;
//Variables for choosing a curve
- float jump_height = 36.0;
- float delta = (this->direction) ? -24.0 : 24.0;
- float fullTime = 90.0;
+ float jump_height = this->JumpHeight;
+ float delta = (this->direction) ? -JumpDist : JumpDist;
+ float fullTime = this->JumpTime;
//Key count
Xkey_count = 2;
Ykey_count = 3;
@@ -404,7 +473,7 @@ 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 = 91.0;
+ float TimerMax = JumpTime + 1.0;
if (this->timer > TimerMax) {
doStateChange(&StateID_Walk);
}
@@ -423,14 +492,24 @@ void daMegaGoomba_c::beginState_Walk() {
}
void daMegaGoomba_c::executeState_Walk() {
- float delta = (this->direction) ? -0.5 : 0.5;
+ float delta = (this->direction) ? -this->XSpeed : this->XSpeed;
this->pos.x += delta;
int Choice;
float TimerMax = 150.0;
if (this->timer > TimerMax) {
- Choice = GenerateRandomNumber(4);
+ if(this->pickedChoice != -1) {
+ Choice = this->pickedChoice;
+ /*
+ if(this->playIt = 1) {
+ playSound(this->toPlay);
+ this->playIt = 0;
+ }
+ */
+ } else {
+ Choice = GenerateRandomNumber(4);
+ }
switch(Choice) {
case 0:
doStateChange(&StateID_Jump);