diff options
81 files changed, 1985 insertions, 928 deletions
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; @@ -1434,6 +1434,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.dat Binary files differindex 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/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..d7c1b1c22d 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" 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_playtoons.cpp b/engines/gob/inter_playtoons.cpp new file mode 100644 index 0000000000..285360c613 --- /dev/null +++ b/engines/gob/inter_playtoons.cpp @@ -0,0 +1,141 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "common/endian.h" + +#include "gob/gob.h" +#include "gob/inter.h" +#include "gob/global.h" +#include "gob/util.h" +#include "gob/dataio.h" +#include "gob/draw.h" +#include "gob/game.h" +#include "gob/script.h" +#include "gob/palanim.h" +#include "gob/video.h" +#include "gob/videoplayer.h" +#include "gob/save/saveload.h" +#include "gob/sound/sound.h" + +namespace Gob { + +#define OPCODEVER Inter_Playtoons +#define OPCODEDRAW(i, x) _opcodesDraw[i]._OPCODEDRAW(OPCODEVER, x) +#define OPCODEFUNC(i, x) _opcodesFunc[i]._OPCODEFUNC(OPCODEVER, x) +#define OPCODEGOB(i, x) _opcodesGob[i]._OPCODEGOB(OPCODEVER, x) + +Inter_Playtoons::Inter_Playtoons(GobEngine *vm) : Inter_v6(vm) { +} + +void Inter_Playtoons::setupOpcodesDraw() { + Inter_v6::setupOpcodesDraw(); + +// In the code, the Draw codes 0x00 to 0x06 and 0x13 are replaced by an engrish +// error message. As it's useless, they are simply cleared. + CLEAROPCODEDRAW(0x00); + CLEAROPCODEDRAW(0x01); + CLEAROPCODEDRAW(0x02); + CLEAROPCODEDRAW(0x03); + CLEAROPCODEDRAW(0x04); + CLEAROPCODEDRAW(0x05); + CLEAROPCODEDRAW(0x06); + CLEAROPCODEDRAW(0x13); + + CLEAROPCODEDRAW(0x21); + CLEAROPCODEDRAW(0x22); + CLEAROPCODEDRAW(0x24); + + OPCODEDRAW(0x20, oPlaytoons_CD_20_23); + OPCODEDRAW(0x23, oPlaytoons_CD_20_23); + OPCODEDRAW(0x25, oPlaytoons_CD_25); +} + +void Inter_Playtoons::setupOpcodesFunc() { + Inter_v6::setupOpcodesFunc(); + + OPCODEFUNC(0x3F, oPlaytoons_checkData); +} + +void Inter_Playtoons::setupOpcodesGob() { +} + +bool Inter_Playtoons::oPlaytoons_checkData(OpFuncParams ¶ms) { + int16 handle; + int16 varOff; + int32 size; + SaveLoad::SaveMode mode; + + _vm->_game->_script->evalExpr(0); + varOff = _vm->_game->_script->readVarIndex(); + + size = -1; + handle = 1; + + char *file = _vm->_game->_script->getResultStr(); + + // WORKAROUND: In Playtoons games, some files are read on CD (and only on CD). + // In this case, "@:\" is replaced by the CD drive letter. + // As the files are copied on the HDD, those characters are skipped. + if (strncmp(file, "@:\\", 3) == 0) { + debugC(2, kDebugFileIO, "File check: \"%s\" instead of \"%s\"", file + 3, file); + file += 3; + } + + mode = _vm->_saveLoad->getSaveMode(file); + if (mode == SaveLoad::kSaveModeNone) { + + if (_vm->_dataIO->existData(file)) + size = _vm->_dataIO->getDataSize(file); + else + warning("File \"%s\" not found", file); + + } else if (mode == SaveLoad::kSaveModeSave) + size = _vm->_saveLoad->getSize(file); + else if (mode == SaveLoad::kSaveModeExists) + size = 23; + + if (size == -1) + handle = -1; + + debugC(2, kDebugFileIO, "Requested size of file \"%s\": %d", + file, size); + + WRITE_VAR_OFFSET(varOff, handle); + WRITE_VAR(16, (uint32) size); + + return false; +} + +void Inter_Playtoons::oPlaytoons_CD_20_23() { + _vm->_game->_script->evalExpr(0); +} + +void Inter_Playtoons::oPlaytoons_CD_25() { + _vm->_game->_script->readVarIndex(); + _vm->_game->_script->readVarIndex(); +} + + +} // End of namespace Gob 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 983eeea8cf..5468f7c89d 100644 --- a/engines/gob/video_v6.cpp +++ b/engines/gob/video_v6.cpp @@ -40,7 +40,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/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..52035a49f4 100644 --- a/engines/kyra/screen.cpp +++ b/engines/kyra/screen.cpp @@ -658,10 +658,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 8425bf9b0c..35f434698b 100644 --- a/engines/kyra/sequences_lok.cpp +++ b/engines/kyra/sequences_lok.cpp @@ -1135,8 +1135,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(); } @@ -1287,8 +1295,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; @@ -1309,17 +1319,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); @@ -1351,7 +1358,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)); @@ -1396,7 +1402,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(); @@ -1414,8 +1420,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 4d42b1efb7..91945d91ee 100644 --- a/engines/kyra/sound.cpp +++ b/engines/kyra/sound.cpp @@ -235,10 +235,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/staticres.cpp b/engines/kyra/staticres.cpp index e33d24bf59..51288f31df 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); 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 ca61b534ed..1cd4745734 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 3e434e4f02..299573f960 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" @@ -135,20 +134,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"); @@ -215,7 +217,7 @@ Common::Error SciEngine::run() { // Default config ends #endif - if (gfxop_init(_resmgr->_sciVersion, &gfx_state, &gfx_options, _resmgr, gfxmode, 1, 1)) { + if (gfxop_init(_resmgr->sciVersion(), &gfx_state, &gfx_options, _resmgr, gfxmode, 1, 1)) { warning("Graphics initialization failed. Aborting..."); return Common::kUnknownError; } @@ -268,14 +270,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/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/themes/scummmodern.zip b/gui/themes/scummmodern.zip Binary files differindex 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 } |