aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2011-04-13 21:25:57 +1000
committerPaul Gilbert2011-04-13 21:25:57 +1000
commit0600f0c018942c2a3e09b1696b2dc71b2e00d0b3 (patch)
tree86e90b98493ce58eea427803d77356bea7b98ed6
parente6090415b62907b1ccc3163a43e04e8cea992693 (diff)
downloadscummvm-rg350-0600f0c018942c2a3e09b1696b2dc71b2e00d0b3.tar.gz
scummvm-rg350-0600f0c018942c2a3e09b1696b2dc71b2e00d0b3.tar.bz2
scummvm-rg350-0600f0c018942c2a3e09b1696b2dc71b2e00d0b3.zip
TSAGE: Change palette code from 4-byte to 3-byte palettes
-rw-r--r--engines/tsage/core.cpp46
-rw-r--r--engines/tsage/core.h8
-rw-r--r--engines/tsage/graphics.cpp4
-rw-r--r--engines/tsage/resources.cpp10
-rw-r--r--engines/tsage/resources.h12
-rw-r--r--engines/tsage/ringworld_scenes10.cpp10
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: