gaeorn |
06-18-2009 01:20 AM |
So, because of the problems with the way the code was written to load map files, they actually were not being loaded at all under 64bit. This patch should correct this for regular maps.
Code:
Index: zone/map.h
===================================================================
--- zone/map.h (revision 687)
+++ zone/map.h (working copy)
@@ -56,11 +56,11 @@
}FACE, *PFACE;
typedef struct _mapHeader {
- unsigned long version;
+ uint32 version;
// unsigned long vertex_count;
- unsigned long face_count;
- unsigned short node_count;
- unsigned long facelist_count;
+ uint32 face_count;
+ uint16 node_count;
+ uint32 facelist_count;
} mapHeader;
/*
@@ -95,12 +95,12 @@
float maxx;
float maxy;
- unsigned char flags;
+ uint8 flags;
union {
- unsigned short nodes[4]; //index 0 means NULL, not root
+ uint16 nodes[4]; //index 0 means NULL, not root
struct {
- unsigned long count;
- unsigned long offset;
+ uint32 count;
+ uint32 offset;
} faces;
};
} nodeHeader, NODE, *PNODE;
@@ -111,7 +111,7 @@
#define NODE_NONE 65534
#define MAP_ROOT_NODE 0
-typedef unsigned short NodeRef;
+typedef uint16 NodeRef;
/*typedef struct _node {
nodeHeader head;
@@ -145,7 +145,7 @@
bool LineIntersectsZone(VERTEX start, VERTEX end, float step, VERTEX *result, FACE **on = NULL) const;
// inline unsigned int GetVertexNumber( ) {return m_Vertex; }
- inline unsigned int GetFacesNumber( ) const { return m_Faces; }
+ inline uint16 GetFacesNumber( ) const { return m_Faces; }
// inline PVERTEX GetVertex( int _idx ) {return mFinalVertex + _idx; }
inline PFACE GetFace( int _idx) {return mFinalFaces + _idx; }
inline PFACE GetFaceFromlist( int _idx) {return &mFinalFaces[ mFaceLists[_idx] ]; }
@@ -161,13 +161,13 @@
bool LineIntersectsZoneNoZLeaps(VERTEX start, VERTEX end, float step_mag, VERTEX *result, FACE **on);
private:
// unsigned long m_Vertex;
- unsigned long m_Faces;
- unsigned long m_Nodes;
- unsigned long m_FaceLists;
+ uint32 m_Faces;
+ uint32 m_Nodes;
+ uint32 m_FaceLists;
// PVERTEX mFinalVertex;
PFACE mFinalFaces;
PNODE mNodes;
- unsigned long *mFaceLists;
+ uint32 *mFaceLists;
int mCandFaces[100];
Index: zone/Map.cpp
===================================================================
--- zone/Map.cpp (revision 687)
+++ zone/Map.cpp (working copy)
@@ -119,11 +119,11 @@
if(head.version != MAP_VERSION) {
//invalid version... if there really are multiple versions,
//a conversion routine could be possible.
- printf("Invalid map version 0x%lx\n", head.version);
+ printf("Invalid map version 0x%lx\n", (unsigned long)head.version);
return(false);
}
- printf("Map header: %lu faces, %u nodes, %lu facelists\n", head.face_count, head.node_count, head.facelist_count);
+ printf("Map header: %lu faces, %u nodes, %lu facelists\n", (unsigned long)head.face_count, (unsigned int)head.node_count, (unsigned long)head.facelist_count);
m_Faces = head.face_count;
m_Nodes = head.node_count;
@@ -134,24 +134,24 @@
// mFinalVertex = new VERTEX[m_Vertex];
mFinalFaces = new FACE [m_Faces];
mNodes = new NODE[m_Nodes];
- mFaceLists = new unsigned long[m_FaceLists];
+ mFaceLists = new uint32[m_FaceLists];
// fread(mFinalVertex, m_Vertex, sizeof(VERTEX), fp);
//this was changed to this loop from the single read because valgrind was
//hanging on this read otherwise... I dont pretend to understand it.
#ifdef SLOW_AND_CRAPPY_MAKES_VALGRIND_HAPPY
- unsigned long r;
+ uint32 r;
for(r = 0; r < m_Faces; r++) {
if(fread(mFinalFaces+r, sizeof(FACE), 1, fp) != 1) {
- printf("Unable to read %lu faces from map file, got %lu.\n", m_Faces, r);
+ printf("Unable to read %lu faces from map file, got %lu.\n", (unsigned long)m_Faces, (unsigned long)r);
return(false);
}
}
#else
- unsigned long count;
+ uint32 count;
if((count=fread(mFinalFaces, sizeof(FACE), m_Faces , fp)) != m_Faces) {
- printf("Unable to read %lu face bytes from map file, got %lu.\n", m_Faces, count);
+ printf("Unable to read %lu face bytes from map file, got %lu.\n", (unsigned long)m_Faces, (unsigned long)count);
return(false);
}
#endif
@@ -159,27 +159,27 @@
#ifdef SLOW_AND_CRAPPY_MAKES_VALGRIND_HAPPY
for(r = 0; r < m_Nodes; r++) {
if(fread(mNodes+r, sizeof(NODE), 1, fp) != 1) {
- printf("Unable to read %lu nodes from map file, got %lu.\n", m_Nodes, r);
+ printf("Unable to read %lu nodes from map file, got %lu.\n", (unsigned long)m_Nodes, (unsigned long)r);
return(false);
}
}
#else
if(fread(mNodes, sizeof(NODE), m_Nodes, fp) != m_Nodes) {
- printf("Unable to read %lu nodes from map file.\n", m_Nodes);
+ printf("Unable to read %lu nodes from map file.\n", (unsigned long)m_Nodes);
return(false);
}
#endif
#ifdef SLOW_AND_CRAPPY_MAKES_VALGRIND_HAPPY
for(r = 0; r < m_FaceLists; r++) {
- if(fread(mFaceLists+r, sizeof(unsigned long), 1, fp) != 1) {
- printf("Unable to read %lu face lists from map file, got %lu.\n", m_FaceLists, r);
+ if(fread(mFaceLists+r, sizeof(uint32), 1, fp) != 1) {
+ printf("Unable to read %lu face lists from map file, got %lu.\n", (unsigned long)m_FaceLists, (unsigned long)r);
return(false);
}
}
#else
- if(fread(mFaceLists, sizeof(unsigned long), m_FaceLists, fp) != m_FaceLists) {
- printf("Unable to read %lu face lists from map file.\n", m_FaceLists);
+ if(fread(mFaceLists, sizeof(uint32), m_FaceLists, fp) != m_FaceLists) {
+ printf("Unable to read %lu face lists from map file.\n", (unsigned long)m_FaceLists);
return(false);
}
#endif
@@ -188,7 +188,7 @@
/* mRoot = new NODE();
RecLoadNode(mRoot, fp );*/
- unsigned long i;
+ uint32 i;
float v;
for(i = 0; i < m_Faces; i++) {
v = Vmax3(x, mFinalFaces[i].a, mFinalFaces[i].b, mFinalFaces[i].c);
@@ -210,7 +210,7 @@
if(v < _minz)
_minz = v;
}
- printf("Loaded map: %lu vertices, %lu faces\n", m_Faces*3, m_Faces);
+ printf("Loaded map: %lu vertices, %lu faces\n", (unsigned long)m_Faces*3, (unsigned long)m_Faces);
printf("Map BB: (%.2f -> %.2f, %.2f -> %.2f, %.2f -> %.2f)\n", _minx, _maxx, _miny, _maxy, _minz, _maxz);
return(true);
}
@@ -454,7 +454,7 @@
unsigned long i;
PFACE cur;
- const unsigned long *cfl = mFaceLists + _node->faces.offset;
+ const uint32 *cfl = mFaceLists + _node->faces.offset;
for(i = 0; i < _node->faces.count; i++) {
if(*cfl > m_Faces)
@@ -508,7 +508,7 @@
//
for(zAttempt=1; zAttempt<=2; zAttempt++) {
- const unsigned long *cfl = mFaceLists + _node->faces.offset;
+ const uint32 *cfl = mFaceLists + _node->faces.offset;
#ifdef DEBUG_BEST_Z
printf("Start finding best Z...\n");
I have a patch to get water maps to load, but when I use it, I get segfaults when it starts to check if the character is in water or not. I'm still working on it.
|