diff options
Diffstat (limited to 'src/koopatlas/pathmanager.cpp')
-rw-r--r-- | src/koopatlas/pathmanager.cpp | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index d55ad12..00e1bef 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -2,6 +2,7 @@ #include "koopatlas/core.h" #include "koopatlas/hud.h" #include "koopatlas/player.h" +#include "koopatlas/map.h" #include <sfx.h> #include <stage.h> @@ -821,7 +822,7 @@ void dWMPathManager_c::execute() { } else { // TODO: maybe remove this? got to see how it looks static u16 directions[] = {-0x4000,0x4000,-0x7FFF,0}; - daWMPlayer_c::instance->rot.y = directions[pressedDir]; + daWMPlayer_c::instance->setTargetRotY(directions[pressedDir]); } } else if (nowPressed & WPAD_TWO) { activatePoint(); @@ -881,7 +882,9 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) { {jump,1.0f,1.0f, -1,2.5f, SE_NULL,SE_PLY_JUMP, 0,0}, {jump,1.0f,10.0f, -1,2.5f, SE_NULL,SE_PLY_JUMP, 0,0}, {jump,1.0f,10.0f, -1,2.5f, SE_NULL,SE_PLY_JUMP, 0,0}, - {jump,1.0f,10.0f, -1,2.5f, SE_NULL,SE_PLY_JUMP, 0,"Wm_mr_waterwave_out"}, + + // Jump water (actually cannon) + {dm_notice,1.0f,10.0f, -1,-1.0f, SE_NULL,SE_VOC_MA_CANNON_SHOT, 0,0}, // Ladder up, left, right {pea_plant,1.2f,10.0f, -0x7FFF,1.5f, SE_PLY_FOOTNOTE_CS_ROCK_CLIMB,SE_NULL, 0,0}, @@ -904,13 +907,15 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) { // Enter cave, this is handled specially {run,1.0f,10.0f, -1,1.0f, SE_NULL,SE_NULL, 0,0}, - {run,1.0f,10.0f, -1,1.0f, SE_NULL,SE_NULL, 0,0}, + + // Cannon 2 + {dm_noti_wait,1.0f,10.0f, -1,-1.0f, SE_NULL,SE_VOC_MA_CANNON_SHOT, 0,0}, // Invisible, this is handled specially {wait,2.0f,10.0f, -1,1.0f, SE_NULL,SE_NULL, 0,0}, }; - isJumping = (path->animation >= dKPPath_s::JUMP && path->animation <= dKPPath_s::JUMP_WATER); + isJumping = (path->animation >= dKPPath_s::JUMP && path->animation <= dKPPath_s::JUMP_SAND); float playerScale = 1.6f; @@ -938,16 +943,25 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) { whichAnim = P_slip; } - player->startAnimation(whichAnim, updateRate, Animations[id].animParam2, 0.0f); - if (Animations[id].forceRotation != -1) { forcedRotation = true; - player->rot.y = Animations[id].forceRotation; + player->setTargetRotY(Animations[id].forceRotation); + } else if (id == dKPPath_s::JUMP_WATER || id == dKPPath_s::RESERVED_18) { + // keep the current rotation + forcedRotation = true; + PlayerAnimStates[dm_notice].playsOnce = 0; + + nw4r::snd::SoundHandle something; + PlaySoundWithFunctionB4(SoundRelatedClass, &something, SE_OBJ_WARP_CANNON_SHOT, 1); + + dWMMap_c::instance->spinLaunchStar(); } else { forcedRotation = false; - player->rot.y = direction; + player->setTargetRotY(direction); } + player->startAnimation(whichAnim, updateRate, Animations[id].animParam2, 0.0f); + moveSpeed = (Animations[id].forceSpeed >= 0.0f) ? Animations[id].forceSpeed : 3.0f; moveSpeed = path->speed * moveSpeed; if (path->animation == dKPPath_s::SWIM) { @@ -1051,7 +1065,7 @@ void dWMPathManager_c::moveThroughPath(int pressedDir) { if (allowed) { reverseThroughPath = !reverseThroughPath; if (!forcedRotation) - player->rot.y += 0x8000; + player->setTargetRotY(player->targetRotY + 0x8000); // start over with the reversed path! moveThroughPath(-1); return; @@ -1332,7 +1346,7 @@ void dWMPathManager_c::activatePoint() { PlaySoundWithFunctionB4(SoundRelatedClass, &something2, (Player_Powerup[0] == 3) ? SE_VOC_MA_PLAYER_DECIDE_MAME: SE_VOC_MA_CS_COURSE_IN, 1); daWMPlayer_c::instance->startAnimation(course_in, 1.2, 10.0, 0.0); - daWMPlayer_c::instance->rot.y = 0; + daWMPlayer_c::instance->setTargetRotY(0); isEnteringLevel = true; levelStartWait = 40; |