summaryrefslogtreecommitdiff
path: root/src/koopatlas/pathmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/koopatlas/pathmanager.cpp')
-rw-r--r--src/koopatlas/pathmanager.cpp56
1 files changed, 31 insertions, 25 deletions
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp
index 0ff9473..ffc4dfd 100644
--- a/src/koopatlas/pathmanager.cpp
+++ b/src/koopatlas/pathmanager.cpp
@@ -91,7 +91,7 @@ void dWMPathManager_c::unlockPaths() {
u8 *oldNodeAvData = NodeAvailabilityData;
NodeAvailabilityData = new u8[pathLayer->nodeCount];
- OSReport("Unlocking paths\n");
+ SpammyReport("Unlocking paths\n");
// unlock all needed paths
for (int i = 0; i < pathLayer->pathCount; i++) {
@@ -99,7 +99,7 @@ void dWMPathManager_c::unlockPaths() {
PathAvailabilityData[i] = path->isAvailable;
- //OSReport("Path %d: %d\n", i, path->isAvailable);
+ //SpammyReport("Path %d: %d\n", i, path->isAvailable);
// if this path is not "always available", then nuke its alpha
path->setLayerAlpha((path->isAvailable == dKPPath_s::ALWAYS_AVAILABLE) ? 255 : 0);
}
@@ -110,46 +110,46 @@ void dWMPathManager_c::unlockPaths() {
SaveBlock *save = GetSaveFile()->GetBlock(-1);
u8 *in = (u8*)dScKoopatlas_c::instance->mapData.data->unlockData;
- OSReport("UNLOCKING PATHS: Unlock data @ %p\n", in);
+ SpammyReport("UNLOCKING PATHS: Unlock data @ %p\n", in);
int cmdID = 0;
while (*in != 0) {
- OSReport("[%p] Cmd %d: Evaluating condition\n", in, cmdID);
+ SpammyReport("[%p] Cmd %d: Evaluating condition\n", in, cmdID);
// begin processing a block
bool value = evaluateUnlockCondition(in, save, 0);
- OSReport("[%p] Cmd %d: Condition evaluated, result: %d\n", in, cmdID, value);
- //OSReport("Unlock condition: %d\n", value);
+ SpammyReport("[%p] Cmd %d: Condition evaluated, result: %d\n", in, cmdID, value);
+ //SpammyReport("Unlock condition: %d\n", value);
// get what it's supposed to affect
// for now we'll assume that it affects one or more paths
u8 affectedCount = *(in++);
- OSReport("[%p] Cmd %d: Affects %d path(s)\n", in, cmdID, affectedCount);
+ SpammyReport("[%p] Cmd %d: Affects %d path(s)\n", in, cmdID, affectedCount);
for (int i = 0; i < affectedCount; i++) {
u8 one = *(in++);
u8 two = *(in++);
u16 pathID = (one << 8) | two;
- OSReport("[%p] Cmd %d: Affected %d: PathID: %d\n", in, cmdID, i, pathID);
+ SpammyReport("[%p] Cmd %d: Affected %d: PathID: %d\n", in, cmdID, i, pathID);
dKPPath_s *path = pathLayer->paths[pathID];
- OSReport("[%p] Cmd %d: Affected %d: Path: %p\n", in, cmdID, i, path);
+ SpammyReport("[%p] Cmd %d: Affected %d: Path: %p\n", in, cmdID, i, path);
path->isAvailable = value ? dKPPath_s::AVAILABLE : dKPPath_s::NOT_AVAILABLE;
- OSReport("[%p] Cmd %d: Affected %d: IsAvailable written\n", in, cmdID, i);
+ SpammyReport("[%p] Cmd %d: Affected %d: IsAvailable written\n", in, cmdID, i);
PathAvailabilityData[pathID] = value ? dKPPath_s::AVAILABLE : dKPPath_s::NOT_AVAILABLE;
- OSReport("[%p] Cmd %d: Affected %d: AvailabilityData written\n", in, cmdID, i);
+ SpammyReport("[%p] Cmd %d: Affected %d: AvailabilityData written\n", in, cmdID, i);
// NEWLY_AVAILABLE is set later, when that stuff is figured out
path->setLayerAlpha(value ? 255 : 0);
- OSReport("[%p] Cmd %d: Affected %d: Layer alpha applied\n", in, cmdID, i);
+ SpammyReport("[%p] Cmd %d: Affected %d: Layer alpha applied\n", in, cmdID, i);
}
- OSReport("[%p] Cmd %d: %d affected path(s) processed\n", in, cmdID, affectedCount);
+ SpammyReport("[%p] Cmd %d: %d affected path(s) processed\n", in, cmdID, affectedCount);
cmdID++;
}
- OSReport("UNLOCKING PATHS: All complete @ %p\n", in);
+ SpammyReport("UNLOCKING PATHS: All complete @ %p\n", in);
// did anything become newly available?!
newlyAvailablePaths = 0;
@@ -194,14 +194,14 @@ void dWMPathManager_c::unlockPaths() {
}
bool dWMPathManager_c::evaluateUnlockCondition(u8 *&in, SaveBlock *save, int stack) {
- OSReport("[%p] CondStk:%d begin\n", in, stack);
+ SpammyReport("[%p] CondStk:%d begin\n", in, stack);
u8 controlByte = *(in++);
u8 conditionType = (controlByte >> 6);
- OSReport("[%p] CondStk:%d control byte: %d; condition type: %d\n", in, stack, controlByte, conditionType);
+ SpammyReport("[%p] CondStk:%d control byte: %d; condition type: %d\n", in, stack, controlByte, conditionType);
if (conditionType == 0) {
- OSReport("[%p] CondStk:%d end, returning CONSTANT 1\n", in, stack);
+ SpammyReport("[%p] CondStk:%d end, returning CONSTANT 1\n", in, stack);
return true;
}
@@ -211,10 +211,10 @@ bool dWMPathManager_c::evaluateUnlockCondition(u8 *&in, SaveBlock *save, int sta
bool isSecret = (controlByte & 0x10);
u8 worldNumber = controlByte & 0xF;
u8 levelNumber = *(in++);
- OSReport("[%p] CondStk:%d level, w:%d l:%d secret:%d\n", in, stack, worldNumber, levelNumber, isSecret);
+ SpammyReport("[%p] CondStk:%d level, w:%d l:%d secret:%d\n", in, stack, worldNumber, levelNumber, isSecret);
u32 conds = save->GetLevelCondition(worldNumber, levelNumber);
- OSReport("[%p] CondStk:%d returning for level conditions: %d / %x\n", in, stack, conds, conds);
+ SpammyReport("[%p] CondStk:%d returning for level conditions: %d / %x\n", in, stack, conds, conds);
if (isSecret)
return (conds & COND_SECRET) != 0;
@@ -229,7 +229,7 @@ bool dWMPathManager_c::evaluateUnlockCondition(u8 *&in, SaveBlock *save, int sta
bool value = isOr ? false : true;
u8 termCount = (controlByte & 0x3F) + 1;
- OSReport("[%p] CondStk:%d and:%d or:%d startValue:%d termCount:%d\n", in, stack, isAnd, isOr, value, termCount);
+ SpammyReport("[%p] CondStk:%d and:%d or:%d startValue:%d termCount:%d\n", in, stack, isAnd, isOr, value, termCount);
for (int i = 0; i < termCount; i++) {
bool what = evaluateUnlockCondition(in, save, stack+1);
@@ -240,7 +240,7 @@ bool dWMPathManager_c::evaluateUnlockCondition(u8 *&in, SaveBlock *save, int sta
value &= what;
}
- OSReport("[%p] CondStk:%d end, returning %d\n", in, stack, value);
+ SpammyReport("[%p] CondStk:%d end, returning %d\n", in, stack, value);
return value;
}
@@ -454,7 +454,7 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) {
moveSpeed = 0.2f;
break;
default:
- OSReport("No animtaion?!");
+ SpammyReport("No animtaion?!");
player->startAnimation(run, 2.0, 10.0, 0.0);
player->hasSound = true;
player->soundName = SE_PLY_FOOTNOTE_DIRT;
@@ -515,7 +515,13 @@ void dWMPathManager_c::moveThroughPath() {
bool reallyStop = false;
- if (to->type == dKPNode_s::PASS_THROUGH) {
+ if (to->type == dKPNode_s::LEVEL) {
+ // Always stop on levels
+ reallyStop = true;
+ } else if (to->type == dKPNode_s::CHANGE) {
+ // Never stop on entrances
+ reallyStop = false;
+ } else if (to->type == dKPNode_s::PASS_THROUGH) {
// If there's only one exit here, then stop even though
// it's a passthrough node
reallyStop = (to->getAvailableExitCount() == 1);
@@ -534,10 +540,10 @@ void dWMPathManager_c::moveThroughPath() {
isMoving = false;
SaveBlock *save = GetSaveFile()->GetBlock(-1);
- OSReport("node: %x, %s", to->destMap, to->destMap);
+ SpammyReport("node: %x, %s", to->destMap, to->destMap);
save->current_world = dScKoopatlas_c::instance->getIndexForMapName(to->destMap);
- OSReport("Change to map ID %d (%s), entrance ID %d\n", save->current_world, to->destMap, to->foreignID);
+ SpammyReport("Change to map ID %d (%s), entrance ID %d\n", save->current_world, to->destMap, to->foreignID);
DoSceneChange(WORLD_MAP, 0x10000000 | (to->foreignID << 20), 0);