[Scummvm-cvs-logs] CVS: scummvm/scumm actor.cpp,1.78,1.79 costume.cpp,1.33,1.34 gfx.cpp,2.65,2.66 saveload.cpp,1.61,1.62 script_v5.cpp,1.61,1.62 scumm.h,1.176,1.177 scummvm.cpp,2.120,2.121
Max Horn
fingolfin at users.sourceforge.net
Sat May 3 13:50:28 CEST 2003
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv26427
Modified Files:
actor.cpp costume.cpp gfx.cpp saveload.cpp script_v5.cpp
scumm.h scummvm.cpp
Log Message:
Patch #730800: EGA LOOM: Hack to fix palette problem (also helps MonkeyEGA)
Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/actor.cpp,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -d -r1.78 -r1.79
--- actor.cpp 3 May 2003 16:20:18 -0000 1.78
+++ actor.cpp 3 May 2003 20:49:52 -0000 1.79
@@ -975,7 +975,10 @@
cr._zbuf = (byte)_vm->gdi._numZBuffer;
cr._shadow_mode = shadow_mode;
- cr._shadow_table = _vm->_shadowPalette;
+ if (_vm->_features & GF_SMALL_HEADER)
+ cr._shadow_table = NULL;
+ else
+ cr._shadow_table = _vm->_shadowPalette;
cr.setCostume(costume);
cr.setPalette(palette);
Index: costume.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/costume.cpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- costume.cpp 3 May 2003 16:46:47 -0000 1.33
+++ costume.cpp 3 May 2003 20:49:52 -0000 1.34
@@ -385,9 +385,8 @@
do {
if (color && y < scrheight) {
pcolor = _palette[color];
- if (pcolor == 13) {
+ if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];
- }
*dst = pcolor;
}
@@ -434,7 +433,7 @@
do {
if (color && y < scrheight && !(*mask & maskbit)) {
pcolor = _palette[color];
- if (pcolor == 13)
+ if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];
*dst = pcolor;
}
@@ -496,7 +495,7 @@
do {
if (color && y < scrheight && !((*mask | mask[_imgbufoffs]) & maskbit)) {
pcolor = _palette[color];
- if (pcolor == 13)
+ if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];
*dst = pcolor;
}
@@ -559,7 +558,7 @@
if (cost_scaleTable[_scaleIndexY++] < _scaleY) {
if (color && y < _outheight && !((*mask | mask[_imgbufoffs]) & maskbit)) {
pcolor = _palette[color];
- if (pcolor == 13)
+ if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];
*dst = pcolor;
}
@@ -620,7 +619,7 @@
if (cost_scaleTable[_scaleIndexY++] < _scaleY) {
if (color && y < _outheight && !(*mask & maskbit)) {
pcolor = _palette[color];
- if (pcolor == 13)
+ if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];
*dst = pcolor;
}
@@ -681,7 +680,7 @@
if (cost_scaleTable[_scaleIndexY++] < _scaleY) {
if (color && y < _outheight) {
pcolor = _palette[color];
- if (pcolor == 13)
+ if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];
*dst = pcolor;
}
@@ -737,9 +736,8 @@
do {
if (color && x >= 0 && x < _vm->_realWidth) {
pcolor = _palette[color];
-/* if (pcolor == 13) {
- pcolor = _shadow_table[*dst];
- }*/
+/* if (pcolor == 13 && _shadow_table)
+ pcolor = _shadow_table[*dst];*/
*dst = pcolor;
}
@@ -786,7 +784,7 @@
do {
if (color && x >=0 && x < _vm->_realWidth && !(*mask & maskbit)) {
pcolor = _palette[color];
-/* if (pcolor == 13)
+/* if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];*/
*dst = pcolor;
}
@@ -851,7 +849,7 @@
do {
if (color && x >= 0 && x < _vm->_realWidth && !((*mask | mask[_imgbufoffs]) & maskbit)) {
pcolor = _palette[color];
-/* if (pcolor == 13)
+/* if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];*/
*dst = pcolor;
}
@@ -914,7 +912,7 @@
if (cost_scaleTable[_scaleIndexY] < _scaleY) {
if (color && _xpos >= 0 && _xpos < _vm->_realWidth && !((*mask | mask[_imgbufoffs]) & maskbit)) {
pcolor = _palette[color];
-/* if (pcolor == 13)
+/* if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];*/
*dst = pcolor;
}
@@ -978,7 +976,7 @@
if (cost_scaleTable[_scaleIndexY] < _scaleY) {
if (color && _xpos >= 0 && _xpos < _vm->_realWidth && !(*mask & maskbit)) {
pcolor = _palette[color];
-/* if (pcolor == 13)
+/* if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];*/
*dst = pcolor;
}
@@ -1046,7 +1044,7 @@
if (cost_scaleTable[_scaleIndexY] < _scaleY) {
if (color && _xpos >= 0 && _xpos < _vm->_realWidth) {
pcolor = _palette[color];
-/* if (pcolor == 13)
+/* if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];*/
*dst = pcolor;
}
Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.65
retrieving revision 2.66
diff -u -d -r2.65 -r2.66
--- gfx.cpp 30 Apr 2003 21:30:55 -0000 2.65
+++ gfx.cpp 3 May 2003 20:49:52 -0000 2.66
@@ -1085,8 +1085,7 @@
}
const register byte colors[2] = { color >> 4, color & 0xf };
for(z = 0; z < run; z++) {
-
- *(dst + y * _vm->_realWidth + x) = _vm->_shadowPalette[ colors[z&1] ];
+ *(dst + y * _vm->_realWidth + x) = colors[z&1];
y++;
if(y >= height) {
@@ -1116,7 +1115,7 @@
}
for(z = 0; z < run; z++) {
- *(dst + y * _vm->_realWidth + x) = _vm->_shadowPalette[color & 0xf];
+ *(dst + y * _vm->_realWidth + x) = color & 0xf;
y++;
if(y >= height) {
@@ -1222,7 +1221,7 @@
if (run == 0) {
run = *src++;
}
- color = _vm->_shadowPalette[data & 0x0f];
+ color = data & 0x0f;
}
if (!dither) {
*ptr_dither_table = color;
@@ -1247,7 +1246,7 @@
if (run == 0) {
run = *src++;
}
- color = _vm->_shadowPalette[data & 0x0f];
+ color = data & 0x0f;
}
if (!dither) {
*ptr_dither_table = color;
@@ -2664,6 +2663,25 @@
#pragma mark -
#pragma mark --- Palette ---
#pragma mark -
+
+void Scumm::setupEGAPalette() {
+ setPalColor( 0, 0, 0, 0);
+ setPalColor( 1, 0, 0, 168);
+ setPalColor( 2, 0, 168, 0);
+ setPalColor( 3, 0, 168, 168);
+ setPalColor( 4, 168, 0, 0);
+ setPalColor( 5, 168, 0, 168);
+ setPalColor( 6, 168, 84, 0);
+ setPalColor( 7, 168, 168, 168);
+ setPalColor( 8, 84, 84, 84);
+ setPalColor( 9, 84, 84, 168);
+ setPalColor(10, 0, 252, 0);
+ setPalColor(11, 0, 252, 252);
+ setPalColor(12, 252, 84, 84);
+ setPalColor(13, 252, 0, 252);
+ setPalColor(14, 252, 252, 0);
+ setPalColor(15, 252, 252, 252);
+}
void Scumm::setPaletteFromPtr(byte *ptr) {
int i;
Index: saveload.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/saveload.cpp,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -d -r1.61 -r1.62
--- saveload.cpp 1 May 2003 00:04:05 -0000 1.61
+++ saveload.cpp 3 May 2003 20:49:52 -0000 1.62
@@ -174,8 +174,15 @@
initScreens(0, sb, _realWidth, sh);
_completeScreenRedraw = true;
-
- if (!(_features & GF_16COLOR))
+
+ if (_features & GF_16COLOR) {
+ // HACK: There was a time when ScummVM didn't store the
+ // palette in _currentPalette for 16-color games. To avoid
+ // breaking savegame compatibility, always set up the default
+ // palette after loading a game.
+ setupEGAPalette();
+ setDirtyColors(0, 15);
+ } else
setDirtyColors(0, 255);
_lastCodePtr = NULL;
Index: script_v5.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v5.cpp,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -d -r1.61 -r1.62
--- script_v5.cpp 3 May 2003 17:50:04 -0000 1.61
+++ script_v5.cpp 3 May 2003 20:49:52 -0000 1.62
@@ -1672,8 +1672,7 @@
// printf("copyPalColor(%d, %d)\n", a, b);
// copyPalColor(a, b);
_shadowPalette[b] = a;
- if (!(_features & GF_16COLOR))
- setDirtyColors(b, b);
+ setDirtyColors(b, b);
} else {
error("room-color is no longer a valid command");
}
@@ -1694,8 +1693,7 @@
}
checkRange(256, 0, a, "o5_roomOps: 2: Illegal room color slot (%d)");
_shadowPalette[b] = a;
- if (!(_features & GF_16COLOR))
- setDirtyColors(b, b);
+ setDirtyColors(b, b);
} else {
a = getVarOrDirectWord(0x80);
b = getVarOrDirectWord(0x40);
Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.176
retrieving revision 1.177
diff -u -d -r1.176 -r1.177
--- scumm.h 1 May 2003 00:04:05 -0000 1.176
+++ scumm.h 3 May 2003 20:49:53 -0000 1.177
@@ -806,6 +806,7 @@
void clampCameraPos(ScummPoint *pt);
byte *getPalettePtr();
+ void setupEGAPalette();
void setPalette(int pal);
void setPaletteFromPtr(byte *ptr);
void setPaletteFromRes();
Index: scummvm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scummvm.cpp,v
retrieving revision 2.120
retrieving revision 2.121
diff -u -d -r2.120 -r2.121
--- scummvm.cpp 1 May 2003 21:41:31 -0000 2.120
+++ scummvm.cpp 3 May 2003 20:49:53 -0000 2.121
@@ -544,13 +544,9 @@
}
if (_features & GF_16COLOR) {
- byte pal16[16 * 4] = {
- 0, 0, 0, 0, 0, 0, 168, 0, 0, 168, 0, 0, 0, 168, 168, 0,
- 168, 0, 0, 0, 168, 0, 168, 0, 168, 84, 0, 0, 168, 168, 168, 0,
- 84, 84, 84, 0, 84, 84, 168, 0, 0, 252, 0, 0, 0, 252, 252, 0,
- 252, 84, 84, 0, 252, 0, 252, 0, 252, 252, 0, 0, 252, 252, 252, 0
- };
- _system->set_palette(pal16, 0, 16);
+ for (i = 0; i < 16; i++)
+ _shadowPalette[i] = i;
+ setupEGAPalette();
}
if (_features & GF_AFTER_V3)
@@ -981,8 +977,10 @@
}
if (!(_features & GF_AFTER_V7)) {
- for (i = 0; i < 0x100; i++)
+ for (i = 0; i < 256; i++)
_shadowPalette[i] = i;
+ if (_features & GF_SMALL_HEADER)
+ setDirtyColors(0, 255);
}
clearDrawObjectQueue();
More information about the Scummvm-git-logs
mailing list