[Scummvm-cvs-logs] SF.net SVN: scummvm:[42381] scummvm/branches/gsoc2009-16bit

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Sat Jul 11 13:48:02 CEST 2009


Revision: 42381
          http://scummvm.svn.sourceforge.net/scummvm/?rev=42381&view=rev
Author:   Kirben
Date:     2009-07-11 11:48:01 +0000 (Sat, 11 Jul 2009)

Log Message:
-----------
Merged revisions 42360-42361,42364-42366,42368-42378,42380 via svnmerge from 
https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk

........
  r42360 | Kirben | 2009-07-11 10:38:50 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Fix recent regression in AGOSEngine_Simon1::drawImage().
........
  r42361 | wjpalenstijn | 2009-07-11 10:47:32 +1000 (Sat, 11 Jul 2009) | 3 lines
  
  Fix SAGA outline generation algorithm for characters
  that are copies of earlier characters. (5 characters in IHNM.)
  This fixes #1904624.
........
  r42364 | Kirben | 2009-07-11 11:40:53 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Fix bug #2819628 - DETECTOR: Atlantis CD sets wrong gui options.
........
  r42365 | lordhoto | 2009-07-11 11:54:27 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Fix graphics not updating, when loading a save in Kyra1. This fixes problems when loading saves in rooms like Brynn's temple, which play animations directly on scene enter.
........
  r42366 | lordhoto | 2009-07-11 11:54:42 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Removed the now uneeded "Screen::_disableScreen" flag.
........
  r42368 | dreammaster | 2009-07-11 15:10:13 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Bugfix to show the mouse cursor when restarting the game after returning to launcher
........
  r42369 | dreammaster | 2009-07-11 15:12:17 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Active background screens are now properly freed when the game exits
........
  r42370 | dreammaster | 2009-07-11 15:14:42 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Added initialisation of paging screens when the game starts
........
  r42371 | thebluegr | 2009-07-11 16:19:29 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Fixed regression in the script parser from commit 42260
........
  r42372 | thebluegr | 2009-07-11 16:33:19 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Applied a slightly modified patch from clone2727 which adds static selector names to some demos which are missing them (KQ4, LSL1, LSL3, Iceman and Christmas1992)
........
  r42373 | thebluegr | 2009-07-11 16:34:25 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Removed an invalid detection entry
........
  r42374 | thebluegr | 2009-07-11 16:43:01 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Applied slightly modified patch 2819002 - "SCI: resource-view-patch on SQ5/German fix"
........
  r42375 | thebluegr | 2009-07-11 16:53:39 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Applied patch 2818733 - "SCI: Timer iterator for audio resources played via doSound"
........
  r42376 | Kirben | 2009-07-11 17:03:28 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Only error out, if checkStaticSelectorNames() fails.
........
  r42377 | dreammaster | 2009-07-11 18:16:55 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Bugfix to properly save the currently playing midi music when saving a scene
........
  r42378 | wjpalenstijn | 2009-07-11 19:45:25 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Fix oversight in r42361 and also handle consecutive copied characters in SAGA.
........
  r42380 | drmccoy | 2009-07-11 20:24:06 +1000 (Sat, 11 Jul 2009) | 1 line
  
  Explicitely instantiate the decompressWizImage() templates, so that they won't be optimized away, as they are also used in akos.cpp
........

Modified Paths:
--------------
    scummvm/branches/gsoc2009-16bit/dists/msvc8/sci.vcproj
    scummvm/branches/gsoc2009-16bit/dists/msvc9/sci.vcproj
    scummvm/branches/gsoc2009-16bit/engines/agos/gfx.cpp
    scummvm/branches/gsoc2009-16bit/engines/cruise/cruise.cpp
    scummvm/branches/gsoc2009-16bit/engines/cruise/font.cpp
    scummvm/branches/gsoc2009-16bit/engines/cruise/gfxModule.cpp
    scummvm/branches/gsoc2009-16bit/engines/cruise/gfxModule.h
    scummvm/branches/gsoc2009-16bit/engines/kyra/saveload_lok.cpp
    scummvm/branches/gsoc2009-16bit/engines/kyra/screen.cpp
    scummvm/branches/gsoc2009-16bit/engines/kyra/screen.h
    scummvm/branches/gsoc2009-16bit/engines/saga/font.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/console.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/debug.h
    scummvm/branches/gsoc2009-16bit/engines/sci/detection.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/engine/kernel.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/engine/kernel.h
    scummvm/branches/gsoc2009-16bit/engines/sci/engine/ksound.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/engine/scriptdebug.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/engine/vm.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/module.mk
    scummvm/branches/gsoc2009-16bit/engines/sci/resource.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator.cpp
    scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator.h
    scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator_internal.h
    scummvm/branches/gsoc2009-16bit/engines/scumm/detection_tables.h
    scummvm/branches/gsoc2009-16bit/engines/scumm/he/wiz_he.cpp
    scummvm/branches/gsoc2009-16bit/engines/scumm/scumm-md5.h
    scummvm/branches/gsoc2009-16bit/engines/tinsel/music.cpp
    scummvm/branches/gsoc2009-16bit/tools/scumm-md5.txt

Added Paths:
-----------
    scummvm/branches/gsoc2009-16bit/engines/sci/engine/static_selectors.cpp

Property Changed:
----------------
    scummvm/branches/gsoc2009-16bit/


Property changes on: scummvm/branches/gsoc2009-16bit
___________________________________________________________________
Modified: svnmerge-integrated
   - /scummvm/trunk:1-42358 /scummvm/branches/gsoc2008-tfmx:1-31765 /scummvm/branches/gsoc2008-gui:1-31703
   + /scummvm/trunk:1-42380 /scummvm/branches/gsoc2008-tfmx:1-31765 /scummvm/branches/gsoc2008-gui:1-31703

Modified: scummvm/branches/gsoc2009-16bit/dists/msvc8/sci.vcproj
===================================================================
--- scummvm/branches/gsoc2009-16bit/dists/msvc8/sci.vcproj	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/dists/msvc8/sci.vcproj	2009-07-11 11:48:01 UTC (rev 42381)
@@ -50,6 +50,7 @@
 			<File RelativePath="..\..\engines\sci\engine\seg_manager.h" />
 			<File RelativePath="..\..\engines\sci\engine\state.cpp" />
 			<File RelativePath="..\..\engines\sci\engine\state.h" />
+			<File RelativePath="..\..\engines\sci\engine\static_selectors.cpp" />
 			<File RelativePath="..\..\engines\sci\engine\stringfrag.cpp" />
 			<File RelativePath="..\..\engines\sci\engine\vm.cpp" />
 			<File RelativePath="..\..\engines\sci\engine\vm.h" />

Modified: scummvm/branches/gsoc2009-16bit/dists/msvc9/sci.vcproj
===================================================================
--- scummvm/branches/gsoc2009-16bit/dists/msvc9/sci.vcproj	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/dists/msvc9/sci.vcproj	2009-07-11 11:48:01 UTC (rev 42381)
@@ -51,6 +51,7 @@
 			<File RelativePath="..\..\engines\sci\engine\seg_manager.h" />
 			<File RelativePath="..\..\engines\sci\engine\state.cpp" />
 			<File RelativePath="..\..\engines\sci\engine\state.h" />
+			<File RelativePath="..\..\engines\sci\engine\static_selectors.cpp" />
 			<File RelativePath="..\..\engines\sci\engine\stringfrag.cpp" />
 			<File RelativePath="..\..\engines\sci\engine\vm.cpp" />
 			<File RelativePath="..\..\engines\sci\engine\vm.h" />

Modified: scummvm/branches/gsoc2009-16bit/engines/agos/gfx.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/agos/gfx.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/agos/gfx.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -667,7 +667,7 @@
 			state->surf2_addr = getBackGround();
 			state->surf2_pitch = _backGroundBuf->pitch;
 
-			state->surf_addr = (byte *)_window4BackScn;
+			state->surf_addr = (byte *)_window4BackScn->pixels;
 			state->surf_pitch = _videoWindows[18] * 16;
 
 			xoffs = ((vlut[0] - _videoWindows[16]) * 2 + state->x) * 8;

Modified: scummvm/branches/gsoc2009-16bit/engines/cruise/cruise.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/cruise/cruise.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/cruise/cruise.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -118,6 +118,7 @@
 	// video init stuff
 
 	initSystem();
+	gfxModuleData_Init();
 
 	// another bit of video init
 
@@ -139,6 +140,14 @@
 void CruiseEngine::deinitialise() {
 	polyStructNorm.clear();
 	polyStructExp.clear();
+
+	// Clear any backgrounds
+	for (int i = 0; i < 8; ++i) {
+		if (backgroundScreens[i]) {
+			free(backgroundScreens[i]);
+			backgroundScreens[i] = NULL;
+		}
+	}
 }
 
 bool CruiseEngine::loadLanguageStrings() {

Modified: scummvm/branches/gsoc2009-16bit/engines/cruise/font.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/cruise/font.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/cruise/font.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -159,7 +159,9 @@
 	switchPal = 0;
 	masterScreen = 0;
 
+	changeCursor(CURSOR_NOMOUSE);
 	changeCursor(CURSOR_NORMAL);
+	mouseOn();
 
 	strcpy(cmdLine, "");
 

Modified: scummvm/branches/gsoc2009-16bit/engines/cruise/gfxModule.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/cruise/gfxModule.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/cruise/gfxModule.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -217,6 +217,12 @@
 	}
 }
 
+void gfxModuleData_Init(void) {
+	memset(globalScreen, 0, 320 * 200);
+	memset(page00, 0, 320 * 200);
+	memset(page10, 0, 320 * 200);
+}
+
 void gfxModuleData_flipScreen(void) {
 	memcpy(globalScreen, gfxModuleData.pPage00, 320 * 200);
 

Modified: scummvm/branches/gsoc2009-16bit/engines/cruise/gfxModule.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/cruise/gfxModule.h	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/cruise/gfxModule.h	2009-07-11 11:48:01 UTC (rev 42381)
@@ -56,6 +56,7 @@
 void gfxModuleData_gfxCopyScreen(const uint8 *sourcePtr, uint8 *destPtr);
 void convertGfxFromMode4(const uint8 *sourcePtr, int width, int height, uint8 *destPtr);
 void convertGfxFromMode5(const uint8 *sourcePtr, int width, int height, uint8 *destPtr);
+void gfxModuleData_Init(void);
 void gfxModuleData_flipScreen(void);
 //void gfxModuleData_setPal(uint8 * ptr);
 void gfxModuleData_convertOldPalColor(uint16 oldColor, uint8 *pOutput);

Modified: scummvm/branches/gsoc2009-16bit/engines/kyra/saveload_lok.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/kyra/saveload_lok.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/kyra/saveload_lok.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -167,7 +167,6 @@
 		}
 	}
 
-	_screen->_disableScreen = true;
 	loadMainScreen(8);
 
 	if (queryGameFlag(0x2D)) {
@@ -185,19 +184,16 @@
 	setHandItem(_itemInHand);
 	_animator->setBrandonAnimSeqSize(3, 48);
 	redrawInventory(0);
-	_animator->_noDrawShapesFlag = 1;
+	_brandonPosX = brandonX;
+	_brandonPosY = brandonY;
 	enterNewScene(_currentCharacter->sceneId, _currentCharacter->facing, 0, 0, 1);
-	_animator->_noDrawShapesFlag = 0;
 
-	_currentCharacter->x1 = brandonX;
-	_currentCharacter->y1 = brandonY;
 	_animator->animRefreshNPC(0);
 	_animator->restoreAllObjectBackgrounds();
 	_animator->preserveAnyChangedBackgrounds();
 	_animator->prepDrawAllObjects();
 	_animator->copyChangedObjectsForward(0);
 	_screen->copyRegion(8, 8, 8, 8, 304, 128, 2, 0);
-	_screen->_disableScreen = false;
 	_screen->updateScreen();
 
 	setMousePos(brandonX, brandonY);

Modified: scummvm/branches/gsoc2009-16bit/engines/kyra/screen.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/kyra/screen.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/kyra/screen.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -74,7 +74,6 @@
 }
 
 bool Screen::init() {
-	_disableScreen = false;
 	_debugEnabled = false;
 
 	memset(_sjisOverlayPtrs, 0, sizeof(_sjisOverlayPtrs));
@@ -219,9 +218,6 @@
 }
 
 void Screen::updateScreen() {
-	if (_disableScreen)
-		return;
-
 	if (_useOverlays)
 		updateDirtyRectsOvl();
 	else

Modified: scummvm/branches/gsoc2009-16bit/engines/kyra/screen.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/kyra/screen.h	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/kyra/screen.h	2009-07-11 11:48:01 UTC (rev 42381)
@@ -335,7 +335,6 @@
 	uint8 *_shapePages[2];
 	int _maskMinY, _maskMaxY;
 	FontId _currentFont;
-	bool _disableScreen;
 
 	// decoding functions
 	static void decodeFrame3(const uint8 *src, uint8 *dst, uint32 size);

Modified: scummvm/branches/gsoc2009-16bit/engines/saga/font.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/saga/font.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/saga/font.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -154,6 +154,7 @@
 	unsigned char *destPointer2;
 	unsigned char *destPointer3;
 	unsigned char charRep;
+	int nextIndex = 0;
 
 
 	// Populate new font style character data
@@ -165,6 +166,25 @@
 			index += indexOffset;
 		}
 
