summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/koopatlas/pathmanager.cpp58
-rw-r--r--src/koopatlas/pathmanager.h5
2 files changed, 56 insertions, 7 deletions
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp
index 0855bd4..cf3e0eb 100644
--- a/src/koopatlas/pathmanager.cpp
+++ b/src/koopatlas/pathmanager.cpp
@@ -181,6 +181,9 @@ dWMPathManager_c::~dWMPathManager_c() {
}
}
}
+
+ if (penguinSlideSound.Exists())
+ penguinSlideSound.Stop(5);
}
void dWMPathManager_c::unlockPaths() {
@@ -613,8 +616,17 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) {
player->scale.x = player->scale.y = player->scale.z = playerScale;
int id = (path->animation >= dKPPath_s::MAX_ANIM) ? 0 : (int)path->animation;
+ int whichAnim = Animations[id].anim;
+ float updateRate = Animations[id].animParam1;
+ if (whichAnim == swim_wait) {
+ if (player->modelHandler->mdlClass->powerup_id == 3) {
+ whichAnim = b_dash;
+ updateRate = 2.5f;
+ } else if (player->modelHandler->mdlClass->powerup_id == 5)
+ whichAnim = P_slip;
+ }
- player->startAnimation(Animations[id].anim, Animations[id].animParam1, Animations[id].animParam2, 0.0f);
+ player->startAnimation(whichAnim, updateRate, Animations[id].animParam2, 0.0f);
if (Animations[id].forceRotation != -1) {
forcedRotation = true;
@@ -626,6 +638,12 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) {
moveSpeed = (Animations[id].forceSpeed >= 0.0f) ? Animations[id].forceSpeed : 3.0f;
moveSpeed = path->speed * moveSpeed;
+ if (path->animation == dKPPath_s::SWIM) {
+ if (player->modelHandler->mdlClass->powerup_id == 3)
+ moveSpeed *= 1.1f;
+ else if (player->modelHandler->mdlClass->powerup_id == 5)
+ moveSpeed *= 2.0f;
+ }
if (Animations[id].repeatEffect) {
player->hasEffect = true;
@@ -645,13 +663,36 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) {
SpawnEffect(Animations[id].initialEffect, 0, &player->pos, 0, &player->scale);
}
- if (Animations[id].initialSound != SE_NULL) {
- nw4r::snd::SoundHandle something;
- PlaySoundWithFunctionB4(SoundRelatedClass, &something, Animations[id].initialSound, 1);
+ if (path->animation == dKPPath_s::SWIM) {
+ if (player->modelHandler->mdlClass->powerup_id == 5) {
+ if (!swimming) {
+ nw4r::snd::SoundHandle something;
+ if (firstPathDone)
+ PlaySoundWithFunctionB4(SoundRelatedClass, &something, SE_VOC_MA_PNGN_SLIDE, 1);
+ PlaySoundWithFunctionB4(SoundRelatedClass, &penguinSlideSound, SE_EMY_PENGUIN_SLIDE, 1);
+ }
+ player->hasSound = false;
+ } else if (player->modelHandler->mdlClass->powerup_id == 3) {
+ player->hasSound = true;
+ player->soundName = SE_PLY_FOOTNOTE_WATER;
+ }
+ swimming = true;
+ } else {
+ if (swimming && penguinSlideSound.Exists()) {
+ penguinSlideSound.Stop(10);
+ penguinSlideSound.DetachSound();
+ }
+ swimming = false;
- if (Animations[id].initialSound == SE_PLY_JUMP) {
- nw4r::snd::SoundHandle something2;
- PlaySoundWithFunctionB4(SoundRelatedClass, &something2, SE_VOC_MA_CS_JUMP, 1);
+ if (Animations[id].initialSound != SE_NULL) {
+ nw4r::snd::SoundHandle something;
+ PlaySoundWithFunctionB4(SoundRelatedClass, &something, Animations[id].initialSound, 1);
+
+ if (Animations[id].initialSound == SE_PLY_JUMP) {
+ nw4r::snd::SoundHandle something2;
+ PlaySoundWithFunctionB4(SoundRelatedClass, &something2, SE_VOC_MA_CS_JUMP, 1);
+ something2.SetPitch(player->modelHandler->mdlClass->powerup_id == 3 ? 1.5f : 1.0f);
+ }
}
}
}
@@ -903,6 +944,7 @@ void dWMPathManager_c::moveThroughPath(int pressedDir) {
SpammyReport("stopping here\n");
isMoving = false;
+ swimming = false;
SaveBlock *save = GetSaveFile()->GetBlock(-1);
save->current_path_node = pathLayer->findNodeID(to);
@@ -913,6 +955,8 @@ void dWMPathManager_c::moveThroughPath(int pressedDir) {
SpammyReport("passthrough node, continuing to next path\n");
}
}
+
+ firstPathDone = true;
}
void dWMPathManager_c::copyWorldDefToSave(const dKPWorldDef_s *world) {
diff --git a/src/koopatlas/pathmanager.h b/src/koopatlas/pathmanager.h
index 9119235..156ed7b 100644
--- a/src/koopatlas/pathmanager.h
+++ b/src/koopatlas/pathmanager.h
@@ -36,6 +36,7 @@ class dWMPathManager_c {
dKPLayer_s *pathLayer;
+ bool firstPathDone;
bool isMoving;
dKPNode_s *currentNode;
@@ -50,6 +51,10 @@ class dWMPathManager_c {
int scaleAnimProgress;
bool isScalingUp;
+ nw4r::snd::SoundHandle penguinSlideSound;
+
+ bool swimming;
+
dKPPath_s *currentPath;
bool reverseThroughPath; // direction we are going through the path