[Scummvm-cvs-logs] SF.net SVN: scummvm:[51381] scummvm/trunk/engines/sci

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Tue Jul 27 19:51:45 CEST 2010


Revision: 51381
          http://scummvm.svn.sourceforge.net/scummvm/?rev=51381&view=rev
Author:   m_kiewitz
Date:     2010-07-27 17:51:44 +0000 (Tue, 27 Jul 2010)

Log Message:
-----------
SCI: implemented kPalette(save/restore)

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kernel_tables.h
    scummvm/trunk/engines/sci/engine/kgraphics.cpp
    scummvm/trunk/engines/sci/engine/savegame.cpp
    scummvm/trunk/engines/sci/graphics/helpers.h
    scummvm/trunk/engines/sci/graphics/palette.cpp
    scummvm/trunk/engines/sci/graphics/palette.h

Modified: scummvm/trunk/engines/sci/engine/kernel_tables.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel_tables.h	2010-07-27 17:18:02 UTC (rev 51380)
+++ scummvm/trunk/engines/sci/engine/kernel_tables.h	2010-07-27 17:51:44 UTC (rev 51381)
@@ -215,7 +215,7 @@
     { SIG_SCIALL,          5, MAP_CALL(PaletteFindColor),          "iii",                  NULL },
     { SIG_SCIALL,          6, MAP_CALL(PaletteAnimate),            "i*",                   NULL },
     { SIG_SCIALL,          7, MAP_CALL(PaletteSave),               "",                     NULL },
-    { SIG_SCIALL,          8, MAP_CALL(PaletteRestore),            "i",                    NULL },
+    { SIG_SCIALL,          8, MAP_CALL(PaletteRestore),            "[r0]",                 NULL },
     SCI_SUBOPENTRY_TERMINATOR
 };
 

Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp	2010-07-27 17:18:02 UTC (rev 51380)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp	2010-07-27 17:51:44 UTC (rev 51381)
@@ -616,16 +616,16 @@
 
 reg_t kPaletteSave(EngineState *s, int argc, reg_t *argv) {
 	if (g_sci->getResMan()->isVGA()) {
-		warning("kPalette(7), save palette to heap STUB");
+		return g_sci->_gfxPalette->kernelSave();
 	}
 	return NULL_REG;
 }
 
 reg_t kPaletteRestore(EngineState *s, int argc, reg_t *argv) {
 	if (g_sci->getResMan()->isVGA()) {
-		warning("kPalette(8), restore palette from heap STUB");
+		g_sci->_gfxPalette->kernelRestore(argv[0]);
 	}
-	return s->r_acc;
+	return argv[0];
 }
 
 reg_t kPalVary(EngineState *s, int argc, reg_t *argv) {

Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp	2010-07-27 17:18:02 UTC (rev 51380)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp	2010-07-27 17:51:44 UTC (rev 51381)
@@ -563,6 +563,18 @@
 }
 #endif
 