+		bool skip = false;
+
+		if (font->normal.fontCharEntry[i].width != 0 && font->normal.fontCharEntry[i].index < nextIndex) {
+			// Some characters are copies of earlier characters.
+			// Look up the original, and make sure not to grow the size of
+			// the outline font twice.
+			skip = true;
+			bool found = false;
+			for (int j = 0; j < i; j++) {
+				if (font->normal.fontCharEntry[i].index == font->normal.fontCharEntry[j].index) {
+					index = font->outline.fontCharEntry[j].index;
+					found = true;
+					break;
+				}
+			}
+			if (!found)
+				error("Invalid index backreference in font char %d", i);
+		}
+
 		font->outline.fontCharEntry[i].index = index;
 		font->outline.fontCharEntry[i].tracking = font->normal.fontCharEntry[i].tracking;
 		font->outline.fontCharEntry[i].flag = font->normal.fontCharEntry[i].flag;
@@ -173,14 +193,18 @@
 			newByteWidth = getByteLen(font->normal.fontCharEntry[i].width + 2);
 			oldByteWidth = getByteLen(font->normal.fontCharEntry[i].width);
 
-			if (newByteWidth > oldByteWidth) {
+			if (!skip && newByteWidth > oldByteWidth) {
 				indexOffset++;
 			}
 		}
 
 		font->outline.fontCharEntry[i].width = font->normal.fontCharEntry[i].width + 2;
 		font->outline.fontCharEntry[i].byteWidth = newByteWidth;
-		newRowLength += newByteWidth;
+
+		if (!skip) {
+			newRowLength += newByteWidth;
+			nextIndex = font->normal.fontCharEntry[i].index + oldByteWidth;
+		}
 	}
 
 	debug(2, "New row length: %d", newRowLength);
