aboutsummaryrefslogtreecommitdiff
path: root/sword2/protocol.cpp
diff options
context:
space:
mode:
authorMax Horn2003-09-07 03:18:27 +0000
committerMax Horn2003-09-07 03:18:27 +0000
commit78476c6bd68834fa0a283c1c4b5ecbb140a94472 (patch)
tree413381b338e73137bc371d083c0e36a029b63df7 /sword2/protocol.cpp
parent418649fca2064617afd642134d07e0eadf732132 (diff)
downloadscummvm-rg350-78476c6bd68834fa0a283c1c4b5ecbb140a94472.tar.gz
scummvm-rg350-78476c6bd68834fa0a283c1c4b5ecbb140a94472.tar.bz2
scummvm-rg350-78476c6bd68834fa0a283c1c4b5ecbb140a94472.zip
more endian fixes
svn-id: r10058
Diffstat (limited to 'sword2/protocol.cpp')
-rw-r--r--sword2/protocol.cpp111
1 files changed, 88 insertions, 23 deletions
diff --git a/sword2/protocol.cpp b/sword2/protocol.cpp
index c3031f18ac..232113cd13 100644
--- a/sword2/protocol.cpp
+++ b/sword2/protocol.cpp
@@ -40,7 +40,7 @@ uint8 *FetchPalette(uint8 *screenFile) // Chris 04Oct96
_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
- palette = (uint8 *)mscreenHeader + mscreenHeader->palette;
+ palette = (uint8 *)mscreenHeader + FROM_LE_32(mscreenHeader->palette);
palette[0] = 0; // always set colour 0 to black
palette[1] = 0; // because most background screen palettes have a bright colour 0
@@ -57,7 +57,7 @@ uint8 *FetchPaletteMatchTable(uint8 *screenFile) // James 09dec96
{
_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
- return (uint8 *) mscreenHeader + mscreenHeader->paletteTable;
+ return (uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->paletteTable);
}
//-----------------------------------------------------------------------------------------------------------------------
@@ -67,9 +67,15 @@ _screenHeader *FetchScreenHeader(uint8 *screenFile) //Chris 04Oct96
{
// Get the table
_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
+ _screenHeader *screenHeader = (_screenHeader*) ((uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->screen));
- return (_screenHeader*) ((uint8 *) mscreenHeader + mscreenHeader->screen);
+#if defined(SCUMM_BIG_ENDIAN)
+ screenHeader->width = SWAP_BYTES_16(screenHeader->width);
+ screenHeader->height = SWAP_BYTES_16(screenHeader->height);
+ screenHeader->noLayers = SWAP_BYTES_16(screenHeader->noLayers);
+#endif
+ return screenHeader;
}
//-----------------------------------------------------------------------------------------------------------------------
// returns a pointer to the requested layer header, given the pointer to the start of the screen file
@@ -77,19 +83,27 @@ _screenHeader *FetchScreenHeader(uint8 *screenFile) //Chris 04Oct96
// assumes it has been passed a pointer to a valid screen file
_layerHeader *FetchLayerHeader(uint8 *screenFile, uint16 layerNo) //Chris 04Oct96
{
- _screenHeader *screenHead;
-
-
- screenHead = FetchScreenHeader(screenFile);
-
#ifdef _SWORD2_DEBUG
+ _screenHeader *screenHead = FetchScreenHeader(screenFile);
+
if (layerNo > (screenHead->noLayers-1)) // layer number too large!
Con_fatal_error("FetchLayerHeader(%d) invalid layer number! (%s line %u)",layerNo,__FILE__,__LINE__);
#endif
_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
- return (_layerHeader *) ((uint8 *) mscreenHeader + mscreenHeader->layers + (layerNo * sizeof(_layerHeader)));
+ _layerHeader *layerHeader = (_layerHeader *) ((uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->layers) + (layerNo * sizeof(_layerHeader)));
+
+#if defined(SCUMM_BIG_ENDIAN)
+ layerHeader->x = SWAP_BYTES_16(layerHeader->x);
+ layerHeader->y = SWAP_BYTES_16(layerHeader->y);
+ layerHeader->width = SWAP_BYTES_16(layerHeader->width);
+ layerHeader->height = SWAP_BYTES_16(layerHeader->height);
+ layerHeader->maskSize = SWAP_BYTES_32(layerHeader->maskSize);
+ layerHeader->offset = SWAP_BYTES_32(layerHeader->offset);
+#endif
+
+ return layerHeader;
}
//---------------------------------------------------------------
@@ -100,7 +114,7 @@ uint8 *FetchShadingMask(uint8 *screenFile) // James 08apr97
{
_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
- return (uint8 *) mscreenHeader + mscreenHeader->maskOffset;
+ return (uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->maskOffset);
}
//-----------------------------------------------------------------------------------------------------------------------
@@ -109,7 +123,19 @@ uint8 *FetchShadingMask(uint8 *screenFile) // James 08apr97
_animHeader *FetchAnimHeader(uint8 *animFile) // (25sep96JEL)
{
- return (_animHeader *) (animFile + sizeof(_standardHeader));
+ _animHeader *animHead;
+ animHead = (_animHeader *) (animFile + sizeof(_standardHeader));
+
+#if defined(SCUMM_BIG_ENDIAN)
+ animHead->noAnimFrames = SWAP_BYTES_16(animHead->noAnimFrames);
+ animHead->feetStartX = SWAP_BYTES_16(animHead->feetStartX);
+ animHead->feetStartY = SWAP_BYTES_16(animHead->feetStartY);
+ animHead->feetEndX = SWAP_BYTES_16(animHead->feetEndX);
+ animHead->feetEndY = SWAP_BYTES_16(animHead->feetEndY);
+ animHead->blend = SWAP_BYTES_16(animHead->blend);
+#endif
+
+ return animHead;
}
//---------------------------------------------------------------
@@ -128,8 +154,18 @@ _cdtEntry *FetchCdtEntry(uint8 *animFile, uint16 frameNo) // Chris 09Oct96
Con_fatal_error("FetchCdtEntry(animFile,%d) - anim only %d frames (%s line %u)",frameNo,animHead->noAnimFrames,__FILE__,__LINE__);
#endif
- return (_cdtEntry *) ( (uint8 *)animHead + sizeof(_animHeader) + frameNo * sizeof(_cdtEntry) );
+ _cdtEntry *cdtEntry;
+ cdtEntry = (_cdtEntry *) ( (uint8 *)animHead + sizeof(_animHeader) + frameNo * sizeof(_cdtEntry) );
+
+#if defined(SCUMM_BIG_ENDIAN)
+ cdtEntry->x = (int16)SWAP_BYTES_16(cdtEntry->x);
+ cdtEntry->y = (int16)SWAP_BYTES_16(cdtEntry->y);
+ cdtEntry->frameOffset = SWAP_BYTES_32(cdtEntry->frameOffset);
+#endif
+
+ return cdtEntry;
}
+
//---------------------------------------------------------------
// returns a pointer to the requested frame number's header, given the pointer to the start of the anim file
// drops out if the requested frame number exceeds the number of frames in this anim
@@ -138,7 +174,15 @@ _cdtEntry *FetchCdtEntry(uint8 *animFile, uint16 frameNo) // Chris 09Oct96
_frameHeader *FetchFrameHeader(uint8 *animFile, uint16 frameNo) // James 31oct96
{
// required address = (address of the start of the anim header) + frameOffset
- return (_frameHeader *) (animFile + sizeof(_standardHeader) + (FetchCdtEntry(animFile,frameNo)->frameOffset) );
+ _frameHeader *frameHeader = (_frameHeader *) (animFile + sizeof(_standardHeader) + (FetchCdtEntry(animFile,frameNo)->frameOffset) );
+
+#if defined(SCUMM_BIG_ENDIAN)
+ frameHeader->compSize = SWAP_BYTES_32(frameHeader->compSize);
+ frameHeader->width = SWAP_BYTES_16(frameHeader->width);
+ frameHeader->height = SWAP_BYTES_16(frameHeader->height);
+#endif
+
+ return frameHeader;
}
//---------------------------------------------------------------
// Returns a pointer to the requested parallax layer data.
@@ -148,11 +192,18 @@ _parallax *FetchBackgroundParallaxLayer(uint8 *screenFile, int layer) // Chris 0
_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
#ifdef _SWORD2_DEBUG
- if (mscreenHeader->bg_parallax[layer] == 0)
+ if (FROM_LE_32(mscreenHeader->bg_parallax[layer]) == 0)
Con_fatal_error("FetchBackgroundParallaxLayer(%d) - No parallax layer exists (%s line %u)",layer,__FILE__,__LINE__);
#endif
- return (_parallax *) ((uint8 *) mscreenHeader + mscreenHeader->bg_parallax[layer]);
+ _parallax *parallax = (_parallax *) ((uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->bg_parallax[layer]));
+
+#if defined(SCUMM_BIG_ENDIAN)
+ parallax->w = SWAP_BYTES_16(parallax->w);
+ parallax->h = SWAP_BYTES_16(parallax->h);
+#endif
+
+ return parallax;
}
//---------------------------------------------------------------
_parallax *FetchBackgroundLayer(uint8 *screenFile) // Chris 04Oct96
@@ -160,11 +211,18 @@ _parallax *FetchBackgroundLayer(uint8 *screenFile) // Chris 04Oct96
_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
#ifdef _SWORD2_DEBUG
- if (mscreenHeader->screen == 0)
+ if (FROM_LE_32(mscreenHeader->screen) == 0)
Con_fatal_error("FetchBackgroundLayer (%d) - No background layer exists (%s line %u)",__FILE__,__LINE__);
#endif
- return (_parallax *) ((uint8 *) mscreenHeader + mscreenHeader->screen + sizeof(_screenHeader));
+ _parallax *parallax = (_parallax *) ((uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->screen) + sizeof(_screenHeader));
+
+#if defined(SCUMM_BIG_ENDIAN)
+ parallax->w = SWAP_BYTES_16(parallax->w);
+ parallax->h = SWAP_BYTES_16(parallax->h);
+#endif
+
+ return parallax;
}
//---------------------------------------------------------------
_parallax *FetchForegroundParallaxLayer(uint8 *screenFile, int layer) // Chris 04Oct96
@@ -172,11 +230,18 @@ _parallax *FetchForegroundParallaxLayer(uint8 *screenFile, int layer) // Chris 0
_multiScreenHeader *mscreenHeader = (_multiScreenHeader *) (screenFile + sizeof(_standardHeader));
#ifdef _SWORD2_DEBUG
- if (mscreenHeader->fg_parallax[layer] == 0)
+ if (FROM_LE_32(mscreenHeader->fg_parallax[layer]) == 0)
Con_fatal_error("FetchForegroundParallaxLayer(%d) - No parallax layer exists (%s line %u)",layer,__FILE__,__LINE__);
#endif
- return (_parallax *) ((uint8 *) mscreenHeader + mscreenHeader->fg_parallax[layer]);
+ _parallax *parallax = (_parallax *) ((uint8 *) mscreenHeader + FROM_LE_32(mscreenHeader->fg_parallax[layer]));
+
+#if defined(SCUMM_BIG_ENDIAN)
+ parallax->w = SWAP_BYTES_16(parallax->w);
+ parallax->h = SWAP_BYTES_16(parallax->h);
+#endif
+
+ return parallax;
}
//---------------------------------------------------------------
uint8 errorLine[128];
@@ -191,16 +256,16 @@ uint8 *FetchTextLine(uint8 *file, uint32 text_line) //Tony24Oct96
_textHeader *text_header = (_textHeader *) (file + sizeof(_standardHeader));
- if (text_line>=text_header->noOfLines) // (James08aug97)
+ if (text_line>=FROM_LE_32(text_header->noOfLines)) // (James08aug97)
{
fileHeader = (_standardHeader*)file;
- sprintf ((char*)errorLine, "xxMissing line %d of %s (only 0..%d)", text_line, fileHeader->name, text_header->noOfLines-1);
+ sprintf ((char*)errorLine, "xxMissing line %d of %s (only 0..%d)", text_line, fileHeader->name, FROM_LE_32(text_header->noOfLines)-1);
errorLine[0]=0; // first 2 chars are NULL so that actor-number comes out as '0'
errorLine[1]=0;
return(errorLine);
// GOT RID OF CON_FATAL_ERROR HERE BECAUSE WE DON'T WANT IT TO CRASH OUT ANY MORE!
-// Con_fatal_error("FetchTextLine cannot get %d, only 0..%d avail (%s line %u)", text_line, text_header->noOfLines-1,__FILE__,__LINE__);
+// Con_fatal_error("FetchTextLine cannot get %d, only 0..%d avail (%s line %u)", text_line, FROM_LE_32(text_header->noOfLines)-1,__FILE__,__LINE__);
}
@@ -214,7 +279,7 @@ uint8 CheckTextLine(uint8 *file, uint32 text_line) // (James26jun97)
{
_textHeader *text_header = (_textHeader *) (file + sizeof(_standardHeader));
- if (text_line>=text_header->noOfLines)
+ if (text_line>=FROM_LE_32(text_header->noOfLines))
return(0); // out of range => invalid
else
return(1); // valid