summaryrefslogtreecommitdiff
path: root/src/koopatlas/pathmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/koopatlas/pathmanager.cpp155
1 files changed, 152 insertions, 3 deletions
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp
index 632edfa..6cf0750 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 <sfx.h>
void dWMPathManager_c::setup() {
isMoving = false;
@@ -125,9 +126,142 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) {
SpammyReport("f\n");
daWMPlayer_c *player = daWMPlayer_c::instance;
SpammyReport("g %p\n", player);
- player->startAnimation(2, 2.0, 10.0, 0.0);
+ // path->speed
+
+ // wait = 0,
+ // walk = 1,
+ // run = 2,
+ // b_dash2 = 4,
+
+ // jump = 5,
+ // 2jmp_c_2 = 9,
+ // 2jumped = 10,
+
+ // tree_climb = 45,
+
+ // swim_wait
+ // swim_walk = 38,
+
+ // wall_walk_l = 60,
+ // wall_walk_r = 61,
+
+ // hang_walk_l = 65,
+ // hang_walk_r = 66,
+
+ // wait, door_walk
SpammyReport("h\n");
player->rot.y = direction;
+ player->hasSound = false;
+ player->hasEffect = false;
+
+ switch (path->animation) {
+
+ // Running
+ case 0:
+ player->startAnimation(run, 2.0, 10.0, 0.0);
+ player->hasSound = true;
+ player->soundName = SE_PLY_FOOTNOTE_DIRT;
+ break;
+ case 1:
+ player->startAnimation(run, 2.0, 10.0, 0.0);
+ player->hasSound = true;
+ player->hasEffect = true;
+ player->soundName = SE_PLY_FOOTNOTE_CS_SAND;
+ player->effectName = "Wm_mr_foot_sand";
+ break;
+ case 2:
+ player->startAnimation(run, 2.0, 10.0, 0.0);
+ player->hasSound = true;
+ player->hasEffect = true;
+ player->soundName = SE_PLY_FOOTNOTE_CS_SNOW;
+ player->effectName = "Wm_mr_foot_snow";
+ break;
+ case 3:
+ player->startAnimation(run, 2.0, 10.0, 0.0);
+ player->hasSound = true;
+ player->hasEffect = true;
+ player->soundName = SE_PLY_FOOTNOTE_CS_WATER;
+ player->effectName = "Wm_mr_foot_water";
+ break;
+
+ // Jumping
+ case 4:
+ player->startAnimation(jump, 1.0, 1.0, 0.0);
+ MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1);
+ break;
+ case 5:
+ player->startAnimation(jump, 1.0, 10.0, 0.0);
+ MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1);
+ break;
+ case 6:
+ player->startAnimation(jump, 1.0, 10.0, 0.0);
+ MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1);
+ break;
+ case 7:
+ player->startAnimation(jump, 1.0, 10.0, 0.0);
+ MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1);
+ SpawnEffect("Wm_mr_waterwave_out", 0, &player->pos, 0, &player->scale);
+ break;
+
+ // Climbing
+ case 8:
+ player->startAnimation(pea_plant, 1.2, 10.0, 0.0);
+ player->rot.y = 0x8000;
+ player->hasSound = true;
+ player->soundName = SE_PLY_FOOTNOTE_CS_ROCK_CLIMB;
+ break;
+ case 9:
+ player->startAnimation(tree_climb, 1.2, 10.0, 0.0);
+ player->rot.y = 0xC000;
+ player->hasSound = true;
+ player->soundName = SE_PLY_FOOTNOTE_CS_ROCK_CLIMB;
+ break;
+ case 10:
+ player->startAnimation(tree_climb, 1.2, 10.0, 0.0);
+ player->rot.y = 0x4000;
+ player->hasSound = true;
+ player->soundName = SE_PLY_FOOTNOTE_CS_ROCK_CLIMB;
+ break;
+
+ // Others
+ case 12:
+ OSReport("Swimming");
+ player->startAnimation(swim_wait, 1.2, 10.0, 0.0);
+ player->hasSound = true;
+ player->hasEffect = true;
+ player->soundName = SE_PLY_SWIM;
+ player->effectName = "Wm_mr_waterswim";
+ break;
+ case 13:
+ OSReport("Falling");
+ player->startAnimation(Tjumped, 2.0, 0.0, 0.0);
+ break;
+ case 14:
+ OSReport("Dashing");
+ player->startAnimation(b_dash2, 3.0, 10.0, 0.0);
+ player->hasSound = true;
+ player->soundName = SE_PLY_FOOTNOTE_DIRT;
+ break;
+ case 15:
+ OSReport("Piping");
+ player->startAnimation(wait, 2.0, 10.0, 0.0);
+ player->rot.y = 0x0000;
+ MapSoundPlayer(SoundRelatedClass, SE_PLY_DOKAN_IN_OUT, 1);
+ break;
+ case 16:
+ OSReport("Dooring");
+ player->startAnimation(wait, 2.0, 10.0, 0.0);
+ player->rot.y = 0x8000;
+ MapSoundPlayer(SoundRelatedClass, SE_OBJ_DOOR_OPEN, 1);
+ break;
+ default:
+ OSReport("No animtaion?!");
+ player->startAnimation(run, 2.0, 10.0, 0.0);
+ player->hasSound = true;
+ player->soundName = SE_PLY_FOOTNOTE_DIRT;
+ break;
+ }
+
SpammyReport("i\n");
}
@@ -172,6 +306,8 @@ void dWMPathManager_c::moveThroughPath() {
} else if (to->type != dKPNode_s::PASS_THROUGH) {
// Stop here
player->startAnimation(0, 1.2, 10.0, 0.0);
+ player->hasEffect = false;
+ player->hasSound = false;
SpammyReport("stopping here\n");
@@ -191,10 +327,23 @@ void dWMPathManager_c::moveThroughPath() {
void dWMPathManager_c::activatePoint() {
if (currentNode->type == dKPNode_s::LEVEL) {
- daWMPlayer_c::instance->startAnimation(170, 1.2, 10.0, 0.0);
-
int w = currentNode->levelNumber[0] - 1;
int l = currentNode->levelNumber[1] - 1;
+
+ if ((l > 29) && (l < 38)) {
+ SaveBlock *save = GetSaveFile()->GetBlock(-1);
+ u32 conds = save->GetLevelCondition(w, l);
+
+ SpammyReport("Toad House Flags: %x", conds);
+ if (conds & 0xFF0) {
+
+ MapSoundPlayer(SoundRelatedClass, SE_SYS_INVALID, 1);
+ return; }
+ }
+
+ MapSoundPlayer(SoundRelatedClass, SE_SYS_GAME_START, 1);
+ daWMPlayer_c::instance->startAnimation(170, 1.2, 10.0, 0.0);
+
dLevelInfo_c::entry_s *level = dScKoopatlas_c::instance->levelInfo.search(w, l);
dScKoopatlas_c::instance->startLevel(level);
}