@@ -196,6 +220,10 @@
 
 	// Generate outline font representation
 	for (i = 0; i < FONT_CHARCOUNT; i++) {
+		if (i > 0 && font->normal.fontCharEntry[i].index < font->normal.fontCharEntry[i-1].index) {
+			// Skip copies
+			continue;
+		}
 		for (row = 0; row < font->normal.header.charHeight; row++) {
 			for (currentByte = 0; currentByte < font->outline.fontCharEntry[i].byteWidth; currentByte++) {
 				basePointer = font->outline.font + font->outline.fontCharEntry[i].index + currentByte;

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/console.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/console.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/console.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -545,7 +545,7 @@
 
 bool Console::cmdRegisters(int argc, const char **argv) {
 	DebugPrintf("Current register values:\n");
-	DebugPrintf("acc=%04x:%04x prev=%04x:%04x &rest=%x\n", PRINT_REG(_vm->_gamestate->r_acc), PRINT_REG(_vm->_gamestate->r_prev), scriptState.restadjust);
+	DebugPrintf("acc=%04x:%04x prev=%04x:%04x &rest=%x\n", PRINT_REG(_vm->_gamestate->r_acc), PRINT_REG(_vm->_gamestate->r_prev), scriptState.restAdjust);
 
 	if (!_vm->_gamestate->_executionStack.empty()) {
 		EngineState *s = _vm->_gamestate;	// for PRINT_STK
@@ -3226,11 +3226,6 @@
 int c_stepover(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
 	int opcode, opnumber;
 
-	if (!g_debugstate_valid) {
-		printf("Not in debug state\n");
-		return 1;
-	}
-
 	opcode = s->_heap[*p_pc];
 	opnumber = opcode >> 1;
 	if (opnumber == 0x22 /* callb */ || opnumber == 0x23 /* calle */ ||

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/debug.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/debug.h	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/debug.h	2009-07-11 11:48:01 UTC (rev 42381)
@@ -46,7 +46,7 @@
 	int old_pc_offset;
 	StackPtr old_sp;
 	ExecStack *xs;
-	int16 restadjust;
+	int16 restAdjust;
 	reg_t *variables[4];		// global, local, temp, param, as immediate pointers
 	reg_t *variables_base[4];	// Used for referencing VM ops
 	SegmentId variables_seg[4];	// Same as above, contains segment IDs

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/detection.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/detection.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/detection.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -800,16 +800,6 @@
 	},
 #endif // ENABLE_SCI32
 
-	// Hoyle 1 - English DOS Non-Interactive Demo
-	{{"hoyle1", "Demo", {
-		{"resource.map", 0, "60f764020a6b788bbbe415dbc2ccb9f3", 931},
-		{"resource.000", 0, "5fe3670e3ddcd4f85c10013b5453141a", 615522},
-		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},
-		GF_FOR_SCI0_BEFORE_629,
-		SCI_VERSION_AUTODETECT,
-		SCI_VERSION_0
-	},
-
 	// Hoyle 1 - English DOS (supplied by wibble92 in bug report #2644547)
 	// SCI interpreter version 0.000.530
 	{{"hoyle1", "", {

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/engine/kernel.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/engine/kernel.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/engine/kernel.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -384,10 +384,15 @@
 void Kernel::detectSciFeatures() {
 	Resource *r = _resmgr->findResource(ResourceId(kResourceTypeVocab, VOCAB_RESOURCE_SNAMES), 0);
 
-	if (!r) // No such resource?
-		error("Kernel: Could not retrieve selector names");
+	Common::StringList staticSelectorTable;
+	
+	if (!r) { // No such resource?
+		staticSelectorTable = checkStaticSelectorNames();
+		if (staticSelectorTable.empty())
+			error("Kernel: Could not retrieve selector names");
+	}
 
-	int count = READ_LE_UINT16(r->data) + 1; // Counter is slightly off
+	int count = staticSelectorTable.empty() ? READ_LE_UINT16(r->data) + 1 : staticSelectorTable.size(); // Counter is slightly off
 	features = 0;
 
 	// Initialize features based on SCI version
@@ -397,11 +402,17 @@
 	}
 
 	for (int i = 0; i < count; i++) {
-		int offset = READ_LE_UINT16(r->data + 2 + i * 2);
-		int len = READ_LE_UINT16(r->data + offset);
+		Common::String tmp;
+		
+		if (staticSelectorTable.empty()) {
+			int offset = READ_LE_UINT16(r->data + 2 + i * 2);
+			int len = READ_LE_UINT16(r->data + offset);
+			
+			tmp = Common::String((const char *)r->data + offset + 2, len);
+		} else {
+			tmp = staticSelectorTable[i];
+		}
 
-		Common::String tmp((const char *)r->data + offset + 2, len);
-
 		if (tmp == "setTarget")     // "motionInited" can also be used
 			features &= ~kFeatureOldScriptHeader;
 
@@ -459,8 +470,22 @@
 void Kernel::loadSelectorNames() {
 	Resource *r = _resmgr->findResource(ResourceId(kResourceTypeVocab, VOCAB_RESOURCE_SNAMES), 0);
 
-	if (!r) // No such resource?
-		error("Kernel: Could not retrieve selector names");
+	if (!r) { // No such resource?
+		// Check if we have a table for this game
+		// Some demos do not have a selector table
+		Common::StringList staticSelectorTable = checkStaticSelectorNames();
+		
+		if (staticSelectorTable.empty())
+			error("Kernel: Could not retrieve selector names");
+		
+		for (uint32 i = 0; i < staticSelectorTable.size(); i++) {
+			_selectorNames.push_back(staticSelectorTable[i]);
+			if (features & kFeatureOldScriptHeader)
+				_selectorNames.push_back(staticSelectorTable[i]);
+		}
+			
+		return;
+	}
 
 	int count = READ_LE_UINT16(r->data) + 1; // Counter is slightly off
 

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/engine/kernel.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/engine/kernel.h	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/engine/kernel.h	2009-07-11 11:48:01 UTC (rev 42381)
@@ -157,6 +157,12 @@
 	 * Loads the kernel selector names.
 	 */
 	void loadSelectorNames();
+	
+	/**
+	 * Check for any hardcoded selector table we might have that can be used
+	 * if a game is missing the selector names.
+	 */
+	Common::StringList checkStaticSelectorNames();
 
 	/**
 	 * Maps special selectors

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/engine/ksound.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/engine/ksound.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/engine/ksound.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -148,6 +148,9 @@
 	return songit_new(song->data, song->size, type, id);
 }
 
+SongIterator *build_timeriterator(EngineState *s, int delta) {
+	return new_timer_iterator(delta);
+}
 
 void process_sound_events(EngineState *s) { /* Get all sound events, apply their changes to the heap */
 	int result;
@@ -798,6 +801,7 @@
 		int looping = GET_SEL32V(obj, loop);
 		//int vol = GET_SEL32V(obj, vol);
 		int pri = GET_SEL32V(obj, pri);
+		int sampleLen = 0;
 		Song *song = s->_sound._songlib.findSong(handle);
 
 		if (GET_SEL32V(obj, nodePtr) && (song && number != song->_resourceNum)) {
@@ -815,8 +819,11 @@
 				s->_version >= SCI_VERSION_1_1) {
 				// Found a relevant audio resource, play it
 				s->_sound.stopAudio();
-				PUT_SEL32V(obj, signal, s->_sound.startAudio(65535, number));
-				return s->r_acc;
+				warning("Initializing audio resource instead of requested sound resource %d\n", number);
+				sampleLen = s->_sound.startAudio(65535, number);
+				// Also create iterator, that will fire SI_FINISHED event, when the sound is done playing
+				s->_sound.sfx_add_song(build_timeriterator(s, sampleLen), 0, handle, number);
+				PUT_SEL32V(obj, signal, sampleLen);
 			} else {
 				if (!s->resmgr->testResource(ResourceId(kResourceTypeSound, number))) {
 					warning("Could not open song number %d", number);
@@ -825,11 +832,11 @@
 					PUT_SEL32V(obj, signal, -1);
 					return s->r_acc;
 				}
+				debugC(2, kDebugLevelSound, "Initializing song number %d\n", number);
+				s->_sound.sfx_add_song(build_iterator(s, number, SCI_SONG_ITERATOR_TYPE_SCI1,
+				                          handle), 0, handle, number);
 			}
 
-			debugC(2, kDebugLevelSound, "Initializing song number %d\n", number);
-			s->_sound.sfx_add_song(build_iterator(s, number, SCI_SONG_ITERATOR_TYPE_SCI1,
-			                          handle), 0, handle, number);
 			PUT_SEL32(obj, nodePtr, obj);
 			PUT_SEL32(obj, handle, obj);
 		}

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/engine/scriptdebug.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/engine/scriptdebug.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/engine/scriptdebug.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -235,11 +235,11 @@
 
 	if (pos == scriptState.xs->addr.pc) { // Extra information if debugging the current opcode
 		if (opcode == op_callk) {
-			int stackframe = (scr[pos.offset + 2] >> 1) + (scriptState.restadjust);
+			int stackframe = (scr[pos.offset + 2] >> 1) + (scriptState.restAdjust);
 			int argc = ((scriptState.xs->sp)[- stackframe - 1]).offset;
 
 			if (!s->_kernel->hasOldScriptHeader())
-				argc += (scriptState.restadjust);
+				argc += (scriptState.restAdjust);
 
 			printf(" Kernel params: (");
 
@@ -250,7 +250,7 @@
 			}
 			printf(")\n");
 		} else if ((opcode == op_send) || (opcode == op_self)) {
-			int restmod = scriptState.restadjust;
+			int restmod = scriptState.restAdjust;
 			int stackframe = (scr[pos.offset + 1] >> 1) + restmod;
 			reg_t *sb = scriptState.xs->sp;
 			uint16 selector;

Copied: scummvm/branches/gsoc2009-16bit/engines/sci/engine/static_selectors.cpp (from rev 42380, scummvm/trunk/engines/sci/engine/static_selectors.cpp)
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/engine/static_selectors.cpp	                        (rev 0)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/engine/static_selectors.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -0,0 +1,429 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+// We place selector vocab name tables here for any game that doesn't have
+// them. This includes the King's Quest IV Demo and LSL3 Demo.
+
+#ifndef SCI_STATIC_SELECTORS_H
+#define SCI_STATIC_SELECTORS_H
+
+#include "sci/engine/kernel.h"
+
+namespace Sci {
+	
+struct SelectorRemap {
+	const char *name;
+	uint32 slot;
+};
+	
+// Taken from King's Quest IV (Full Game)
+static const SelectorRemap kq4_demo_selectors[] = {
+	{ "init", 87 },
+	{ "play", 42 },
+	{ "replay", 65 },
+	{ "x", 4 },
+	{ "y", 3 },
+	{ "z", 85 },
+	{ "priority", 63 },
+	{ "view", 5 },
+	{ "loop", 6 },
+	{ "cel", 7 },
+	{ "brLeft", 20 },
+	{ "brRight", 22 },
+	{ "brTop", 19 },
+	{ "brBottom", 21 },
+	{ "xStep", 54 },
+	{ "yStep", 55 },
+	{ "nsBottom", 11 },
+	{ "nsTop", 9 },
+	{ "nsLeft", 10 },
+	{ "nsRight", 12 },
+	{ "font", 33 },
+	{ "text", 26 },
+	{ "type", 34 },
+	{ "state", 32 },
+	{ "doit", 60 },
+	{ "delete", 84 },
+	{ "signal", 17 },
+	{ "underBits", 8 },
+	{ "canBeHere", 57 },
+	{ "client", 45 },
+	{ "dx", 46 },
+	{ "dy", 47 },
+	{ "xStep", 54 },
+	{ "yStep", 55 },
+	{ "b-moveCnt", 48 },
+	{ "b-i1", 49 },
+	{ "b-i2", 50 },
+	{ "b-di", 51 },
+	{ "b-xAxis", 52 },
+	{ "b-incr", 53 },
+	{ "completed", 158 },
+	{ "illegalBits", 18 },
+	{ "dispose", 88 },
+	{ "prevSignal", 129 },
+	{ "message", 40 },
+	{ "modifiers", 64 },
+	{ "cue", 121 },
+	{ "owner", 130 },
+	{ "handle", 44 },
+	{ "number", 43 },
+	{ "max", 37 },
+	{ "cursor", 36 },
+	{ "claimed", 76 },
+	{ "edgeHit", 225 },
+	{ "wordFail", 71 },
+	{ "syntaxFail", 72 },
+	{ "semanticFail", 73 },
+	{ "cycler", 165 },
+	{ "elements", 27 },
+	{ "lsTop", 13 },
+	{ "lsBottom", 15 },
+	{ "lsLeft", 14 },
+	{ "lsRight", 16 },
+	{ "baseSetter", 208 },
+	{ "who", 39 },
+	{ "distance", 173 },
+	{ "mover", 59 },
+	{ "looper", 62 },
+	{ "isBlocked", 61 },
+	{ "heading", 58 },
+	{ "mode", 30 },
+	{ "caller", 119 },
+	{ "moveDone", 169 },
+	{ "size", 96 },
+	{ "moveSpeed", 56 },
+	{ "motionCue", 161 },
+	{ "setTarget", 171 }
+};
+	
+// Taken from EcoQuest 2 (Demo)
+static const SelectorRemap christmas1992_selectors[] = {
+	{ "init", 110 },
+	{ "play", 39 },
+	{ "replay", 62 },
+	{ "x", 1 },
+	{ "y", 0 },
+	{ "z", 82 },
+	{ "priority", 60 },
+	{ "view", 2 },
+	{ "loop", 3 },
+	{ "cel", 4 },
+	{ "brLeft", 17 },
+	{ "brRight", 19 },
+	{ "brTop", 16 },
+	{ "brBottom", 18 },
+	{ "xStep", 51 },
+	{ "yStep", 52 },
+	{ "nsBottom", 8 },
+	{ "nsTop", 6 },
+	{ "nsLeft", 7 },
+	{ "nsRight", 9 },
+	{ "font", 30 },
+	{ "text", 23 },
+	{ "type", 31 },
+	{ "state", 29 },
+	{ "doit", 57 },
+	{ "delete", 81 },
+	{ "signal", 14 },
+	{ "underBits", 5 },
+	{ "canBeHere", 450 },
+	{ "client", 42 },
+	{ "dx", 43 },
+	{ "dy", 44 },
+	{ "xStep", 51 },
+	{ "yStep", 52 },
+	{ "b-moveCnt", 45 },
+	{ "b-i1", 46 },
+	{ "b-i2", 47 },
+	{ "b-di", 48 },
+	{ "b-xAxis", 49 },
+	{ "b-incr", 50 },
+	{ "completed", 250 },
+	{ "illegalBits", 15 },
+	{ "dispose", 111 },
+	{ "prevSignal", 171 },
+	{ "message", 37 },
+	{ "modifiers", 61 },
+	{ "cue", 145 },
+	{ "owner", 172 },
+	{ "handle", 90 },
+	{ "number", 40 },
+	{ "max", 34 },
+	{ "cursor", 33 },
+	{ "claimed", 73 },
+	{ "edgeHit", 333 },
+	{ "wordFail", 68 },
+	{ "syntaxFail", 69 },
+	{ "semanticFail", 70 },
+	{ "cycler", 255 },
+	{ "elements", 24 },
+	{ "lsTop", 10 },
+	{ "lsBottom", 12 },
+	{ "lsLeft", 11 },
+	{ "lsRight", 13 },
+	{ "baseSetter", 310 },
+	{ "who", 36 },
+	{ "distance", 264 },
+	{ "mover", 56 },
+	{ "looper", 59 },
+	{ "isBlocked", 58 },
+	{ "heading", 55 },
+	{ "mode", 27 },
+	{ "caller", 143 },
+	{ "moveDone", 97 },
+	{ "vol", 94 },
+	{ "pri", 95 },
+	{ "min", 91 },
+	{ "sec", 92 },
+	{ "frame", 93 },
+	{ "dataInc", 89 },
+	{ "size", 86 },
+	{ "palette", 88 },
+	{ "moveSpeed", 53 },
+	{ "cantBeHere", 54 },
+	{ "nodePtr", 41 },
+	{ "flags", 99 },
+	{ "points", 87 },
+	{ "syncCue", 271 },
+	{ "syncTime", 270 },
+	{ "printLang", 84 },
+	{ "subtitleLang", 85 },
+	{ "parseLang", 83 },
+	{ "setVol", 178 }
+};
+
+// Taken from Leisure Suit Larry 1 VGA (Full Game)
+static const SelectorRemap lsl1_demo_selectors[] = {
+	{ "init", 104 },
+	{ "play", 42 },
+	{ "replay", 65 },
+	{ "x", 4 },
+	{ "y", 3 },
+	{ "z", 85 },
+	{ "priority", 63 },
+	{ "view", 5 },
+	{ "loop", 6 },
+	{ "cel", 7 },
+	{ "brLeft", 20 },
+	{ "brRight", 22 },
+	{ "brTop", 19 },
+	{ "brBottom", 21 },
+	{ "xStep", 54 },
+	{ "yStep", 55 },
+	{ "nsBottom", 11 },
+	{ "nsTop", 9 },
+	{ "nsLeft", 10 },
+	{ "nsRight", 12 },
+	{ "font", 33 },
+	{ "text", 26 },
+	{ "type", 34 },
+	{ "state", 32 },
+	{ "doit", 60 },
+	{ "delete", 84 },
+	{ "signal", 17 },
+	{ "underBits", 8 },
+	{ "canBeHere", 232 },
+	{ "client", 45 },
+	{ "dx", 46 },
+	{ "dy", 47 },
+	{ "xStep", 54 },
+	{ "yStep", 55 },
+	{ "b-moveCnt", 48 },
+	{ "b-i1", 49 },
+	{ "b-i2", 50 },
+	{ "b-di", 51 },
+	{ "b-xAxis", 52 },
+	{ "b-incr", 53 },
+	{ "completed", 210 },
+	{ "illegalBits", 18 },
+	{ "dispose", 105 },
+	{ "prevSignal", 149 },
+	{ "message", 40 },
+	{ "modifiers", 64 },
+	{ "cue", 136 },
+	{ "owner", 150 },
+	{ "handle", 93 },
+	{ "number", 43 },
+	{ "max", 37 },
+	{ "cursor", 36 },
+	{ "claimed", 76 },
+	{ "edgeHit", 321 },
+	{ "wordFail", 71 },
+	{ "syntaxFail", 72 },
+	{ "semanticFail", 73 },
+	{ "cycler", 215 },
+	{ "elements", 27 },
+	{ "lsTop", 13 },
+	{ "lsBottom", 15 },
+	{ "lsLeft", 14 },
+	{ "lsRight", 16 },
+	{ "baseSetter", 290 },
+	{ "who", 39 },
+	{ "distance", 224 },
+	{ "mover", 59 },
+	{ "looper", 62 },
+	{ "isBlocked", 61 },
+	{ "heading", 58 },
+	{ "mode", 30 },
+	{ "caller", 134 },
+	{ "moveDone", 100 },
+	{ "vol", 97 },
+	{ "pri", 98 },
+	{ "min", 94 },
+	{ "sec", 95 },
+	{ "frame", 96 },
+	{ "dataInc", 92 },
+	{ "size", 89 },
+	{ "palette", 91 },
+	{ "moveSpeed", 56 },
+	{ "cantBeHere", 57 },
+	{ "nodePtr", 44 },
+	{ "flags", 102 },
+	{ "points", 90 },
+	{ "syncCue", 248 },
+	{ "syncTime", 247 },
+	{ "printLang", 87 },
+	{ "subtitleLang", 88 },
+	{ "parseLang", 86 },
+	{ "setVol", 156 },
+	{ "motionCue", 213 },
+	{ "setTarget", 221 },
+	{ "egoMoveSpeed", 370 }
+};
+	
+// Taken from Codename: Iceman (Full Game)
+static const SelectorRemap iceman_demo_selectors[] = {
+	{ "init", 87 },
+	{ "play", 42 },
+	{ "replay", 65 },
+	{ "x", 4 },
+	{ "y", 3 },
+	{ "z", 85 },
+	{ "priority", 63 },
+	{ "view", 5 },
+	{ "loop", 6 },
+	{ "cel", 7 },
+	{ "brLeft", 20 },
+	{ "brRight", 22 },
+	{ "brTop", 19 },
+	{ "brBottom", 21 },
+	{ "xStep", 54 },
+	{ "yStep", 55 },
+	{ "nsBottom", 11 },
+	{ "nsTop", 9 },
+	{ "nsLeft", 10 },
+	{ "nsRight", 12 },
+	{ "font", 33 },
+	{ "text", 26 },
+	{ "type", 34 },
+	{ "state", 32 },
+	{ "doit", 60 },
+	{ "delete", 84 },
+	{ "signal", 17 },
+	{ "underBits", 8 },
+	{ "canBeHere", 57 },
+	{ "client", 45 },
+	{ "dx", 46 },
+	{ "dy", 47 },
+	{ "xStep", 54 },
+	{ "yStep", 55 },
+	{ "b-moveCnt", 48 },
+	{ "b-i1", 49 },
+	{ "b-i2", 50 },
+	{ "b-di", 51 },
+	{ "b-xAxis", 52 },
+	{ "b-incr", 53 },
+	{ "completed", 159 },
+	{ "illegalBits", 18 },
+	{ "dispose", 88 },
+	{ "prevSignal", 129 },
+	{ "message", 40 },
+	{ "modifiers", 64 },
+	{ "cue", 121 },
+	{ "owner", 130 },
+	{ "handle", 44 },
+	{ "number", 43 },
+	{ "max", 37 },
+	{ "cursor", 36 },
+	{ "claimed", 76 },
+	{ "edgeHit", 236 },
+	{ "wordFail", 71 },
+	{ "syntaxFail", 72 },
+	{ "semanticFail", 73 },
+	{ "cycler", 164 },
+	{ "elements", 27 },
+	{ "lsTop", 13 },
+	{ "lsBottom", 15 },
+	{ "lsLeft", 14 },
+	{ "lsRight", 16 },
+	{ "baseSetter", 207 },
+	{ "who", 39 },
+	{ "distance", 173 },
+	{ "mover", 59 },
+	{ "looper", 62 },
+	{ "isBlocked", 61 },
+	{ "heading", 58 },
+	{ "mode", 30 },
+	{ "caller", 119 },
+	{ "moveDone", 170 },
+	{ "size", 96 },
+	{ "moveSpeed", 56 },
+	{ "flags", 368 },
+	{ "points", 316 },
+	{ "motionCue", 162 },
+	{ "setTarget", 171 }
+};
+
+// A macro for loading one of the above tables in the function below
+#define USE_SELECTOR_TABLE(x) \
+	do { \
+		for (uint32 i = 0; i < ARRAYSIZE(x); i++) { \
+			if (x[i].slot >= names.size()) \
+				names.resize(x[i].slot + 1); \
+			names[x[i].slot] = x[i].name; \
+		} \
+	} while (0)
+
+Common::StringList Kernel::checkStaticSelectorNames() {
+	Common::String gameID = ((SciEngine*)g_engine)->getGameID();
+	
+	Common::StringList names;
+	
+	if (gameID == "kq4sci")
+		USE_SELECTOR_TABLE(kq4_demo_selectors);
+	else if (gameID == "lsl3" || gameID == "iceman") // identical, except iceman has "flags" 
+		USE_SELECTOR_TABLE(iceman_demo_selectors);
+	else if (gameID == "christmas1992")
+		USE_SELECTOR_TABLE(christmas1992_selectors);
+	else if (gameID == "lsl1sci")
+		USE_SELECTOR_TABLE(lsl1_demo_selectors);
+	
+	return names;
+}
+	
+} // End of namespace Sci
+
+#endif // SCI_STATIC_SELECTORS_H

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/engine/vm.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/engine/vm.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/engine/vm.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -552,7 +552,7 @@
 	StackPtr s_temp; // Temporary stack pointer
 	int16 opparams[4]; // opcode parameters
 
-	scriptState.restadjust = s->restAdjust;
+	scriptState.restAdjust = s->restAdjust;
 	// &rest adjusts the parameter count by this value
 	// Current execution data:
 	scriptState.xs = &(s->_executionStack.back());
@@ -931,17 +931,17 @@
 
 		case 0x20: { // call
 			int argc = (opparams[1] >> 1) // Given as offset, but we need count
-			           + 1 + scriptState.restadjust;
+			           + 1 + scriptState.restAdjust;
 			StackPtr call_base = scriptState.xs->sp - argc;
-			scriptState.xs->sp[1].offset += scriptState.restadjust;
+			scriptState.xs->sp[1].offset += scriptState.restAdjust;
 
-			xs_new = add_exec_stack_entry(s, make_reg(scriptState.xs->addr.pc.segment, 
-										  scriptState.xs->addr.pc.offset + opparams[0]),
-			                              scriptState.xs->sp, scriptState.xs->objp,
-										  (validate_arithmetic(*call_base)) + scriptState.restadjust,
-			                              call_base, NULL_SELECTOR, scriptState.xs->objp, 
-										  s->_executionStack.size()-1, scriptState.xs->local_segment);
-			scriptState.restadjust = 0; // Used up the &rest adjustment
+			xs_new = add_exec_stack_entry(s, make_reg(scriptState.xs->addr.pc.segment,
+											scriptState.xs->addr.pc.offset + opparams[0]),
+											scriptState.xs->sp, scriptState.xs->objp, 
+											(validate_arithmetic(*call_base)) + scriptState.restAdjust,
+											call_base, NULL_SELECTOR, scriptState.xs->objp,
+											s->_executionStack.size()-1, scriptState.xs->local_segment);
+			scriptState.restAdjust = 0; // Used up the &rest adjustment
 			scriptState.xs->sp = call_base;
 
 			s->_executionStackPosChanged = true;
@@ -953,8 +953,8 @@
 
 			scriptState.xs->sp -= (opparams[1] >> 1) + 1;
 			if (!s->_kernel->hasOldScriptHeader()) {
-				scriptState.xs->sp -= scriptState.restadjust;
-				s->restAdjust = 0; // We just used up the restadjust, remember?
+				scriptState.xs->sp -= scriptState.restAdjust;
+				s->restAdjust = 0; // We just used up the scriptState.restAdjust, remember?
 			}
 
 			if (opparams[0] >= (int)s->_kernel->_kernelFuncs.size()) {
@@ -963,15 +963,15 @@
 				int argc = ASSERT_ARITHMETIC(scriptState.xs->sp[0]);
 
 				if (!s->_kernel->hasOldScriptHeader())
-					argc += scriptState.restadjust;
+					argc += scriptState.restAdjust;
 
 				if (s->_kernel->_kernelFuncs[opparams[0]].signature
-				        && !kernel_matches_signature(s, 
-							s->_kernel->_kernelFuncs[opparams[0]].signature, argc, 
-							scriptState.xs->sp + 1)) {
+						&& !kernel_matches_signature(s,
+						s->_kernel->_kernelFuncs[opparams[0]].signature, argc,
+						scriptState.xs->sp + 1)) {
 					error("[VM] Invalid arguments to kernel call %x\n", opparams[0]);
 				} else {
-					s->r_acc = s->_kernel->_kernelFuncs[opparams[0]].fun(s, opparams[0], 
+					s->r_acc = s->_kernel->_kernelFuncs[opparams[0]].fun(s, opparams[0],
 														argc, scriptState.xs->sp + 1);
 				}
 				// Call kernel function
@@ -983,33 +983,33 @@
 				s->_executionStackPosChanged = true;
 
 				if (!s->_kernel->hasOldScriptHeader())
-					scriptState.restadjust = s->restAdjust;
+					scriptState.restAdjust = s->restAdjust;
 
 			}
 			break;
 
 		case 0x22: // callb
-			temp = ((opparams[1] >> 1) + scriptState.restadjust + 1);
+			temp = ((opparams[1] >> 1) + scriptState.restAdjust + 1);
 			s_temp = scriptState.xs->sp;
 			scriptState.xs->sp -= temp;
 
-			scriptState.xs->sp[0].offset += scriptState.restadjust;
-			xs_new = execute_method(s, 0, opparams[0], s_temp, scriptState.xs->objp, 
+			scriptState.xs->sp[0].offset += scriptState.restAdjust;
+			xs_new = execute_method(s, 0, opparams[0], s_temp, scriptState.xs->objp,
 									scriptState.xs->sp[0].offset, scriptState.xs->sp);
-			scriptState.restadjust = 0; // Used up the &rest adjustment
+			scriptState.restAdjust = 0; // Used up the &rest adjustment
 			if (xs_new)    // in case of error, keep old stack
 				s->_executionStackPosChanged = true;
 			break;
 
 		case 0x23: // calle
-			temp = ((opparams[2] >> 1) + scriptState.restadjust + 1);
+			temp = ((opparams[2] >> 1) + scriptState.restAdjust + 1);
 			s_temp = scriptState.xs->sp;
 			scriptState.xs->sp -= temp;
 
-			scriptState.xs->sp[0].offset += scriptState.restadjust;
-			xs_new = execute_method(s, opparams[0], opparams[1], s_temp, scriptState.xs->objp, 
+			scriptState.xs->sp[0].offset += scriptState.restAdjust;
+			xs_new = execute_method(s, opparams[0], opparams[1], s_temp, scriptState.xs->objp,
 									scriptState.xs->sp[0].offset, scriptState.xs->sp);
-			scriptState.restadjust = 0; // Used up the &rest adjustment
+			scriptState.restAdjust = 0; // Used up the &rest adjustment
 
 			if (xs_new)  // in case of error, keep old stack
 				s->_executionStackPosChanged = true;
@@ -1027,7 +1027,7 @@
 					s->_executionStack.pop_back();
 
 					s->_executionStackPosChanged = true;
-					s->restAdjust = scriptState.restadjust; // Update &rest
+					s->restAdjust = scriptState.restAdjust; // Update &rest
 					return; // "Hard" return
 				}
 
@@ -1059,37 +1059,37 @@
 
 		case 0x25: // send
 			s_temp = scriptState.xs->sp;
-			scriptState.xs->sp -= ((opparams[0] >> 1) + scriptState.restadjust); // Adjust stack
+			scriptState.xs->sp -= ((opparams[0] >> 1) + scriptState.restAdjust); // Adjust stack
 
-			scriptState.xs->sp[1].offset += scriptState.restadjust;
-			xs_new = send_selector(s, s->r_acc, s->r_acc, s_temp, 
-					(int)(opparams[0] >> 1) + scriptState.restadjust, scriptState.xs->sp);
+			scriptState.xs->sp[1].offset += scriptState.restAdjust;
+			xs_new = send_selector(s, s->r_acc, s->r_acc, s_temp,
+									(int)(opparams[0] >> 1) + (uint16)scriptState.restAdjust, scriptState.xs->sp);
 
 			if (xs_new && xs_new != scriptState.xs)
 				s->_executionStackPosChanged = true;
 
-			scriptState.restadjust = 0;
+			scriptState.restAdjust = 0;
 
 			break;
 
 		case 0x28: // class
-			s->r_acc = get_class_address(s, (unsigned)opparams[0], SCRIPT_GET_LOCK, 
+			s->r_acc = get_class_address(s, (unsigned)opparams[0], SCRIPT_GET_LOCK,
 											scriptState.xs->addr.pc);
 			break;
 
 		case 0x2a: // self
 			s_temp = scriptState.xs->sp;
-			scriptState.xs->sp -= ((opparams[0] >> 1) + scriptState.restadjust); // Adjust stack
+			scriptState.xs->sp -= ((opparams[0] >> 1) + scriptState.restAdjust); // Adjust stack
 
-			scriptState.xs->sp[1].offset += scriptState.restadjust;
-			xs_new = send_selector(s, scriptState.xs->objp, scriptState.xs->objp, 
-									s_temp, (int)(opparams[0] >> 1) + scriptState.restadjust, 
+			scriptState.xs->sp[1].offset += scriptState.restAdjust;
+			xs_new = send_selector(s, scriptState.xs->objp, scriptState.xs->objp,
+									s_temp, (int)(opparams[0] >> 1) + (uint16)scriptState.restAdjust,
 									scriptState.xs->sp);
 
 			if (xs_new && xs_new != scriptState.xs)
 				s->_executionStackPosChanged = true;
 
-			scriptState.restadjust = 0;
+			scriptState.restAdjust = 0;
 			break;
 
 		case 0x2b: // super
@@ -1099,24 +1099,24 @@
 				error("[VM]: Invalid superclass in object");
 			else {
 				s_temp = scriptState.xs->sp;
-				scriptState.xs->sp -= ((opparams[1] >> 1) + scriptState.restadjust); // Adjust stack
+				scriptState.xs->sp -= ((opparams[1] >> 1) + scriptState.restAdjust); // Adjust stack
 
-				scriptState.xs->sp[1].offset += scriptState.restadjust;
-				xs_new = send_selector(s, r_temp, scriptState.xs->objp, s_temp, 
-										(int)(opparams[1] >> 1) + scriptState.restadjust, 
+				scriptState.xs->sp[1].offset += scriptState.restAdjust;
+				xs_new = send_selector(s, r_temp, scriptState.xs->objp, s_temp,
+										(int)(opparams[1] >> 1) + (uint16)scriptState.restAdjust,
 										scriptState.xs->sp);
 
 				if (xs_new && xs_new != scriptState.xs)
 					s->_executionStackPosChanged = true;
 
-				scriptState.restadjust = 0;
+				scriptState.restAdjust = 0;
 			}
 
 			break;
 
 		case 0x2c: // &rest
 			temp = (uint16) opparams[0]; // First argument
-			scriptState.restadjust = MAX<uint16>(scriptState.xs->argc - temp + 1, 0); // +1 because temp counts the paramcount while argc doesn't
+			scriptState.restAdjust = MAX<int16>(scriptState.xs->argc - temp + 1, 0); // +1 because temp counts the paramcount while argc doesn't
 
 			for (; temp <= scriptState.xs->argc; temp++)
 				PUSH32(scriptState.xs->variables_argp[temp]);

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/module.mk
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/module.mk	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/module.mk	2009-07-11 11:48:01 UTC (rev 42381)
@@ -33,6 +33,7 @@
 	engine/script.o \
 	engine/scriptdebug.o \
 	engine/seg_manager.o \
+	engine/static_selectors.o \
 	engine/stringfrag.o \
 	engine/state.o \
 	engine/vm.o \

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/resource.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/resource.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/resource.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -883,6 +883,21 @@
 		debug("Patching %s failed - resource type mismatch", source->location_name.c_str());
 		return;
 	}
+
+	// Fixes SQ5/German, patch file special case logic taken from SCI View disassembly
+	if (patch_data_offset & 0x80) {
+		switch (patch_data_offset & 0x7F) {
+			case 0:
+				patch_data_offset = 24;
+				break;
+			case 1:
+				patch_data_offset = 2;
+				break;
+			default:
+				warning("Resource patch unsupported special case %X\n", patch_data_offset);
+		}
+	}
+
 	if (patch_data_offset + 2 >= fsize) {
 		debug("Patching %s failed - patch starting at offset %d can't be in file of size %d",
 		      source->location_name.c_str(), patch_data_offset + 2, fsize);

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -1164,6 +1164,41 @@
 		return SI_FINISHED;
 }
 
+/**********************/
+/*-- Timer iterator --*/
+/**********************/
+TimerSongIterator::TimerSongIterator(int delta)
+	: _delta(delta) {
+}
+
+int TimerSongIterator::nextCommand(byte *buf, int *result) {
+	if (_delta) {
+	   return _delta;
+	}
+	return SI_FINISHED;
+}
+
+SongIterator *TimerSongIterator::handleMessage(Message msg) {
+	return NULL;
+}
+
+int TimerSongIterator::getTimepos() {
+	return 0;
+}
+
+Audio::AudioStream *TimerSongIterator::getAudioStream() {
+	return NULL;
+}
+
+SongIterator *TimerSongIterator::clone(int delta) {
+	TimerSongIterator *newit = new TimerSongIterator(*this);
+	return newit;
+}
+
+SongIterator *new_timer_iterator(int delta) {
+	return new TimerSongIterator(delta);
+}
+
 /**********************************/
 /*-- Fast-forward song iterator --*/
 /**********************************/

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator.h	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator.h	2009-07-11 11:48:01 UTC (rev 42381)
@@ -281,6 +281,12 @@
 */
 SongIterator *songit_new(byte *data, uint size, SongIteratorType type, songit_id_t id);
 
+/* Constructs a new song timer iterator object
+** Parameters: (int) delta: The delta after which to fire SI_FINISHED
+** Returns   : (SongIterator *) A newly allocated but uninitialized song
+**             iterator
+*/
+SongIterator *new_timer_iterator(int delta);
 
 /* Handles a message to the song iterator
 ** Parameters: (SongIterator **): A reference to the variable storing the song iterator

Modified: scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator_internal.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator_internal.h	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/sci/sfx/iterator_internal.h	2009-07-11 11:48:01 UTC (rev 42381)
@@ -181,6 +181,28 @@
 
 #define PLAYMASK_NONE 0x0
 
+/***************************/
+/*--------- Timer ---------*/
+/***************************/
+
+/**
+ * A song iterator which waits a specified time and then fires
+ * SI_FINISHED. Used by DoSound, where audio resources are played (SCI1)
+ */
+class TimerSongIterator : public SongIterator {
+protected:
+	int _delta; /**!< Remaining time */
+
+public:
+	TimerSongIterator(int delta);
+
+	int nextCommand(byte *buf, int *result);
+	Audio::AudioStream *getAudioStream();
+	SongIterator *handleMessage(Message msg);
+	int getTimepos();
+	SongIterator *clone(int delta);
+};
+
 /**********************************/
 /*--------- Fast Forward ---------*/
 /**********************************/

Modified: scummvm/branches/gsoc2009-16bit/engines/scumm/detection_tables.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/scumm/detection_tables.h	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/scumm/detection_tables.h	2009-07-11 11:48:01 UTC (rev 42381)
@@ -230,13 +230,13 @@
 
 	{"monkey2",  0, 0, GID_MONKEY2,  5, 0, MDT_ADLIB | MDT_MIDI, 0, UNK, GUIO_NOSPEECH},
 
-	{"atlantis", 0, 0, GID_INDY4,    5, 0, MDT_ADLIB | MDT_MIDI, 0, UNK, GUIO_NOSPEECH},
+	{"atlantis", "", 0, GID_INDY4,    5, 0, MDT_ADLIB | MDT_MIDI, 0, UNK, GUIO_NOSPEECH},
 	{"atlantis", "CD" , 0, GID_INDY4,    5, 0, MDT_ADLIB | MDT_MIDI, 0, UNK, GUIO_NONE},
 
-	{"tentacle", 0, 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NOSPEECH},
+	{"tentacle", "", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NOSPEECH},
 	{"tentacle", "CD", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NONE},
 
-	{"samnmax",  0, 0, GID_SAMNMAX,  6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NOSPEECH},
+	{"samnmax",  "", 0, GID_SAMNMAX,  6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NOSPEECH},
 	{"samnmax",  "CD", 0, GID_SAMNMAX,  6, 0, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO_NONE},
 
 #ifdef ENABLE_SCUMM_7_8

Modified: scummvm/branches/gsoc2009-16bit/engines/scumm/he/wiz_he.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/scumm/he/wiz_he.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/scumm/he/wiz_he.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -929,6 +929,11 @@
 	}
 }
 
+// NOTE: These templates are used outside this file. We don't want the compiler to optimize them away, so we need to explicitely instantiate them.
+template void Wiz::decompressWizImage<kWizXMap>(uint8 *dst, int dstPitch, int dstType, const uint8 *src, const Common::Rect &srcRect, int flags, const uint8 *palPtr, const uint8 *xmapPtr, uint8 bitDepth);
+template void Wiz::decompressWizImage<kWizRMap>(uint8 *dst, int dstPitch, int dstType, const uint8 *src, const Common::Rect &srcRect, int flags, const uint8 *palPtr, const uint8 *xmapPtr, uint8 bitDepth);
+template void Wiz::decompressWizImage<kWizCopy>(uint8 *dst, int dstPitch, int dstType, const uint8 *src, const Common::Rect &srcRect, int flags, const uint8 *palPtr, const uint8 *xmapPtr, uint8 bitDepth);
+
 template <int type>
 void Wiz::decompressRawWizImage(uint8 *dst, int dstPitch, int dstType, const uint8 *src, int srcPitch, int w, int h, int transColor, const uint8 *palPtr, uint8 bitDepth) {
 	if (type == kWizRMap) {

Modified: scummvm/branches/gsoc2009-16bit/engines/scumm/scumm-md5.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/scumm/scumm-md5.h	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/scumm/scumm-md5.h	2009-07-11 11:48:01 UTC (rev 42381)
@@ -1,5 +1,5 @@
 /*
-  This file was generated by the md5table tool on Fri May 15 10:19:51 2009
+  This file was generated by the md5table tool on Sat Jul 11 01:37:44 2009
   DO NOT EDIT MANUALLY!
  */
 
@@ -20,7 +20,7 @@
 	{ "035deab53b47bc43abc763560d0f8d4b", "atlantis", "", "Demo", -1, Common::EN_ANY, Common::kPlatformPC },
 	{ "037385a953789190298494d92b89b3d0", "catalog", "HE 72", "Demo", -1, Common::EN_ANY, Common::kPlatformWindows },
 	{ "03d3b18ee3fd68114e2a687c871e38d5", "freddi4", "HE 99", "Mini Game", -1, Common::EN_USA, Common::kPlatformWindows },
-	{ "0425954a9db5c340861672892c3e678d", "samnmax", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
+	{ "0425954a9db5c340861672892c3e678d", "samnmax", "CD", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
 	{ "04401d747f1a2c1c4b388daff71ed378", "ft", "", "", 535405461, Common::DE_DEU, Common::kPlatformMacintosh },
 	{ "04687cdf7f975a89d2474929f7b80946", "indy3", "FM-TOWNS", "", 7552, Common::EN_ANY, Common::kPlatformFMTowns },
 	{ "0557df19f046a84c2fdc63507c6616cb", "farm", "HE 72", "Demo", -1, Common::NL_NLD, Common::kPlatformWindows },
@@ -53,10 +53,10 @@
 	{ "0e96ab45a4eb72acc1b46813976589fd", "activity", "", "", -1, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "0e9b01430e31d9fcd94071d433bbc6bf", "loom", "No Adlib", "EGA", -1, Common::FR_FRA, Common::kPlatformAtariST },
 	{ "0f5935bd5e88ba6f09e558d64459746d", "thinker1", "", "Demo", 30919, Common::EN_USA, Common::kPlatformWindows },
-	{ "0f6f2e716ba896a44e5059bba1de7ca9", "samnmax", "", "CD", -1, Common::IT_ITA, Common::kPlatformUnknown },
+	{ "0f6f2e716ba896a44e5059bba1de7ca9", "samnmax", "CD", "CD", -1, Common::IT_ITA, Common::kPlatformUnknown },
 	{ "0f9c7a76657f0840b8f7ccb5bffeb9f4", "indy3", "No Adlib", "EGA", -1, Common::FR_FRA, Common::kPlatformAtariST },
 	{ "0f9d3317910ac7a9f449243118884ada", "puttzoo", "", "", 42070, Common::DE_DEU, Common::kPlatformWindows },
-	{ "0fb73eddfcf584c02ba097984df131ba", "samnmax", "", "CD", 9080, Common::DE_DEU, Common::kPlatformUnknown },
+	{ "0fb73eddfcf584c02ba097984df131ba", "samnmax", "CD", "CD", 9080, Common::DE_DEU, Common::kPlatformUnknown },
 	{ "1005456bfe351c1b679e1ff2dc2849e9", "puttzoo", "", "", -1, Common::UNK_LANG, Common::kPlatformWindows },
 	{ "100b4c8403ad6a83d4bf7dbf83e44dc4", "spyfox", "", "", -1, Common::FR_FRA, Common::kPlatformWindows },
 	{ "10d8e66cd11049ce64815ebb9fd76eb3", "spyozon", "", "", -1, Common::FR_FRA, Common::kPlatformUnknown },
@@ -74,20 +74,20 @@
 	{ "15e03ffbfeddb9c2aebc13dcb2a4a8f4", "monkey", "VGA", "VGA", 8357, Common::EN_ANY, Common::kPlatformPC },
 	{ "15f588e887e857e8c56fe6ade4956168", "atlantis", "", "Floppy", -1, Common::ES_ESP, Common::kPlatformAmiga },
 	{ "16542a7342a918bfe4ba512007d36c47", "FreddisFunShop", "HE 99L", "", -1, Common::EN_USA, Common::kPlatformUnknown },
-	{ "166553538ff320c69edafeee29525419", "samnmax", "", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
+	{ "166553538ff320c69edafeee29525419", "samnmax", "CD", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "16effd200aa6b8abe9c569c3e578814d", "freddi4", "HE 99", "Demo", -1, Common::NL_NLD, Common::kPlatformWindows },
 	{ "179879b6e35c1ead0d93aab26db0951b", "fbear", "HE 70", "", 13381, Common::EN_ANY, Common::kPlatformWindows },
 	{ "17b5d5e6af4ae89d62631641d66d5a05", "indy3", "VGA", "VGA", -1, Common::IT_ITA, Common::kPlatformPC },
 	{ "17f7296f63c78642724f057fd8e736a7", "maniac", "NES", "extracted", -1, Common::EN_GRB, Common::kPlatformNES },
-	{ "17fa250eb72dae2dad511ba79c0b6b0a", "tentacle", "", "Demo", -1, Common::FR_FRA, Common::kPlatformPC },
-	{ "182344899c2e2998fca0bebcd82aa81a", "atlantis", "", "CD", 12035, Common::EN_ANY, Common::kPlatformPC },
+	{ "17fa250eb72dae2dad511ba79c0b6b0a", "tentacle", "CD", "Demo", -1, Common::FR_FRA, Common::kPlatformPC },
+	{ "182344899c2e2998fca0bebcd82aa81a", "atlantis", "CD", "CD", 12035, Common::EN_ANY, Common::kPlatformPC },
 	{ "183d7464902d40d00800e8ee1f04117c", "maniac", "V2", "V2", 1988, Common::DE_DEU, Common::kPlatformPC },
 	{ "1875b90fade138c9253a8e967007031a", "indy3", "VGA", "VGA", 6295, Common::EN_ANY, Common::kPlatformPC },
 	{ "187d315f6b5168f68680dfe8c3d76a3e", "loom", "EGA", "EGA", -1, Common::HB_ISR, Common::kPlatformPC },
 	{ "1900e501a52fbf55bde6e4196f6d2aa6", "zak", "V2", "V2", -1, Common::IT_ITA, Common::kPlatformPC },
 	{ "19263586f749a560c1adf8b3393a9593", "socks", "HE 85", "", -1, Common::RU_RUS, Common::kPlatformWindows },
 	{ "19bf6938a94698296bcb0c99c31c91a7", "spyfox2", "", "Demo", -1, Common::EN_GRB, Common::kPlatformWindows },
-	{ "1a6e5ae2777a6a33f06ffc0226210934", "atlantis", "", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
+	{ "1a6e5ae2777a6a33f06ffc0226210934", "atlantis", "CD", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "1c792d28376d45e145cb916bca0400a2", "spyfox2", "", "Demo", -1, Common::NL_NLD, Common::kPlatformUnknown },
 	{ "1c7e7db2cfab1ad62746ab680a634204", "maniac", "NES", "extracted", -1, Common::FR_FRA, Common::kPlatformNES },
 	{ "1ca86e2cf9aaa2068738a1e5ba477e60", "zak", "FM-TOWNS", "", -1, Common::JA_JPN, Common::kPlatformFMTowns },
@@ -117,11 +117,11 @@
 	{ "2723fea3dae0cb47768c424b145ae0e7", "tentacle", "", "Floppy", 7932, Common::EN_ANY, Common::kPlatformPC },
 	{ "27b2ef1653089fe5b897d9cc89ce784f", "balloon", "HE 80", "", -1, Common::RU_RUS, Common::kPlatformWindows },
 	{ "27b3a4224ad63d5b04627595c1c1a025", "zak", "V2", "V2", -1, Common::IT_ITA, Common::kPlatformAmiga },
-	{ "28d24a33448fab6795850bc9f159a4a2", "atlantis", "", "Demo", 11170, Common::JA_JPN, Common::kPlatformFMTowns },
+	{ "28d24a33448fab6795850bc9f159a4a2", "atlantis", "CD", "Demo", 11170, Common::JA_JPN, Common::kPlatformFMTowns },
 	{ "28ef68ee3ed76d7e2ee8ee13c15fbd5b", "loom", "EGA", "EGA", 5748, Common::EN_ANY, Common::kPlatformPC },
 	{ "28f07458f1b6c24e118a1ea056827701", "lost", "HE 99", "", -1, Common::NL_NLD, Common::kPlatformUnknown },
 	{ "2a208ffbcd0e83e86f4356e6f64aa6e1", "loom", "EGA", "EGA", -1, Common::ES_ESP, Common::kPlatformPC },
-	{ "2a41b53cf1a90b6e6f26c10cc6041084", "tentacle", "", "Demo", 2439158, Common::EN_ANY, Common::kPlatformMacintosh },
+	{ "2a41b53cf1a90b6e6f26c10cc6041084", "tentacle", "CD", "Demo", 2439158, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "2a446817ffcabfef8716e0c456ecaf81", "puttzoo", "", "Demo", -1, Common::DE_DEU, Common::kPlatformWindows },
 	{ "2a8658dbd13d84d1bce64a71a35995eb", "pajama2", "HE 99", "Demo", -1, Common::HB_ISR, Common::kPlatformWindows },
 	{ "2c04aacffb8428f30ccf4f734fbe3adc", "activity", "", "", -1, Common::EN_ANY, Common::kPlatformPC },
@@ -130,7 +130,7 @@
 	{ "2d388339d6050d8ccaa757b64633954e", "zak", "FM-TOWNS", "Demo", 7520, Common::EN_ANY, Common::kPlatformFMTowns },
 	{ "2d4536a56e01da4b02eb021e7770afa2", "zak", "FM-TOWNS", "", 7520, Common::EN_ANY, Common::kPlatformFMTowns },
 	{ "2d4acbdcfd8e374c9da8c2e7303a5cd0", "BluesBirthday", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
-	{ "2d9d46f23cb07bbc90b8ad464d3e4ff8", "atlantis", "", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
+	{ "2d9d46f23cb07bbc90b8ad464d3e4ff8", "atlantis", "CD", "CD", -1, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "2e85f7aa054930c692a5b1bed1dfc295", "football2002", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
 	{ "2e8a1f76ea33bc5e04347646feee173d", "pajama3", "", "", -1, Common::DE_DEU, Common::kPlatformUnknown },
 	{ "2fe369ad70f52a8cf7ad6077ee64f81a", "loom", "EGA", "EGA", -1, Common::DE_DEU, Common::kPlatformAmiga },
@@ -165,7 +165,7 @@
 	{ "3a03dab514e4038df192d8a8de469788", "atlantis", "", "Floppy", -1, Common::EN_ANY, Common::kPlatformAmiga },
 	{ "3a0c35f3c147b98a2bdf8d400cfc4ab5", "indy3", "FM-TOWNS", "", -1, Common::JA_JPN, Common::kPlatformFMTowns },
 	{ "3a3e592b074f595489f7f11e150c398d", "puttzoo", "HE 99", "Updated", -1, Common::EN_USA, Common::kPlatformWindows },
-	{ "3a5d13675e9a23aedac0bac7730f0ac1", "samnmax", "", "CD", -1, Common::FR_FRA, Common::kPlatformMacintosh },
+	{ "3a5d13675e9a23aedac0bac7730f0ac1", "samnmax", "CD", "CD", -1, Common::FR_FRA, Common::kPlatformMacintosh },
 	{ "3a5ec90d556d4920976c5578bfbfaf79", "maniac", "NES", "extracted", -1, Common::DE_DEU, Common::kPlatformNES },
 	{ "3af61c5edf8e15b43dbafd285b2e9777", "puttcircus", "", "Demo", -1, Common::HB_ISR, Common::kPlatformWindows },
 	{ "3b301b7892f883ce42ab4be6a274fea6", "samnmax", "", "Floppy", -1, Common::EN_ANY, Common::kPlatformPC },
@@ -176,7 +176,7 @@
 	{ "3df6ead57930488bc61e6e41901d0e97", "fbear", "HE 61", "", -1, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "3e48298920fab9b7aec5a971e1bd1fab", "pajama3", "", "Demo", -1, Common::EN_GRB, Common::kPlatformWindows },
 	{ "40564ec47da48a67787d1f9bd043902a", "maniac", "V2 Demo", "V2 Demo", 1988, Common::EN_ANY, Common::kPlatformPC },
-	{ "4167a92a1d46baa4f4127d918d561f88", "tentacle", "", "CD", 7932, Common::EN_ANY, Common::kPlatformUnknown },
+	{ "4167a92a1d46baa4f4127d918d561f88", "tentacle", "CD", "CD", 7932, Common::EN_ANY, Common::kPlatformUnknown },
 	{ "41958e24d03181ff9a381a66d048a581", "ft", "", "", -1, Common::PT_BRA, Common::kPlatformUnknown },
 	{ "425205754fa749f4f0b0dd9d09fa45fd", "football", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
 	{ "430bc518017b6fac046f58bab6baad5d", "monkey2", "", "", -1, Common::JA_JPN, Common::kPlatformFMTowns },
@@ -195,13 +195,13 @@
 	{ "4aa93cb30e485b728504ba3a693f12bf", "pajama", "HE 100", "", -1, Common::RU_RUS, Common::kPlatformWindows },
 	{ "4af4a6b248103c1fe9edef619677f540", "puttmoon", "", "Demo", -1, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "4ba37f835be11a59d969f90f272f575b", "water", "HE 80", "", -1, Common::EN_USA, Common::kPlatformUnknown },
-	{ "4ba7fb331296c283e73d8f5b2096e551", "samnmax", "", "CD", -1, Common::ES_ESP, Common::kPlatformUnknown },
+	{ "4ba7fb331296c283e73d8f5b2096e551", "samnmax", "CD", "CD", -1, Common::ES_ESP, Common::kPlatformUnknown },
 	{ "4bedb49943df95a9c900a5a82ccbe9de", "ft", "", "", -1, Common::FR_FRA, Common::kPlatformUnknown },
 	{ "4bfa4a43684bcb437f7fb47f457a0aa5", "socks", "HE 99", "", -1, Common::NL_NLD, Common::kPlatformUnknown },
 	{ "4c4820518e16e1a0e3616a3b021a04f3", "catalog", "HE CUP", "Preview", 10927456, Common::DE_DEU, Common::kPlatformUnknown },
 	{ "4cb9c3618f71668f8e4346c8f323fa82", "monkey2", "", "", 10700, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "4ce2d5b355964bbcb5e5ce73236ef868", "freddicove", "HE 100", "", -1, Common::RU_RUS, Common::kPlatformWindows },
-	{ "4d34042713958b971cb139fba4658586", "atlantis", "", "", -1, Common::JA_JPN, Common::kPlatformFMTowns },
+	{ "4d34042713958b971cb139fba4658586", "atlantis", "CD", "", -1, Common::JA_JPN, Common::kPlatformFMTowns },
 	{ "4dbff3787aedcd96b0b325f2d92d7ad9", "maze", "HE 100", "Updated", -1, Common::EN_USA, Common::kPlatformUnknown },
 	{ "4dc780f1bc587a193ce8a97652791438", "loom", "EGA", "EGA", -1, Common::EN_ANY, Common::kPlatformAmiga },
 	{ "4e5867848ee61bc30d157e2c94eee9b4", "PuttTime", "HE 90", "Demo", 18394, Common::EN_USA, Common::kPlatformUnknown },
@@ -212,7 +212,7 @@
 	{ "4f267a901719623de7dde83e47d5b474", "atlantis", "", "Floppy", -1, Common::DE_DEU, Common::kPlatformAmiga },
 	{ "4f580a021eee026f3b4589e17d130d78", "freddi4", "", "", -1, Common::UNK_LANG, Common::kPlatformUnknown },
 	{ "4fa6870d9bc8c313b65d54b1da5a1891", "pajama", "", "", -1, Common::NL_NLD, Common::kPlatformWindows },
-	{ "4fbbe9f64b8bc547503a379a301183ce", "tentacle", "", "CD", -1, Common::IT_ITA, Common::kPlatformUnknown },
+	{ "4fbbe9f64b8bc547503a379a301183ce", "tentacle", "CD", "CD", -1, Common::IT_ITA, Common::kPlatformUnknown },
 	{ "4fe6a2e8df3c4536b278fdd2fbcb181e", "pajama3", "", "Mini Game", -1, Common::EN_ANY, Common::kPlatformWindows },
 	{ "5057fb0e99e5aa29df1836329232f101", "freddi2", "HE 80", "", -1, Common::UNK_LANG, Common::kPlatformWindows },
 	{ "507bb360688dc4180fdf0d7597352a69", "freddi", "HE 73", "", 26402, Common::SE_SWE, Common::kPlatformWindows },
@@ -289,9 +289,9 @@
 	{ "6bf70eee5de3d24d2403e0dd3d267e8a", "spyfox", "", "", 49221, Common::UNK_LANG, Common::kPlatformWindows },
 	{ "6c2bff0e327f2962e809c2e1a82d7309", "monkey", "VGA", "VGA", -1, Common::EN_ANY, Common::kPlatformAmiga },
 	{ "6d1baa1065ac5f7b210be8ebe4235e49", "freddi", "HE 73", "", -1, Common::NL_NLD, Common::kPlatformMacintosh },
-	{ "6dead580b0ff14d5f7b33b4219f04159", "samnmax", "", "Demo", 16556335, Common::EN_ANY, Common::kPlatformMacintosh },
+	{ "6dead580b0ff14d5f7b33b4219f04159", "samnmax", "CD", "Demo", 16556335, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "6df20c50c1ab19799de9be7ae7716881", "fbear", "HE 61", "Demo", -1, Common::EN_ANY, Common::kPlatformMacintosh },
-	{ "6e959d65358eedf9b68b81e304b97fa4", "tentacle", "", "CD", 7932, Common::DE_DEU, Common::kPlatformUnknown },
+	{ "6e959d65358eedf9b68b81e304b97fa4", "tentacle", "CD", "CD", 7932, Common::DE_DEU, Common::kPlatformUnknown },
 	{ "6ea966b4d660c870b9ee790d1fbfc535", "monkey2", "", "", -1, Common::ES_ESP, Common::kPlatformAmiga },
 	{ "6f0be328c64d689bb606d22a389e1b0f", "loom", "No Adlib", "EGA", 5748, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "6f6ef668c608c7f534fea6e6d3878dde", "indy3", "EGA", "EGA", -1, Common::DE_DEU, Common::kPlatformPC },
@@ -332,7 +332,7 @@
 	{ "7ddeaf52c8b9a50551ce0aa2ac811d07", "BluesABCTime", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
 	{ "7e151c17adf624f1966c8fc5827c95e9", "puttputt", "HE 61", "", -1, Common::EN_ANY, Common::kPlatform3DO },
 	{ "7ea2da67ebabea4ac20cee9f4f9d2934", "airport", "", "Demo", -1, Common::EN_ANY, Common::kPlatformMacintosh },
-	{ "7edd665bbede7ea8b7233f8e650be6f8", "samnmax", "", "CD", -1, Common::FR_FRA, Common::kPlatformUnknown },
+	{ "7edd665bbede7ea8b7233f8e650be6f8", "samnmax", "CD", "CD", -1, Common::FR_FRA, Common::kPlatformUnknown },
 	{ "7f45ddd6dbfbf8f80c0c0efea4c295bc", "maniac", "V1", "V1", 1972, Common::EN_ANY, Common::kPlatformPC },
 	{ "7f945525abcd48015adf1632637a44a1", "pajama", "", "Demo", -1, Common::FR_FRA, Common::kPlatformUnknown },
 	{ "7fc6cdb46b4c9d384c52327f4bca6416", "football", "", "", -1, Common::EN_ANY, Common::kPlatformUnknown },
@@ -354,12 +354,12 @@
 	{ "87df3e0074624040407764b7c5e710b9", "pajama", "", "Demo", 18354, Common::NL_NLD, Common::kPlatformWindows },
 	{ "87f6e8037b7cc996e13474b491a7a98e", "maniac", "V2", "V2", -1, Common::IT_ITA, Common::kPlatformPC },
 	{ "8801fb4a1200b347f7a38523339526dd", "jungle", "", "", -1, Common::EN_ANY, Common::kPlatformWindows },
-	{ "883af4b0af4f77a92f1dcf1d0a283140", "tentacle", "", "CD", -1, Common::ES_ESP, Common::kPlatformUnknown },
+	{ "883af4b0af4f77a92f1dcf1d0a283140", "tentacle", "CD", "CD", -1, Common::ES_ESP, Common::kPlatformUnknown },
 	{ "898ce8eb1234a955ef75e87141902bb3", "freddi3", "", "", -1, Common::RU_RUS, Common::kPlatformWindows },
 	{ "898eaa21f79cf8d4f08db856244689ff", "pajama", "HE 99", "Updated", 66505, Common::EN_ANY, Common::kPlatformWindows },
 	{ "89cfc425566003ff74b7dc7b3e6fd469", "indy3", "EGA", "EGA", -1, Common::FR_FRA, Common::kPlatformPC },
 	{ "8a484262363a8e18be87112454f1456b", "pjgames", "", "", -1, Common::EN_USA, Common::kPlatformUnknown },
-	{ "8aa05d3cdb0e795436043f0546af2da2", "tentacle", "", "CD?", -1, Common::FR_FRA, Common::kPlatformUnknown },
+	{ "8aa05d3cdb0e795436043f0546af2da2", "tentacle", "CD", "CD?", -1, Common::FR_FRA, Common::kPlatformUnknown },
 	{ "8aed489aba45d2b9fb8a04079c9c6e6a", "baseball", "HE CUP", "Preview", 12876596, Common::UNK_LANG, Common::kPlatformUnknown },
 	{ "8afb3cf9f95abf208358e984f0c9e738", "funpack", "", "", -1, Common::EN_ANY, Common::kPlatform3DO },
 	{ "8bdb0bf87b5e303dd35693afb9351215", "ft", "", "", -1, Common::DE_DEU, Common::kPlatformUnknown },
@@ -367,7 +367,7 @@
 	{ "8de13897f0121c79d29a2377159f9ad0", "socks", "HE 99", "Updated", -1, Common::EN_ANY, Common::kPlatformWindows },
 	{ "8e3241ddd6c8dadf64305e8740d45e13", "balloon", "HE 100", "Updated", -1, Common::EN_ANY, Common::kPlatformUnknown },
 	{ "8e4ee4db46954bfe2912e259a16fad82", "monkey2", "", "", -1, Common::FR_FRA, Common::kPlatformPC },
-	{ "8e9417564f33790815445b2136efa667", "atlantis", "", "CD", 11915, Common::JA_JPN, Common::kPlatformMacintosh },
+	{ "8e9417564f33790815445b2136efa667", "atlantis", "CD", "CD", 11915, Common::JA_JPN, Common::kPlatformMacintosh },
 	{ "8e9830a6f2702be5b22c8fa0a6aaf977", "freddi2", "HE 80", "", -1, Common::NL_NLD, Common::kPlatformMacintosh },
 	{ "8eb84cee9b429314c7f0bdcf560723eb", "monkey", "FM-TOWNS", "", -1, Common::EN_ANY, Common::kPlatformFMTowns },
 	{ "8ee63cafb1fe9d62aa0d5a23117e70e7", "freddi2", "HE 100", "Updated", -1, Common::EN_USA, Common::kPlatformUnknown },
@@ -395,7 +395,7 @@
 	{ "98744fe66ff730e8c2b3b1f58803ab0b", "atlantis", "", "Demo", -1, Common::EN_ANY, Common::kPlatformPC },
 	{ "99128b6a5bdd9831d9682fb8b5cbf8d4", "BluesBirthday", "", "Yellow", -1, Common::EN_ANY, Common::kPlatformUnknown },
 	{ "99a3699f80b8f776efae592b44b9b991", "maniac", "V2", "V2", -1, Common::FR_FRA, Common::kPlatformPC },
-	{ "99b6f822b0b2612415407865438697d6", "atlantis", "", "Demo", -1, Common::EN_ANY, Common::kPlatformPC },
+	{ "99b6f822b0b2612415407865438697d6", "atlantis", "CD", "Demo", -1, Common::EN_ANY, Common::kPlatformPC },
 	{ "9b7452b5cd6d3ffb2b2f5118010af84f", "ft", "Demo", "Demo", 116463537, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "9bc548e179cdb0767009401c094d0895", "maniac", "V2", "V2", -1, Common::DE_DEU, Common::kPlatformAmiga },
 	{ "9bd2a8f72613e715c199246dd511e10f", "atlantis", "", "Floppy", -1, Common::ES_ESP, Common::kPlatformPC },
@@ -441,7 +441,7 @@
 	{ "aaa587701cde7e74692c68c1024b85eb", "puttrace", "HE 99", "Demo", -1, Common::NL_NLD, Common::kPlatformUnknown },
 	{ "aaa7f36a253f277dd29dd1c051b0e4b9", "indy3", "No Adlib", "EGA", -1, Common::DE_DEU, Common::kPlatformAtariST },
 	{ "ab0693e9324cfcf498fdcbb12acf8bb4", "puttcircus", "", "", -1, Common::EN_ANY, Common::kPlatformUnknown },
-	{ "ac1642b6edfb8521ca03760126f1c250", "tentacle", "", "Demo", -1, Common::DE_DEU, Common::kPlatformPC },
+	{ "ac1642b6edfb8521ca03760126f1c250", "tentacle", "CD", "Demo", -1, Common::DE_DEU, Common::kPlatformPC },
 	{ "ac62d50e39492ee3738b4e83a5ac780f", "freddi2", "HE 80", "", -1, Common::NL_NLD, Common::kPlatformWindows },
 	{ "acad97ab1c6fc2a5b2d98abf6db4a190", "tentacle", "", "Floppy", -1, Common::EN_ANY, Common::kPlatformUnknown },
 	{ "ae94f110a14ce71fc515d5b648827a8f", "tentacle", "", "Floppy", -1, Common::ES_ESP, Common::kPlatformPC },
@@ -492,15 +492,15 @@
 	{ "c6907d44f1166941d982864cd42cdc89", "pajama2", "HE 99", "", -1, Common::DE_DEU, Common::kPlatformUnknown },
 	{ "c782fbbe74a987c3df8ac73cd3e289ed", "freddi", "HE 73", "", -1, Common::SE_SWE, Common::kPlatformMacintosh },
 	{ "c7890e038806df2bb5c0c8c6f1986ea2", "monkey", "VGA", "VGA", -1, Common::EN_ANY, Common::kPlatformPC },
-	{ "c7be10f775404fd9785a8b92a06d240c", "atlantis", "", "", -1, Common::EN_ANY, Common::kPlatformFMTowns },
+	{ "c7be10f775404fd9785a8b92a06d240c", "atlantis", "CD", "", -1, Common::EN_ANY, Common::kPlatformFMTowns },
 	{ "c7c492a107ec520d7a7943037d0ca54a", "freddi", "HE 71", "Demo", -1, Common::NL_NLD, Common::kPlatformWindows },
-	{ "c83079157ec765a28de445aec9768d60", "tentacle", "", "Demo", 7477, Common::EN_ANY, Common::kPlatformUnknown },
+	{ "c83079157ec765a28de445aec9768d60", "tentacle", "CD", "Demo", 7477, Common::EN_ANY, Common::kPlatformUnknown },
 	{ "c8575e0b973ff1723aba6cd92c642db2", "puttrace", "HE 99", "Demo", -1, Common::FR_FRA, Common::kPlatformWindows },
 	{ "c8aac5e3e701874e2fa4117896f9e1b1", "freddi", "HE 73", "Demo", -1, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "c8c5baadcbfc8d0372ed4335abace8a7", "pajama3", "", "Demo", -1, Common::FR_FRA, Common::kPlatformWindows },
 	{ "c9717ee6059f1e43b768b464493d2fba", "fbpack", "", "", -1, Common::JA_JPN, Common::kPlatform3DO },
 	{ "cb1559e8405d17a5a278a6b5ad9338d1", "freddi3", "", "Demo", 22718, Common::EN_ANY, Common::kPlatformUnknown },
-	{ "cc04a076779379524ed4d9c5ee3c6fb1", "tentacle", "", "CD", 282467632, Common::EN_ANY, Common::kPlatformMacintosh },
+	{ "cc04a076779379524ed4d9c5ee3c6fb1", "tentacle", "CD", "CD", 282467632, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "cc0c4111449054f1692bb3c0c5e04629", "BluesBirthday", "", "Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
 	{ "cc8ba2b0df2f9c450bcf055fe2711979", "samnmax", "", "Demo", 7485, Common::DE_DEU, Common::kPlatformPC },
 	{ "cd424f143a141bc59226ad83a6e40f51", "maze", "HE 98.5", "", -1, Common::NL_NLD, Common::kPlatformUnknown },
@@ -525,7 +525,7 @@
 	{ "d220d154aafbfa12bd6f3ab1b2dae420", "puttzoo", "", "Demo", -1, Common::DE_DEU, Common::kPlatformMacintosh },
 	{ "d2cc8e31bce61e6cf2951249e10638fe", "basketball", "", "", -1, Common::EN_ANY, Common::kPlatformUnknown },
 	{ "d37c55388294b66e53e7ced3af88fa68", "freddi2", "HE 100", "Updated Demo", -1, Common::EN_ANY, Common::kPlatformUnknown },
-	{ "d43352a805d78b5f4936c6d7779bf575", "samnmax", "", "CD", -1, Common::RU_RUS, Common::kPlatformPC },
+	{ "d43352a805d78b5f4936c6d7779bf575", "samnmax", "CD", "CD", -1, Common::RU_RUS, Common::kPlatformPC },
 	{ "d4aac997e2f4e15341f0bfbf905419bd", "PuttTime", "HE 99", "", 62698, Common::EN_GRB, Common::kPlatformWindows },
 	{ "d4b8ee426b1afd3e53bc0cf020418cf6", "dog", "HE 99", "", -1, Common::EN_ANY, Common::kPlatformWindows },
 	{ "d4cccb5af88f3e77f370896e9ba8c5f9", "freddi", "HE 71", "", -1, Common::UNK_LANG, Common::kPlatformWindows },
@@ -543,8 +543,8 @@
 	{ "d831f7c048574dd9d5d85db2a1468099", "maniac", "C64", "", -1, Common::EN_ANY, Common::kPlatformC64 },
 	{ "d8323015ecb8b10bf53474f6e6b0ae33", "dig", "", "", 16304, Common::UNK_LANG, Common::kPlatformUnknown },
 	{ "d8d07efcb88f396bee0b402b10c3b1c9", "maniac", "NES", "", 262144, Common::EN_GRB, Common::kPlatformNES },
-	{ "d917f311a448e3cc7239c31bddb00dd2", "samnmax", "", "CD", 9080, Common::EN_ANY, Common::kPlatformUnknown },
-	{ "d9d0dd93d16ab4dec55cabc2b86bbd17", "samnmax", "", "Demo", 6478, Common::EN_ANY, Common::kPlatformPC },
+	{ "d917f311a448e3cc7239c31bddb00dd2", "samnmax", "CD", "CD", 9080, Common::EN_ANY, Common::kPlatformUnknown },
+	{ "d9d0dd93d16ab4dec55cabc2b86bbd17", "samnmax", "CD", "Demo", 6478, Common::EN_ANY, Common::kPlatformPC },
 	{ "da09e666fc8f5b78d7b0ac65d1a3b56e", "monkey2", "", "", 11135, Common::EN_ANY, Common::kPlatformFMTowns },
 	{ "da6269b18fcb08189c0aa9c95533cce2", "monkey", "CD", "CD", 8955, Common::IT_ITA, Common::kPlatformPC },
 	{ "da669b20271b85182e9c17a2a37ea02e", "monkey2", "", "", -1, Common::DE_DEU, Common::kPlatformAmiga },
@@ -584,7 +584,7 @@
 	{ "ecc4340c2b801f5af8da4e00c0e432d9", "puttcircus", "", "", -1, Common::NL_NLD, Common::kPlatformUnknown },
 	{ "ed2b074bc3166087a747acb2a3c6abb0", "freddi3", "HE 98.5", "Demo", -1, Common::DE_DEU, Common::kPlatformUnknown },
 	{ "ed361270102e355afe5236954216aba2", "lost", "", "", -1, Common::EN_USA, Common::kPlatformUnknown },
-	{ "ede149fda3edfc1dbd7347e0737cb583", "tentacle", "", "CD", -1, Common::FR_FRA, Common::kPlatformMacintosh },
+	{ "ede149fda3edfc1dbd7347e0737cb583", "tentacle", "CD", "CD", -1, Common::FR_FRA, Common::kPlatformMacintosh },
 	{ "edfdb24a499d92c59f824c52987c0eec", "atlantis", "", "Floppy", -1, Common::FR_FRA, Common::kPlatformPC },
 	{ "ee41f6afbc5b26fa475754b56fe92048", "puttputt", "HE 61", "", 8032, Common::JA_JPN, Common::kPlatform3DO },
 	{ "ee785fe2569bc9965526e774f7ab86f1", "spyfox", "HE 99", "", -1, Common::FR_FRA, Common::kPlatformMacintosh },
@@ -602,7 +602,7 @@
 	{ "f3d55aea441e260e9e9c7d2a187097e0", "puttzoo", "", "Demo", 14337, Common::EN_ANY, Common::kPlatformWindows },
 	{ "f40a7f495f59188ca57a9d1d50301bb6", "puttputt", "Demo", "Demo", -1, Common::EN_ANY, Common::kPlatformMacintosh },
 	{ "f5228b0cc1c19e6ea8268ba2eeb61f60", "freddi", "HE 73", "Demo", -1, Common::FR_FRA, Common::kPlatformWindows },
-	{ "f73883f13b5a302749a5bad31d909780", "tentacle", "", "CD", -1, Common::DE_DEU, Common::kPlatformMacintosh },
+	{ "f73883f13b5a302749a5bad31d909780", "tentacle", "CD", "CD", -1, Common::DE_DEU, Common::kPlatformMacintosh },
 	{ "f7711f9264d4d43c2a1518ec7c10a607", "pajama3", "", "", 79382, Common::EN_USA, Common::kPlatformUnknown },
 	{ "f79e60c17cca601e411f1f75e8ee9b5a", "spyfox2", "", "", 51286, Common::UNK_LANG, Common::kPlatformUnknown },
 	{ "f8be685007a8b425ba2a455da732f59f", "pajama2", "HE 99", "", -1, Common::FR_FRA, Common::kPlatformMacintosh },

Modified: scummvm/branches/gsoc2009-16bit/engines/tinsel/music.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/tinsel/music.cpp	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/engines/tinsel/music.cpp	2009-07-11 11:48:01 UTC (rev 42381)
@@ -207,6 +207,10 @@
 			if (track > 0) {
 				StopMidi();
 
+				// StopMidi resets these fields, so set them again
+				currentMidi = dwFileOffset;
+				currentLoop = bLoop;
+
 				// try to play track, but don't fall back to a true CD
 				AudioCD.play(track, bLoop ? -1 : 1, 0, 0, true);
 

Modified: scummvm/branches/gsoc2009-16bit/tools/scumm-md5.txt
===================================================================
--- scummvm/branches/gsoc2009-16bit/tools/scumm-md5.txt	2009-07-11 10:24:06 UTC (rev 42380)
+++ scummvm/branches/gsoc2009-16bit/tools/scumm-md5.txt	2009-07-11 11:48:01 UTC (rev 42381)
@@ -276,18 +276,18 @@
 	06b187468113f9ae5a400b148a847fac	12075	en	Mac	-	Floppy	six data files	Lars N sbye Christensen
 	d6dd0646404768a63e963891a96daadd	12035	en	Mac	-	Floppy	two data files	Fingolfin
 
-	182344899c2e2998fca0bebcd82aa81a	12035	en	DOS	-	CD	-	Fingolfin
-	1a6e5ae2777a6a33f06ffc0226210934	-1	en	Mac	-	CD	-	Scott Summers
-	2d9d46f23cb07bbc90b8ad464d3e4ff8	-1	en	Mac	-	CD	Mac bundle	Joachim Eberhard
-	8e9417564f33790815445b2136efa667	11915	jp	Mac	-	CD	-	Petr Maruska
+	182344899c2e2998fca0bebcd82aa81a	12035	en	DOS	CD	CD	-	Fingolfin
+	1a6e5ae2777a6a33f06ffc0226210934	-1	en	Mac	CD	CD	-	Scott Summers
+	2d9d46f23cb07bbc90b8ad464d3e4ff8	-1	en	Mac	CD	CD	Mac bundle	Joachim Eberhard
+	8e9417564f33790815445b2136efa667	11915	jp	Mac	CD	CD	-	Petr Maruska
 
-	c7be10f775404fd9785a8b92a06d240c	-1	en	FM-TOWNS	-	-	-	dhewg, Andrea Petrucci
-	4d34042713958b971cb139fba4658586	-1	jp	FM-TOWNS	-	-	-	Andrea Petrucci
+	c7be10f775404fd9785a8b92a06d240c	-1	en	FM-TOWNS	CD	-	-	dhewg, Andrea Petrucci
+	4d34042713958b971cb139fba4658586	-1	jp	FM-TOWNS	CD	-	-	Andrea Petrucci
 
 	035deab53b47bc43abc763560d0f8d4b	-1	en	DOS	-	Demo	-	
 	98744fe66ff730e8c2b3b1f58803ab0b	-1	en	DOS	-	Demo	-	Simon Krumrein, sev
-	99b6f822b0b2612415407865438697d6	-1	en	DOS	-	Demo	non-interactive	
-	28d24a33448fab6795850bc9f159a4a2	11170	jp	FM-TOWNS	-	Demo	non-interactive	khalek, Fingolfin
+	99b6f822b0b2612415407865438697d6	-1	en	DOS	CD	Demo	non-interactive	
+	28d24a33448fab6795850bc9f159a4a2	11170	jp	FM-TOWNS	CD	Demo	non-interactive	khalek, Fingolfin
 
 tentacle	Day of the Tentacle
 	acad97ab1c6fc2a5b2d98abf6db4a190	-1	en	All?	-	Floppy	Version A ?	
@@ -298,19 +298,19 @@
 	50fcdc982a25063b78ad46bf389b8e8d	-1	it	DOS	-	Floppy	-	Andrea Petrucci
 	ae94f110a14ce71fc515d5b648827a8f	-1	es	DOS	-	Floppy	-	abnog, Andrea Petrucci
 
-	4167a92a1d46baa4f4127d918d561f88	7932	en	All?	-	CD	-	Fingolfin
-	8aa05d3cdb0e795436043f0546af2da2	-1	fr	All?	-	CD?	-	Andrea Petrucci
-	6e959d65358eedf9b68b81e304b97fa4	7932	de	All?	-	CD	-	Fingolfin
-	4fbbe9f64b8bc547503a379a301183ce	-1	it	All?	-	CD	-	Andrea Petrucci
-	883af4b0af4f77a92f1dcf1d0a283140	-1	es	All?	-	CD	-	Andrea Petrucci
-	cc04a076779379524ed4d9c5ee3c6fb1	282467632	en	Mac	-	CD	Mac bundle	Fingolfin, Joachim Eberhard
-	ede149fda3edfc1dbd7347e0737cb583	-1	fr	Mac	-	CD	Mac bundle	ThierryFR
-	f73883f13b5a302749a5bad31d909780	-1	de	Mac	-	CD	Mac bundle	morrissey
+	4167a92a1d46baa4f4127d918d561f88	7932	en	All?	CD	CD	-	Fingolfin
+	8aa05d3cdb0e795436043f0546af2da2	-1	fr	All?	CD	CD?	-	Andrea Petrucci
+	6e959d65358eedf9b68b81e304b97fa4	7932	de	All?	CD	CD	-	Fingolfin
+	4fbbe9f64b8bc547503a379a301183ce	-1	it	All?	CD	CD	-	Andrea Petrucci
+	883af4b0af4f77a92f1dcf1d0a283140	-1	es	All?	CD	CD	-	Andrea Petrucci
+	cc04a076779379524ed4d9c5ee3c6fb1	282467632	en	Mac	CD	CD	Mac bundle	Fingolfin, Joachim Eberhard
+	ede149fda3edfc1dbd7347e0737cb583	-1	fr	Mac	CD	CD	Mac bundle	ThierryFR
+	f73883f13b5a302749a5bad31d909780	-1	de	Mac	CD	CD	Mac bundle	morrissey
 
-	c83079157ec765a28de445aec9768d60	7477	en	All	-	Demo	-	Fingolfin
-	17fa250eb72dae2dad511ba79c0b6b0a	-1	fr	DOS	-	Demo	-	cyx
-	ac1642b6edfb8521ca03760126f1c250	-1	de	DOS	-	Demo	-	Simon Krumrein, sev
-	2a41b53cf1a90b6e6f26c10cc6041084	2439158	en	Mac	-	Demo	Mac bundle	Fingolfin
+	c83079157ec765a28de445aec9768d60	7477	en	All	CD	Demo	-	Fingolfin
+	17fa250eb72dae2dad511ba79c0b6b0a	-1	fr	DOS	CD	Demo	-	cyx
+	ac1642b6edfb8521ca03760126f1c250	-1	de	DOS	CD	Demo	-	Simon Krumrein, sev
+	2a41b53cf1a90b6e6f26c10cc6041084	2439158	en	Mac	CD	Demo	Mac bundle	Fingolfin
 
 samnmax	Sam & Max Hit the Road
 	3b301b7892f883ce42ab4be6a274fea6	-1	en	DOS	-	Floppy	-	Andrea Petrucci
@@ -320,21 +320,21 @@
 	b289a2a8cbedbf45786e0b4ad2f510f1	-1	it	DOS	-	Floppy	-	Andrea Petrucci
 	fc53ce0e5f6562b1c1e1b4b8203acafb	-1	es	DOS	-	Floppy	-	Andrea Petrucci
 
-	d917f311a448e3cc7239c31bddb00dd2	9080	en	All?	-	CD	-	Fingolfin
-	7edd665bbede7ea8b7233f8e650be6f8	-1	fr	All?	-	CD	-	Andrea Petrucci
-	0fb73eddfcf584c02ba097984df131ba	9080	de	All?	-	CD	-	Fingolfin
-	0f6f2e716ba896a44e5059bba1de7ca9	-1	it	All?	-	CD	-	Andrea Petrucci
-	4ba7fb331296c283e73d8f5b2096e551	-1	es	All?	-	CD	-	Andrea Petrucci
-	d43352a805d78b5f4936c6d7779bf575	-1	ru	DOS	-	CD	-	
-	166553538ff320c69edafeee29525419	-1	en	Mac	-	CD	Mac bundle	Joachim Eberhard
-	3a5d13675e9a23aedac0bac7730f0ac1	-1	fr	Mac	-	CD	Mac bundle	ThierryFR
+	d917f311a448e3cc7239c31bddb00dd2	9080	en	All?	CD	CD	-	Fingolfin
+	7edd665bbede7ea8b7233f8e650be6f8	-1	fr	All?	CD	CD	-	Andrea Petrucci
+	0fb73eddfcf584c02ba097984df131ba	9080	de	All?	CD	CD	-	Fingolfin
+	0f6f2e716ba896a44e5059bba1de7ca9	-1	it	All?	CD	CD	-	Andrea Petrucci
+	4ba7fb331296c283e73d8f5b2096e551	-1	es	All?	CD	CD	-	Andrea Petrucci
+	d43352a805d78b5f4936c6d7779bf575	-1	ru	DOS	CD	CD	-	
+	166553538ff320c69edafeee29525419	-1	en	Mac	CD	CD	Mac bundle	Joachim Eberhard
+	3a5d13675e9a23aedac0bac7730f0ac1	-1	fr	Mac	CD	CD	Mac bundle	ThierryFR
 
 	c3196c5349e53e387aaff1533d95e53a	-1	en	DOS	-	Demo	-	
 	0e4c5d54a0ad4b26132e78b5ea76642a	6485	en	DOS	-	Demo	WIP	Fingolfin
-	d9d0dd93d16ab4dec55cabc2b86bbd17	6478	en	DOS	-	Demo	non-interactive	Fingolfin
+	d9d0dd93d16ab4dec55cabc2b86bbd17	6478	en	DOS	CD	Demo	non-interactive	Fingolfin
 	cc8ba2b0df2f9c450bcf055fe2711979	7485	de	DOS	-	Demo	-	Simon Krumrein, sev, Fingolfin
-	0425954a9db5c340861672892c3e678d	-1	en	All	-	Demo	-	Kirben
-	6dead580b0ff14d5f7b33b4219f04159	16556335	en	Mac	-	Demo	Mac bundle	Fingolfin
+	0425954a9db5c340861672892c3e678d	-1	en	All	CD	Demo	-	Kirben
+	6dead580b0ff14d5f7b33b4219f04159	16556335	en	Mac	CD	Demo	Mac bundle	Fingolfin
 
 ft	Full Throttle
 	41958e24d03181ff9a381a66d048a581	-1	br	All?	-	-	-	Danilo E.S.


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