+void GfxPalette::palVarySaveLoadPalette(Common::Serializer &s, Palette *palette) {
+	s.syncBytes(palette->mapping, 256);
+	s.syncAsUint32LE(palette->timestamp);
+	for (int i = 0; i < 256; i++) {
+		s.syncAsByte(palette->colors[i].used);
+		s.syncAsByte(palette->colors[i].r);
+		s.syncAsByte(palette->colors[i].g);
+		s.syncAsByte(palette->colors[i].b);
+	}
+	s.syncBytes(palette->intensity, 256);
+}
+
 void GfxPalette::saveLoadWithSerializer(Common::Serializer &s) {
 	if (s.getVersion() < 24)
 		return;
@@ -572,8 +584,8 @@
 
 	s.syncAsSint32LE(_palVaryResourceId);
 	if (_palVaryResourceId != -1) {
-		_palVaryOriginPalette.saveLoadWithSerializer(s);
-		_palVaryTargetPalette.saveLoadWithSerializer(s);
+		palVarySaveLoadPalette(s, &_palVaryOriginPalette);
+		palVarySaveLoadPalette(s, &_palVaryTargetPalette);
 		s.syncAsSint16LE(_palVaryStep);
 		s.syncAsSint16LE(_palVaryStepStop);
 		s.syncAsSint16LE(_palVaryDirection);

Modified: scummvm/trunk/engines/sci/graphics/helpers.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/helpers.h	2010-07-27 17:18:02 UTC (rev 51380)
+++ scummvm/trunk/engines/sci/graphics/helpers.h	2010-07-27 17:51:44 UTC (rev 51381)
@@ -83,13 +83,6 @@
 struct Color {
 	byte used;
 	byte r, g, b;
-
-	void saveLoadWithSerializer(Common::Serializer &s) {
-		s.syncAsByte(used);
-		s.syncAsByte(r);
-		s.syncAsByte(g);
-		s.syncAsByte(b);
-	}
 };
 
 struct Palette {
@@ -97,14 +90,6 @@
 	uint32 timestamp;
 	Color colors[256];
 	byte intensity[256];
-
-	void saveLoadWithSerializer(Common::Serializer &s) {
-		s.syncBytes(mapping, 256);
-		s.syncAsUint32LE(timestamp);
-		for (int i = 0; i < 256; i++)
-			colors[i].saveLoadWithSerializer(s);
-		s.syncBytes(intensity, 256);
-	}
 };
 
 struct PalSchedule {

Modified: scummvm/trunk/engines/sci/graphics/palette.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/palette.cpp	2010-07-27 17:18:02 UTC (rev 51380)
+++ scummvm/trunk/engines/sci/graphics/palette.cpp	2010-07-27 17:51:44 UTC (rev 51381)
@@ -488,6 +488,42 @@
 	setOnScreen();
 }
 
+reg_t GfxPalette::kernelSave() {
+	SegManager *segMan = g_sci->getEngineState()->_segMan;
+	reg_t memoryId = segMan->allocateHunkEntry("kPalette(save)", 1024);
+	byte *memoryPtr = segMan->getHunkPointer(memoryId);
+	if (memoryPtr) {
+		for (int colorNr = 0; colorNr < 256; colorNr++) {
+			*memoryPtr++ = _sysPalette.colors[colorNr].used;
+			*memoryPtr++ = _sysPalette.colors[colorNr].r;
+			*memoryPtr++ = _sysPalette.colors[colorNr].g;
+			*memoryPtr++ = _sysPalette.colors[colorNr].b;
+		}
+	}
+	return memoryId;
+}
+
+void GfxPalette::kernelRestore(reg_t memoryHandle) {
+	SegManager *segMan = g_sci->getEngineState()->_segMan;
+	if (!memoryHandle.isNull()) {
+		byte *memoryPtr = segMan->getHunkPointer(memoryHandle);
+		if (!memoryPtr)
+			error("Bad handle used for kPalette(restore)");
+
+		Palette restoredPalette;
+
+		restoredPalette.timestamp = 0;
+		for (int colorNr = 0; colorNr < 256; colorNr++) {
+			restoredPalette.colors[colorNr].used = *memoryPtr++;
+			restoredPalette.colors[colorNr].r = *memoryPtr++;
+			restoredPalette.colors[colorNr].g = *memoryPtr++;
+			restoredPalette.colors[colorNr].b = *memoryPtr++;
+		}
+
+		set(&restoredPalette, true);
+	}
+}
+
 void GfxPalette::kernelAssertPalette(GuiResourceId resourceId) {
 	// Sometimes invalid viewIds are asked for, ignore those (e.g. qfg1vga)
 	//if (!_resMan->testResource(ResourceId(kResourceTypeView, resourceId)))

Modified: scummvm/trunk/engines/sci/graphics/palette.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/palette.h	2010-07-27 17:18:02 UTC (rev 51380)
+++ scummvm/trunk/engines/sci/graphics/palette.h	2010-07-27 17:51:44 UTC (rev 51381)
@@ -63,6 +63,8 @@
 	int16 kernelFindColor(uint16 r, uint16 g, uint16 b);
 	bool kernelAnimate(byte fromColor, byte toColor, int speed);
 	void kernelAnimateSet();
+	reg_t kernelSave();
+	void kernelRestore(reg_t memoryHandle);
 	void kernelAssertPalette(GuiResourceId resourceId);
 
 	void kernelSyncScreenPalette();
@@ -81,6 +83,7 @@
 	Palette _sysPalette;
 
 	virtual void saveLoadWithSerializer(Common::Serializer &s);
+	void palVarySaveLoadPalette(Common::Serializer &s, Palette *palette);
 
 private:
 	void palVaryInit();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list