diff options
Diffstat (limited to 'src/bossWrenchThrow.cpp')
-rw-r--r-- | src/bossWrenchThrow.cpp | 88 |
1 files changed, 47 insertions, 41 deletions
diff --git a/src/bossWrenchThrow.cpp b/src/bossWrenchThrow.cpp index e99797b..beea815 100644 --- a/src/bossWrenchThrow.cpp +++ b/src/bossWrenchThrow.cpp @@ -6,11 +6,6 @@ #include <sfx.h> -extern "C" void *PlaySound(dEn_c *, int soundID); -extern "C" void *UpdateObjectPosBasedOnSpeedValues_real(daWrench *); -extern "C" dStageActor_c *GetSpecificPlayerActor(int number); - - class daWrench : public dEn_c { int onCreate(); int onExecute(); @@ -52,6 +47,14 @@ CREATE_STATE(daWrench, Straight); +extern "C" void *PlaySound(dEn_c *, int soundID); +extern "C" void *UpdateObjectPosBasedOnSpeedValues_real(daWrench *); +extern "C" dStageActor_c *GetSpecificPlayerActor(int number); +extern "C" void *HandleXSpeed(daWrench *); +extern "C" void *HandleYSpeed(daWrench *); + + + void daWrench::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { this->_vf220(apOther->owner); @@ -99,17 +102,18 @@ int daWrench::onCreate() { allocator.unlink(); - this->homing = this->settings & 0xF; - this->direction = (this->settings >> 4) & 0xF; + this->direction = this->settings & 0xF; + this->homing = (this->settings >> 4) & 0xF; this->front = (this->settings >> 8) & 0xF; ActivePhysics::Info HitMeBaby; if (this->homing == 0) { - HitMeBaby.yDistToCenter = 21.0; - HitMeBaby.xDistToEdge = 27.0; - HitMeBaby.yDistToEdge = 21.0; + HitMeBaby.xDistToCenter = 0.0; + HitMeBaby.yDistToCenter = 0.0; + HitMeBaby.xDistToEdge = 6.0; + HitMeBaby.yDistToEdge = 6.0; this->scale.x = 1.5; this->scale.y = 1.5; @@ -117,16 +121,16 @@ int daWrench::onCreate() { } else { - HitMeBaby.yDistToCenter = 42.0; - HitMeBaby.xDistToEdge = 54.0; - HitMeBaby.yDistToEdge = 42.0; + HitMeBaby.xDistToCenter = 0.0; + HitMeBaby.yDistToCenter = 0.0; + HitMeBaby.xDistToEdge = 12.0; + HitMeBaby.yDistToEdge = 12.0; this->scale.x = 3.0; this->scale.y = 3.0; this->scale.z = 3.0; } - HitMeBaby.xDistToCenter = 0.0; HitMeBaby.category1 = 0x3; HitMeBaby.category2 = 0x0; HitMeBaby.bitfield1 = 0x47; @@ -168,6 +172,7 @@ void daWrench::updateModelMatrices() { int daWrench::onExecute() { + acState.execute(); updateModelMatrices(); return true; @@ -175,7 +180,7 @@ int daWrench::onExecute() { -void daRamboo_c::beginState_HandThrow() { +void daWrench::beginState_HandThrow() { if (this->direction == 0) { // Ground Facing Left this->pos.x += 32.0; @@ -198,13 +203,13 @@ void daRamboo_c::beginState_HandThrow() { this->rot.z = 0xC000; } - if (this->front == 1) { this->pos.z = -804.0; } + if (this->front == 1) { this->pos.z = -1804.0; } this->lifespan = 0; } -void daRamboo_c::executeState_HandThrow() { +void daWrench::executeState_HandThrow() { - if (this->lifespan == 60) { + if (this->lifespan > 30) { if (this->homing == 0) { doStateChange(&StateID_Straight); } @@ -216,11 +221,11 @@ void daRamboo_c::executeState_HandThrow() { this->lifespan += 1; } -void daRamboo_c::endState_HandThrow() { } +void daWrench::endState_HandThrow() { } -void daRamboo_c::beginState_Homing() { +void daWrench::beginState_Homing() { this->lifespan = 360; Vec tempPos = this->pos; @@ -246,28 +251,28 @@ void daRamboo_c::beginState_Homing() { else { this->ymod = 0.0; } - if (this->direction == 0) { this->speed.x = -7.0; } - else { this->speed.x = 7.0; } - + if (this->direction & 1) { this->speed.x = -1.5; } + else { this->speed.x = 1.5; } + this->speed.y = 0; } -void daRamboo_c::executeState_Homing() { +void daWrench::executeState_Homing() { if (this->direction && 1) { // directions 1 and 3 spin clockwise, fly rightwards - this->rot.z += 0x400; } + this->rot.z -= 0x1000; } else { // directions 0 and 2 spin anti-clockwise, fly leftwards - this->rot.z -= 0x400; } + this->rot.z += 0x1000; } - UpdateObjectPosBasedOnSpeedValues_real(this); + this->pos.y += this->ymod * this->lifespan / 360; - this->pos.y += this->ymod; + UpdateObjectPosBasedOnSpeedValues_real(this); if (this->lifespan < 1) { PlaySound(this, SE_OBJ_HAMMER_HIT_BOTH); - CreateEffect(&this->homingWrench->pos, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}, 242); + CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}, 242); this->Delete(); } @@ -276,11 +281,11 @@ void daRamboo_c::executeState_Homing() { this->lifespan -= 1; } -void daRamboo_c::endState_Homing() { } +void daWrench::endState_Homing() { } -void daRamboo_c::beginState_Straight() { +void daWrench::beginState_Straight() { char PlayerID = NearestPlayer(this); dStageActor_c *Player = GetSpecificPlayerActor(PlayerID); @@ -290,26 +295,27 @@ void daRamboo_c::beginState_Straight() { Vec tempPos = this->pos; - if (this->direction == 0) { - this->speed.x = -6.0; - this->speed.y = -6.0 * slope; + if (this->direction & 1) { + this->speed.x = -2.0; + this->speed.y = 2.0 * slope; } else { - this->speed.x = 6.0; - this->speed.y = 6.0 * slope; + this->speed.x = 2.0; + this->speed.y = 2.0 * slope; } } -void daRamboo_c::executeState_Straight() { +void daWrench::executeState_Straight() { this->lifespan = 360; if (this->direction && 1) { // directions 1 and 3 spin clockwise, fly rightwards - this->rot.z += 0x400; } + this->rot.z -= 0x1000; } else { // directions 0 and 2 spin anti-clockwise, fly leftwards - this->rot.z -= 0x400; } + this->rot.z += 0x1000; } + UpdateObjectPosBasedOnSpeedValues_real(this); PlaySound(this, SE_EMY_CHOROPU_M_SPANNER); @@ -320,13 +326,13 @@ void daRamboo_c::executeState_Straight() { PlaySound(this, SE_OBJ_HAMMER_HIT_BOTH); - CreateEffect(&this->homingWrench->pos, &(S16Vec){0,0,0}, &(Vec){0.75, 0.75, 0.75}, 242); + CreateEffect(&this->pos, &(S16Vec){0,0,0}, &(Vec){0.75, 0.75, 0.75}, 242); this->Delete(); } this->lifespan -= 1; } -void daRamboo_c::endState_Straight() { } +void daWrench::endState_Straight() { } |