aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/fs/psp/psp-fs-factory.cpp3
-rw-r--r--backends/fs/psp/psp-fs.cpp2
-rw-r--r--backends/platform/psp/psp.mk38
-rw-r--r--backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg2
-rw-r--r--backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg2
-rw-r--r--backends/platform/symbian/src/SymbianActions.cpp2
-rw-r--r--backends/platform/symbian/src/portdefs.h4
-rw-r--r--backends/platform/wii/gx_supp.cpp6
-rw-r--r--common/hashmap.h13
-rwxr-xr-xconfigure1
-rw-r--r--dists/engine-data/kyra.datbin257348 -> 257836 bytes
-rw-r--r--dists/msvc8/gob.vcproj1
-rw-r--r--dists/msvc9/gob.vcproj1
-rw-r--r--engines/agi/detection.cpp5
-rw-r--r--engines/agos/animation.cpp7
-rw-r--r--engines/agos/script.cpp6
-rw-r--r--engines/agos/sound.cpp20
-rw-r--r--engines/agos/vga.cpp2
-rw-r--r--engines/cruise/background.cpp3
-rw-r--r--engines/cruise/background.h1
-rw-r--r--engines/cruise/backgroundIncrust.cpp6
-rw-r--r--engines/cruise/cell.cpp5
-rw-r--r--engines/cruise/detection.cpp2
-rw-r--r--engines/cruise/function.cpp8
-rw-r--r--engines/cruise/gfxModule.cpp72
-rw-r--r--engines/cruise/gfxModule.h1
-rw-r--r--engines/cruise/mainDraw.cpp11
-rw-r--r--engines/cruise/staticres.cpp14
-rw-r--r--engines/cruise/staticres.h14
-rw-r--r--engines/gob/gob.cpp8
-rw-r--r--engines/gob/inter.h15
-rw-r--r--engines/gob/inter_playtoons.cpp141
-rw-r--r--engines/gob/inter_v2.cpp6
-rw-r--r--engines/gob/module.mk1
-rw-r--r--engines/gob/save/saveload.h47
-rw-r--r--engines/gob/save/saveload_playtoons.cpp276
-rw-r--r--engines/gob/save/saveload_v3.cpp7
-rw-r--r--engines/gob/video_v6.cpp2
-rw-r--r--engines/kyra/lol.h34
-rw-r--r--engines/kyra/resource.h22
-rw-r--r--engines/kyra/screen.cpp16
-rw-r--r--engines/kyra/sequences_lok.cpp28
-rw-r--r--engines/kyra/sequences_lol.cpp274
-rw-r--r--engines/kyra/sound.cpp5
-rw-r--r--engines/kyra/staticres.cpp45
-rw-r--r--engines/parallaction/font.cpp2
-rw-r--r--engines/sci/console.cpp2
-rw-r--r--engines/sci/detection.cpp291
-rw-r--r--engines/sci/engine/game.cpp2
-rw-r--r--engines/sci/engine/kernel.cpp15
-rw-r--r--engines/sci/engine/savegame.cpp2
-rw-r--r--engines/sci/engine/script.cpp1
-rw-r--r--engines/sci/engine/state.cpp2
-rw-r--r--engines/sci/engine/state.h6
-rw-r--r--engines/sci/exereader.cpp67
-rw-r--r--engines/sci/exereader.h2
-rw-r--r--engines/sci/gfx/gfx_resmgr.cpp2
-rw-r--r--engines/sci/resource.cpp200
-rw-r--r--engines/sci/resource.h45
-rw-r--r--engines/sci/sci.cpp22
-rw-r--r--engines/sci/sci.h17
-rw-r--r--engines/sci/sfx/softseq/adlib.cpp2
-rw-r--r--engines/sci/vocabulary.cpp2
-rw-r--r--engines/sword2/sprite.cpp2
-rw-r--r--engines/tinsel/actors.cpp2
-rw-r--r--engines/tinsel/scene.cpp2
-rw-r--r--engines/tinsel/tinlib.cpp2
-rw-r--r--engines/tucker/tucker.cpp2
-rw-r--r--graphics/scaler/scale2x.h5
-rw-r--r--graphics/scaler/scale3x.h4
-rw-r--r--gui/themes/scummmodern.zipbin158238 -> 158294 bytes
-rw-r--r--gui/themes/scummmodern/scummmodern_layout.stx17
-rw-r--r--sound/audiostream.cpp196
-rw-r--r--sound/audiostream.h20
-rw-r--r--sound/voc.cpp143
-rw-r--r--sound/voc.h5
-rw-r--r--tools/create_kyradat/create_kyradat.cpp170
-rw-r--r--tools/create_kyradat/create_kyradat.h164
-rw-r--r--tools/create_kyradat/lol_cd.h156
-rw-r--r--tools/create_kyradat/lol_demo.h2
-rw-r--r--tools/create_kyradat/misc.h160
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;
diff --git a/configure b/configure
index c4f3e579b5..9bb2dca65a 100755
--- a/configure
+++ b/configure
@@ -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
index da57e2ce2a..eb3ff24c2a 100644
--- a/dists/engine-data/kyra.dat
+++ b/dists/engine-data/kyra.dat
Binary files differ
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 &params);
+ 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 &params) {
+ 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 &params) {
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
index beff0131f4..7e693c3247 100644
--- a/gui/themes/scummmodern.zip
+++ b/gui/themes/scummmodern.zip
Binary files differ
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 }