diff options
90 files changed, 1932 insertions, 960 deletions
| diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index 2efaec32f2..df85241da5 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -162,6 +162,12 @@ bool DefaultEventManager::pollEvent(Common::Event &event) {  				}  			}  #endif +			else if (event.kbd.keycode == Common::KEYCODE_BACKSPACE) { +				// WORKAROUND: On Mac OS X, the ascii value for backspace +				// has to be set to the backspace keycode in order to work +				// properly. +				event.kbd.ascii = Common::KEYCODE_BACKSPACE; +			}  			break;  		case Common::EVENT_KEYUP: diff --git a/backends/fs/psp/psp-fs-factory.cpp b/backends/fs/psp/psp-fs-factory.cpp index cfe8ed27d1..27bee4de86 100644 --- a/backends/fs/psp/psp-fs-factory.cpp +++ b/backends/fs/psp/psp-fs-factory.cpp @@ -33,7 +33,8 @@ AbstractFSNode *PSPFilesystemFactory::makeRootFileNode() const {  }  AbstractFSNode *PSPFilesystemFactory::makeCurrentDirectoryFileNode() const { -	return new PSPFilesystemNode(); +	char buf[MAXPATHLEN]; +	return getcwd(buf, MAXPATHLEN) ? new PSPFilesystemNode(buf) : NULL;  }  AbstractFSNode *PSPFilesystemFactory::makeFileNodePath(const Common::String &path) const { diff --git a/backends/fs/psp/psp-fs.cpp b/backends/fs/psp/psp-fs.cpp index 9936d37f77..f5ff65c9fa 100644 --- a/backends/fs/psp/psp-fs.cpp +++ b/backends/fs/psp/psp-fs.cpp @@ -59,7 +59,7 @@ public:  	 * @param path Common::String with the path the new node should point to.  	 * @param verify true if the isValid and isDirectory flags should be verified during the construction.  	 */ -	PSPFilesystemNode(const Common::String &p, bool verify); +	PSPFilesystemNode(const Common::String &p, bool verify = true);  	virtual bool exists() const { return access(_path.c_str(), F_OK) == 0; }  	virtual Common::String getDisplayName() const { return _displayName; } diff --git a/backends/platform/psp/psp.mk b/backends/platform/psp/psp.mk index ff81a567d6..10e272a593 100644 --- a/backends/platform/psp/psp.mk +++ b/backends/platform/psp/psp.mk @@ -1,6 +1,38 @@ -all: psp_fixup_elf +all: pack_pbp +clean: psp_clean -psp_fixup_elf: scummvm.elf  + +PSP_EXE := scummvm$(EXEEXT) +PSP_EXE_STRIPPED := scummvm_stripped$(EXEEXT) +PSP_EBOOT = EBOOT.PBP +PSP_EBOOT_SFO = param.sfo +PSP_EBOOT_TITLE = ScummVM-PSP +DATE = $(shell date +%Y%m%d) + +MKSFO = mksfo +PACK_PBP = pack-pbp + +$(PSP_EXE_STRIPPED): $(PSP_EXE) +	$(STRIP) $< -o $@ + +$(PSP_EBOOT_SFO): $(PSP_EXE) +	$(MKSFO) '$(PSP_EBOOT_TITLE) r$(VER_SVNREV) ($(DATE))' $@ + +psp_clean: +	$(RM) $(PSP_EXE_STRIPPED) $(PSP_EBOOT) $(PSP_EBOOT_SFO) + +psp_fixup_elf: $(PSP_EXE_STRIPPED)  	$(PSPDEV)/bin/psp-fixup-imports $< -.PHONY: psp_fixup_elf +pack_pbp: psp_fixup_elf $(PSP_EBOOT_SFO) +	$(PACK_PBP) $(PSP_EBOOT) \ +	$(PSP_EBOOT_SFO) \ +	$(srcdir)/backends/platform/psp/icon0.png \ +	NULL \ +	$(srcdir)/backends/platform/psp/pic0.png \ +	$(srcdir)/backends/platform/psp/pic1.png \ +	NULL \ +	$(PSP_EXE_STRIPPED) \ +	NULL + +.PHONY: psp_fixup_elf pack_pbp diff --git a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg index fe82cb7b4e..19b4d67961 100644 --- a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg +++ b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg @@ -34,7 +34,7 @@  :"ScummVM"  ; UID is the app's UID -#{"ScummVM S60v3"},(0xA0000657),0,14,0 +#{"ScummVM S60v3"},(0xA0000657),1,0,0  ;Supports Series 60 v 3.0  [0x101F7961], 0, 0, 0, {"Series60ProductID"} diff --git a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg index 5a8d317fbc..a500e92529 100644 --- a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg +++ b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg @@ -32,7 +32,7 @@  :"ScummVM"  ; UID is the app's UID -#{"ScummVM UIQ3"},(0xA0000657),0,14,0 +#{"ScummVM UIQ3"},(0xA0000657),1,0,0  ; ProductID for UIQ 3.0  ; Product/platform version UID, Major, Minor, Build, Product ID diff --git a/backends/platform/symbian/src/SymbianActions.cpp b/backends/platform/symbian/src/SymbianActions.cpp index 5f5551422e..58ede5988f 100644 --- a/backends/platform/symbian/src/SymbianActions.cpp +++ b/backends/platform/symbian/src/SymbianActions.cpp @@ -104,6 +104,8 @@ SymbianActions::SymbianActions()  void SymbianActions::initInstanceMain(OSystem *mainSystem) {  	int i; +	// Need to do this since all old mappings are reset after engineDone +	_initialized = false;  	Actions::initInstanceMain(mainSystem);  	// Disable all mappings before setting main mappings again diff --git a/backends/platform/symbian/src/portdefs.h b/backends/platform/symbian/src/portdefs.h index 3c2286d154..9059ae9e49 100644 --- a/backends/platform/symbian/src/portdefs.h +++ b/backends/platform/symbian/src/portdefs.h @@ -127,7 +127,9 @@  #define USE_ARM_COSTUME_ASM  #define USE_ARM_SOUND_ASM  #endif -#define ENABLE_KEYMAPPER +// This is not really functioning yet.  +// Default SDL keys should map to standard keys I think! +//#define ENABLE_KEYMAPPER    // Symbian bsearch implementation is flawed  void *scumm_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); diff --git a/backends/platform/wii/gx_supp.cpp b/backends/platform/wii/gx_supp.cpp index 34cd31fd13..f33adae566 100644 --- a/backends/platform/wii/gx_supp.cpp +++ b/backends/platform/wii/gx_supp.cpp @@ -57,9 +57,9 @@ static float tex_xT = 0.0f, tex_yT = 0.0f;  /* New texture based scaler */  typedef struct tagcamera { -	Vector pos; -	Vector up; -	Vector view; +	guVector pos; +	guVector up; +	guVector view;  } camera;  static s16 square[] ATTRIBUTE_ALIGN(32) = { diff --git a/common/hashmap.h b/common/hashmap.h index f5059a4bcf..2a50bff07a 100644 --- a/common/hashmap.h +++ b/common/hashmap.h @@ -39,6 +39,13 @@  #endif  namespace Common { +/** +  * The sgi IRIX MIPSpro Compiler has difficulties with nested templates.  +  * This and the other __sgi conditionals below work around these problems. +  */ +#ifdef __sgi +template<class T> class IteratorImpl; +#endif  // Enable the following #define if you want to check how many collisions the  // code produces (many collisions indicate either a bad hash function, or a @@ -125,7 +132,9 @@ public:  	int lookupAndCreateIfMissing(const Key &key);  	void expandStorage(uint newCapacity); +#ifndef __sgi  	template<class T> friend class IteratorImpl; +#endif  	/**  	 * Simple HashMap iterator implementation. @@ -133,7 +142,11 @@ public:  	template<class NodeType>  	class IteratorImpl {  		friend class HashMap; +#ifdef __sgi +		template<class T> friend class Common::IteratorImpl; +#else  		template<class T> friend class IteratorImpl; +#endif  	protected:  		typedef const HashMap hashmap_t; @@ -1431,6 +1431,7 @@ if test -n "$_host"; then  			type_4_byte='int'  			_ar="$_host_alias-ar cru"  			_ranlib=$_host_alias-ranlib +			_strip=$_host_alias-strip  			_backend="psp"  			_build_scalers="no"  			_build_hq_scalers="no" diff --git a/dists/engine-data/kyra.dat b/dists/engine-data/kyra.datBinary files differ index da57e2ce2a..eb3ff24c2a 100644 --- a/dists/engine-data/kyra.dat +++ b/dists/engine-data/kyra.dat diff --git a/dists/msvc8/gob.vcproj b/dists/msvc8/gob.vcproj index c691aae742..85f5e4bb86 100644 --- a/dists/msvc8/gob.vcproj +++ b/dists/msvc8/gob.vcproj @@ -103,6 +103,7 @@  		<File RelativePath="..\..\engines\gob\inter.h" />  		<File RelativePath="..\..\engines\gob\inter_bargon.cpp" />  		<File RelativePath="..\..\engines\gob\inter_fascin.cpp" /> +		<File RelativePath="..\..\engines\gob\inter_playtoons.cpp" />  		<File RelativePath="..\..\engines\gob\inter_v1.cpp" />  		<File RelativePath="..\..\engines\gob\inter_v2.cpp" />  		<File RelativePath="..\..\engines\gob\inter_v3.cpp" /> diff --git a/dists/msvc9/gob.vcproj b/dists/msvc9/gob.vcproj index 984c153e35..70932ee04d 100644 --- a/dists/msvc9/gob.vcproj +++ b/dists/msvc9/gob.vcproj @@ -104,6 +104,7 @@  		<File RelativePath="..\..\engines\gob\inter.h" />  		<File RelativePath="..\..\engines\gob\inter_bargon.cpp" />  		<File RelativePath="..\..\engines\gob\inter_fascin.cpp" /> +		<File RelativePath="..\..\engines\gob\inter_playtoons.cpp" />  		<File RelativePath="..\..\engines\gob\inter_v1.cpp" />  		<File RelativePath="..\..\engines\gob\inter_v2.cpp" />  		<File RelativePath="..\..\engines\gob\inter_v3.cpp" /> diff --git a/engines/agi/detection.cpp b/engines/agi/detection.cpp index 553e42f88e..8760adb19e 100644 --- a/engines/agi/detection.cpp +++ b/engines/agi/detection.cpp @@ -364,7 +364,10 @@ static const AGIGameDescription gameDescriptions[] = {  	GAME_P("kq3", "2.0A 1988-08-28 (CE)", "ac30b7ca5a089b5e642fbcdcbe872c12", 0x2917, GID_KQ3, Common::kPlatformApple2GS),  	// King's Quest 3 (Amiga) 2.15 11/15/89	# 2.333 -	GAME3_PS("kq3", "2.15 1989-11-15", "dirs", "8e35bded2bc5cf20f5eec2b15523b155", 1805, 0x3086, 0, GID_KQ3, Common::kPlatformAmiga), +	// Original pauses with ESC, has menus accessible with mouse. +	// ver = 0x3086 -> menus accessible with ESC or mouse, bug #2835581 (KQ3: Game Crash When Leaving Tavern as Fly). +	// ver = 0x3149 -> menus accessible with mouse, ESC pauses game, bug #2835581 disappears. +	GAME3_PS("kq3", "2.15 1989-11-15", "dirs", "8e35bded2bc5cf20f5eec2b15523b155", 1805, 0x3149, 0, GID_KQ3, Common::kPlatformAmiga),  	// King's Quest 3 (PC) 1.01 11/08/86 [AGI 2.272]  	// Does not have menus, crashes if menus are enforced. Therefore, ESC pauses the game diff --git a/engines/agos/animation.cpp b/engines/agos/animation.cpp index dd52f42abc..efcd78e482 100644 --- a/engines/agos/animation.cpp +++ b/engines/agos/animation.cpp @@ -265,6 +265,13 @@ bool MoviePlayerDXA::load() {  }  void MoviePlayerDXA::playVideo() { +	// Most of the videos included in the Amiga version, reduced the +	// resoluton to 384 x 280, so require the screen to be cleared,  +	// before starting playing those videos. +	if (getWidth() == 384 && getHeight() == 280) { +		_vm->clearSurfaces(); +	} +  	while (getCurFrame() < getFrameCount() && !_skipMovie && !_vm->shouldQuit())  		handleNextFrame();  } diff --git a/engines/agos/event.cpp b/engines/agos/event.cpp index 2ba5d56243..5ef65e7b42 100644 --- a/engines/agos/event.cpp +++ b/engines/agos/event.cpp @@ -498,7 +498,6 @@ void AGOSEngine::delay(uint amount) {  						_variableArray[41] = 1;  				} -				// Make sure backspace works right (this fixes a small issue on OS X)  				_keyPressed = event.kbd;  				break;  			case Common::EVENT_MOUSEMOVE: diff --git a/engines/agos/script.cpp b/engines/agos/script.cpp index 2d9f2c91ab..9c93288e0e 100644 --- a/engines/agos/script.cpp +++ b/engines/agos/script.cpp @@ -110,7 +110,8 @@ void AGOSEngine::o_eq() {  #ifdef __DS__  	// HACK: Skip attempt to read Calypso's letter manually,  	// due to speech segment been too large to fit into memory -	if (getGameType() == GType_SIMON1 && (getFeatures() & GF_TALKIE) && _currentTable) { +	if (getGameType() == GType_SIMON1 && (getFeatures() & GF_TALKIE) && +		getPlatform() == Common::kPlatformWindows && _currentTable) {  		if (_currentTable->id == 71 && tmp == 1 && tmp2 == 1) {  			setScriptCondition(false);  			return; @@ -444,7 +445,8 @@ void AGOSEngine::o_process() {  #ifdef __DS__  		// HACK: Skip scene of Simon reading letter from Calypso  		// due to speech segment been too large to fit into memory -		if (getGameType() == GType_SIMON1 && (getFeatures() & GF_TALKIE) && sub->id == 2922) { +		if (getGameType() == GType_SIMON1 && (getFeatures() & GF_TALKIE) && +			getPlatform() == Common::kPlatformWindows && sub->id == 2922) {  			// set parent special  			_noParentNotify = true;  			setItemParent(derefItem(16), me()); diff --git a/engines/agos/sound.cpp b/engines/agos/sound.cpp index d20c07a8c8..3008442ed2 100644 --- a/engines/agos/sound.cpp +++ b/engines/agos/sound.cpp @@ -133,8 +133,10 @@ public:  };  class VocSound : public BaseSound { +	byte _flags;  public: -	VocSound(Audio::Mixer *mixer, File *file, uint32 base = 0, bool bigEndian = false) : BaseSound(mixer, file, base, bigEndian) {} +	VocSound(Audio::Mixer *mixer, File *file, uint32 base = 0, bool bigEndian = false) : BaseSound(mixer, file, base, bigEndian), _flags(0) {} +	Audio::AudioStream *makeAudioStream(uint sound);  	void playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol = 0);  }; @@ -255,14 +257,15 @@ void WavSound::playSound(uint sound, uint loopSound, Audio::Mixer::SoundType typ  	_mixer->playInputStream(type, handle, new LoopingAudioStream(this, sound, loopSound, (flags & Audio::Mixer::FLAG_LOOP) != 0), -1, vol);  } -void VocSound::playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol) { -	if (_offsets == NULL) -		return; - +Audio::AudioStream *VocSound::makeAudioStream(uint sound) {  	_file->seek(_offsets[sound], SEEK_SET); +	return Audio::makeVOCStream(*_file, _flags); +} -	Audio::AudioStream *stream = Audio::makeVOCStream(*_file, flags); -	_mixer->playInputStream(type, handle, stream); +void VocSound::playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol) { +	convertVolume(vol); +	_flags = flags; +	_mixer->playInputStream(type, handle, new LoopingAudioStream(this, sound, loopSound, (flags & Audio::Mixer::FLAG_LOOP) != 0), -1, vol);  }  void RawSound::playSound(uint sound, uint loopSound, Audio::Mixer::SoundType type, Audio::SoundHandle *handle, byte flags, int vol) { @@ -630,7 +633,8 @@ void Sound::playEffects(uint sound) {  	if (_effectsPaused)  		return; -	_mixer->stopHandle(_effectsHandle); +	if (_vm->getGameType() == GType_SIMON1) +		_mixer->stopHandle(_effectsHandle);  	_effects->playSound(sound, Audio::Mixer::kSFXSoundType, &_effectsHandle, (_vm->getGameId() == GID_SIMON1CD32) ? 0 : Audio::Mixer::FLAG_UNSIGNED);  } diff --git a/engines/agos/vga.cpp b/engines/agos/vga.cpp index 1344be6b3a..35e87060a9 100644 --- a/engines/agos/vga.cpp +++ b/engines/agos/vga.cpp @@ -1197,7 +1197,7 @@ void AGOSEngine::vc32_saveScreen() {  		uint16 height = _videoWindows[4 * 4 + 3];  		byte *dst = (byte *)_backGroundBuf->getBasePtr(xoffs, yoffs); -		byte *src = (byte *)_window4BackScn->pixels;; +		byte *src = (byte *)_window4BackScn->pixels;  		uint16 srcWidth = _videoWindows[4 * 4 + 2] * 16;  		for (; height > 0; height--) {  			memcpy(dst, src, width); diff --git a/engines/cruise/background.cpp b/engines/cruise/background.cpp index 6635a8d621..587c790554 100644 --- a/engines/cruise/background.cpp +++ b/engines/cruise/background.cpp @@ -30,6 +30,7 @@ namespace Cruise {  uint8 colorMode = 0;  uint8 *backgroundScreens[8] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };	// wasn't initialized in original, but it's probably better +bool backgroundChanged[8] = { false, false, false, false, false, false, false, false };  backgroundTableStruct backgroundTable[8];  char hwPage[64000]; @@ -101,6 +102,8 @@ int loadBackground(const char *name, int idx) {  		return (-2);  	} +	backgroundChanged[idx] = true; +  	ptrToFree = gfxModuleData.pPage10;  	if (loadFileSub1(&ptrToFree, name, NULL) < 0) {  		if (ptrToFree != gfxModuleData.pPage10) diff --git a/engines/cruise/background.h b/engines/cruise/background.h index 711e89a34a..6f9b89d3f0 100644 --- a/engines/cruise/background.h +++ b/engines/cruise/background.h @@ -36,6 +36,7 @@ struct backgroundTableStruct {  extern short int cvtPalette[0x20];  extern int CVTLoaded;  extern uint8 *backgroundScreens[8]; +extern bool backgroundChanged[8];  extern backgroundTableStruct backgroundTable[8];  int loadBackground(const char *name, int idx); diff --git a/engines/cruise/backgroundIncrust.cpp b/engines/cruise/backgroundIncrust.cpp index 03ed552018..78cf49c653 100644 --- a/engines/cruise/backgroundIncrust.cpp +++ b/engines/cruise/backgroundIncrust.cpp @@ -71,6 +71,8 @@ void restoreBackground(backgroundIncrustStruct *pIncrust) {  	if (pBackground == NULL)  		return; +	backgroundChanged[pIncrust->backgroundIdx] = true; +  	int X = pIncrust->savedX;  	int Y = pIncrust->savedY;  	int width = pIncrust->saveWidth; @@ -108,6 +110,8 @@ backgroundIncrustStruct *addBackgroundIncrust(int16 overlayIdx,	int16 objectIdx,  	backgroundPtr = backgroundScreens[backgroundIdx]; +	backgroundChanged[backgroundIdx] = true; +  	assert(backgroundPtr != NULL);  	currentHead = pHead; @@ -218,6 +222,8 @@ void regenerateBackgroundIncrust(backgroundIncrustStruct *pHead) {  				// Poly  				addBackgroundIncrustSub1(frame, pl->X, pl->Y, NULL, pl->scale, (char*)backgroundScreens[pl->backgroundIdx], (char *)filesDatabase[frame].subData.ptr);  			} + +			backgroundChanged[pl->backgroundIdx] = true;  		}  		pl = pl2; diff --git a/engines/cruise/cell.cpp b/engines/cruise/cell.cpp index 7966d5ea12..aeafed4f7a 100644 --- a/engines/cruise/cell.cpp +++ b/engines/cruise/cell.cpp @@ -176,6 +176,11 @@ void createTextObject(cellStruct *pObject, int overlayIdx, int messageIdx, int x  	if (ax) {  		pNewElement->gfxPtr = renderText(width, ax);  	} + +	// WORKAROUND: This is needed for the new dirty rect handling so as to properly refresh the screen +	// when the copy protection screen is being shown +	if ((messageIdx == 0) && !strcmp(overlayTable[overlayIdx].overlayName, "XX2")) +		backgroundChanged[0] = true;  }  void removeCell(cellStruct *objPtr, int ovlNumber, int objectIdx, int objType, int backgroundPlane) { diff --git a/engines/cruise/detection.cpp b/engines/cruise/detection.cpp index 879fad0210..1045ed3b0b 100644 --- a/engines/cruise/detection.cpp +++ b/engines/cruise/detection.cpp @@ -26,7 +26,7 @@  #include "base/plugins.h" - +#include "common/savefile.h"  #include "engines/advancedDetector.h"  #include "cruise/cruise.h" @@ -70,6 +70,19 @@ static const CRUISEGameDescription gameDescriptions[] = {  	{  		{  			"cruise", +			"16 colours", +			AD_ENTRY1("D1", "cd29a4cd9162076e9a18495fe56a48f3"), +			Common::EN_GRB, +			Common::kPlatformPC, +			ADGF_NO_FLAGS, +			GUIO_NONE +		}, +		GType_CRUISE, +		0, +	}, +	{ +		{ +			"cruise",  			"16 colors",  			AD_ENTRY1("D1", "41a7a4d426dbd048eb369cfee4bb2717"),  			Common::FR_FRA, diff --git a/engines/cruise/function.cpp b/engines/cruise/function.cpp index 6fe82f76d4..53549bff9e 100644 --- a/engines/cruise/function.cpp +++ b/engines/cruise/function.cpp @@ -510,6 +510,8 @@ int16 Op_LoadBackground(void) {  		gfxModuleData_gfxWaitVSync();  		result = loadBackground(bgName, bgIdx); + +		gfxModuleData_addDirtyRect(Common::Rect(0, 0, 320, 200));  	}  	changeCursor(CURSOR_NORMAL); @@ -788,6 +790,7 @@ int16 Op_ClearScreen(void) {  	if ((bgIdx >= 0) && (bgIdx < NBSCREENS) && (backgroundScreens[bgIdx])) {  		memset(backgroundScreens[bgIdx], 0, 320 * 200); +		backgroundChanged[bgIdx] = true;  		strcpy(backgroundTable[0].name, "");  	} @@ -922,6 +925,7 @@ int16 Op_SetActiveBackground(void) {  	if (newPlane >= 0 && newPlane < NBSCREENS) {  		if (backgroundScreens[newPlane]) {  			masterScreen = newPlane; +			backgroundChanged[newPlane] = true;  			switchPal = 1;  		}  	} @@ -936,8 +940,10 @@ int16 Op_RemoveBackground(void) {  		if (backgroundScreens[backgroundIdx])  			free(backgroundScreens[backgroundIdx]); -		if (masterScreen == backgroundIdx) +		if (masterScreen == backgroundIdx) {  			masterScreen = 0; +			backgroundChanged[0] = true; +		}  		strcpy(backgroundTable[backgroundIdx].name, "");  	} else { diff --git a/engines/cruise/gfxModule.cpp b/engines/cruise/gfxModule.cpp index 003a335e42..b3ac68edae 100644 --- a/engines/cruise/gfxModule.cpp +++ b/engines/cruise/gfxModule.cpp @@ -26,6 +26,8 @@  #include "common/system.h"  #include "common/endian.h" +#include "common/list.h" +#include "common/rect.h"  #include "cruise/cruise.h"  #include "cruise/cruise_main.h" @@ -41,6 +43,12 @@ palEntry lpalette[256];  int palDirtyMin = 256;  int palDirtyMax = -1; +typedef Common::List<Common::Rect> RectList; +RectList _dirtyRects; +RectList _priorFrameRects; + +bool _dirtyRectScreen = false; +  gfxModuleDataStruct gfxModuleData = {  	0,			// use Tandy  	0,			// use EGA @@ -229,7 +237,47 @@ void gfxModuleData_flipScreen(void) {  	flip();  } +void gfxModuleData_addDirtyRect(const Common::Rect &r) { +	_dirtyRects.push_back(Common::Rect(	MAX(r.left, (int16)0), MAX(r.top, (int16)0),  +		MIN(r.right, (int16)320), MIN(r.bottom, (int16)200))); +} + +/** + * Creates the union of two rectangles. + */ +static bool unionRectangle(Common::Rect &pDest, const Common::Rect &pSrc1, const Common::Rect &pSrc2) { +	pDest.left   = MIN(pSrc1.left, pSrc2.left); +	pDest.top    = MIN(pSrc1.top, pSrc2.top); +	pDest.right  = MAX(pSrc1.right, pSrc2.right); +	pDest.bottom = MAX(pSrc1.bottom, pSrc2.bottom); + +	return !pDest.isEmpty(); +} + +static void mergeClipRects() { +	RectList::iterator rOuter, rInner; + +	for (rOuter = _dirtyRects.begin(); rOuter != _dirtyRects.end(); ++rOuter) { +		rInner = rOuter; +		while (++rInner != _dirtyRects.end()) { + +			if ((*rOuter).intersects(*rInner)) { +				// these two rectangles overlap, so translate it to a bigger rectangle +				// that contains both of them +				unionRectangle(*rOuter, *rOuter, *rInner); + +				// remove the inner rect from the list +				_dirtyRects.erase(rInner); + +				// move back to beginning of list +				rInner = rOuter; +			} +		} +	} +} +  void flip() { +	RectList::iterator dr;  	int i;  	byte paletteRGBA[256 * 4]; @@ -245,7 +293,29 @@ void flip() {  		palDirtyMax = -1;  	} -	g_system->copyRectToScreen(globalScreen, 320, 0, 0, 320, 200); +	// Make a copy of the prior frame's dirty rects, and then backup the current frame's rects +	RectList tempList = _priorFrameRects; +	_priorFrameRects = _dirtyRects; + +	// Merge the prior frame's dirty rects into the current frame's list +	for (dr = tempList.begin(); dr != tempList.end(); ++dr) { +		Common::Rect &r = *dr; +		_dirtyRects.push_back(Common::Rect(r.left, r.top, r.right, r.bottom)); +	} + +	// Merge any overlapping rects to simplify the drawing process +	mergeClipRects(); + +	// Copy any modified areas +	for (dr = _dirtyRects.begin(); dr != _dirtyRects.end(); ++dr) { +		Common::Rect &r = *dr; +		g_system->copyRectToScreen(globalScreen + 320 * r.top + r.left, 320,  +			r.left, r.top, r.width(), r.height()); +	} + +	_dirtyRects.clear(); + +	// Allow the screen to update  	g_system->updateScreen();  } diff --git a/engines/cruise/gfxModule.h b/engines/cruise/gfxModule.h index dc085d8b0d..308b96ab64 100644 --- a/engines/cruise/gfxModule.h +++ b/engines/cruise/gfxModule.h @@ -62,6 +62,7 @@ void gfxModuleData_flipScreen(void);  void gfxModuleData_convertOldPalColor(uint16 oldColor, uint8 *pOutput);  void gfxModuleData_setPalEntries(const byte *ptr, int start, int num);  void gfxModuleData_setPal256(const byte *ptr); +void gfxModuleData_addDirtyRect(const Common::Rect &r);  void flip(void);  void drawSolidBox(int32 x1, int32 y1, int32 x2, int32 y2, uint8 colour);  void resetBitmap(uint8 *dataPtr, int32 dataSize); diff --git a/engines/cruise/mainDraw.cpp b/engines/cruise/mainDraw.cpp index 047f00ee90..61e8f8d85c 100644 --- a/engines/cruise/mainDraw.cpp +++ b/engines/cruise/mainDraw.cpp @@ -1121,6 +1121,8 @@ void mainDrawPolygons(int fileIndex, cellStruct *plWork, int X, int scale, int Y  	if (spriteY1 == spriteY2)  		return; +	gfxModuleData_addDirtyRect(Common::Rect(spriteX2, spriteY2, spriteX1, spriteY1)); +  	var_8 = 0;  	memset(polygonMask, 0xFF, (320*200) / 8); @@ -1177,6 +1179,8 @@ void drawMessage(const gfxEntryStruct *pGfxPtr, int globalX, int globalY, int wi  			globalY = 198 - pGfxPtr->height;  		} +		gfxModuleData_addDirtyRect(Common::Rect(globalX, globalY, globalX + width, globalY + height)); +  		initialOuput = ouputPtr + (globalY * 320) + globalX;  		for (yp = 0; yp < height; yp++) { @@ -1206,6 +1210,9 @@ void drawSprite(int width, int height, cellStruct *currentObjPtr, const uint8 *d  	int x = 0;  	int y = 0; +	// Flag the given area as having been changed +	gfxModuleData_addDirtyRect(Common::Rect(xs, ys, xs + width - 1, ys + height - 1)); +  	cellStruct* plWork = currentObjPtr;  	int workBufferSize = height * (width / 8); @@ -1406,6 +1413,10 @@ void mainDraw(int16 param) {  	if (bgPtr) {  		gfxModuleData_gfxCopyScreen(bgPtr, gfxModuleData.pPage10); +		if (backgroundChanged[masterScreen]) { +			backgroundChanged[masterScreen] = false; +			gfxModuleData_addDirtyRect(Common::Rect(0, 0, 320, 200)); +		}  	}  	autoCellHead.next = NULL; diff --git a/engines/cruise/staticres.cpp b/engines/cruise/staticres.cpp index fa77555314..1ffdc5628a 100644 --- a/engines/cruise/staticres.cpp +++ b/engines/cruise/staticres.cpp @@ -29,28 +29,28 @@  namespace Cruise { -int actor_move[][13] = { +const int actor_move[][13] = {  	{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0},						// back  	{13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0},			// right side  	{25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 0},			// front  	{ -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, 0}// left side  }; -int actor_end[][13] = { +const int actor_end[][13] = {  	{37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},	// stat back  	{38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},	// stat right-side  	{39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},	// stat front  	{ -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}	// stat left-side  }; -int actor_stat[][13] = { +const int actor_stat[][13] = {  	{53, 54, 55, 56, 57, 0, 0, 0, 0, 0, 0, 0, 0},  	{59, 60, 62, 63, 78, 0, 0, 0, 0, 0, 0, 0, 0},  	{ -78, -63, -62, -60, -59, 0, 0, 0, 0, 0, 0, 0, 0},  	{ -57, -56, -55, -54, -53, 0, 0, 0, 0, 0, 0, 0, 0}  }; -int actor_invstat[][13] = { +const int actor_invstat[][13] = {  	{ -53, -54, -55, -56, -57, 0, 0, 0, 0, 0, 0, 0, 0},  	{57, 56, 55, 54, 53, 0, 0, 0, 0, 0, 0, 0, 0},  	{78, 63, 62, 60, 59, 0, 0, 0, 0, 0, 0, 0, 0}, @@ -59,7 +59,7 @@ int actor_invstat[][13] = {  // font character lookup tables -int16 english_fontCharacterTable[256] = { +const int16 english_fontCharacterTable[256] = {  	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  	-1, @@ -122,7 +122,7 @@ int16 english_fontCharacterTable[256] = {  	-1,  }; -int16 german_fontCharacterTable[256] = { +const int16 german_fontCharacterTable[256] = {  	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  	-1, @@ -168,7 +168,7 @@ int16 german_fontCharacterTable[256] = {  	-1, -1, -1, -1  }; -int16 spanish_fontCharacterTable[256] = { +const int16 spanish_fontCharacterTable[256] = {  	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  	-1, diff --git a/engines/cruise/staticres.h b/engines/cruise/staticres.h index 964bf294dc..f17e435acd 100644 --- a/engines/cruise/staticres.h +++ b/engines/cruise/staticres.h @@ -31,17 +31,17 @@  namespace Cruise { -extern int actor_move[][13]; +extern const int actor_move[][13]; -extern int actor_end[][13]; +extern const int actor_end[][13]; -extern int actor_stat[][13]; +extern const int actor_stat[][13]; -extern int actor_invstat[][13]; +extern const int actor_invstat[][13]; -extern short int english_fontCharacterTable[256]; -extern short int german_fontCharacterTable[256]; -extern short int spanish_fontCharacterTable[256]; +extern const int16 english_fontCharacterTable[256]; +extern const int16 german_fontCharacterTable[256]; +extern const int16 spanish_fontCharacterTable[256];  #define fontCharacterTable (_vm->getLanguage() == Common::DE_DEU ? \  	german_fontCharacterTable : (_vm->getLanguage() == Common::ES_ESP ? \ diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp index 082345e675..a348fbdb08 100644 --- a/engines/gob/gob.cpp +++ b/engines/gob/gob.cpp @@ -460,14 +460,14 @@ bool GobEngine::initGameParts() {  	case kGameTypePlaytnCk:  	case kGameTypeBambou:  		_init     = new Init_v2(this); -		_video    = new Video_v2(this); -		_inter    = new Inter_v6(this); +		_video    = new Video_v6(this); +		_inter    = new Inter_Playtoons(this);  		_mult     = new Mult_v2(this);  		_draw     = new Draw_v2(this);  		_map      = new Map_v2(this); -		_goblin   = new Goblin_v2(this); +		_goblin   = new Goblin_v4(this);  		_scenery  = new Scenery_v2(this); -		_saveLoad = new SaveLoad_Playtoons(this); +		_saveLoad = new SaveLoad_Playtoons(this, _targetName.c_str());  		break;  	default: diff --git a/engines/gob/inter.h b/engines/gob/inter.h index a31860885f..c3d3a26f47 100644 --- a/engines/gob/inter.h +++ b/engines/gob/inter.h @@ -547,6 +547,21 @@ protected:  	void probe16bitMusic(char *fileName);  }; +class Inter_Playtoons : public Inter_v6 { +public: +	Inter_Playtoons(GobEngine *vm); +	virtual ~Inter_Playtoons() {} + +protected: +	virtual void setupOpcodesDraw(); +	virtual void setupOpcodesFunc(); +	virtual void setupOpcodesGob(); + +	bool oPlaytoons_checkData(OpFuncParams ¶ms); +	void oPlaytoons_CD_20_23(); +	void oPlaytoons_CD_25(); +}; +  } // End of namespace Gob  #endif // GOB_INTER_H diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index b4e5bf7623..da9e55685c 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -1305,12 +1305,6 @@ bool Inter_v2::o2_checkData(OpFuncParams ¶ms) {  	char *file = _vm->_game->_script->getResultStr(); -	// WORKAROUND: In some games (at least all the Playtoons), some files are  -	// read on CD (and only on CD). "@:\" is replaced by the CD drive letter. -	// As the files are copied on the HDD, those characters are skipped.  -	if (strncmp(file, "@:\\", 3) ==0 ) -		file += 3; -  	// WORKAROUND: For some reason, the variable indicating which TOT to load next  	// is overwritten in the guard house card game in Woodruff.  	if ((_vm->getGameType() == kGameTypeWoodruff) && !scumm_stricmp(file, "6.TOT")) diff --git a/engines/gob/module.mk b/engines/gob/module.mk index 26cc4e5d27..5b26cb97d4 100644 --- a/engines/gob/module.mk +++ b/engines/gob/module.mk @@ -30,6 +30,7 @@ MODULE_OBJS := \  	inter_v2.o \  	inter_bargon.o \  	inter_fascin.o \ +	inter_playtoons.o \  	inter_v3.o \  	inter_v4.o \  	inter_v5.o \ diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h index 1a1a47178b..4779de703c 100644 --- a/engines/gob/save/saveload.h +++ b/engines/gob/save/saveload.h @@ -251,7 +251,6 @@ protected:  	GameHandler *_gameHandler;  	NotesHandler *_notesHandler; -	TempSpriteHandler *_tempSpriteHandler;  	ScreenshotHandler *_screenshotHandler;  	SaveHandler *getHandler(const char *fileName) const; @@ -450,13 +449,16 @@ protected:  };  /** Save/Load class for Playtoons. */ -/** Only used for the moment to check file presence */ -  class SaveLoad_Playtoons : public SaveLoad {  public: -	SaveLoad_Playtoons(GobEngine *vm); +	static const uint32 kSlotCount = 60; +	static const uint32 kSlotNameLength = 40; + +	SaveLoad_Playtoons(GobEngine *vm, const char *targetName);  	virtual ~SaveLoad_Playtoons(); +	SaveMode getSaveMode(const char *fileName) const; +  protected:  	struct SaveFile {  		const char *sourceName; @@ -465,14 +467,45 @@ protected:  		const char *description;  	}; +	/** Handles the save slots. */ +	class GameHandler : public SaveHandler { +	public: +		GameHandler(GobEngine *vm, const char *target); +		~GameHandler(); + +		int32 getSize(); +		bool load(int16 dataVar, int32 size, int32 offset); +		bool save(int16 dataVar, int32 size, int32 offset); + +	private: +		/** Slot file construction. */ +		class File : public SlotFileIndexed { +		public: +			File(GobEngine *vm, const char *base); +			~File(); + +			int getSlot(int32 offset) const; +			int getSlotRemainder(int32 offset) const; +		}; + +		byte _props[500]; +		/** The index. 500 bytes properties + kSlotCount * kSlotNameLength bytes. */ +		byte _index[2400]; + +		File *_slotFile; + +		void buildIndex(byte *buffer) const; +	}; +  	static SaveFile _saveFiles[]; -	SaveMode getSaveMode(const char *fileName) const; +	GameHandler *_gameHandler; + +	SaveHandler *getHandler(const char *fileName) const; +	const char *getDescription(const char *fileName) const;  	const SaveFile *getSaveFile(const char *fileName) const; -	  	SaveFile *getSaveFile(const char *fileName); -  };  } // End of namespace Gob diff --git a/engines/gob/save/saveload_playtoons.cpp b/engines/gob/save/saveload_playtoons.cpp index 3014e3f2bf..392c9a94ac 100644 --- a/engines/gob/save/saveload_playtoons.cpp +++ b/engines/gob/save/saveload_playtoons.cpp @@ -30,14 +30,17 @@  namespace Gob {  SaveLoad_Playtoons::SaveFile SaveLoad_Playtoons::_saveFiles[] = { -	{  "disk.001", kSaveModeExists, 0, 0}, // Playtoons 1 identification file -	{  "disk.002", kSaveModeExists, 0, 0}, // Playtoons 2 identification file -	{  "disk.003", kSaveModeExists, 0, 0}, // Playtoons 3 identification file -	{  "disk.004", kSaveModeExists, 0, 0}, // Playtoons 4 identification file -	{  "disk.005", kSaveModeExists, 0, 0}, // Playtoons 5 identification file -	{  "disk.006", kSaveModeExists, 0, 0}, // Playtoons CK 1 identification file -	{  "disk.007", kSaveModeExists, 0, 0}, // Playtoons CK 2 identification file -	{  "disk.008", kSaveModeExists, 0, 0}, // Playtoons CK 3 identification file +	{    "did.inf", kSaveModeSave,   0, 0}, //  +	{    "dan.itk", kSaveModeNone,   0, 0}, // Playtoons CK initial detection file +	{   "disk.001", kSaveModeExists, 0, 0}, // Playtoons 1 identification file +	{   "disk.002", kSaveModeExists, 0, 0}, // Playtoons 2 identification file +	{   "disk.003", kSaveModeExists, 0, 0}, // Playtoons 3 identification file +	{   "disk.004", kSaveModeExists, 0, 0}, // Playtoons 4 identification file +	{   "disk.005", kSaveModeExists, 0, 0}, // Playtoons 5 identification file +	{   "disk.006", kSaveModeExists, 0, 0}, // Playtoons CK 1 identification file +	{   "disk.007", kSaveModeExists, 0, 0}, // Playtoons CK 2 identification file +	{   "disk.008", kSaveModeExists, 0, 0}, // Playtoons CK 3 identification file +/*  	{  "titre.001", kSaveModeExists, 0, 0}, // Playtoons 1 titles  	{  "titre.002", kSaveModeExists, 0, 0}, // Playtoons 2 titles  	{  "titre.003", kSaveModeExists, 0, 0}, // Playtoons 3 titles @@ -46,25 +49,237 @@ SaveLoad_Playtoons::SaveFile SaveLoad_Playtoons::_saveFiles[] = {  	{  "titre.006", kSaveModeExists, 0, 0}, // Playtoons CK 1 empty title (???)  	{  "titre.007", kSaveModeExists, 0, 0}, // Playtoons CK 2 empty title (???)  	{  "titre.008", kSaveModeExists, 0, 0}, // Playtoons CK 3 empty title (???) -	{  "mdo.def",  kSaveModeExists, 0, 0}, -	{  "dan.itk",  kSaveModeNone, 0, 0}, -	{  "did.inf",  kSaveModeSave, 0, 0}, +	{    "mdo.def", kSaveModeExists, 0, 0}, //  +*/  }; -SaveLoad::SaveMode SaveLoad_Playtoons::getSaveMode(const char *fileName) const { -	const SaveFile *saveFile = getSaveFile(fileName); +SaveLoad_Playtoons::GameHandler::File::File(GobEngine *vm, const char *base) : +	SlotFileIndexed(vm, SaveLoad_Playtoons::kSlotCount, base, "s") { +} -	if (saveFile) -		return saveFile->mode; +SaveLoad_Playtoons::GameHandler::File::~File() { +} -	return kSaveModeNone; +int SaveLoad_Playtoons::GameHandler::File::getSlot(int32 offset) const { +	uint32 varSize = SaveHandler::getVarSize(_vm); + +	if (varSize == 0) +		return -1; + +	return ((offset - 2900) / varSize); +} + +int SaveLoad_Playtoons::GameHandler::File::getSlotRemainder(int32 offset) const { +	uint32 varSize = SaveHandler::getVarSize(_vm); + +	if (varSize == 0) +		return -1; + +	return ((offset - 2900) % varSize); +} + + +SaveLoad_Playtoons::GameHandler::GameHandler(GobEngine *vm, const char *target) : SaveHandler(vm) { +	memset(_props, 0,  500); +	memset(_index, 0, 2400); + +	_slotFile = new File(vm, target); +} + +SaveLoad_Playtoons::GameHandler::~GameHandler() { +	delete _slotFile; +} + +int32 SaveLoad_Playtoons::GameHandler::getSize() { +	uint32 varSize = SaveHandler::getVarSize(_vm); + +	if (varSize == 0) +		return -1; + +	return _slotFile->tallyUpFiles(varSize, 2900); +} + +bool SaveLoad_Playtoons::GameHandler::load(int16 dataVar, int32 size, int32 offset) { +	uint32 varSize = SaveHandler::getVarSize(_vm); + +	if (varSize == 0) +		return false; + +	if (size == 0) { +		// Indicator to load all variables +		dataVar = 0; +		size = varSize; +	} + +	if (offset < 500) { +		// Properties + +		if ((offset + size) > 500) { +			warning("Wrong index size (%d, %d)", size, offset); +			return false; +		} + +		_vm->_inter->_variables->copyFrom(dataVar, _props + offset, size); + +	} else if (offset < 2900) { +		// Save index + +		if (size != 2400) { +			warning("Wrong index size (%d, %d)", size, offset); +			return false; +		} + +		buildIndex(_vm->_inter->_variables->getAddressOff8(dataVar)); + +	} else { +		// Save slot, whole variable block + +		uint32 slot = _slotFile->getSlot(offset); +		int slotRem = _slotFile->getSlotRemainder(offset); + +		debugC(2, kDebugSaveLoad, "Loading from slot %d", slot); + +		if ((slot >= kSlotCount) || (slotRem != 0) || +		    (dataVar != 0) || (((uint32) size) != varSize)) { + +			warning("Invalid loading procedure (%d, %d, %d, %d, %d)", +					dataVar, size, offset, slot, slotRem); +			return false; +		} + +		Common::String slotFile = _slotFile->build(slot); + +		SaveReader *reader = 0; + +		// New save, load directly +		reader = new SaveReader(2, slot, slotFile); + +		SavePartInfo info(kSlotNameLength, (uint32) _vm->getGameType(), 0, +				_vm->getEndianness(), varSize); +		SavePartVars vars(_vm, varSize); + +		if (!reader->load()) { +			delete reader; +			return false; +		} + +		if (!reader->readPart(0, &info)) { +			delete reader; +			return false; +		} +		if (!reader->readPart(1, &vars)) { +			delete reader; +			return false; +		} + +		// Get all variables +		if (!vars.writeInto(0, 0, varSize)) { +			delete reader; +			return false; +		} + +		delete reader; +	} + +	return true;  } -SaveLoad_Playtoons::SaveLoad_Playtoons(GobEngine *vm) : +bool SaveLoad_Playtoons::GameHandler::save(int16 dataVar, int32 size, int32 offset) { +	uint32 varSize = SaveHandler::getVarSize(_vm); + +	warning("Saving %d %d %d", dataVar, size, offset); + +	if (varSize == 0) +		return false; + +	if (size == 0) { +		// Indicator to save all variables +		dataVar = 0; +		size = varSize; +	} + +	if (offset < 500) { +		// Properties + +		if ((offset + size) > 500) { +			warning("Wrong index size (%d, %d)", size, offset); +			return false; +		} + +		_vm->_inter->_variables->copyTo(dataVar, _props + offset, size); + +	}  else if (offset < 2900) { +		// Save index + +		if (size != 2400) { +			warning("Wrong index size (%d, %d)", size, offset); +			return false; +		} + +		// Just copy the index into our buffer +		_vm->_inter->_variables->copyTo(dataVar, _index, 2400); + +	} else { +		// Save slot, whole variable block + +		uint32 slot = _slotFile->getSlot(offset); +		int slotRem = _slotFile->getSlotRemainder(offset); + +		debugC(2, kDebugSaveLoad, "Saving to slot %d", slot); + +		if ((slot >= kSlotCount) || (slotRem != 0) || +		    (dataVar != 0) || (((uint32) size) != varSize)) { + +			warning("Invalid saving procedure (%d, %d, %d, %d, %d)", +					dataVar, size, offset, slot, slotRem); +			return false; +		} + +		Common::String slotFile = _slotFile->build(slot); + +		SaveWriter writer(2, slot, slotFile); +		SavePartInfo info(kSlotNameLength, (uint32) _vm->getGameType(), 0, +				_vm->getEndianness(), varSize); +		SavePartVars vars(_vm, varSize); + +		// Write the description +		info.setDesc(_index + (slot * kSlotNameLength), kSlotNameLength); +		// Write all variables +		if (!vars.readFrom(0, 0, varSize)) +			return false; + +		if (!writer.writePart(0, &info)) +			return false; +		if (!writer.writePart(1, &vars)) +			return false; +	} + +	return true; +} + +void SaveLoad_Playtoons::GameHandler::buildIndex(byte *buffer) const { +	uint32 varSize = SaveHandler::getVarSize(_vm); + +	if (varSize == 0) +		return; + +	SavePartInfo info(kSlotNameLength, (uint32) _vm->getGameType(), +			0, _vm->getEndianness(), varSize); + +	_slotFile->buildIndex(buffer, info, 0); +} + + +SaveLoad_Playtoons::SaveLoad_Playtoons(GobEngine *vm, const char *targetName) :  		SaveLoad(vm) { + +	_gameHandler = new GameHandler(vm, targetName); + +	_saveFiles[0].handler = _gameHandler;  }  SaveLoad_Playtoons::~SaveLoad_Playtoons() { +	delete _gameHandler;  }  const SaveLoad_Playtoons::SaveFile *SaveLoad_Playtoons::getSaveFile(const char *fileName) const { @@ -87,4 +302,31 @@ SaveLoad_Playtoons::SaveFile *SaveLoad_Playtoons::getSaveFile(const char *fileNa  	return 0;  } +SaveHandler *SaveLoad_Playtoons::getHandler(const char *fileName) const { +	const SaveFile *saveFile = getSaveFile(fileName); + +	if (saveFile) +		return saveFile->handler; + +	return 0; +} + +const char *SaveLoad_Playtoons::getDescription(const char *fileName) const { +	const SaveFile *saveFile = getSaveFile(fileName); + +	if (saveFile) +		return saveFile->description; + +	return 0; +} + +SaveLoad::SaveMode SaveLoad_Playtoons::getSaveMode(const char *fileName) const { +	const SaveFile *saveFile = getSaveFile(fileName); + +	if (saveFile) +		return saveFile->mode; + +	return kSaveModeNone; +} +  } // End of namespace Gob diff --git a/engines/gob/save/saveload_v3.cpp b/engines/gob/save/saveload_v3.cpp index 58232e6991..c24b13d27b 100644 --- a/engines/gob/save/saveload_v3.cpp +++ b/engines/gob/save/saveload_v3.cpp @@ -33,8 +33,8 @@ namespace Gob {  SaveLoad_v3::SaveFile SaveLoad_v3::_saveFiles[] = {  	{    "cat.inf", kSaveModeSave  , 0, "savegame"},  	{    "ima.inf", kSaveModeSave  , 0, "screenshot"}, -	{  "intro.$$$", kSaveModeSave  , 0, "temporary sprite"},  	{   "bloc.inf", kSaveModeSave  , 0, "notes"}, +	{  "intro.$$$", kSaveModeIgnore, 0, "temporary sprite"},  	{   "prot",     kSaveModeIgnore, 0, 0},  	{ "config",     kSaveModeIgnore, 0, 0}  }; @@ -496,20 +496,17 @@ SaveLoad_v3::SaveLoad_v3(GobEngine *vm, const char *targetName, ScreenshotType s  		_screenshotHandler = new ScreenshotHandler(vm, _gameHandler, sShotType);  	} -	_tempSpriteHandler = new TempSpriteHandler(vm);  	_notesHandler = new NotesHandler(2560, vm, targetName);  	_saveFiles[0].handler = _gameHandler;  	_saveFiles[1].handler = _screenshotHandler; -	_saveFiles[2].handler = _tempSpriteHandler; -	_saveFiles[3].handler = _notesHandler; +	_saveFiles[2].handler = _notesHandler;  }  SaveLoad_v3::~SaveLoad_v3() {  	delete _screenshotHandler;  	delete _gameHandler;  	delete _notesHandler; -	delete _tempSpriteHandler;  }  const SaveLoad_v3::SaveFile *SaveLoad_v3::getSaveFile(const char *fileName) const { diff --git a/engines/gob/video_v6.cpp b/engines/gob/video_v6.cpp index 74447f1a84..c51b027bad 100644 --- a/engines/gob/video_v6.cpp +++ b/engines/gob/video_v6.cpp @@ -39,7 +39,7 @@ Video_v6::Video_v6(GobEngine *vm) : Video_v2(vm) {  }  void Video_v6::setPrePalette() { -	byte *tpal = (byte *) _vm->_draw->_vgaPalette;; +	byte *tpal = (byte *) _vm->_draw->_vgaPalette;  	const byte *fpal = (const byte *) _ditherPalette;  	for (int i = 0; i < 256; i++) { diff --git a/engines/kyra/kyra_hof.cpp b/engines/kyra/kyra_hof.cpp index bf515498dc..d4d4ba29ea 100644 --- a/engines/kyra/kyra_hof.cpp +++ b/engines/kyra/kyra_hof.cpp @@ -247,6 +247,8 @@ Common::Error KyraEngine_HoF::init() {  	}  	_screen->loadFont(_screen->FID_GOLDFONT_FNT, "GOLDFONT.FNT"); +	_screen->setFont(_screen->FID_8_FNT); +  	_screen->setAnimBlockPtr(3504);  	_screen->setScreenDim(0); diff --git a/engines/kyra/lol.h b/engines/kyra/lol.h index 06950779b1..1c89a7a1eb 100644 --- a/engines/kyra/lol.h +++ b/engines/kyra/lol.h @@ -301,6 +301,7 @@ friend class GUI_LoL;  friend class TextDisplayer_LoL;  friend class TIMInterpreter_LoL;  friend class Debugger_LoL; +friend class HistoryPlayer;  public:  	LoLEngine(OSystem *system, const GameFlags &flags);  	~LoLEngine(); @@ -1124,14 +1125,14 @@ private:  	uint16 _dmScaleH;  	int _lastMouseRegion; -	int _seqWindowX1, _seqWindowY1,	_seqWindowX2, _seqWindowY2, _seqTrigger; -	int _spsWindowX, _spsWindowY,	_spsWindowW, _spsWindowH; +	int _seqWindowX1, _seqWindowY1, _seqWindowX2, _seqWindowY2, _seqTrigger; +	int _spsWindowX, _spsWindowY, _spsWindowW, _spsWindowH;  	uint8 *_tempBuffer5120; -	const char *const * _levelDatList; +	const char * const *_levelDatList;  	int _levelDatListSize; -	const char *const * _levelShpList; +	const char * const *_levelShpList;  	int _levelShpListSize;  	const int8 *_dscUnk1; @@ -1476,6 +1477,31 @@ private:  	LevelTempData *_lvlTempData[29];  }; +class HistoryPlayer { +public: +	HistoryPlayer(LoLEngine *vm); +	~HistoryPlayer(); + +	void play(); +private: +	OSystem *_system; +	LoLEngine *_vm; +	Screen *_screen; + +	int _x, _y, _width, _height; +	int _frame; +	Movie *_wsa; + +	void loadWsa(const char *filename); +	void playWsa(bool direction); +	void restoreWsaBkgd(); + +	Movie *_fireWsa; +	int _fireFrame; +	uint32 _nextFireTime; +	void updateFire(); +}; +  } // end of namespace Kyra  #endif diff --git a/engines/kyra/resource.h b/engines/kyra/resource.h index 07fb2e05b7..3dc6c5ff2f 100644 --- a/engines/kyra/resource.h +++ b/engines/kyra/resource.h @@ -282,16 +282,18 @@ enum kKyraResources {  	kLolButtonList7,  	kLolButtonList8, -	lolLegendData, -	lolMapCursorOvl, -	lolMapStringId, -	//lolMapPal, - -	lolSpellbookAnim, -	lolSpellbookCoords, -	lolHealShapeFrames, -	lolLightningDefs, -	lolFireballCoords, +	kLolLegendData, +	kLolMapCursorOvl, +	kLolMapStringId, +	//kLolMapPal, + +	kLolSpellbookAnim, +	kLolSpellbookCoords, +	kLolHealShapeFrames, +	kLolLightningDefs, +	kLolFireballCoords, + +	kLolHistory,  #endif // ENABLE_LOL  	kMaxResIDs diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp index bc1ccbb801..73a3e675e8 100644 --- a/engines/kyra/screen.cpp +++ b/engines/kyra/screen.cpp @@ -49,6 +49,8 @@ Screen::Screen(KyraEngine_v1 *vm, OSystem *system)  	_sjisFont = 0;  	memset(_fonts, 0, sizeof(_fonts)); + +	_currentFont = FID_8_FNT;  }  Screen::~Screen() { @@ -658,10 +660,18 @@ int Screen::fadePalStep(const Palette &pal, int diff) {  }  void Screen::setPaletteIndex(uint8 index, uint8 red, uint8 green, uint8 blue) { -	getPalette(0)[index * 3 + 0] = red; -	getPalette(0)[index * 3 + 1] = green; -	getPalette(0)[index * 3 + 2] = blue; -	setScreenPalette(getPalette(0)); +	Palette &pal = getPalette(0); + +	const int offset = index * 3; + +	if (pal[offset + 0] == red && pal[offset + 1] == green && pal[offset + 2] == blue) +		return; + +	pal[offset + 0] = red; +	pal[offset + 1] = green; +	pal[offset + 2] = blue; + +	setScreenPalette(pal);  }  void Screen::getRealPalette(int num, uint8 *dst) { diff --git a/engines/kyra/sequences_lok.cpp b/engines/kyra/sequences_lok.cpp index 83b4dd9af4..e6dfd9efe2 100644 --- a/engines/kyra/sequences_lok.cpp +++ b/engines/kyra/sequences_lok.cpp @@ -1143,8 +1143,16 @@ void KyraEngine_LoK::seq_playEnding() {  	_screen->showMouse();  	if (_flags.platform == Common::kPlatformAmiga) { -		while (!shouldQuit()) +		_screen->_charWidth = -2; +		_screen->setCurPage(2); + +		_screen->getPalette(2).clear(); +		_screen->setScreenPalette(_screen->getPalette(2)); + +		while (!shouldQuit()) {  			seq_playCreditsAmiga(); +			delayUntil(_system->getMillis() + 300 * _tickLength); +		}  	} else {  		seq_playCredits();  	} @@ -1295,8 +1303,10 @@ void KyraEngine_LoK::seq_playCredits() {  			_screen->updateScreen();  		} -		if (checkInput(0, false)) +		if (checkInput(0, false)) { +			removeInputTop();  			finished = true; +		}  		uint32 now = _system->getMillis();  		uint32 nextLoop = startLoop + _tickLength * 5; @@ -1317,17 +1327,14 @@ void KyraEngine_LoK::seq_playCreditsAmiga() {  	_screen->loadBitmap("CHALET.CPS", 4, 2, &_screen->getPalette(0));  	_screen->copyPage(2, 0); -	_screen->setCurPage(2); - -	_screen->getPalette(2).clear(); -	_screen->setScreenPalette(_screen->getPalette(2));  	_screen->getPalette(0).fill(16, 1, 63);  	_screen->fadePalette(_screen->getPalette(0), 0x5A); +	_screen->updateScreen();  	const char *theEnd = "THE END"; -	const int width = _screen->getTextWidth(theEnd); +	const int width = _screen->getTextWidth(theEnd) + 1;  	int x = (320 - width) / 2 + 1;  	_screen->copyRegion(x, 8, x, 8, width, 56, 0, 2, Screen::CR_NO_P_CHECK); @@ -1359,7 +1366,6 @@ void KyraEngine_LoK::seq_playCreditsAmiga() {  	char *buffer = new char[size];  	assert(buffer);  	memcpy(buffer, bufferTmp, size); -	_staticres->unloadId(k1CreditsStrings);  	char stringBuffer[81];  	memset(stringBuffer, 0, sizeof(stringBuffer)); @@ -1404,7 +1410,7 @@ void KyraEngine_LoK::seq_playCreditsAmiga() {  			_screen->printText(stringBuffer, x + 8, 0, 31, 0); -			for (int i = 0; i < fontHeight; ++i) { +			for (int i = 0; i < fontHeight && !shouldQuit(); ++i) {  				_screen->copyRegion(0, 141, 0, 140, 320, 59, 0, 0, Screen::CR_NO_P_CHECK);  				_screen->copyRegion(0, i, 0, 198, 320, 3, 2, 0, Screen::CR_NO_P_CHECK);  				_screen->updateScreen(); @@ -1422,8 +1428,10 @@ void KyraEngine_LoK::seq_playCreditsAmiga() {  			*specialString = 0;  		} -		if (checkInput(0, false)) +		if (checkInput(0, false)) { +			removeInputTop();  			break; +		}  	} while (++cur != buffer + size && !shouldQuit());  	delete[] buffer; diff --git a/engines/kyra/sequences_lol.cpp b/engines/kyra/sequences_lol.cpp index 5826b2b09e..ae23d130ef 100644 --- a/engines/kyra/sequences_lol.cpp +++ b/engines/kyra/sequences_lol.cpp @@ -89,8 +89,10 @@ int LoLEngine::processPrologue() {  			showIntro();  			break; -		case 2:		// "Lore of the Lands" (only CD version) -			break; +		case 2: {	// "Lore of the Lands" (only CD version) +			HistoryPlayer history(this); +			history.play(); +			} break;  		case 3:		// Load game  			if (_gui->runMenu(_gui->_loadMenu)) @@ -121,7 +123,8 @@ void LoLEngine::setupPrologueData(bool load) {  	static const char * const fileListCD[] = {  		"GENERAL.PAK", "INTROVOC.PAK", "STARTUP.PAK", "INTRO1.PAK",  		"INTRO2.PAK", "INTRO3.PAK", "INTRO4.PAK", "INTRO5.PAK", -		"INTRO6.PAK", "INTRO7.PAK", "INTRO8.PAK", "INTRO9.PAK", 0 +		"INTRO6.PAK", "INTRO7.PAK", "INTRO8.PAK", "INTRO9.PAK", +		"HISTORY.PAK", 0  	};  	static const char * const fileListFloppyExtracted[] = { @@ -683,6 +686,271 @@ void LoLEngine::showStarcraftLogo() {  	delete ci;  } +// history player + +HistoryPlayer::HistoryPlayer(LoLEngine *vm) : _system(vm->_system), _vm(vm), _screen(vm->screen()) { +	_x = _y = _width = _height = 0; +	_frame = _fireFrame = 0; +	_nextFireTime = 0; + +	_wsa = new WSAMovie_v2(vm); +	assert(_wsa); +	_fireWsa = new WSAMovie_v2(vm); +	assert(_fireWsa); +} + +HistoryPlayer::~HistoryPlayer() { +	delete _wsa; +	delete _fireWsa; +} + +void HistoryPlayer::play() { +	int dataSize = 0; +	const char *data = (const char *)_vm->staticres()->loadRawData(kLolHistory, dataSize); + +	if (!data) +		error("Could not load history data"); + +	_screen->loadFont(Screen::FID_9_FNT, "FONT9P.FNT"); + +	Palette pal(256); +	pal.fill(0, 256, 0); +	_screen->fadePalette(pal, 0x1E); + +	_screen->loadBitmap("BACKGND.CPS", 8, 8, &pal); +	_screen->copyRegion(0, 0, 0, 0, 320, 200, 8, 0, Screen::CR_NO_P_CHECK); +	_screen->copyRegion(0, 0, 0, 0, 320, 200, 8, 2, Screen::CR_NO_P_CHECK); +	_screen->updateScreen(); + +	_screen->fadePalette(pal, 0x82); + +	_screen->copyRegion(_x, _y, _x, _y, _width, _height, 2, 0); +	_screen->updateScreen(); + +	pal.fill(0, 256, 0); +	_screen->setFont(Screen::FID_9_FNT); + +	char tempWsaFilename[16]; +	char voiceFilename[13]; +	// the 'a' *has* to be lowercase +	strncpy(voiceFilename, "PS_1a", sizeof(voiceFilename)); + +	int part = 0; +	Sound *sound = _vm->sound(); + +	Common::Functor0Mem<void, HistoryPlayer> palFade(this, &HistoryPlayer::updateFire); + +	for (; voiceFilename[3] <= '9' && !_vm->shouldQuit() && !_vm->skipFlag(); ++voiceFilename[3], voiceFilename[4] = 'a') { +		while (!_vm->shouldQuit() && !_vm->skipFlag()) { +			if (!sound->voiceFileIsPresent(voiceFilename)) +				break; + +			if (data[part * 15] == voiceFilename[3] && data[part * 15 + 1] == voiceFilename[4]) { +				switch (part) { +				case 0: +					loadWsa(&data[part * 15 + 2]); +					playWsa(true); +					sound->voicePlay(voiceFilename); +					break; + +				case 1: case 2: case 8: +				case 16: case 25: +					sound->voicePlay(voiceFilename); +					playWsa(true); +					break; + +				case 3: case 7: case 10: +				case 17: case 23: case 26: +					sound->voicePlay(voiceFilename); +					playWsa(true); +					restoreWsaBkgd(); +					loadWsa(&data[part * 15 + 2]); +					playWsa(true); +					break; + +				case 6: +					sound->voicePlay(voiceFilename); +					playWsa(false); +					restoreWsaBkgd(); +					loadWsa(&data[part * 15 + 2]); +					playWsa(true); +					_vm->delayWithTicks(30); +					playWsa(true); +					break; + +				case 9: +					sound->voicePlay(voiceFilename); +					loadWsa(&data[part * 15 + 2]); +					playWsa(true); +					break; + +				case 22: +					playWsa(false); +					restoreWsaBkgd(); +					loadWsa(&data[part * 15 + 2]); +					_vm->delayWithTicks(30); +					sound->voicePlay(voiceFilename); +					playWsa(true); + +					strcpy(tempWsaFilename, &data[part * 15]); + +					for (int i = 1; i < 4 && !_vm->shouldQuit(); ++i) { +						uint32 nextTime = _system->getMillis() + 30 * _vm->tickLength(); +						tempWsaFilename[8] = 'a' + i; + +						loadWsa(&tempWsaFilename[2]); +						_vm->delayUntil(nextTime); + +						playWsa(true); +					} + +					tempWsaFilename[8] = 'e'; +					loadWsa(&tempWsaFilename[2]); +					break; + +				case 29: +					sound->voicePlay(voiceFilename); +					playWsa(false); +					restoreWsaBkgd(); +					loadWsa(&data[part * 15 + 2]); + +					_fireWsa->open("FIRE.WSA", 0, 0); +					playWsa(true); +					_fireFrame = 0; + +					for (int i = 0; i < 12 && !_vm->shouldQuit(); ++i, ++_fireFrame) { +						uint32 nextTime = _system->getMillis() + 3 * _vm->tickLength(); + +						if (_fireFrame > 4) +							_fireFrame = 0; + +						_fireWsa->displayFrame(_fireFrame, 0, 75, 51, 0, 0, 0); +						_screen->updateScreen(); +						_vm->delayUntil(nextTime); +					} + +					_screen->loadPalette("DRACPAL.PAL", pal); +					_screen->fadePalette(pal, 0x78, &palFade); + +					while (sound->voiceIsPlaying() && !_vm->shouldQuit()) { +						uint32 nextTime = _system->getMillis() + 3 * _vm->tickLength(); + +						++_fireFrame; +						if (_fireFrame > 4) +							_fireFrame = 0; + +						_fireWsa->displayFrame(_fireFrame, 0, 75, 51, 0, 0, 0); +						_screen->updateScreen(); +						_vm->delayUntil(nextTime); +					} + +					_fireFrame = 0; +					for (int i = 0; i < 10; ++i, ++_fireFrame) { +						uint32 nextTime = _system->getMillis() + 3 * _vm->tickLength(); + +						if (_fireFrame > 4) +							_fireFrame = 0; + +						_fireWsa->displayFrame(_fireFrame, 0, 75, 51, 0, 0, 0); +						_screen->updateScreen(); +						_vm->delayUntil(nextTime); +					} + +					break; + +				default: +					sound->voicePlay(voiceFilename); +					playWsa(false); +					restoreWsaBkgd(); +					loadWsa(&data[part * 15 + 2]); +					playWsa(true); +					break; +				} + +				++part; +			} else { +				sound->voicePlay(voiceFilename); +			} + +			while (sound->voiceIsPlaying() && !_vm->shouldQuit() && !_vm->skipFlag()) +				_vm->delay(10); + +			if (_vm->skipFlag()) { +				sound->voiceStop(); +				_vm->resetSkipFlag(); +			} + +			++voiceFilename[4]; +		} + +		if (_vm->skipFlag()) +			_vm->resetSkipFlag(); +	} + +	if (_vm->skipFlag()) +		_vm->resetSkipFlag(); + +	pal.fill(0, 256, 63); +	if (_fireWsa->opened()) +		_screen->fadePalette(pal, 0x3C, &palFade); +	else +		_screen->fadePalette(pal, 0x3C); + +	_screen->clearPage(0); +	pal.fill(0, 256, 0); +	_screen->fadePalette(pal, 0x3C); +} + +void HistoryPlayer::loadWsa(const char *filename) { +	if (_wsa->opened()) +		_wsa->close(); + +	Palette pal(256); +	if (!_wsa->open(filename, 3, &pal)) +		error("Could not load WSA file: '%s'", filename); +	_screen->setScreenPalette(pal); + +	_x = _wsa->xAdd(); +	_y = _wsa->yAdd(); +	_width = _wsa->width(); +	_height = _wsa->height(); +	_frame = 1; +} + +void HistoryPlayer::playWsa(bool direction) { +	const int tickLength = _vm->tickLength(); + +	for (int i = 0; i < 15 && !_vm->shouldQuit(); ++i) { +		uint32 nextTime = _system->getMillis() + 3 * tickLength; + +		_wsa->displayFrame(_frame, 2, 0, 0, 0, 0, 0); +		_screen->copyRegion(_x, _y, _x, _y, _width, _height, 2, 0); +		_screen->updateScreen(); +		_vm->delayUntil(nextTime); + +		if (direction) +			++_frame; +		else +			--_frame; +	} +} + +void HistoryPlayer::restoreWsaBkgd() { +	_screen->copyRegion(_x, _y, _x, _y, _width, _height, 8, 0); +	_screen->copyRegion(_x, _y, _x, _y, _width, _height, 8, 2); +	_screen->updateScreen(); +} + +void HistoryPlayer::updateFire() { +	if (_system->getMillis() > _nextFireTime) { +		_fireWsa->displayFrame(_fireFrame, 0, 75, 51, 0, 0, 0); +		_fireFrame = (_fireFrame + 1) % 5; +		_nextFireTime = _system->getMillis() + 4 * _vm->tickLength(); +	} + +	_screen->updateScreen(); +} +  // outro  void LoLEngine::setupEpilogueData(bool load) { diff --git a/engines/kyra/sound.cpp b/engines/kyra/sound.cpp index 83584ab454..781516282e 100644 --- a/engines/kyra/sound.cpp +++ b/engines/kyra/sound.cpp @@ -242,10 +242,15 @@ namespace {  // A simple wrapper to create VOC streams the way like creating MP3, OGG/Vorbis and FLAC streams.  // Possible TODO: Think of making this complete and moving it to sound/voc.cpp ?  Audio::AudioStream *makeVOCStream(Common::SeekableReadStream *stream, bool disposeAfterUse, uint32 startTime, uint32 duration, uint numLoops) { + +#ifdef STREAM_AUDIO_FROM_DISK +	Audio::AudioStream *as = Audio::makeVOCStream(*stream, Audio::Mixer::FLAG_UNSIGNED, 0, 0, disposeAfterUse); +#else  	Audio::AudioStream *as = Audio::makeVOCStream(*stream, Audio::Mixer::FLAG_UNSIGNED);  	if (disposeAfterUse)  		delete stream; +#endif  	return as;  } diff --git a/engines/kyra/sound_midi.cpp b/engines/kyra/sound_midi.cpp index 451b77cec2..28d4844d7d 100644 --- a/engines/kyra/sound_midi.cpp +++ b/engines/kyra/sound_midi.cpp @@ -658,6 +658,9 @@ void SoundMidiPC::loadSfxFile(Common::String file) {  }  void SoundMidiPC::playTrack(uint8 track) { +	if (!_musicEnabled) +		return; +  	haltTrack();  	Common::StackLock lock(_mutex); @@ -685,6 +688,9 @@ bool SoundMidiPC::isPlaying() {  }  void SoundMidiPC::playSoundEffect(uint8 track) { +	if (!_sfxEnabled) +		return; +  	Common::StackLock lock(_mutex);  	for (int i = 0; i < 3; ++i) {  		if (!_sfx[i]->isPlaying()) { diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp index 83f4b22b6d..d4882a12af 100644 --- a/engines/kyra/staticres.cpp +++ b/engines/kyra/staticres.cpp @@ -44,7 +44,7 @@  namespace Kyra { -#define RESFILE_VERSION 49 +#define RESFILE_VERSION 50   namespace {  bool checkKyraDat(Common::SeekableReadStream *file) { @@ -444,16 +444,18 @@ bool StaticResource::init() {  		{ kLolButtonList7, kLolRawDataBe16, "BUTTON7.LST" },  		{ kLolButtonList8, kLolRawDataBe16, "BUTTON84.LST" }, -		{ lolLegendData, kRawData, "MAPLGND.DEF" }, -		{ lolMapCursorOvl, kRawData, "MAPCURSOR.PAL" }, -		{ lolMapStringId, kLolRawDataBe16, "MAPSTRID.LST" }, -		//{ lolMapPal, kRawData, "MAP.PAL" }, +		{ kLolLegendData, kRawData, "MAPLGND.DEF" }, +		{ kLolMapCursorOvl, kRawData, "MAPCURSOR.PAL" }, +		{ kLolMapStringId, kLolRawDataBe16, "MAPSTRID.LST" }, +		//{ kLolMapPal, kRawData, "MAP.PAL" }, -		{ lolSpellbookAnim, kRawData, "MBOOKA.DEF" }, -		{ lolSpellbookCoords, kRawData, "MBOOKC.DEF" }, -		{ lolHealShapeFrames, kRawData, "MHEAL.SHP" }, -		{ lolLightningDefs, kRawData, "MLGHTNG.DEF" }, -		{ lolFireballCoords, kLolRawDataBe16, "MFIREBLL.DEF" }, +		{ kLolSpellbookAnim, kRawData, "MBOOKA.DEF" }, +		{ kLolSpellbookCoords, kRawData, "MBOOKC.DEF" }, +		{ kLolHealShapeFrames, kRawData, "MHEAL.SHP" }, +		{ kLolLightningDefs, kRawData, "MLGHTNG.DEF" }, +		{ kLolFireballCoords, kLolRawDataBe16, "MFIREBLL.DEF" }, + +		{ kLolHistory, kRawData, "HISTORY.FLS" },  		{ 0, 0, 0 }  	}; @@ -589,6 +591,7 @@ void StaticResource::unloadId(int id) {  		if (pos->id == id || id == -1) {  			const FileType *filetype = getFiletype(pos->type);  			(this->*(filetype->free))(pos->data, pos->size); +			pos = _resList.erase(pos);  			if (id != -1)  				break;  		} @@ -1874,10 +1877,10 @@ void LoLEngine::initStaticResource() {  	_buttonList7 = (const int16 *)_staticres->loadRawDataBe16(kLolButtonList7, _buttonList7Size);  	_buttonList8 = (const int16 *)_staticres->loadRawDataBe16(kLolButtonList8, _buttonList8Size); -	_autoMapStrings = _staticres->loadRawDataBe16(lolMapStringId, _autoMapStringsSize); +	_autoMapStrings = _staticres->loadRawDataBe16(kLolMapStringId, _autoMapStringsSize);  	int tmpSize = 0; -	const uint8 *tmp = _staticres->loadRawData(lolLegendData, tmpSize); +	const uint8 *tmp = _staticres->loadRawData(kLolLegendData, tmpSize);  	tmpSize /= 5;  	if (tmp) {  		_defaultLegendData = new MapLegendData[tmpSize]; @@ -1888,19 +1891,19 @@ void LoLEngine::initStaticResource() {  			_defaultLegendData[i].stringId = READ_LE_UINT16(tmp);  			tmp += 2;  		} -		_staticres->unloadId(lolLegendData); +		_staticres->unloadId(kLolLegendData);  	} -	tmp = _staticres->loadRawData(lolMapCursorOvl, tmpSize); +	tmp = _staticres->loadRawData(kLolMapCursorOvl, tmpSize);  	_mapCursorOverlay = new uint8[tmpSize];  	memcpy(_mapCursorOverlay, tmp, tmpSize); -	_staticres->unloadId(lolMapCursorOvl); +	_staticres->unloadId(kLolMapCursorOvl); -	_updateSpellBookCoords = _staticres->loadRawData(lolSpellbookCoords, _updateSpellBookCoordsSize); -	_updateSpellBookAnimData = _staticres->loadRawData(lolSpellbookAnim, _updateSpellBookAnimDataSize); -	_healShapeFrames = _staticres->loadRawData(lolHealShapeFrames, _healShapeFramesSize); +	_updateSpellBookCoords = _staticres->loadRawData(kLolSpellbookCoords, _updateSpellBookCoordsSize); +	_updateSpellBookAnimData = _staticres->loadRawData(kLolSpellbookAnim, _updateSpellBookAnimDataSize); +	_healShapeFrames = _staticres->loadRawData(kLolHealShapeFrames, _healShapeFramesSize); -	tmp = _staticres->loadRawData(lolLightningDefs, tmpSize); +	tmp = _staticres->loadRawData(kLolLightningDefs, tmpSize);  	if (tmp) {  		_lightningProps = new LightningProperty[5];  		for (int i = 0; i < 5; i++) { @@ -1908,10 +1911,10 @@ void LoLEngine::initStaticResource() {  			_lightningProps[i].frameDiv = tmp[(i << 2) + 1];  			_lightningProps[i].sfxId = READ_LE_UINT16(&tmp[(i << 2) + 2]);  		} -		_staticres->unloadId(lolLightningDefs); +		_staticres->unloadId(kLolLightningDefs);  	} -	_fireBallCoords = (const int16*)_staticres->loadRawDataBe16(lolFireballCoords, _fireBallCoordsSize); +	_fireBallCoords = (const int16*)_staticres->loadRawDataBe16(kLolFireballCoords, _fireBallCoordsSize);  	_buttonCallbacks.clear();  	_buttonCallbacks.reserve(95); @@ -3417,7 +3420,7 @@ extern const byte LoKAmigaSfxIntro[] = {  	0x45, 0x03, 0x00, 0x00, 0x02, 0x24, 0x6E, 0x00,  	0x3C, 0x16, 0x00, 0x00, 0x26, 0x77, 0x6E, 0x00,  	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  };  // TODO: fileoffset = 0x2C55E, len = 120 * 8 @@ -3541,7 +3544,7 @@ extern const byte LoKAmigaSfxGame[] = {  	0x30, 0x23, 0x00, 0x00, 0x16, 0x99, 0x50, 0x02,  	0x30, 0x23, 0x00, 0x00, 0x16, 0x99, 0x50, 0x02,  	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -	0x3C, 0x13, 0x00, 0x00, 0x01, 0x56, 0x78, 0x02, +	0x3C, 0x13, 0x00, 0x00, 0x01, 0x56, 0x78, 0x02  };  } // End of namespace Kyra diff --git a/engines/parallaction/font.cpp b/engines/parallaction/font.cpp index 9207d24e29..daa74cc7dc 100644 --- a/engines/parallaction/font.cpp +++ b/engines/parallaction/font.cpp @@ -256,7 +256,7 @@ public:  	byte*	getData(uint16 index) {  		assert(index < _numGlyphs); -		return _data + (_height * _widths[index]) * index;; +		return _data + (_height * _widths[index]) * index;  	}  	void	getRect(uint16 index, Common::Rect &r) { diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp index eacae8e697..35ca688233 100644 --- a/engines/sci/console.cpp +++ b/engines/sci/console.cpp @@ -381,7 +381,7 @@ const char *selector_name(EngineState *s, int selector) {  }  bool Console::cmdGetVersion(int argc, const char **argv) { -	DebugPrintf("Resource file version:        %s\n", versionNames[_vm->getResMgr()->_sciVersion]); +	DebugPrintf("Resource file version:        %s\n", versionNames[_vm->getResMgr()->sciVersion()]);  	DebugPrintf("Emulated interpreter version: %s\n", versionNames[_vm->getVersion()]);  	return true; diff --git a/engines/sci/detection.cpp b/engines/sci/detection.cpp index d0b3919c60..7f9190444d 100644 --- a/engines/sci/detection.cpp +++ b/engines/sci/detection.cpp @@ -108,7 +108,6 @@ static const PlainGameDescriptor SciGameTitles[] = {  		{"resource.001", 0, resMd5, resSize}, \  		{NULL, 0, NULL, 0}}, lang, Common::kPlatformPC, 0, GUIO_NOSPEECH}, \  		0, \ -		SCI_VERSION_AUTODETECT, \  		ver \  	} @@ -128,7 +127,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "6fd05926c2199af0af6f72f90d0d7260", 126895},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -143,7 +141,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "d226d7d3b4f77c4a566913fc310487fc", 464348},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -158,7 +155,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "85e51acb5f9c539d66e3c8fe40e17da5", 493638},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -170,7 +166,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "2af49dbd8f2e1db4ab09f9310dc91259", 570553},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -184,7 +179,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "c0c29c51af66d65cb53f49e785a2d978", 1280907},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -196,7 +190,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "930e416bec196b9703a331d81b3d66f2", 1283812},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -208,7 +201,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "735be4e58957180cfc807d5e18fdffcd", 1433302},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -219,7 +211,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "11391434f41c834090d7a1e9488ce936", 129739},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -230,7 +221,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "acde93e58fca4f7a2a5a220558a94aa8", 272629},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -241,7 +231,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "acde93e58fca4f7a2a5a220558a94aa8", 335362},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -252,7 +241,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "62fb9256f8e7e6e65a6875efdb7939ac", 203396},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -269,7 +257,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "605b67a9ef199a9bb015745e7c004cf4", 478384},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -280,7 +267,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "d4b75e280d1c3a97cfef1b0bebff387c", 573647},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -296,7 +282,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "8613c45fc771d658e5a505b9a4a54f31", 670883},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -311,7 +296,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "64f342463f6f35ba71b3509ef696ae3f", 669188},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -329,7 +313,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.006", 0, "8f880a536908ab496bbc552f7f5c3738", 585255},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -340,7 +323,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "4930708722f34bfbaa4945fb08f55f61", 232523},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -355,7 +337,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "8e1a3a8c588007404b532b8dfacc1460", 729143},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -372,7 +353,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "8e1a3a8c588007404b532b8dfacc1460", 358182},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -390,25 +370,23 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.006", 0, "f9487732289a4f4966b4e34eea413325", 842817},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	},  	// Conquests of the Longbow - English DOS  	// SCI interpreter version 1.000.510  	{{"longbow", "", { -	      {"resource.map", 0, "36d3b81ff75b67dd4d27b7f5d3166503", 6261}, -	      {"resource.000", 0, "36e8fda5d0b8c49e587c8a9617959f72", 1096767}, -	      {"resource.001", 0, "d4c299213f8d799da1492680d12d0fb3", 1133226}, -	      {"resource.002", 0, "7f6ce331219d58d5087731e4475ab4f1", 1128555}, -	      {"resource.003", 0, "21ebe6b39b57a73fc449f67f013765aa", 972635}, -	      {"resource.004", 0, "9cfce07e204a329e94fda8b5657621da", 1064637}, -	      {"resource.005", 0, "d036df0872f2db19bca34601276be2d7", 1154950}, -	      {"resource.006", 0, "b367a6a59f29ee30dde1d88a5a41152d", 1042966}, -	      {NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH}, -	      0, -	      SCI_VERSION_AUTODETECT, -	      SCI_VERSION_1 +		{"resource.map", 0, "36d3b81ff75b67dd4d27b7f5d3166503", 6261}, +		{"resource.000", 0, "36e8fda5d0b8c49e587c8a9617959f72", 1096767}, +		{"resource.001", 0, "d4c299213f8d799da1492680d12d0fb3", 1133226}, +		{"resource.002", 0, "7f6ce331219d58d5087731e4475ab4f1", 1128555}, +		{"resource.003", 0, "21ebe6b39b57a73fc449f67f013765aa", 972635}, +		{"resource.004", 0, "9cfce07e204a329e94fda8b5657621da", 1064637}, +		{"resource.005", 0, "d036df0872f2db19bca34601276be2d7", 1154950}, +		{"resource.006", 0, "b367a6a59f29ee30dde1d88a5a41152d", 1042966}, +		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH}, +		0, +		SCI_VERSION_1  	},  	// Conquests of the Longbow - English DOS Floppy (from jvprat) @@ -424,7 +402,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "21ebe6b39b57a73fc449f67f013765aa", 1284720},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -440,7 +417,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "21ebe6b39b57a73fc449f67f013765aa", 1284609},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -457,7 +433,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  	      {"resource.006", 0, "8c767b3939add63d11274065e46aad04", 713158},  	      {NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  	      0, -	      SCI_VERSION_AUTODETECT,  	      SCI_VERSION_1  	}, @@ -468,7 +443,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "f05a20cc07eee85da8e999d0ac0f596b", 869916},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -485,7 +459,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.006", 0, "b367a6a59f29ee30dde1d88a5a41152d", 1123585},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -497,7 +470,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "baf9393a9bfa73098adb501e5bc5487b", 657518},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -508,7 +480,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "d908dbef56816ac6c60dd145fdeafb2b", 3536046},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -522,7 +493,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "f3146df0ad4297f5ce35aa8c4753bf6c", 586832},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -536,7 +506,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "83ac03e4bddb2c1ac2d36d2a587d0536", 1145616},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -550,7 +519,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "84dd11b6825255671c703aee5ceff620", 1175835},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -565,7 +533,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "84dd11b6825255671c703aee5ceff620", 1174993},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -579,7 +546,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "f8f767f9d6351432621c6e54c1b2ba8c", 1141520},  		{NULL, 0, NULL, 0}}, Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -590,7 +556,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "dd6f614c43c029f063e93cd243af90a4", 525992},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -601,7 +566,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "cc1d17e5637528dbe4a812699e1cbfc6", 4208192},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -612,7 +576,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "1c4093f7248240329121fdf8c0d59152", 4231946},  		{NULL, 0, NULL, 0}}, Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -623,7 +586,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "5ea8e7a3ea10cce6efd5c106dc62fd8c", 867724},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -634,7 +596,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "ee3c64ffff0ba9fb08bea2624631c598", 5490246},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -647,7 +608,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "554f65315d851184f6e38211489fdd8f", -1},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -660,7 +620,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "304b5a5781800affd2235152a5794fa8", -1},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -676,7 +635,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "45b5bf74933ac3727e4cc844446dc052", 796156},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -689,7 +647,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "45b5bf74933ac3727e4cc844446dc052", 796156},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -700,7 +657,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "4962a3c4dd44e36e78ea4a7a374c2220", 957382},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -711,7 +667,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "f1e680095424e31f7fae1255d36bacba", 40692},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -722,7 +677,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "eb3ed7477ca4110813fe1fcf35928561", 1718450},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -734,7 +688,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 13022630},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -745,7 +698,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 13022630},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -756,7 +708,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13077029},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -767,7 +718,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 12581736},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -778,7 +728,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13400497},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -789,7 +738,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13381599},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -800,7 +748,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "d04cfc7f04b6f74d13025378be49ec2b", 4640330},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	},  	// Gabriel Knight 2 - English DOS (from jvprat) @@ -820,7 +767,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.006", 0, "8e44e03890205a7be12f45aaba9644b4", 60659424},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	},  #endif // ENABLE_SCI32 @@ -834,7 +780,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "e0dd44069a62a463fd124974b915f10d", 328912},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -845,7 +790,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "e0dd44069a62a463fd124974b915f10d", 518308},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -858,7 +802,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "e0dd44069a62a463fd124974b915f10d", 439502},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	},  #endif @@ -871,7 +814,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "8f2dd70abe01112eca464cda818b5eb6", 196631},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -883,7 +825,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "8f2dd70abe01112eca464cda818b5eb6", 222704},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -897,7 +838,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "143df8aef214a2db34c2d48190742012", 632273},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	},  #endif @@ -910,7 +850,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "24db2bccda0a3c43ac4a7b5edb116c7e", 797678},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -923,7 +862,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "0a98a268ee99b92c233a0d7187c1f0fa", 845795},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -934,7 +872,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "24c10844792c54d476d272213cbac300", 675252},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -947,7 +884,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "b86daa3ba2784d1502da881eedb80d9b", 719747},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_01_VGA_ODD,  		SCI_VERSION_1  	},  #endif @@ -963,7 +899,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "9ae2a13708d691cd42f9129173c4b39d", 820443},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_01,  		SCI_VERSION_01  	}, @@ -974,7 +909,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "4cfb9040db152868f7cb6a1e8151c910", 296555},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -988,7 +922,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "fed9e0072ffd511d248674e60dee2099", 717478},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1004,7 +937,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "3fac034c7d130e055d05bc43a1f8d5f8", 549993},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1015,7 +947,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "143e1c14f15ad0fbfc714f648a65f661", 205330},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1030,7 +961,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "77615c595388acf3d1df8e107bfb6b52", 479562},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1047,7 +977,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "851a62d00972dc4002f472cc0d84e71d", 341038},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1064,7 +993,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "0c8566848a76eea19a6d6220914030a7", 343882},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1083,7 +1011,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "b914b5901e786327213e779725d30dd1", 778772},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1102,7 +1029,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "56546b20db11a4836f900efa6d3a3e74", 794194},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1121,7 +1047,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "11cb750f5f816445ad0f4b9f50a4f59a", 794259},  		{NULL, 0, NULL, 0}}, Common::IT_ITA, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1134,7 +1059,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "b45a581ff8751e052c7e364f58d3617f", 16800210},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1152,7 +1076,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "2f48faf27666b58c276dda20f91f4a93", 1240456},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		0,  		SCI_VERSION_1  	}, @@ -1170,7 +1093,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "c07494f0cce7c05210893938786a955b", 1337361},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1189,7 +1111,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "7db4d0a1d8d547c0019cb7d2a6acbdd4", 1338473},  		{NULL, 0, NULL, 0}}, Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1207,7 +1128,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "dc10c107e0923b902326a040b9c166b9", 1337859},  		{NULL, 0, NULL, 0}}, Common::IT_ITA, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1225,7 +1145,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "431def14ca29cdb5e6a5e84d3f38f679", 1240176},  		{NULL, 0, NULL, 0}}, Common::PL_POL, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1238,7 +1157,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "54d1fdc936f98c81f9e4c19e04fb1510", 8260},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1250,7 +1168,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "3cf5de44de36191f109d425b8450efc8", 258590},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1262,7 +1179,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "756297b2155db9e43f621c6f6fb763c3", 282822},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1274,7 +1190,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "233394a5f33b475ae5975e7e9a420865", 8376352},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_1_1,  		SCI_VERSION_1_1  	}, @@ -1287,7 +1202,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "41eed2d3893e1ca6c3695deba4e9d2e8", 267102},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1299,7 +1213,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 203882535},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -1310,7 +1223,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -1321,7 +1233,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 206626576},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -1332,7 +1243,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -1343,7 +1253,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "d9659d2cf0c269c6a9dc776707f5bea0", 2433827},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	},  #endif // ENABLE_SCI32 @@ -1361,7 +1270,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "bfd870d51dc97729f0914095f58e6957", 676881},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1376,7 +1284,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "e45c888d9c7c04aec0a20e9f820b79ff", 683737},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAtariST, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1387,7 +1294,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "0c8912290af0890f8d95faeb4ddb2d68", 333031},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1401,7 +1307,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "e45c888d9c7c04aec0a20e9f820b79ff", 683807},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1418,7 +1323,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "e45c888d9c7c04aec0a20e9f820b79ff", 317687},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1435,7 +1339,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "e45c888d9c7c04aec0a20e9f820b79ff", 317687},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1447,7 +1350,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "2b2b1b4f7584f9b38fd13f6ab95634d1", 781912},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1459,7 +1361,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "57084910bc923bff5d6d9bc1b56e9604", 5035964},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1471,7 +1372,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "82578b8d5a7e09c4c58891ca49fae35b", 5598672},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1483,7 +1383,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "795c928cd00dfec9fbc62ebcd12e1f65", 303185},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1495,7 +1394,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "71f1f0cd9f082da2e750c793a8ed9d84", 286141},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1509,7 +1407,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "685cd6c1e05a695ab1e0db826337ee2a", 553279},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1524,7 +1421,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "4a34c3367c2fe7eb380d741374da1989", 572251},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1537,7 +1433,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "85d6935ef77e6b0e16bc307640a0d913", 1088312},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1550,7 +1445,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "85b030bb66d5342b0a068f1208c431a8", 1078443},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1561,7 +1455,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "0c0768215c562d9dace4a5ca53696cf3", 359913},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1577,7 +1470,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "ac175df0ea9a2cba57f0248651856d27", 376556},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1591,7 +1483,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "b7409ab32bc3bee2d6cce887cd33f2b6", 1092160},  		{NULL, 0, NULL, 0}}, Common::RU_RUS, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1606,7 +1497,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "a0d4a625311d307257da7fc43d00459d", 717844},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1618,7 +1508,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "9f5520f0297206928df0b0b36493cd33", 127532},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1634,7 +1523,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.006", 0, "4a24443a25e2b1492462a52809605dc2", 345683},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1650,7 +1538,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.006", 0, "96033f57accfca903750413fd09193c8", 345818},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1667,7 +1554,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "433911eb764089d493aed1f958a5615a", 524259},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1681,7 +1567,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "f18441027154292836b973c655fa3175", 513651},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1698,7 +1583,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "f18441027154292836b973c655fa3175", 257174},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1710,7 +1594,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "f773d79b93dfd4052ec8c1cc64c1e6ab", 268299},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1725,7 +1608,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "3827a9b17b926e12dcc336860f50612a", 691932},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1740,7 +1622,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "65f1bdaa20f6d0470e9d969f22473873", 690826},  		{NULL, 0, NULL, 0}}, Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -1758,7 +1639,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.006", 0, "bafc64e3144f115dc58c6aee02de98fb", 715598},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1777,7 +1657,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "59eba83ad465b08d763b44f86afa86f6", 683135},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1788,7 +1667,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "8bd8d9c0b5f455ee1269d63ce86c50dd", 531380},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1806,7 +1684,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "ac443fae1285fb359bf2b2bc6a7301ae", 1030656},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1824,7 +1701,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "ac443fae1285fb359bf2b2bc6a7301ae", 993408},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1843,7 +1719,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "ac443fae1285fb359bf2b2bc6a7301ae", 958842},  		{NULL, 0, NULL, 0}}, Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1862,7 +1737,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "ac443fae1285fb359bf2b2bc6a7301ae", 987222},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1873,7 +1747,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "a8989a5a89e7d4f702b26b378c7a357a", 7001981},  		{NULL, 0, NULL, 0}}, Common::IT_ITA, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -1884,7 +1757,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "4462fe48c7452d98fddcec327a3e738d", 5789138},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1895,7 +1767,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "57d5fe8bb9e044158514476ea7678eb0", 5754790},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1906,7 +1777,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "f6cbc6da7b90ea135883e0759848ca2c", 5773160},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1917,7 +1787,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "f6cbc6da7b90ea135883e0759848ca2c", 5776092},  		{NULL, 0, NULL, 0}}, Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1928,7 +1797,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "7884a8db9253e29e6b37a2651fd90ba3", 5733116},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1939,7 +1807,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "3733433b517ec3d14a3331d9ab3842ae", 344830},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -1951,7 +1818,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "9a9f4870504444cda863dd14d077a680", 18520872},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -1962,7 +1828,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "bd944d2b06614a5b39f1586906f0ee88", 18534274},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -1973,7 +1838,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "bd944d2b06614a5b39f1586906f0ee88", 18538987},  		{NULL, 0, NULL, 0}}, Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -1984,7 +1848,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "89353723488219e25589165d73ed663e", 66965678},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -1995,7 +1858,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "a8c6817bb94f332ff498a71c8b47f893", 66971724},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2006,7 +1868,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "dc37c3055fffbefb494ff22b145d377b", 66964472},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2017,7 +1878,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "440b9fed89590abb4e4386ed6f948ee2", 67140181},  		{NULL, 0, NULL, 0}}, Common::IT_ITA, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2028,7 +1888,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "32792f9bc1bf3633a88b382bb3f6e40d", 67071418},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2039,7 +1898,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resmap.000", 0, "6a2b2811eef82e87cde91cf1de845af8", 2695},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2050,7 +1908,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "5d7714416b612463d750fb9c5690c859", 28952},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2061,7 +1918,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "3c585827fa4a82f4c04a56a0bc52ccee", 11494351},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2074,7 +1930,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.002", 0, "175468431a979b9f317c294ce3bc1430", 94628315},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2087,7 +1942,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.002", 0, "3c8d627c555b0e3e4f1d9955bc0f0df4", 94631127},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	},  #endif // ENABLE_SCI32 @@ -2099,7 +1953,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "9e33566515b18bee7915db448063bba2", 871853},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_01,  		SCI_VERSION_01  	}, @@ -2114,7 +1967,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "f79daa70390d73746742ffcfc3dc4471", 937580},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_01,  		SCI_VERSION_01  	}, @@ -2128,7 +1980,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "dd6cef0c592eadb7e6be9a25307c57a2", 1344719},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_01,  		SCI_VERSION_01  	}, @@ -2141,7 +1992,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "fb552ae550ca1dac19ed8f6a3767612d", 817191},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_01,  		SCI_VERSION_01  	}, @@ -2152,7 +2002,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "b7ecd8ae9e254e80310b5a668b276e6e", 2948975},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_01,  		SCI_VERSION_01  	}, @@ -2164,7 +2013,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "5a0ed1d745855148364de1b3be099bac", 4369438},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -2175,7 +2023,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "5a0ed1d745855148364de1b3be099bac", 2070072},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -2187,7 +2034,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "1926925c95d82f0999590e93b02887c5", 15150768},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	},  #endif // ENABLE_SCI32 @@ -2199,7 +2045,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "453ea81ef66a50cbe33ce06302afe47f", 229737},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -2223,7 +2068,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		//{"ressci.007", 0, "3aae6559aa1df273bc542d5ac6330d75", 25859038},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2242,7 +2086,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.005", 0, "05f9fe2bee749659acb3cd2c90252fc5", 67905112},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	},  #endif // ENABLE_SCI32 @@ -2254,7 +2097,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "670d0c53622429f4b11275caf7f8d292", 5459574},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2265,7 +2107,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "118f6c31a93ec7fd9a231c61125229e3", 645494},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2276,7 +2117,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "e6a918a2dd7a4bcecd8fb389f43287c2", 1698164},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2287,7 +2127,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "e6a918a2dd7a4bcecd8fb389f43287c2", 1713544},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2298,7 +2137,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "e0d5ddf34eda903a38f0837e2aa7145b", 6401433},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2312,7 +2150,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "e008f5d6e2a7c4d4a0da0173e4fa8f8b", 553970},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -2323,7 +2160,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "376ef6d6eaaeed66e1424bd219c4b9ab", 215398},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -2339,7 +2175,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.006", 0, "77f02def3094af804fd2371db25b7100", 354991},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -2352,7 +2187,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "77f02def3094af804fd2371db25b7100", 591851},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -2365,7 +2199,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "77f02def3094af804fd2371db25b7100", 586857},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -2381,7 +2214,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "7b229fbdf30d670d0728cede3e984a7e", 838663},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -2398,7 +2230,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "6258d5dd85898d8e218eb8113ebc9059", 704485},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -2414,7 +2245,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "1b91e891a3c60a941dac0eecdf83375b", 1143606},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -2427,7 +2257,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "5c5a551b6c86cce2ee75becb90e0b586", 624411},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -2443,7 +2272,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "0c3eb84b9755852d9e795e0d5c9373c7", 1171760},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -2454,7 +2282,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "527d5684016e6816157cd15d9071b11b", 1121310},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2466,7 +2293,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "fd316a09b628b7032248139003369022", 18841068},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2477,7 +2303,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "da383857b3be1e4514daeba2524359e0", 15141432},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2488,7 +2313,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "6ba98bd2e436739d87ecd2a9b99cabb4", 14730155},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2499,7 +2323,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "d8892f1b8c56c8f7704325460f49b300", 3676175},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2516,7 +2339,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.004", 0, "b7e619e6ecf62fe65d5116a3a422e5f0", 46223872},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	},  #endif // ENABLE_SCI32 @@ -2532,7 +2354,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "7ab2bf8e224b57f75e0cd6e4ba790761", 641688},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -2550,7 +2371,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "7ab2bf8e224b57f75e0cd6e4ba790761", 272747},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -2563,7 +2383,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "a21451ef6fa8179bd4b22c4950004c44", 769897},  		{NULL, 0, NULL, 0}}, Common::JA_JPN, Common::kPlatformPC98, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_01  	}, @@ -2576,7 +2395,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "a21451ef6fa8179bd4b22c4950004c44", 777575},  		{NULL, 0, NULL, 0}}, Common::JA_JPN, Common::kPlatformPC98, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_01  	}, @@ -2593,7 +2411,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "5f3386ef2f2b1254e4a066f5d9027324", 609529},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -2608,7 +2425,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "951299a82a8134ed12c5c18118d45c2f", 644443},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -2619,7 +2435,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "ecace1a2771846b1a8aa1afdd44111a0", 6570147},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2630,7 +2445,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "ec6f5cf369054dd3e5392995e9975b9e", 768218},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2649,7 +2463,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "4c9fc1587545879295cb9627f56a2cb8", 575056},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_01  	}, @@ -2664,7 +2477,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "cd2de58e27665d5853530de93fae7cd6", 983617},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_01  	}, @@ -2682,7 +2494,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "cd2de58e27665d5853530de93fae7cd6", 490794},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_01  	}, @@ -2693,7 +2504,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "b6c69bf6c18bf177492249fe81fc6a6d", 648702},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2704,7 +2514,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "6178ad2e83e58e4671ca03315f7a6498", 5868000},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2715,7 +2524,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "6178ad2e83e58e4671ca03315f7a6498", 5868042},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2727,7 +2535,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "a63974730d294dec0bea10057c36e506", 256014},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2738,7 +2545,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "41ba03f0b188b029132daa3ece0d3e14", 623154},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2750,7 +2556,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "f64fd6aa3977939a86ff30783dd677e1", 11004993},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2761,7 +2566,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "57f22cdc54eeb35fce1f26b31b5c3ee1", 11076197},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2772,7 +2576,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "263dce4aa34c49d3ad29bec889007b1c", 11571394},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2786,7 +2589,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "263dce4aa34c49d3ad29bec889007b1c", 11571394},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	},  #endif @@ -2798,7 +2600,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "57f22cdc54eeb35fce1f26b31b5c3ee1", 11076197},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2809,7 +2610,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.001", 0, "259437fd75fdf51e8207fda8c01fa4fd", 2334384},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2824,7 +2624,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.003", 0, "2a68edd064e5e4937b5e9c74b38f2082", 6860492},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2835,7 +2634,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resmap.001", 0, "70ba2ff04a2b7fb2c52420ba7fbd47c2", 8338},  		{NULL, 0, NULL, 0}}, Common::IT_ITA, Common::kPlatformWindows, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2846,7 +2644,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "4294c6d7510935f2e0a52e302073c951", 262654836},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2856,7 +2653,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "6751b144671e2deed919eb9d284b07eb", 262390692},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformWindows, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2867,7 +2663,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "3a93c6340b54e07e65d0e5583354d186", 10505469},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -2878,7 +2673,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "7fbac0807a044c9543e8ac376d200e59", 4925003},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	},  #endif // ENABLE_SCI32 @@ -2891,7 +2685,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "8e10d4f05c1fd9f883384fa38a898489", 377394},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -2907,7 +2700,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "640ffe1a9acde392cc33cc1b1a528328", 806324},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -2923,7 +2715,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "e19ea4ad131472f9238590f2e1d40289", 1203051},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -2934,7 +2725,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "fd99ea43f57576ded7c86036996346cf", 507642},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -2951,7 +2741,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "7d4ebcb745c0bf8fc42e4013f52ecd49", 1101812},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -2965,7 +2754,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.004", 0, "ceeda7202b96e5c85ecaa88a40a540fc", 761984},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_0,  		SCI_VERSION_0  	}, @@ -2981,7 +2769,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "6d8f34090503ce937e7dbef6cb6cdb6a", 687507},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_0,  		SCI_VERSION_0  	}, @@ -2992,7 +2779,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.001", 0, "ceeda7202b96e5c85ecaa88a40a540fc", 180245},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -3005,7 +2791,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "ceeda7202b96e5c85ecaa88a40a540fc", 688367},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -3018,7 +2803,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "8b55c4875298f45ea5696a5ee8f6a7fe", 703370},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -3035,7 +2819,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.007", 0, "9107c2aa5398e28b5c5406df13491f85", 344287},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		GF_FOR_SCI0_BEFORE_629, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -3048,7 +2831,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "9107c2aa5398e28b5c5406df13491f85", 693573},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_0  	}, @@ -3066,7 +2848,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.006", 0, "ade814bc4d56244c156d9e9bcfebbc11", 664085},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3083,7 +2864,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.006", 0, "67fb188b191d88efe8414af6ea297b93", 672675},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformAmiga, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3095,7 +2875,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "e1f46832cd2458796028e054a0466031", 5502009},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3107,7 +2886,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "e1f46832cd2458796028e054a0466031", 933928},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3124,7 +2902,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "e33019ac19f755ae33fbf49b4fc9066c", 1053294},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3141,7 +2918,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.006", 0, "dfb023e4e2a1e7a00fa18f9ede72a91b", 924059},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3157,7 +2933,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "5f885abd335978e2fd4e5f886d7676c8", 1102880},  		{NULL, 0, NULL, 0}}, Common::IT_ITA, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3170,7 +2945,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "6dc668326cc22cb9e8bd8ca9e68d2a66", 1181249},  		{NULL, 0, NULL, 0}}, Common::JA_JPN, Common::kPlatformPC98, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3183,7 +2957,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.002", 0, "6dc668326cc22cb9e8bd8ca9e68d2a66", 1181249},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC98, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3194,7 +2967,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "63247e3901ab8963d4eece73747832e0", 5157378},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -3211,7 +2983,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "55fae26c2a92f16ef72c1e216e827c0f", 1098328},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3226,7 +2997,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.003", 0, "42a307941edeb1a3be31daeb2e4be90b", 1088408},  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3243,7 +3013,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.005", 0, "b8d6efbd3235329bfe844c794097b2c9", 1098717},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1  	}, @@ -3255,7 +3024,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "bb8ad78793c26bdb3f77498b1d6515a9", 125988},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -3266,7 +3034,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "f4a48705764544d7cc64a7bb22a610df", 6025184},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -3278,7 +3045,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.msg", 0, "7c71cfc36153cfe07b450423a51f7e68", 146282},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -3289,7 +3055,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.map", 0, "5b09168baa2f6e2e22787429b2d72f54", 6492},  		{NULL, 0, NULL, 0}}, Common::IT_ITA, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -3301,7 +3066,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "c4259ab7355aead07773397b1052827d", 41150806},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -3312,7 +3076,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "c4259ab7355aead07773397b1052827d", 41150806},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -3323,7 +3086,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "ab12724e078dea34b624e0d2a38dcd7c", 2272050},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -3334,7 +3096,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "ba87ba91e5bdabb4169dd0df75777722", 40933685},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	},  #endif // ENABLE_SCI32 @@ -3346,7 +3107,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "b3acd9b9dd7fe53c4ee133ac9a1acfab", 2103560},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -3357,7 +3117,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "ecc686e0034fb4d41de077ac7167b3cf", 1947866},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -3368,7 +3127,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"resource.000", 0, "b3acd9b9dd7fe53c4ee133ac9a1acfab", 586560},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_1_1  	}, @@ -3380,7 +3138,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "db3e290481c35c3224e9602e71e4a1f1", 5073868},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -3391,7 +3148,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887},  		{NULL, 0, NULL, 0}}, Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -3403,7 +3159,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		// TODO: depend on one of the patches?  		{NULL, 0, NULL, 0}}, Common::ES_ESP, Common::kPlatformWindows, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -3414,7 +3169,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887},  		{NULL, 0, NULL, 0}}, Common::FR_FRA, Common::kPlatformWindows, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -3425,7 +3179,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887},  		{NULL, 0, NULL, 0}}, Common::DE_DEU, Common::kPlatformWindows, 0, GUIO_NOSPEECH},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	}, @@ -3436,7 +3189,6 @@ static const struct SciGameDescription SciGameDescriptions[] = {  		{"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887},  		{NULL, 0, NULL, 0}}, Common::IT_ITA, Common::kPlatformWindows, 0, GUIO_NONE},  		0, -		SCI_VERSION_AUTODETECT,  		SCI_VERSION_32  	},  #endif // ENABLE_SCI32 @@ -3467,7 +3219,7 @@ static const struct SciGameDescription SciGameDescriptions[] = {  	// FIXME: The vga demo does not have a resource.000/001 file.  	//FANMADE_V("SCI VGA Demo", "00b1abd87bad356b90fcdfcb6132c26f", 8, "", 0, 0), -	{AD_TABLE_END_MARKER, 0, SCI_VERSION_AUTODETECT, SCI_VERSION_0} +	{AD_TABLE_END_MARKER, 0, SCI_VERSION_0}  };  /** @@ -3485,7 +3237,6 @@ static SciGameDescription s_fallbackDesc = {  		GUIO_NONE  	},  	0, -	SCI_VERSION_AUTODETECT,  	SCI_VERSION_0  }; @@ -3575,9 +3326,6 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const Common::FSList &fsl  		}  	} -	if (exePlatform == Common::kPlatformUnknown) -		return 0; -  	// If these files aren't found, it can't be SCI  	if (!foundResMap && !foundRes000)  		return 0; @@ -3588,23 +3336,14 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const Common::FSList &fsl  	s_fallbackDesc.desc.language = Common::UNK_LANG;  	s_fallbackDesc.desc.platform = exePlatform;  	s_fallbackDesc.desc.flags = ADGF_NO_FLAGS; -	s_fallbackDesc.version = SCI_VERSION_0; +	getSciVersionFromString(exeVersionString, &s_fallbackDesc.version, s_fallbackDesc.desc.platform);  	printf("If this is *NOT* a fan-modified version (in particular, not a fan-made\n");  	printf("translation), please, report the data above, including the following\n");  	printf("version number, from the game's executable:\n"); +	printf("Version: %s\n\n", exeVersionString.empty() ? "not found" : exeVersionString.c_str()); -	// Try to parse the executable version -	if (getSciVersionFromString(exeVersionString, &s_fallbackDesc.version, s_fallbackDesc.desc.platform)) { -		printf("Detected version: %s, parsed SCI version: %s\n", -					exeVersionString.c_str(), versionNames[s_fallbackDesc.version]); - -		return (const ADGameDescription *)&s_fallbackDesc; -	} else { -		printf("Couldn't parse the interpreter version: %s (by executable scan)\n", -			exeVersionString.c_str()); -		return NULL; -	} +	return (const ADGameDescription *)&s_fallbackDesc;  }  bool SciMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *gd) const { diff --git a/engines/sci/engine/game.cpp b/engines/sci/engine/game.cpp index fa64957bec..2d9cf6a42b 100644 --- a/engines/sci/engine/game.cpp +++ b/engines/sci/engine/game.cpp @@ -179,7 +179,7 @@ static void _free_graphics_input(EngineState *s) {  }  int game_init_sound(EngineState *s, int sound_flags) { -	if (s->resmgr->_sciVersion >= SCI_VERSION_01) +	if (s->resmgr->sciVersion() >= SCI_VERSION_01)  		sound_flags |= SFX_STATE_FLAG_MULTIPLAY;  	s->sfx_init_flags = sound_flags; diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index 2ccd88b709..362e41a357 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -396,7 +396,7 @@ void Kernel::detectSciFeatures() {  	features = 0;  	// Initialize features based on SCI version -	if (_resmgr->_sciVersion == SCI_VERSION_0) { +	if (_resmgr->sciVersion() == SCI_VERSION_0) {  		features |= kFeatureOldScriptHeader;  		features |= kFeatureOldGfxFunctions;  	} @@ -419,10 +419,10 @@ void Kernel::detectSciFeatures() {  		if (tmp == "motionCue")  			features &= ~kFeatureOldGfxFunctions; -		if (tmp == "egoMoveSpeed" && _resmgr->_sciVersion < SCI_VERSION_1_1) +		if (tmp == "egoMoveSpeed" && _resmgr->sciVersion() < SCI_VERSION_1_1)  			features |= kFeatureLofsAbsolute; -		if (tmp == "sightAngle" && _resmgr->_sciVersion == SCI_VERSION_0) +		if (tmp == "sightAngle" && _resmgr->sciVersion() == SCI_VERSION_0)  			features |= kFeatureSci0Sci1Table;  		if (tmp == "setVol") @@ -642,7 +642,7 @@ void Kernel::mapFunctions() {  	int mapped = 0;  	int ignored = 0;  	uint functions_nr = getKernelNamesSize(); -	uint max_functions_nr = (_resmgr->_sciVersion == SCI_VERSION_0) ? 0x72 : 0x7b; +	uint max_functions_nr = (_resmgr->sciVersion() == SCI_VERSION_0) ? 0x72 : 0x7b;  	if (functions_nr < max_functions_nr) {  		warning("SCI version believed to have %d kernel" @@ -833,7 +833,7 @@ reg_t *kernel_dereference_reg_pointer(EngineState *s, reg_t pointer, int entries  }  void Kernel::setDefaultKernelNames() { -	bool isSci0 = (_resmgr->_sciVersion == SCI_VERSION_0); +	bool isSci0 = (_resmgr->sciVersion() == SCI_VERSION_0);  	int offset = 0;  	// Check if we have a SCI01 game which uses a SCI1 kernel table (e.g. the KQ1 demo @@ -862,7 +862,7 @@ void Kernel::setDefaultKernelNames() {  		}  	} -	if (_resmgr->_sciVersion == SCI_VERSION_1_1) { +	if (_resmgr->sciVersion() == SCI_VERSION_1_1) {  		// HACK: KQ6CD calls unimplemented function 0x26  		_kernelNames[0x26] = "Dummy";  	} @@ -898,10 +898,9 @@ static void vocab_get_knames11(ResourceManager *resmgr, Common::StringList &name  bool Kernel::loadKernelNames() {  	_kernelNames.clear(); -	switch (_resmgr->_sciVersion) { +	switch (_resmgr->sciVersion()) {  	case SCI_VERSION_0:  	case SCI_VERSION_01: -	case SCI_VERSION_01_VGA_ODD:  	case SCI_VERSION_1:  	case SCI_VERSION_1_1:  		setDefaultKernelNames(); diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index d5f094b540..6b481dfc25 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -693,7 +693,7 @@ int _reset_graphics_input(EngineState *s);  static void reconstruct_sounds(EngineState *s) {  	Song *seeker; -	SongIteratorType it_type = s->resmgr->_sciVersion >= SCI_VERSION_01 ? SCI_SONG_ITERATOR_TYPE_SCI1 : SCI_SONG_ITERATOR_TYPE_SCI0; +	SongIteratorType it_type = s->resmgr->sciVersion() >= SCI_VERSION_01 ? SCI_SONG_ITERATOR_TYPE_SCI1 : SCI_SONG_ITERATOR_TYPE_SCI0;  	seeker = s->_sound._songlib._lib; diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp index b7529c33bd..667c429821 100644 --- a/engines/sci/engine/script.cpp +++ b/engines/sci/engine/script.cpp @@ -93,7 +93,6 @@ void script_adjust_opcode_formats(int res_version) {  	case SCI_VERSION_0:  		break;  	case SCI_VERSION_01: -	case SCI_VERSION_01_VGA_ODD:  	case SCI_VERSION_1:  	case SCI_VERSION_1_1:  		g_opcode_formats[op_lofsa][0] = Script_Offset; diff --git a/engines/sci/engine/state.cpp b/engines/sci/engine/state.cpp index f0e9863068..fd45ef5834 100644 --- a/engines/sci/engine/state.cpp +++ b/engines/sci/engine/state.cpp @@ -27,7 +27,7 @@  namespace Sci { -EngineState::EngineState(ResourceManager *res, sci_version_t version, uint32 flags) +EngineState::EngineState(ResourceManager *res, SciVersion version, uint32 flags)  : resmgr(res), _version(version), _flags(flags), _dirseeker(this) {  	widget_serial_counter = 0; diff --git a/engines/sci/engine/state.h b/engines/sci/engine/state.h index a814a20df8..2fa1bd82a6 100644 --- a/engines/sci/engine/state.h +++ b/engines/sci/engine/state.h @@ -126,7 +126,7 @@ public:  		kSegmentLength = 20 /**< Time segment length in ms */  	}; -	SpeedThrottler(sci_version_t version) { +	SpeedThrottler(SciVersion version) {  		if (version >= SCI_VERSION_1_1)  			_maxInstructions = 3300;  		else if (version >= SCI_VERSION_1) @@ -161,7 +161,7 @@ private:  struct EngineState : public Common::Serializable {  public: -	EngineState(ResourceManager *res, sci_version_t version, uint32 flags); +	EngineState(ResourceManager *res, SciVersion version, uint32 flags);  	virtual ~EngineState();  	virtual void saveLoadWithSerializer(Common::Serializer &ser); @@ -171,7 +171,7 @@ public:  	ResourceManager *resmgr; /**< The resource manager */ -	const sci_version_t _version; /**< The approximated patchlevel of the version to emulate */ +	const SciVersion _version; /**< The approximated patchlevel of the version to emulate */  	const uint32 _flags;			/**< Specific game flags */  	Common::String _gameName; /**< Designation of the primary object (which inherits from Game) */ diff --git a/engines/sci/exereader.cpp b/engines/sci/exereader.cpp index c1d279244c..8ac5ed098e 100644 --- a/engines/sci/exereader.cpp +++ b/engines/sci/exereader.cpp @@ -276,7 +276,7 @@ Common::String readSciVersionFromExe(Common::SeekableReadStream *exeStream, Comm  			currentString[9] = 0;  			// Return the current string if it's parseable -			int version; +			SciVersion version;  			if (getSciVersionFromString(currentString, &version, platform)) {  				delete[] buffer;  				return currentString; @@ -296,61 +296,54 @@ Common::String readSciVersionFromExe(Common::SeekableReadStream *exeStream, Comm  	return resultString;  } -bool getSciVersionFromString(Common::String versionString, int *version, Common::Platform platform) { -	// Map non-numeric versions to their numeric counterparts -	Common::String mappedVersion = versionString; +bool getSciVersionFromString(Common::String versionString, SciVersion *version, Common::Platform platform) { +	*version = SCI_VERSION_AUTODETECT; +  	if (platform == Common::kPlatformAmiga) {  		if (versionString.hasPrefix("1.002.")) { -			mappedVersion = "0.000.685"; +			*version = SCI_VERSION_0;  		} else if (versionString.hasPrefix("1.003.")) { -			mappedVersion = "0.001.010"; +			*version = SCI_VERSION_01;  		} else if (versionString.hasPrefix("1.004.")) { -			mappedVersion = "1.000.784"; +			*version = SCI_VERSION_01;  		} else if (versionString.hasPrefix("1.005.")) { -			mappedVersion = "1.000.510"; +			*version = SCI_VERSION_1;  		} else if (versionString == "x.yyy.zzz") {  			// How to map it? +		} else { +			return false;  		} +	} else if (versionString.hasPrefix("0.000.")) { +		*version = SCI_VERSION_0;  	} else if (versionString.hasPrefix("S.old.")) { -		// SCI 01 -		mappedVersion = "0.001."; -		mappedVersion += versionString.c_str() + 6; +		*version = SCI_VERSION_01; +	} else if (versionString.hasPrefix("1.000.")) { +		*version = SCI_VERSION_1; +	} else if (versionString.hasPrefix("1.001.")) { +		*version = SCI_VERSION_1_1; +	} else if (versionString.hasPrefix("2.000.") +		|| versionString.hasPrefix("2.100.") +		|| versionString.hasPrefix("3.000.")) { +		*version = SCI_VERSION_32;  	} else if (versionString.hasPrefix("1.ECO.")  		|| versionString.hasPrefix("1.SQ1.")  		|| versionString.hasPrefix("1.SQ4.")  		|| versionString.hasPrefix("1.LS5.")  		|| versionString.hasPrefix("1.pq3.") -		|| versionString.hasPrefix("FAIRY.")) { -		// SCI 1.0 -		mappedVersion = "1.000."; -		mappedVersion += versionString.c_str() + 6; -	} else if (versionString.hasPrefix("T.A00.")) { -		mappedVersion = "1.000.510"; +		|| versionString.hasPrefix("FAIRY.") +		|| versionString.hasPrefix("T.A00.")) { +		*version = SCI_VERSION_1;  	} else if (versionString.hasPrefix("L.rry.")  		|| versionString.hasPrefix("l.cfs.")) { -		// SCI 1.1 -		mappedVersion = "1.001."; -		mappedVersion += versionString.c_str() + 6; -	} else if (versionString == "x.yyy.yyy") { +		*version = SCI_VERSION_1_1; +	} else if (versionString == "x.yyy.zzz") {  		// How to map it? +	} else { +		// Unknown or not a version number +		return false;  	} -	// Parse to a version number -	char *endptr[3]; -	const char *ver = mappedVersion.c_str(); -	int major = strtol(ver, &endptr[0], 10); -	//int minor = strtol(ver + 2, &endptr[1], 10); -	//int patchlevel = strtol(ver + 6, &endptr[2], 10); - -	if (endptr[0] != ver + 1 || endptr[1] != ver + 5 || *endptr[2] != '\0') { -		warning("Failed to parse version string '%s'", ver); -		return true; -	} - -	//printf("Detected version: %s, parsed version: %s\n", versionString, ver); -	*version = major; - -	return false; +	return true;  }  } // End of namespace Sci diff --git a/engines/sci/exereader.h b/engines/sci/exereader.h index 5349ad3724..c614c4c0da 100644 --- a/engines/sci/exereader.h +++ b/engines/sci/exereader.h @@ -33,7 +33,7 @@ namespace Sci {  Common::Platform getGameExePlatform(Common::SeekableReadStream *exeStream);  Common::String readSciVersionFromExe(Common::SeekableReadStream *exeStream, Common::Platform platform); -bool getSciVersionFromString(Common::String versionString, int *version, Common::Platform platform); +bool getSciVersionFromString(Common::String versionString, SciVersion *version, Common::Platform platform);  } // End of namespace Sci diff --git a/engines/sci/gfx/gfx_resmgr.cpp b/engines/sci/gfx/gfx_resmgr.cpp index bf1c88b4d6..fbae7105c9 100644 --- a/engines/sci/gfx/gfx_resmgr.cpp +++ b/engines/sci/gfx/gfx_resmgr.cpp @@ -55,7 +55,7 @@ GfxResManager::GfxResManager(gfx_options_t *options, GfxDriver *driver, Resource  	gfxr_init_static_palette();  	_portBounds = Common::Rect(0, 10, 320, 200);	// default value, with a titlebar of 10px -	_version = resManager->_volVersion; +	_version = resManager->sciVersion();  	// Workaround for QFG1 VGA (has SCI 1.1 view data with SCI 1 compression)  	if (_version == SCI_VERSION_1 && !strcmp(((SciEngine*)g_engine)->getGameID(), "qfg1")) { diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index 943361332f..b42f36bd63 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -319,7 +319,7 @@ int sci0_get_compression_method(Common::ReadStream &stream) {  	return compressionMethod;  } -int ResourceManager::guessSciVersion() { +SciVersion ResourceManager::guessSciVersion() {  	Common::File file;  	char filename[MAXPATHLEN];  	int compression; @@ -428,7 +428,7 @@ void ResourceManager::scanNewSources() {  				readResourcePatches(source);  				break;  			case kSourceExtMap: -				if (_mapVersion < SCI_VERSION_1) +				if (_mapVersion < kResVersionSci1Late)  					readResourceMapSCI0(source);  				else  					readResourceMapSCI1(source); @@ -453,74 +453,72 @@ void ResourceManager::freeResourceSources() {  	_sources.clear();  } -ResourceManager::ResourceManager(int version, int maxMemory) { +ResourceManager::ResourceManager(int maxMemory) {  	_maxMemory = maxMemory;  	_memoryLocked = 0;  	_memoryLRU = 0;  	_LRU.clear();  	_resMap.clear(); -	_sciVersion = version;  	_audioMapSCI1 = NULL;  	addAppropriateSources(); -	if (version != SCI_VERSION_AUTODETECT) { -		_mapVersion = version; -		_volVersion = version; -	} else { -		_mapVersion = detectMapVersion(); -		_volVersion = detectVolVersion(); -		if (_volVersion == 0 && _mapVersion > 0) { -			warning("Volume version not detected, but map version has been detected. Setting volume version to map version"); -			_volVersion = _mapVersion; -		} +	// FIXME: put this in an Init() function, so that we can error out if detection fails completely -		if (_mapVersion == 0 && _volVersion > 0) { -			warning("Map version not detected, but volume version has been detected. Setting map version to volume version"); -			_mapVersion = _volVersion; -		} +	_mapVersion = detectMapVersion(); +	_volVersion = detectVolVersion(); +	if ((_volVersion == kResVersionUnknown) && (_mapVersion != kResVersionUnknown)) { +		warning("Volume version not detected, but map version has been detected. Setting volume version to map version"); +		_volVersion = _mapVersion; +	} + +	if ((_mapVersion == kResVersionUnknown) && (_volVersion != kResVersionUnknown)) { +		warning("Map version not detected, but volume version has been detected. Setting map version to volume version"); +		_mapVersion = _volVersion;  	} -	debug("Using resource map version %d %s", _mapVersion, versionNames[_mapVersion]); -	debug("Using volume version %d %s", _volVersion, versionNames[_volVersion]); + +	debug("Resmgr: Detected resource map version %d: %s", _mapVersion, versionDescription(_mapVersion)); +	debug("Resmgr: Detected volume version %d: %s", _volVersion, versionDescription(_volVersion));  	scanNewSources();  	addInternalSources();  	scanNewSources(); -	if (version == SCI_VERSION_AUTODETECT) -		switch (_mapVersion) { -		case SCI_VERSION_0: -			if (testResource(ResourceId(kResourceTypeVocab, VOCAB_RESOURCE_SCI0_MAIN_VOCAB))) { -				version = guessSciVersion() ? SCI_VERSION_01 : SCI_VERSION_0; -			} else if (testResource(ResourceId(kResourceTypeVocab, VOCAB_RESOURCE_SCI1_MAIN_VOCAB))) { -				version = guessSciVersion(); -				if (version != SCI_VERSION_01) { -					version = testResource(ResourceId(kResourceTypeVocab, 912)) ? SCI_VERSION_0 : SCI_VERSION_01; -				} -			} else { -				version = guessSciVersion() ? SCI_VERSION_01 : SCI_VERSION_0; +	switch (_mapVersion) { +	case kResVersionSci0Sci1Early: +		if (testResource(ResourceId(kResourceTypeVocab, VOCAB_RESOURCE_SCI0_MAIN_VOCAB))) { +			_sciVersion = guessSciVersion() ? SCI_VERSION_01 : SCI_VERSION_0; +		} else if (testResource(ResourceId(kResourceTypeVocab, VOCAB_RESOURCE_SCI1_MAIN_VOCAB))) { +			_sciVersion = guessSciVersion(); +			if (_sciVersion != SCI_VERSION_01) { +				_sciVersion = testResource(ResourceId(kResourceTypeVocab, 912)) ? SCI_VERSION_0 : SCI_VERSION_01;  			} -			break; -		case SCI_VERSION_01_VGA_ODD: -			version = _mapVersion; -			break; -		case SCI_VERSION_1: -			_sciVersion = version = SCI_VERSION_1; -			break; -		case SCI_VERSION_1_1: -			// No need to handle SCI 1.1 here - it was done in resource_map.cpp -			version = SCI_VERSION_1_1; -			break; -		default: -			version = SCI_VERSION_AUTODETECT; +		} else { +			_sciVersion = guessSciVersion() ? SCI_VERSION_01 : SCI_VERSION_0;  		} +		break; +	case kResVersionSci1Middle: +		_sciVersion = SCI_VERSION_01; +		break; +	case kResVersionSci1Late: +		_sciVersion = SCI_VERSION_1; +		break; +	case kResVersionSci11: +		_sciVersion = SCI_VERSION_1_1; +		break; +	case kResVersionSci32: +		_sciVersion = SCI_VERSION_32; +		break; +	default: +		_sciVersion = SCI_VERSION_AUTODETECT; +	}  	_isVGA = false;  	// Determine if the game is using EGA graphics or not -	if (version == SCI_VERSION_0) { +	if (_sciVersion == SCI_VERSION_0) {  		_isVGA = false;		// There is no SCI0 VGA game -	} else if (version >= SCI_VERSION_1_1) { +	} else if (_sciVersion >= SCI_VERSION_1_1) {  		_isVGA = true;		// There is no SCI11 EGA game  	} else {  		// SCI01 or SCI1: EGA games have the second byte of their views set @@ -538,12 +536,11 @@ ResourceManager::ResourceManager(int version, int maxMemory) {  	}  	// Workaround for QFG1 VGA (has SCI 1.1 view data with SCI 1 compression) -	if (version == SCI_VERSION_1 && !strcmp(((SciEngine*)g_engine)->getGameID(), "qfg1")) { +	if (_sciVersion == SCI_VERSION_1 && !strcmp(((SciEngine*)g_engine)->getGameID(), "qfg1")) {  		debug("Resmgr: Detected QFG1 VGA");  		_isVGA = true;  	} -	_sciVersion = version;  	// temporary version printout - should be reworked later  	switch (_sciVersion) {  	case SCI_VERSION_0: @@ -552,9 +549,6 @@ ResourceManager::ResourceManager(int version, int maxMemory) {  	case SCI_VERSION_01:  		debug("Resmgr: Detected SCI01");  		break; -	case SCI_VERSION_01_VGA_ODD: -		debug("Resmgr: Detected SCI01VGA - Jones/CD or similar"); -		break;  	case SCI_VERSION_1:  		debug("Resmgr: Detected SCI1");  		break; @@ -713,7 +707,26 @@ void ResourceManager::unlockResource(Resource *res) {  	freeOldResources();  } -int ResourceManager::detectMapVersion() { +const char *ResourceManager::versionDescription(ResVersion version) const { +	switch (version) { +	case kResVersionUnknown: +		return "Unknown"; +	case kResVersionSci0Sci1Early: +		return "SCI0 / Early SCI1"; +	case kResVersionSci1Middle: +		return "Middle SCI1"; +	case kResVersionSci1Late: +		return "Late SCI1"; +	case kResVersionSci11: +		return "SCI1.1"; +	case kResVersionSci32: +		return "SCI32"; +	} + +	return "Version not valid"; +} + +ResourceManager::ResVersion ResourceManager::detectMapVersion() {  	Common::File file;  	byte buff[6];  	ResourceSource *rsrc= 0; @@ -728,7 +741,7 @@ int ResourceManager::detectMapVersion() {  	}  	if (file.isOpen() == false) {  		error("Failed to open resource map file"); -		return SCI_VERSION_AUTODETECT; +		return kResVersionUnknown;  	}  	// detection  	// SCI0 and SCI01 maps have last 6 bytes set to FF @@ -739,9 +752,9 @@ int ResourceManager::detectMapVersion() {  		file.seek(0, SEEK_SET);  		while (file.read(buff, 6) == 6 && !(buff[0] == 0xFF && buff[1] == 0xFF && buff[2] == 0xFF)) {  			if (getVolume(rsrc, (buff[5] & 0xFC) >> 2) == NULL) -				return SCI_VERSION_01_VGA_ODD; +				return kResVersionSci1Middle;  		} -		return SCI_VERSION_0; +		return kResVersionSci0Sci1Early;  	}  	// SCI1 and SCI1.1 maps consist of a fixed 3-byte header, a directory list (3-bytes each) that has one entry @@ -750,7 +763,7 @@ int ResourceManager::detectMapVersion() {  	uint16 directoryOffset = 0;  	uint16 lastDirectoryOffset = 0;  	uint16 directorySize = 0; -	int    mapDetected = 0; +	ResVersion mapDetected = kResVersionUnknown;  	file.seek(0, SEEK_SET);  	while (!file.eos()) {  		directoryType = file.readByte(); @@ -763,9 +776,9 @@ int ResourceManager::detectMapVersion() {  		if (lastDirectoryOffset) {  			directorySize = directoryOffset - lastDirectoryOffset;  			if ((directorySize % 5) && (directorySize % 6 == 0)) -				mapDetected = SCI_VERSION_1; +				mapDetected = kResVersionSci1Late;  			if ((directorySize % 5 == 0) && (directorySize % 6)) -				mapDetected = SCI_VERSION_1_1; +				mapDetected = kResVersionSci11;  		}  		if (directoryType==0xFF) {  			// FFh entry needs to point to EOF @@ -773,7 +786,7 @@ int ResourceManager::detectMapVersion() {  				break;  			if (mapDetected)   				return mapDetected; -			return SCI_VERSION_1; +			return kResVersionSci1Late;  		}  		lastDirectoryOffset = directoryOffset;  	} @@ -789,13 +802,13 @@ int ResourceManager::detectMapVersion() {  	// last directory entry instead of the last checked directory entry.  	file.seek(lastDirectoryOffset - 7, SEEK_SET);  	if (file.readByte() == 0xFF && file.readUint16LE() == file.size()) -		return SCI_VERSION_32; // TODO : check if there is a difference between these maps +		return kResVersionSci32; // TODO : check if there is a difference between these maps  #endif -	return SCI_VERSION_AUTODETECT; +	return kResVersionUnknown;  } -int ResourceManager::detectVolVersion() { +ResourceManager::ResVersion ResourceManager::detectVolVersion() {  	Common::File file;  	ResourceSource *rsrc;  	for (Common::List<ResourceSource *>::iterator it = _sources.begin(); it != _sources.end(); ++it) { @@ -808,7 +821,7 @@ int ResourceManager::detectVolVersion() {  	}  	if (file.isOpen() == false) {  		error("Failed to open volume file"); -		return SCI_VERSION_AUTODETECT; +		return kResVersionUnknown;  	}  	// SCI0 volume format:  {wResId wPacked+4 wUnpacked wCompression} = 8 bytes  	// SCI1 volume format:  {bResType wResNumber wPacked+4 wUnpacked wCompression} = 9 bytes @@ -818,34 +831,34 @@ int ResourceManager::detectVolVersion() {  	// Checking 1MB of data should be enough to determine the version  	uint16 resId, wCompression;  	uint32 dwPacked, dwUnpacked; -	int curVersion = SCI_VERSION_0; +	ResVersion curVersion = kResVersionSci0Sci1Early;  	bool failed = false;  	// Check for SCI0, SCI1, SCI1.1 and SCI32 v2 (Gabriel Knight 1 CD) formats  	while (!file.eos() && file.pos() < 0x100000) { -		if (curVersion > SCI_VERSION_0) +		if (curVersion > kResVersionSci0Sci1Early)  			file.readByte();  		resId = file.readUint16LE(); -		dwPacked = (curVersion < SCI_VERSION_32) ? file.readUint16LE() : file.readUint32LE(); -		dwUnpacked = (curVersion < SCI_VERSION_32) ? file.readUint16LE() : file.readUint32LE(); -		wCompression = (curVersion < SCI_VERSION_32) ? file.readUint16LE() : file.readUint32LE(); +		dwPacked = (curVersion < kResVersionSci32) ? file.readUint16LE() : file.readUint32LE(); +		dwUnpacked = (curVersion < kResVersionSci32) ? file.readUint16LE() : file.readUint32LE(); +		wCompression = (curVersion < kResVersionSci32) ? file.readUint16LE() : file.readUint32LE();  		if (file.eos())  			return curVersion; -		int chk = (curVersion == SCI_VERSION_0) ? 4 : 20; -		int offs = curVersion < SCI_VERSION_1_1 ? 4 : 0; -		if ((curVersion < SCI_VERSION_32 && wCompression > chk) -				|| (curVersion == SCI_VERSION_32 && wCompression != 0 && wCompression != 32) +		int chk = (curVersion == kResVersionSci0Sci1Early) ? 4 : 20; +		int offs = curVersion < kResVersionSci11 ? 4 : 0; +		if ((curVersion < kResVersionSci32 && wCompression > chk) +				|| (curVersion == kResVersionSci32 && wCompression != 0 && wCompression != 32)  				|| (wCompression == 0 && dwPacked != dwUnpacked + offs)  		        || (dwUnpacked < dwPacked - offs)) {  			// Retry with a newer SCI version -			if (curVersion == SCI_VERSION_0) { -				curVersion = SCI_VERSION_1; -			} else if (curVersion == SCI_VERSION_1) { -				curVersion = SCI_VERSION_1_1; -			} else if (curVersion == SCI_VERSION_1_1) { -				curVersion = SCI_VERSION_32; +			if (curVersion == kResVersionSci0Sci1Early) { +				curVersion = kResVersionSci1Late; +			} else if (curVersion == kResVersionSci1Late) { +				curVersion = kResVersionSci11; +			} else if (curVersion == kResVersionSci11) { +				curVersion = kResVersionSci32;  			} else {  				// All version checks failed, exit loop  				failed = true; @@ -856,11 +869,11 @@ int ResourceManager::detectVolVersion() {  			continue;  		} -		if (curVersion < SCI_VERSION_1_1) +		if (curVersion < kResVersionSci11)  			file.seek(dwPacked - 4, SEEK_CUR); -		else if (curVersion == SCI_VERSION_1_1) +		else if (curVersion == kResVersionSci11)  			file.seek((9 + dwPacked) % 2 ? dwPacked + 1 : dwPacked, SEEK_CUR); -		else if (curVersion == SCI_VERSION_32) +		else if (curVersion == kResVersionSci32)  			file.seek(dwPacked, SEEK_CUR);//(9 + wPacked) % 2 ? wPacked + 1 : wPacked, SEEK_CUR);  	} @@ -868,7 +881,7 @@ int ResourceManager::detectVolVersion() {  		return curVersion;  	// Failed to detect volume version -	return SCI_VERSION_AUTODETECT; +	return kResVersionUnknown;  }  // version-agnostic patch application @@ -997,10 +1010,8 @@ int ResourceManager::readResourceMapSCI0(ResourceSource *map) {  	file.seek(0, SEEK_SET); -	byte bMask = 0xFC; -	// FIXME: The code above seems to give correct results for Jones -	//byte bMask = _mapVersion == SCI_VERSION_01_VGA_ODD ? 0xF0 : 0xFC; -	byte bShift = _mapVersion == SCI_VERSION_01_VGA_ODD ? 28 : 26; +	byte bMask = (_mapVersion == kResVersionSci1Middle) ? 0xF0 : 0xFC; +	byte bShift = (_mapVersion == kResVersionSci1Middle) ? 28 : 26;  	do {  		id = file.readUint16LE(); @@ -1040,7 +1051,7 @@ int ResourceManager::readResourceMapSCI1(ResourceSource *map) {  	resource_index_t resMap[32];  	memset(resMap, 0, sizeof(resource_index_t) * 32);  	byte type = 0, prevtype = 0; -	byte nEntrySize = _mapVersion == SCI_VERSION_1_1 ? SCI11_RESMAP_ENTRIES_SIZE : SCI1_RESMAP_ENTRIES_SIZE; +	byte nEntrySize = _mapVersion == kResVersionSci11 ? SCI11_RESMAP_ENTRIES_SIZE : SCI1_RESMAP_ENTRIES_SIZE;  	ResourceId resId;  	// Read resource type and offsets to resource offsets block from .MAP file @@ -1062,7 +1073,7 @@ int ResourceManager::readResourceMapSCI1(ResourceSource *map) {  		for (int i = 0; i < resMap[type].wSize; i++) {  			uint16 number = file.readUint16LE();  			int volume_nr = 0; -			if (_mapVersion == SCI_VERSION_1_1) { +			if (_mapVersion == kResVersionSci11) {  				// offset stored in 3 bytes  				off = file.readUint16LE();  				off |= file.readByte() << 16; @@ -1070,7 +1081,7 @@ int ResourceManager::readResourceMapSCI1(ResourceSource *map) {  			} else {  				// offset/volume stored in 4 bytes  				off = file.readUint32LE(); -				if (_mapVersion < SCI_VERSION_1_1) { +				if (_mapVersion < kResVersionSci11) {  					volume_nr = off >> 28; // most significant 4 bits  					off &= 0x0FFFFFFF;     // least significant 28 bits  				} else { @@ -1351,7 +1362,8 @@ int ResourceManager::readResourceInfo(Resource *res, Common::File *file,  	ResourceType type;  	switch (_volVersion) { -	case SCI_VERSION_0: +	case kResVersionSci0Sci1Early: +	case kResVersionSci1Middle:  		w = file->readUint16LE();  		type = (ResourceType)(w >> 11);  		number = w & 0x7FF; @@ -1359,14 +1371,14 @@ int ResourceManager::readResourceInfo(Resource *res, Common::File *file,  		szUnpacked = file->readUint16LE();  		wCompression = file->readUint16LE();  		break; -	case SCI_VERSION_1: +	case kResVersionSci1Late:  		type = (ResourceType)(file->readByte() & 0x7F);  		number = file->readUint16LE();  		szPacked = file->readUint16LE() - 4;  		szUnpacked = file->readUint16LE();  		wCompression = file->readUint16LE();  		break; -	case SCI_VERSION_1_1: +	case kResVersionSci11:  		type = (ResourceType)(file->readByte() & 0x7F);  		number = file->readUint16LE();  		szPacked = file->readUint16LE(); @@ -1374,7 +1386,7 @@ int ResourceManager::readResourceInfo(Resource *res, Common::File *file,  		wCompression = file->readUint16LE();  		break;  #ifdef ENABLE_SCI32 -	case SCI_VERSION_32: +	case kResVersionSci32:  		type = (ResourceType)(file->readByte() &0x7F);  		number = file->readUint16LE();  		szPacked = file->readUint32LE(); diff --git a/engines/sci/resource.h b/engines/sci/resource.h index b212a36710..3a51b3908e 100644 --- a/engines/sci/resource.h +++ b/engines/sci/resource.h @@ -45,6 +45,16 @@ namespace Sci {  /** The maximum allowed size for a compressed or decompressed resource */  #define SCI_MAX_RESOURCE_SIZE 0x0400000 +/** SCI versions */ +enum SciVersion { +	SCI_VERSION_AUTODETECT = 0, +	SCI_VERSION_0 = 1, +	SCI_VERSION_01 = 2, +	SCI_VERSION_1 = 3, +	SCI_VERSION_1_1 = 4, +	SCI_VERSION_32 = 5 +}; +  /** Resource status types */  enum ResourceStatus {  	kResStatusNoMalloc = 0, @@ -206,13 +216,24 @@ typedef Common::HashMap<ResourceId, Resource *, ResourceIdHash, ResourceIdEqualT  class ResourceManager {  public: -	int _sciVersion; //!< SCI resource version to use */ -	int _mapVersion; //!< RESOURCE.MAP version -	int _volVersion; //!< RESOURCE.0xx version +	enum ResVersion { +		kResVersionUnknown, +		kResVersionSci0Sci1Early, +		kResVersionSci1Middle, +		kResVersionSci1Late, +		kResVersionSci11, +		kResVersionSci32 +	};  	bool isVGA() const { return _isVGA; }  	/** +	 * Returns the SCI version as detected by the resource manager +	 * @return SCI version +	 */ +	SciVersion sciVersion() const { return _sciVersion; } + +	/**  	 * Creates a new SCI resource manager.  	 * @param version		The SCI version to look for; use SCI_VERSION_AUTODETECT  	 *						in the default case. @@ -222,7 +243,7 @@ public:  	 *    for resources which are not explicitly locked. However, a warning will be  	 *    issued whenever this limit is exceeded.  	 */ -	ResourceManager(int version, int maxMemory); +	ResourceManager(int maxMemory);  	~ResourceManager();  	/** @@ -272,6 +293,9 @@ protected:  	ResourceMap _resMap;  	Common::List<Common::File *> _volumeFiles; //!< list of opened volume files  	ResourceSource *_audioMapSCI1; //!< Currently loaded audio map for SCI1 +	ResVersion _volVersion; //!< RESOURCE.0xx version +	ResVersion _mapVersion; //!< RESOURCE.MAP version +	SciVersion _sciVersion; //!< Detected SCI version */  	/**  	 * Add a path to the resource manager's list of sources. @@ -315,6 +339,13 @@ protected:  	int addInternalSources();  	void freeResourceSources(); +	/** +	 * Returns a string describing a ResVersion +	 * @param version: The resource version +	 * @return: The description of version +	 */ +	const char *versionDescription(ResVersion version) const; +  	Common::File *getVolumeFile(const char *filename);  	void loadResource(Resource *res);  	bool loadPatch(Resource *res, Common::File &file); @@ -328,8 +359,8 @@ protected:  	void removeAudioResource(ResourceId resId);  	/**--- Resource map decoding functions ---*/ -	int detectMapVersion(); -	int detectVolVersion(); +	ResVersion detectMapVersion(); +	ResVersion detectVolVersion();  	/**  	 * Reads the SCI0 resource.map file from a local directory. @@ -372,7 +403,7 @@ protected:  	void addToLRU(Resource *res);  	void removeFromLRU(Resource *res); -	int guessSciVersion(); +	SciVersion guessSciVersion();  };  } // End of namespace Sci diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index 65d0a4753a..b4fe197962 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -43,11 +43,10 @@ namespace Sci {  class GfxDriver; -const char *versionNames[7] = { +const char *versionNames[6] = {  	"Autodetected",  	"SCI0",  	"SCI01", -	"SCI01 VGA ODD",  	"SCI1",  	"SCI1.1",  	"SCI32" @@ -129,20 +128,23 @@ Common::Error SciEngine::run() {  	// FIXME/TODO: Move some of the stuff below to init() -	const sci_version_t version = getVersion(); +	SciVersion version = getVersion();  	const uint32 flags = getFlags(); -	int res_version = getResourceVersion(); -	_resmgr = new ResourceManager(res_version, 256 * 1024); +	_resmgr = new ResourceManager(256 * 1024);  	if (!_resmgr) {  		printf("No resources found, aborting...\n");  		return Common::kNoGameDataFoundError;  	} +	// When version is set to autodetect, use version as determined by resource manager +	if (version == SCI_VERSION_AUTODETECT) +		version = _resmgr->sciVersion(); +  	_kernel = new Kernel(_resmgr);  	_vocabulary = new Vocabulary(_resmgr); -	script_adjust_opcode_formats(_resmgr->_sciVersion); +	script_adjust_opcode_formats(_resmgr->sciVersion());  #if 0  	printf("Mapping instruments to General Midi\n"); @@ -209,7 +211,7 @@ Common::Error SciEngine::run() {  	// Default config ends  #endif -	if (gfxop_init(_resmgr->_sciVersion, &gfx_state, &gfx_options, _resmgr)) { +	if (gfxop_init(_resmgr->sciVersion(), &gfx_state, &gfx_options, _resmgr)) {  		warning("Graphics initialization failed. Aborting...");  		return Common::kUnknownError;  	} @@ -262,14 +264,10 @@ const char* SciEngine::getGameID() const {  	return _gameDescription->desc.gameid;  } -int SciEngine::getVersion() const { +SciVersion SciEngine::getVersion() const {  	return _gameDescription->version;  } -int SciEngine::getResourceVersion() const { -	return _gameDescription->res_version; -} -  Common::Language SciEngine::getLanguage() const {  	return _gameDescription->desc.language;  } diff --git a/engines/sci/sci.h b/engines/sci/sci.h index 886a579799..43c0b9f8f8 100644 --- a/engines/sci/sci.h +++ b/engines/sci/sci.h @@ -66,21 +66,10 @@ enum kDebugLevels {  struct SciGameDescription {  	ADGameDescription desc;  	uint32 flags; -	int res_version; -	int version; +	SciVersion version;  }; -enum SciGameVersions { -	SCI_VERSION_AUTODETECT = 0, -	SCI_VERSION_0 = 1, -	SCI_VERSION_01 = 2, -	SCI_VERSION_01_VGA_ODD = 3, -	SCI_VERSION_1 = 4, -	SCI_VERSION_1_1 = 5, -	SCI_VERSION_32 = 6 -}; - -extern const char *versionNames[7]; +extern const char *versionNames[6];  enum SciGameFlags {  	// SCI0 flags @@ -105,7 +94,7 @@ public:  	const char* getGameID() const;  	int getResourceVersion() const; -	int getVersion() const; +	SciVersion getVersion() const;  	Common::Language getLanguage() const;  	Common::Platform getPlatform() const;  	uint32 getFlags() const; diff --git a/engines/sci/sfx/softseq/adlib.cpp b/engines/sci/sfx/softseq/adlib.cpp index 41c7c63fc9..8d253a6b85 100644 --- a/engines/sci/sfx/softseq/adlib.cpp +++ b/engines/sci/sfx/softseq/adlib.cpp @@ -641,7 +641,7 @@ int MidiPlayer_Adlib::open(ResourceManager *resmgr) {  	static_cast<MidiDriver_Adlib *>(_driver)->loadResource(res); -	return static_cast<MidiDriver_Adlib *>(_driver)->open(resmgr->_sciVersion == SCI_VERSION_0); +	return static_cast<MidiDriver_Adlib *>(_driver)->open(resmgr->sciVersion() == SCI_VERSION_0);  }  } // End of namespace Sci diff --git a/engines/sci/vocabulary.cpp b/engines/sci/vocabulary.cpp index 5253e7885b..7201ad54ac 100644 --- a/engines/sci/vocabulary.cpp +++ b/engines/sci/vocabulary.cpp @@ -91,7 +91,7 @@ Vocabulary::Vocabulary(ResourceManager *resmgr) : _resmgr(resmgr) {  	debug(2, "Initializing vocabulary"); -	if (_resmgr->_sciVersion <= SCI_VERSION_01 && loadParserWords()) { +	if (_resmgr->sciVersion() <= SCI_VERSION_01 && loadParserWords()) {  		loadSuffixes();  		if (loadBranches())  			// Now build a GNF grammar out of this diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp index 42e49afcc1..63ac952265 100644 --- a/engines/scumm/dialogs.cpp +++ b/engines/scumm/dialogs.cpp @@ -471,10 +471,13 @@ ScummMenuDialog::~ScummMenuDialog() {  	delete _loadDialog;  } -void ScummMenuDialog::reflowLayout() { -	if (!_vm->canSaveGameStateCurrently()) -		_saveButton->setEnabled(false); +int ScummMenuDialog::runModal() { +	_saveButton->setEnabled(_vm->canSaveGameStateCurrently()); +	return ScummDialog::runModal(); +} +void ScummMenuDialog::reflowLayout() { +	_saveButton->setEnabled(_vm->canSaveGameStateCurrently());  	Dialog::reflowLayout();  } @@ -745,7 +748,7 @@ InfoDialog::InfoDialog(ScummEngine *scumm, int res)  	_message = queryResString(res);  	// Width and height are dummy -	_text = new StaticTextWidget(this, 4, 4, 10, 10, _message, kTextAlignCenter); +	_text = new StaticTextWidget(this, 0, 0, 10, 10, _message, kTextAlignCenter);  }  InfoDialog::InfoDialog(ScummEngine *scumm, const String& message) @@ -754,7 +757,7 @@ InfoDialog::InfoDialog(ScummEngine *scumm, const String& message)  	_message = message;  	// Width and height are dummy -	_text = new StaticTextWidget(this, 4, 4, 10, 10, _message, kTextAlignCenter); +	_text = new StaticTextWidget(this, 0, 0, 10, 10, _message, kTextAlignCenter);  }  void InfoDialog::setInfoText(const String& message) { @@ -775,7 +778,7 @@ void InfoDialog::reflowLayout() {  	_x = (screenW - width) / 2;  	_y = (screenH - height) / 2; -	_text->setSize(_w - 8, _h); +	_text->setSize(_w, _h);  }  const Common::String InfoDialog::queryResString(int stringno) { diff --git a/engines/scumm/dialogs.h b/engines/scumm/dialogs.h index d4ecbde534..85b562ed67 100644 --- a/engines/scumm/dialogs.h +++ b/engines/scumm/dialogs.h @@ -90,6 +90,7 @@ public:  	virtual void reflowLayout(); +	int runModal();  protected:  	ScummEngine		*_vm; diff --git a/engines/scumm/he/script_v60he.cpp b/engines/scumm/he/script_v60he.cpp index f186495f81..7c109b1dcd 100644 --- a/engines/scumm/he/script_v60he.cpp +++ b/engines/scumm/he/script_v60he.cpp @@ -115,9 +115,10 @@ int ScummEngine_v60he::convertFilePath(byte *dst, int dstSize) {  	int r = 0;  	if (dst[len - 3] == 's' && dst[len - 2] == 'g') { // Save Game File  		// Change filename prefix to target name, for save game files. -		char saveName[20]; +		char saveName[40]; +		memset(saveName, 0, sizeof(saveName));  		sprintf(saveName, "%s.sg%c", _targetName.c_str(), dst[len - 1]); -		memcpy(dst, saveName, 20); +		memcpy(dst, saveName, 40);  	} else if (dst[0] == '.' && dst[1] == '/') { // Game Data Path  		// The default game data path is set to './' by ScummVM  		r = 2; diff --git a/engines/sword2/sprite.cpp b/engines/sword2/sprite.cpp index 1e55792adb..39abb8efe9 100644 --- a/engines/sword2/sprite.cpp +++ b/engines/sword2/sprite.cpp @@ -341,7 +341,7 @@ void Screen::recomposeCompPsxSprite(SpriteInfo *s) {  	uint16 noStripes = (s->w / 254) + ((s->w % 254) ? 1 : 0);  	uint16 lastStripeSize = (s->w % 254) ? s->w % 254 : 254;  	byte *buffer = (byte *)malloc(s->w * s->h / 2); -	byte *stripeBuffer = (byte *)malloc(254 * s->h);; +	byte *stripeBuffer = (byte *)malloc(254 * s->h);  	memset(buffer, 0, s->w * s->h / 2);  	uint32 skipData = 0; diff --git a/engines/tinsel/actors.cpp b/engines/tinsel/actors.cpp index e9d0c9f79f..15211c60aa 100644 --- a/engines/tinsel/actors.cpp +++ b/engines/tinsel/actors.cpp @@ -1185,7 +1185,7 @@ SCNHANDLE GetActorTalkFilm(int ano) {  void SetActorTalking(int ano, bool tf) {  	assert(ano > 0 && ano <= NumActors); // illegal actor number -	actorInfo[ano - 1].bTalking = tf;; +	actorInfo[ano - 1].bTalking = tf;  }  bool ActorIsTalking(int ano) { diff --git a/engines/tinsel/scene.cpp b/engines/tinsel/scene.cpp index 0b563376f8..a9ad9617c0 100644 --- a/engines/tinsel/scene.cpp +++ b/engines/tinsel/scene.cpp @@ -132,7 +132,7 @@ const SCENE_STRUC *GetSceneStruc(const byte *pStruc) {  	// Copy appropriate fields into tempStruc, and return a pointer to it  	const byte *p = pStruc; -	memset(&tempStruc, sizeof(SCENE_STRUC), 0); +	memset(&tempStruc, 0, sizeof(SCENE_STRUC));  	tempStruc.numEntrance = READ_UINT32(p); p += sizeof(uint32);  	tempStruc.numPoly = READ_UINT32(p); p += sizeof(uint32); diff --git a/engines/tinsel/tinlib.cpp b/engines/tinsel/tinlib.cpp index 957c4f7626..b97f8841ef 100644 --- a/engines/tinsel/tinlib.cpp +++ b/engines/tinsel/tinlib.cpp @@ -359,7 +359,7 @@ typedef SCROLL_MONITOR *PSCROLL_MONITOR;   */  static void ScrollMonitorProcess(CORO_PARAM, const void *param) {  	int		Loffset, Toffset; -	const SCROLL_MONITOR *psm = (const SCROLL_MONITOR *)param;; +	const SCROLL_MONITOR *psm = (const SCROLL_MONITOR *)param;  	// COROUTINE  	CORO_BEGIN_CONTEXT; diff --git a/engines/tucker/tucker.cpp b/engines/tucker/tucker.cpp index 09e9a0d38a..05cbcacd34 100644 --- a/engines/tucker/tucker.cpp +++ b/engines/tucker/tucker.cpp @@ -687,7 +687,7 @@ void TuckerEngine::setupNewLocation() {  	_fadePaletteCounter = 0;  	_mainLoopCounter2 = 0;  	_mainLoopCounter1 = 0; -	_characterFacingDirection = 0;; +	_characterFacingDirection = 0;  	_skipPanelObjectUnderCursor = 0;  	_locationMaskIgnore = 0;  	_backgroundSprOffset = 0; diff --git a/graphics/scaler/scale2x.h b/graphics/scaler/scale2x.h index cefa14f22a..a6365c113e 100644 --- a/graphics/scaler/scale2x.h +++ b/graphics/scaler/scale2x.h @@ -25,6 +25,11 @@  #define __restrict__  #endif +#ifdef __sgi +#define __restrict__ __restrict +#endif + +  typedef unsigned char scale2x_uint8;  typedef unsigned short scale2x_uint16;  typedef unsigned scale2x_uint32; diff --git a/graphics/scaler/scale3x.h b/graphics/scaler/scale3x.h index 3f24d884e1..671a207570 100644 --- a/graphics/scaler/scale3x.h +++ b/graphics/scaler/scale3x.h @@ -25,6 +25,10 @@  #define __restrict__  #endif +#ifdef __sgi +#define __restrict__ __restrict +#endif +  typedef unsigned char scale3x_uint8;  typedef unsigned short scale3x_uint16;  typedef unsigned scale3x_uint32; diff --git a/gui/TabWidget.cpp b/gui/TabWidget.cpp index 9b77b2f00c..3eb45297f3 100644 --- a/gui/TabWidget.cpp +++ b/gui/TabWidget.cpp @@ -91,7 +91,37 @@ int TabWidget::addTab(const String &title) {  	int numTabs = _tabs.size(); +	// HACK: Nintendo DS uses a custom config dialog. This dialog does not work with +	// our default "Globals.TabWidget.Tab.Width" setting. +	// +	// TODO: Add proper handling in the theme layout for such cases. +	// +	// There are different solutions to this problem: +	//  - offer a "Tab.Width" setting per tab widget and thus let the Ninteno DS +	//    backend set a default value for its special dialog. +	// +	//  - change our themes to use auto width calculaction by default +	// +	//  - change "Globals.TabWidget.Tab.Width" to be the minimal tab width setting and +	//    rename it accordingly. +	//    Actually this solution is pretty similar to our HACK for the Nintendo DS +	//    backend. This hack enables auto width calculation by default with the +	//    "Globals.TabWidget.Tab.Width" value as minimal width for the tab buttons. +	// +	//  - we might also consider letting every tab button having its own width. +	// +	//  - other solutions you can think of, which are hopefully less evil ;-). +	// +	// Of course also the Ninteno DS' dialog should be in our layouting engine, instead +	// of being hard coded like it is right now. +	// +	// There are checks for __DS__ all over this source file to take care of the +	// aforemnetioned problem. +#ifdef __DS__ +	if (true) { +#else  	if (g_gui.xmlEval()->getVar("Globals.TabWidget.Tab.Width") == 0) { +#endif  		if (_tabWidth == 0)  			_tabWidth = 40;  		// Determine the new tab width @@ -217,6 +247,10 @@ void TabWidget::reflowLayout() {  	if (_tabWidth == 0) {  		_tabWidth = 40; +#ifdef __DS__ +	} +	if (true) { +#endif  		int maxWidth = _w / _tabs.size();  		for (uint i = 0; i < _tabs.size(); ++i) { diff --git a/gui/options.cpp b/gui/options.cpp index e941cd6244..a0e1f0d9fe 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -744,10 +744,10 @@ int OptionsDialog::getSubtitleMode(bool subtitles, bool speech_mute) {  }  void OptionsDialog::reflowLayout() { -	Dialog::reflowLayout(); -  	if (_graphicsTabId != -1 && _tabWidget)  		_tabWidget->setTabTitle(_graphicsTabId, g_system->getOverlayWidth() > 320 ? "Graphics" : "GFX"); + +	Dialog::reflowLayout();  }  #pragma mark - diff --git a/gui/saveload.cpp b/gui/saveload.cpp index f859c706fb..ce700c181e 100644 --- a/gui/saveload.cpp +++ b/gui/saveload.cpp @@ -235,6 +235,11 @@ void SaveLoadChooser::updateSelection(bool redraw) {  	bool isWriteProtected = false;  	bool startEditMode = _list->isEditable(); +	_gfxWidget->setGfx(-1, -1, _fillR, _fillG, _fillB); +	_date->setLabel("No date saved"); +	_time->setLabel("No time saved"); +	_playtime->setLabel("No playtime saved"); +  	if (selItem >= 0 && !_list->getSelectedString().empty() && _metaInfoSupport) {  		SaveStateDescriptor desc = (*_plugin)->querySaveMetaInfos(_target.c_str(), atoi(_saveList[selItem].save_slot().c_str())); @@ -250,36 +255,20 @@ void SaveLoadChooser::updateSelection(bool redraw) {  			if (thumb) {  				_gfxWidget->setGfx(thumb);  				_gfxWidget->useAlpha(256); -			} else { -				_gfxWidget->setGfx(-1, -1, _fillR, _fillG, _fillB);  			}  		}  		if (_saveDateSupport) { -			Common::String date = "Date: ";  			if (desc.contains("save_date")) -				date += desc.getVal("save_date"); -			else -				date = "No date saved"; +				_date->setLabel("Date: " + desc.getVal("save_date")); -			Common::String time = "Time: ";  			if (desc.contains("save_time")) -				time += desc.getVal("save_time"); -			else -				time = "No time saved"; - -			_date->setLabel(date); -			_time->setLabel(time); +				_time->setLabel("Time: " + desc.getVal("save_time"));  		}  		if (_playTimeSupport) { -			Common::String time = "Playtime: ";  			if (desc.contains("play_time")) -				time += desc.getVal("play_time"); -			else -				time = "No playtime saved"; - -			_playtime->setLabel(time); +				_playtime->setLabel("Playtime: " + desc.getVal("play_time"));  		}  	} diff --git a/gui/themes/scummmodern.zip b/gui/themes/scummmodern.zipBinary files differ index beff0131f4..7e693c3247 100644 --- a/gui/themes/scummmodern.zip +++ b/gui/themes/scummmodern.zip diff --git a/gui/themes/scummmodern/scummmodern_layout.stx b/gui/themes/scummmodern/scummmodern_layout.stx index e6a01d12a1..6582022fe1 100644 --- a/gui/themes/scummmodern/scummmodern_layout.stx +++ b/gui/themes/scummmodern/scummmodern_layout.stx @@ -97,19 +97,15 @@  	<dialog name = 'Launcher' overlays = 'screen'>  		<layout type = 'vertical' center = 'true' padding = '23, 23, 8, 23'> -			<widget name = 'Version' -					width = '247' -					height = 'Globals.Line.Height' -			/>  			<widget name = 'Logo'  					width = '283'  					height = '80' -			/>		 -			<layout type = 'horizontal' spacing = '5' padding = '10, 0, 0, 0'> +			/> +			<layout type = 'horizontal'  spacing = '5' padding = '10, 0, 0, 0'>  				<widget name = 'SearchPic'  						width = '16'  						height = '17' -				/>		 +				/>  				<widget name = 'Search'  						width = '150'  						height = 'Globals.Line.Height' @@ -119,6 +115,13 @@  						width = 'Globals.Line.Height'  				/>  				<space /> +				<widget name = 'Version' +						width = '247' +						height = 'Globals.Line.Height' +						textalign = 'center' +				/> +				<space /> +				<space />  			</layout>  			<layout type = 'horizontal' padding = '0, 0, 0, 0'>  				<widget name = 'GameList'/> diff --git a/sound/audiostream.cpp b/sound/audiostream.cpp index 61a2e778ab..8ea72851e2 100644 --- a/sound/audiostream.cpp +++ b/sound/audiostream.cpp @@ -173,6 +173,162 @@ int LinearMemoryStream<stereo, is16Bit, isUnsigned, isLE>::readBuffer(int16 *buf  } + +#pragma mark - +#pragma mark --- LinearDiskStream --- +#pragma mark - + + + +/** + *  LinearDiskStream.  This can stream linear (PCM) audio from disk.  The + *  function takes an pointer to an array of LinearDiskStreamAudioBlock which defines the + *  start position and length of each block of uncompressed audio in the stream. + */ +template<bool stereo, bool is16Bit, bool isUnsigned, bool isLE> +class LinearDiskStream : public AudioStream { + +// Allow backends to override buffer size +#ifdef CUSTOM_AUDIO_BUFFER_SIZE +	static const int32 BUFFER_SIZE = CUSTOM_AUDIO_BUFFER_SIZE; +#else +	static const int32 BUFFER_SIZE = 16384; +#endif + +protected: +	byte* _buffer;			///< Streaming buffer +	const byte *_ptr;		///< Pointer to current position in stream buffer +	const int _rate;		///< Sample rate of stream + +	int32 _playtime;		///< Calculated total play time +	Common::SeekableReadStream *_stream;	///< Stream to read data from +	int32 _filePos;			///< Current position in stream +	int32 _diskLeft;		///< Samples left in stream in current block not yet read to buffer +	int32 _bufferLeft;		///< Samples left in buffer in current block +	bool _disposeAfterUse;		///< If true, delete stream object when LinearDiskStream is destructed + +	LinearDiskStreamAudioBlock *_audioBlock;	///< Audio block list +	int _audioBlockCount;		///< Number of blocks in _audioBlock +	int _currentBlock;		///< Current audio block number + +	int _beginLoop;			///< Loop parameter, currently not implemented +	int _endLoop;			///< Loop parameter, currently not implemented + + +public: +	LinearDiskStream(int rate, uint beginLoop, uint endLoop, bool disposeStream, Common::SeekableReadStream *stream, LinearDiskStreamAudioBlock *block, uint numBlocks) +		: _rate(rate), _stream(stream), _beginLoop(beginLoop), _endLoop(endLoop), _disposeAfterUse(disposeStream), +		  _audioBlockCount(numBlocks) { + +		// Allocate streaming buffer +		if (is16Bit) { +			_buffer = (byte *)malloc(BUFFER_SIZE * sizeof(int16)); +		} else { +			_buffer = (byte *)malloc(BUFFER_SIZE * sizeof(byte)); +		} + +		_ptr = _buffer; +		_bufferLeft = 0; + +		// Copy audio block data to our buffer +		// TODO: Replace this with a Common::Array or Common::List to +		// make it a little friendlier. +		_audioBlock = new LinearDiskStreamAudioBlock[numBlocks]; +		memcpy(_audioBlock, block, numBlocks * sizeof(LinearDiskStreamAudioBlock)); + +		// Set current buffer state, playing first block +		_currentBlock = 0; +		_filePos = _audioBlock[_currentBlock].pos; +		_diskLeft = _audioBlock[_currentBlock].len; + +		// Add up length of all blocks in order to caluclate total play time +		int len = 0; +		for (int r = 0; r < _audioBlockCount; r++) { +			len += _audioBlock[r].len; +		} +		_playtime = calculatePlayTime(rate, len / (is16Bit ? 2 : 1) / (stereo ? 2 : 1)); +	} + + +	virtual ~LinearDiskStream() { +		if (_disposeAfterUse) { +			delete _stream; +		} + +		delete[] _audioBlock; +		free(_buffer); +	} +	int readBuffer(int16 *buffer, const int numSamples); + +	bool isStereo() const			{ return stereo; } +	bool endOfData() const			{ return (_currentBlock == _audioBlockCount - 1) && (_diskLeft == 0) && (_bufferLeft == 0); } + +	int getRate() const			{ return _rate; } +	int32 getTotalPlayTime() const	{ return _playtime; } +}; + +template<bool stereo, bool is16Bit, bool isUnsigned, bool isLE> +int LinearDiskStream<stereo, is16Bit, isUnsigned, isLE>::readBuffer(int16 *buffer, const int numSamples) { +	int oldPos = _stream->pos(); +	bool restoreFilePosition = false; + +	int samples = numSamples; + +	while (samples > 0 && ((_diskLeft > 0 || _bufferLeft > 0) || (_currentBlock != _audioBlockCount - 1))  ) { + +		// Output samples in the buffer to the output		 +		int len = MIN(samples, _bufferLeft); +		samples -= len; +		_bufferLeft -= len; + +		while (len > 0) { +			*buffer++ = READ_ENDIAN_SAMPLE(is16Bit, isUnsigned, _ptr, isLE); +			_ptr += (is16Bit ? 2 : 1); +			len--; +		} + +		// Have we now finished this block?  If so, read the next block +		if ((_bufferLeft == 0) && (_diskLeft == 0) && (_currentBlock != _audioBlockCount - 1)) { +			// Next block +			_currentBlock++; + +			_filePos = _audioBlock[_currentBlock].pos; +			_diskLeft = _audioBlock[_currentBlock].len; +		} +			 + +		// Now read more data from disk if there is more to be read +		if ((_bufferLeft == 0) && (_diskLeft > 0)) { +			int32 readAmount = MIN(_diskLeft, BUFFER_SIZE); + +			_stream->seek(_filePos, SEEK_SET); +			_stream->read(_buffer, readAmount * (is16Bit? 2: 1)); + +			// Amount of data in buffer is now the amount read in, and +			// the amount left to read on disk is decreased by the same amount +			_bufferLeft = readAmount; +			_diskLeft -= readAmount; +			_ptr = (byte *)_buffer; +			_filePos += readAmount * (is16Bit? 2: 1); + +			// Set this flag now we've used the file, it restores it's +			// original position. +			restoreFilePosition = true; +		} +	} + +	// In case calling code relies on the position of this stream staying  +	// constant, I restore the location if I've changed it.  This is probably +	// not necessary.	 +	if (restoreFilePosition) { +		_stream->seek(oldPos, SEEK_SET); +	} + +	return numSamples-samples; +} + + +  #pragma mark -  #pragma mark --- Input stream factory ---  #pragma mark - @@ -202,6 +358,7 @@ AudioStream *makeLinearInputStream(const byte *ptr, uint32 len, int rate, byte f  	const bool isLE       = (flags & Audio::Mixer::FLAG_LITTLE_ENDIAN) != 0;  	const bool autoFree   = (flags & Audio::Mixer::FLAG_AUTOFREE) != 0; +  	uint loopOffset = 0, loopLen = 0;  	if (flags & Audio::Mixer::FLAG_LOOP) {  		if (loopEnd == 0) @@ -236,6 +393,44 @@ AudioStream *makeLinearInputStream(const byte *ptr, uint32 len, int rate, byte f  } + + + +#define MAKE_LINEAR_DISK(STEREO, UNSIGNED) \ +		if (is16Bit) { \ +			if (isLE) \ +				return new LinearDiskStream<STEREO, true, UNSIGNED, true>(rate, loopStart, loopEnd, takeOwnership, &stream, block, numBlocks); \ +			else  \ +				return new LinearDiskStream<STEREO, true, UNSIGNED, false>(rate, loopStart, loopEnd, takeOwnership, &stream, block, numBlocks); \ +		} else \ +			return new LinearDiskStream<STEREO, false, UNSIGNED, false>(rate, loopStart, loopEnd, takeOwnership, &stream, block, numBlocks) + + +AudioStream *makeLinearDiskStream(Common::SeekableReadStream& stream, LinearDiskStreamAudioBlock* block, int numBlocks, int rate, byte flags, bool takeOwnership, uint loopStart, uint loopEnd) { +	const bool isStereo   = (flags & Audio::Mixer::FLAG_STEREO) != 0; +	const bool is16Bit    = (flags & Audio::Mixer::FLAG_16BITS) != 0; +	const bool isUnsigned = (flags & Audio::Mixer::FLAG_UNSIGNED) != 0; +	const bool isLE       = (flags & Audio::Mixer::FLAG_LITTLE_ENDIAN) != 0; + + +	if (isStereo) { +		if (isUnsigned) { +			MAKE_LINEAR_DISK(true, true); +		} else { +			MAKE_LINEAR_DISK(true, false); +		} +	} else { +		if (isUnsigned) { +			MAKE_LINEAR_DISK(false, true); +		} else { +			MAKE_LINEAR_DISK(false, false); +		} +	} +} + + + +  #pragma mark -  #pragma mark --- Appendable audio stream ---  #pragma mark - @@ -306,7 +501,6 @@ BaseAppendableMemoryStream::~BaseAppendableMemoryStream() {  template<bool stereo, bool is16Bit, bool isUnsigned, bool isLE>  int AppendableMemoryStream<stereo, is16Bit, isUnsigned, isLE>::readBuffer(int16 *buffer, const int numSamples) {  	Common::StackLock lock(_mutex); -  	int samples = numSamples;  	while (samples > 0 && !eosIntern()) {  		Buffer buf = *_bufferQueue.begin(); diff --git a/sound/audiostream.h b/sound/audiostream.h index a917957a77..99e140608d 100644 --- a/sound/audiostream.h +++ b/sound/audiostream.h @@ -28,7 +28,7 @@  #include "common/util.h"  #include "common/scummsys.h" - +#include "common/stream.h"  namespace Audio { @@ -109,6 +109,7 @@ public:  	virtual int32 getTotalPlayTime() const { return kUnknownPlayTime; }  }; +  /**   * Factory function for a raw linear AudioStream, which will simply treat all data   * in the buffer described by ptr and len as raw sample data in the specified @@ -118,6 +119,23 @@ public:   */  AudioStream *makeLinearInputStream(const byte *ptr, uint32 len, int rate, byte flags, uint loopStart, uint loopEnd); + +/** Struct used to define the audio data to be played by a LinearDiskStream */ + +struct LinearDiskStreamAudioBlock { +	int32 pos;		///< Position in stream of the block +	int32 len;		///< Length of the block (in samples) +}; + + +/** Factory function for a Linear Disk Stream.  This can stream linear (PCM) audio from disk.  The + *  function takes an pointer to an array of LinearDiskStreamAudioBlock which defines the + *  start position and length of each block of uncompressed audio in the stream. + */ + +AudioStream *makeLinearDiskStream(Common::SeekableReadStream& stream, LinearDiskStreamAudioBlock* block, int  +		numBlocks, int rate, byte flags, bool disposeStream, uint loopStart, uint loopEnd); +  /**   * An audio stream to which additional data can be appended on-the-fly.   * Used by SMUSH, iMuseDigital, the Kyrandia 3 VQA player, etc. diff --git a/sound/voc.cpp b/sound/voc.cpp index 3e8d8c2ed3..a332477f3c 100644 --- a/sound/voc.cpp +++ b/sound/voc.cpp @@ -166,14 +166,155 @@ byte *loadVOCFromStream(Common::ReadStream &stream, int &size, int &rate) {  	return loadVOCFromStream(stream, size, rate, loops, begin_loop, end_loop);  } -AudioStream *makeVOCStream(Common::ReadStream &stream, byte flags, uint loopStart, uint loopEnd) { + +#ifdef STREAM_AUDIO_FROM_DISK + +int parseVOCFormat(Common::SeekableReadStream& stream, LinearDiskStreamAudioBlock* block, int &rate, int &loops, int &begin_loop, int &end_loop) { +	VocFileHeader fileHeader; +	int currentBlock = 0; +	int size = 0; + +	if (stream.read(&fileHeader, 8) != 8) +		goto invalid; + +	if (!memcmp(&fileHeader, "VTLK", 4)) { +		if (stream.read(&fileHeader, sizeof(VocFileHeader)) != sizeof(VocFileHeader)) +			goto invalid; +	} else if (!memcmp(&fileHeader, "Creative", 8)) { +		if (stream.read(((byte *)&fileHeader) + 8, sizeof(VocFileHeader) - 8) != sizeof(VocFileHeader) - 8) +			goto invalid; +	} else { +	invalid:; +		warning("loadVOCFromStream: Invalid header"); +		return 0; +	} + +	if (memcmp(fileHeader.desc, "Creative Voice File", 19) != 0) +		error("loadVOCFromStream: Invalid header"); +	if (fileHeader.desc[19] != 0x1A) +		debug(3, "loadVOCFromStream: Partially invalid header"); + +	int32 offset = FROM_LE_16(fileHeader.datablock_offset); +	int16 version = FROM_LE_16(fileHeader.version); +	int16 code = FROM_LE_16(fileHeader.id); +	assert(offset == sizeof(VocFileHeader)); +	// 0x100 is an invalid VOC version used by German version of DOTT (Disk) and +	// French version of Simon the Sorcerer 2 (CD) +	assert(version == 0x010A || version == 0x0114 || version == 0x0100); +	assert(code == ~version + 0x1234); + +	int len; +	size = 0; +	begin_loop = 0; +	end_loop = 0; + +	while ((code = stream.readByte())) { +		len = stream.readByte(); +		len |= stream.readByte() << 8; +		len |= stream.readByte() << 16; + +		switch (code) { +		case 1: +		case 9: { +			int packing; +			if (code == 1) { +				int time_constant = stream.readByte(); +				packing = stream.readByte(); +				len -= 2; +				rate = getSampleRateFromVOCRate(time_constant); +			} else { +				rate = stream.readUint32LE(); +				int bits = stream.readByte(); +				int channels = stream.readByte(); +				if (bits != 8 || channels != 1) { +					warning("Unsupported VOC file format (%d bits per sample, %d channels)", bits, channels); +					break; +				} +				packing = stream.readUint16LE(); +				stream.readUint32LE(); +				len -= 12; +			} +			debug(9, "VOC Data Block: %d, %d, %d", rate, packing, len); +			if (packing == 0) { +				 +				// Found a data block - so add it to the block list +				block[currentBlock].pos = stream.pos(); +				block[currentBlock].len = len; +				currentBlock++; + +				stream.seek(len, SEEK_CUR); + +				size += len; +				begin_loop = size; +				end_loop = size; +			} else { +				warning("VOC file packing %d unsupported", packing); +			} +			} break; +		case 3: // silence +			// occur with a few Igor sounds, voc file starts with a silence block with a +			// frequency different from the data block. Just ignore fow now (implementing +			// it wouldn't make a big difference anyway...) +			assert(len == 3); +			stream.readUint16LE(); +			stream.readByte(); +			break; +		case 6:	// begin of loop +			assert(len == 2); +			loops = stream.readUint16LE(); +			break; +		case 7:	// end of loop +			assert(len == 0); +			break; +		case 8: // "Extended" +			// This occures in the LoL Intro demo. This block can usually be used to create stereo +			// sound, but the LoL intro has only an empty block, thus this dummy implementation will +			// work. +			assert(len == 4); +			stream.readUint16LE(); +			stream.readByte(); +			stream.readByte(); +			break; +		default: +			warning("Unhandled code in VOC file : %d", code); +			return 0; +		} +	} +	debug(4, "VOC Data Size : %d", size); +	return currentBlock; +} + +AudioStream *makeVOCDiskStream(Common::SeekableReadStream &stream, byte flags, bool takeOwnership) { +	const int MAX_AUDIO_BLOCKS = 256; + +	LinearDiskStreamAudioBlock *block = new LinearDiskStreamAudioBlock[MAX_AUDIO_BLOCKS]; +	int rate, loops, begin_loop, end_loop; + +	int numBlocks = parseVOCFormat(stream, block, rate, loops, begin_loop, end_loop); + +	AudioStream* audioStream = makeLinearDiskStream(stream, block, numBlocks, rate, flags, takeOwnership, begin_loop, end_loop); + +	delete[] block; + +	return audioStream; +} +	 +#endif + + +AudioStream *makeVOCStream(Common::SeekableReadStream &stream, byte flags, uint loopStart, uint loopEnd, bool takeOwnershipOfStream) { +#ifdef STREAM_AUDIO_FROM_DISK +	return makeVOCDiskStream(stream, flags, takeOwnershipOfStream); +#else  	int size, rate;  	byte *data = loadVOCFromStream(stream, size, rate); +  	if (!data)  		return 0;  	return makeLinearInputStream(data, size, rate, flags | Audio::Mixer::FLAG_AUTOFREE, loopStart, loopEnd); +#endif  } diff --git a/sound/voc.h b/sound/voc.h index 2b4796e048..c696afb0c8 100644 --- a/sound/voc.h +++ b/sound/voc.h @@ -41,6 +41,7 @@  #include "common/scummsys.h"  namespace Common { class ReadStream; } +namespace Common { class SeekableReadStream; }  namespace Audio { @@ -78,7 +79,7 @@ struct VocBlockHeader {  extern int getSampleRateFromVOCRate(int vocSR);  /** - * Try to load a VOC from the given seekable stream. Returns a pointer to memory + * Try to load a VOC from the given stream. Returns a pointer to memory   * containing the PCM sample data (allocated with malloc). It is the callers   * responsibility to dellocate that data again later on! Currently this   * function only supports uncompressed raw PCM data. @@ -92,7 +93,7 @@ extern byte *loadVOCFromStream(Common::ReadStream &stream, int &size, int &rate)   *   * This function uses loadVOCFromStream() internally.   */ -AudioStream *makeVOCStream(Common::ReadStream &stream, byte flags = 0, uint loopStart = 0, uint loopEnd = 0); +AudioStream *makeVOCStream(Common::SeekableReadStream &stream, byte flags = 0, uint loopStart = 0, uint loopEnd = 0, bool takeOwnershipOfStream = false);  } // End of namespace Audio diff --git a/tools/create_kyradat/create_kyradat.cpp b/tools/create_kyradat/create_kyradat.cpp index 780282bab2..7f43a81ec9 100644 --- a/tools/create_kyradat/create_kyradat.cpp +++ b/tools/create_kyradat/create_kyradat.cpp @@ -31,7 +31,7 @@  #include "md5.h"  enum { -	kKyraDatVersion = 49, +	kKyraDatVersion = 50,  	kIndexSize = 12  }; @@ -100,9 +100,9 @@ const ExtractType extractTypeTable[] = {  	{ k3TypeRaw16to8, extractRaw16to8, createFilename },  	{ k3TypeShpData, extractMrShapeAnimData, createFilename }, -	{ lolTypeRaw16, extractRaw16, createFilename }, -	{ lolTypeRaw32, extractRaw32, createFilename }, -	{ lolTypeButtonDef, extractLolButtonDefs, createFilename }, +	{ kLolTypeRaw16, extractRaw16, createFilename }, +	{ kLolTypeRaw32, extractRaw32, createFilename }, +	{ kLolTypeButtonDef, extractLolButtonDefs, createFilename },  	{ -1, 0, 0}  }; @@ -264,88 +264,90 @@ const ExtractFilename extractFilenames[] = {  	// LANDS OF LORE  	// Demo Sequence Player -	{ lolSeqplayIntroTracks, k2TypeSoundList, "S_INTRO.TRA" }, +	{ kLolSeqplayIntroTracks, k2TypeSoundList, "S_INTRO.TRA" },  	// Ingame -	{ lolCharacterDefs, kTypeRawData, "CHARACTER.DEF" }, -	{ lolIngameSfxFiles, k2TypeSfxList, "SFXFILES.TRA" }, -	{ lolIngameSfxIndex, kTypeRawData, "SFXINDEX.MAP" }, -	{ lolMusicTrackMap, kTypeRawData, "MUSIC.MAP" }, -	{ lolGMSfxIndex, kTypeRawData, "SFX_GM.MAP" }, -	{ lolMT32SfxIndex, kTypeRawData, "SFX_MT32.MAP" }, -	//{ lolADLSfxIndex, kTypeRawData, "SFX_ADL.MAP" }, -	{ lolSpellProperties, kTypeRawData, "SPELLS.DEF" }, -	{ lolGameShapeMap, kTypeRawData, "GAMESHP.MAP" }, -	{ lolSceneItemOffs, kTypeRawData, "ITEMOFFS.DEF" }, -	{ lolCharInvIndex, k3TypeRaw16to8, "CHARINV.MAP" }, -	{ lolCharInvDefs, kTypeRawData, "CHARINV.DEF" }, -	{ lolCharDefsMan, lolTypeRaw16, "CHMAN.DEF" }, -	{ lolCharDefsWoman, lolTypeRaw16, "CHWOMAN.DEF" }, -	{ lolCharDefsKieran, lolTypeRaw16, "CHKIERAN.DEF" }, -	//{ lolCharDefsUnk, lolTypeRaw16, "CHUNK.DEF" }, -	{ lolCharDefsAkshel, lolTypeRaw16, "CHAKSHEL.DEF" }, -	{ lolExpRequirements, lolTypeRaw32, "EXPERIENCE.DEF" }, -	{ lolMonsterModifiers, lolTypeRaw16, "MONSTMOD.DEF" }, -	{ lolMonsterLevelOffsets, kTypeRawData, "MONSTLVL.DEF" }, -	{ lolMonsterDirFlags, kTypeRawData, "MONSTDIR.DEF" }, -	{ lolMonsterScaleY, kTypeRawData, "MONSTZY.DEF" }, -	{ lolMonsterScaleX, kTypeRawData, "MONSTZX.DEF" }, -	{ lolMonsterScaleWH, lolTypeRaw16, "MONSTSCL.DEF" }, -	{ lolFlyingItemShp, k3TypeRaw16to8, "THRWNSHP.DEF" }, -	{ lolInventoryDesc, lolTypeRaw16, "INVDESC.DEF" }, -	{ lolLevelShpList, kTypeStringList, "SHPFILES.TXT" }, -	{ lolLevelDatList, kTypeStringList, "DATFILES.TXT" }, -	{ lolCompassDefs, k3TypeRaw16to8, "COMPASS.DEF" }, -	{ lolItemPrices, lolTypeRaw16, "ITEMCOST.DEF" }, -	{ lolStashSetup, kTypeRawData, "MONEYSTS.DEF" }, - -	{ lolDscUnk1, kTypeRawData, "DSCSHPU1.DEF" }, -	{ lolDscShapeIndex1, kTypeRawData, "DSCSHPI1.DEF" }, -	{ lolDscShapeIndex2, kTypeRawData, "DSCSHPI2.DEF" }, -	{ lolDscScaleWidthData, lolTypeRaw16, "DSCSHPW.DEF" }, -	{ lolDscScaleHeightData, lolTypeRaw16, "DSCSHPH.DEF" }, -	{ lolDscX, lolTypeRaw16, "DSCSHPX.DEF" }, -	{ lolDscY, kTypeRawData, "DSCSHPY.DEF" }, -	{ lolDscTileIndex, kTypeRawData, "DSCSHPT.DEF" }, -	{ lolDscUnk2, kTypeRawData, "DSCSHPU2.DEF" }, -	{ lolDscDoorShapeIndex, kTypeRawData, "DSCDOOR.DEF" }, -	{ lolDscDimData1, kTypeRawData, "DSCDIM1.DEF" }, -	{ lolDscDimData2, kTypeRawData, "DSCDIM2.DEF" }, -	{ lolDscBlockMap, kTypeRawData, "DSCBLOCK1.DEF" }, -	{ lolDscDimMap, kTypeRawData, "DSCDIM.DEF" }, -	{ lolDscDoorScale, lolTypeRaw16, "DSCDOOR3.DEF" }, -	{ lolDscShapeOvlIndex, k3TypeRaw16to8, "DSCBLOCK2.DEF" }, -	{ lolDscBlockIndex, kTypeRawData, "DSCBLOCKX.DEF" }, -	{ lolDscDoor4, lolTypeRaw16, "DSCDOOR4.DEF" }, -	{ lolDscDoor1, kTypeRawData, "DSCDOOR1.DEF" }, -	{ lolDscDoorX, lolTypeRaw16, "DSCDOORX.DEF" }, -	{ lolDscDoorY, lolTypeRaw16, "DSCDOORY.DEF" }, - -	{ lolScrollXTop, k3TypeRaw16to8, "SCROLLXT.DEF" }, -	{ lolScrollYTop, k3TypeRaw16to8, "SCROLLYT.DEF" }, -	{ lolScrollXBottom, k3TypeRaw16to8, "SCROLLXB.DEF" }, -	{ lolScrollYBottom, k3TypeRaw16to8, "SCROLLYB.DEF" }, - -	{ lolButtonDefs, lolTypeButtonDef, "BUTTONS.DEF" }, -	{ lolButtonList1, lolTypeRaw16, "BUTTON1.LST" }, -	{ lolButtonList2, lolTypeRaw16, "BUTTON2.LST" }, -	{ lolButtonList3, lolTypeRaw16, "BUTTON3.LST" }, -	{ lolButtonList4, lolTypeRaw16, "BUTTON4.LST" }, -	{ lolButtonList5, lolTypeRaw16, "BUTTON5.LST" }, -	{ lolButtonList6, lolTypeRaw16, "BUTTON6.LST" }, -	{ lolButtonList7, lolTypeRaw16, "BUTTON7.LST" }, -	{ lolButtonList8, lolTypeRaw16, "BUTTON84.LST" }, - -	{ lolLegendData, kTypeRawData, "MAPLGND.DEF" }, -	{ lolMapCursorOvl, kTypeRawData, "MAPCURSOR.PAL" }, -	{ lolMapStringId, lolTypeRaw16, "MAPSTRID.LST" }, -	//{ lolMapPal, kTypeRawData, "MAP.PAL" }, - -	{ lolSpellbookAnim, k3TypeRaw16to8, "MBOOKA.DEF" }, -	{ lolSpellbookCoords, k3TypeRaw16to8, "MBOOKC.DEF" }, -	{ lolHealShapeFrames, kTypeRawData, "MHEAL.SHP" }, -	{ lolLightningDefs, kTypeRawData, "MLGHTNG.DEF" }, -	{ lolFireballCoords, lolTypeRaw16, "MFIREBLL.DEF" }, +	{ kLolCharacterDefs, kTypeRawData, "CHARACTER.DEF" }, +	{ kLolIngameSfxFiles, k2TypeSfxList, "SFXFILES.TRA" }, +	{ kLolIngameSfxIndex, kTypeRawData, "SFXINDEX.MAP" }, +	{ kLolMusicTrackMap, kTypeRawData, "MUSIC.MAP" }, +	{ kLolGMSfxIndex, kTypeRawData, "SFX_GM.MAP" }, +	{ kLolMT32SfxIndex, kTypeRawData, "SFX_MT32.MAP" }, +	//{ kLolADLSfxIndex, kTypeRawData, "SFX_ADL.MAP" }, +	{ kLolSpellProperties, kTypeRawData, "SPELLS.DEF" }, +	{ kLolGameShapeMap, kTypeRawData, "GAMESHP.MAP" }, +	{ kLolSceneItemOffs, kTypeRawData, "ITEMOFFS.DEF" }, +	{ kLolCharInvIndex, k3TypeRaw16to8, "CHARINV.MAP" }, +	{ kLolCharInvDefs, kTypeRawData, "CHARINV.DEF" }, +	{ kLolCharDefsMan, kLolTypeRaw16, "CHMAN.DEF" }, +	{ kLolCharDefsWoman, kLolTypeRaw16, "CHWOMAN.DEF" }, +	{ kLolCharDefsKieran, kLolTypeRaw16, "CHKIERAN.DEF" }, +	//{ kLolCharDefsUnk, kLolTypeRaw16, "CHUNK.DEF" }, +	{ kLolCharDefsAkshel, kLolTypeRaw16, "CHAKSHEL.DEF" }, +	{ kLolExpRequirements, kLolTypeRaw32, "EXPERIENCE.DEF" }, +	{ kLolMonsterModifiers, kLolTypeRaw16, "MONSTMOD.DEF" }, +	{ kLolMonsterLevelOffsets, kTypeRawData, "MONSTLVL.DEF" }, +	{ kLolMonsterDirFlags, kTypeRawData, "MONSTDIR.DEF" }, +	{ kLolMonsterScaleY, kTypeRawData, "MONSTZY.DEF" }, +	{ kLolMonsterScaleX, kTypeRawData, "MONSTZX.DEF" }, +	{ kLolMonsterScaleWH, kLolTypeRaw16, "MONSTSCL.DEF" }, +	{ kLolFlyingItemShp, k3TypeRaw16to8, "THRWNSHP.DEF" }, +	{ kLolInventoryDesc, kLolTypeRaw16, "INVDESC.DEF" }, +	{ kLolLevelShpList, kTypeStringList, "SHPFILES.TXT" }, +	{ kLolLevelDatList, kTypeStringList, "DATFILES.TXT" }, +	{ kLolCompassDefs, k3TypeRaw16to8, "COMPASS.DEF" }, +	{ kLolItemPrices, kLolTypeRaw16, "ITEMCOST.DEF" }, +	{ kLolStashSetup, kTypeRawData, "MONEYSTS.DEF" }, + +	{ kLolDscUnk1, kTypeRawData, "DSCSHPU1.DEF" }, +	{ kLolDscShapeIndex1, kTypeRawData, "DSCSHPI1.DEF" }, +	{ kLolDscShapeIndex2, kTypeRawData, "DSCSHPI2.DEF" }, +	{ kLolDscScaleWidthData, kLolTypeRaw16, "DSCSHPW.DEF" }, +	{ kLolDscScaleHeightData, kLolTypeRaw16, "DSCSHPH.DEF" }, +	{ kLolDscX, kLolTypeRaw16, "DSCSHPX.DEF" }, +	{ kLolDscY, kTypeRawData, "DSCSHPY.DEF" }, +	{ kLolDscTileIndex, kTypeRawData, "DSCSHPT.DEF" }, +	{ kLolDscUnk2, kTypeRawData, "DSCSHPU2.DEF" }, +	{ kLolDscDoorShapeIndex, kTypeRawData, "DSCDOOR.DEF" }, +	{ kLolDscDimData1, kTypeRawData, "DSCDIM1.DEF" }, +	{ kLolDscDimData2, kTypeRawData, "DSCDIM2.DEF" }, +	{ kLolDscBlockMap, kTypeRawData, "DSCBLOCK1.DEF" }, +	{ kLolDscDimMap, kTypeRawData, "DSCDIM.DEF" }, +	{ kLolDscDoorScale, kLolTypeRaw16, "DSCDOOR3.DEF" }, +	{ kLolDscShapeOvlIndex, k3TypeRaw16to8, "DSCBLOCK2.DEF" }, +	{ kLolDscBlockIndex, kTypeRawData, "DSCBLOCKX.DEF" }, +	{ kLolDscDoor4, kLolTypeRaw16, "DSCDOOR4.DEF" }, +	{ kLolDscDoor1, kTypeRawData, "DSCDOOR1.DEF" }, +	{ kLolDscDoorX, kLolTypeRaw16, "DSCDOORX.DEF" }, +	{ kLolDscDoorY, kLolTypeRaw16, "DSCDOORY.DEF" }, + +	{ kLolScrollXTop, k3TypeRaw16to8, "SCROLLXT.DEF" }, +	{ kLolScrollYTop, k3TypeRaw16to8, "SCROLLYT.DEF" }, +	{ kLolScrollXBottom, k3TypeRaw16to8, "SCROLLXB.DEF" }, +	{ kLolScrollYBottom, k3TypeRaw16to8, "SCROLLYB.DEF" }, + +	{ kLolButtonDefs, kLolTypeButtonDef, "BUTTONS.DEF" }, +	{ kLolButtonList1, kLolTypeRaw16, "BUTTON1.LST" }, +	{ kLolButtonList2, kLolTypeRaw16, "BUTTON2.LST" }, +	{ kLolButtonList3, kLolTypeRaw16, "BUTTON3.LST" }, +	{ kLolButtonList4, kLolTypeRaw16, "BUTTON4.LST" }, +	{ kLolButtonList5, kLolTypeRaw16, "BUTTON5.LST" }, +	{ kLolButtonList6, kLolTypeRaw16, "BUTTON6.LST" }, +	{ kLolButtonList7, kLolTypeRaw16, "BUTTON7.LST" }, +	{ kLolButtonList8, kLolTypeRaw16, "BUTTON84.LST" }, + +	{ kLolLegendData, kTypeRawData, "MAPLGND.DEF" }, +	{ kLolMapCursorOvl, kTypeRawData, "MAPCURSOR.PAL" }, +	{ kLolMapStringId, kLolTypeRaw16, "MAPSTRID.LST" }, +	//{ kLolMapPal, kTypeRawData, "MAP.PAL" }, + +	{ kLolSpellbookAnim, k3TypeRaw16to8, "MBOOKA.DEF" }, +	{ kLolSpellbookCoords, k3TypeRaw16to8, "MBOOKC.DEF" }, +	{ kLolHealShapeFrames, kTypeRawData, "MHEAL.SHP" }, +	{ kLolLightningDefs, kTypeRawData, "MLGHTNG.DEF" }, +	{ kLolFireballCoords, kLolTypeRaw16, "MFIREBLL.DEF" }, + +	{ kLolHistory, kTypeRawData, "HISTORY.FLS" },  	{ -1, 0, 0 }  }; diff --git a/tools/create_kyradat/create_kyradat.h b/tools/create_kyradat/create_kyradat.h index 13f6966f83..cc1f990a39 100644 --- a/tools/create_kyradat/create_kyradat.h +++ b/tools/create_kyradat/create_kyradat.h @@ -174,88 +174,90 @@ enum kExtractID {  	k3ItemMagicTable,  	k3ItemStringMap, -	lolSeqplayIntroTracks, - -	lolCharacterDefs, -	lolIngameSfxFiles, -	lolIngameSfxIndex, -	lolMusicTrackMap, -	lolGMSfxIndex, -	lolMT32SfxIndex, +	kLolSeqplayIntroTracks, + +	kLolCharacterDefs, +	kLolIngameSfxFiles, +	kLolIngameSfxIndex, +	kLolMusicTrackMap, +	kLolGMSfxIndex, +	kLolMT32SfxIndex,  	//lolADLSfxIndex, -	lolSpellProperties, -	lolGameShapeMap, -	lolSceneItemOffs, -	lolCharInvIndex, -	lolCharInvDefs, -	lolCharDefsMan, -	lolCharDefsWoman, -	lolCharDefsKieran, +	kLolSpellProperties, +	kLolGameShapeMap, +	kLolSceneItemOffs, +	kLolCharInvIndex, +	kLolCharInvDefs, +	kLolCharDefsMan, +	kLolCharDefsWoman, +	kLolCharDefsKieran,  	//lolCharDefsUnk, -	lolCharDefsAkshel, -	lolExpRequirements, -	lolMonsterModifiers, -	lolMonsterLevelOffsets, -	lolMonsterDirFlags, -	lolMonsterScaleY, -	lolMonsterScaleX, -	lolMonsterScaleWH, -	lolFlyingItemShp, -	lolInventoryDesc, - -	lolLevelShpList, -	lolLevelDatList, -	lolCompassDefs, -	lolItemPrices, -	lolStashSetup, - -	lolDscUnk1, -	lolDscShapeIndex1, -	lolDscShapeIndex2, -	lolDscScaleWidthData, -	lolDscScaleHeightData, -	lolDscX, -	lolDscY, -	lolDscTileIndex, -	lolDscUnk2, -	lolDscDoorShapeIndex, -	lolDscDimData1, -	lolDscDimData2, -	lolDscBlockMap, -	lolDscDimMap, -	lolDscShapeOvlIndex, -	lolDscBlockIndex, -	lolDscDoor1, -	lolDscDoorScale, -	lolDscDoor4, -	lolDscDoorX, -	lolDscDoorY, - -	lolScrollXTop, -	lolScrollYTop, -	lolScrollXBottom, -	lolScrollYBottom, - -	lolButtonDefs, -	lolButtonList1, -	lolButtonList2, -	lolButtonList3, -	lolButtonList4, -	lolButtonList5, -	lolButtonList6, -	lolButtonList7, -	lolButtonList8, - -	lolLegendData, -	lolMapCursorOvl, -	lolMapStringId, +	kLolCharDefsAkshel, +	kLolExpRequirements, +	kLolMonsterModifiers, +	kLolMonsterLevelOffsets, +	kLolMonsterDirFlags, +	kLolMonsterScaleY, +	kLolMonsterScaleX, +	kLolMonsterScaleWH, +	kLolFlyingItemShp, +	kLolInventoryDesc, + +	kLolLevelShpList, +	kLolLevelDatList, +	kLolCompassDefs, +	kLolItemPrices, +	kLolStashSetup, + +	kLolDscUnk1, +	kLolDscShapeIndex1, +	kLolDscShapeIndex2, +	kLolDscScaleWidthData, +	kLolDscScaleHeightData, +	kLolDscX, +	kLolDscY, +	kLolDscTileIndex, +	kLolDscUnk2, +	kLolDscDoorShapeIndex, +	kLolDscDimData1, +	kLolDscDimData2, +	kLolDscBlockMap, +	kLolDscDimMap, +	kLolDscShapeOvlIndex, +	kLolDscBlockIndex, +	kLolDscDoor1, +	kLolDscDoorScale, +	kLolDscDoor4, +	kLolDscDoorX, +	kLolDscDoorY, + +	kLolScrollXTop, +	kLolScrollYTop, +	kLolScrollXBottom, +	kLolScrollYBottom, + +	kLolButtonDefs, +	kLolButtonList1, +	kLolButtonList2, +	kLolButtonList3, +	kLolButtonList4, +	kLolButtonList5, +	kLolButtonList6, +	kLolButtonList7, +	kLolButtonList8, + +	kLolLegendData, +	kLolMapCursorOvl, +	kLolMapStringId,  	//lolMapPal, -	lolSpellbookAnim, -	lolSpellbookCoords, -	lolHealShapeFrames, -	lolLightningDefs, -	lolFireballCoords, +	kLolSpellbookAnim, +	kLolSpellbookCoords, +	kLolHealShapeFrames, +	kLolLightningDefs, +	kLolFireballCoords, + +	kLolHistory,  	kMaxResIDs  }; @@ -352,9 +354,9 @@ enum kExtractType {  	k3TypeRaw16to8,  	k3TypeShpData, -	lolTypeRaw16, -	lolTypeRaw32, -	lolTypeButtonDef +	kLolTypeRaw16, +	kLolTypeRaw32, +	kLolTypeButtonDef  };  struct ExtractType { diff --git a/tools/create_kyradat/lol_cd.h b/tools/create_kyradat/lol_cd.h index fa36d1b91d..ab8a29062f 100644 --- a/tools/create_kyradat/lol_cd.h +++ b/tools/create_kyradat/lol_cd.h @@ -1,89 +1,95 @@ +const ExtractEntry lolCDFile1E[] = { +	{ kLolHistory, 0x1FAA0, 0x1FC71 }, +	{ -1, 0, 0 } +}; +  const ExtractEntry lolCDFile2[] = { -	{ lolCharacterDefs, 0x00029D60, 0x0002A1F2 }, -	{ lolIngameSfxFiles, 0x0002A330, 0x0002AC22 }, -	{ lolIngameSfxIndex, 0x0002AC22, 0x0002B00A }, -	{ lolMusicTrackMap, 0x0002A240, 0x0002A330 }, -	{ lolGMSfxIndex, 0x0002B010, 0x0002B10A }, -	{ lolMT32SfxIndex, 0x0002B110, 0x0002B20A }, -	//{ lolADLSfxIndex, 0x0002B210, 0x0002B30A }, -	{ lolSpellProperties, 0x0002B5E0, 0x0002B6F8 }, -	{ lolGameShapeMap, 0x0002B35C, 0x0002B470 }, -	{ lolSceneItemOffs, 0x0003200F, 0x00032017 }, -	{ lolCharInvIndex, 0x0002B470, 0x0002B47A }, -	{ lolCharInvDefs, 0x0002B47A, 0x0002B4D2 }, -	{ lolCharDefsMan, 0x0002B4D2, 0x0002B4E4 }, -	{ lolCharDefsWoman, 0x0002B4E4, 0x0002B4F6 }, -	{ lolCharDefsKieran, 0x0002B4F6, 0x0002B508 }, -	//{ lolCharDefsUnk, 0x0002B508, 0x0002B51A }, -	{ lolCharDefsAkshel, 0x0002B51A, 0x0002B52C }, -	{ lolExpRequirements, 0x0002B830, 0x0002B85C }, -	{ lolMonsterModifiers, 0x0002B85C, 0x0002B874 }, -	{ lolMonsterLevelOffsets, 0x00031FDF, 0x00031FFF }, -	{ lolMonsterDirFlags, 0x00031FFF, 0x0003200F }, -	{ lolMonsterScaleY, 0x00031BC0, 0x00031BDE }, -	{ lolMonsterScaleX, 0x00031BDE, 0x00031BFE }, -	{ lolMonsterScaleWH, 0x000285C0, 0x00028642 }, -	{ lolFlyingItemShp, 0x00028642, 0x000286C4 }, -	{ lolInventoryDesc, 0x00032706, 0x0003271C }, +	{ kLolCharacterDefs, 0x00029D60, 0x0002A1F2 }, +	{ kLolIngameSfxFiles, 0x0002A330, 0x0002AC22 }, +	{ kLolIngameSfxIndex, 0x0002AC22, 0x0002B00A }, +	{ kLolMusicTrackMap, 0x0002A240, 0x0002A330 }, +	{ kLolGMSfxIndex, 0x0002B010, 0x0002B10A }, +	{ kLolMT32SfxIndex, 0x0002B110, 0x0002B20A }, +	//{ kLolADLSfxIndex, 0x0002B210, 0x0002B30A }, +	{ kLolSpellProperties, 0x0002B5E0, 0x0002B6F8 }, +	{ kLolGameShapeMap, 0x0002B35C, 0x0002B470 }, +	{ kLolSceneItemOffs, 0x0003200F, 0x00032017 }, +	{ kLolCharInvIndex, 0x0002B470, 0x0002B47A }, +	{ kLolCharInvDefs, 0x0002B47A, 0x0002B4D2 }, +	{ kLolCharDefsMan, 0x0002B4D2, 0x0002B4E4 }, +	{ kLolCharDefsWoman, 0x0002B4E4, 0x0002B4F6 }, +	{ kLolCharDefsKieran, 0x0002B4F6, 0x0002B508 }, +	//{ kLolCharDefsUnk, 0x0002B508, 0x0002B51A }, +	{ kLolCharDefsAkshel, 0x0002B51A, 0x0002B52C }, +	{ kLolExpRequirements, 0x0002B830, 0x0002B85C }, +	{ kLolMonsterModifiers, 0x0002B85C, 0x0002B874 }, +	{ kLolMonsterLevelOffsets, 0x00031FDF, 0x00031FFF }, +	{ kLolMonsterDirFlags, 0x00031FFF, 0x0003200F }, +	{ kLolMonsterScaleY, 0x00031BC0, 0x00031BDE }, +	{ kLolMonsterScaleX, 0x00031BDE, 0x00031BFE }, +	{ kLolMonsterScaleWH, 0x000285C0, 0x00028642 }, +	{ kLolFlyingItemShp, 0x00028642, 0x000286C4 }, +	{ kLolInventoryDesc, 0x00032706, 0x0003271C }, -	{ lolLevelShpList, 0x00032826, 0x000328A5 }, -	{ lolLevelDatList, 0x000328A5, 0x000329A4 }, -	{ lolCompassDefs, 0x000286C4, 0x000287C4 }, -	{ lolItemPrices, 0x0002F8C0, 0x0002F91C }, -	{ lolStashSetup, 0x000324A5, 0x000324B1 }, +	{ kLolLevelShpList, 0x00032826, 0x000328A5 }, +	{ kLolLevelDatList, 0x000328A5, 0x000329A4 }, +	{ kLolCompassDefs, 0x000286C4, 0x000287C4 }, +	{ kLolItemPrices, 0x0002F8C0, 0x0002F91C }, +	{ kLolStashSetup, 0x000324A5, 0x000324B1 }, -	{ lolDscUnk1, 0x00032017, 0x0003203B }, -	{ lolDscShapeIndex1, 0x0003203B, 0x0003205F }, -	{ lolDscShapeIndex2, 0x0003205F, 0x00032069 }, -	{ lolDscScaleWidthData, 0x00032069, 0x000320B1 }, -	{ lolDscScaleHeightData, 0x000320B1, 0x000320F9 }, -	{ lolDscX, 0x000320F9, 0x00032141 }, -	{ lolDscY, 0x00032141, 0x00032165 }, -	{ lolDscTileIndex, 0x00032165, 0x00032177 }, -	{ lolDscUnk2, 0x00032177, 0x0003218E }, -	{ lolDscDoorShapeIndex, 0x0003218E, 0x000321A5 }, -	{ lolDscDimData1, 0x00031C03, 0x00031D47 }, -	{ lolDscDimData2, 0x00031D47, 0x00031FD0 }, -	{ lolDscBlockMap, 0x00031B64, 0x00031B70 }, -	{ lolDscDimMap, 0x00031B70, 0x00031B82 }, -	{ lolDscDoorScale, 0x00031B82, 0x00031B92 }, -	{ lolDscShapeOvlIndex, 0x00031B92, 0x00031BBA }, -	{ lolDscDoor4, 0x00031BBA, 0x00031BC2 }, -	{ lolDscBlockIndex, 0x00033B53, 0x00033B9B }, -	{ lolDscDoor1, 0x0002B550, 0x0002B5D0 }, -	{ lolDscDoorX, 0x00027CC0, 0x00028140 }, -	{ lolDscDoorY, 0x00028140, 0x000285C0 }, +	{ kLolDscUnk1, 0x00032017, 0x0003203B }, +	{ kLolDscShapeIndex1, 0x0003203B, 0x0003205F }, +	{ kLolDscShapeIndex2, 0x0003205F, 0x00032069 }, +	{ kLolDscScaleWidthData, 0x00032069, 0x000320B1 }, +	{ kLolDscScaleHeightData, 0x000320B1, 0x000320F9 }, +	{ kLolDscX, 0x000320F9, 0x00032141 }, +	{ kLolDscY, 0x00032141, 0x00032165 }, +	{ kLolDscTileIndex, 0x00032165, 0x00032177 }, +	{ kLolDscUnk2, 0x00032177, 0x0003218E }, +	{ kLolDscDoorShapeIndex, 0x0003218E, 0x000321A5 }, +	{ kLolDscDimData1, 0x00031C03, 0x00031D47 }, +	{ kLolDscDimData2, 0x00031D47, 0x00031FD0 }, +	{ kLolDscBlockMap, 0x00031B64, 0x00031B70 }, +	{ kLolDscDimMap, 0x00031B70, 0x00031B82 }, +	{ kLolDscDoorScale, 0x00031B82, 0x00031B92 }, +	{ kLolDscShapeOvlIndex, 0x00031B92, 0x00031BBA }, +	{ kLolDscDoor4, 0x00031BBA, 0x00031BC2 }, +	{ kLolDscBlockIndex, 0x00033B53, 0x00033B9B }, +	{ kLolDscDoor1, 0x0002B550, 0x0002B5D0 }, +	{ kLolDscDoorX, 0x00027CC0, 0x00028140 }, +	{ kLolDscDoorY, 0x00028140, 0x000285C0 }, -	{ lolScrollXTop, 0x00033D40, 0x00033D4A }, -	{ lolScrollYTop, 0x00033D4A, 0x00033D54 }, -	{ lolScrollXBottom, 0x00033D54, 0x00033D5E }, -	{ lolScrollYBottom, 0x00033D5E, 0x00033D68 }, +	{ kLolScrollXTop, 0x00033D40, 0x00033D4A }, +	{ kLolScrollYTop, 0x00033D4A, 0x00033D54 }, +	{ kLolScrollXBottom, 0x00033D54, 0x00033D5E }, +	{ kLolScrollYBottom, 0x00033D5E, 0x00033D68 }, -	{ lolButtonDefs, 0x00028E80, 0x000296AA }, -	{ lolButtonList1, 0x000296B0, 0x00029700 }, -	{ lolButtonList2, 0x00029700, 0x0002971E }, -	{ lolButtonList3, 0x00029720, 0x00029724 }, -	{ lolButtonList4, 0x00029730, 0x0002974E }, -	{ lolButtonList5, 0x00029750, 0x00029770 }, -	{ lolButtonList6, 0x00029770, 0x0002978C }, -	{ lolButtonList7, 0x00029790, 0x00029796 }, -	{ lolButtonList8, 0x000297A0, 0x000297A4 }, +	{ kLolButtonDefs, 0x00028E80, 0x000296AA }, +	{ kLolButtonList1, 0x000296B0, 0x00029700 }, +	{ kLolButtonList2, 0x00029700, 0x0002971E }, +	{ kLolButtonList3, 0x00029720, 0x00029724 }, +	{ kLolButtonList4, 0x00029730, 0x0002974E }, +	{ kLolButtonList5, 0x00029750, 0x00029770 }, +	{ kLolButtonList6, 0x00029770, 0x0002978C }, +	{ kLolButtonList7, 0x00029790, 0x00029796 }, +	{ kLolButtonList8, 0x000297A0, 0x000297A4 }, -	{ lolLegendData, 0x000321F0, 0x0003222C }, -	{ lolMapCursorOvl, 0x0003222C, 0x00032245 }, -	{ lolMapStringId, 0x000287D0, 0x0002880C }, -	//{ lolMapPal, 0x0001D9C0, 0x0001DBC0 }, +	{ kLolLegendData, 0x000321F0, 0x0003222C }, +	{ kLolMapCursorOvl, 0x0003222C, 0x00032245 }, +	{ kLolMapStringId, 0x000287D0, 0x0002880C }, +	//{ kLolMapPal, 0x0001D9C0, 0x0001DBC0 }, -	{ lolSpellbookAnim, 0x00032D94, 0x00032DCC }, -	{ lolSpellbookCoords, 0x00032DCC, 0x00032DE4 }, -	{ lolHealShapeFrames, 0x000297D0, 0x00029820 }, -	{ lolLightningDefs, 0x00032740, 0x00032754 }, -	{ lolFireballCoords, 0x0001D9C0, 0x0001DBC0 }, +	{ kLolSpellbookAnim, 0x00032D94, 0x00032DCC }, +	{ kLolSpellbookCoords, 0x00032DCC, 0x00032DE4 }, +	{ kLolHealShapeFrames, 0x000297D0, 0x00029820 }, +	{ kLolLightningDefs, 0x00032740, 0x00032754 }, +	{ kLolFireballCoords, 0x0001D9C0, 0x0001DBC0 },  	{ -1, 0, 0 }  };  const Game lolGames[] = { -	{ kLol, EN_ANY, kLolCD, "263998ec600afca1cc7b935c473df670", lolCDFile2}, +	{ kLol, EN_ANY, kLolCD, "9d1778314de80598c0b0d032e2a1a1cf", lolCDFile1E }, +	{ kLol, EN_ANY, kLolCD, "263998ec600afca1cc7b935c473df670", lolCDFile2 },  	GAME_DUMMY_ENTRY  }; diff --git a/tools/create_kyradat/lol_demo.h b/tools/create_kyradat/lol_demo.h index 378b8c5dce..85470d9661 100644 --- a/tools/create_kyradat/lol_demo.h +++ b/tools/create_kyradat/lol_demo.h @@ -3,7 +3,7 @@ const ExtractEntry lolDemo[] = {  	{ k2SeqplayStrings, 0x0001B5EE, 0x0001B6F0 },  	{ k2SeqplaySfxFiles, 0x0001B6F0, 0x0001B7B5 },  	{ k2SeqplaySeqData, 0x0001B320, 0x0001B56C }, -	{ lolSeqplayIntroTracks, 0x0001B7B5, 0x0001B7CF }, +	{ kLolSeqplayIntroTracks, 0x0001B7B5, 0x0001B7CF },  	{ -1, 0, 0 }  }; diff --git a/tools/create_kyradat/misc.h b/tools/create_kyradat/misc.h index 1dac208ade..c4cd03bf5e 100644 --- a/tools/create_kyradat/misc.h +++ b/tools/create_kyradat/misc.h @@ -481,87 +481,92 @@ const int kyra3Need[] = {  	-1  }; +const int lolCDFile1ENeed[] = { +	kLolHistory, +	-1 +}; +  const int lolCDFile2Need[] = { -	lolCharacterDefs, -	lolIngameSfxFiles, -	lolIngameSfxIndex, -	lolMusicTrackMap, -	lolGMSfxIndex, -	lolMT32SfxIndex, +	kLolCharacterDefs, +	kLolIngameSfxFiles, +	kLolIngameSfxIndex, +	kLolMusicTrackMap, +	kLolGMSfxIndex, +	kLolMT32SfxIndex,  	//lolADLSfxIndex, -	lolSpellProperties, -	lolGameShapeMap, -	lolSceneItemOffs, -	lolCharInvIndex, -	lolCharInvDefs, -	lolCharDefsMan, -	lolCharDefsWoman, -	lolCharDefsKieran, +	kLolSpellProperties, +	kLolGameShapeMap, +	kLolSceneItemOffs, +	kLolCharInvIndex, +	kLolCharInvDefs, +	kLolCharDefsMan, +	kLolCharDefsWoman, +	kLolCharDefsKieran,  	//lolCharDefsUnk, -	lolCharDefsAkshel, -	lolExpRequirements, -	lolMonsterModifiers, -	lolMonsterLevelOffsets, -	lolMonsterDirFlags, -	lolMonsterScaleY, -	lolMonsterScaleX, -	lolMonsterScaleWH, -	lolFlyingItemShp, -	lolInventoryDesc, - -	lolLevelShpList, -	lolLevelDatList, -	lolCompassDefs, -	lolItemPrices, -	lolStashSetup, -	lolDscUnk1, -	lolDscShapeIndex1, -	lolDscShapeIndex2, -	lolDscScaleWidthData, -	lolDscScaleHeightData, -	lolDscX, -	lolDscY, -	lolDscTileIndex, -	lolDscUnk2, -	lolDscDoorShapeIndex, -	lolDscDimData1, -	lolDscDimData2, -	lolDscBlockMap, -	lolDscDimMap, -	lolDscShapeOvlIndex, -	lolDscBlockIndex, -	lolDscDoor1, -	lolDscDoorScale, -	lolDscDoor4, -	lolDscDoorX, -	lolDscDoorY, - -	lolScrollXTop, -	lolScrollYTop, -	lolScrollXBottom, -	lolScrollYBottom, - -	lolButtonDefs, -	lolButtonList1, -	lolButtonList1, -	lolButtonList2, -	lolButtonList3, -	lolButtonList4, -	lolButtonList5, -	lolButtonList6, -	lolButtonList7, -	lolButtonList8, - -	lolLegendData, -	lolMapCursorOvl, -	lolMapStringId, +	kLolCharDefsAkshel, +	kLolExpRequirements, +	kLolMonsterModifiers, +	kLolMonsterLevelOffsets, +	kLolMonsterDirFlags, +	kLolMonsterScaleY, +	kLolMonsterScaleX, +	kLolMonsterScaleWH, +	kLolFlyingItemShp, +	kLolInventoryDesc, + +	kLolLevelShpList, +	kLolLevelDatList, +	kLolCompassDefs, +	kLolItemPrices, +	kLolStashSetup, +	kLolDscUnk1, +	kLolDscShapeIndex1, +	kLolDscShapeIndex2, +	kLolDscScaleWidthData, +	kLolDscScaleHeightData, +	kLolDscX, +	kLolDscY, +	kLolDscTileIndex, +	kLolDscUnk2, +	kLolDscDoorShapeIndex, +	kLolDscDimData1, +	kLolDscDimData2, +	kLolDscBlockMap, +	kLolDscDimMap, +	kLolDscShapeOvlIndex, +	kLolDscBlockIndex, +	kLolDscDoor1, +	kLolDscDoorScale, +	kLolDscDoor4, +	kLolDscDoorX, +	kLolDscDoorY, + +	kLolScrollXTop, +	kLolScrollYTop, +	kLolScrollXBottom, +	kLolScrollYBottom, + +	kLolButtonDefs, +	kLolButtonList1, +	kLolButtonList1, +	kLolButtonList2, +	kLolButtonList3, +	kLolButtonList4, +	kLolButtonList5, +	kLolButtonList6, +	kLolButtonList7, +	kLolButtonList8, + +	kLolLegendData, +	kLolMapCursorOvl, +	kLolMapStringId,  	//lolMapPal, -	lolSpellbookAnim, -	lolSpellbookCoords, -	lolHealShapeFrames, -	lolLightningDefs, -	lolFireballCoords, +	kLolSpellbookAnim, +	kLolSpellbookCoords, +	kLolHealShapeFrames, +	kLolLightningDefs, +	kLolFireballCoords,  	-1  }; @@ -571,7 +576,7 @@ const int lolDemoNeed[] = {  	k2SeqplayStrings,  	k2SeqplaySeqData,  	k2SeqplaySfxFiles, -	lolSeqplayIntroTracks, +	kLolSeqplayIntroTracks,  	-1  }; @@ -604,6 +609,7 @@ const GameNeed gameNeedTable[] = {  	{ kKyra3, -1, kyra3Need }, +	{ kLol, kLolCD, lolCDFile1ENeed },  	{ kLol, kLolCD, lolCDFile2Need },  	{ -1, -1, 0 } | 
