aboutsummaryrefslogtreecommitdiff
path: root/sword2
diff options
context:
space:
mode:
authorOliver Kiehl2003-09-13 20:42:08 +0000
committerOliver Kiehl2003-09-13 20:42:08 +0000
commit52ff6acc1fa224b3027d5e6268e37e681fdf2031 (patch)
treebdafcbd9413ff43b0204ff3595d0580c2d244cad /sword2
parent7eb758f69722a5c201c99c9f9c384494dd2e4cf0 (diff)
downloadscummvm-rg350-52ff6acc1fa224b3027d5e6268e37e681fdf2031.tar.gz
scummvm-rg350-52ff6acc1fa224b3027d5e6268e37e681fdf2031.tar.bz2
scummvm-rg350-52ff6acc1fa224b3027d5e6268e37e681fdf2031.zip
and another endian fix
svn-id: r10241
Diffstat (limited to 'sword2')
-rw-r--r--sword2/resman.cpp22
-rw-r--r--sword2/router.cpp33
-rw-r--r--sword2/router.h31
3 files changed, 52 insertions, 34 deletions
diff --git a/sword2/resman.cpp b/sword2/resman.cpp
index 20d0bf0741..a409e0f772 100644
--- a/sword2/resman.cpp
+++ b/sword2/resman.cpp
@@ -41,6 +41,7 @@
#include "resman.h"
#include "sound.h" // (James22july97) for Clear_fx_queue() called from CacheNewCluster()
#include "sword2.h" // (James11aug97) for CloseGame()
+#include "router.h"
// ---------------------------------------------------------------------------
// welcome to the easy resource manager - written in simple code for easy
@@ -391,6 +392,27 @@ static void convertEndian(uint8 *file, uint32 len) {
SWAP32(walkGridHeader->numBars);
SWAP32(walkGridHeader->numNodes);
+
+ _barData *barData = (_barData *) (file + sizeof(_walkGridHeader));
+ for (i = 0; i < walkGridHeader->numBars; i++) {
+ SWAP16(barData->x1);
+ SWAP16(barData->y1);
+ SWAP16(barData->x2);
+ SWAP16(barData->y2);
+ SWAP16(barData->xmin);
+ SWAP16(barData->ymin);
+ SWAP16(barData->xmax);
+ SWAP16(barData->ymax);
+ SWAP16(barData->dx);
+ SWAP16(barData->dy);
+ SWAP32(barData->co);
+ barData++;
+ }
+
+ uint16 *node = (uint16 *) (file + sizeof(_walkGridHeader) + walkGridHeader->numBars * sizeof(_barData));
+ for (i = 0; i < walkGridHeader->numNodes*2; i++)
+ *node = SWAP_BYTES_16(*node++);
+
break;
}
case GLOBAL_VAR_FILE:
diff --git a/sword2/router.cpp b/sword2/router.cpp
index 2d6297cbf2..5e455f3782 100644
--- a/sword2/router.cpp
+++ b/sword2/router.cpp
@@ -119,39 +119,6 @@ int8 forceSlidy; // 1 = force the use of slidy router (so solid path not used wh
#define EXTRA_GRID_SIZE 20 // max 20 lines & 20 points
#define O_ROUTE_SIZE 50 // max number of modules in a route
-
-typedef struct
-{
- int16 x1;
- int16 y1;
- int16 x2;
- int16 y2;
- int16 xmin;
- int16 ymin;
- int16 xmax;
- int16 ymax;
- int16 dx; // x2 - x1
- int16 dy; // y2 - y1
- int32 co; // co = (y1 *dx)- (x1*dy) from an equation for a line y*dx = x*dy + co
-}_barData;
-
-typedef struct
-{
- int16 x;
- int16 y;
- int16 level;
- int16 prev;
- int16 dist;
-}_nodeData;
-
-typedef struct
-{
- int32 nbars;
- _barData *bars;
- int32 nnodes;
- _nodeData *node;
-} _floorData;
-
typedef struct
{
int32 x;
diff --git a/sword2/router.h b/sword2/router.h
index 447bdc9d33..364b884a61 100644
--- a/sword2/router.h
+++ b/sword2/router.h
@@ -24,6 +24,9 @@
#include "memory.h"
#include "object.h"
+#if !defined(__GNUC__)
+ #pragma START_PACK_STRUCTS
+#endif
typedef struct _walkData
{
@@ -32,9 +35,35 @@ typedef struct _walkData
int16 y;
uint8 step;
uint8 dir;
-} _walkData;
+} GCC_PACK _walkData;
+typedef struct
+{
+ int16 x1;
+ int16 y1;
+ int16 x2;
+ int16 y2;
+ int16 xmin;
+ int16 ymin;
+ int16 xmax;
+ int16 ymax;
+ int16 dx; // x2 - x1
+ int16 dy; // y2 - y1
+ int32 co; // co = (y1 *dx)- (x1*dy) from an equation for a line y*dx = x*dy + co
+} GCC_PACK _barData;
+typedef struct
+{
+ int16 x;
+ int16 y;
+ int16 level;
+ int16 prev;
+ int16 dist;
+} GCC_PACK _nodeData;
+
+#if !defined(__GNUC__)
+ #pragma END_PACK_STRUCTS
+#endif
int32 RouteFinder(Object_mega *ob_mega, Object_walkdata *ob_walkdata, int32 x, int32 y, int32 dir);