summaryrefslogtreecommitdiff
path: root/src/worldmapdata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/worldmapdata.cpp')
-rw-r--r--src/worldmapdata.cpp75
1 files changed, 37 insertions, 38 deletions
diff --git a/src/worldmapdata.cpp b/src/worldmapdata.cpp
index 0473bbb..2f23afc 100644
--- a/src/worldmapdata.cpp
+++ b/src/worldmapdata.cpp
@@ -1,59 +1,59 @@
-#include "worldmapdata.h"
+#include "worldmap.h"
+
+dWMPathData_c::dWMPathData_c() {
-WorldMapData::WorldMapData() {
-
}
-WorldMapData::~WorldMapData() {
- FreeFile(&this->fh);
+dWMPathData_c::~dWMPathData_c() {
+
}
-bool WorldMapData::load(const char *filename) {
- OSReport("Loading WM Data file: %s\n", filename);
-
- u32 ptr = (u32)LoadFile(&this->fh, filename);
- WMDataHeader *header = (WMDataHeader*)ptr;
-
- OSReport("Loaded WM Data file @ %p\n", ptr);
-
+bool dWMPathData_c::load(void *data) {
+ MapReport("dWMPathData_c initialised with %p\n", data);
+
+ WMPathHeader *header = (WMPathHeader*)data;
+ this->data = header;
+
+ u32 ptr = (u32)data; // for easy addition! probably bad practice, but whatever..
+
// first off, fix the list pointers
header->pathList = (WMPathDef**)((u32)header->pathList + ptr);
header->pointList = (WMPathPoint**)((u32)header->pointList + ptr);
header->segmentList = (WMPathSegment**)((u32)header->segmentList + ptr);
header->actionList = (WMPathAction**)((u32)header->actionList + ptr);
-
+
// now, fix every pointer in the lists
- OSReport("Fixing up list pointers\n");
+ MapReport("Fixing up list pointers\n");
for (int i = 0; i < header->pathCount; i++)
header->pathList[i] = (WMPathDef*)((u32)header->pathList[i] + ptr);
-
+
for (int i = 0; i < header->pointCount; i++)
header->pointList[i] = (WMPathPoint*)((u32)header->pointList[i] + ptr);
-
+
for (int i = 0; i < header->segmentCount; i++)
header->segmentList[i] = (WMPathSegment*)((u32)header->segmentList[i] + ptr);
-
+
for (int i = 0; i < header->actionCount; i++)
header->actionList[i] = (WMPathAction*)((u32)header->actionList[i] + ptr);
-
+
// next up, fix every pointer in these structs
- OSReport("Fixing up path pointers [%d]\n", header->pathCount);
+ MapReport("Fixing up path pointers [%d]\n", header->pathCount);
for (int i = 0; i < header->pathCount; i++) {
WMPathDef *thisPath = header->pathList[i];
- //OSReport("Path @ %p - Index: %d - Segments: %d\n", thisPath, i, thisPath->segCount);
-
+ //MapReport("Path @ %p - Index: %d - Segments: %d\n", thisPath, i, thisPath->segCount);
+
thisPath->startPoint = header->pointList[(u32)thisPath->startPoint];
thisPath->endPoint = header->pointList[(u32)thisPath->endPoint];
-
+
for (int j = 0; j < thisPath->segCount; j++) {
thisPath->segments[j] = header->segmentList[(u32)thisPath->segments[j]];
}
}
-
- OSReport("Fixing up point pointers [%d]\n", header->pointCount);
+
+ MapReport("Fixing up point pointers [%d]\n", header->pointCount);
for (int i = 0; i < header->pointCount; i++) {
WMPathPoint *thisPoint = header->pointList[i];
-
+
for (int j = 0; j < 4; j++) {
if ((u32)thisPoint->exits.asArray[j].path == -1) {
thisPoint->exits.asArray[j].path = 0;
@@ -62,32 +62,31 @@ bool WorldMapData::load(const char *filename) {
}
}
}
-
- OSReport("Fixing up segment pointers [%d]\n", header->segmentCount);
+
+ MapReport("Fixing up segment pointers [%d]\n", header->segmentCount);
for (int i = 0; i < header->segmentCount; i++) {
WMPathSegment *thisSegment = header->segmentList[i];
-
+
if ((u32)thisSegment->action == -1) {
thisSegment->action = 0;
} else {
thisSegment->action = header->actionList[(u32)thisSegment->action];
}
}
-
- OSReport("Load complete\n");
-
+
+ MapReport("Load complete\n");
+
return true;
}
-int WorldMapData::getPointID(WMPathPoint *point) {
- WMDataHeader *header = (WMDataHeader*)this->fh.filePtr;
-
- for (int i = 0; i < header->pointCount; i++) {
- if (header->pointList[i] == point)
+int dWMPathData_c::getPointID(WMPathPoint *point) {
+ for (int i = 0; i < data->pointCount; i++) {
+ if (data->pointList[i] == point)
return i;
}
-
+
return -1;
}
+