diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/player.cpp | 19 | ||||
-rw-r--r-- | src/player.h | 1 | ||||
-rw-r--r-- | src/shyguy.cpp | 221 |
3 files changed, 219 insertions, 22 deletions
diff --git a/src/player.cpp b/src/player.cpp index d5c54aa..58960cc 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -56,4 +56,23 @@ void setNewActivePhysicsRect(dStageActor_c* actor, Vec* scale) { actor->aPhysics.addToList(); } +void changeActivePhysicsRect(dStageActor_c* actor, float xc, float yc, float xe, float ye) { + ActivePhysics::Info info; + info.xDistToCenter = xc; + info.yDistToCenter = yc; + info.xDistToEdge = xe; + info.yDistToEdge = ye; + + info.category1 = actor->aPhysics.info.category1; + info.category2 = actor->aPhysics.info.category2; + info.bitfield1 = actor->aPhysics.info.bitfield1; + info.bitfield2 = actor->aPhysics.info.bitfield2; + info.unkShort1C = actor->aPhysics.info.unkShort1C; + info.callback = actor->aPhysics.info.callback; + + //OSReport("Making new Physics Class and adding to the list\n"); + actor->aPhysics.removeFromList(); + actor->aPhysics.initWithStruct(actor, &info); + actor->aPhysics.addToList(); +} diff --git a/src/player.h b/src/player.h index 4e036ae..267729f 100644 --- a/src/player.h +++ b/src/player.h @@ -7,6 +7,7 @@ extern "C" dStageActor_c* GetSpecificPlayerActor(int number); char NearestPlayer(dStageActor_c* actor); void setNewActivePhysicsRect(dStageActor_c* actor, Vec* scale); +void changeActivePhysicsRect(dStageActor_c* actor, float xc, float yc, float xe, float ye); #endif diff --git a/src/shyguy.cpp b/src/shyguy.cpp index c4a50a2..87c7749 100644 --- a/src/shyguy.cpp +++ b/src/shyguy.cpp @@ -29,12 +29,14 @@ // // Nybble 7: Balloon Colour // 0 - Red -// 1 - Blue +// 1 - Blue (not working) // // Nybble 8: Ballooneer Carries // 0 - Nothing // 1 - ??? // +// I_kinoko, I_fireflower, I_propeller_model, I_iceflower, I_star, I_penguin - model names +// anmChr - wait2 class daShyGuy : public dEn_c { int onCreate(); @@ -52,12 +54,6 @@ class daShyGuy : public dEn_c { m3d::mdl_c balloonModelB; m3d::anmChr_c chrAnimation; - // m3d::anmChr_c animateWalk; - // m3d::anmChr_c animateJump; - // m3d::anmChr_c animateSpinJump; - // m3d::anmChr_c animateIdle; - // m3d::anmChr_c animateSleep; - // m3d::anmChr_c animateHover; int timer; int jumpCounter; @@ -79,6 +75,8 @@ class daShyGuy : public dEn_c { DECLARE_STATE(Balloon_H); DECLARE_STATE(Balloon_V); DECLARE_STATE(Balloon_C); + DECLARE_STATE(Judo); + DECLARE_STATE(Spike); }; daShyGuy *daShyGuy::build() { @@ -100,6 +98,8 @@ CREATE_STATE(daShyGuy, Sleep); CREATE_STATE(daShyGuy, Balloon_H); CREATE_STATE(daShyGuy, Balloon_V); CREATE_STATE(daShyGuy, Balloon_C); +CREATE_STATE(daShyGuy, Judo); +CREATE_STATE(daShyGuy, Spike); void daShyGuy::bindAnimChr_and_setUpdateRate(const char* name, int unk, float unk2, float rate) { @@ -117,7 +117,6 @@ int daShyGuy::onCreate() { int baln = this->settings >> 20 & 0xF; if (type == 3) {this->renderBalloon = 1;} - else if (type == 0) {this->renderBalloon = 1;} else if (type == 4) {this->renderBalloon = 1;} else if (type == 5) {this->renderBalloon = 1;} else {this->renderBalloon = 0;} @@ -164,11 +163,24 @@ int daShyGuy::onCreate() { OSReport("Creating ShyGuy's Physics Struct\n"); ActivePhysics::Info HitMeBaby; - HitMeBaby.xDistToCenter = 0.0; - HitMeBaby.yDistToCenter = 12.0; - HitMeBaby.xDistToEdge = 14.0; - HitMeBaby.yDistToEdge = 12.0; + if (type == 8) { + this->scale = (Vec){40.0, 40.0, 40.0}; + + HitMeBaby.xDistToCenter = 0.0; + HitMeBaby.yDistToCenter = 24.0; + + HitMeBaby.xDistToEdge = 28.0; + HitMeBaby.yDistToEdge = 24.0; + } + + else { + HitMeBaby.xDistToCenter = 0.0; + HitMeBaby.yDistToCenter = 12.0; + + HitMeBaby.xDistToEdge = 14.0; + HitMeBaby.yDistToEdge = 12.0; + } HitMeBaby.category1 = 0x3; HitMeBaby.category2 = 0x0; @@ -187,13 +199,14 @@ int daShyGuy::onCreate() { this->rot.y = 0xD800; // Y is horizontal axis this->rot.z = 0; // Z is ... an axis >.> this->direction = 1; // Heading left. - + this->currentLayerID = 1; + this->speed.x = 0; this->Baseline = this->pos.y; if (type == 0) { - doStateChange(&StateID_Sleep); + doStateChange(&StateID_Walk); } else if (type == 1) { doStateChange(&StateID_Sleep); @@ -211,13 +224,13 @@ int daShyGuy::onCreate() { doStateChange(&StateID_Balloon_C); } else if (type == 6) { - doStateChange(&StateID_Sleep); + doStateChange(&StateID_Judo); } else if (type == 7) { - doStateChange(&StateID_Sleep); + doStateChange(&StateID_Spike); } else if (type == 8) { - doStateChange(&StateID_Sleep); + doStateChange(&StateID_Walk); } OSReport("Going to Execute ShyGuy\n"); @@ -279,24 +292,53 @@ void daShyGuy::updateModelMatrices() { void daShyGuy::beginState_Walk() { - bindAnimChr_and_setUpdateRate("c18_EV_WIN_2_R", 1, 0.0, 1.0); + bindAnimChr_and_setUpdateRate("c18_EV_WIN_2_R", 1, 0.0, 1.5); + this->timer = 0; + if (this->direction == 1) { this->rot.y = 0xD800; } + else { this->rot.y = 0x2800; } } void daShyGuy::executeState_Walk() { - if(this->chrAnimation.isAnimationDone()) - this->chrAnimation.setCurrentFrame(0.0); + if (this->direction == 1) { this->pos.x -= 0.5; } + else { this->pos.x += 0.5; } - this->pos.x = this->pos.x - 0.4; + if(this->chrAnimation.isAnimationDone()) + if (this->timer > 200) { + doStateChange(&StateID_Turn); + } + else { + this->chrAnimation.setCurrentFrame(0.0); + } + this->timer = this->timer + 1; } void daShyGuy::endState_Walk() { } void daShyGuy::beginState_Turn() { + bindAnimChr_and_setUpdateRate("c18_IDLE_R", 1, 0.0, 1.0); + this->timer = 0; } void daShyGuy::executeState_Turn() { + + int modifier = sin(this->timer * 3.14 / 30.0) * 0x5000; + + if (this->direction == 1) { this->rot.y = 0xD800 + modifier; } + else { this->rot.y = 0x2800 - modifier; } + + if (this->timer >= 15) { + doStateChange(&StateID_Walk); + } + + if(this->chrAnimation.isAnimationDone()) { + this->chrAnimation.setCurrentFrame(0.0); + } + + this->timer += 1; } void daShyGuy::endState_Turn() { + if (this->direction == 1) { this->direction = 0; } + else { this->direction = 1; } } void daShyGuy::beginState_Jump() { @@ -362,7 +404,7 @@ void daShyGuy::executeState_Jump() { // While he's jumping, it's time for gravity. else { - this->speed.y = this->speed.y - 0.12; + this->speed.y = this->speed.y - 0.15; if (this->jumpCounter == 3) { if(this->chrAnimation.isAnimationDone()) @@ -467,3 +509,138 @@ void daShyGuy::executeState_Balloon_C() { void daShyGuy::endState_Balloon_C() { } +void daShyGuy::beginState_Judo() { + this->timer = 0; +} +void daShyGuy::executeState_Judo() { + + + if (this->timer == 0) { bindAnimChr_and_setUpdateRate("c18_OB_IDLE_R", 1, 0.0, 1.0); } + + this->timer = this->timer + 1; + + if (this->timer < 120) { + // Always face Mario + u8 facing = dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(this, this->pos); + + if (facing != this->direction) { + this->direction = facing; + if (this->direction == 1) { + this->rot.y = 0xD800; + } + else { + this->rot.y = 0x2800; + } + } + + if(this->chrAnimation.isAnimationDone()) + this->chrAnimation.setCurrentFrame(0.0); + } + + else if (this->timer == 120) { + bindAnimChr_and_setUpdateRate("c18_H_CUT_R", 1, 0.0, 1.0); + + } + + else if (this->timer == 132) { + PlaySound(this, SE_EMY_CRASHER_PUNCH); + + if (this->direction == 1) { + CreateEffect(&(Vec){this->pos.x - 18.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}, 123); + } + else { + CreateEffect(&(Vec){this->pos.x + 18.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}, 124); + } + + changeActivePhysicsRect(this, 20.0, 12.0, 34.0, 12.0); + } + + else { + + if(this->chrAnimation.isAnimationDone()) { + if (this->direction == 1) { + CreateEffect(&(Vec){this->pos.x - 38.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){0.8, 0.8, 0.8}, 157); + } + else { + CreateEffect(&(Vec){this->pos.x + 38.0, this->pos.y + 16.0, this->pos.z}, &(S16Vec){0,0,0}, &(Vec){0.8, 0.8, 0.8}, 157); + } + + this->timer = 0; + PlaySound(this, SE_EMY_BIG_PAKKUN_DAMAGE_1); + changeActivePhysicsRect(this, 0.0, 12.0, 14.0, 12.0); + } + } +} +void daShyGuy::endState_Judo() { +} + +void daShyGuy::beginState_Spike() { + this->timer = 0; +} +void daShyGuy::executeState_Spike() { + + if (this->timer == 0) { bindAnimChr_and_setUpdateRate("c18_OB_IDLE_R", 1, 0.0, 1.0); } + + this->timer = this->timer + 1; + + if (this->timer < 120) { + // Always face Mario + u8 facing = dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(this, this->pos); + + if (facing != this->direction) { + this->direction = facing; + if (this->direction == 1) { + this->rot.y = 0xD800; + } + else { + this->rot.y = 0x2800; + } + } + + if(this->chrAnimation.isAnimationDone()) + this->chrAnimation.setCurrentFrame(0.0); + } + + else if (this->timer == 120) { + bindAnimChr_and_setUpdateRate("c18_H_SHOT_R", 1, 0.0, 1.0); + + } + + else if (this->timer == 160) { + PlaySound(this, SE_EMY_KANIBO_THROW); + + Vec pos; + pos.x = this->pos.x; + pos.y = this->pos.y; + pos.z = this->pos.z; + + if (this->direction == 1) { + dStageActor_c *spawned = CreateActor(89, 0x2, pos, 0, 0); + spawned->scale.x = 0.5; + spawned->scale.y = 0.5; + spawned->scale.z = 0.5; + + spawned->speed.x = -2.0; + spawned->speed.y = 2.0; + } + else { + dStageActor_c *spawned = CreateActor(89, 0x12, pos, 0, 0); + spawned->scale.x = 0.5; + spawned->scale.y = 0.5; + spawned->scale.z = 0.5; + + spawned->speed.x = 2.0; + spawned->speed.y = 2.0; + } + } + + else { + + if(this->chrAnimation.isAnimationDone()) { + this->timer = 0; + } + } +} +void daShyGuy::endState_Spike() { +} + |