summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bossBalboaWrench.cpp34
-rw-r--r--src/bossMegaGoomba.cpp7
-rw-r--r--src/bossPodouble.cpp57
-rw-r--r--src/bossRamboo.cpp5
-rw-r--r--src/bossSamurshai.cpp13
-rw-r--r--src/bossTopman.cpp12
-rw-r--r--src/shyguyGiants.cpp37
7 files changed, 80 insertions, 85 deletions
diff --git a/src/bossBalboaWrench.cpp b/src/bossBalboaWrench.cpp
index 1cea253..fe53a17 100644
--- a/src/bossBalboaWrench.cpp
+++ b/src/bossBalboaWrench.cpp
@@ -36,6 +36,7 @@ class daBalboa_c : public daBoss {
void updateModelMatrices();
void bindAnimChr_and_setUpdateRate(const char* name, int unk, float unk2, float rate);
+ bool prePlayerCollision(ActivePhysics *apThis, ActivePhysics *apOther);
void playerCollision(ActivePhysics *apThis, ActivePhysics *apOther);
bool collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther);
bool collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther);
@@ -43,6 +44,7 @@ class daBalboa_c : public daBoss {
bool collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther);
bool collisionCat7_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther);
bool collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther);
+ bool collisionCatD_Drill(ActivePhysics *apThis, ActivePhysics *apOther);
void addScoreWhenHit(void *other);
@@ -88,28 +90,24 @@ daBalboa_c *daBalboa_c::build() {
void daBalboa_c::addScoreWhenHit(void *other) {}
- void daBalboa_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) {
-
- char ret = usedForDeterminingStatePress_or_playerCollision(this, apThis, apOther, 0);
-
- if(ret == 1) { // regular jump
-
- apOther->someFlagByte |= 0;
-
- } else if(ret == 3) { // spinning
+bool daBalboa_c::prePlayerCollision(ActivePhysics *apThis, ActivePhysics *apOther) {
+ if (apOther->owner->stageActorType == 1) {
+ if (apOther->info.category2 == 7) {
+ if (collisionCat7_GroundPound(apThis, apOther))
+ return true;
+ }
+ }
- apOther->someFlagByte |= 0;
+ return dEn_c::prePlayerCollision(apThis, apOther);
+}
- } else if(ret == 0) {
+ void daBalboa_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) {
- this->dEn_c::playerCollision(apThis, apOther);
- this->_vf220(apOther->owner);
+ char ret = usedForDeterminingStatePress_or_playerCollision(this, apThis, apOther, 0);
- } else if(ret == 2) { // mini Mario
+ if(ret == 0) {
this->dEn_c::playerCollision(apThis, apOther);
this->_vf220(apOther->owner);
-
- } else {
}
//FIXME hack to make multiple playerCollisions work
@@ -146,6 +144,9 @@ daBalboa_c *daBalboa_c::build() {
return true;
}
+ bool daBalboa_c::collisionCatD_Drill(ActivePhysics *apThis, ActivePhysics *apOther) {
+ return collisionCat7_GroundPound(apThis, apOther);
+ }
bool daBalboa_c::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) {
return true;
@@ -160,6 +161,7 @@ daBalboa_c *daBalboa_c::build() {
return true;
}
bool daBalboa_c::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther) {
+ dAcPy_vf3F8(apOther->owner, this, 3);
return true;
}
diff --git a/src/bossMegaGoomba.cpp b/src/bossMegaGoomba.cpp
index 9ea7197..51ee044 100644
--- a/src/bossMegaGoomba.cpp
+++ b/src/bossMegaGoomba.cpp
@@ -270,17 +270,13 @@ int daMegaGoomba_c::tryHandleJumpedOn(ActivePhysics *apThis, ActivePhysics *apOt
EnemyBounceValue = saveBounce;
- if(ret == 1) { // regular jump
+ if(ret == 1 || ret == 3) {
apOther->someFlagByte |= 2;
if(this->takeHit(1)) {
// kill me
VEC2 eSpeed = {speed.x, speed.y};
killWithSpecifiedState(apOther->owner, &eSpeed, &dEn_c::StateID_DieOther);
}
- } else if(ret == 3) { // spinning
- apOther->someFlagByte |= 2;
- if(this->takeHit(1))
- doStateChange(&StateID_DieFall);
}
return ret;
@@ -451,6 +447,7 @@ int daMegaGoomba_c::onCreate() {
}
int daMegaGoomba_c::onDelete() {
+ unstunPlayers();
return true;
}
diff --git a/src/bossPodouble.cpp b/src/bossPodouble.cpp
index dd47463..260ca9d 100644
--- a/src/bossPodouble.cpp
+++ b/src/bossPodouble.cpp
@@ -19,6 +19,8 @@ class daPodouble : public daBoss {
int onExecute();
int onDraw();
+ void updateHitboxSize();
+
mHeapAllocator_c allocator;
nw4r::g3d::ResFile resFile;
@@ -26,6 +28,7 @@ class daPodouble : public daBoss {
m3d::mdl_c fogModel;
m3d::mdl_c fog2Model;
+ m3d::anmChr_c fleeAnimation;
m3d::anmTexSrt_c body;
m3d::anmChr_c fogChr;
@@ -118,12 +121,6 @@ daPodouble *daPodouble::build() {
bool daPodouble::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther) {
apOther->owner->kill();
- if (this->isInvulnerable) { return true; }
-
- this->damage += 2;
-
- if (this->damage < 12) { doStateChange(&StateID_Damage); }
- else { doStateChange(&StateID_Outro); }
return true;
}
@@ -132,7 +129,7 @@ daPodouble *daPodouble::build() {
if (this->isInvulnerable) { return true; }
if (this->isFire == 0) {
- this->damage += 3;
+ this->damage += 4;
if (this->damage < 12) { doStateChange(&StateID_Damage); }
else { doStateChange(&StateID_Outro); }
@@ -158,7 +155,7 @@ daPodouble *daPodouble::build() {
if (this->isFire == 1) {
if (apOther->owner->name == 104) { this->damage += 2; }
- else { this->damage += 3; }
+ else { this->damage += 4; }
if (this->damage < 12) { doStateChange(&StateID_Damage); }
else { doStateChange(&StateID_Outro); }
@@ -169,6 +166,12 @@ daPodouble *daPodouble::build() {
}
+void daPodouble::updateHitboxSize() {
+ aPhysics.info.xDistToEdge = 11.429f * scale.x;
+ aPhysics.info.yDistToEdge = 11.429f * scale.y;
+}
+
+
int daPodouble::onCreate() {
this->isFire = this->settings >> 28;
@@ -187,7 +190,9 @@ int daPodouble::onCreate() {
// Body and anms
nw4r::g3d::ResMdl mdl = this->resFile.GetResMdl("bubble");
+ nw4r::g3d::ResAnmChr shit = resFile.GetResAnmChr(isFire ? "RedFlee" : "BlueFlee");
bodyModel.setup(mdl, &allocator, 0x224, 1, 0);
+ fleeAnimation.setup(mdl, shit, &allocator, 0);
nw4r::g3d::ResAnmTexSrt anmRes = this->resFile.GetResAnmTexSrt("bubble");
this->body.setup(mdl, anmRes, &this->allocator, 0, 1);
@@ -325,7 +330,10 @@ int daPodouble::onDraw() {
bodyModel.calcWorld(false);
bodyModel.scheduleForDrawing();
+ bodyModel._vf1C();
this->body.process();
+ if (acState.getCurrentState() == &StateID_SyncDie)
+ fleeAnimation.process();
return true;
}
@@ -538,6 +546,14 @@ int daPodouble::onDraw() {
this->rot.y = amt;
this->rot.y += (direction) ? 0xD800 : 0x2800;
+ float targetScale = 3.5f - (damage * 0.175f);
+ if (scale.x > targetScale) {
+ float newScale = scale.x - 0.006f;
+ if (newScale < targetScale)
+ newScale = targetScale;
+ scale.x = scale.y = scale.z = newScale;
+ updateHitboxSize();
+ }
if (this->timer > 180) {
doStateChange(&StateID_Bounce);
@@ -571,8 +587,8 @@ int daPodouble::onDraw() {
daPodouble *other = (daPodouble*)FindActorByType(SHIP_WINDOW, 0);
if (other->id == this->id) {
other = (daPodouble*)FindActorByType(SHIP_WINDOW, (Actor*)this);
- other->doStateChange(&StateID_SyncDie);
}
+ other->doStateChange(&StateID_SyncDie);
OutroSetup(this);
this->timer = 0;
@@ -612,21 +628,16 @@ int daPodouble::onDraw() {
this->removeMyActivePhysics();
this->timer = 0;
- }
- void daPodouble::executeState_SyncDie() {
- if (this->dying == 1) { return; }
-
- bool ret;
- ret = ShrinkBoss(this, &this->pos, 3.5, this->timer);
-
- if (ret == true) {
- BossExplode(this, &this->pos);
- this->dying = 1;
- this->timer = 0;
- }
- else { PlaySound(this, SE_EMY_BUBBLE_EXTINCT); }
- this->timer += 1;
+ nw4r::g3d::ResAnmChr anmChr = resFile.GetResAnmChr(isFire ? "RedFlee" : "BlueFlee");
+ fleeAnimation.bind(&bodyModel, anmChr, 1);
+ bodyModel.bindAnim(&fleeAnimation, 0.0);
+ fleeAnimation.setUpdateRate(0.5f);
+ PlaySound(this, SE_EMY_GABON_ROCK_THROW);
+ }
+ void daPodouble::executeState_SyncDie() {
+ if (fleeAnimation.isAnimationDone())
+ Delete(0);
}
void daPodouble::endState_SyncDie() { }
diff --git a/src/bossRamboo.cpp b/src/bossRamboo.cpp
index f2af942..a2b34f0 100644
--- a/src/bossRamboo.cpp
+++ b/src/bossRamboo.cpp
@@ -78,7 +78,6 @@ void daRamboo_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther)
}
bool daRamboo_c::collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther) {
SpawnEffect("Wm_en_obakedoor_sm", 0, &apOther->owner->pos, &(S16Vec){0,0,0}, &(Vec){0.5, 0.5, 0.5});
- this->pos.x += 6.0;
return true;
}
bool daRamboo_c::collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther) {
@@ -98,7 +97,7 @@ bool daRamboo_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysic
return false;
}
bool daRamboo_c::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther) {
- return true;
+ return collisionCat1_Fireball_E_Explosion(apThis, apOther);
}
bool daRamboo_c::collisionCat7_GroundPound(ActivePhysics *apThis, ActivePhysics *apOther) {
DamagePlayer(this, apThis, apOther);
@@ -186,7 +185,7 @@ int daRamboo_c::onCreate() {
HitMeBaby.category1 = 0x3;
HitMeBaby.category2 = 0x0;
HitMeBaby.bitfield1 = 0x4F;
- HitMeBaby.bitfield2 = 0x222;
+ HitMeBaby.bitfield2 = 0x80222;
HitMeBaby.unkShort1C = 0;
HitMeBaby.callback = &dEn_c::collisionCallback;
diff --git a/src/bossSamurshai.cpp b/src/bossSamurshai.cpp
index e385a41..1f0906a 100644
--- a/src/bossSamurshai.cpp
+++ b/src/bossSamurshai.cpp
@@ -113,7 +113,10 @@ daSamurshai *daSamurshai::build() {
char hitType = usedForDeterminingStatePress_or_playerCollision(this, apThis, apOther, 2);
- if ((hitType == 1) || (hitType == 3)) {
+ if (hitType == 2) {
+ // Mini jump
+ apOther->someFlagByte |= 2;
+ } else if (hitType > 0) {
apOther->someFlagByte |= 2;
if (this->isDown == 0) {
this->playEnemyDownSound1();
@@ -140,7 +143,7 @@ daSamurshai *daSamurshai::build() {
apOther->someFlagByte |= 2;
if (this->isDown == 0) {
- damage += 10;
+ damage += 5;
if (damage >= 15) { doStateChange(&StateID_Outro); }
else { doStateChange(&StateID_Damage); }
}
@@ -166,11 +169,7 @@ daSamurshai *daSamurshai::build() {
return true;
}
bool daSamurshai::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther){
- if (this->isDown == 0) {
- damage += 3;
- if (damage >= 15) { doStateChange(&StateID_Outro); }
- else { doStateChange(&StateID_Damage); }
- }
+ dAcPy_vf3F8(apOther->owner, this, 3);
deathInfo.isDead = 0;
this->flags_4FC |= (1<<(31-7));
diff --git a/src/bossTopman.cpp b/src/bossTopman.cpp
index ddc37b6..77593a3 100644
--- a/src/bossTopman.cpp
+++ b/src/bossTopman.cpp
@@ -130,10 +130,13 @@ daDreidel *daDreidel::build() {
void daDreidel::spriteCollision(ActivePhysics *apThis, ActivePhysics *apOther) {
if (apOther->owner->name == 390) { //time to get hurt
+ OSReport("YO SUP I'M A TOPMAN AND I'M COLLIDING WITH A FUCKING WALL [%d]\n", damage);
if (this->isInvulnerable) {
+ OSReport("I'm invulnerable so I'm ignoring it\n");
return;
}
this->damage += 1;
+ OSReport("I'm increasing my damage to %d\n", damage);
doStateChange(&StateID_Damage);
if (this->damage == 3) { doStateChange(&StateID_Outro); }
@@ -147,15 +150,10 @@ daDreidel *daDreidel::build() {
char hitType;
hitType = usedForDeterminingStatePress_or_playerCollision(this, apThis, apOther, 0);
- if(hitType == 1) { // regular jump
+ if(hitType > 0) {
this->_vf220(apOther->owner);
this->counter_504[apOther->owner->which_player] = 0;
- }
- else if(hitType == 3) { // spinning jump or whatever?
- this->_vf220(apOther->owner);
- this->counter_504[apOther->owner->which_player] = 0;
- }
- else if(hitType == 0) {
+ } else {
if (this->charging == 1) {
diff --git a/src/shyguyGiants.cpp b/src/shyguyGiants.cpp
index b9415aa..dc474f6 100644
--- a/src/shyguyGiants.cpp
+++ b/src/shyguyGiants.cpp
@@ -139,37 +139,26 @@ daShyGuyGiant *daShyGuyGiant::build() {
dStageActor_c *player = apOther->owner;
- if (Player_VF3D4(player)) {
- // WE'VE GOT A STAR, FOLKS
- if (apThis->_18 == 1 && !player->collMgr.isOnTopOfTile() && player->pos.y > apThis->bottom()) {
- bouncePlayer(player, 3.0f);
- PlaySound(this, SE_EMY_CMN_STEP);
- } else {
- dAcPy_vf3F8(player, this, 3);
- }
- this->counter_504[apOther->owner->which_player] = 0xA;
-
- return;
- }
-
char hitType;
hitType = usedForDeterminingStatePress_or_playerCollision(this, apThis, apOther, 0);
- if (hitType == 1) { // regular jump
+ if (hitType > 0) {
PlaySound(this, SE_EMY_CMN_STEP);
this->counter_504[apOther->owner->which_player] = 0xA;
- }
- else if(hitType == 3){
- PlaySound(this, SE_EMY_CMN_STEP);
- this->counter_504[apOther->owner->which_player] = 0xA;
- }
- else if(hitType == 0) {
+ } else {
this->dEn_c::playerCollision(apThis, apOther);
this->_vf220(apOther->owner);
+ if (Player_VF3D4(player)) {
+ // WE'VE GOT A STAR, FOLKS
+ if (apThis->_18 == 1 && !player->collMgr.isOnTopOfTile() && player->pos.y > apThis->bottom()) {
+ bouncePlayer(player, 3.0f);
+ PlaySound(this, SE_EMY_CMN_STEP);
+ } else {
+ dAcPy_vf3F8(player, this, 3);
+ }
+ this->counter_504[apOther->owner->which_player] = 0xA;
+
+ }
}
- else {
- OSReport("Some other hit type");
- }
- return;
}
void daShyGuyGiant::bouncePlayerWhenJumpedOn(void *player) {