diff options
Diffstat (limited to 'src/koopatlas/pathmanager.cpp')
-rw-r--r-- | src/koopatlas/pathmanager.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index 002b400..a5e4294 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -10,6 +10,8 @@ extern "C" void PlaySoundWithFunctionB4(void *spc, nw4r::snd::SoundHandle *handl static u8 MaybeFinishingLevel[2] = {0xFF,0xFF}; void dWMPathManager_c::setup() { + dScKoopatlas_c *wm = dScKoopatlas_c::instance; + isMoving = false; isJumping = false; scaleAnimProgress = -1; @@ -17,7 +19,7 @@ void dWMPathManager_c::setup() { currentPath = 0; reverseThroughPath = false; - pathLayer = dScKoopatlas_c::instance->mapData.pathLayer; + pathLayer = wm->mapData.pathLayer; SpammyReport("setting up PathManager\n"); SaveBlock *save = GetSaveFile()->GetBlock(-1); @@ -29,11 +31,6 @@ void dWMPathManager_c::setup() { levelStartWait = -1; unlockPaths(); - if (!countdownToFadeIn) - waitAtStart = 50; - else - waitAtStart = -1; - waitForAfterDeathAnim = -1; mustPlayAfterDeathAnim = false; if (LastPowerupStoreType == LOSE_LEVEL) { @@ -45,9 +42,9 @@ void dWMPathManager_c::setup() { SpammyReport("done\n"); // Figure out what path node to start at - if (dScKoopatlas_c::instance->settings & 0x10000000) { + if (wm->settings & 0x10000000) { // Start off from a "Change" - u8 changeID = (dScKoopatlas_c::instance->settings >> 20) & 0xFF; + u8 changeID = (wm->settings >> 20) & 0xFF; SpammyReport("entering at Change ID %d\n", changeID); SpammyReport("Path layer: %p\n", pathLayer); SpammyReport("Node count: %d\n", pathLayer->nodeCount); @@ -112,7 +109,16 @@ void dWMPathManager_c::setup() { mustComplainToMapCreator = true; } + waitAtStart = -1; } else { + if (!countdownToFadeIn) + waitAtStart = 50; + else + waitAtStart = -1; + + if (wm->currentMapID == 0 && wm->settings & 0x80000000) + waitAtStart = 280; + SpammyReport("saved path node: %d\n", save->current_path_node); if (save->current_path_node >= pathLayer->nodeCount) { SpammyReport("out of bounds (%d), using node 0\n", pathLayer->nodeCount); @@ -232,7 +238,6 @@ void dWMPathManager_c::unlockPaths() { if (node->type == node->LEVEL && node->isUnlocked() && node->levelNumber[1] != 99) { save->completions[node->levelNumber[0]-1][node->levelNumber[1]-1] |= COND_UNLOCKED; - OSReport("beets: %d-%d\n", node->levelNumber[0], node->levelNumber[1]); } } @@ -590,13 +595,11 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) { if (Animations[id].initialEffect) { SpawnEffect(Animations[id].initialEffect, 0, &player->pos, 0, &player->scale); - daWMPlayer_c::instance->nextNowEffect = Animations[id].initialEffect; } if (Animations[id].initialSound != SE_NULL) { nw4r::snd::SoundHandle something; PlaySoundWithFunctionB4(SoundRelatedClass, &something, Animations[id].initialSound, 1); - daWMPlayer_c::instance->nextNowSound = Animations[id].initialSound; if (Animations[id].initialSound == SE_PLY_JUMP) { nw4r::snd::SoundHandle something2; @@ -735,10 +738,12 @@ void dWMPathManager_c::moveThroughPath() { if (visiblyChange && dWMHud_c::instance) dWMHud_c::instance->showFooter(); - dScKoopatlas_c::instance->setBGMTrack(world->trackID); + dKPMusic::play(world->trackID); } else if (to->worldID == 0) { OSReport("No world\n"); + save->currentMapMusic = 0; + dKPMusic::play(0); save->newerWorldName[0] = 0; if (dWMHud_c::instance) dWMHud_c::instance->hideFooter(); @@ -765,6 +770,7 @@ void dWMPathManager_c::moveThroughPath() { SpammyReport("Change to map ID %d (%s), entrance ID %d\n", save->current_world, to->destMap, to->foreignID); + dScKoopatlas_c::instance->keepMusicPlaying = true; ActivateWipe(to->transition); DoSceneChange(WORLD_MAP, 0x10000000 | (to->foreignID << 20), 0); @@ -828,10 +834,7 @@ void dWMPathManager_c::activatePoint() { levelStartWait = 40; enteredLevel = dLevelInfo_c::s_info.searchBySlot(w, l); - if (dScKoopatlas_c::instance->bgm.Exists()) { - dScKoopatlas_c::instance->bgm.Stop(50); - dScKoopatlas_c::instance->bgm.DetachSound(); - } + dKPMusic::stop(); } } |