From 25c7c042247619006dd6b6c6c12cf08502e0829b Mon Sep 17 00:00:00 2001 From: Treeki Date: Tue, 12 Feb 2013 02:17:35 +0100 Subject: clean up Ramboo's code a bit, and add animations and stuff --- src/bossRamboo.cpp | 84 +++++++++++++++++++++++------------------------------- 1 file changed, 35 insertions(+), 49 deletions(-) (limited to 'src') diff --git a/src/bossRamboo.cpp b/src/bossRamboo.cpp index a096e14..ea62a9e 100644 --- a/src/bossRamboo.cpp +++ b/src/bossRamboo.cpp @@ -19,10 +19,8 @@ class daRamboo_c : public daBoss { nw4r::g3d::ResFile resFile; m3d::anmChr_c anmFog; - m3d::anmChr_c anmWaitA; - m3d::anmChr_c anmShayA; - m3d::anmChr_c anmWaitB; - m3d::anmChr_c anmShayB; + m3d::anmChr_c anmA; + m3d::anmChr_c anmB; nw4r::g3d::ResAnmTexSrt resTexSrt; m3d::anmTexSrt_c fogSrt; @@ -32,12 +30,13 @@ class daRamboo_c : public daBoss { char Hiding; char dying; float Baseline; + bool fleeFast; u64 eventFlag; static daRamboo_c *build(); - void bindAnimChr_and_setUpdateRates(const char* name, m3d::anmChr_c animationChr, m3d::mdl_c model, float rate); + void bindAnimChr_and_setUpdateRates(const char* name, m3d::anmChr_c &animationChr, m3d::mdl_c &model, float rate); void setupModels(); void updateModelMatrices(); @@ -75,6 +74,9 @@ extern "C" void *EN_LandbarrelPlayerCollision(dEn_c* t, ActivePhysics *apThis, A void daRamboo_c::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) { EN_LandbarrelPlayerCollision(this, apThis, apOther); DamagePlayer(this, apThis, apOther); + + fleeFast = false; + doStateChange(&StateID_Flee); } 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}); @@ -89,6 +91,7 @@ bool daRamboo_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysic SpawnEffect("Wm_en_obakedoor_sm", 0, &apOther->owner->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); SpawnEffect("Wm_mr_yoshistep", 0, &apOther->owner->pos, &(S16Vec){0,0,0}, &(Vec){1.0, 1.0, 1.0}); + fleeFast = true; doStateChange(&StateID_Flee); //FIXME changed to dStageActor_c::Delete(u8) from fBase_c::Delete(void) apOther->owner->Delete(1); @@ -111,8 +114,8 @@ bool daRamboo_c::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics -void daRamboo_c::bindAnimChr_and_setUpdateRates(const char* name, m3d::anmChr_c animationChr, m3d::mdl_c model, float rate) { - nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr(name); +void daRamboo_c::bindAnimChr_and_setUpdateRates(const char* name, m3d::anmChr_c &animationChr, m3d::mdl_c &model, float rate) { + nw4r::g3d::ResAnmChr anmChr = resFile.GetResAnmChr(name); animationChr.bind(&model, anmChr, 1); model.bindAnim(&animationChr, 0.0); animationChr.setUpdateRate(rate); @@ -138,10 +141,7 @@ void daRamboo_c::setupModels() { SetupTextures_Enemy(&this->bodyModel, 0); nw4r::g3d::ResAnmChr anmChrC = this->resFile.GetResAnmChr("shay_teresaA"); - ret = this->anmShayA.setup(mdlB, anmChrC, &this->allocator, 0); - - nw4r::g3d::ResAnmChr anmChrD = this->resFile.GetResAnmChr("wait"); - ret = this->anmWaitA.setup(mdlB, anmChrD, &this->allocator, 0); + ret = this->anmA.setup(mdlB, anmChrC, &this->allocator, 0); nw4r::g3d::ResMdl mdlC = this->resFile.GetResMdl("teresaB"); @@ -149,10 +149,7 @@ void daRamboo_c::setupModels() { SetupTextures_Enemy(&this->hideModel, 0); nw4r::g3d::ResAnmChr anmChrE = this->resFile.GetResAnmChr("shay_teresaB"); - ret = this->anmShayB.setup(mdlC, anmChrE, &this->allocator, 0); - - nw4r::g3d::ResAnmChr anmChrF = this->resFile.GetResAnmChr("shay_teresaB_wait"); - ret = this->anmWaitB.setup(mdlC, anmChrF, &this->allocator, 0); + ret = this->anmB.setup(mdlC, anmChrE, &this->allocator, 0); nw4r::g3d::ResAnmTexSrt anmSrt = this->resFile.GetResAnmTexSrt("fog"); this->resTexSrt = anmSrt; @@ -198,7 +195,7 @@ int daRamboo_c::onCreate() { this->rot.y = 0xE000; // Y is horizontal axis this->rot.z = 0; // Z is ... an axis >.> this->direction = 0; // Heading left. - this->Hiding = 0; + this->Hiding = 1; this->dying = 0; this->speed.x = 0.0; @@ -300,10 +297,17 @@ void daRamboo_c::executeState_Grow() { bool ret; ret = GrowBoss(this, Kameck, 1.0, 15.0, 0, this->timer); - if (ret) { + if (timer == 421) { + bindAnimChr_and_setUpdateRates("begin_boss_b", anmB, hideModel, 1.0f); + } + + if (ret) + hideModel._vf1C(); + if (ret && anmB.isAnimationDone()) { PlaySound(this, SE_EMY_CS_TERESA_BRING_IT); + Hiding = 0; doStateChange(&StateID_Advance); - } + } } void daRamboo_c::endState_Grow() { this->Baseline = this->pos.y; @@ -339,18 +343,15 @@ void daRamboo_c::beginState_Advance() { this->speed.z = 0; this->timer = 0; - nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("wait"); - this->anmWaitA.bind(&this->bodyModel, anmChr, 1); - this->bodyModel.bindAnim(&this->anmWaitA, 0.0); - this->anmWaitA.setUpdateRate(1.0); + bindAnimChr_and_setUpdateRates("wait", anmA, bodyModel, 1.0f); } void daRamboo_c::executeState_Advance() { this->bodyModel._vf1C(); - if (this->anmWaitA.isAnimationDone()) { - this->anmWaitA.setCurrentFrame(0.0); } + if (this->anmA.isAnimationDone()) { + this->anmA.setCurrentFrame(0.0); } float px = RightmostPlayerPos(); @@ -397,23 +398,17 @@ void daRamboo_c::executeState_Wait() { if (this->timer == 70) { this->Hiding = 0; - nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("shay_teresaA"); - this->anmShayA.bind(&this->bodyModel, anmChr, 1); - this->bodyModel.bindAnim(&this->anmShayA, 0.0); - this->anmShayA.setUpdateRate(1.0); + bindAnimChr_and_setUpdateRates("shay_teresaA", anmA, bodyModel, 1.0f); } if (this->timer == 55) { - nw4r::g3d::ResAnmChr anmChrB = this->resFile.GetResAnmChr("shay_teresaB"); - this->anmShayB.bind(&this->hideModel, anmChrB, 1); - this->hideModel.bindAnim(&this->anmShayB, 0.0); - this->anmShayB.setUpdateRate(1.0); + bindAnimChr_and_setUpdateRates("shay_teresaB", anmB, hideModel, 1.0f); } - if (this->anmShayB.isAnimationDone()) { + if (this->anmB.isAnimationDone()) { PlaySound(this, SE_EMY_CS_TERESA_BEAT_YOU); doStateChange(&StateID_Advance); } @@ -426,10 +421,7 @@ void daRamboo_c::endState_Wait() { this->Hiding = 0; - nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("shay_teresaA"); - this->anmShayA.bind(&this->bodyModel, anmChr, 1); - this->bodyModel.bindAnim(&this->anmShayA, 0.0); - this->anmShayA.setUpdateRate(1.0); + bindAnimChr_and_setUpdateRates("shay_teresaA", anmA, bodyModel, 1.0f); } @@ -450,16 +442,13 @@ void daRamboo_c::executeState_Flee() { if (this->timer == 10) { this->Hiding = 1; - nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("shay_teresaB_wait"); - this->anmWaitB.bind(&this->hideModel, anmChr, 1); - this->hideModel.bindAnim(&this->anmWaitB, 0.0); - this->anmWaitB.setUpdateRate(1.0); + bindAnimChr_and_setUpdateRates("shay_teresaB_wait", anmB, hideModel, 1.0f); } - this->pos.x += (60 - this->timer) / 8; + this->pos.x += (60 - this->timer) / (fleeFast ? 8 : 25); - if ((this->timer > 60) && (this->anmWaitB.isAnimationDone())) { + if ((this->timer > 60) && (this->anmB.isAnimationDone())) { doStateChange(&StateID_Wait); } @@ -474,10 +463,7 @@ void daRamboo_c::endState_Flee() { void daRamboo_c::beginState_Outro() { - nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("shay_teresaB_wait"); - this->anmWaitB.bind(&this->hideModel, anmChr, 1); - this->hideModel.bindAnim(&this->anmWaitB, 0.0); - this->anmWaitB.setUpdateRate(1.0); + bindAnimChr_and_setUpdateRates("shay_teresaB_wait", anmB, hideModel, 1.0f); this->timer = 0; this->rot.x = 0x0; // X is vertical axis @@ -487,8 +473,8 @@ void daRamboo_c::beginState_Outro() { OutroSetup(this); } void daRamboo_c::executeState_Outro() { - if (this->anmWaitB.isAnimationDone()) - this->anmWaitB.setCurrentFrame(0.0); + if (this->anmB.isAnimationDone()) + this->anmB.setCurrentFrame(0.0); if (this->dying == 1) { if (this->timer > 180) { -- cgit v1.2.3