From 52ff6acc1fa224b3027d5e6268e37e681fdf2031 Mon Sep 17 00:00:00 2001 From: Oliver Kiehl Date: Sat, 13 Sep 2003 20:42:08 +0000 Subject: and another endian fix svn-id: r10241 --- sword2/resman.cpp | 22 ++++++++++++++++++++++ sword2/router.cpp | 33 --------------------------------- sword2/router.h | 31 ++++++++++++++++++++++++++++++- 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); -- cgit v1.2.3