diff -ur ScummVM-cvs20020804/scummvm/gfx.cpp ScummVM-cvs20020804+hack/scummvm/gfx.cpp
--- ScummVM-cvs20020804/scummvm/gfx.cpp	2002-07-28 17:46:49.000000000 +0200
+++ ScummVM-cvs20020804+hack/scummvm/gfx.cpp	2002-08-06 01:23:46.000000000 +0200
@@ -446,6 +446,9 @@
 		}
 	}
 
+	if (_features & GF_SMALL_HEADER)
+		memcpy(_backupPalette, _currentPalette, sizeof(_backupPalette));
+	
 	setDirtyColors(0, numcolor - 1);
 }
 
diff -ur ScummVM-cvs20020804/scummvm/script_v1.cpp ScummVM-cvs20020804+hack/scummvm/script_v1.cpp
--- ScummVM-cvs20020804/scummvm/script_v1.cpp	2002-08-04 14:53:25.000000000 +0200
+++ ScummVM-cvs20020804+hack/scummvm/script_v1.cpp	2002-08-06 01:11:18.000000000 +0200
@@ -1922,8 +1922,10 @@
 				b = getVarOrDirectWord(0x40);
 			}
 			checkRange(256, 0, a, "o5_roomOps: 2: Illegal room color slot (%d)");
-			_shadowPalette[a] = b;
-			//        _fullRedraw = 1;
+			c = _backupPalette[a * 3 + 0];
+			d = _backupPalette[a * 3 + 1];
+			e = _backupPalette[a * 3 + 2];
+			setPalColor(b, c, d, e);	/* index, r, g, b */
 		} else {
 			a = getVarOrDirectWord(0x80);
 			b = getVarOrDirectWord(0x40);
diff -ur ScummVM-cvs20020804/scummvm/scumm.h ScummVM-cvs20020804+hack/scummvm/scumm.h
--- ScummVM-cvs20020804/scummvm/scumm.h	2002-08-04 20:23:08.000000000 +0200
+++ ScummVM-cvs20020804+hack/scummvm/scumm.h	2002-08-06 00:26:18.000000000 +0200
@@ -955,6 +955,7 @@
 	byte *_shadowPalette;
 	int _shadowPaletteSize;
 	byte _currentPalette[0x300];
+	byte _backupPalette[0x300];
 
 	byte _proc_special_palette[256];
 	int _palDirtyMin, _palDirtyMax;
