summaryrefslogtreecommitdiff
path: root/src/koopatlas
diff options
context:
space:
mode:
Diffstat (limited to 'src/koopatlas')
-rw-r--r--src/koopatlas/camera.cpp2
-rw-r--r--src/koopatlas/core.cpp24
-rw-r--r--src/koopatlas/hud.cpp66
-rw-r--r--src/koopatlas/hud.h2
-rw-r--r--src/koopatlas/mapdata.h2
-rw-r--r--src/koopatlas/pathmanager.cpp41
-rw-r--r--src/koopatlas/pathmanager.h2
7 files changed, 109 insertions, 30 deletions
diff --git a/src/koopatlas/camera.cpp b/src/koopatlas/camera.cpp
index c13db56..1347c93 100644
--- a/src/koopatlas/camera.cpp
+++ b/src/koopatlas/camera.cpp
@@ -31,7 +31,7 @@ dWorldCamera_c::dWorldCamera_c() {
currentX = 416;
currentY = -224;
- zoomLevel = 2.0f;
+ zoomLevel = 2.8f;
}
diff --git a/src/koopatlas/core.cpp b/src/koopatlas/core.cpp
index 5e15d99..4a0d190 100644
--- a/src/koopatlas/core.cpp
+++ b/src/koopatlas/core.cpp
@@ -219,26 +219,33 @@ bool WMInit_SetupExtra(void *ptr) {
STKI_ITEM(wm->stockItem,i) = obj;
}
+ // need Player before we can set up paths
+ SpammyReport("creating player\n");
+ wm->player = (daWMPlayer_c*)CreateParentedObject(WM_PLAYER, wm, 0, 2);
+ wm->player->modelHandler->mdlClass->setPowerup(2);
+ wm->player->modelHandler->mdlClass->startAnimation(0, 1.2f, 10.0f, 0.0f);
+
// since we've got all the resources, set up the path data too
SpammyReport("preparing level info\n");
wm->levelInfo.load(wm->levelInfoLoader.buffer);
+ SpammyReport("preparing path manager\n");
wm->pathManager.setup();
- // and now Player setup
- wm->player = (daWMPlayer_c*)CreateParentedObject(WM_PLAYER, wm, 0, 2);
- wm->player->modelHandler->mdlClass->setPowerup(2);
- wm->player->modelHandler->mdlClass->startAnimation(0, 1.2f, 10.0f, 0.0f);
-
+ // and put the player into position
dKPNode_s *cNode = wm->pathManager.currentNode;
wm->player->pos = (Vec){cNode->x, -cNode->y, wm->player->pos.z};
// is last param correct? must check :/
+ SpammyReport("creating MAP\n");
wm->map = (dWMMap_c*)CreateParentedObject(WM_MAP, wm, 0, 0);
+ SpammyReport("creating HUD\n");
wm->hud = (dWMHud_c*)CreateParentedObject(WM_HUD, wm, 0, 0);
// note: world_camera is not created here
// because we require it earlier
// it is created in dScKoopatlas_c::onCreate
+ SpammyReport("SetupExtra done\n");
+
return true;
}
@@ -249,6 +256,11 @@ bool WMInit_SetupWipe(void *ptr) {
if (wm->hasUninitialisedProcesses()) {
SpammyReport("WMInit_SetupWipe returning false\n");
+
+#ifdef WM_SPAMMY_DEBUGGING
+ fBase_c *p = wm->findNextUninitialisedProcess();
+ SpammyReport("Not done yet: %p [%d]\n", p, p->name);
+#endif
return false;
}
@@ -394,7 +406,7 @@ bool dScKoopatlas_c::canDoStuff() {
int dScKoopatlas_c::onExecute() {
if (!canDoStuff()) return true;
- SpammyReport("Executing state: %s\n", state.getCurrentState()->getName());
+ //SpammyReport("Executing state: %s\n", state.getCurrentState()->getName());
state.execute();
return true;
diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp
index 531c3b1..c20f026 100644
--- a/src/koopatlas/hud.cpp
+++ b/src/koopatlas/hud.cpp
@@ -56,6 +56,9 @@ int dWMHud_c::onCreate() {
showPointBar();
+ if (dScKoopatlas_c::instance->pathManager.mustComplainToMapCreator)
+ dWMHud_c::instance->setText("Please Fix Your Missing Entrance. Thanks");
+
layoutLoaded = true;
}
@@ -88,30 +91,36 @@ void dWMHud_c::updateText() {
}
-void dWMHud_c::setPointName() {
- wchar_t newPointName[120];
- int length;
+void dWMHud_c::setText(const char *str, int length) {
+ if (str == 0) {
+ setText("--NULL STRING--");
+ return;
+ }
- // figure this out...
- dKPNode_s *node = dScKoopatlas_c::instance->pathManager.currentNode;
+ if (length == -1) {
+ length = strlen(str);
+ }
- if (node->type == dKPNode_s::LEVEL) {
- dLevelInfo_c *li = &dScKoopatlas_c::instance->levelInfo;
- dLevelInfo_c::entry_s *entry = li->search(node->levelNumber[0] - 1, node->levelNumber[1] - 1);
+ wchar_t newString[128];
- const char *levelName = li->getNameForLevel(entry);
+ int i;
+ for (i = 0; i < length && i < 128; i++) {
+ newString[i] = str[i];
+ }
+ newString[i] = 0;
- // copy it
- // I need to make this into a function.
- for (int i = 0; i < 120 && i < entry->nameLength; i++) {
- newPointName[i] = levelName[i];
- }
- length = entry->nameLength;
- newPointName[entry->nameLength] = 0;
+ setText(newString, i);
+}
- } else {
- newPointName[0] = 0;
- length = 0;
+
+void dWMHud_c::setText(const wchar_t *str, int length) {
+ if (str == 0) {
+ setText("--NULL STRING--");
+ return;
+ }
+
+ if (length == -1) {
+ length = wcslen(str);
}
nw4r::lyt::TextBox *box = layout.findTextBoxByName("T_levelname_01");
@@ -124,14 +133,29 @@ void dWMHud_c::setPointName() {
if (box->tagProc != 0)
tw.tagProcessorMaybe = box->tagProc;
- float width = tw.CalcStringWidth(newPointName, length);
+ float width = tw.CalcStringWidth(str, length);
SpammyReport("Text width: %f\n", width);
layout.findWindowByName("W_levelname")->size.x = width + 22;
layout.findPictureByName("P_topleftboxbg")->size.x = width;
layout.findPictureByName("P_topthinboxbg")->size.x = 597 - width;
- box->SetString(newPointName);
+ box->SetString(str);
+}
+
+
+void dWMHud_c::setPointName() {
+ // figure this out...
+ dKPNode_s *node = dScKoopatlas_c::instance->pathManager.currentNode;
+
+ if (node->type == dKPNode_s::LEVEL) {
+ dLevelInfo_c *li = &dScKoopatlas_c::instance->levelInfo;
+ dLevelInfo_c::entry_s *entry = li->search(node->levelNumber[0] - 1, node->levelNumber[1] - 1);
+
+ setText(li->getNameForLevel(entry));
+ } else {
+ setText("");
+ }
}
diff --git a/src/koopatlas/hud.h b/src/koopatlas/hud.h
index 1ef94ce..8d964c5 100644
--- a/src/koopatlas/hud.h
+++ b/src/koopatlas/hud.h
@@ -21,6 +21,8 @@ class dWMHud_c : public dBase_c {
void hidePointBar();
void setPointName();
+ void setText(const char *str, int length = -1);
+ void setText(const wchar_t *str, int length = -1);
static dWMHud_c *build();
static dWMHud_c *instance;
diff --git a/src/koopatlas/mapdata.h b/src/koopatlas/mapdata.h
index 913c933..ace1edd 100644
--- a/src/koopatlas/mapdata.h
+++ b/src/koopatlas/mapdata.h
@@ -67,7 +67,7 @@ struct dKPNode_s {
NodeTypes type;
union {
struct { u8 levelNumber[2]; };
- struct { const char *destMap; u8 thisID, foreignID, transition; };
+ struct { const char *destMap; u8 thisID, foreignID, transition, _; };
};
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp
index 923d08c..632edfa 100644
--- a/src/koopatlas/pathmanager.cpp
+++ b/src/koopatlas/pathmanager.cpp
@@ -10,39 +10,57 @@ void dWMPathManager_c::setup() {
pathLayer = dScKoopatlas_c::instance->mapData.pathLayer;
+ SpammyReport("setting up PathManager\n");
SaveBlock *save = GetSaveFile()->GetBlock(-1);
+ mustComplainToMapCreator = false;
+
// Figure out what path node to start at
if (dScKoopatlas_c::instance->settings & 0x10000000) {
// Start off from a "Change"
u8 changeID = dScKoopatlas_c::instance->settings & 0xFF;
+ SpammyReport("entering at Change ID %d\n", changeID);
+ SpammyReport("Path layer: %p\n", pathLayer);
+ SpammyReport("Node count: %d\n", pathLayer->nodeCount);
bool found = false;
for (int i = 0; i < pathLayer->nodeCount; i++) {
dKPNode_s *node = pathLayer->nodes[i];
+ SpammyReport("Checking node: %p\n", node);
if (node->type == dKPNode_s::CHANGE && node->thisID == changeID) {
found = true;
currentNode = node;
- startMovementTo(node->getAnyExit());
+ SpammyReport("a1 Node: %p\n", node);
+ dKPPath_s *exit = node->getAnyExit();
+ SpammyReport("a2 Exit: %p\n", exit);
+ startMovementTo(exit);
+ SpammyReport("a3\n");
+ break;
}
}
if (!found) {
OSReport("Couldn't find target node %d!\n", changeID);
+ currentNode = pathLayer->nodes[0];
+ mustComplainToMapCreator = true;
}
} else {
+ 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);
currentNode = pathLayer->nodes[0];
} else {
currentNode = pathLayer->nodes[save->current_path_node];
+ SpammyReport("OK %p\n", currentNode);
}
}
// unlock all needed paths
+ SpammyReport("Unlocking paths\n");
for (int i = 0; i < pathLayer->pathCount; i++) {
dKPPath_s *path = pathLayer->paths[i];
@@ -55,6 +73,7 @@ void dWMPathManager_c::setup() {
path->isAvailable = true;
}
}
+ SpammyReport("done\n");
}
@@ -79,25 +98,37 @@ void dWMPathManager_c::execute() {
void dWMPathManager_c::startMovementTo(dKPPath_s *path) {
+ SpammyReport("moving to path %p\n", path);
dWMHud_c::instance->hidePointBar();
+ SpammyReport("point bar hidden\n");
+ SpammyReport("a\n");
isMoving = true;
reverseThroughPath = (path->end == currentNode);
+ SpammyReport("b\n");
currentPath = path;
+ SpammyReport("c\n");
// calculate direction of the path
short deltaX = path->end->x - path->start->x;
short deltaY = path->end->y - path->start->y;
+ SpammyReport("d\n");
u16 direction = (u16)(atan2(deltaX, deltaY) / ((M_PI * 2) / 65536.0));
+ SpammyReport("e\n");
if (reverseThroughPath) {
+ SpammyReport("e2\n");
direction += 0x8000;
}
+ SpammyReport("f\n");
daWMPlayer_c *player = daWMPlayer_c::instance;
+ SpammyReport("g %p\n", player);
player->startAnimation(2, 2.0, 10.0, 0.0);
+ SpammyReport("h\n");
player->rot.y = direction;
+ SpammyReport("i\n");
}
void dWMPathManager_c::moveThroughPath() {
@@ -125,6 +156,8 @@ void dWMPathManager_c::moveThroughPath() {
player->pos.x = to->x;
player->pos.y = -to->y;
+ SpammyReport("reached path end (%p)\n", to);
+
if (to->type == dKPNode_s::CHANGE) {
// Go to another map
isMoving = false;
@@ -132,20 +165,26 @@ void dWMPathManager_c::moveThroughPath() {
SaveBlock *save = GetSaveFile()->GetBlock(-1);
save->current_world = dScKoopatlas_c::instance->getIndexForMapName(to->destMap);
+ SpammyReport("Change to map ID %d (%s), entrance ID %d\n", save->current_world, to->destMap, to->foreignID);
+
DoSceneChange(WORLD_MAP, 0x10000000 | to->foreignID, 0);
} else if (to->type != dKPNode_s::PASS_THROUGH) {
// Stop here
player->startAnimation(0, 1.2, 10.0, 0.0);
+ SpammyReport("stopping here\n");
+
isMoving = false;
SaveBlock *save = GetSaveFile()->GetBlock(-1);
save->current_path_node = pathLayer->findNodeID(to);
dWMHud_c::instance->showPointBar();
+ SpammyReport("Point bar shown\n");
} else {
startMovementTo(to->getOppositeExitTo(currentPath));
+ SpammyReport("passthrough node, continuing to next path\n");
}
}
}
diff --git a/src/koopatlas/pathmanager.h b/src/koopatlas/pathmanager.h
index 3ddcf58..c5a642c 100644
--- a/src/koopatlas/pathmanager.h
+++ b/src/koopatlas/pathmanager.h
@@ -23,6 +23,8 @@ class dWMPathManager_c {
dKPPath_s *currentPath;
bool reverseThroughPath; // direction we are going through the path
+
+ bool mustComplainToMapCreator;
};
#endif