diff options
author | Colin Noga <Tempus@chronometry.ca> | 2012-07-11 02:34:29 -0500 |
---|---|---|
committer | Colin Noga <Tempus@chronometry.ca> | 2012-07-11 02:34:29 -0500 |
commit | c6461149389ec807371b9692b7484ab108e2a068 (patch) | |
tree | 5d2624e4d61ab5f4e8c1472fcb6733d612d4e071 | |
parent | ab412589662152c99c1653be980136912bcde4f3 (diff) | |
download | kamek-c6461149389ec807371b9692b7484ab108e2a068.tar.gz kamek-c6461149389ec807371b9692b7484ab108e2a068.zip |
Plenty of bugfixes, and bowser improvements
-rwxr-xr-x | include/game.h | 7 | ||||
-rw-r--r-- | kamek_pal.x | 6 | ||||
-rw-r--r-- | spritetex.yaml | 6 | ||||
-rw-r--r-- | src/bossBombDrop.cpp | 6 | ||||
-rw-r--r-- | src/bossBridgeBowser.cpp | 53 | ||||
-rw-r--r-- | src/bossCaptainBowser.cpp | 6 | ||||
-rw-r--r-- | src/bossPodouble.cpp | 8 | ||||
-rw-r--r-- | src/bossThwompaDomp.cpp | 2 | ||||
-rw-r--r-- | src/shyguy.cpp | 53 | ||||
-rwxr-xr-x | src/spritetex.S | 23 |
10 files changed, 130 insertions, 40 deletions
diff --git a/include/game.h b/include/game.h index 2a245f7..de7d46d 100755 --- a/include/game.h +++ b/include/game.h @@ -2164,6 +2164,13 @@ public: };
+class daBossKoopaDemo_c : public dEn_c {
+
+public:
+ USING_STATES(daBossKoopaDemo_c);
+ REF_NINTENDO_STATE(Struggle);
+};
+
class daNeedles : public dEn_c {
public:
diff --git a/kamek_pal.x b/kamek_pal.x index 28d3dc6..7196da3 100644 --- a/kamek_pal.x +++ b/kamek_pal.x @@ -101,6 +101,8 @@ SECTIONS { StateID_DemoSt__12daKameckDemo = 0x80999C44; StateID_DemoWait__12daKameckDemo = 0x80999C84; + StateID_Struggle__17daBossKoopaDemo_c = 0x80B8BFAC; + StateID_DemoWait__9daNeedles = 0x8099CF8C; StateID_DemoAwake__9daNeedles = 0x8099CFD0; StateID_Idle__9daNeedles = 0x8099D010; @@ -121,7 +123,9 @@ SECTIONS { BowserFireballCollision = 0x80B7E840; BowserDamageAnmClr = 0x80B3F200; BowserDamageStepTwo = 0x80B1F8D0; - BowserDamageStepThree = 0x80098D80; + BowserDamageNormal = 0x80B1F8F0; + BowserDamageKill = 0x80098D80; + BowserDamageEnd = 0x80B3F530; /* Mr Sun Related */ diff --git a/spritetex.yaml b/spritetex.yaml index ad6183e..2af5db3 100644 --- a/spritetex.yaml +++ b/spritetex.yaml @@ -443,6 +443,12 @@ hooks: # data: '60000000' # addr_pal: 0x80A9D054 + - name: TEX_PokeySnowmanRotate + type: branch_insn + branch_type: bl + src_addr_pal: 0x80A9F76C + target_func: 'TEX_PokeySnowmanRotate' + - name: TEX_PokeySnowman type: branch_insn diff --git a/src/bossBombDrop.cpp b/src/bossBombDrop.cpp index 0852501..c12d144 100644 --- a/src/bossBombDrop.cpp +++ b/src/bossBombDrop.cpp @@ -202,8 +202,8 @@ dBombDrop *dBombDrop::build() { int dBombDrop::onCreate() { int t = this->settings & 0xF; - this->eventA = (this->settings >> 16) & 0xFF; - this->eventB = (this->settings >> 24) & 0xFF; + this->eventA = ((this->settings >> 24) & 0xFF) - 1; + this->eventB = ((this->settings >> 16) & 0xFF) - 1; if (t == 0) { @@ -229,7 +229,7 @@ int dBombDrop::onExecute() { bool active; active = dFlagMgr_c::instance->active(eventA); if (active) { - create(WM_SMALLCLOUD, 0, &pos, &rot, 0); + create(WM_SMALLCLOUD, 0, &pos , &rot, 0); dFlagMgr_c::instance->set(eventA, 0, false, false, false); dFlagMgr_c::instance->set(eventA+1, 0, true, false, false); } diff --git a/src/bossBridgeBowser.cpp b/src/bossBridgeBowser.cpp index cafcc98..d0f505a 100644 --- a/src/bossBridgeBowser.cpp +++ b/src/bossBridgeBowser.cpp @@ -10,20 +10,55 @@ extern "C" void *ForceMarioExitDemoMode(void *, unsigned int); extern "C" void *BowserFireballCollision(dEn_c *, ActivePhysics *, ActivePhysics *); extern "C" void *BowserDamageAnmClr(dEn_c *); extern "C" void *BowserDamageStepTwo(dEn_c *); -extern "C" void *BowserDamageStepThree(dEn_c *); +extern "C" void *BowserDamageNormal(dEn_c *); +extern "C" void *BowserDamageKill(dEn_c *); +extern "C" void *BowserDamageEnd(dEn_c *); +int HP = 2; void BowserDoomSpriteCollision(dEn_c *bowser, ActivePhysics *apThis, ActivePhysics *apOther) { // If you collide with something or other, call the fireball collision if (apOther->owner->name == 674) { - OSReport("AnmClr"); - BowserDamageAnmClr(bowser); - OSReport("Damage Step 2"); - BowserDamageStepTwo(bowser); - OSReport("Damage Step 3"); - BowserDamageStepThree(bowser); - OSReport("Damage Done"); + + // void * bowserClass = (void*)(((u32)bowser) + 0x5F8); + // int HP = *(int*)(((u32)bowserClass) + 4); + + OSReport("HP: %d", HP); + + if (HP <= 0) { + HP = 0; + + *(int*)(((u32)bowser) + 0x540) = 0x28; + + BowserDamageAnmClr(bowser); + + BowserDamageStepTwo(bowser); + BowserDamageKill(bowser); + + // WeirdLevelEndClass->sub_8005CB60(*otherActor->returnPtrToField38D()); + + // this->vf300(otherActor); + BowserDamageEnd(bowser); + + // daBossKoopaDemo_c *BowserDemo = (daBossKoopaDemo_c*)FindActorByType(BOSS_KOOPA_DEMO, 0); + daBossKoopaDemo_c *BowserDemo = (daBossKoopaDemo_c*)bowser; + OSReport("Koopa Controller: %x", BowserDemo); + BowserDemo->doStateChange(&daBossKoopaDemo_c::StateID_Struggle); + dFlagMgr_c::instance->set(3, 0, true, false, false); + + HP = 2; + + } + else { + *(int*)(((u32)bowser) + 0x540) = 0x28; + + BowserDamageAnmClr(bowser); + BowserDamageNormal(bowser); + + HP -= 1; + } + dEn_c * bomb = (dEn_c*)apOther->owner; bomb->kill(); } @@ -34,7 +69,7 @@ void BowserDoomSpriteCollision(dEn_c *bowser, ActivePhysics *apThis, ActivePhysi void BowserDoomStart(dStageActor_c *Controller) { OSReport("Here we go!"); - dEn_c *Bowser = (dEn_c*)FindActorByType(EN_BOSS_KOOPA, (Actor*)Controller); + dEn_c *Bowser = (dEn_c*)FindActorByType(EN_BOSS_KOOPA, 0); Bowser->Delete(1); } diff --git a/src/bossCaptainBowser.cpp b/src/bossCaptainBowser.cpp index af02c3c..c3c1b62 100644 --- a/src/bossCaptainBowser.cpp +++ b/src/bossCaptainBowser.cpp @@ -230,7 +230,6 @@ int daCaptainBowser::onCreate() { ShipPhysics.diameter = 12.0 * 16.0; ShipPhysics.isRound = 1; - this->ShipPhysics.addToList(); // Bowser Physics! @@ -249,7 +248,6 @@ int daCaptainBowser::onCreate() { BowserPhysics.callback = &dEn_c::collisionCallback; this->aPhysics.initWithStruct(this, &BowserPhysics); - this->aPhysics.addToList(); @@ -433,6 +431,10 @@ int daCaptainBowser::onDraw() { this->timer++; } void daCaptainBowser::endState_Intro() { + + this->ShipPhysics.addToList(); + this->aPhysics.addToList(); + this->isInvulnerable = 0; this->isIntro = 0; } diff --git a/src/bossPodouble.cpp b/src/bossPodouble.cpp index c6eb99b..5d41a5c 100644 --- a/src/bossPodouble.cpp +++ b/src/bossPodouble.cpp @@ -557,15 +557,11 @@ int daPodouble::onDraw() { /////////////// void daPodouble::beginState_Outro() { - daPodouble *other = (daPodouble*)FindActorByType(SHIP_WINDOW, (Actor*)this); - if (other != 0) { - other->doStateChange(&StateID_SyncDie); - + daPodouble *other = (daPodouble*)FindActorByType(SHIP_WINDOW, 0); if (other->id == this->id) { - other = (daPodouble*)FindActorByType(SHIP_WINDOW, (Actor*)other); + other = (daPodouble*)FindActorByType(SHIP_WINDOW, (Actor*)this); other->doStateChange(&StateID_SyncDie); } - } OutroSetup(this); this->timer = 0; diff --git a/src/bossThwompaDomp.cpp b/src/bossThwompaDomp.cpp index 48d0340..85799c3 100644 --- a/src/bossThwompaDomp.cpp +++ b/src/bossThwompaDomp.cpp @@ -347,12 +347,14 @@ int daEnMegaDosun_c::onDelete() { this->countdownTimer = 0x40; this->speed.y = 0.0; ShakeScreen(ScreenPositionClass, 0, 1, 0, 0); + PlaySoundAsync(this, SE_EMY_BIG_DOSSUN); } else { this->collision_struct[0] = 0x00000001; this->speed.y = 0.0; ShakeScreen(ScreenPositionClass, 0, 1, 0, 0); this->collMgr.Clear2(); + PlaySoundAsync(this, SE_EMY_BIG_DOSSUN); } SpawnThwompEffects(this); diff --git a/src/shyguy.cpp b/src/shyguy.cpp index 8f311de..6ea3567 100644 --- a/src/shyguy.cpp +++ b/src/shyguy.cpp @@ -69,6 +69,7 @@ class daShyGuy : public dEn_c { float balloonSize; char backFire; char spikeTurn; + int directionStore; dStageActor_c *spikeA; dStageActor_c *spikeB; @@ -216,6 +217,12 @@ daShyGuy *daShyGuy::build() { deathState = &StateID_Die; } + // fix multiple player collisions via megazig + this->isDead = 0; + this->flags_4FC |= (1<<(31-7)); + this->counter_504[apOther->owner->which_player] = 0; + + char hitType; if (this->isDown == 0) { hitType = usedForDeterminingStatePress_or_playerCollision(this, apThis, apOther, 2); @@ -231,7 +238,9 @@ daShyGuy *daShyGuy::build() { doStateChange(stateVar); } else { // Shy Guy is in throwy mode - kill it with fire + this->playEnemyDownSound1(); doStateChange(deathState); + this->isDead = 1; } } else if(hitType == 3) { // spinning jump or whatever? @@ -241,7 +250,9 @@ daShyGuy *daShyGuy::build() { doStateChange(stateVar); } else { // Shy Guy is in throwy mode - kill it with fire + this->playEnemyDownSound1(); doStateChange(deathState); + this->isDead = 1; } } else if(hitType == 0) { @@ -251,10 +262,6 @@ daShyGuy *daShyGuy::build() { // else if(hitType == 2) { \\ Minimario? } - // fix multiple player collisions via megazig - this->isDead = 0; - this->flags_4FC |= (1<<(31-7)); - this->counter_504[apOther->owner->which_player] = 0; } void daShyGuy::yoshiCollision(ActivePhysics *apThis, ActivePhysics *apOther) { @@ -278,6 +285,7 @@ daShyGuy *daShyGuy::build() { } void daShyGuy::collisionCat3_StarPower(ActivePhysics *apThis, ActivePhysics *apOther){ + dEn_c::collisionCat3_StarPower(apThis, apOther); doStateChange(&StateID_Die); } @@ -296,10 +304,16 @@ daShyGuy *daShyGuy::build() { if (this->type < 6) { // Regular Shy Guys Except Jumper - if (this->pos.x < apOther->owner->pos.x) { this->backFire = 0; } // Fire is to the right - else { this->backFire = 1; } // Fire is to the left + if (this->pos.x < apOther->owner->pos.x) { this->backFire = 0; OSReport("Fire is to the right"); } // Fire is to the right + else { this->backFire = 1; OSReport("Fire is to the left"); } // Fire is to the left - stateVar = &StateID_FireKnockBack; + if (this->isDown == 0) { + stateVar = &StateID_FireKnockBack; + } + else { + doStateChange(&StateID_DieSmoke); + this->_vf14C(); + } } else if (this->type > 8) { // Giants return; @@ -530,7 +544,7 @@ int daShyGuy::onCreate() { this->scale = (Vec){20.0, 20.0, 20.0}; - this->pos.y = this->pos.y + 30.0; // X is vertical axis + this->pos.y = this->pos.y + 40.0; this->rot.x = 0; // X is vertical axis this->rot.y = 0xD800; // Y is horizontal axis this->rot.z = 0; // Z is ... an axis >.> @@ -541,7 +555,7 @@ int daShyGuy::onCreate() { this->max_speed.x = 0.8; this->x_speed_inc = 0.2; this->Baseline = this->pos.y; - this->XSpeed = 0.8; + this->XSpeed = 0.6; this->balloonSize = 1.5; @@ -756,7 +770,7 @@ void daShyGuy::updateModelMatrices() { } void daShyGuy::executeState_Walk() { - this->pos.x += (direction) ? -0.5 : 0.5; + this->pos.x += (direction) ? -0.4 : 0.4; if (this->timer > (this->distance * 32)) { doStateChange(&StateID_Turn); @@ -1173,7 +1187,7 @@ void daShyGuy::updateModelMatrices() { void daShyGuy::beginState_RealWalk() { //inline this piece of code this->max_speed.x = (this->direction) ? -this->XSpeed : this->XSpeed; - this->speed.x = (direction) ? -0.8f : 0.8f; + this->speed.x = (direction) ? -0.6f : 0.6f; this->max_speed.y = -4.0; this->speed.y = -4.0; @@ -1331,15 +1345,17 @@ void daShyGuy::updateModelMatrices() { void daShyGuy::beginState_FireKnockBack() { bindAnimChr_and_setUpdateRate("c18_C_BLOCK_BREAK_R", 1, 0.0, 1.0); - // if (this->backFire == 0) { this->direction ^= 1; } - // else { this->backFire = 0; } - - this->speed.x = (this->backFire) ? this->XSpeed / 6.0f : -this->XSpeed / 6.0f; + // Backfire 0 == Fireball to the right + // Backfire 1 == Fireball to the left + + directionStore = this->direction; + this->speed.x = (this->backFire) ? this->XSpeed : -this->XSpeed; } void daShyGuy::executeState_FireKnockBack() { calculateTileCollisions(); // move backwards here + this->speed.x = this->speed.x / 1.02f; if(this->chrAnimation.isAnimationDone()) { bindAnimChr_and_setUpdateRate("c18_EV_WIN_2_R", 1, 0.0, 1.5); @@ -1347,9 +1363,7 @@ void daShyGuy::updateModelMatrices() { } } void daShyGuy::endState_FireKnockBack() { - // this->direction ^= 1; - speed.x = (direction) ? -1.0f : 1.0f; - this->max_speed.x = (direction) ? -this->XSpeed : this->XSpeed; + this->direction = directionStore; } /////////////// @@ -1398,7 +1412,7 @@ void daShyGuy::updateModelMatrices() { // Die State /////////////// void daShyGuy::beginState_Die() { - dEn_c::dieFall_Begin(); + // dEn_c::dieFall_Begin(); bindAnimChr_and_setUpdateRate("c18_C_BLOCK_BREAK_R", 1, 0.0, 2.0); this->timer = 0; @@ -1426,6 +1440,7 @@ void daShyGuy::updateModelMatrices() { this->dying += 0.5; if (this->timer > 450) { + OSReport("Killing"); this->kill(); this->Delete(this->deleteForever); } diff --git a/src/spritetex.S b/src/spritetex.S index 563d81a..1aeea74 100755 --- a/src/spritetex.S +++ b/src/spritetex.S @@ -556,6 +556,29 @@ SnowmanSandToSnowB: blr + + +SnowmanPokeyRotate: + + lha r3, 0x102(r30) + blr + + +.global TEX_PokeySnowmanRotate +TEX_PokeySnowmanRotate: + + lwz r10, 4(r30) + srwi r10, r10, 24 + andi. r10, r10, 0xF + + cmpwi r10, 0x2 + bne SnowmanPokeyRotate + + li r3, 0 + sth r3, 0x102(r30) + blr + + .global TEX_PokeySnowman TEX_PokeySnowman: |