diff options
-rw-r--r-- | engines/tsage/core.cpp | 46 | ||||
-rw-r--r-- | engines/tsage/core.h | 8 | ||||
-rw-r--r-- | engines/tsage/graphics.cpp | 4 | ||||
-rw-r--r-- | engines/tsage/resources.cpp | 10 | ||||
-rw-r--r-- | engines/tsage/resources.h | 12 | ||||
-rw-r--r-- | engines/tsage/ringworld_scenes10.cpp | 10 |
6 files changed, 51 insertions, 39 deletions
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 5ccb48f05b..2f6ba42b37 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1055,8 +1055,11 @@ void PaletteRotation::synchronise(Serialiser &s) { s.syncAsSint32LE(_end); s.syncAsSint32LE(_rotationMode); s.syncAsSint32LE(_duration); - for (int i = 0; i < 256; ++i) - s.syncAsUint32LE(_palette[i]); + for (int i = 0; i < 256; ++i) { + s.syncAsByte(_palette[i].r); + s.syncAsByte(_palette[i].g); + s.syncAsByte(_palette[i].b); + } } void PaletteRotation::signal() { @@ -1189,8 +1192,11 @@ void PaletteUnknown::synchronise(Serialiser &s) { s.syncAsSint16LE(_percent); s.syncAsSint16LE(_field12); s.syncAsSint16LE(_field14); - for (int i = 0; i < 256; ++i) - s.syncAsUint32LE(_palette[i]); + for (int i = 0; i < 256; ++i) { + s.syncAsByte(_palette[i].r); + s.syncAsByte(_palette[i].g); + s.syncAsByte(_palette[i].b); + } } void PaletteUnknown::signal() { @@ -1221,7 +1227,7 @@ void PaletteUnknown::remove() { ScenePalette::ScenePalette() { // Set a default gradiant range for (int idx = 0; idx < 256; ++idx) - _palette[idx] = idx | (idx << 8) | (idx << 16); + _palette[idx].r = _palette[idx].g = _palette[idx].b = idx; _field412 = 0; } @@ -1239,12 +1245,10 @@ bool ScenePalette::loadPalette(int paletteNum) { int palSize = READ_LE_UINT16(palData + 2); assert(palSize <= 256); - uint32 *destP = &_palette[palStart]; - byte *srcP = palData + 6; + RGB8 *destP = &_palette[palStart]; + RGB8 *srcP = (RGB8 *)(palData + 6); - - for (int i = 0; i < palSize; ++i, srcP += 3, ++destP) - *destP = *srcP | (*(srcP + 1) << 8) | (*(srcP + 2) << 16); + Common::copy(&srcP[0], &srcP[palSize], destP); DEALLOCATE(palData); return true; @@ -1284,12 +1288,9 @@ uint8 ScenePalette::indexOf(uint r, uint g, uint b, int threshold) { int palIndex = -1; for (int i = 0; i < 256; ++i) { - int ir = _palette[i] & 0xff; - int ig = (_palette[i] >> 8) & 0xff; - int ib = (_palette[i] >> 16) & 0xff; - int rDiff = abs(ir - (int)r); - int gDiff = abs(ig - (int)g); - int bDiff = abs(ib - (int)b); + int rDiff = abs(_palette[i].r - (int)r); + int gDiff = abs(_palette[i].g - (int)g); + int bDiff = abs(_palette[i].b - (int)b); int idxThreshold = rDiff * rDiff + gDiff * gDiff + bDiff * bDiff; if (idxThreshold <= threshold) { @@ -1326,14 +1327,14 @@ void ScenePalette::clearListeners() { } void ScenePalette::fade(const byte *adjustData, bool fullAdjust, int percent) { - uint32 tempPalette[256]; + RGB8 tempPalette[256]; // Ensure the percent adjustment is within 0 - 100% percent = CLIP(percent, 0, 100); for (int palIndex = 0; palIndex < 256; ++palIndex) { const byte *srcP = (const byte *)&_palette[palIndex]; - byte *destP = (byte *)&tempPalette[palIndex]; + byte *destP = (byte *)&tempPalette[palIndex].r; for (int rgbIndex = 0; rgbIndex < 3; ++rgbIndex, ++srcP, ++destP) { *destP = *srcP - ((*srcP - adjustData[rgbIndex]) * (100 - percent)) / 100; @@ -1359,7 +1360,7 @@ PaletteRotation *ScenePalette::addRotation(int start, int end, int rotationMode, return obj; } -PaletteUnknown *ScenePalette::addUnkPal(uint32 *arrBufferRGB, int unkNumb, bool disabled, Action *action) { +PaletteUnknown *ScenePalette::addUnkPal(RGB8 *arrBufferRGB, int unkNumb, bool disabled, Action *action) { PaletteUnknown *paletteUnk = new PaletteUnknown(); paletteUnk->_action = action; for (int i = 0; i < 256; i++) { @@ -1400,8 +1401,11 @@ void ScenePalette::changeBackground(const Rect &bounds, FadeMode fadeMode) { } void ScenePalette::synchronise(Serialiser &s) { - for (int i = 0; i < 256; ++i) - s.syncAsUint32LE(_palette[i]); + for (int i = 0; i < 256; ++i) { + s.syncAsByte(_palette[i].r); + s.syncAsByte(_palette[i].g); + s.syncAsByte(_palette[i].b); + } s.syncAsSint32LE(_colours.foreground); s.syncAsSint32LE(_colours.background); diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 5e3da6a170..cfd2867d35 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -328,7 +328,7 @@ public: int _end; int _rotationMode; int _duration; - uint32 _palette[256]; + RGB8 _palette[256]; public: PaletteRotation(); @@ -349,7 +349,7 @@ public: class PaletteUnknown: public PaletteModifier { public: int _step, _percent, _field12, _field14; - uint32 _palette[256]; + RGB8 _palette[256]; public: virtual Common::String getClassName() { return "PaletteUnknown"; } virtual void synchronise(Serialiser &s); @@ -361,7 +361,7 @@ enum FadeMode {FADEMODE_NONE = 0, FADEMODE_GRADUAL = 1, FADEMODE_IMMEDIATE = 2}; class ScenePalette: public SavedObject { public: - uint32 _palette[256]; + RGB8 _palette[256]; GfxColours _colours; List<PaletteModifier *> _listeners; int _field412; @@ -385,7 +385,7 @@ public: void clearListeners(); void fade(const byte *adjustData, bool fullAdjust, int percent); PaletteRotation *addRotation(int start, int end, int rotationMode, int duration = 0, Action *action = NULL); - PaletteUnknown *addUnkPal(uint32 *arrBufferRGB, int unkNumb, bool disabled, Action *action); + PaletteUnknown *addUnkPal(RGB8 *arrBufferRGB, int unkNumb, bool disabled, Action *action); static void changeBackground(const Rect &bounds, FadeMode fadeMode); diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 9a13abcf59..f497fac732 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -1061,9 +1061,9 @@ void GfxManager::fillRect2(int xs, int ys, int width, int height, int colour) { */ void GfxManager::setDialogPalette() { // Get the main palette information - uint32 palData[256]; + RGB8 palData[256]; uint count, start; - _vm->_dataManager->getPalette(0, (byte *)&palData[0], &start, &count); + _vm->_dataManager->getPalette(0, &palData[0], &start, &count); g_system->getPaletteManager()->setPalette((byte *)&palData[0], start, count); // Miscellaneous diff --git a/engines/tsage/resources.cpp b/engines/tsage/resources.cpp index 619f818f6e..2e75c19872 100644 --- a/engines/tsage/resources.cpp +++ b/engines/tsage/resources.cpp @@ -356,22 +356,18 @@ void RlbManager::loadIndex() { * * @paletteNum Specefies the palette number */ -void RlbManager::getPalette(int paletteNum, uint8 *palData, uint *startNum, uint *numEntries) { +void RlbManager::getPalette(int paletteNum, RGB8 *palData, uint *startNum, uint *numEntries) { // Get the specified palette byte *dataIn = getResource(RES_PALETTE, 0, paletteNum); assert(dataIn); *startNum = READ_LE_UINT16(dataIn); *numEntries = READ_LE_UINT16(dataIn + 2); + RGB8 *srcPal = (RGB8 *)(dataIn + 6); assert((*startNum < 256) && ((*startNum + *numEntries) <= 256)); // Copy over the data - for (uint i = 0; i < *numEntries; ++i) { - *palData++ = dataIn[6 + i * 3]; - *palData++ = dataIn[7 + i * 3]; - *palData++ = dataIn[8 + i * 3]; - *palData++ = 0; - } + Common::copy(&srcPal[0], &srcPal[*numEntries], palData); _memoryManager.deallocate(dataIn); } diff --git a/engines/tsage/resources.h b/engines/tsage/resources.h index 5d00e5f70c..1aa9affe65 100644 --- a/engines/tsage/resources.h +++ b/engines/tsage/resources.h @@ -45,6 +45,16 @@ enum ResourceType { RES_LIBRARY, RES_STRIP, RES_IMAGE, RES_PALETTE, RES_VISAGE, RES_FONT, RES_POINTER, RES_BANK, RES_SND_DRIVER, RES_PRIORITY, RES_CONTROL, RES_WALKRGNS, RES_BITMAP, RES_SAVE, RES_SEQUENCE }; +#include "common/pack-start.h" // START STRUCT PACKING + +struct RGB8 { + uint8 r; + uint8 g; + uint8 b; +} PACKED_STRUCT; + +#include "common/pack-end.h" // END STRUCT PACKING + class MemoryHeader { public: uint32 id; @@ -155,7 +165,7 @@ public: byte *getResource(uint16 id, bool suppressErrors = false); byte *getResource(ResourceType resType, uint16 resNum, uint16 rlbNum, bool suppressErrors = false); - void getPalette(int paletteNum, uint8 *palData, uint *startNum, uint *numEntries); + void getPalette(int paletteNum, RGB8 *palData, uint *startNum, uint *numEntries); byte *getSubResource(int resNum, int rlbNum, int index, uint *size); Common::String getMessage(int resNum, int lineNum); }; diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index 5ea5077b74..3e92a60a2e 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -1633,8 +1633,9 @@ void Scene9850::postInit(SceneObjectList *OwnerList) { * *--------------------------------------------------------------------------*/ void Scene9900::strAction1::signal() { - static uint32 mask1 = 0xFFFFFF00; - static uint32 mask2 = 0x00000000; + RGB8 mask1, mask2; + mask1.r = mask1.g = mask1.b = 0xff; + mask2.r = mask2.g = mask2.b = 0; Scene9900 *scene = (Scene9900 *)_globals->_sceneManager._scene; @@ -1769,8 +1770,9 @@ void Scene9900::strAction2::dispatch() { } void Scene9900::strAction3::signal() { - static uint32 mask3 = 0xFF000000; - static uint32 mask4 = 0x00000000; + RGB8 mask3, mask4; + mask3.r = 0xff; mask3.g = mask3.b = 0; + mask4.r = mask4.g = mask4.b = 0; switch (_actionIndex++) { case 0: |