[Scummvm-git-logs] scummvm master -> 48be72b95afe9d5aeedb5a8f557687f2a3ae4792

djsrv dservilla at gmail.com
Mon Aug 10 19:14:18 UTC 2020


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
0ff7274993 DIRECTOR: Multiply version numbers by 100
2f0090e11d DIRECTOR: LINGO: Reload builtins on version change
48be72b95a DIRECTOR: Load version from config


Commit: 0ff727499375839123dda704ed6b837dbd25ac58
    https://github.com/scummvm/scummvm/commit/0ff727499375839123dda704ed6b837dbd25ac58
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-10T15:00:55-04:00

Commit Message:
DIRECTOR: Multiply version numbers by 100

To accomodate minor version.

Changed paths:
    engines/director/cast.cpp
    engines/director/castmember.cpp
    engines/director/channel.cpp
    engines/director/detection_tables.h
    engines/director/director.cpp
    engines/director/frame.cpp
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-events.cpp
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l
    engines/director/lingo/lingo-object.cpp
    engines/director/lingo/lingo-preprocessor.cpp
    engines/director/lingo/lingo-the.cpp
    engines/director/lingo/lingo.cpp
    engines/director/lingo/tests/math.lingo
    engines/director/lingo/tests/strings.lingo
    engines/director/lingo/xlibs/fileio.cpp
    engines/director/lingo/xlibs/flushxobj.cpp
    engines/director/lingo/xlibs/palxobj.cpp
    engines/director/lingo/xlibs/winxobj.cpp
    engines/director/movie.cpp
    engines/director/resource.cpp
    engines/director/score.cpp
    engines/director/sound.cpp
    engines/director/sprite.cpp
    engines/director/util.cpp


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index d27bd051c5..77ce1ff57d 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -180,7 +180,7 @@ Common::String Cast::getString(Common::String str) {
 	}
 
 	//TODO: check if all versions need to cut off the first character.
-	if (_vm->getVersion() > 3) {
+	if (_vm->getVersion() >= 400) {
 		str.deleteChar(0);
 	}
 
@@ -292,7 +292,7 @@ bool Cast::loadArchive() {
 	}
 
 	// For D4+ we may request to force Lingo scripts and skip precompiled bytecode
-	if (_vm->getVersion() >= 4 && !debugChannelSet(-1, kDebugNoBytecode)) {
+	if (_vm->getVersion() >= 400 && !debugChannelSet(-1, kDebugNoBytecode)) {
 		// Try to load script context
 		Common::Array<uint16> lctx =  _castArchive->getResourceIDList(MKTAG('L','c','t','x'));
 		if (lctx.size() > 0) {
@@ -328,7 +328,7 @@ bool Cast::loadArchive() {
 		delete r;
 
 		// Try to load movie script, it starts with a comment
-		if (_vm->getVersion() <= 3) {
+		if (_vm->getVersion() <= 300) {
 			if (debugChannelSet(-1, kDebugFewFramesOnly))
 				warning("Compiling STXT %d", *iterator);
 
@@ -387,7 +387,7 @@ void Cast::loadConfig(Common::SeekableSubReadStreamEndian &stream) {
 		stream.readByte();
 	}
 
-	if (_vm->getVersion() >= 4) {
+	if (_vm->getVersion() >= 400) {
 		for (int i = 0; i < 0x16; i++)
 			stream.readByte();
 
@@ -411,7 +411,7 @@ void Cast::copyCastStxts() {
 			continue;
 
 		uint stxtid;
-		if (_vm->getVersion() >= 4 && c->_value->_children.size() > 0)
+		if (_vm->getVersion() >= 400 && c->_value->_children.size() > 0)
 			stxtid = c->_value->_children[0].index;
 		else
 			stxtid = c->_key;
@@ -441,9 +441,9 @@ void Cast::loadCastChildren() {
 			PaletteCastMember *member = ((PaletteCastMember *)c->_value);
 
 			// TODO: Verify how palettes work in >D4 versions
-			if (_vm->getVersion() == 4 && member->_children.size() == 1) {
+			if (_vm->getVersion() >= 400 && _vm->getVersion() < 500 && member->_children.size() == 1) {
 				member->_palette = g_director->getPalette(member->_children[0].index);
-			} else if (_vm->getVersion() < 4) {
+			} else if (_vm->getVersion() < 400) {
 				// D3 palettes are always kept in this ascending order
 				member->_palette = g_director->getPalette((++p)->_value.id);
 			} else {
@@ -464,7 +464,7 @@ void Cast::loadCastChildren() {
 		Image::ImageDecoder *img = NULL;
 		Common::SeekableReadStream *pic = NULL;
 
-		if (_vm->getVersion() >= 4 && bitmapCast->_children.size() > 0) {
+		if (_vm->getVersion() >= 400 && bitmapCast->_children.size() > 0) {
 			imgId = bitmapCast->_children[0].index;
 			tag = bitmapCast->_children[0].tag;
 
@@ -502,7 +502,7 @@ void Cast::loadCastChildren() {
 			debugC(2, kDebugLoading, "****** Loading 'BITD' id: %d (%d), %d bytes", imgId, realId, pic->size());
 
 			if (w > 0 && h > 0) {
-				if (_vm->getVersion() < 6) {
+				if (_vm->getVersion() < 600) {
 					img = new BITDDecoder(w, h, bitmapCast->_bitsPerPixel, bitmapCast->_pitch, _vm->getPalette());
 				} else {
 					img = new Image::BitmapDecoder();
@@ -547,7 +547,7 @@ void Cast::loadSoundCasts() {
 		uint32 tag = MKTAG('S', 'N', 'D', ' ');
 		uint16 sndId = (uint16)(c->_key + _castIDoffset);
 
-		if (_vm->getVersion() >= 4 && soundCast->_children.size() > 0) {
+		if (_vm->getVersion() >= 400 && soundCast->_children.size() > 0) {
 			sndId = soundCast->_children[0].index;
 			tag = soundCast->_children[0].tag;
 		}
@@ -599,7 +599,7 @@ void Cast::loadDigitalVideoCasts() {
 		uint32 tag = MKTAG('M', 'o', 'o', 'V');
 		uint16 videoId = (uint16)(c->_key + _castIDoffset);
 
-		if (_vm->getVersion() >= 4 && digitalVideoCast->_children.size() > 0) {
+		if (_vm->getVersion() >= 400 && digitalVideoCast->_children.size() > 0) {
 			videoId = digitalVideoCast->_children[0].index;
 			tag = digitalVideoCast->_children[0].tag;
 		}
@@ -768,7 +768,7 @@ void Cast::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
 
 	// D2-3 cast members should be loaded in loadCastDataVWCR
 #if 0
-	if (_vm->getVersion() <= 3) {
+	if (_vm->getVersion() < 400) {
 		size1 = stream.readUint16();
 		sizeToRead = size1 +16; // 16 is for bounding rects
 		size2 = stream.readUint32();
@@ -780,7 +780,7 @@ void Cast::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
 	}
 #endif
 
-	if (_vm->getVersion() == 4) {
+	if (_vm->getVersion() >= 400 && _vm->getVersion() < 500) {
 		castSize = stream.readUint16();
 		castSizeToRead = castSize;
 		castInfoSize = stream.readUint32();
@@ -793,7 +793,7 @@ void Cast::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
 			flags1 = stream.readByte();
 			castSizeToRead -= 1;
 		}
-	} else if (_vm->getVersion() == 5) {
+	} else if (_vm->getVersion() >= 500 && _vm->getVersion() < 600) {
 		castType = stream.readUint32();
 		size3 = stream.readUint32();
 		castInfoSize = stream.readUint32();
@@ -889,7 +889,7 @@ void Cast::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
 
 	// read the cast member info
 
-	if (castInfoSize && _vm->getVersion() < 5) {
+	if (castInfoSize && _vm->getVersion() < 500) {
 		loadCastInfo(stream, id);
 	}
 
@@ -909,7 +909,7 @@ LingoContextEntry::LingoContextEntry(int32 i, int16 n)
 	: index(i), nextUnused(n), unused(false) {}
 
 void Cast::loadLingoContext(Common::SeekableSubReadStreamEndian &stream) {
-	if (_vm->getVersion() >= 4) {
+	if (_vm->getVersion() >= 400) {
 		debugC(1, kDebugCompile, "Add V4 script context");
 
 		if (debugChannelSet(5, kDebugLoading)) {
@@ -1116,7 +1116,7 @@ void Cast::loadCastInfo(Common::SeekableSubReadStreamEndian &stream, uint16 id)
 
 	CastMember *member = _loadedCast->getVal(id);
 	// For D4+ we may force Lingo scripts
-	if (_vm->getVersion() < 4 || debugChannelSet(-1, kDebugNoBytecode)) {
+	if (_vm->getVersion() < 400 || debugChannelSet(-1, kDebugNoBytecode)) {
 		if (!ci->script.empty()) {
 			ScriptType scriptType = kCastScript;
 			// the script type here could be wrong!
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index 239b8bfb57..f6086b7daf 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -58,7 +58,7 @@ BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 	_clut = kClutSystemMac;
 	_bitsPerPixel = 0;
 
-	if (version < 4) {
+	if (version < 400) {
 		_flags1 = flags1;	// region: 0 - auto, 1 - matte, 2 - disabled, 8 - no auto
 		if (_flags1 >> 4 == 0x0)
 			_autoHilite = true;
@@ -81,7 +81,7 @@ BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 		if (_pitch % 16)
 			_pitch += 16 - (_initialRect.width() % 16);
 
-	} else if (version == 4) {
+	} else if (version >= 400 && version < 500) {
 		_flags1 = flags1;
 		_pitch = stream.readUint16();
 		_pitch &= 0x0fff;
@@ -132,7 +132,7 @@ BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 			debug("BitmapCastMember: tail");
 			Common::hexdump(buf, tail);
 		}
-	} else if (version == 5) {
+	} else if (version >= 500) {
 		uint16 count = stream.readUint16();
 		for (uint16 cc = 0; cc < count; cc++)
 			stream.readUint32();
@@ -305,7 +305,7 @@ TextCastMember::TextCastMember(Cast *cast, uint16 castId, Common::SeekableReadSt
 	_bgpalinfo1 = _bgpalinfo2 = _bgpalinfo3 = 0;
 	_fgpalinfo1 = _fgpalinfo2 = _fgpalinfo3 = 0xff;
 
-	if (version <= 3) {
+	if (version < 400) {
 		_flags1 = flags1; // region: 0 - auto, 1 - matte, 2 - disabled
 		_borderSize = static_cast<SizeType>(stream.readByte());
 		_gutterSize = static_cast<SizeType>(stream.readByte());
@@ -321,7 +321,7 @@ TextCastMember::TextCastMember(Cast *cast, uint16 castId, Common::SeekableReadSt
 		uint16 pad4 = 0;
 		uint16 totalTextHeight;
 
-		if (version == 2) {
+		if (version >= 200 && version < 300) {
 			pad2 = stream.readUint16();
 			if (pad2 != 0) { // In D2 there are values
 				warning("TextCastMember: pad2: %x", pad2);
@@ -351,7 +351,7 @@ TextCastMember::TextCastMember(Cast *cast, uint16 castId, Common::SeekableReadSt
 		if (debugChannelSet(2, kDebugLoading)) {
 			_initialRect.debugPrint(2, "TextCastMember(): rect:");
 		}
-	} else if (version == 4) {
+	} else if (version >= 400 && version < 500) {
 		_flags1 = flags1;
 		_borderSize = static_cast<SizeType>(stream.readByte());
 		_gutterSize = static_cast<SizeType>(stream.readByte());
@@ -401,7 +401,7 @@ TextCastMember::TextCastMember(Cast *cast, uint16 castId, Common::SeekableReadSt
 	if (asButton) {
 		_type = kCastButton;
 
-		if (version <= 4) {
+		if (version < 500) {
 			_buttonType = static_cast<ButtonType>(stream.readUint16BE() - 1);
 		} else {
 			warning("TextCastMember(): Attempting to initialize >D4 button castmember");
@@ -533,7 +533,7 @@ ShapeCastMember::ShapeCastMember(Cast *cast, uint16 castId, Common::SeekableRead
 
 	_ink = kInkTypeCopy;
 
-	if (version < 4) {
+	if (version < 400) {
 		unk1 = stream.readByte();
 		_shapeType = static_cast<ShapeType>(stream.readByte());
 		_initialRect = Movie::readRect(stream);
@@ -545,7 +545,7 @@ ShapeCastMember::ShapeCastMember(Cast *cast, uint16 castId, Common::SeekableRead
 		_ink = static_cast<InkType>(_fillType & 0x3f);
 		_lineThickness = stream.readByte();
 		_lineDirection = stream.readByte();
-	} else if (version == 4) {
+	} else if (version >= 400 && version < 500) {
 		unk1 = stream.readByte();
 		_shapeType = static_cast<ShapeType>(stream.readByte());
 		_initialRect = Movie::readRect(stream);
@@ -584,9 +584,9 @@ ScriptCastMember::ScriptCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 	_type = kCastLingoScript;
 	_scriptType = kNoneScript;
 
-	if (version < 4) {
+	if (version < 400) {
 		error("Unhandled Script cast");
-	} else if (version == 4) {
+	} else if (version >= 400 && version < 500) {
 		byte unk1 = stream.readByte();
 		byte type = stream.readByte();
 
@@ -605,7 +605,7 @@ ScriptCastMember::ScriptCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 
 		stream.readByte(); // There should be no more data
 		assert(stream.eos());
-	} else if (version > 4) {
+	} else if (version >= 500) {
 		stream.readByte();
 		stream.readByte();
 
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index 5acaa25ba9..167df1e7b7 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -429,7 +429,7 @@ MacShape *Channel::getShape() {
 	shape->lineSize = _sprite->_thickness & 0x3;
 	shape->pattern = _sprite->getPattern();
 
-	if (g_director->getVersion() >= 3 && shape->spriteType == kCastMemberSprite) {
+	if (g_director->getVersion() >= 300 && shape->spriteType == kCastMemberSprite) {
 		if (!_sprite->_cast) {
 			warning("Channel::getShape(): kCastMemberSprite has no cast defined");
 			delete shape;
@@ -454,7 +454,7 @@ MacShape *Channel::getShape() {
 			break;
 		}
 
-		if (g_director->getVersion() > 3) {
+		if (g_director->getVersion() >= 400) {
 			shape->foreColor = sc->getForeColor();
 			shape->backColor = sc->getBackColor();
 			shape->lineSize = sc->_lineThickness;
diff --git a/engines/director/detection_tables.h b/engines/director/detection_tables.h
index 23026e1468..4bbe4306ce 100644
--- a/engines/director/detection_tables.h
+++ b/engines/director/detection_tables.h
@@ -49,7 +49,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_TEST,
-		4
+		400
 	},
 
 	// Execute all movies in directory
@@ -64,23 +64,23 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_TESTALL,
-		4
+		400
 	},
 
 	// Generic D2 Mac entry
-	MACGAME("director", "D2-mac", "D2-mac", 0, -1, 2),
+	MACGAME("director", "D2-mac", "D2-mac", 0, -1, 200),
 	// Generic D3 Mac entry
-	MACGAME("director", "D3-mac", "D3-mac", 0, -1, 3),
+	MACGAME("director", "D3-mac", "D3-mac", 0, -1, 300),
 	// Generic D4 Mac entry
-	MACGAME("director", "D4-mac", "D4-mac", 0, -1, 4),
+	MACGAME("director", "D4-mac", "D4-mac", 0, -1, 400),
 	// Generic D3 Win entry
-	WINGAME("director", "D3-win", "D3-win", 0, -1, 3),
+	WINGAME("director", "D3-win", "D3-win", 0, -1, 300),
 	// Generic D4 Win entry
-	WINGAME("director", "D4-win", "D4-win", 0, -1, 4),
+	WINGAME("director", "D4-win", "D4-win", 0, -1, 400),
 
-	MACGAME("theapartment", "D2", "Main Menu", "fc56c179cb8c6d4938e61ee61fd0032c", 48325, 2), // Original name is "•Main Menu"
-	MACGAME("theapartment", "D3", "Main Menu", "9e838fe1a6af7992d656ca325e38dee5", 47911, 3), // Original name is "•Main Menu"
-	MACGAME("theapartment", "D4", "Main Menu", "ff86181f03fe6eb060f65a985ca0580d", 160612, 4), // Original name is "•Main Menu"
+	MACGAME("theapartment", "D2", "Main Menu", "fc56c179cb8c6d4938e61ee61fd0032c", 48325, 200), // Original name is "•Main Menu"
+	MACGAME("theapartment", "D3", "Main Menu", "9e838fe1a6af7992d656ca325e38dee5", 47911, 300), // Original name is "•Main Menu"
+	MACGAME("theapartment", "D4", "Main Menu", "ff86181f03fe6eb060f65a985ca0580d", 160612, 400), // Original name is "•Main Menu"
 
 ////////////////////////////////////////
 //
@@ -96,12 +96,12 @@ static const DirectorGameDescription gameDescriptions[] = {
 //
 ////////////////////////////////////////
 
-	MACGAME_l("alice", "", "Alice", "e54ec74aeb4355b0acd46320327c1bed", 274274, Common::JA_JPN, 2),
-	MACGAME_l("tri3dtrial", "", "Tri-3D-Trial", "cfa68a1bc49251497ebde18e5fc9c217", 271223, Common::JA_JPN, 2),
+	MACGAME_l("alice", "", "Alice", "e54ec74aeb4355b0acd46320327c1bed", 274274, Common::JA_JPN, 200),
+	MACGAME_l("tri3dtrial", "", "Tri-3D-Trial", "cfa68a1bc49251497ebde18e5fc9c217", 271223, Common::JA_JPN, 200),
 
-	MACGAME("warlock", "v1.0", "Spaceship Warlock", "cfa68a1bc49251497ebde18e5fc9c217", 271093, 2),
-	MACGAME("warlock", "v1.1.1", "Spaceship Warlock", "cfa68a1bc49251497ebde18e5fc9c217", 271107, 2),
-	MACDEMO("warlock", "Demo", "Spaceship Warlock Demo", "cfa68a1bc49251497ebde18e5fc9c217", 271099, 2),
+	MACGAME("warlock", "v1.0", "Spaceship Warlock", "cfa68a1bc49251497ebde18e5fc9c217", 271093, 200),
+	MACGAME("warlock", "v1.1.1", "Spaceship Warlock", "cfa68a1bc49251497ebde18e5fc9c217", 271107, 200),
+	MACDEMO("warlock", "Demo", "Spaceship Warlock Demo", "cfa68a1bc49251497ebde18e5fc9c217", 271099, 200),
 
 ////////////////////////////////////////
 //
@@ -109,21 +109,21 @@ static const DirectorGameDescription gameDescriptions[] = {
 //
 ////////////////////////////////////////
 
-	MACGAME_l("alexworld", "", "AlexWorld", "f5277c53bacd27936158dd3867e587e2", 391576, Common::JA_JPN, 3),
-	WINGAME_l("alexworld", "", "ALEX.EXE", "65d06b5fef155a2473434571aff5bc29", 369996, Common::JA_JPN, 3),
+	MACGAME_l("alexworld", "", "AlexWorld", "f5277c53bacd27936158dd3867e587e2", 391576, Common::JA_JPN, 300),
+	WINGAME_l("alexworld", "", "ALEX.EXE", "65d06b5fef155a2473434571aff5bc29", 369996, Common::JA_JPN, 300),
 
-	MACGAME("amandastories", "3.0", "AmandaStories", "1687f456d7f2bcf98e84fec6d3a03c17", 353985, 3),
+	MACGAME("amandastories", "3.0", "AmandaStories", "1687f456d7f2bcf98e84fec6d3a03c17", 353985, 300),
 
-	MACGAME("beyondthewall", "", "Beyond The Wall Of Stars", "107c6a6d3cce957eaa26d427e672000c", 465523, 3),
-	WINGAME("beyondthewall", "", "WALL.EXE", "5c6862a40a48881913ee7c50d25cd984", 225253, 3),
+	MACGAME("beyondthewall", "", "Beyond The Wall Of Stars", "107c6a6d3cce957eaa26d427e672000c", 465523, 300),
+	WINGAME("beyondthewall", "", "WALL.EXE", "5c6862a40a48881913ee7c50d25cd984", 225253, 300),
 
-	MACGAME("chaos", "", "The C.H.A.O.S. Continuum", "2ce360c9ea2da80a2c6d1040b0ad92dd", 384481, 3), // original name is The C.H.A.O.S. Continuumâ„¢
-	WINGAME("chaos", "", "CHAOS.EXE", "7c8230a804abf9353b05627a675b5ffb", 375294, 3),
+	MACGAME("chaos", "", "The C.H.A.O.S. Continuum", "2ce360c9ea2da80a2c6d1040b0ad92dd", 384481, 300), // original name is The C.H.A.O.S. Continuumâ„¢
+	WINGAME("chaos", "", "CHAOS.EXE", "7c8230a804abf9353b05627a675b5ffb", 375294, 300),
 
 	// almost all folders and file names use Japanese encoding, including executable
-	MACGAME_l("easternmind", "", "Tong Nou", "276bee761e48a6fd709df77d5c2f60dd", 395037, Common::JA_JPN, 3),
+	MACGAME_l("easternmind", "", "Tong Nou", "276bee761e48a6fd709df77d5c2f60dd", 395037, Common::JA_JPN, 300),
 
-	MACGAME("freakshow", "D3", "Freak Show Projector", "bb61dd0cc8356e51fe54c1a00f979b8f", 439483, 3),
+	MACGAME("freakshow", "D3", "Freak Show Projector", "bb61dd0cc8356e51fe54c1a00f979b8f", 439483, 300),
 
 	{
 		{
@@ -140,23 +140,23 @@ static const DirectorGameDescription gameDescriptions[] = {
 		3
 	},
 
-	MACGAME("ironhelix", "", "Iron Helix Minimum", "1ae45c23586b41997ba52e2e7c771c4c", 1652052, 3),
-	MACDEMO("ironhelix", "Demo", "IRON HELIX DEMO", "7c80091b84d4d5d48f7c773b30b10598", 1634901, 3),
+	MACGAME("ironhelix", "", "Iron Helix Minimum", "1ae45c23586b41997ba52e2e7c771c4c", 1652052, 300),
+	MACDEMO("ironhelix", "Demo", "IRON HELIX DEMO", "7c80091b84d4d5d48f7c773b30b10598", 1634901, 300),
 
-	MACGAME("jman", "", "Journeyman.16 MB", "1ae45c23586b41997ba52e2e7c771c4c", 437743, 3),
-	MACDEMO("jman", "Sneak Preview", "Journeyman Sneak Preview", "9f0bb7ec7720e4f680ee3aa3d22c1c9d", 6222889, 3),
-	MACDEMO("jman", "CD Demo", "Journeyman Demo", "424093b2bc04a1bfa4376c878f67a364", 3083188, 3),
-	MACDEMO("jman", "Looping Demo", "Journeyman Looping Demo", "1ae45c23586b41997ba52e2e7c771c4c", 3077658, 3),
-	WINGAME("jman", "", "JMAN.EXE", "7c8230a804abf9353b05627a675b5ffb", 375282, 3),
-	WINGAME_l("jman", "", "JOURNEY.EXE", "65d06b5fef155a2473434571aff5bc29", -1, Common::JA_JPN, 3),
-	WINDEMO("jman", "Demo", "JMDEMO.EXE", "7c8230a804abf9353b05627a675b5ffb", 375305, 3),
+	MACGAME("jman", "", "Journeyman.16 MB", "1ae45c23586b41997ba52e2e7c771c4c", 437743, 300),
+	MACDEMO("jman", "Sneak Preview", "Journeyman Sneak Preview", "9f0bb7ec7720e4f680ee3aa3d22c1c9d", 6222889, 300),
+	MACDEMO("jman", "CD Demo", "Journeyman Demo", "424093b2bc04a1bfa4376c878f67a364", 3083188, 300),
+	MACDEMO("jman", "Looping Demo", "Journeyman Looping Demo", "1ae45c23586b41997ba52e2e7c771c4c", 3077658, 300),
+	WINGAME("jman", "", "JMAN.EXE", "7c8230a804abf9353b05627a675b5ffb", 375282, 300),
+	WINGAME_l("jman", "", "JOURNEY.EXE", "65d06b5fef155a2473434571aff5bc29", -1, Common::JA_JPN, 300),
+	WINDEMO("jman", "Demo", "JMDEMO.EXE", "7c8230a804abf9353b05627a675b5ffb", 375305, 300),
 
-	MACGAME("jmmd", "", "Just Me & My Dad", "ea646eccc9a53f44ce082459d4809a06", 486966, 4),
+	MACGAME("jmmd", "", "Just Me & My Dad", "ea646eccc9a53f44ce082459d4809a06", 486966, 400),
 
-	MACGAME("kyoto", "v1.01", "Cosmology of KYOTO", "f5277c53bacd27936158dd3867e587e2", 392505, 3),
+	MACGAME("kyoto", "v1.01", "Cosmology of KYOTO", "f5277c53bacd27936158dd3867e587e2", 392505, 300),
 
-	MACGAME("lzone", "", "L-ZONE", "f5277c53bacd27936158dd3867e587e2", 392484, 3),
-	MACGAME("lzone", "v2", "L-ZONE", "276bee761e48a6fd709df77d5c2f60dd", 395344, 3),
+	MACGAME("lzone", "", "L-ZONE", "f5277c53bacd27936158dd3867e587e2", 392484, 300),
+	MACGAME("lzone", "v2", "L-ZONE", "276bee761e48a6fd709df77d5c2f60dd", 395344, 300),
 	{
 		{
 			"lzone", "",
@@ -171,54 +171,54 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		3
+		300
 	},
 
 
-	MACGAME("maze", "", "Maze", "c4917547b9d9fda87567a9b3544489c4", 384534, 3),
+	MACGAME("maze", "", "Maze", "c4917547b9d9fda87567a9b3544489c4", 384534, 300),
 
-	MACGAME("murderbrett", "", "The Environmental Surfer", "2ce360c9ea2da80a2c6d1040b0ad92dd", 384469, 3),
-	WINGAME("murderbrett", "", "BRETTP.EXE", "65d06b5fef155a2473434571aff5bc29", 370010, 3),
-	MACGAME("murdermagic", "", "The Magic Death", "a8788e8b79dccc582b9818ec63734bed", 736754, 3),
-	WINGAME("murdermagic", "", "MAGIC.EXE", "7c8230a804abf9353b05627a675b5ffb", 375298, 3),
-	MACGAME("murdersam", "", "Who Killed Sam Rupert", "243ed9ef948de907401784d0938a4ed5", 518996, 3), // original name is Who Killed Sam Rupert?
-	WINGAME("murdersam", "", "SAM.EXE", "65d06b5fef155a2473434571aff5bc29", 370016, 3),
-	MACGAME("murdertaylor", "", "Taylor French", "2ce360c9ea2da80a2c6d1040b0ad92dd", 384469, 3),
-	WINGAME("murdertaylor", "", "TAYLORF.EXE", "65d06b5fef155a2473434571aff5bc29", 370010, 3),
+	MACGAME("murderbrett", "", "The Environmental Surfer", "2ce360c9ea2da80a2c6d1040b0ad92dd", 384469, 300),
+	WINGAME("murderbrett", "", "BRETTP.EXE", "65d06b5fef155a2473434571aff5bc29", 370010, 300),
+	MACGAME("murdermagic", "", "The Magic Death", "a8788e8b79dccc582b9818ec63734bed", 736754, 300),
+	WINGAME("murdermagic", "", "MAGIC.EXE", "7c8230a804abf9353b05627a675b5ffb", 375298, 300),
+	MACGAME("murdersam", "", "Who Killed Sam Rupert", "243ed9ef948de907401784d0938a4ed5", 518996, 300), // original name is Who Killed Sam Rupert?
+	WINGAME("murdersam", "", "SAM.EXE", "65d06b5fef155a2473434571aff5bc29", 370016, 300),
+	MACGAME("murdertaylor", "", "Taylor French", "2ce360c9ea2da80a2c6d1040b0ad92dd", 384469, 300),
+	WINGAME("murdertaylor", "", "TAYLORF.EXE", "65d06b5fef155a2473434571aff5bc29", 370010, 300),
 
-	MACGAME("mylk", "", "Mylk DoubleClickMe!", "8a33471513b6896d3d13b8a9c8790d86", 356280, 3),
+	MACGAME("mylk", "", "Mylk DoubleClickMe!", "8a33471513b6896d3d13b8a9c8790d86", 356280, 300),
 
-	MACGAME_l("refixion1", "", "REFIXION", "9f0bb7ec7720e4f680ee3aa3d22c1c9d", 356245, Common::JA_JPN, 3),
-	MACGAME_l("refixion2", "", "Museum or Hospital", "1ae45c23586b41997ba52e2e7c771c4c", 375841, Common::JA_JPN, 3),
-	MACGAME_l("refixion3", "", "The Reindeer Story", "f5277c53bacd27936158dd3867e587e2", 392473, Common::JA_JPN, 3),
+	MACGAME_l("refixion1", "", "REFIXION", "9f0bb7ec7720e4f680ee3aa3d22c1c9d", 356245, Common::JA_JPN, 300),
+	MACGAME_l("refixion2", "", "Museum or Hospital", "1ae45c23586b41997ba52e2e7c771c4c", 375841, Common::JA_JPN, 300),
+	MACGAME_l("refixion3", "", "The Reindeer Story", "f5277c53bacd27936158dd3867e587e2", 392473, Common::JA_JPN, 300),
 
-	MACDEMO("rodney", "Demo", "Rodney's Funscreen demo", "9f0bb7ec7720e4f680ee3aa3d22c1c9d", 356866, 3), // full game is supported in MADE engine
-	MACDEMO("screamingmetal", "Demo", "Screaming Metal Demo", "0a280df213c5bf3eca241f37151e1d56", 373190, 3), // full game was never released
+	MACDEMO("rodney", "Demo", "Rodney's Funscreen demo", "9f0bb7ec7720e4f680ee3aa3d22c1c9d", 356866, 300), // full game is supported in MADE engine
+	MACDEMO("screamingmetal", "Demo", "Screaming Metal Demo", "0a280df213c5bf3eca241f37151e1d56", 373190, 300), // full game was never released
 
-	MACGAME("snh", "", "A Silly Noisy House", "9f0bb7ec7720e4f680ee3aa3d22c1c9d", 357142, 3),
-	WINGAME("snh", "", "SNH.EXE", "5a6e241994f671a1ebe664fbae394217", 378901, 3),
+	MACGAME("snh", "", "A Silly Noisy House", "9f0bb7ec7720e4f680ee3aa3d22c1c9d", 357142, 300),
+	WINGAME("snh", "", "SNH.EXE", "5a6e241994f671a1ebe664fbae394217", 378901, 300),
 
-	WINGAME("spyclub", "", "SPYCLUB.EXE", "65d06b5fef155a2473434571aff5bc29", -1, 3),
+	WINGAME("spyclub", "", "SPYCLUB.EXE", "65d06b5fef155a2473434571aff5bc29", -1, 300),
 
-	MACGAME_l("the7colors", "", "LEGEND OF PSYS CITY", "9f0bb7ec7720e4f680ee3aa3d22c1c9d", 384001, Common::JA_JPN, 3), //original name is ~LEGEND OF PSY•S CITY~
-	MACGAME("the7colors", "", "T7C-R!", "d84feae6ba35340857f46c9cbd6bd1a6", 398981, 3), // English translation by Skye Sonomura (HomeStarRunnerTron)
+	MACGAME_l("the7colors", "", "LEGEND OF PSYS CITY", "9f0bb7ec7720e4f680ee3aa3d22c1c9d", 384001, Common::JA_JPN, 300), //original name is ~LEGEND OF PSY•S CITY~
+	MACGAME("the7colors", "", "T7C-R!", "d84feae6ba35340857f46c9cbd6bd1a6", 398981, 300), // English translation by Skye Sonomura (HomeStarRunnerTron)
 
-	MACGAME("vvcyber", "", "Start Game", "7f443f2e63fd497a9ad85b10dc880a91", 384846, 3),
-	WINGAME("vvcyber", "", "CYBER.EXE", "65d06b5fef155a2473434571aff5bc29", 371139, 3),
-	MACDEMO("vvcyber", "Demo", "CyberPlasm", "2ce360c9ea2da80a2c6d1040b0ad92dd", 504157, 3),
-	WINDEMO("vvcyber", "Demo", "CYBER.EXE", "88f4f7406f34ec36e751a64f7c76f2c4", 639439, 3),
-	MACGAME("vvdinosaur", "", "Start Game", "d41d8cd98f00b204e9800998ecf8427e", -1, 3),
-	WINGAME("vvdinosaur", "", "DINOSAUR.EXE", "4e6303630f4dd588e730d09241cf7e76", -1, 3),
-	WINGAME("vvdinosaur", "v1.1", "DINOSAUR.EXE", "88f4f7406f34ec36e751a64f7c76f2c4", 370049, 3),
-	MACGAME("vvharp", "", "Start Adventure", "7f443f2e63fd497a9ad85b10dc880a91", 383406, 3),
-	WINGAME("vvharp", "", "HYPNOTIC.EXE", "88f4f7406f34ec36e751a64f7c76f2c4", 370272, 3),
-	MACGAME("vvvampire", "", "The Vampire's Coffin", "d41d8cd98f00b204e9800998ecf8427e", -1, 3),
-	WINGAME("vvvampire", "", "VAMPIRE.EXE", "88f4f7406f34ec36e751a64f7c76f2c4", -1, 3),
+	MACGAME("vvcyber", "", "Start Game", "7f443f2e63fd497a9ad85b10dc880a91", 384846, 300),
+	WINGAME("vvcyber", "", "CYBER.EXE", "65d06b5fef155a2473434571aff5bc29", 371139, 300),
+	MACDEMO("vvcyber", "Demo", "CyberPlasm", "2ce360c9ea2da80a2c6d1040b0ad92dd", 504157, 300),
+	WINDEMO("vvcyber", "Demo", "CYBER.EXE", "88f4f7406f34ec36e751a64f7c76f2c4", 639439, 300),
+	MACGAME("vvdinosaur", "", "Start Game", "d41d8cd98f00b204e9800998ecf8427e", -1, 300),
+	WINGAME("vvdinosaur", "", "DINOSAUR.EXE", "4e6303630f4dd588e730d09241cf7e76", -1, 300),
+	WINGAME("vvdinosaur", "v1.1", "DINOSAUR.EXE", "88f4f7406f34ec36e751a64f7c76f2c4", 370049, 300),
+	MACGAME("vvharp", "", "Start Adventure", "7f443f2e63fd497a9ad85b10dc880a91", 383406, 300),
+	WINGAME("vvharp", "", "HYPNOTIC.EXE", "88f4f7406f34ec36e751a64f7c76f2c4", 370272, 300),
+	MACGAME("vvvampire", "", "The Vampire's Coffin", "d41d8cd98f00b204e9800998ecf8427e", -1, 300),
+	WINGAME("vvvampire", "", "VAMPIRE.EXE", "88f4f7406f34ec36e751a64f7c76f2c4", -1, 300),
 
-	WINGAME("warlock", "", "SSWARLCK.EXE", "65d06b5fef155a2473434571aff5bc29", 370867, 3),
-	WINDEMO("warlock", "", "SSWDEMO.EXE", "65d06b5fef155a2473434571aff5bc29", 370934, 3),
+	WINGAME("warlock", "", "SSWARLCK.EXE", "65d06b5fef155a2473434571aff5bc29", 370867, 300),
+	WINDEMO("warlock", "", "SSWDEMO.EXE", "65d06b5fef155a2473434571aff5bc29", 370934, 300),
 
-	MACGAME("wrath", "", "Wrath of the Gods", "2ce360c9ea2da80a2c6d1040b0ad92dd", 413986, 3),
+	MACGAME("wrath", "", "Wrath of the Gods", "2ce360c9ea2da80a2c6d1040b0ad92dd", 413986, 300),
 
 	{
 		{
@@ -234,7 +234,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		3
+		300
 	},
 
 	{
@@ -251,12 +251,12 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		3
+		300
 	},
 
-	MACDEMO("xanthus", "Demo", "X A N T H U S", "1ae45c23586b41997ba52e2e7c771c4c", 375447, 3), // may be vaporware; original name is ∆ X A N T H U S ∆
+	MACDEMO("xanthus", "Demo", "X A N T H U S", "1ae45c23586b41997ba52e2e7c771c4c", 375447, 300), // may be vaporware; original name is ∆ X A N T H U S ∆
 
-	MACGAME("ybr1", "", "YBR", "f5277c53bacd27936158dd3867e587e2", 414498, 3),
+	MACGAME("ybr1", "", "YBR", "f5277c53bacd27936158dd3867e587e2", 414498, 300),
 
 	{
 		{
@@ -272,7 +272,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		3
+		300
 	},
 
 	{
@@ -289,7 +289,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		3
+		300
 	},
 
 	{
@@ -306,7 +306,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		3
+		300
 	},
 
 ////////////////////////////////////////
@@ -315,62 +315,62 @@ static const DirectorGameDescription gameDescriptions[] = {
 //
 ////////////////////////////////////////
 
-	MACGAME("9worlds", "", "Nine Worlds", "3930940b5b4b2ae2563cc29b812855a6", 482838, 4),
-	WINGAME("9worlds", "", "9WORLDS.EXE", "9da9df906149916b340a0a8fbee5ca52", 741994, 4),
-	MACGAME_l("9worlds", "", "Neun Welten", "3930940b5b4b2ae2563cc29b812855a6", 483774, Common::DE_DEU, 4),
-	WINGAME_l("9worlds", "", "9WORLDS.EXE", "054e5af279a05ab64627ef664631fe37", 742002, Common::DE_DEU, 4),
+	MACGAME("9worlds", "", "Nine Worlds", "3930940b5b4b2ae2563cc29b812855a6", 482838, 400),
+	WINGAME("9worlds", "", "9WORLDS.EXE", "9da9df906149916b340a0a8fbee5ca52", 741994, 400),
+	MACGAME_l("9worlds", "", "Neun Welten", "3930940b5b4b2ae2563cc29b812855a6", 483774, Common::DE_DEU, 400),
+	WINGAME_l("9worlds", "", "9WORLDS.EXE", "054e5af279a05ab64627ef664631fe37", 742002, Common::DE_DEU, 400),
 
-	MACGAME("alice", "", "Alice", "3b61149c922f0fd815ca29686e4f554a", 304714, 4),
-	WINGAME("alice", "", "ALICE.EXE", "c67ece9b657ee80355520ac37a25fe55", 684733, 4),
+	MACGAME("alice", "", "Alice", "3b61149c922f0fd815ca29686e4f554a", 304714, 400),
+	WINGAME("alice", "", "ALICE.EXE", "c67ece9b657ee80355520ac37a25fe55", 684733, 400),
 
-	WINGAME_l("ankh1", "", "ANKH.EXE", "12345", 12345, Common::JA_JPN, 4),
+	WINGAME_l("ankh1", "", "ANKH.EXE", "12345", 12345, Common::JA_JPN, 400),
 
-	MACGAME("arcofdoom", "", "Arc Player (4mb)", "ea553e3f3fa123ad38fa5249621e8c8b", 295426, 4),
-	MACDEMO("arcofdoom", "Demo", "ArcDemo", "cdb27c916044ae4dceb4b7326063fa03", 301925, 4),
-	WINGAME("arcofdoom", "", "ARC.EXE", "fd3e9ad004597b01656b28c348a2ae7f", 687973, 4),
+	MACGAME("arcofdoom", "", "Arc Player (4mb)", "ea553e3f3fa123ad38fa5249621e8c8b", 295426, 400),
+	MACDEMO("arcofdoom", "Demo", "ArcDemo", "cdb27c916044ae4dceb4b7326063fa03", 301925, 400),
+	WINGAME("arcofdoom", "", "ARC.EXE", "fd3e9ad004597b01656b28c348a2ae7f", 687973, 400),
 
-	WINDEMO("ataripack", "Demo", "ACTDEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 4), // full game is not Director
+	WINDEMO("ataripack", "Demo", "ACTDEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 400), // full game is not Director
 
 	// both Mac and Win versions require installation to extract executable
-	MACGAME("badday", "", "BadDay (Universal)", "b7e69c37b7355022d400c14aa97c5d54", 483781, 4),
-	WINGAME("badday", "", "BAD_DAY.EXE", "4ad339db5379a860b33cbb0fa64f18e2", 742342, 4),
+	MACGAME("badday", "", "BadDay (Universal)", "b7e69c37b7355022d400c14aa97c5d54", 483781, 400),
+	WINGAME("badday", "", "BAD_DAY.EXE", "4ad339db5379a860b33cbb0fa64f18e2", 742342, 400),
 
-	WINGAME("bowie", "", "JUMP.EXE", "1706ba3b999d724957198c134e508127", 684317, 4),
+	WINGAME("bowie", "", "JUMP.EXE", "1706ba3b999d724957198c134e508127", 684317, 400),
 
-	WINDEMO("c64pack", "Demo", "C64DEMO.EXE", "0458e44d9ad4ae0d3a583ac4141d21ae", 1007517, 4), // full game is not Director
+	WINDEMO("c64pack", "Demo", "C64DEMO.EXE", "0458e44d9ad4ae0d3a583ac4141d21ae", 1007517, 400), // full game is not Director
 
-	WINGAME("chopsuey", "", "CHOPSUEY.EXE", "785e26240153a028549e8a66c2e904bf", 772382, 4),
+	WINGAME("chopsuey", "", "CHOPSUEY.EXE", "785e26240153a028549e8a66c2e904bf", 772382, 400),
 
-	MACGAME_l("chuteng", "", "ChuTeng", "ea646eccc9a53f44ce082459d4809a06", 484351, Common::JA_JPN, 4), // executable file name is in Japanese characters
-	WINGAME_l("chuteng", "", "CHUTENG.EXE", "aaef7b33829ff7b0243412c89869e011", 746971, Common::JA_JPN, 4),
+	MACGAME_l("chuteng", "", "ChuTeng", "ea646eccc9a53f44ce082459d4809a06", 484351, Common::JA_JPN, 400), // executable file name is in Japanese characters
+	WINGAME_l("chuteng", "", "CHUTENG.EXE", "aaef7b33829ff7b0243412c89869e011", 746971, Common::JA_JPN, 400),
 
-	MACGAME("daedalus", "", "DAEDALUS.DAT", "4eb2fab14f1b932ae9f01d8b05a411de", 69794, 4),
-	MACGAME_l("daedalus", "", "DAEDALUS.DAT", "2b9e22ee93e5d58f383ef389fa09e12b", 69794, Common::DE_DEU, 4),
-	MACGAME_l("daedalus", "", "DAEDALUS.DAT", "2b9e22ee93e5d58f383ef389fa09e12b", 69794, Common::FR_FRA, 4),
+	MACGAME("daedalus", "", "DAEDALUS.DAT", "4eb2fab14f1b932ae9f01d8b05a411de", 69794, 400),
+	MACGAME_l("daedalus", "", "DAEDALUS.DAT", "2b9e22ee93e5d58f383ef389fa09e12b", 69794, Common::DE_DEU, 400),
+	MACGAME_l("daedalus", "", "DAEDALUS.DAT", "2b9e22ee93e5d58f383ef389fa09e12b", 69794, Common::FR_FRA, 400),
 
 	// both Mac and Win versions require installation to extract executable
 	// Mac version has 68k, PowerPC, and a fat binary (default) as options in the installer
-	MACGAME("darkeye", "", "The Dark Eye (Universal)", "67f572196550aedb1f9523d782022be0", 486334, 4),
-	WINGAME("darkeye", "", "DARKEYE.EXE", "6190ac8ccef3fd073e912ec5d0850f94", 742326, 4),
+	MACGAME("darkeye", "", "The Dark Eye (Universal)", "67f572196550aedb1f9523d782022be0", 486334, 400),
+	WINGAME("darkeye", "", "DARKEYE.EXE", "6190ac8ccef3fd073e912ec5d0850f94", 742326, 400),
 
-	MACGAME("derratsorcerum", "", "Derrat Sorcerum v1.0.3", "a546ef2b921a9b48fd93928f1a505f22", 483762, 4), // original name is Derrat Sorcerumâ„¢ v1.0.3
-	MACDEMO("derratsorcerum", "Demo", "Derrat Sorcerum Demo v1.0.3", "a546ef2b921a9b48fd93928f1a505f22", 483762, 4), // original name is Derrat Sorcerumâ„¢ Demo v1.0.3
+	MACGAME("derratsorcerum", "", "Derrat Sorcerum v1.0.3", "a546ef2b921a9b48fd93928f1a505f22", 483762, 400), // original name is Derrat Sorcerumâ„¢ v1.0.3
+	MACDEMO("derratsorcerum", "Demo", "Derrat Sorcerum Demo v1.0.3", "a546ef2b921a9b48fd93928f1a505f22", 483762, 400), // original name is Derrat Sorcerumâ„¢ Demo v1.0.3
 
 	// both Mac and Win versions require installation to extract executable
-	MACGAME("devo", "", "Smart Patrol", "01be45e7241194dad07938e7059b88e3", 478506, 4),
-	WINGAME("devo", "", "SMRTPTRL.EXE", "6030100dbff520b8763f6e98d15389d7", 741904, 4),
+	MACGAME("devo", "", "Smart Patrol", "01be45e7241194dad07938e7059b88e3", 478506, 400),
+	WINGAME("devo", "", "SMRTPTRL.EXE", "6030100dbff520b8763f6e98d15389d7", 741904, 400),
 
-	MACGAME_l("earthtia", "", "LATHUR'S LEGEND", "12345", 12345, Common::JA_JPN, 4), // many files and folders use only JP char encoding
+	MACGAME_l("earthtia", "", "LATHUR'S LEGEND", "12345", 12345, Common::JA_JPN, 400), // many files and folders use only JP char encoding
 
-	WINDEMO("earthwormjim", "Demo", "EWJDEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 4), // full game is not Director
+	WINDEMO("earthwormjim", "Demo", "EWJDEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 400), // full game is not Director
 
-	MACGAME("easternmind", "", "Eastern Mind", "78138a77207907642744d0960c14d9e5", 483746, 4),
-	WINGAME("easternmind", "", "ESTRNMND.EXE", "2597cfb5466d193b5a18fc7b0e3a3fa5", 685789, 4),
+	MACGAME("easternmind", "", "Eastern Mind", "78138a77207907642744d0960c14d9e5", 483746, 400),
+	WINGAME("easternmind", "", "ESTRNMND.EXE", "2597cfb5466d193b5a18fc7b0e3a3fa5", 685789, 400),
 
-	MACGAME("freakshow", "D4", "FreakShow Projector", "dc5a87dda7a0daf46604515f7d2cca66", 300644, 4),
-	WINGAME("freakshow", "", "FREAKS.EXE", "b2e1c5abc0e3c31ddd2089a55a27a0a5", 695893, 4),
+	MACGAME("freakshow", "D4", "FreakShow Projector", "dc5a87dda7a0daf46604515f7d2cca66", 300644, 400),
+	WINGAME("freakshow", "", "FREAKS.EXE", "b2e1c5abc0e3c31ddd2089a55a27a0a5", 695893, 400),
 
-	MACDEMO("gundam0079", "Demo", "Gundam Demo", "01be45e7241194dad07938e7059b88e3", 483376, 4), // full game is D5
+	MACDEMO("gundam0079", "Demo", "Gundam Demo", "01be45e7241194dad07938e7059b88e3", 483376, 400), // full game is D5
 
 	// Different releases of hamsterland1 allow choice of language on the opening screen
 	// English is always available, along with one alternate language
@@ -389,7 +389,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
 	{
@@ -406,7 +406,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
 	{
@@ -423,7 +423,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
 	{
@@ -440,7 +440,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
 	{
@@ -457,35 +457,35 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
 	// original file name is La Máquina del Tiempo
-	MACGAME_l("hamsterland2", "", "La Mquina del Tiempo", "2c7d0c0d55cbe3f622c7d68cedb671e0", 483774, Common::ES_ESP, 4),
-	WINGAME_l("hamsterland2", "", "HL2SP.EXE", "8dd22b8bde300c9fb5b66808905300f7", 875665, Common::ES_ESP, 4),
-	MACGAME("hamsterland2", "", "The Time Machine", "2c7d0c0d55cbe3f622c7d68cedb671e0", 483774, 4),
-	WINGAME("hamsterland2", "", "HL2EN.EXE", "4c812a63165c1f50242e879aae62718d", 859681, 4),
-
-	MACGAME("horrortour1", "", "ZEDDAS(7M)", "da0da5d543b237051975ad70bec129f4", 483443, 4),
-	WINGAME("horrortour1", "", "ZEDDAS.EXE", "d3ce91f305dd0f4d2f5e9ff6d4e41a3b", 741818, 4),
-	MACGAME_l("horrortour1", "", "HorrorTour(7M)", "b7e69c37b7355022d400c14aa97c5d54", 483443, Common::JA_JPN, 4),
-	WINGAME_l("horrortour1", "", "HORROR.EXE", "b16ecf8ebc02142c742b8a9acc935d52", 752425, Common::JA_JPN, 4),
-	MACGAME_l("horrortour2", "", "ZEDDAS PowerPC", "da7d3f1d85bdb99518b586c40d2a673e", 60013, Common::JA_JPN, 4),
-	WINGAME_l("horrortour2", "", "HT2.EXE", "499d8545ee2325b18d3f09fb2c0fc26e", 698029, Common::JA_JPN, 4),
-
-	WINDEMO("hyperblade", "Demo", "HYPER.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 4), // full game is not Director
-
-	WINGAME("id4p1", "iD4 Mission Disk 1 - Alien Supreme Commander", "SUPREME.EXE", "629eb9a5d991a2dbe380804e8c37043a", 1664965, 4),
-	WINGAME("id4p2", "iD4 Mission Disk 2 - Alien Science Officer", "SCIENCE.EXE", "812a4b81b70e61e547c14dbbd507b402", 1766499, 4),
-	WINGAME("id4p3", "iD4 Mission Disk 3 - Warrior Alien", "WARRIOR.EXE", "387245092ce0583c6fd0c54000b1502a", 1751593, 4),
-	WINGAME("id4p4", "iD4 Mission Disk 4 - Alien Navigator", "NAV.EXE", "29de2d1fd34029b3c97ce852a7fc665e", 1834037, 4),
-	WINGAME("id4p5", "iD4 Mission Disk 5 - Captain Steve Hiller", "STEVE.EXE", "14f19b724dd6361e4bf3cfddbac87d3f", 1797301, 4),
-	WINGAME("id4p6", "iD4 Mission Disk 6 - Dave's Computer", "DAVE.EXE", "237f9db2ea9a38fa6f7292974539f494", 1774167, 4),
-	WINGAME("id4p7", "iD4 Mission Disk 7 - President Whitmore", "PREZ.EXE", "e7d03a6d749d65dbcea7171ec4627e9c", 1666293, 4),
-	WINGAME("id4p8", "iD4 Mission Disk 8 - Alien Attack Fighter", "ALIEN_F.EXE", "ee2eb92900d515ed7872c57f3b89a408", 1754975, 4),
-	WINGAME("id4p9", "iD4 Mission Disk 9 - FA-18 Fighter Jet", "F18.EXE", "7a0292909a5103c89297c40cce1d836c", 1691893, 4),
-	WINGAME("id4p10", "iD4 Mission Disk 10 - Alien Bomber", "BOMBER.EXE", "17758a9f425f7f3e7a926951e6c770f4", 1844189, 4),
-	WINGAME("id4p11", "iD4 Mission Disk 11 - Area 51", "AREA51.EXE", "78be40f9c7e8e1770c388cc16a522aaf", 1776077, 4),
+	MACGAME_l("hamsterland2", "", "La Mquina del Tiempo", "2c7d0c0d55cbe3f622c7d68cedb671e0", 483774, Common::ES_ESP, 400),
+	WINGAME_l("hamsterland2", "", "HL2SP.EXE", "8dd22b8bde300c9fb5b66808905300f7", 875665, Common::ES_ESP, 400),
+	MACGAME("hamsterland2", "", "The Time Machine", "2c7d0c0d55cbe3f622c7d68cedb671e0", 483774, 400),
+	WINGAME("hamsterland2", "", "HL2EN.EXE", "4c812a63165c1f50242e879aae62718d", 859681, 400),
+
+	MACGAME("horrortour1", "", "ZEDDAS(7M)", "da0da5d543b237051975ad70bec129f4", 483443, 400),
+	WINGAME("horrortour1", "", "ZEDDAS.EXE", "d3ce91f305dd0f4d2f5e9ff6d4e41a3b", 741818, 400),
+	MACGAME_l("horrortour1", "", "HorrorTour(7M)", "b7e69c37b7355022d400c14aa97c5d54", 483443, Common::JA_JPN, 400),
+	WINGAME_l("horrortour1", "", "HORROR.EXE", "b16ecf8ebc02142c742b8a9acc935d52", 752425, Common::JA_JPN, 400),
+	MACGAME_l("horrortour2", "", "ZEDDAS PowerPC", "da7d3f1d85bdb99518b586c40d2a673e", 60013, Common::JA_JPN, 400),
+	WINGAME_l("horrortour2", "", "HT2.EXE", "499d8545ee2325b18d3f09fb2c0fc26e", 698029, Common::JA_JPN, 400),
+
+	WINDEMO("hyperblade", "Demo", "HYPER.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 400), // full game is not Director
+
+	WINGAME("id4p1", "iD4 Mission Disk 1 - Alien Supreme Commander", "SUPREME.EXE", "629eb9a5d991a2dbe380804e8c37043a", 1664965, 400),
+	WINGAME("id4p2", "iD4 Mission Disk 2 - Alien Science Officer", "SCIENCE.EXE", "812a4b81b70e61e547c14dbbd507b402", 1766499, 400),
+	WINGAME("id4p3", "iD4 Mission Disk 3 - Warrior Alien", "WARRIOR.EXE", "387245092ce0583c6fd0c54000b1502a", 1751593, 400),
+	WINGAME("id4p4", "iD4 Mission Disk 4 - Alien Navigator", "NAV.EXE", "29de2d1fd34029b3c97ce852a7fc665e", 1834037, 400),
+	WINGAME("id4p5", "iD4 Mission Disk 5 - Captain Steve Hiller", "STEVE.EXE", "14f19b724dd6361e4bf3cfddbac87d3f", 1797301, 400),
+	WINGAME("id4p6", "iD4 Mission Disk 6 - Dave's Computer", "DAVE.EXE", "237f9db2ea9a38fa6f7292974539f494", 1774167, 400),
+	WINGAME("id4p7", "iD4 Mission Disk 7 - President Whitmore", "PREZ.EXE", "e7d03a6d749d65dbcea7171ec4627e9c", 1666293, 400),
+	WINGAME("id4p8", "iD4 Mission Disk 8 - Alien Attack Fighter", "ALIEN_F.EXE", "ee2eb92900d515ed7872c57f3b89a408", 1754975, 400),
+	WINGAME("id4p9", "iD4 Mission Disk 9 - FA-18 Fighter Jet", "F18.EXE", "7a0292909a5103c89297c40cce1d836c", 1691893, 400),
+	WINGAME("id4p10", "iD4 Mission Disk 10 - Alien Bomber", "BOMBER.EXE", "17758a9f425f7f3e7a926951e6c770f4", 1844189, 400),
+	WINGAME("id4p11", "iD4 Mission Disk 11 - Area 51", "AREA51.EXE", "78be40f9c7e8e1770c388cc16a522aaf", 1776077, 400),
 
 	// Play as either Shirley (disc 1) or Dolan (disc 2)
 	{
@@ -502,7 +502,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
 	{
@@ -519,7 +519,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
 	{
@@ -536,7 +536,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
 	{
@@ -553,52 +553,52 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
-	MACGAME("improv", "Shirley Game", "IMPROV (PowerPC)", "da0da5d543b237051975ad70bec129f4", 483443, 4),
-	MACGAME("improv", "Dolan Game", "IMPROV (PowerPC)", "da0da5d543b237051975ad70bec129f4", 483443, 4),
-	WINGAME("improv", "Shirley Game", "IMPROV.EXE", "da0da5d543b237051975ad70bec129f4", 483443, 4),
-	WINGAME("improv", "Dolan Game", "IMPROV.EXE", "da0da5d543b237051975ad70bec129f4", 483443, 4),
+	MACGAME("improv", "Shirley Game", "IMPROV (PowerPC)", "da0da5d543b237051975ad70bec129f4", 483443, 400),
+	MACGAME("improv", "Dolan Game", "IMPROV (PowerPC)", "da0da5d543b237051975ad70bec129f4", 483443, 400),
+	WINGAME("improv", "Shirley Game", "IMPROV.EXE", "da0da5d543b237051975ad70bec129f4", 483443, 400),
+	WINGAME("improv", "Dolan Game", "IMPROV.EXE", "da0da5d543b237051975ad70bec129f4", 483443, 400),
 
-	MACGAME("isis", "", "ISIS", "dedfabf9ee7bf5aab003bdab4137bca6", 777886, 4),
-	WINGAME("isis", "", "ISIS.EXE", "59c1cb960199dd3f041262ab5271bb23", 14747213, 4),
-	MACGAME_l("isis", "", "ISIS", "dedfabf9ee7bf5aab003bdab4137bca6", 780610, Common::DE_DEU, 4),
-	WINGAME_l("isis", "", "ISIS.EXE", "d7f7e89495ac22c75b3fc04c09675b6e", 16750643, Common::DE_DEU, 4),
+	MACGAME("isis", "", "ISIS", "dedfabf9ee7bf5aab003bdab4137bca6", 777886, 400),
+	WINGAME("isis", "", "ISIS.EXE", "59c1cb960199dd3f041262ab5271bb23", 14747213, 400),
+	MACGAME_l("isis", "", "ISIS", "dedfabf9ee7bf5aab003bdab4137bca6", 780610, Common::DE_DEU, 400),
+	WINGAME_l("isis", "", "ISIS.EXE", "d7f7e89495ac22c75b3fc04c09675b6e", 16750643, Common::DE_DEU, 400),
 
 	// Note: There are four versions of the binary included on the disc.
 	// 5.6, 6, and 9 Meg variants all exist too.
-	MACGAME("jewels", "", "Jewels 11 Meg", "339c89a148c4ff2c5c815c62ac006325", -1, 4),
-	MACDEMO("jewels", "Two-Minute Demo", "Two-Minute Demo", "01be45e7241194dad07938e7059b88e3", -1, 4),
+	MACGAME("jewels", "", "Jewels 11 Meg", "339c89a148c4ff2c5c815c62ac006325", -1, 400),
+	MACDEMO("jewels", "Two-Minute Demo", "Two-Minute Demo", "01be45e7241194dad07938e7059b88e3", -1, 400),
 
-	WINGAME("jewels", "", "JEWELS.EXE", "bb6d81471d166088260090472c6c3a87", -1, 4),
-	WINDEMO("jewels", "Demo", "JEWELS.EXE", "abcc448c035e88d4edb4a29034fd1e34", -1, 4),
-	WINDEMO("jewels", "Two-Minute Demo", "DEMO.EXE", "ebee52d3c4280674c600177df5b09da0", -1, 4),
+	WINGAME("jewels", "", "JEWELS.EXE", "bb6d81471d166088260090472c6c3a87", -1, 400),
+	WINDEMO("jewels", "Demo", "JEWELS.EXE", "abcc448c035e88d4edb4a29034fd1e34", -1, 400),
+	WINDEMO("jewels", "Two-Minute Demo", "DEMO.EXE", "ebee52d3c4280674c600177df5b09da0", -1, 400),
 
-	MACGAME("jman", "Turbo!", "JMP Turbo", "cc3321069072b90f091f220bba16e4d4", -1, 4), // original name is JMP Turboâ„¢
-	MACGAME("jman", "Making Of", "The Journey", "cc3321069072b90f091f220bba16e4d4", -1, 4),
-	MACDEMO("jman", "Director's Cut Demo", "Journeyman - Director's Cut", "01be45e7241194dad07938e7059b88e3", 484284, 4),
+	MACGAME("jman", "Turbo!", "JMP Turbo", "cc3321069072b90f091f220bba16e4d4", -1, 400), // original name is JMP Turboâ„¢
+	MACGAME("jman", "Making Of", "The Journey", "cc3321069072b90f091f220bba16e4d4", -1, 400),
+	MACDEMO("jman", "Director's Cut Demo", "Journeyman - Director's Cut", "01be45e7241194dad07938e7059b88e3", 484284, 400),
 
-	MACGAME("jman2", "", "Buried in Time PowerPC", "71287376e445ab9c98f0d150bb0ed175", 80334, 4), // original name is Buried in Timeâ„¢ PowerPC; also contains 68k binary
-	MACGAME_l("jman2", "", "Buried in Time PowerPC", "71287376e445ab9c98f0d150bb0ed175", 86324, Common::DE_DEU, 4), // see English notes
-	MACDEMO("jman2", "Demo", "Buried in Time Demo", "1ae45c23586b41997ba52e2e7c771c4c", 437743, 4),
-	MACDEMO("jman2", "06/22/94 Demo", "Buried in Time Demo", "cdb27c916044ae4dceb4b7326063fa03", 328895, 4),
-	MACDEMO("jman2", "Final Demo", "Buried in Time Demo", "cc3321069072b90f091f220bba16e4d4", 292731, 4),
-	MACDEMO("jman2", "Gallery", "BIT Gallery", "01be45e7241194dad07938e7059b88e3", 484284, 4),
-	MACDEMO("jman2", "Overview", "BIT Overview", "01be45e7241194dad07938e7059b88e3", 484284, 4),
+	MACGAME("jman2", "", "Buried in Time PowerPC", "71287376e445ab9c98f0d150bb0ed175", 80334, 400), // original name is Buried in Timeâ„¢ PowerPC; also contains 68k binary
+	MACGAME_l("jman2", "", "Buried in Time PowerPC", "71287376e445ab9c98f0d150bb0ed175", 86324, Common::DE_DEU, 400), // see English notes
+	MACDEMO("jman2", "Demo", "Buried in Time Demo", "1ae45c23586b41997ba52e2e7c771c4c", 437743, 400),
+	MACDEMO("jman2", "06/22/94 Demo", "Buried in Time Demo", "cdb27c916044ae4dceb4b7326063fa03", 328895, 400),
+	MACDEMO("jman2", "Final Demo", "Buried in Time Demo", "cc3321069072b90f091f220bba16e4d4", 292731, 400),
+	MACDEMO("jman2", "Gallery", "BIT Gallery", "01be45e7241194dad07938e7059b88e3", 484284, 400),
+	MACDEMO("jman2", "Overview", "BIT Overview", "01be45e7241194dad07938e7059b88e3", 484284, 400),
 
-	MACGAME("karma", "", "Karma", "ea646eccc9a53f44ce082459d4809a06", 485535, 4),
-	WINGAME("karma", "", "KARMA.EXE", "e830af6b5dfca4964184e7d61039e120", 697047, 4),
+	MACGAME("karma", "", "Karma", "ea646eccc9a53f44ce082459d4809a06", 485535, 400),
+	WINGAME("karma", "", "KARMA.EXE", "e830af6b5dfca4964184e7d61039e120", 697047, 400),
 
-	MACGAME("kyoto", "v2.0", "Cosmology of KYOTO", "8719de9c083aca942fc0e5c0a127b6dc", 484370, 4),
-	WINGAME("kyoto", "", "PLAY_E.EXE", "84cc8880f8c46b4da121b4c9f184418a", 691269, 4),
-	MACGAME_l("kyoto", "v2.0", "Cosmology of KYOTO", "8719de9c083aca942fc0e5c0a127b6dc", 484445, Common::JA_JPN, 4),
-	WINGAME_l("kyoto", "", "PLAY.EXE", "865b1b59e32e51a6670b9105ac8501ec", 741137, Common::JA_JPN, 4),
+	MACGAME("kyoto", "v2.0", "Cosmology of KYOTO", "8719de9c083aca942fc0e5c0a127b6dc", 484370, 400),
+	WINGAME("kyoto", "", "PLAY_E.EXE", "84cc8880f8c46b4da121b4c9f184418a", 691269, 400),
+	MACGAME_l("kyoto", "v2.0", "Cosmology of KYOTO", "8719de9c083aca942fc0e5c0a127b6dc", 484445, Common::JA_JPN, 400),
+	WINGAME_l("kyoto", "", "PLAY.EXE", "865b1b59e32e51a6670b9105ac8501ec", 741137, Common::JA_JPN, 400),
 
-	MACDEMO("lion", "Demo", "Lion Demo", "01be45e7241194dad07938e7059b88e3", 484284, 4), // full game is DOS only, not Director
+	MACDEMO("lion", "Demo", "Lion Demo", "01be45e7241194dad07938e7059b88e3", 484284, 400), // full game is DOS only, not Director
 
-	MACGAME("louiscatorze", "", "Louis Catorze", "2c7d0c0d55cbe3f622c7d68cedb671e0", 486954, 4),
-	WINGAME("louiscatorze", "", "LOUIS.EXE", "21610856ba0f75598624edd58291600b", 719433, 4),
+	MACGAME("louiscatorze", "", "Louis Catorze", "2c7d0c0d55cbe3f622c7d68cedb671e0", 486954, 400),
+	WINGAME("louiscatorze", "", "LOUIS.EXE", "21610856ba0f75598624edd58291600b", 719433, 400),
 
 	{
 		{
@@ -612,45 +612,45 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
-	MACGAME("majestic", "", "Majestic", "01be45e7241194dad07938e7059b88e3", 483774, 4),
-	WINGAME("majestic", "", "MAJESTIC.EXE", "624267f70253e5327981003a6fc0aeba", 23437631, 4),
+	MACGAME("majestic", "", "Majestic", "01be45e7241194dad07938e7059b88e3", 483774, 400),
+	WINGAME("majestic", "", "MAJESTIC.EXE", "624267f70253e5327981003a6fc0aeba", 23437631, 400),
 
-	MACGAME("martian", "", "The Martian Chronicles PPC CD", "db9b7f11aea52a294d2986a94a184000", 60328, 4),
-	WINGAME("martian", "", "MC.EXE", "ee6267d276a18e8bfd6f0e4ecd07ba36", 1764151, 4),
+	MACGAME("martian", "", "The Martian Chronicles PPC CD", "db9b7f11aea52a294d2986a94a184000", 60328, 400),
+	WINGAME("martian", "", "MC.EXE", "ee6267d276a18e8bfd6f0e4ecd07ba36", 1764151, 400),
 
-	WINGAME("mediaband", "", "MEDIABND.EXE", "0cfb9b4762e33ab56d656a0eb146a048", 717921, 4),
+	WINGAME("mediaband", "", "MEDIABND.EXE", "0cfb9b4762e33ab56d656a0eb146a048", 717921, 400),
 
-	WINDEMO("mechwarrior2", "Demo", "MW2DEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 4), // full game is not Director
+	WINDEMO("mechwarrior2", "Demo", "MW2DEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 400), // full game is not Director
 
-	MACGAME("mirage", "", "Mirage", "0c7bbb4b24823e5ab871cb4c1d6f3710", 486954, 4),
-	WINGAME("mirage", "", "MIRAGE.EXE", "2291ea234c14f1ccb8f2e67ae09bbfa3", 696867, 4),
-	MACGAME("mirage", "Making Of", "The Making of Mirage", "78138a77207907642744d0960c14d9e5", 486982, 4),
-	WINGAME("mirage", "Making Of", "MAKINGOF.EXE", "2458926212e5589c013b7e7c28b9bee0", 698407, 4),
+	MACGAME("mirage", "", "Mirage", "0c7bbb4b24823e5ab871cb4c1d6f3710", 486954, 400),
+	WINGAME("mirage", "", "MIRAGE.EXE", "2291ea234c14f1ccb8f2e67ae09bbfa3", 696867, 400),
+	MACGAME("mirage", "Making Of", "The Making of Mirage", "78138a77207907642744d0960c14d9e5", 486982, 400),
+	WINGAME("mirage", "Making Of", "MAKINGOF.EXE", "2458926212e5589c013b7e7c28b9bee0", 698407, 400),
 
 	// both Mac and Win versions require installation to extract executable and some data files
-	MACGAME("mummy", "", "MUMMY", "01be45e7241194dad07938e7059b88e3", 503560, 4),
-	WINGAME("mummy", "", "MUMMY.EXE", "2ebe3a4ef8c128db46794333d4b61c36", 2939630, 4),
+	MACGAME("mummy", "", "MUMMY", "01be45e7241194dad07938e7059b88e3", 503560, 400),
+	WINGAME("mummy", "", "MUMMY.EXE", "2ebe3a4ef8c128db46794333d4b61c36", 2939630, 400),
 
-	WINDEMO("muppets", "Demo", "MUPPETS.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 4), // full game is not Director
+	WINDEMO("muppets", "Demo", "MUPPETS.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 400), // full game is not Director
 
-	MACGAME_l("murdertaylor", "", "Taylor French", "dc839fb9e2f8e6bfc4f4f995c57df495", 291683, Common::DE_DEU, 4),
-	WINGAME_l("murdertaylor", "", "TF.EXE", "d7a97fbe1daf2bc5fdecee2725c297cd", 952741, Common::DE_DEU, 4),
+	MACGAME_l("murdertaylor", "", "Taylor French", "dc839fb9e2f8e6bfc4f4f995c57df495", 291683, Common::DE_DEU, 400),
+	WINGAME_l("murdertaylor", "", "TF.EXE", "d7a97fbe1daf2bc5fdecee2725c297cd", 952741, Common::DE_DEU, 400),
 
-	WINGAME("mylk", "", "mylk.exe", "032b0860a694ece5f64f37cfe1ebdfa0", 904859, 4),
+	WINGAME("mylk", "", "mylk.exe", "032b0860a694ece5f64f37cfe1ebdfa0", 904859, 400),
 
-	MACGAME("necrobius", "", "NCROBIUS.PPC", "ab6ba48edb4a93ca034c63905f615865", 605874, 4),
-	WINGAME("necrobius", "", "N_BIUS.EXE", "d82ac6034122e1314157931f9df613f9", 692919, 4),
-	WINDEMO("necrobius", "Demo", "N_BIUS.EXE", "d17330706956c2fda3ee482b39b0609f", 705049, 4),
+	MACGAME("necrobius", "", "NCROBIUS.PPC", "ab6ba48edb4a93ca034c63905f615865", 605874, 400),
+	WINGAME("necrobius", "", "N_BIUS.EXE", "d82ac6034122e1314157931f9df613f9", 692919, 400),
+	WINDEMO("necrobius", "Demo", "N_BIUS.EXE", "d17330706956c2fda3ee482b39b0609f", 705049, 400),
 
-	MACGAME("nile", "", "Nile Passage to Egypt", "9765ad17bce6a2b40dd7f48377e82436", 512990, 4),
-	WINGAME("nile", "", "NILE.EXE", "9b00cbba14f0a2e0445784ebacf62c78", 2846777, 4),
+	MACGAME("nile", "", "Nile Passage to Egypt", "9765ad17bce6a2b40dd7f48377e82436", 512990, 400),
+	WINGAME("nile", "", "NILE.EXE", "9b00cbba14f0a2e0445784ebacf62c78", 2846777, 400),
 
-	WINDEMO("noir", "Demo", "NOIRDEMO.EXE", "a9690aa58c6da36b7a6bf88fd4c81ffc", 10949309, 4),
+	WINDEMO("noir", "Demo", "NOIRDEMO.EXE", "a9690aa58c6da36b7a6bf88fd4c81ffc", 10949309, 400),
 
-	WINGAME("operafatal", "", "OPERA.EXE", "2b9da5566698a1f4b453e1a27e00ad29", 697739, 4),
+	WINGAME("operafatal", "", "OPERA.EXE", "2b9da5566698a1f4b453e1a27e00ad29", 697739, 400),
 
 	{
 		{
@@ -666,7 +666,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
 	{
@@ -683,67 +683,67 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		4
+		400
 	},
 
-	MACGAME_l("phantasplanet", "", "phantasmagoria_PPC", "602e61f10c158183218405dd30a09b3f", 60352, Common::JA_JPN, 4),
-	WINGAME_l("phantasplanet", "", "PHANTAS.EXE", "c2dd62dd0f9488ae8102970553eff170", 690449, Common::JA_JPN, 4),
+	MACGAME_l("phantasplanet", "", "phantasmagoria_PPC", "602e61f10c158183218405dd30a09b3f", 60352, Common::JA_JPN, 400),
+	WINGAME_l("phantasplanet", "", "PHANTAS.EXE", "c2dd62dd0f9488ae8102970553eff170", 690449, Common::JA_JPN, 400),
 
-	WINDEMO("pitfall", "Demo", "PITDEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 4), // full game is not Director
+	WINDEMO("pitfall", "Demo", "PITDEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 400), // full game is not Director
 
-	MACGAME("planetarizona", "", "Planet Arizona", "0c7bbb4b24823e5ab871cb4c1d6f3710", 488433, 4),
-	WINGAME("planetarizona", "", "ARIZONA.EXE", "a23462ec87eff973d2cdb2ddfd4a59fa", 698651, 4),
+	MACGAME("planetarizona", "", "Planet Arizona", "0c7bbb4b24823e5ab871cb4c1d6f3710", 488433, 400),
+	WINGAME("planetarizona", "", "ARIZONA.EXE", "a23462ec87eff973d2cdb2ddfd4a59fa", 698651, 400),
 
 	// original file name is Paradise*Rescue
-	MACGAME_l("prescue", "", "ParadiseRescue", "0c7bbb4b24823e5ab871cb4c1d6f3710", 488433, Common::JA_JPN, 4),
-	WINGAME_l("prescue", "", "P_RESCUE.EXE", "a23462ec87eff973d2cdb2ddfd4a59fa", 698651, Common::JA_JPN, 4),
+	MACGAME_l("prescue", "", "ParadiseRescue", "0c7bbb4b24823e5ab871cb4c1d6f3710", 488433, Common::JA_JPN, 400),
+	WINGAME_l("prescue", "", "P_RESCUE.EXE", "a23462ec87eff973d2cdb2ddfd4a59fa", 698651, Common::JA_JPN, 400),
 
-	WINDEMO("santafe1", "Demo", "ELKMOON.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 4), // full game is not Director
-	WINDEMO("shanghai", "Demo", "SHGMDEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 4), // full game is not Director
+	WINDEMO("santafe1", "Demo", "ELKMOON.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 400), // full game is not Director
+	WINDEMO("shanghai", "Demo", "SHGMDEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 400), // full game is not Director
 
-	MACGAME("skyborg", "", "SkyBorg 1.0", "bcd3c718db258701496b3c5bcb827ef2", 486954, 4),
-	WINGAME("skyborg", "", "BORG.EXE", "855f305ba8ae70d5e5a53a9085b83d5b", 1887499, 4),
+	MACGAME("skyborg", "", "SkyBorg 1.0", "bcd3c718db258701496b3c5bcb827ef2", 486954, 400),
+	WINGAME("skyborg", "", "BORG.EXE", "855f305ba8ae70d5e5a53a9085b83d5b", 1887499, 400),
 
-	WINDEMO("spycraft", "Demo", "SPYCRAFT.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 4), // full game is not Director
+	WINDEMO("spycraft", "Demo", "SPYCRAFT.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 400), // full game is not Director
 
-	MACGAME("superspy", "", "ssi english", "ccf864a8dc6e9d0d26eb73b4683e634b", 60324, 4),
-	MACGAME_l("superspy", "", "SSI (Power Mac)", "5f036ea61efdcc5e30074a404dbf4d80", 61030, Common::DE_DEU, 4),
-	MACGAME_l("superspy", "", "ssi hebrew", "49aa41e6b624e64e8e48850faa882cc8", 60324, Common::HE_ISR, 4),
-	MACGAME_l("superspy", "", "SSI", "8f6a07fe6aa88428dd73557e1cd53d06", 58058, Common::IT_ITA, 4),
-	WINGAME("superspy", "", "ssie.exe", "1f256591c24a3bef0875aee737114057", 2181003, 4),
-	WINGAME_l("superspy", "", "Ssi.exe", "88272b3e24689c3986f4f4aa8c50e1f7", 2307489, Common::DE_DEU, 4),
-	WINGAME_l("superspy", "", "ssih.exe", "f016f23131189b2b65669f5258538fb5", 2261091, Common::HE_ISR, 4),
-	WINGAME_l("superspy", "", "SSI.EXE", "890c17a442dd3d96ab331f96d8c1eed8", 3648017, Common::IT_ITA, 4),
+	MACGAME("superspy", "", "ssi english", "ccf864a8dc6e9d0d26eb73b4683e634b", 60324, 400),
+	MACGAME_l("superspy", "", "SSI (Power Mac)", "5f036ea61efdcc5e30074a404dbf4d80", 61030, Common::DE_DEU, 400),
+	MACGAME_l("superspy", "", "ssi hebrew", "49aa41e6b624e64e8e48850faa882cc8", 60324, Common::HE_ISR, 400),
+	MACGAME_l("superspy", "", "SSI", "8f6a07fe6aa88428dd73557e1cd53d06", 58058, Common::IT_ITA, 400),
+	WINGAME("superspy", "", "ssie.exe", "1f256591c24a3bef0875aee737114057", 2181003, 400),
+	WINGAME_l("superspy", "", "Ssi.exe", "88272b3e24689c3986f4f4aa8c50e1f7", 2307489, Common::DE_DEU, 400),
+	WINGAME_l("superspy", "", "ssih.exe", "f016f23131189b2b65669f5258538fb5", 2261091, Common::HE_ISR, 400),
+	WINGAME_l("superspy", "", "SSI.EXE", "890c17a442dd3d96ab331f96d8c1eed8", 3648017, Common::IT_ITA, 400),
 
-	WINGAME("teamxtreme1", "", "XTREME.EXE", "45ab80997efedec388ff5200722e673c", 690123, 4),
-	WINGAME("teamxtreme2", "", "TX2.EXE", "50c80bd2add25e574494838772973beb", 2585471, 4),
+	WINGAME("teamxtreme1", "", "XTREME.EXE", "45ab80997efedec388ff5200722e673c", 690123, 400),
+	WINGAME("teamxtreme2", "", "TX2.EXE", "50c80bd2add25e574494838772973beb", 2585471, 400),
 
 	// original name is TD MAC/PPC
-	MACGAME("totaldistortion", "", "TD MACPPC", "12345", 12345, 4),
-	WINGAME("totaldistortion", "", "TOTAL_DN", "12345", 12345, 4),
+	MACGAME("totaldistortion", "", "TD MACPPC", "12345", 12345, 400),
+	WINGAME("totaldistortion", "", "TOTAL_DN", "12345", 12345, 400),
 
-	MACGAME("trekborg", "", "Picard Dossier", "e1dc28c1dd8409c2d2e0d5d269df5ffc", 520069, 4),
-	WINGAME("trekborg", "", "OMNIBORG.EXE", "1580ebad7599fb6c18815e244b0bfda3", 811363, 4),
+	MACGAME("trekborg", "", "Picard Dossier", "e1dc28c1dd8409c2d2e0d5d269df5ffc", 520069, 400),
+	WINGAME("trekborg", "", "OMNIBORG.EXE", "1580ebad7599fb6c18815e244b0bfda3", 811363, 400),
 
-	MACGAME("trekguideds9", "v1.0", "Omnipedia DS9 Episodes", "1c2e5371b835680e7c1ca8bcea008bef", 505317, 4),
-	WINGAME("trekguideds9", "v1.0", "OMNI_DS9.EXE", "0058390ff77e527c7bb413081004c304", 805517, 4),
+	MACGAME("trekguideds9", "v1.0", "Omnipedia DS9 Episodes", "1c2e5371b835680e7c1ca8bcea008bef", 505317, 400),
+	WINGAME("trekguideds9", "v1.0", "OMNI_DS9.EXE", "0058390ff77e527c7bb413081004c304", 805517, 400),
 
-	MACGAME("trekguidetng", "v1.1", "TNG Episodes", "1c2e5371b835680e7c1ca8bcea008bef", 520149, 4),
-	WINGAME("trekguidetng", "v1.1", "OMNI_TNG.EXE", "0049d72e2d5869408fc33860ec4b5c1f", 794201, 4),
+	MACGAME("trekguidetng", "v1.1", "TNG Episodes", "1c2e5371b835680e7c1ca8bcea008bef", 520149, 400),
+	WINGAME("trekguidetng", "v1.1", "OMNI_TNG.EXE", "0049d72e2d5869408fc33860ec4b5c1f", 794201, 400),
 
-	MACGAME("trekklingon", "", "Klingon Language Lab", "b797956eb3a4dabcc15bfadf6fc66591", 481482, 4),
-	WINGAME("trekklingon", "", "TREK_WIN.EXE", "204417e63c0a2df18cf42d780b97ed58", 1425763, 4),
+	MACGAME("trekklingon", "", "Klingon Language Lab", "b797956eb3a4dabcc15bfadf6fc66591", 481482, 400),
+	WINGAME("trekklingon", "", "TREK_WIN.EXE", "204417e63c0a2df18cf42d780b97ed58", 1425763, 400),
 
-	MACGAME("trekomni", "v1.00", "Omnipedia", "b7e69c37b7355022d400c14aa97c5d54", 516791, 4),
-	MACGAME("trekomni", "v1.1.2 Upgrade", "Omnipedia 2", "b7e69c37b7355022d400c14aa97c5d54", 613253, 4),
-	WINGAME("trekomni", "Premier Edition", "ST_OMNI.EXE", "1a648d47632561f10a98782f1dde5738", 811827, 4),
-	WINGAME("trekomni", "v1.1.2 Upgrade", "ST_OMNI2.EXE", "1d60aad73cc9c69776a878aa59e65230", 809781, 4),
+	MACGAME("trekomni", "v1.00", "Omnipedia", "b7e69c37b7355022d400c14aa97c5d54", 516791, 400),
+	MACGAME("trekomni", "v1.1.2 Upgrade", "Omnipedia 2", "b7e69c37b7355022d400c14aa97c5d54", 613253, 400),
+	WINGAME("trekomni", "Premier Edition", "ST_OMNI.EXE", "1a648d47632561f10a98782f1dde5738", 811827, 400),
+	WINGAME("trekomni", "v1.1.2 Upgrade", "ST_OMNI2.EXE", "1d60aad73cc9c69776a878aa59e65230", 809781, 400),
 
-	MACGAME_l("ybr2", "", "YBR2", "b797956eb3a4dabcc15bfadf6fc66591", 504153, Common::JA_JPN, 4),
-	WINGAME_l("ybr2", "", "YBR2.EXE", "dbe273c1df60305be98a1a582ddd2c3b", 860579, Common::JA_JPN, 4),
-	WINDEMO_l("ybr2", "Demo", "YBR2DEMO.EXE", "25ecc053e02a0ef537d34d615119c814", 900973, Common::JA_JPN, 4),
+	MACGAME_l("ybr2", "", "YBR2", "b797956eb3a4dabcc15bfadf6fc66591", 504153, Common::JA_JPN, 400),
+	WINGAME_l("ybr2", "", "YBR2.EXE", "dbe273c1df60305be98a1a582ddd2c3b", 860579, Common::JA_JPN, 400),
+	WINDEMO_l("ybr2", "Demo", "YBR2DEMO.EXE", "25ecc053e02a0ef537d34d615119c814", 900973, Common::JA_JPN, 400),
 
-	WINDEMO("znemesis", "Demo", "ZORKDEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 4), // full game is supported in ZVision engine
+	WINDEMO("znemesis", "Demo", "ZORKDEMO.EXE", "4a8fd0d74faef305bc935e1aac94d3e8", 712817, 400), // full game is supported in ZVision engine
 
 ////////////////////////////////////////
 //
@@ -751,23 +751,23 @@ static const DirectorGameDescription gameDescriptions[] = {
 //
 ////////////////////////////////////////
 
-	WINGAME("amber", "", "amber_jb.exe", "1a7acbba10a7246ba58c1d53fc7203f5", -1, 5),
+	WINGAME("amber", "", "amber_jb.exe", "1a7acbba10a7246ba58c1d53fc7203f5", -1, 500),
 
 	// original file names are ' ANKH2 ' and ' ANKH3 '
-	MACGAME_l("ankh2", "", "ANKH2", "12345", 12345, Common::JA_JPN, 5),
-	MACGAME_l("ankh3", "", "ANKH3", "12345", 12345, Common::JA_JPN, 5),
+	MACGAME_l("ankh2", "", "ANKH2", "12345", 12345, Common::JA_JPN, 500),
+	MACGAME_l("ankh3", "", "ANKH3", "12345", 12345, Common::JA_JPN, 500),
 
-	WINGAME_l("ernie", "", "Ernie.exe", "1a7acbba10a7246ba58c1d53fc7203f5", 1417481, Common::SE_SWE, 5),
-	WINDEMO_l("ernie", "Demo", "ERNIE.EXE", "1a7acbba10a7246ba58c1d53fc7203f5", 1417371, Common::SE_SWE, 5),
+	WINGAME_l("ernie", "", "Ernie.exe", "1a7acbba10a7246ba58c1d53fc7203f5", 1417481, Common::SE_SWE, 500),
+	WINDEMO_l("ernie", "Demo", "ERNIE.EXE", "1a7acbba10a7246ba58c1d53fc7203f5", 1417371, Common::SE_SWE, 500),
 
-	WINGAME("gadget", "", "GADGET.EXE", "d62438566e44826960fc16c5c23dbe43", 2212541, 5),  //ADGF_HICOLOR,
+	WINGAME("gadget", "", "GADGET.EXE", "d62438566e44826960fc16c5c23dbe43", 2212541, 500),  //ADGF_HICOLOR,
 
-	MACGAME("gundam0079", "", "Gundam0079", "4c38a51a21a1ad231f218c4786ff771d", -1, 5),
-	WINGAME("gundam0079", "", "Gundam0079.exe", "1a7acbba10a7246ba58c1d53fc7203f5", -1, 5),
+	MACGAME("gundam0079", "", "Gundam0079", "4c38a51a21a1ad231f218c4786ff771d", -1, 500),
+	WINGAME("gundam0079", "", "Gundam0079.exe", "1a7acbba10a7246ba58c1d53fc7203f5", -1, 500),
 
 	// Win version must be installed in 32-bit Windows to extract executable
-	WINGAME_l("horrortour3", "", "HT3.exe", "3460ad87d2ba57104e2810a77b53c220", 5128359, Common::JA_JPN, 5),
-	MACGAME_l("horrortour3", "", "HT3", "b545372e9f6e9351d4119af9258d8de0", 108736, Common::JA_JPN, 5),
+	WINGAME_l("horrortour3", "", "HT3.exe", "3460ad87d2ba57104e2810a77b53c220", 5128359, Common::JA_JPN, 500),
+	MACGAME_l("horrortour3", "", "HT3", "b545372e9f6e9351d4119af9258d8de0", 108736, Common::JA_JPN, 500),
 
 	{
 		{
@@ -785,7 +785,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		5
+		500
 	},
 
 	{
@@ -807,7 +807,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		5
+		500
 	},
 
 	{
@@ -826,7 +826,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		5
+		500
 	},
 
 	{
@@ -849,20 +849,20 @@ static const DirectorGameDescription gameDescriptions[] = {
 			GUIO1(GUIO_NOASPECT)
 		},
 		GID_GENERIC,
-		5
+		500
 	},
 
-	MACGAME_l("murderbrett", "", "Brad, le surfeur", "227fcce08de8028e2201f5f4eb3b3cc3", 720160, Common::FR_FRA, 5),
-	WINGAME_l("murderbrett", "", "BRAD.EXE", "e1c3cb4df694b887f3708f9ebb72302f", 934342, Common::FR_FRA, 5),
+	MACGAME_l("murderbrett", "", "Brad, le surfeur", "227fcce08de8028e2201f5f4eb3b3cc3", 720160, Common::FR_FRA, 500),
+	WINGAME_l("murderbrett", "", "BRAD.EXE", "e1c3cb4df694b887f3708f9ebb72302f", 934342, Common::FR_FRA, 500),
 
-	WINGAME("noir", "", "NOIR.EXE", "2e62abdad839e42068afdcd0644d7dcf", 1020879, 5),
+	WINGAME("noir", "", "NOIR.EXE", "2e62abdad839e42068afdcd0644d7dcf", 1020879, 500),
 
-	MACGAME_l("ybr3", "", "YBRH", "4c38a51a21a1ad231f218c4786ff771d", 105855, Common::JA_JPN, 5),
-	MACGAME_l("ybr3", "Single Version", "YBR_Single", "6e7e31d05709e1d38d63f4df6a59eec0", 722547, Common::JA_JPN, 5),
-	MACDEMO_l("ybr3", "Demo", "harapeco", "4ab012350c6e1c39eda772e33df30cea", 723903, Common::JA_JPN, 5), // Original name is non-ASCII Japanese characters
-	WINGAME_l("ybr3", "", "YBRH.exe", "1a7acbba10a7246ba58c1d53fc7203f5", 1410805, Common::JA_JPN, 5), // Original name is non-ASCII Japanese characters
-	WINGAME_l("ybr3", "Single Version", "YBRSingl.exe", "1a7acbba10a7246ba58c1d53fc7203f5", 1410799, Common::JA_JPN, 5),
-	WINDEMO_l("ybr3", "Demo", "harapeco.exe", "1a7acbba10a7246ba58c1d53fc7203f5", 1693107, Common::JA_JPN, 5),
+	MACGAME_l("ybr3", "", "YBRH", "4c38a51a21a1ad231f218c4786ff771d", 105855, Common::JA_JPN, 500),
+	MACGAME_l("ybr3", "Single Version", "YBR_Single", "6e7e31d05709e1d38d63f4df6a59eec0", 722547, Common::JA_JPN, 500),
+	MACDEMO_l("ybr3", "Demo", "harapeco", "4ab012350c6e1c39eda772e33df30cea", 723903, Common::JA_JPN, 500), // Original name is non-ASCII Japanese characters
+	WINGAME_l("ybr3", "", "YBRH.exe", "1a7acbba10a7246ba58c1d53fc7203f5", 1410805, Common::JA_JPN, 500), // Original name is non-ASCII Japanese characters
+	WINGAME_l("ybr3", "Single Version", "YBRSingl.exe", "1a7acbba10a7246ba58c1d53fc7203f5", 1410799, Common::JA_JPN, 500),
+	WINDEMO_l("ybr3", "Demo", "harapeco.exe", "1a7acbba10a7246ba58c1d53fc7203f5", 1693107, Common::JA_JPN, 500),
 
 ////////////////////////////////////////
 //
@@ -870,8 +870,8 @@ static const DirectorGameDescription gameDescriptions[] = {
 //
 ////////////////////////////////////////
 
-	MACGAME("trekpedia98", "", "Ency98 Player", "b0b0e36586489ca6070d20feeff52fa5", 1091806, 6),
-	WINGAME("trekpedia98", "", "ENCY98.EXE", "35f1550747fcf691283b0f2486144e2b", 1707566, 6),
+	MACGAME("trekpedia98", "", "Ency98 Player", "b0b0e36586489ca6070d20feeff52fa5", 1091806, 600),
+	WINGAME("trekpedia98", "", "ENCY98.EXE", "35f1550747fcf691283b0f2486144e2b", 1707566, 600),
 
 ////////////////////////////////////////
 //
@@ -879,8 +879,8 @@ static const DirectorGameDescription gameDescriptions[] = {
 //
 ////////////////////////////////////////
 
-	MACGAME("jewels", "", "Jewels of the Oracle", "fa52f0136cde568a46249ce74f01a324", -1, 7),
-	WINGAME("jewels", "", "Jewels.exe", "c1a2e8b7e41fa204009324a9c7db1030", -1, 7),
+	MACGAME("jewels", "", "Jewels of the Oracle", "fa52f0136cde568a46249ce74f01a324", -1, 700),
+	WINGAME("jewels", "", "Jewels.exe", "c1a2e8b7e41fa204009324a9c7db1030", -1, 700),
 
 ////////////////////////////////////////
 //
@@ -888,7 +888,7 @@ static const DirectorGameDescription gameDescriptions[] = {
 //
 ////////////////////////////////////////
 
-	MACGAME_l("operafatal", "Classic OS", "Opera Classic", "78e78f91a6e42ece5a585c3a3dc81de3", 172200, Common::DE_DEU, 8),
+	MACGAME_l("operafatal", "Classic OS", "Opera Classic", "78e78f91a6e42ece5a585c3a3dc81de3", 172200, Common::DE_DEU, 800),
 
 ////////////////////////////////////////
 //
@@ -896,8 +896,8 @@ static const DirectorGameDescription gameDescriptions[] = {
 //
 ////////////////////////////////////////
 
-	MACGAME_l("operafatal", "OS X", "Opera OSX", "3ab7133c17cd4f175e5cb14c6750766e", 222001, Common::DE_DEU, 9),
-	WINGAME_l("operafatal", "", "Opera.exe", "05e89a3d53d270cac3b53e0a6f9352f5", 2747652, Common::DE_DEU, 9),
+	MACGAME_l("operafatal", "OS X", "Opera OSX", "3ab7133c17cd4f175e5cb14c6750766e", 222001, Common::DE_DEU, 900),
+	WINGAME_l("operafatal", "", "Opera.exe", "05e89a3d53d270cac3b53e0a6f9352f5", 2747652, Common::DE_DEU, 900),
 
 	{ AD_TABLE_END_MARKER, GID_GENERIC, 0 }
 
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index 324d51f92d..1160934075 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -179,13 +179,13 @@ Common::Error DirectorEngine::run() {
 	if (getPlatform() == Common::kPlatformWindows)
 		_machineType = 256; // IBM PC-type machine
 
-	if (getVersion() < 4) {
+	if (getVersion() < 400) {
 		if (getPlatform() == Common::kPlatformWindows) {
 			_sharedCastFile = "SHARDCST.MMM";
 		} else {
 			_sharedCastFile = "Shared Cast";
 		}
-	} else if (getVersion() == 5) {
+	} else if (getVersion() == 500) {
 		if (getPlatform() == Common::kPlatformWindows) {
 			_sharedCastFile = "SHARED.Cxt";
 		}
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index c28840b736..5b4e116f7c 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -129,7 +129,7 @@ void Frame::readChannel(Common::SeekableSubReadStreamEndian &stream, uint16 offs
 void Frame::readChannels(Common::ReadStreamEndian *stream) {
 	byte unk[48];
 
-	if (_vm->getVersion() < 4) {
+	if (_vm->getVersion() < 400) {
 		// Sound/Tempo/Transition
 		_actionId = stream->readByte();
 		_soundType1 = stream->readByte(); // type: 0x17 for sounds (sound is cast id), 0x16 for MIDI (sound is cmd id)
@@ -192,7 +192,7 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
 
 		if (_vm->getPlatform() == Common::kPlatformMacintosh)
 			stream->read(unk, 3);
-	} else if (_vm->getVersion() == 4) {
+	} else if (_vm->getVersion() >= 400 && _vm->getVersion() < 500) {
 		// Sound/Tempo/Transition
 		int unk1 = stream->readByte();
 		if (unk1) {
@@ -248,7 +248,7 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
 		stream->readByte();
 
 		debugC(8, kDebugLoading, "Frame::readChannels(): %d %d %d %d %d %d %d %d %d %d %d", _actionId, _soundType1, _transDuration, _transChunkSize, _tempo, _transType, _sound1, _skipFrameFlag, _blend, _sound2, _soundType2);
-	} else if (_vm->getVersion() == 5) {
+	} else if (_vm->getVersion() >= 500 && _vm->getVersion() < 600) {
 		// Sound/Tempo/Transition channel
 		stream->read(unk, 24);
 
@@ -268,11 +268,11 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
 	for (int i = 0; i < _numChannels; i++) {
 		Sprite &sprite = *_sprites[i + 1];
 
-		if (_vm->getVersion() <= 4) {
+		if (_vm->getVersion() < 500) {
 			sprite._scriptId = stream->readByte();
 			sprite._spriteType = (SpriteType)stream->readByte();
 			sprite._enabled = sprite._spriteType != kInactiveSprite;
-			if (_vm->getVersion() == 4) {
+			if (_vm->getVersion() >= 400) {
 				sprite._foreColor = _vm->transformColor((uint8)stream->readByte());
 				sprite._backColor = _vm->transformColor((uint8)stream->readByte());
 			} else {
@@ -296,7 +296,7 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
 			sprite._height = (int16)stream->readUint16();
 			sprite._width = (int16)stream->readUint16();
 
-			if (_vm->getVersion() == 4) {
+			if (_vm->getVersion() >= 400) {
 				sprite._scriptId = stream->readUint16();
 				// & 0x0f scorecolor
 				// 0x10 forecolor is rgb
@@ -306,7 +306,7 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
 				sprite._colorcode = stream->readByte();
 				sprite._blendAmount = stream->readByte();
 			}
-		} else if (_vm->getVersion() == 5) {
+		} else if (_vm->getVersion() >= 500 && _vm->getVersion() < 600) {
 			sprite._spriteType = (SpriteType)stream->readByte();
 			sprite._inkData = stream->readByte();
 
@@ -329,7 +329,7 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
 			sprite._blendAmount = stream->readByte();
 			sprite._thickness = stream->readByte();
 			stream->readByte();	// unused
-		} else if (_vm->getVersion() == 6) {
+		} else if (_vm->getVersion() >= 600 && _vm->getVersion() < 700) {
 			sprite._spriteType = (SpriteType)stream->readByte();
 			sprite._inkData = stream->readByte();
 
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 366a266ffb..1164a0863f 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -83,185 +83,185 @@ static struct BuiltinProto {
 	SymbolType type;
 } builtins[] = {
 	// Math
-	{ "abs",			LB::b_abs,			1, 1, true, 2, FBLTIN },	// D2 function
-	{ "atan",			LB::b_atan,			1, 1, true, 4, FBLTIN },	//			D4 f
-	{ "cos",			LB::b_cos,			1, 1, true, 4, FBLTIN },	//			D4 f
-	{ "exp",			LB::b_exp,			1, 1, true, 4, FBLTIN },	//			D4 f
-	{ "float",			LB::b_float,		1, 1, true, 4, FBLTIN },	//			D4 f
-	{ "integer",		LB::b_integer,		1, 1, true, 3, FBLTIN },	//		D3 f
-	{ "log",			LB::b_log,			1, 1, true, 4, FBLTIN },	//			D4 f
-	{ "pi",				LB::b_pi,			0, 0, true, 4, FBLTIN },	//			D4 f
-	{ "power",			LB::b_power,		2, 2, true, 4, FBLTIN },	//			D4 f
-	{ "random",			LB::b_random,		1, 1, true, 2, FBLTIN },	// D2 f
-	{ "sin",			LB::b_sin,			1, 1, true, 4, FBLTIN },	//			D4 f
-	{ "sqrt",			LB::b_sqrt,			1, 1, true, 2, FBLTIN },	// D2 f
-	{ "tan",			LB::b_tan,			1, 1, true, 4, FBLTIN },	//			D4 f
+	{ "abs",			LB::b_abs,			1, 1, true, 200, FBLTIN },	// D2 function
+	{ "atan",			LB::b_atan,			1, 1, true, 400, FBLTIN },	//			D4 f
+	{ "cos",			LB::b_cos,			1, 1, true, 400, FBLTIN },	//			D4 f
+	{ "exp",			LB::b_exp,			1, 1, true, 400, FBLTIN },	//			D4 f
+	{ "float",			LB::b_float,		1, 1, true, 400, FBLTIN },	//			D4 f
+	{ "integer",		LB::b_integer,		1, 1, true, 300, FBLTIN },	//		D3 f
+	{ "log",			LB::b_log,			1, 1, true, 400, FBLTIN },	//			D4 f
+	{ "pi",				LB::b_pi,			0, 0, true, 400, FBLTIN },	//			D4 f
+	{ "power",			LB::b_power,		2, 2, true, 400, FBLTIN },	//			D4 f
+	{ "random",			LB::b_random,		1, 1, true, 200, FBLTIN },	// D2 f
+	{ "sin",			LB::b_sin,			1, 1, true, 400, FBLTIN },	//			D4 f
+	{ "sqrt",			LB::b_sqrt,			1, 1, true, 200, FBLTIN },	// D2 f
+	{ "tan",			LB::b_tan,			1, 1, true, 400, FBLTIN },	//			D4 f
 	// String
-	{ "chars",			LB::b_chars,		3, 3, true, 2, FBLTIN },	// D2 f
-	{ "charToNum",		LB::b_charToNum,	1, 1, true, 2, FBLTIN },	// D2 f
-	{ "delete",			LB::b_delete,		1, 1, true, 3, CBLTIN },	//		D3 command
-	{ "hilite",			LB::b_hilite,		1, 1, true, 3, CBLTIN },	//		D3 c
-	{ "length",			LB::b_length,		1, 1, true, 2, FBLTIN },	// D2 f
-	{ "numToChar",		LB::b_numToChar,	1, 1, true, 2, FBLTIN },	// D2 f
-	{ "offset",			LB::b_offset,		2, 3, true, 2, FBLTIN },	// D2 f
-	{ "string",			LB::b_string,		1, 1, true, 2, FBLTIN },	// D2 f
-	{ "value",		 	LB::b_value,		1, 1, true, 2, FBLTIN },	// D2 f
+	{ "chars",			LB::b_chars,		3, 3, true, 200, FBLTIN },	// D2 f
+	{ "charToNum",		LB::b_charToNum,	1, 1, true, 200, FBLTIN },	// D2 f
+	{ "delete",			LB::b_delete,		1, 1, true, 300, CBLTIN },	//		D3 command
+	{ "hilite",			LB::b_hilite,		1, 1, true, 300, CBLTIN },	//		D3 c
+	{ "length",			LB::b_length,		1, 1, true, 200, FBLTIN },	// D2 f
+	{ "numToChar",		LB::b_numToChar,	1, 1, true, 200, FBLTIN },	// D2 f
+	{ "offset",			LB::b_offset,		2, 3, true, 200, FBLTIN },	// D2 f
+	{ "string",			LB::b_string,		1, 1, true, 200, FBLTIN },	// D2 f
+	{ "value",		 	LB::b_value,		1, 1, true, 200, FBLTIN },	// D2 f
 	// Lists
-	{ "add",			LB::b_add,			2, 2, false, 4, HBLTIN },	//			D4 handler
-	{ "addAt",			LB::b_addAt,		3, 3, false, 4, HBLTIN },	//			D4 h
-	{ "addProp",		LB::b_addProp,		3, 3, false, 4, HBLTIN },	//			D4 h
-	{ "append",			LB::b_append,		2, 2, false, 4, HBLTIN },	//			D4 h
-	{ "count",			LB::b_count,		1, 1, true,  4, FBLTIN },	//			D4 f
-	{ "deleteAt",		LB::b_deleteAt,		2, 2, false, 4, HBLTIN },	//			D4 h
-	{ "deleteProp",		LB::b_deleteProp,	2, 2, false, 4, HBLTIN },	//			D4 h
-	{ "findPos",		LB::b_findPos,		2, 2, true,  4, FBLTIN },	//			D4 f
-	{ "findPosNear",	LB::b_findPosNear,	2, 2, true,  4, FBLTIN },	//			D4 f
-	{ "getaProp",		LB::b_getaProp,		2, 2, true,  4, FBLTIN },	//			D4 f
-	{ "getAt",			LB::b_getAt,		2, 2, true,  4, FBLTIN },	//			D4 f
-	{ "getLast",		LB::b_getLast,		1, 1, true,  4, FBLTIN },	//			D4 f
-	{ "getOne",			LB::b_getOne,		2, 2, true,  4, FBLTIN },	//			D4 f
-	{ "getPos",			LB::b_getPos,		2, 2, true,  4, FBLTIN },	//			D4 f
-	{ "getProp",		LB::b_getProp,		2, 2, true,  4, FBLTIN },	//			D4 f
-	{ "getPropAt",		LB::b_getPropAt,	2, 2, true,  4, FBLTIN },	//			D4 f
-	{ "list",			LB::b_list,			-1, 0, true, 4, FBLTIN },	//			D4 f
-	{ "listP",			LB::b_listP,		1, 1, true,  4, FBLTIN },	//			D4 f
-	{ "max",			LB::b_max,			-1,0, true,  4, FBLTIN },	//			D4 f
-	{ "min",			LB::b_min,			-1,0, true,  4, FBLTIN },	//			D4 f
-	{ "setaProp",		LB::b_setaProp,		3, 3, false, 4, HBLTIN },	//			D4 h
-	{ "setAt",			LB::b_setAt,		3, 3, false, 4, HBLTIN },	//			D4 h
-	{ "setProp",		LB::b_setProp,		3, 3, false, 4, HBLTIN },	//			D4 h
-	{ "sort",			LB::b_sort,			1, 1, false, 4, HBLTIN },	//			D4 h
+	{ "add",			LB::b_add,			2, 2, false, 400, HBLTIN },	//			D4 handler
+	{ "addAt",			LB::b_addAt,		3, 3, false, 400, HBLTIN },	//			D4 h
+	{ "addProp",		LB::b_addProp,		3, 3, false, 400, HBLTIN },	//			D4 h
+	{ "append",			LB::b_append,		2, 2, false, 400, HBLTIN },	//			D4 h
+	{ "count",			LB::b_count,		1, 1, true,  400, FBLTIN },	//			D4 f
+	{ "deleteAt",		LB::b_deleteAt,		2, 2, false, 400, HBLTIN },	//			D4 h
+	{ "deleteProp",		LB::b_deleteProp,	2, 2, false, 400, HBLTIN },	//			D4 h
+	{ "findPos",		LB::b_findPos,		2, 2, true,  400, FBLTIN },	//			D4 f
+	{ "findPosNear",	LB::b_findPosNear,	2, 2, true,  400, FBLTIN },	//			D4 f
+	{ "getaProp",		LB::b_getaProp,		2, 2, true,  400, FBLTIN },	//			D4 f
+	{ "getAt",			LB::b_getAt,		2, 2, true,  400, FBLTIN },	//			D4 f
+	{ "getLast",		LB::b_getLast,		1, 1, true,  400, FBLTIN },	//			D4 f
+	{ "getOne",			LB::b_getOne,		2, 2, true,  400, FBLTIN },	//			D4 f
+	{ "getPos",			LB::b_getPos,		2, 2, true,  400, FBLTIN },	//			D4 f
+	{ "getProp",		LB::b_getProp,		2, 2, true,  400, FBLTIN },	//			D4 f
+	{ "getPropAt",		LB::b_getPropAt,	2, 2, true,  400, FBLTIN },	//			D4 f
+	{ "list",			LB::b_list,			-1, 0, true, 400, FBLTIN },	//			D4 f
+	{ "listP",			LB::b_listP,		1, 1, true,  400, FBLTIN },	//			D4 f
+	{ "max",			LB::b_max,			-1,0, true,  400, FBLTIN },	//			D4 f
+	{ "min",			LB::b_min,			-1,0, true,  400, FBLTIN },	//			D4 f
+	{ "setaProp",		LB::b_setaProp,		3, 3, false, 400, HBLTIN },	//			D4 h
+	{ "setAt",			LB::b_setAt,		3, 3, false, 400, HBLTIN },	//			D4 h
+	{ "setProp",		LB::b_setProp,		3, 3, false, 400, HBLTIN },	//			D4 h
+	{ "sort",			LB::b_sort,			1, 1, false, 400, HBLTIN },	//			D4 h
 	// Files
-	{ "closeDA",	 	LB::b_closeDA, 		0, 0, false, 2, CBLTIN },	// D2 c
-	{ "closeResFile",	LB::b_closeResFile,	0, 1, false, 2, CBLTIN },	// D2 c
-	{ "closeXlib",		LB::b_closeXlib,	0, 1, false, 2, CBLTIN },	// D2 c
-	{ "getNthFileNameInFolder",LB::b_getNthFileNameInFolder,2,2,true,4,FBLTIN },//	D4 f
-	{ "open",			LB::b_open,			1, 2, false, 2, CBLTIN },	// D2 c
-	{ "openDA",	 		LB::b_openDA, 		1, 1, false, 2, CBLTIN },	// D2 c
-	{ "openResFile",	LB::b_openResFile,	1, 1, false, 2, CBLTIN },	// D2 c
-	{ "openXlib",		LB::b_openXlib,		1, 1, false, 2, CBLTIN },	// D2 c
-	{ "saveMovie",		LB::b_saveMovie,	1, 1, false, 4, CBLTIN },	//			D4 c
-	{ "setCallBack",	LB::b_setCallBack,	2, 2, false, 3, CBLTIN },	//		D3 c
-	{ "showResFile",	LB::b_showResFile,	0, 1, false, 2, CBLTIN },	// D2 c
-	{ "showXlib",		LB::b_showXlib,		0, 1, false, 2, CBLTIN },	// D2 c
-	{ "xFactoryList",	LB::b_xFactoryList,	1, 1, true,  3, FBLTIN },	//		D3 f
+	{ "closeDA",	 	LB::b_closeDA, 		0, 0, false, 200, CBLTIN },	// D2 c
+	{ "closeResFile",	LB::b_closeResFile,	0, 1, false, 200, CBLTIN },	// D2 c
+	{ "closeXlib",		LB::b_closeXlib,	0, 1, false, 200, CBLTIN },	// D2 c
+	{ "getNthFileNameInFolder",LB::b_getNthFileNameInFolder,2,2,true,400,FBLTIN }, //D4 f
+	{ "open",			LB::b_open,			1, 2, false, 200, CBLTIN },	// D2 c
+	{ "openDA",	 		LB::b_openDA, 		1, 1, false, 200, CBLTIN },	// D2 c
+	{ "openResFile",	LB::b_openResFile,	1, 1, false, 200, CBLTIN },	// D2 c
+	{ "openXlib",		LB::b_openXlib,		1, 1, false, 200, CBLTIN },	// D2 c
+	{ "saveMovie",		LB::b_saveMovie,	1, 1, false, 400, CBLTIN },	//			D4 c
+	{ "setCallBack",	LB::b_setCallBack,	2, 2, false, 300, CBLTIN },	//		D3 c
+	{ "showResFile",	LB::b_showResFile,	0, 1, false, 200, CBLTIN },	// D2 c
+	{ "showXlib",		LB::b_showXlib,		0, 1, false, 200, CBLTIN },	// D2 c
+	{ "xFactoryList",	LB::b_xFactoryList,	1, 1, true,  300, FBLTIN },	//		D3 f
 	// Control
-	{ "abort",			LB::b_abort,		0, 0, false, 4, CBLTIN },	//			D4 c
-	{ "continue",		LB::b_continue,		0, 0, false, 2, CBLTIN },	// D2 c
-	{ "dontPassEvent",	LB::b_dontPassEvent,0, 0, false, 2, CBLTIN },	// D2 c
-	{ "delay",	 		LB::b_delay,		1, 1, false, 2, CBLTIN },	// D2 c
-	{ "do",		 		LB::b_do,			1, 1, false, 2, CBLTIN },	// D2 c
-	{ "go",		 		LB::b_go,			1, 2, false, 4, CBLTIN },	// 			D4 c
-	{ "halt",	 		LB::b_halt,			0, 0, false, 4, CBLTIN },	//			D4 c
-	{ "nothing",		LB::b_nothing,		0, 0, false, 2, CBLTIN },	// D2 c
-	{ "pass",			LB::b_pass,			0, 0, false, 4, CBLTIN },	//			D4 c
-	{ "pause",			LB::b_pause,		0, 0, false, 2, CBLTIN },	// D2 c
-	{ "play",			LB::b_play,			1, 2, false, 2, CBLTIN },	// D2 c
-	{ "playAccel",		LB::b_playAccel,	-1,0, false, 2, CBLTIN },	// D2
+	{ "abort",			LB::b_abort,		0, 0, false, 400, CBLTIN },	//			D4 c
+	{ "continue",		LB::b_continue,		0, 0, false, 200, CBLTIN },	// D2 c
+	{ "dontPassEvent",	LB::b_dontPassEvent,0, 0, false, 200, CBLTIN },	// D2 c
+	{ "delay",	 		LB::b_delay,		1, 1, false, 200, CBLTIN },	// D2 c
+	{ "do",		 		LB::b_do,			1, 1, false, 200, CBLTIN },	// D2 c
+	{ "go",		 		LB::b_go,			1, 2, false, 400, CBLTIN },	// 			D4 c
+	{ "halt",	 		LB::b_halt,			0, 0, false, 400, CBLTIN },	//			D4 c
+	{ "nothing",		LB::b_nothing,		0, 0, false, 200, CBLTIN },	// D2 c
+	{ "pass",			LB::b_pass,			0, 0, false, 400, CBLTIN },	//			D4 c
+	{ "pause",			LB::b_pause,		0, 0, false, 200, CBLTIN },	// D2 c
+	{ "play",			LB::b_play,			1, 2, false, 200, CBLTIN },	// D2 c
+	{ "playAccel",		LB::b_playAccel,	-1,0, false, 200, CBLTIN },	// D2
 		// play done													// D2
-	{ "preLoad",		LB::b_preLoad,		-1,0, false, 3, CBLTIN },	//		D3.1 c
-	{ "preLoadCast",	LB::b_preLoadCast,	-1,0, false, 3, CBLTIN },	//		D3.1 c
-	{ "quit",			LB::b_quit,			0, 0, false, 2, CBLTIN },	// D2 c
-	{ "restart",		LB::b_restart,		0, 0, false, 2, CBLTIN },	// D2 c
-	{ "return",			LB::b_return,		0, 1, false, 2, CBLTIN },	// D2 f
-	{ "scummvm_returnNumber", LB::b_returnNumber, 1, 1, false, 2, CBLTIN }, // D2 f
-	{ "shutDown",		LB::b_shutDown,		0, 0, false, 2, CBLTIN },	// D2 c
-	{ "startTimer",		LB::b_startTimer,	0, 0, false, 2, CBLTIN },	// D2 c
+	{ "preLoad",		LB::b_preLoad,		-1,0, false, 300, CBLTIN },	//		D3.1 c
+	{ "preLoadCast",	LB::b_preLoadCast,	-1,0, false, 300, CBLTIN },	//		D3.1 c
+	{ "quit",			LB::b_quit,			0, 0, false, 200, CBLTIN },	// D2 c
+	{ "restart",		LB::b_restart,		0, 0, false, 200, CBLTIN },	// D2 c
+	{ "return",			LB::b_return,		0, 1, false, 200, CBLTIN },	// D2 f
+	{ "scummvm_returnNumber", LB::b_returnNumber, 1, 1, false, 200, CBLTIN }, // D2 f
+	{ "shutDown",		LB::b_shutDown,		0, 0, false, 200, CBLTIN },	// D2 c
+	{ "startTimer",		LB::b_startTimer,	0, 0, false, 200, CBLTIN },	// D2 c
 		// when keyDown													// D2
 		// when mouseDown												// D2
 		// when mouseUp													// D2
 		// when timeOut													// D2
 	// Types
-	{ "factory",		LB::b_factory,		1, 1, true,  3, FBLTIN },	//		D3
-	{ "floatP",			LB::b_floatP,		1, 1, true,  3, FBLTIN },	//		D3
-	{ "ilk",	 		LB::b_ilk,			1, 2, false, 4, FBLTIN },	//			D4 f
-	{ "integerp",		LB::b_integerp,		1, 1, true,  2, FBLTIN },	// D2 f
-	{ "objectp",		LB::b_objectp,		1, 1, true,  2, FBLTIN },	// D2 f
-	{ "pictureP",		LB::b_pictureP,		1, 1, true,  4, FBLTIN },	//			D4 f
-	{ "stringp",		LB::b_stringp,		1, 1, true,  2, FBLTIN },	// D2 f
-	{ "symbolp",		LB::b_symbolp,		1, 1, true,  2, FBLTIN },	// D2 f
-	{ "voidP",			LB::b_voidP,		1, 1, true,  4, FBLTIN },	//			D4 f
+	{ "factory",		LB::b_factory,		1, 1, true,  300, FBLTIN },	//		D3
+	{ "floatP",			LB::b_floatP,		1, 1, true,  300, FBLTIN },	//		D3
+	{ "ilk",	 		LB::b_ilk,			1, 2, false, 400, FBLTIN },	//			D4 f
+	{ "integerp",		LB::b_integerp,		1, 1, true,  200, FBLTIN },	// D2 f
+	{ "objectp",		LB::b_objectp,		1, 1, true,  200, FBLTIN },	// D2 f
+	{ "pictureP",		LB::b_pictureP,		1, 1, true,  400, FBLTIN },	//			D4 f
+	{ "stringp",		LB::b_stringp,		1, 1, true,  200, FBLTIN },	// D2 f
+	{ "symbolp",		LB::b_symbolp,		1, 1, true,  200, FBLTIN },	// D2 f
+	{ "voidP",			LB::b_voidP,		1, 1, true,  400, FBLTIN },	//			D4 f
 	// Misc
-	{ "alert",	 		LB::b_alert,		1, 1, false, 2, CBLTIN },	// D2 c
-	{ "clearGlobals",	LB::b_clearGlobals,	0, 0, false, 3, CBLTIN },	//		D3.1 c
-	{ "cursor",	 		LB::b_cursor,		1, 1, false, 2, CBLTIN },	// D2 c
-	{ "framesToHMS",	LB::b_framesToHMS,	4, 4, false, 3, FBLTIN },	//		D3 f
-	{ "HMStoFrames",	LB::b_HMStoFrames,	4, 4, false, 3, FBLTIN },	//		D3 f
-	{ "param",	 		LB::b_param,		1, 1, true,  4, FBLTIN },	//			D4 f
-	{ "printFrom",	 	LB::b_printFrom,	-1,0, false, 2, CBLTIN },	// D2 c
-	{ "put",			LB::b_put,			-1,0, false, 2, CBLTIN },	// D2
+	{ "alert",	 		LB::b_alert,		1, 1, false, 200, CBLTIN },	// D2 c
+	{ "clearGlobals",	LB::b_clearGlobals,	0, 0, false, 300, CBLTIN },	//		D3.1 c
+	{ "cursor",	 		LB::b_cursor,		1, 1, false, 200, CBLTIN },	// D2 c
+	{ "framesToHMS",	LB::b_framesToHMS,	4, 4, false, 300, FBLTIN },	//		D3 f
+	{ "HMStoFrames",	LB::b_HMStoFrames,	4, 4, false, 300, FBLTIN },	//		D3 f
+	{ "param",	 		LB::b_param,		1, 1, true,  400, FBLTIN },	//			D4 f
+	{ "printFrom",	 	LB::b_printFrom,	-1,0, false, 200, CBLTIN },	// D2 c
+	{ "put",			LB::b_put,			-1,0, false, 200, CBLTIN },	// D2
 		// set															// D2
-	{ "showGlobals",	LB::b_showGlobals,	0, 0, false, 2, CBLTIN },	// D2 c
-	{ "showLocals",		LB::b_showLocals,	0, 0, false, 2, CBLTIN },	// D2 c
+	{ "showGlobals",	LB::b_showGlobals,	0, 0, false, 200, CBLTIN },	// D2 c
+	{ "showLocals",		LB::b_showLocals,	0, 0, false, 200, CBLTIN },	// D2 c
 	// Score
-	{ "constrainH",		LB::b_constrainH,	2, 2, true,  2, FBLTIN },	// D2 f
-	{ "constrainV",		LB::b_constrainV,	2, 2, true,  2, FBLTIN },	// D2 f
-	{ "copyToClipBoard",LB::b_copyToClipBoard,1,1, false, 4, CBLTIN }, //			D4 c
-	{ "duplicate",		LB::b_duplicate,	1, 2, false, 4, CBLTIN },	//			D4 c
-	{ "editableText",	LB::b_editableText,	0, 0, false, 2, CBLTIN },	// D2, FIXME: the field in D4+
-	{ "erase",			LB::b_erase,		1, 1, false, 4, CBLTIN },	//			D4 c
-	{ "findEmpty",		LB::b_findEmpty,	1, 1, true,  4, FBLTIN },	//			D4 f
+	{ "constrainH",		LB::b_constrainH,	2, 2, true,  200, FBLTIN },	// D2 f
+	{ "constrainV",		LB::b_constrainV,	2, 2, true,  200, FBLTIN },	// D2 f
+	{ "copyToClipBoard",LB::b_copyToClipBoard,1,1, false, 400, CBLTIN }, //			D4 c
+	{ "duplicate",		LB::b_duplicate,	1, 2, false, 400, CBLTIN },	//			D4 c
+	{ "editableText",	LB::b_editableText,	0, 0, false, 200, CBLTIN },	// D2, FIXME: the field in D4+
+	{ "erase",			LB::b_erase,		1, 1, false, 400, CBLTIN },	//			D4 c
+	{ "findEmpty",		LB::b_findEmpty,	1, 1, true,  400, FBLTIN },	//			D4 f
 		// go															// D2
-	{ "importFileInto",	LB::b_importFileInto,2, 2, false, 4, CBLTIN }, //			D4 c
-	{ "installMenu",	LB::b_installMenu,	1, 1, false, 2, CBLTIN },	// D2 c
-	{ "label",			LB::b_label,		1, 1, true,  2, FBLTIN },	// D2 f
-	{ "marker",			LB::b_marker,		1, 1, true,  2, FBLTIN },	// D2 f
-	{ "move",			LB::b_move,			1, 2, false, 4, CBLTIN },	//			D4 c
-	{ "moveableSprite",	LB::b_moveableSprite,0, 0, false, 2, CBLTIN },	// D2, FIXME: the field in D4+
-	{ "pasteClipBoardInto",LB::b_pasteClipBoardInto,1,1,false,4,CBLTIN },//		D4 c
-	{ "puppetPalette",	LB::b_puppetPalette, -1,0, false, 2, CBLTIN },	// D2 c
-	{ "puppetSound",	LB::b_puppetSound,	-1,0, false, 2, CBLTIN },	// D2 c
-	{ "puppetSprite",	LB::b_puppetSprite,	-1,0, false, 2, CBLTIN },	// D2 c
-	{ "puppetTempo",	LB::b_puppetTempo,	1, 1, false, 2, CBLTIN },	// D2 c
-	{ "puppetTransition",LB::b_puppetTransition,-1,0,false,2, CBLTIN },// D2 c
-	{ "ramNeeded",		LB::b_ramNeeded,	2, 2, true,  3, FBLTIN },	//		D3.1 f
-	{ "rollOver",		LB::b_rollOver,		1, 1, true,  2, FBLTIN },	// D2 f
-	{ "spriteBox",		LB::b_spriteBox,	-1,0, false, 2, CBLTIN },	// D2 c
-	{ "unLoad",			LB::b_unLoad,		0, 2, false, 3, CBLTIN },	//		D3.1 c
-	{ "unLoadCast",		LB::b_unLoadCast,	0, 2, false, 3, CBLTIN },	//		D3.1 c
-	{ "updateStage",	LB::b_updateStage,	0, 0, false, 2, CBLTIN },	// D2 c
-	{ "zoomBox",		LB::b_zoomBox,		-1,0, false, 2, CBLTIN },	// D2 c
+	{ "importFileInto",	LB::b_importFileInto,2, 2, false, 400, CBLTIN }, //			D4 c
+	{ "installMenu",	LB::b_installMenu,	1, 1, false, 200, CBLTIN },	// D2 c
+	{ "label",			LB::b_label,		1, 1, true,  200, FBLTIN },	// D2 f
+	{ "marker",			LB::b_marker,		1, 1, true,  200, FBLTIN },	// D2 f
+	{ "move",			LB::b_move,			1, 2, false, 400, CBLTIN },	//			D4 c
+	{ "moveableSprite",	LB::b_moveableSprite,0, 0, false, 200, CBLTIN },// D2, FIXME: the field in D4+
+	{ "pasteClipBoardInto",LB::b_pasteClipBoardInto,1,1,false,400,CBLTIN },//		D4 c
+	{ "puppetPalette",	LB::b_puppetPalette, -1,0, false, 200, CBLTIN },// D2 c
+	{ "puppetSound",	LB::b_puppetSound,	-1,0, false, 200, CBLTIN },	// D2 c
+	{ "puppetSprite",	LB::b_puppetSprite,	-1,0, false, 200, CBLTIN },	// D2 c
+	{ "puppetTempo",	LB::b_puppetTempo,	1, 1, false, 200, CBLTIN },	// D2 c
+	{ "puppetTransition",LB::b_puppetTransition,-1,0,false,200, CBLTIN },// D2 c
+	{ "ramNeeded",		LB::b_ramNeeded,	2, 2, true,  300, FBLTIN },	//		D3.1 f
+	{ "rollOver",		LB::b_rollOver,		1, 1, true,  299, FBLTIN },	// D2 f
+	{ "spriteBox",		LB::b_spriteBox,	-1,0, false, 200, CBLTIN },	// D2 c
+	{ "unLoad",			LB::b_unLoad,		0, 2, false, 300, CBLTIN },	//		D3.1 c
+	{ "unLoadCast",		LB::b_unLoadCast,	0, 2, false, 300, CBLTIN },	//		D3.1 c
+	{ "updateStage",	LB::b_updateStage,	0, 0, false, 200, CBLTIN },	// D2 c
+	{ "zoomBox",		LB::b_zoomBox,		-1,0, false, 200, CBLTIN },	// D2 c
 	// Point
-	{ "point",			LB::b_point,		2, 2, true,  4, FBLTIN },	//			D4 f
-	{ "inside",			LB::b_inside,		2, 2, true,  4, FBLTIN },	//			D4 f
-	{ "intersect",		LB::b_intersect,	2, 2, false, 4, FBLTIN },	//			D4 f
-	{ "map",			LB::b_map,			3, 3, true,  4, FBLTIN },	//			D4 f
-	{ "rect",			LB::b_rect,			4, 4, true,  4, FBLTIN },	//			D4 f
-	{ "union",			LB::b_union,		2, 2, true,  4, FBLTIN },	//			D4 f
+	{ "point",			LB::b_point,		2, 2, true,  400, FBLTIN },	//			D4 f
+	{ "inside",			LB::b_inside,		2, 2, true,  400, FBLTIN },	//			D4 f
+	{ "intersect",		LB::b_intersect,	2, 2, false, 400, FBLTIN },	//			D4 f
+	{ "map",			LB::b_map,			3, 3, true,  400, FBLTIN },	//			D4 f
+	{ "rect",			LB::b_rect,			4, 4, true,  400, FBLTIN },	//			D4 f
+	{ "union",			LB::b_union,		2, 2, true,  400, FBLTIN },	//			D4 f
 	// Sound
-	{ "beep",	 		LB::b_beep,			0, 1, false, 2, CBLTIN },	// D2
-	{ "mci",	 		LB::b_mci,			1, 1, false, 3, CBLTIN },	//		D3.1 c
-	{ "mciwait",		LB::b_mciwait,		1, 1, false, 4, CBLTIN },	//			D4 c
-	{ "sound",			LB::b_sound,		2, 3, false, 3, CBLTIN },	//		D3 c
-	{ "soundBusy",		LB::b_soundBusy,	1, 1, true,  3, FBLTIN },	//		D3 f
+	{ "beep",	 		LB::b_beep,			0, 1, false, 200, CBLTIN },	// D2
+	{ "mci",	 		LB::b_mci,			1, 1, false, 300, CBLTIN },	//		D3.1 c
+	{ "mciwait",		LB::b_mciwait,		1, 1, false, 400, CBLTIN },	//			D4 c
+	{ "sound",			LB::b_sound,		2, 3, false, 300, CBLTIN },	//		D3 c
+	{ "soundBusy",		LB::b_soundBusy,	1, 1, true,  300, FBLTIN },	//		D3 f
 	// Constants
-	{ "backspace",		LB::b_backspace,	0, 0, false, 2, KBLTIN },	// D2 konstant
-	{ "empty",			LB::b_empty,		0, 0, false, 2, KBLTIN },	// D2 k
-	{ "enter",			LB::b_enter,		0, 0, false, 2, KBLTIN },	// D2 k
-	{ "false",			LB::b_false,		0, 0, false, 2, KBLTIN },	// D2 k
-	{ "quote",			LB::b_quote,		0, 0, false, 2, KBLTIN },	// D2 k
-	{ "return",			LB::b_returnconst,	0, 0, false, 2, KBLTIN },	// D2 k
-	{ "tab",			LB::b_tab,			0, 0, false, 2, KBLTIN },	// D2 k
-	{ "true",			LB::b_true,			0, 0, false, 2, KBLTIN },	// D2 k
-	{ "version",		LB::b_version,		0, 0, false, 3, KBLTIN },	//		D3 k
+	{ "backspace",		LB::b_backspace,	0, 0, false, 200, KBLTIN },	// D2 konstant
+	{ "empty",			LB::b_empty,		0, 0, false, 200, KBLTIN },	// D2 k
+	{ "enter",			LB::b_enter,		0, 0, false, 200, KBLTIN },	// D2 k
+	{ "false",			LB::b_false,		0, 0, false, 200, KBLTIN },	// D2 k
+	{ "quote",			LB::b_quote,		0, 0, false, 200, KBLTIN },	// D2 k
+	{ "return",			LB::b_returnconst,	0, 0, false, 200, KBLTIN },	// D2 k
+	{ "tab",			LB::b_tab,			0, 0, false, 200, KBLTIN },	// D2 k
+	{ "true",			LB::b_true,			0, 0, false, 200, KBLTIN },	// D2 k
+	{ "version",		LB::b_version,		0, 0, false, 300, KBLTIN },	//		D3 k
 	// References
-	{ "cast",			LB::b_cast,			1, 1, false, 4, FBLTIN },	//			D4 f
-	{ "field",			LB::b_field,		1, 1, false, 3, FBLTIN },	//		D3 f
-	{ "script",			LB::b_script,		1, 1, false, 4, FBLTIN },	//			D4 f
-	{ "window",			LB::b_window,		1, 1, false, 4, FBLTIN },	//			D4 f
+	{ "cast",			LB::b_cast,			1, 1, false, 400, FBLTIN },	//			D4 f
+	{ "field",			LB::b_field,		1, 1, false, 300, FBLTIN },	//		D3 f
+	{ "script",			LB::b_script,		1, 1, false, 400, FBLTIN },	//			D4 f
+	{ "window",			LB::b_window,		1, 1, false, 400, FBLTIN },	//			D4 f
 	// Chunk operations
-	{ "numberOfChars",	LB::b_numberofchars,1, 1, false, 3, FBLTIN },	//			D3 f
-	{ "numberOfItems",	LB::b_numberofitems,1, 1, false, 3, FBLTIN },	//			D3 f
-	{ "numberOfLines",	LB::b_numberoflines,1, 1, false, 3, FBLTIN },	//			D3 f
-	{ "numberOfWords",	LB::b_numberofwords,1, 1, false, 3, FBLTIN },	//			D3 f
-	{ "lastCharOf",		LB::b_lastcharof,	1, 1, false, 4, FBLTIN },	//			D4 f
-	{ "lastItemOf",		LB::b_lastitemof,	1, 1, false, 4, FBLTIN },	//			D4 f
-	{ "lastLineOf",		LB::b_lastlineof,	1, 1, false, 4, FBLTIN },	//			D4 f
-	{ "lastWordOf",		LB::b_lastwordof,	1, 1, false, 4, FBLTIN },	//			D4 f
+	{ "numberOfChars",	LB::b_numberofchars,1, 1, false, 300, FBLTIN },	//			D3 f
+	{ "numberOfItems",	LB::b_numberofitems,1, 1, false, 300, FBLTIN },	//			D3 f
+	{ "numberOfLines",	LB::b_numberoflines,1, 1, false, 300, FBLTIN },	//			D3 f
+	{ "numberOfWords",	LB::b_numberofwords,1, 1, false, 300, FBLTIN },	//			D3 f
+	{ "lastCharOf",		LB::b_lastcharof,	1, 1, false, 400, FBLTIN },	//			D4 f
+	{ "lastItemOf",		LB::b_lastitemof,	1, 1, false, 400, FBLTIN },	//			D4 f
+	{ "lastLineOf",		LB::b_lastlineof,	1, 1, false, 400, FBLTIN },	//			D4 f
+	{ "lastWordOf",		LB::b_lastwordof,	1, 1, false, 400, FBLTIN },	//			D4 f
 
 	// ScummVM Asserts: Used for testing ScummVM's Lingo implementation
-	{ "scummvmAssert",	LB::b_scummvmassert,1, 2, true,  2, HBLTIN },
-	{ "scummvmAssertEqual",	LB::b_scummvmassertequal,2,3,true,2,HBLTIN },
+	{ "scummvmAssert",	LB::b_scummvmassert,1, 2, true,  200, HBLTIN },
+	{ "scummvmAssertEqual",	LB::b_scummvmassertequal,2,3,true,200,HBLTIN },
 
 
 	{ 0, 0, 0, 0, false, 0, VOIDSYM }
@@ -392,7 +392,7 @@ void LB::b_integer(int nargs) {
 	Datum d = g_lingo->pop();
 	Datum res;
 
-	if (g_director->getVersion() < 5) {	// Note that D4 behaves differently from asInt()
+	if (g_director->getVersion() < 500) {	// Note that D4 behaves differently from asInt()
 		res = (int)(d.u.f + 0.5);		// Yes, +0.5 even for negative numbers
 	} else {
 		res = (int)round(d.u.f);
@@ -452,7 +452,7 @@ void LB::b_chars(int nargs) {
 	Datum s = g_lingo->pop();
 	TYPECHECK2(s, STRING, FIELDREF);
 
-	if (g_director->getVersion() < 4 && (d2.type == FLOAT || d3.type == FLOAT)) {
+	if (g_director->getVersion() < 400 && (d2.type == FLOAT || d3.type == FLOAT)) {
 		warning("LB::b_chars: Called with a float in Director 2 and 3 mode. chars' can't handle floats");
 		g_lingo->push(Datum(0));
 		return;
@@ -1582,7 +1582,7 @@ void LB::b_editableText(int nargs) {
 		} else {
 			warning("b_editableText: sprite index out of bounds");
 		}
-	} else if (nargs == 0 && g_director->getVersion() < 4) {
+	} else if (nargs == 0 && g_director->getVersion() < 400) {
 		g_lingo->dropStack(nargs);
 
 		if (g_lingo->_currentChannelId == -1) {
@@ -1871,7 +1871,7 @@ void LB::b_puppetSprite(int nargs) {
 		} else {
 			warning("b_puppetSprite: sprite index out of bounds");
 		}
-	} else if (nargs == 0 && g_director->getVersion() < 4) {
+	} else if (nargs == 0 && g_director->getVersion() < 400) {
 		g_lingo->dropStack(nargs);
 
 		if (g_lingo->_currentChannelId == -1) {
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 13e3010606..6e6503b3ee 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -1025,7 +1025,7 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableSubReadStreamEndian &stream
 	for (uint16 i = 0; i < constsCount; i++) {
 		Datum constant;
 		uint32 constType = 0;
-		if (_vm->getVersion() >= 5) {
+		if (_vm->getVersion() >= 500) {
 			constType = stream.readUint32();
 		} else {
 			constType = (uint32)stream.readUint16();
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 3a1728fa66..da72b99759 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -448,7 +448,7 @@ void LC::c_varpush() {
 	}
 
 	// Looking for the cast member constants
-	if (g_director->getVersion() < 4 || g_director->getCurrentMovie()->_allowOutdatedLingo) {
+	if (g_director->getVersion() < 400 || g_director->getCurrentMovie()->_allowOutdatedLingo) {
 		int val = castNumToNum(name.c_str());
 
 		if (val != -1) {
@@ -702,7 +702,7 @@ Datum LC::divData(Datum &d1, Datum &d2) {
 
 	int alignedType = g_lingo->getAlignedType(d1, d2);
 
-	if (g_director->getVersion() < 4)	// pre-D4 is INT-only
+	if (g_director->getVersion() < 400)	// pre-D4 is INT-only
 		alignedType = INT;
 
 	Datum res;
diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index 3d7ed7e625..af1db189f5 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -87,7 +87,7 @@ void Lingo::initEventHandlerTypes() {
 }
 
 ScriptType Lingo::event2script(LEvent ev) {
-	if (_vm->getVersion() < 4) {
+	if (_vm->getVersion() < 400) {
 		switch (ev) {
 		//case kEventStartMovie: // We are precompiling it now
 		//	return kMovieScript;
@@ -241,7 +241,7 @@ void Movie::registerEvent(LEvent event, int targetId) {
 		break;
 	}
 
-	if (_vm->getVersion() <= 3) {
+	if (_vm->getVersion() < 400) {
 		// In D2-3, specific objects handle each event, with no passing
 		switch(event) {
 		case kEventMouseUp:
@@ -318,7 +318,7 @@ void Lingo::processEvents() {
 	Movie *movie = _vm->getCurrentMovie();
 	Score *sc = movie->getScore();
 
-	if (_vm->getVersion() >= 3 && sc->getCurrentFrame() > 0 && sc->_playState != kPlayStopped && movie->_eventQueue.empty())
+	if (_vm->getVersion() >= 300 && sc->getCurrentFrame() > 0 && sc->_playState != kPlayStopped && movie->_eventQueue.empty())
 		movie->registerEvent(kEventIdle);
 
 	while (!movie->_eventQueue.empty()) {
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index dc04ba4797..00ec28d7df 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -1481,7 +1481,7 @@ YY_RULE_SETUP
 			else
 				return THEENTITY;
 		} else {
-			if (g_director->getVersion() >= 4) {
+			if (g_director->getVersion() >= 400) {
 				Common::String key = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
 
 				yylval.objectprop.obj = new Common::String(ptr);
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 9783774fe6..97bb7015eb 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -307,7 +307,7 @@ the{spc}+[[:alpha:]]+{spc}+of{spc}+{identifier}	{
 			else
 				return THEENTITY;
 		} else {
-			if (g_director->getVersion() >= 4) {
+			if (g_director->getVersion() >= 400) {
 				Common::String key = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
 
 				yylval.objectprop.obj = new Common::String(ptr);
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 62c1a3d9af..4119e6bfb5 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -46,18 +46,18 @@ static struct PredefinedProto {
 	int version;
 } predefinedMethods[] = {
 	// all except window
-	{ "new",					LM::m_new,					-1, 0,	kAllObj, 				2 },	// D2
+	{ "new",					LM::m_new,					-1, 0,	kAllObj, 				200 },	// D2
 
 	// factory and XObject
-	{ "describe",				LM::m_describe,				 0, 0,	kXObj,					2 },	// D2
-	{ "dispose",				LM::m_dispose,				 0, 0,	kFactoryObj | kXObj,	2 },	// D2
-	{ "get",					LM::m_get,					 1, 1,	kFactoryObj,			2 },	// D2
-	{ "instanceRespondsTo",		LM::m_instanceRespondsTo,	 1, 1,	kXObj,					3 },		// D3
-	{ "messageList",			LM::m_messageList,			 0, 0,	kXObj,					3 },		// D3
-	{ "name",					LM::m_name,					 0, 0,	kXObj,					3 },		// D3
-	{ "perform",				LM::m_perform,				-1, 0,	kFactoryObj | kXObj, 	3 },		// D3
-	{ "put",					LM::m_put,					 2, 2,	kFactoryObj,			2 },	// D2
-	{ "respondsTo",				LM::m_respondsTo,			 1, 1,	kXObj,					2 },	// D2
+	{ "describe",				LM::m_describe,				 0, 0,	kXObj,					200 },	// D2
+	{ "dispose",				LM::m_dispose,				 0, 0,	kFactoryObj | kXObj,	200 },	// D2
+	{ "get",					LM::m_get,					 1, 1,	kFactoryObj,			200 },	// D2
+	{ "instanceRespondsTo",		LM::m_instanceRespondsTo,	 1, 1,	kXObj,					300 },		// D3
+	{ "messageList",			LM::m_messageList,			 0, 0,	kXObj,					300 },		// D3
+	{ "name",					LM::m_name,					 0, 0,	kXObj,					300 },		// D3
+	{ "perform",				LM::m_perform,				-1, 0,	kFactoryObj | kXObj, 	300 },		// D3
+	{ "put",					LM::m_put,					 2, 2,	kFactoryObj,			200 },	// D2
+	{ "respondsTo",				LM::m_respondsTo,			 1, 1,	kXObj,					200 },	// D2
 
 	// script object and Xtra
 	{ "birth",					LM::m_new,					-1, 0,	kScriptObj | kXtraObj, 	4 },			// D4
@@ -67,11 +67,11 @@ static struct PredefinedProto {
 
 static MethodProto windowMethods[] = {
 	// window / stage
-	{ "close",					LM::m_close,				 0, 0,	4 },			// D4
-	{ "forget",					LM::m_forget,				 0, 0,	4 },			// D4
-	{ "open",					LM::m_open,					 0, 0,	4 },			// D4
-	{ "moveToBack",				LM::m_moveToBack,			 0, 0,	4 },			// D4
-	{ "moveToFront",			LM::m_moveToFront,			 0, 0,	4 },			// D4
+	{ "close",					LM::m_close,				 0, 0,	400 },			// D4
+	{ "forget",					LM::m_forget,				 0, 0,	400 },			// D4
+	{ "open",					LM::m_open,					 0, 0,	400 },			// D4
+	{ "moveToBack",				LM::m_moveToBack,			 0, 0,	400 },			// D4
+	{ "moveToFront",			LM::m_moveToFront,			 0, 0,	400 },			// D4
 	{ 0, 0, 0, 0, 0 }
 };
 
@@ -98,10 +98,10 @@ static struct XLibProto {
 	int type;
 	int version;
 } xlibs[] = {
-	{ "FileIO",					FileIO::initialize,					kXObj | kFactoryObj,	2 },	// D2
-	{ "FlushXObj",				FlushXObj::initialize,				kXObj,					4 },	// D4
-	{ "PalXObj",				PalXObj:: initialize,				kXObj,					4 }, 	// D4
-	{ "winXObj",				RearWindowXObj::initialize,			kXObj,					4 },	// D4
+	{ "FileIO",					FileIO::initialize,					kXObj | kFactoryObj,	200 },	// D2
+	{ "FlushXObj",				FlushXObj::initialize,				kXObj,					400 },	// D4
+	{ "PalXObj",				PalXObj:: initialize,				kXObj,					400 }, 	// D4
+	{ "winXObj",				RearWindowXObj::initialize,			kXObj,					400 },	// D4
 	{ 0, 0, 0, 0 }
 
 };
diff --git a/engines/director/lingo/lingo-preprocessor.cpp b/engines/director/lingo/lingo-preprocessor.cpp
index 0bf75f83e8..1c1b9ba3ba 100644
--- a/engines/director/lingo/lingo-preprocessor.cpp
+++ b/engines/director/lingo/lingo-preprocessor.cpp
@@ -228,7 +228,7 @@ Common::String Lingo::codePreprocessor(const char *s, LingoArchive *archive, Scr
 		}
 		debugC(2, kDebugParse | kDebugPreprocess, "line: %d                         '%s'", iflevel, line.c_str());
 
-		if (!defFound && (type == kMovieScript || type == kCastScript) && (_vm->getVersion() <= 3 || _vm->getCurrentMovie()->_allowOutdatedLingo)) {
+		if (!defFound && (type == kMovieScript || type == kCastScript) && (_vm->getVersion() < 400 || _vm->getCurrentMovie()->_allowOutdatedLingo)) {
 			tok = nexttok(line.c_str());
 			if (tok.equals("macro") || tok.equals("factory") || tok.equals("on")) {
 				defFound = true;
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index fcd191761e..cf8adbc45e 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -43,238 +43,238 @@ namespace Director {
 class Sprite;
 
 TheEntity entities[] = {
-	{ kTheActorList,		"actorList",		false, 4 },	//			D4 property
-	{ kTheBeepOn,			"beepOn",			false, 2 },	// D2 p
-	{ kTheButtonStyle,		"buttonStyle",		false, 2 },	// D2 p
-	{ kTheCast,				"cast",				true,  2 },	// D2
-	{ kTheCastMembers,		"castmembers",		false, 3 },	//		 D3
-	{ kTheCenterStage,		"centerStage",		false, 2 },	// D2 p
-	{ kTheCheckBoxAccess,	"checkBoxAccess",	false, 2 },	// D2 p
-	{ kTheCheckBoxType,		"checkBoxType",		false, 2 },	// D2 p
-	{ kTheClickLoc,			"clickLoc",			false, 4 },	// 			D4 function
-	{ kTheClickOn,			"clickOn",			false, 2 },	// D2 f
-	{ kTheColorDepth,		"colorDepth",		false, 2 },	// D2 p
-	{ kTheColorQD,			"colorQD",			false, 2 },	// D2 f
-	{ kTheCommandDown,		"commandDown",		false, 2 },	// D2 f
-	{ kTheControlDown,		"controlDown",		false, 2 },	// D2 f
-	{ kTheDate,				"date",				false, 3 },	//		D3 f
-	{ kTheDoubleClick,		"doubleClick",		false, 2 },	// D2 f
-	{ kTheExitLock,			"exitLock",			false, 2 },	// D2 p
-	{ kTheField,			"field",			true,  3 },	//		D3
-	{ kTheFixStageSize,		"fixStageSize",		false, 2 },	// D2 p
-	{ kTheFloatPrecision,	"floatPrecision",	false, 3 },	//		D3 p
-	{ kTheFrame,			"frame",			false, 2 },	// D2 f
-	{ kTheFrameLabel,		"frameLabel",		false, 4 },	//			D4 p
-	{ kTheFrameScript,		"frameScript",		false, 4 },	//			D4 p
-	{ kTheFramePalette,		"framePalette",		false, 4 },	//			D4 p
-	{ kTheFrameTempo,		"frameTempo",		false, 4 },	//			D4 f
-	{ kTheFreeBlock,		"freeBlock",		false, 2 },	// D2 f
-	{ kTheFreeBytes,		"freeBytes",		false, 2 },	// D2 f
-	{ kTheFullColorPermit,	"fullColorPermit",	false, 2 },	// D2 p
-	{ kTheImageDirect,		"imageDirect",		false, 2 },	// D2 p
-	{ kTheItemDelimiter,	"itemDelimiter",	false, 4 },	//			D4 p
-	{ kTheKey,				"key",				false, 2 },	// D2 f
-	{ kTheKeyCode,			"keyCode",			false, 2 },	// D2 f
-	{ kTheKeyDownScript,	"keyDownScript",	false, 2 },	// D2 p
-	{ kTheKeyUpScript,		"keyUpScript",		false, 4 },	//			D4 p
-	{ kTheLabelList,		"labelList",		false, 3 },	//		D3 f
-	{ kTheLastClick,		"lastClick",		false, 2 },	// D2 f
-	{ kTheLastEvent,		"lastEvent",		false, 2 },	// D2 f
-	{ kTheLastFrame,		"lastFrame",		false, 4 },	//			D4 p
-	{ kTheLastKey,			"lastKey",			false, 2 },	// D2 f
-	{ kTheLastRoll,			"lastRoll",			false, 2 },	// D2 f
-	{ kTheMachineType,		"machineType",		false, 2 },	// D2 f
-	{ kTheMaxInteger,		"maxInteger",		false, 3 },	//		D3.1 f
-	{ kTheMemorySize,		"memorySize",		false, 2 },	// D2 f
-	{ kTheMenu,				"menu",				true,  3 },	//		D3 p
-	{ kTheMenuItem,			"menuitem",			true,  3 },	//		D3 p
-	{ kTheMenuItems,		"menuitems",		false, 3 },	//		D3 f
-	{ kTheMouseCast,		"mouseCast",		false, 3 },	//		D3 f
-	{ kTheMouseChar,		"mouseChar",		false, 3 },	//		D3 f
-	{ kTheMouseDown,		"mouseDown",		false, 2 },	// D2 f
-	{ kTheMouseDownScript,  "mouseDownScript",	false, 2 },	// D2 p
-	{ kTheMouseH,			"mouseH",			false, 2 },	// D2 f
-	{ kTheMouseItem,		"mouseItem",		false, 3 },	//		D3 f
-	{ kTheMouseLine,		"mouseLine",		false, 3 },	//		D3 f
-	{ kTheMouseUp,			"mouseUp",			false, 2 },	// D2 f
-	{ kTheMouseUpScript,  	"mouseUpScript",	false, 2 },	// D2 p
-	{ kTheMouseV,			"mouseV",			false, 2 },	// D2 f
-	{ kTheMouseWord,		"mouseWord",		false, 3 },	//		D3 f
-	{ kTheMovie,			"movie",			false, 2 },	// D2 f
-	{ kTheMovieFileFreeSize,"movieFileFreeSize",false, 4 },	//			D4 f
-	{ kTheMovieFileSize,	"movieFileSize",	false, 4 },	//			D4 f
-	{ kTheMovieName,		"movieName",		false, 4 },	//			D4 f
-	{ kTheMoviePath,		"moviePath",		false, 4 },	//			D4 f
-	{ kTheMultiSound,		"multiSound",		false, 3 },	//		D3.1 f
-	{ kTheOptionDown,		"optionDown",		false, 2 },	// D2 f
-	{ kTheParamCount,		"paramCount",		false, 4 },	//			D4 f
-	{ kThePathName,			"pathName",			false, 2 },	// D2 f
-	{ kThePauseState,		"pauseState",		false, 2 },	// D2 f
-	{ kThePerFrameHook,		"perFrameHook",		false, 2 },	// D2 p
-	{ kThePreloadEventAbort,"preloadEventAbort",false, 4 },	//			D4 p
-	{ kThePreLoadRAM,		"preLoadRAM",		false, 4 },	//			D4 p
-	{ kThePi,				"pi",				false, 4 },	//			D4 f
-	{ kTheQuickTimePresent,	"quickTimePresent",	false, 3 },	//		D3.1 f
-	{ kTheRandomSeed,		"randomSeed",		false, 4 },	//			D4 p
-	{ kTheResult,			"result",			false, 2 },	// D2 f
-	{ kTheRightMouseDown,	"rightMouseDown",	false, 5 },	//					D5 f
-	{ kTheRightMouseUp,		"rightMouseUp",		false, 5 },	//					D5 f
-	{ kTheRomanLingo,		"romanLingo",		false, 3 },	//		D3.1 p
-	{ kTheScummvmVersion,	"scummvmVersion",	false, 2 }, // 					ScummVM only
-	{ kTheSearchCurrentFolder,"searchCurrentFolder",false,4 },//		D4 f
-	{ kTheSearchPath,		"searchPath",		false, 4 },	//			D4 f
-	{ kTheSelection,		"selection",		false, 2 },	// D2 f
-	{ kTheSelEnd,			"selEnd",			false, 2 },	// D2 p
-	{ kTheSelStart,			"selStart",			false, 2 },	// D2 p
-	{ kTheShiftDown,		"shiftDown",		false, 2 },	// D2 f
-	{ kTheSoundEnabled,		"soundEnabled",		false, 2 },	// D2 p
-	{ kTheSoundEntity,		"sound",			true,  3 },	// 		D3 p
-	{ kTheSoundLevel,		"soundLevel",		false, 2 },	// D2 p
-	{ kTheSprite,			"sprite",			true,  2 },	// 			D4 p
-	{ kTheStage,			"stage",			false, 4 },	//			D4 p
-	{ kTheStageBottom,		"stageBottom",		false, 2 },	// D2 f
-	{ kTheStageColor,		"stageColor",		false, 3 },	//		D3 p
-	{ kTheStageLeft,		"stageLeft",		false, 2 },	// D2 f
-	{ kTheStageRight,		"stageRight",		false, 2 },	// D2 f
-	{ kTheStageTop,			"stageTop",			false, 2 },	// D2 f
-	{ kTheStillDown,		"stillDown",		false, 2 },	// D2 f
-	{ kTheSwitchColorDepth,	"switchColorDepth",	false, 2 },	// D2 p
-	{ kTheTicks,			"ticks",			false, 2 },	// D2 f
-	{ kTheTime,				"time",				false, 3 },	// 		D3 f
-	{ kTheTimeoutKeyDown,	"timeoutKeyDown",	false, 2 },	// D2 p
-	{ kTheTimeoutLapsed,	"timeoutLapsed",	false, 2 },	// D2 p
-	{ kTheTimeoutLength,	"timeoutLength",	false, 2 },	// D2 p
-	{ kTheTimeoutMouse,		"timeoutMouse",		false, 2 },	// D2 p
-	{ kTheTimeoutPlay,		"timeoutPlay",		false, 2 },	// D2 p
-	{ kTheTimeoutScript,	"timeoutScript",	false, 2 },	// D2 p
-	{ kTheTimer,			"timer",			false, 2 },	// D2 p
-	{ kTheTrace,			"trace",			false, 4 },	//			D4 p
-	{ kTheTraceLoad,		"traceLoad",		false, 4 },	//			D4 p
-	{ kTheTraceLogFile,		"traceLogFile",		false, 4 },	//			D4 p
-	{ kTheUpdateMovieEnabled,"updateMovieEnabled",false,4 },//			D4 p
-	{ kTheWindow,			"window",			true,  4 },	//			D4
-	{ kTheWindowList,		"windowList",		false, 4 },	//			D4 p
+	{ kTheActorList,		"actorList",		false, 400 },	//			D4 property
+	{ kTheBeepOn,			"beepOn",			false, 200 },	// D2 p
+	{ kTheButtonStyle,		"buttonStyle",		false, 200 },	// D2 p
+	{ kTheCast,				"cast",				true,  200 },	// D2
+	{ kTheCastMembers,		"castmembers",		false, 300 },	//		 D3
+	{ kTheCenterStage,		"centerStage",		false, 200 },	// D2 p
+	{ kTheCheckBoxAccess,	"checkBoxAccess",	false, 200 },	// D2 p
+	{ kTheCheckBoxType,		"checkBoxType",		false, 200 },	// D2 p
+	{ kTheClickLoc,			"clickLoc",			false, 400 },	// 			D4 function
+	{ kTheClickOn,			"clickOn",			false, 200 },	// D2 f
+	{ kTheColorDepth,		"colorDepth",		false, 200 },	// D2 p
+	{ kTheColorQD,			"colorQD",			false, 200 },	// D2 f
+	{ kTheCommandDown,		"commandDown",		false, 200 },	// D2 f
+	{ kTheControlDown,		"controlDown",		false, 200 },	// D2 f
+	{ kTheDate,				"date",				false, 300 },	//		D3 f
+	{ kTheDoubleClick,		"doubleClick",		false, 200 },	// D2 f
+	{ kTheExitLock,			"exitLock",			false, 200 },	// D2 p
+	{ kTheField,			"field",			true,  300 },	//		D3
+	{ kTheFixStageSize,		"fixStageSize",		false, 200 },	// D2 p
+	{ kTheFloatPrecision,	"floatPrecision",	false, 300 },	//		D3 p
+	{ kTheFrame,			"frame",			false, 200 },	// D2 f
+	{ kTheFrameLabel,		"frameLabel",		false, 400 },	//			D4 p
+	{ kTheFrameScript,		"frameScript",		false, 400 },	//			D4 p
+	{ kTheFramePalette,		"framePalette",		false, 400 },	//			D4 p
+	{ kTheFrameTempo,		"frameTempo",		false, 400 },	//			D4 f
+	{ kTheFreeBlock,		"freeBlock",		false, 200 },	// D2 f
+	{ kTheFreeBytes,		"freeBytes",		false, 200 },	// D2 f
+	{ kTheFullColorPermit,	"fullColorPermit",	false, 200 },	// D2 p
+	{ kTheImageDirect,		"imageDirect",		false, 200 },	// D2 p
+	{ kTheItemDelimiter,	"itemDelimiter",	false, 400 },	//			D4 p
+	{ kTheKey,				"key",				false, 200 },	// D2 f
+	{ kTheKeyCode,			"keyCode",			false, 200 },	// D2 f
+	{ kTheKeyDownScript,	"keyDownScript",	false, 200 },	// D2 p
+	{ kTheKeyUpScript,		"keyUpScript",		false, 400 },	//			D4 p
+	{ kTheLabelList,		"labelList",		false, 300 },	//		D3 f
+	{ kTheLastClick,		"lastClick",		false, 200 },	// D2 f
+	{ kTheLastEvent,		"lastEvent",		false, 200 },	// D2 f
+	{ kTheLastFrame,		"lastFrame",		false, 400 },	//			D4 p
+	{ kTheLastKey,			"lastKey",			false, 200 },	// D2 f
+	{ kTheLastRoll,			"lastRoll",			false, 200 },	// D2 f
+	{ kTheMachineType,		"machineType",		false, 200 },	// D2 f
+	{ kTheMaxInteger,		"maxInteger",		false, 300 },	//		D3.1 f
+	{ kTheMemorySize,		"memorySize",		false, 200 },	// D2 f
+	{ kTheMenu,				"menu",				true,  300 },	//		D3 p
+	{ kTheMenuItem,			"menuitem",			true,  300 },	//		D3 p
+	{ kTheMenuItems,		"menuitems",		false, 300 },	//		D3 f
+	{ kTheMouseCast,		"mouseCast",		false, 300 },	//		D3 f
+	{ kTheMouseChar,		"mouseChar",		false, 300 },	//		D3 f
+	{ kTheMouseDown,		"mouseDown",		false, 200 },	// D2 f
+	{ kTheMouseDownScript,  "mouseDownScript",	false, 200 },	// D2 p
+	{ kTheMouseH,			"mouseH",			false, 200 },	// D2 f
+	{ kTheMouseItem,		"mouseItem",		false, 300 },	//		D3 f
+	{ kTheMouseLine,		"mouseLine",		false, 300 },	//		D3 f
+	{ kTheMouseUp,			"mouseUp",			false, 200 },	// D2 f
+	{ kTheMouseUpScript,  	"mouseUpScript",	false, 200 },	// D2 p
+	{ kTheMouseV,			"mouseV",			false, 200 },	// D2 f
+	{ kTheMouseWord,		"mouseWord",		false, 300 },	//		D3 f
+	{ kTheMovie,			"movie",			false, 200 },	// D2 f
+	{ kTheMovieFileFreeSize,"movieFileFreeSize",false, 400 },	//			D4 f
+	{ kTheMovieFileSize,	"movieFileSize",	false, 400 },	//			D4 f
+	{ kTheMovieName,		"movieName",		false, 400 },	//			D4 f
+	{ kTheMoviePath,		"moviePath",		false, 400 },	//			D4 f
+	{ kTheMultiSound,		"multiSound",		false, 300 },	//		D3.1 f
+	{ kTheOptionDown,		"optionDown",		false, 200 },	// D2 f
+	{ kTheParamCount,		"paramCount",		false, 400 },	//			D4 f
+	{ kThePathName,			"pathName",			false, 200 },	// D2 f
+	{ kThePauseState,		"pauseState",		false, 200 },	// D2 f
+	{ kThePerFrameHook,		"perFrameHook",		false, 200 },	// D2 p
+	{ kThePreloadEventAbort,"preloadEventAbort",false, 400 },	//			D4 p
+	{ kThePreLoadRAM,		"preLoadRAM",		false, 400 },	//			D4 p
+	{ kThePi,				"pi",				false, 400 },	//			D4 f
+	{ kTheQuickTimePresent,	"quickTimePresent",	false, 300 },	//		D3.1 f
+	{ kTheRandomSeed,		"randomSeed",		false, 400 },	//			D4 p
+	{ kTheResult,			"result",			false, 200 },	// D2 f
+	{ kTheRightMouseDown,	"rightMouseDown",	false, 500 },	//					D5 f
+	{ kTheRightMouseUp,		"rightMouseUp",		false, 500 },	//					D5 f
+	{ kTheRomanLingo,		"romanLingo",		false, 300 },	//		D3.1 p
+	{ kTheScummvmVersion,	"scummvmVersion",	false, 200 }, // 					ScummVM only
+	{ kTheSearchCurrentFolder,"searchCurrentFolder",false,400 },//			D4 f
+	{ kTheSearchPath,		"searchPath",		false, 400 },	//			D4 f
+	{ kTheSelection,		"selection",		false, 200 },	// D2 f
+	{ kTheSelEnd,			"selEnd",			false, 200 },	// D2 p
+	{ kTheSelStart,			"selStart",			false, 200 },	// D2 p
+	{ kTheShiftDown,		"shiftDown",		false, 200 },	// D2 f
+	{ kTheSoundEnabled,		"soundEnabled",		false, 200 },	// D2 p
+	{ kTheSoundEntity,		"sound",			true,  300 },	// 		D3 p
+	{ kTheSoundLevel,		"soundLevel",		false, 200 },	// D2 p
+	{ kTheSprite,			"sprite",			true,  200 },	// 			D4 p
+	{ kTheStage,			"stage",			false, 400 },	//			D4 p
+	{ kTheStageBottom,		"stageBottom",		false, 200 },	// D2 f
+	{ kTheStageColor,		"stageColor",		false, 300 },	//		D3 p
+	{ kTheStageLeft,		"stageLeft",		false, 200 },	// D2 f
+	{ kTheStageRight,		"stageRight",		false, 200 },	// D2 f
+	{ kTheStageTop,			"stageTop",			false, 200 },	// D2 f
+	{ kTheStillDown,		"stillDown",		false, 200 },	// D2 f
+	{ kTheSwitchColorDepth,	"switchColorDepth",	false, 200 },	// D2 p
+	{ kTheTicks,			"ticks",			false, 200 },	// D2 f
+	{ kTheTime,				"time",				false, 300 },	// 		D3 f
+	{ kTheTimeoutKeyDown,	"timeoutKeyDown",	false, 200 },	// D2 p
+	{ kTheTimeoutLapsed,	"timeoutLapsed",	false, 200 },	// D2 p
+	{ kTheTimeoutLength,	"timeoutLength",	false, 200 },	// D2 p
+	{ kTheTimeoutMouse,		"timeoutMouse",		false, 200 },	// D2 p
+	{ kTheTimeoutPlay,		"timeoutPlay",		false, 200 },	// D2 p
+	{ kTheTimeoutScript,	"timeoutScript",	false, 200 },	// D2 p
+	{ kTheTimer,			"timer",			false, 200 },	// D2 p
+	{ kTheTrace,			"trace",			false, 400 },	//			D4 p
+	{ kTheTraceLoad,		"traceLoad",		false, 400 },	//			D4 p
+	{ kTheTraceLogFile,		"traceLogFile",		false, 400 },	//			D4 p
+	{ kTheUpdateMovieEnabled,"updateMovieEnabled",false,400 },//			D4 p
+	{ kTheWindow,			"window",			true,  400 },	//			D4
+	{ kTheWindowList,		"windowList",		false, 400 },	//			D4 p
 	{ kTheNOEntity, NULL, false, 0 }
 };
 
 TheEntityField fields[] = {
-	{ kTheSprite,	"backColor",	kTheBackColor,	2 },// D2 p
-	{ kTheSprite,	"blend",		kTheBlend,		4 },//				D4 p
-	{ kTheSprite,	"bottom",		kTheBottom,		2 },// D2 p
-	{ kTheSprite,	"castNum",		kTheCastNum,	2 },// D2 p
-	{ kTheSprite,	"constraint",	kTheConstraint, 2 },// D2 p
-	{ kTheSprite,	"cursor",		kTheCursor,		2 },// D2 p
-	{ kTheSprite,	"editableText", kTheEditableText,4 },//				D4 p
-	{ kTheSprite,	"foreColor",	kTheForeColor,	2 },// D2 p
-	{ kTheSprite,	"height",		kTheHeight,		2 },// D2 p
-	{ kTheSprite,	"immediate",	kTheImmediate,	2 },// D2 p
-	{ kTheSprite,	"ink",			kTheInk,		2 },// D2 p
-	{ kTheSprite,	"left",			kTheLeft,		2 },// D2 p
-	{ kTheSprite,	"lineSize",		kTheLineSize,	2 },// D2 p
-	{ kTheSprite,	"loc",			kTheLoc,		4 },//				D4 p ???
-	{ kTheSprite,	"locH",			kTheLocH,		2 },// D2 p
-	{ kTheSprite,	"locV",			kTheLocV,		2 },// D2 p
-	{ kTheSprite,	"moveableSprite",kTheMoveableSprite,4 },//			D4 p
-	{ kTheSprite,	"pattern",		kThePattern,	2 },// D2 p
-	{ kTheSprite,	"puppet",		kThePuppet,		2 },// D2 p
-	{ kTheSprite,	"rect",			kTheRect,		4 },//				D4 p ???
-	{ kTheSprite,	"right",		kTheRight,		2 },// D2 p
-	{ kTheSprite,	"scoreColor",	kTheScoreColor,	4 },//				D4 p
-	{ kTheSprite,	"scriptNum",	kTheScriptNum,	4 },//				D4 p
-	{ kTheSprite,	"stretch",		kTheStretch,		2 },// D2 p
-	{ kTheSprite,	"top",			kTheTop,		2 },// D2 p
-	{ kTheSprite,	"trails",		kTheTrails,		3 },//		D3.1 p
-	{ kTheSprite,	"type",			kTheType,		2 },// D2 p
-	{ kTheSprite,	"visibility",	kTheVisibility,	3 },//		D3.1 p
-	{ kTheSprite,	"visible",		kTheVisible,	4 },//				D4 p
-	{ kTheSprite,	"width",		kTheWidth,		2 },// D2 p
+	{ kTheSprite,	"backColor",	kTheBackColor,	200 },// D2 p
+	{ kTheSprite,	"blend",		kTheBlend,		400 },//				D4 p
+	{ kTheSprite,	"bottom",		kTheBottom,		200 },// D2 p
+	{ kTheSprite,	"castNum",		kTheCastNum,	200 },// D2 p
+	{ kTheSprite,	"constraint",	kTheConstraint, 200 },// D2 p
+	{ kTheSprite,	"cursor",		kTheCursor,		200 },// D2 p
+	{ kTheSprite,	"editableText", kTheEditableText,400 },//				D4 p
+	{ kTheSprite,	"foreColor",	kTheForeColor,	200 },// D2 p
+	{ kTheSprite,	"height",		kTheHeight,		200 },// D2 p
+	{ kTheSprite,	"immediate",	kTheImmediate,	200 },// D2 p
+	{ kTheSprite,	"ink",			kTheInk,		200 },// D2 p
+	{ kTheSprite,	"left",			kTheLeft,		200 },// D2 p
+	{ kTheSprite,	"lineSize",		kTheLineSize,	200 },// D2 p
+	{ kTheSprite,	"loc",			kTheLoc,		400 },//				D4 p ???
+	{ kTheSprite,	"locH",			kTheLocH,		200 },// D2 p
+	{ kTheSprite,	"locV",			kTheLocV,		200 },// D2 p
+	{ kTheSprite,	"moveableSprite",kTheMoveableSprite,400 },//			D4 p
+	{ kTheSprite,	"pattern",		kThePattern,	200 },// D2 p
+	{ kTheSprite,	"puppet",		kThePuppet,		200 },// D2 p
+	{ kTheSprite,	"rect",			kTheRect,		400 },//				D4 p ???
+	{ kTheSprite,	"right",		kTheRight,		200 },// D2 p
+	{ kTheSprite,	"scoreColor",	kTheScoreColor,	400 },//				D4 p
+	{ kTheSprite,	"scriptNum",	kTheScriptNum,	400 },//				D4 p
+	{ kTheSprite,	"stretch",		kTheStretch,		200 },// D2 p
+	{ kTheSprite,	"top",			kTheTop,		200 },// D2 p
+	{ kTheSprite,	"trails",		kTheTrails,		300 },//		D3.1 p
+	{ kTheSprite,	"type",			kTheType,		200 },// D2 p
+	{ kTheSprite,	"visibility",	kTheVisibility,	300 },//		D3.1 p
+	{ kTheSprite,	"visible",		kTheVisible,	400 },//				D4 p
+	{ kTheSprite,	"width",		kTheWidth,		200 },// D2 p
 
 	// Common cast fields
-	{ kTheCast,		"castType",		kTheCastType,	4 },//				D4 p
-	{ kTheCast,		"filename",		kTheFileName,	4 },//				D4 p
-	{ kTheCast,		"height",		kTheHeight,		4 },//				D4 p
-	{ kTheCast,		"loaded",		kTheLoaded,		4 },//				D4 p
-	{ kTheCast,		"modified",		kTheModified,	4 },//				D4 p
-	{ kTheCast,		"name",			kTheName,		3 },//		D3 p
-	{ kTheCast,		"number",		kTheNumber,		3 },//		D3 p
-	{ kTheCast,		"rect",			kTheRect,		4 },//				D4 p
-	{ kTheCast,		"purgePriority",kThePurgePriority,4 },//			D4 p // 0 Never purge, 1 Purge Last, 2 Purge next, 2 Purge normal
-	{ kTheCast,		"scriptText",	kTheScriptText,	4 },//				D4 p
-	{ kTheCast,		"width",		kTheWidth,		4 },//				D4 p
+	{ kTheCast,		"castType",		kTheCastType,	400 },//				D4 p
+	{ kTheCast,		"filename",		kTheFileName,	400 },//				D4 p
+	{ kTheCast,		"height",		kTheHeight,		400 },//				D4 p
+	{ kTheCast,		"loaded",		kTheLoaded,		400 },//				D4 p
+	{ kTheCast,		"modified",		kTheModified,	400 },//				D4 p
+	{ kTheCast,		"name",			kTheName,		300 },//		D3 p
+	{ kTheCast,		"number",		kTheNumber,		300 },//		D3 p
+	{ kTheCast,		"rect",			kTheRect,		400 },//				D4 p
+	{ kTheCast,		"purgePriority",kThePurgePriority,400 },//				D4 p // 0 Never purge, 1 Purge Last, 2 Purge next, 2 Purge normal
+	{ kTheCast,		"scriptText",	kTheScriptText,	400 },//				D4 p
+	{ kTheCast,		"width",		kTheWidth,		400 },//				D4 p
 
 	// Shape fields
-	{ kTheCast,		"backColor",	kTheBackColor,	4 },//				D4 p
-	{ kTheCast,		"foreColor",	kTheForeColor,	4 },//				D4 p
+	{ kTheCast,		"backColor",	kTheBackColor,	400 },//				D4 p
+	{ kTheCast,		"foreColor",	kTheForeColor,	400 },//				D4 p
 
 	// Digital video fields
-	{ kTheCast,		"center",		kTheCenter,		4 },//				D4 p
-	{ kTheCast,		"controller",	kTheController,	3 },//			D3.1 p
-	{ kTheCast,		"crop",			kTheCrop,		4 },//				D4 p
-	{ kTheCast,		"directToStage",kTheDirectToStage,3 },//		D3.1 p
-	{ kTheCast,		"duration",		kTheDuration,	3 },//			D3.1 p
-	{ kTheCast,		"frameRate",	kTheFrameRate,	4 },//				D4 p
-	{ kTheCast,		"loop",			kTheLoop,		3 },//			D3.1 p
-	{ kTheSprite,	"movieRate",	kTheMovieRate,	3 },//			D3.1 P
-	{ kTheSprite,	"movieTime",	kTheMovieTime,	3 },//			D3.1 P
-	{ kTheCast,		"pausedAtStart",kThePausedAtStart,4 },//			D4 p
-	{ kTheCast,		"preLoad",		kThePreLoad,	3 },//			D3.1 p
-	{ kTheCast,		"sound",		kTheSound,		3 },//			D3.1 p // 0-1 off-on
-	{ kTheSprite,	"startTime",	kTheStartTime,	3 },//			D3.1 p
-	{ kTheSprite,	"stopTime",		kTheStopTime,	3 },//			D3.1 p
-	{ kTheCast,		"video",		kTheVideo,		4 },//				D4 p
-	{ kTheSprite,	"volume",		kTheVolume,		3 },//		D3.1 p
+	{ kTheCast,		"center",		kTheCenter,		400 },//				D4 p
+	{ kTheCast,		"controller",	kTheController,	300 },//		D3.1 p
+	{ kTheCast,		"crop",			kTheCrop,		400 },//				D4 p
+	{ kTheCast,		"directToStage",kTheDirectToStage,300 },//		D3.1 p
+	{ kTheCast,		"duration",		kTheDuration,	300 },//		D3.1 p
+	{ kTheCast,		"frameRate",	kTheFrameRate,	400 },//				D4 p
+	{ kTheCast,		"loop",			kTheLoop,		300 },//		D3.1 p
+	{ kTheSprite,	"movieRate",	kTheMovieRate,	300 },//		D3.1 P
+	{ kTheSprite,	"movieTime",	kTheMovieTime,	300 },//		D3.1 P
+	{ kTheCast,		"pausedAtStart",kThePausedAtStart,400 },//				D4 p
+	{ kTheCast,		"preLoad",		kThePreLoad,	300 },//		D3.1 p
+	{ kTheCast,		"sound",		kTheSound,		300 },//		D3.1 p // 0-1 off-on
+	{ kTheSprite,	"startTime",	kTheStartTime,	300 },//		D3.1 p
+	{ kTheSprite,	"stopTime",		kTheStopTime,	300 },//		D3.1 p
+	{ kTheCast,		"video",		kTheVideo,		400 },//				D4 p
+	{ kTheSprite,	"volume",		kTheVolume,		300 },//		D3.1 p
 
 	// Bitmap fields
-	{ kTheCast,		"depth",		kTheDepth,		4 },//				D4 p
-	{ kTheCast,		"regPoint",		kTheRegPoint,	4 },//				D4 p
-	{ kTheCast,		"palette",		kThePalette,	4 },//				D4 p
-	{ kTheCast,		"picture",		kThePicture,	3 },//		D3 p
+	{ kTheCast,		"depth",		kTheDepth,		400 },//				D4 p
+	{ kTheCast,		"regPoint",		kTheRegPoint,	400 },//				D4 p
+	{ kTheCast,		"palette",		kThePalette,	400 },//				D4 p
+	{ kTheCast,		"picture",		kThePicture,	300 },//		D3 p
 
 	// TextCastMember fields
-	{ kTheCast,		"hilite",		kTheHilite,		2 },// D2 p
-	{ kTheCast,		"size",			kTheSize,		3 },//		D3.1 p
-	{ kTheCast,		"text",			kTheText,		2 },// D2 p
+	{ kTheCast,		"hilite",		kTheHilite,		200 },// D2 p
+	{ kTheCast,		"size",			kTheSize,		300 },//		D3.1 p
+	{ kTheCast,		"text",			kTheText,		200 },// D2 p
 
 	// Field fields
-	{ kTheField,	"text",			kTheText,		3 },// 		D3 p undocumented
-	{ kTheField,	"textAlign",	kTheTextAlign,	3 },//		D3 p
-	{ kTheField,	"textFont",		kTheTextFont,	3 },//		D3 p
-	{ kTheField,	"textHeight",	kTheTextHeight,	3 },//		D3 p
-	{ kTheField,	"textSize",		kTheTextSize,	3 },//		D3 p
-	{ kTheField,	"textStyle",	kTheTextStyle,	3 },//		D3 p
-
-	{ kTheWindow,	"drawRect",		kTheDrawRect,	4 },//				D4 p
-	{ kTheWindow,	"fileName",		kTheFileName,	4 },//				D4 p
-	{ kTheWindow,	"modal",		kTheModal,		4 },//				D4 p
-	{ kTheWindow,	"rect",			kTheRect,		4 },//				D4 p
-	{ kTheWindow,	"title",		kTheTitle,		4 },//				D4 p
-	{ kTheWindow,	"titleVisible",	kTheTitleVisible,4 },//				D4 p
-	{ kTheWindow,	"sourceRect",	kTheSourceRect,	4 },//				D4 p
-	{ kTheWindow,	"visible",		kTheVisible,	4 },//				D4 p
-	{ kTheWindow,	"windowType",	kTheWindowType,	4 },//				D4 p
-
-	{ kTheMenuItem,	"checkmark",	kTheCheckMark,	3 },//		D3 p
-	{ kTheMenuItem, "enabled",		kTheEnabled,	3 },//		D3 p
-	{ kTheMenuItem, "name",			kTheName,		3 },//		D3 p
-	{ kTheMenuItem, "script",		kTheScript,		3 },//		D3 p
-	{ kTheMenuItems,"number",		kTheNumber,		3 },//		D3 p 			// number of menuitems of menu <xx>
-
-	{ kTheMenu,		"name",			kTheName,		3 },//		D3 p
-
-	{ kTheCastMembers,	"number",	kTheNumber,		3 },// 		D3 p
-
-	{ kTheDate,		"short",		kTheShort,		3 },//		D3 f
-	{ kTheDate,		"long",			kTheLong,		3 },//		D3 f
-	{ kTheDate,		"abbreviated",	kTheAbbr,		3 },//		D3 f
-	{ kTheDate,		"abbrev",		kTheAbbr,		3 },//		D3 f
-	{ kTheDate,		"abbr",			kTheAbbr,		3 },//		D3 f
-	{ kTheTime,		"short",		kTheShort,		3 },//		D3 f
-	{ kTheTime,		"long",			kTheLong,		3 },//		D3 f
-	{ kTheTime,		"abbreviated",	kTheAbbr,		3 },//		D3 f
-	{ kTheTime,		"abbrev",		kTheAbbr,		3 },//		D3 f
-	{ kTheTime,		"abbr",			kTheAbbr,		3 },//		D3 f
-
-	{ kTheSoundEntity,"volume",		kTheVolume,		3 },//		D3 p
+	{ kTheField,	"text",			kTheText,		300 },// 		D3 p undocumented
+	{ kTheField,	"textAlign",	kTheTextAlign,	300 },//		D3 p
+	{ kTheField,	"textFont",		kTheTextFont,	300 },//		D3 p
+	{ kTheField,	"textHeight",	kTheTextHeight,	300 },//		D3 p
+	{ kTheField,	"textSize",		kTheTextSize,	300 },//		D3 p
+	{ kTheField,	"textStyle",	kTheTextStyle,	300 },//		D3 p
+
+	{ kTheWindow,	"drawRect",		kTheDrawRect,	400 },//				D4 p
+	{ kTheWindow,	"fileName",		kTheFileName,	400 },//				D4 p
+	{ kTheWindow,	"modal",		kTheModal,		400 },//				D4 p
+	{ kTheWindow,	"rect",			kTheRect,		400 },//				D4 p
+	{ kTheWindow,	"title",		kTheTitle,		400 },//				D4 p
+	{ kTheWindow,	"titleVisible",	kTheTitleVisible,400 },//				D4 p
+	{ kTheWindow,	"sourceRect",	kTheSourceRect,	400 },//				D4 p
+	{ kTheWindow,	"visible",		kTheVisible,	400 },//				D4 p
+	{ kTheWindow,	"windowType",	kTheWindowType,	400 },//				D4 p
+
+	{ kTheMenuItem,	"checkmark",	kTheCheckMark,	300 },//		D3 p
+	{ kTheMenuItem, "enabled",		kTheEnabled,	300 },//		D3 p
+	{ kTheMenuItem, "name",			kTheName,		300 },//		D3 p
+	{ kTheMenuItem, "script",		kTheScript,		300 },//		D3 p
+	{ kTheMenuItems,"number",		kTheNumber,		300 },//		D3 p 			// number of menuitems of menu <xx>
+
+	{ kTheMenu,		"name",			kTheName,		300 },//		D3 p
+
+	{ kTheCastMembers,	"number",	kTheNumber,		300 },// 		D3 p
+
+	{ kTheDate,		"short",		kTheShort,		300 },//		D3 f
+	{ kTheDate,		"long",			kTheLong,		300 },//		D3 f
+	{ kTheDate,		"abbreviated",	kTheAbbr,		300 },//		D3 f
+	{ kTheDate,		"abbrev",		kTheAbbr,		300 },//		D3 f
+	{ kTheDate,		"abbr",			kTheAbbr,		300 },//		D3 f
+	{ kTheTime,		"short",		kTheShort,		300 },//		D3 f
+	{ kTheTime,		"long",			kTheLong,		300 },//		D3 f
+	{ kTheTime,		"abbreviated",	kTheAbbr,		300 },//		D3 f
+	{ kTheTime,		"abbrev",		kTheAbbr,		300 },//		D3 f
+	{ kTheTime,		"abbr",			kTheAbbr,		300 },//		D3 f
+
+	{ kTheSoundEntity,"volume",		kTheVolume,		300 },//		D3 p
 
 	{ kTheNOEntity, NULL, kTheNOField, 0 }
 };
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 2d9c58eb35..a012689e15 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -856,7 +856,7 @@ int Datum::asInt() const {
 		res = u.i;
 		break;
 	case FLOAT:
-		if (g_director->getVersion() < 4) {
+		if (g_director->getVersion() < 400) {
 			res = round(u.f);
 		} else {
 			res = (int)u.f;
@@ -1153,7 +1153,7 @@ void Lingo::executeImmediateScripts(Frame *frame) {
 		if (_vm->getCurrentMovie()->getScore()->_immediateActions.contains(frame->_sprites[i]->_scriptId)) {
 			// From D5 only explicit event handlers are processed
 			// Before that you could specify commands which will be executed on mouse up
-			if (_vm->getVersion() < 5)
+			if (_vm->getVersion() < 500)
 				g_lingo->processEvent(kEventGeneric, kScoreScript, frame->_sprites[i]->_scriptId, i);
 			else
 				g_lingo->processEvent(kEventMouseUp, kScoreScript, frame->_sprites[i]->_scriptId, i);
diff --git a/engines/director/lingo/tests/math.lingo b/engines/director/lingo/tests/math.lingo
index 02b6c764d2..3254809016 100644
--- a/engines/director/lingo/tests/math.lingo
+++ b/engines/director/lingo/tests/math.lingo
@@ -25,7 +25,7 @@ put the sqrt of 9
 
 -- Testing rounding
 set save to the scummvmVersion
-set the scummvmVersion to 3
+set the scummvmVersion to 300
 scummvmAssertEqual(integer(2.5), 3)
 scummvmAssertEqual(integer(2.49), 2)
 scummvmAssertEqual(integer(2.1), 2)
diff --git a/engines/director/lingo/tests/strings.lingo b/engines/director/lingo/tests/strings.lingo
index ac11603bf2..1987048735 100644
--- a/engines/director/lingo/tests/strings.lingo
+++ b/engines/director/lingo/tests/strings.lingo
@@ -2,7 +2,7 @@ set z = "foo bar baz"
 set z1 = z & " meow"
 set z1 = z1 && "woof"
 scummvmAssert(z1 contains "bar")
-scummvmAssert(z1 contains "MeÍW")
+scummvmAssert(z1 contains "Me�W")
 
 set c = chars("Macromedia", 6, 6)
 scummvmAssertEqual(c, "m")
@@ -11,12 +11,12 @@ scummvmAssertEqual(c, "media")
 set c = chars("Macromedia", -1, 15)
 scummvmAssertEqual(c, "Macromedia")
 set save to the scummvmVersion
-set the scummvmVersion to 3
+set the scummvmVersion to 300
 set c = chars("Macromedia", 1, 1.1)
 scummvmAssertEqual(c, 0)
 set the scummvmVersion to save
 
-scummvmAssert("meow" = "MeÍW")
+scummvmAssert("meow" = "Me�W")
 
 put "That is the last line of the file." & return & "Click Done to exit." && return && "foo"
 
@@ -57,7 +57,7 @@ set res to char 5.5 of string
 scummvmAssertEqual(res, "o")
 -- Test D3, it does a round
 set save to the scummvmVersion
-set the scummvmVersion to 3
+set the scummvmVersion to 300
 set res to char 5.49 of string
 scummvmAssertEqual(res, "o")
 set res to char 5.5 of string
diff --git a/engines/director/lingo/xlibs/fileio.cpp b/engines/director/lingo/xlibs/fileio.cpp
index 29fd08a6e7..49b5068c82 100644
--- a/engines/director/lingo/xlibs/fileio.cpp
+++ b/engines/director/lingo/xlibs/fileio.cpp
@@ -35,18 +35,18 @@ namespace Director {
 static const char *xlibName = "FileIO";
 
 static MethodProto xlibMethods[] = {
-	{ "delete",					FileIO::m_delete,			 0, 0,	2 },	// D2
-	{ "fileName",				FileIO::m_fileName,			 0, 0,	2 },	// D2
-	{ "getLength",				FileIO::m_getLength,		 0, 0,	2 },	// D2
-	{ "getPosition",			FileIO::m_getPosition,		 0, 0,	2 },	// D2
-	{ "new",					FileIO::m_new,				 2, 2,	2 },	// D2
-	{ "readChar",				FileIO::m_readChar,			 0, 0,	2 },	// D2
-	{ "readLine",				FileIO::m_readLine,			 0, 0,	2 },	// D2
-	{ "readToken",				FileIO::m_readToken,		 2, 2,	2 },	// D2
-	{ "readWord",				FileIO::m_readWord,			 0, 0,	2 },	// D2
-	{ "setPosition",			FileIO::m_setPosition,		 1, 1,	2 },	// D2
-	{ "writeChar",				FileIO::m_writeChar,		 1, 1,	2 },	// D2
-	{ "writeString",			FileIO::m_writeString,		 1, 1,	2 },	// D2
+	{ "delete",					FileIO::m_delete,			 0, 0,	200 },	// D2
+	{ "fileName",				FileIO::m_fileName,			 0, 0,	200 },	// D2
+	{ "getLength",				FileIO::m_getLength,		 0, 0,	200 },	// D2
+	{ "getPosition",			FileIO::m_getPosition,		 0, 0,	200 },	// D2
+	{ "new",					FileIO::m_new,				 2, 2,	200 },	// D2
+	{ "readChar",				FileIO::m_readChar,			 0, 0,	200 },	// D2
+	{ "readLine",				FileIO::m_readLine,			 0, 0,	200 },	// D2
+	{ "readToken",				FileIO::m_readToken,		 2, 2,	200 },	// D2
+	{ "readWord",				FileIO::m_readWord,			 0, 0,	200 },	// D2
+	{ "setPosition",			FileIO::m_setPosition,		 1, 1,	200 },	// D2
+	{ "writeChar",				FileIO::m_writeChar,		 1, 1,	200 },	// D2
+	{ "writeString",			FileIO::m_writeString,		 1, 1,	200 },	// D2
 	{ 0, 0, 0, 0, 0 }
 };
 
diff --git a/engines/director/lingo/xlibs/flushxobj.cpp b/engines/director/lingo/xlibs/flushxobj.cpp
index 8158e8de0e..6527275eca 100644
--- a/engines/director/lingo/xlibs/flushxobj.cpp
+++ b/engines/director/lingo/xlibs/flushxobj.cpp
@@ -45,11 +45,11 @@ namespace Director {
 static const char *xlibName = "FlushXObj";
 
 static MethodProto xlibMethods[] = {
-	{ "new",				FlushXObj::m_new,				 0, 0,	4 },	// D4
-	{ "AddToMask",			FlushXObj::m_addToMask,			 2, 2,	4 },	// D4
-	{ "ClearMask",			FlushXObj::m_clearMask,			 0, 0,	4 },	// D4
-	{ "Flush",				FlushXObj::m_flush,				 0, 0,  4 },	// D4
-	{ "FlushEvents",		FlushXObj::m_flushEvents,		 2, 2,  4 },	// D4
+	{ "new",				FlushXObj::m_new,				 0, 0,	400 },	// D4
+	{ "AddToMask",			FlushXObj::m_addToMask,			 2, 2,	400 },	// D4
+	{ "ClearMask",			FlushXObj::m_clearMask,			 0, 0,	400 },	// D4
+	{ "Flush",				FlushXObj::m_flush,				 0, 0,  400 },	// D4
+	{ "FlushEvents",		FlushXObj::m_flushEvents,		 2, 2,  400 },	// D4
 	{ 0, 0, 0, 0, 0 }
 };
 
diff --git a/engines/director/lingo/xlibs/palxobj.cpp b/engines/director/lingo/xlibs/palxobj.cpp
index ef0d2f6599..a587ab0a30 100644
--- a/engines/director/lingo/xlibs/palxobj.cpp
+++ b/engines/director/lingo/xlibs/palxobj.cpp
@@ -49,8 +49,8 @@ namespace Director {
 static const char *xlibName = "FixPalette";
 
 static MethodProto xlibMethods[] = {
-	{ "new",				PalXObj::m_new,				 4, 4,	4 },	// D4
-	{ "PatchIt",			PalXObj::m_patchIt,			 0, 0,  4 },	// D4
+	{ "new",				PalXObj::m_new,				 4, 4,	400 },	// D4
+	{ "PatchIt",			PalXObj::m_patchIt,			 0, 0,  400 },	// D4
 	{ 0, 0, 0, 0, 0 }
 };
 
diff --git a/engines/director/lingo/xlibs/winxobj.cpp b/engines/director/lingo/xlibs/winxobj.cpp
index f1adfaa8ee..4650c16aec 100644
--- a/engines/director/lingo/xlibs/winxobj.cpp
+++ b/engines/director/lingo/xlibs/winxobj.cpp
@@ -41,9 +41,9 @@ namespace Director {
 static const char *xlibName = "RearWindow";
 
 static MethodProto xlibMethods[] = {
-	{ "new",				RearWindowXObj::m_new,				1,	1,	4 },	// D4
-	{ "GetMemoryNeeded",	RearWindowXObj::m_getMemoryNeeded,	0,	0,	4 },	// D4
-	{ "PatToWindow",		RearWindowXObj::m_patToWindow,		1,	1,	4 },	// D4
+	{ "new",				RearWindowXObj::m_new,				1,	1,	400 },	// D4
+	{ "GetMemoryNeeded",	RearWindowXObj::m_getMemoryNeeded,	0,	0,	400 },	// D4
+	{ "PatToWindow",		RearWindowXObj::m_patToWindow,		1,	1,	400 },	// D4
 	{ 0, 0, 0, 0, 0 }
 };
 
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index 7fe21fd103..61ea27dcb9 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -168,7 +168,7 @@ InfoEntries Movie::loadInfoEntries(Common::SeekableSubReadStreamEndian &stream)
 	res.unk2 = stream.readUint32();
 	res.flags = stream.readUint32();
 
-	if (g_director->getVersion() >= 4)
+	if (g_director->getVersion() >= 400)
 		res.scriptId = stream.readUint32();
 
 	stream.seek(offset);
diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index 25df8fd339..d7040fd416 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -39,12 +39,12 @@ namespace Director {
 
 Archive *DirectorEngine::createArchive() {
 	if (getPlatform() == Common::kPlatformMacintosh) {
-		if (getVersion() < 4)
+		if (getVersion() < 400)
 			return new MacArchive();
 		else
 			return new RIFXArchive();
 	} else {
-		if (getVersion() < 4)
+		if (getVersion() < 400)
 			return new RIFFArchive();
 		else
 			return new RIFXArchive();
@@ -213,21 +213,15 @@ void Window::loadEXE(const Common::String movie) {
 		exeStream->seek(-4, SEEK_END);
 		exeStream->seek(exeStream->readUint32LE());
 
-		switch (g_director->getVersion()) {
-		case 2:
-		case 3:
-			loadEXEv3(exeStream);
-			break;
-		case 4:
-			loadEXEv4(exeStream);
-			break;
-		case 5:
-			loadEXEv5(exeStream);
-			break;
-		case 7:
+		if (g_director->getVersion() >= 700) {
 			loadEXEv7(exeStream);
-			break;
-		default:
+		} else if (g_director->getVersion() >= 500) {
+			loadEXEv5(exeStream);
+		} else if (g_director->getVersion() >= 400) {
+			loadEXEv4(exeStream);
+		} else if (g_director->getVersion() >= 200) {
+			loadEXEv3(exeStream);
+		} else {
 			error("Unhandled Windows EXE version %d", g_director->getVersion());
 		}
 	}
@@ -351,7 +345,7 @@ void Window::loadEXERIFX(Common::SeekableReadStream *stream, uint32 offset) {
 }
 
 void Window::loadMac(const Common::String movie) {
-	if (g_director->getVersion() < 4) {
+	if (g_director->getVersion() < 400) {
 		// The data is part of the resource fork of the executable
 		openMainArchive(movie);
 	} else {
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 9a1c401d86..ef260ff6a4 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -264,7 +264,7 @@ void Score::startPlay() {
 		for (uint i = 0; i < _frames[1]->_sprites.size(); i++)
 			_channels.push_back(new Channel(_frames[1]->_sprites[i], i));
 
-	if (_vm->getVersion() >= 3)
+	if (_vm->getVersion() >= 300)
 		_movie->processEvent(kEventStartMovie);
 }
 
@@ -292,7 +292,7 @@ void Score::step() {
 }
 
 void Score::stopPlay() {
-	if (_vm->getVersion() >= 3)
+	if (_vm->getVersion() >= 300)
 		_movie->processEvent(kEventStopMovie);
 	_lingo->executePerFrameHook(-1, 0);
 }
@@ -336,11 +336,11 @@ void Score::update() {
 		// of _nextFrame so it doesn't get wiped.
 		if (_vm->_skipFrameAdvance) {
 			uint16 nextFrameCache = _nextFrame;
-			if (_vm->getVersion() >= 4)
+			if (_vm->getVersion() >= 400)
 				_movie->processEvent(kEventExitFrame);
 			_nextFrame = nextFrameCache;
 		} else {
-			if (_vm->getVersion() >= 4)
+			if (_vm->getVersion() >= 400)
 				_movie->processEvent(kEventExitFrame);
 		}
 
@@ -384,7 +384,7 @@ void Score::update() {
 
 	_lingo->executeImmediateScripts(_frames[_currentFrame]);
 
-	if (_vm->getVersion() >= 6) {
+	if (_vm->getVersion() >= 600) {
 		// _movie->processEvent(kEventBeginSprite);
 		// TODO Director 6 step: send beginSprite event to any sprites whose span begin in the upcoming frame
 		// _movie->processEvent(kEventPrepareFrame);
@@ -398,7 +398,7 @@ void Score::update() {
 	// Enter and exit from previous frame
 	if (!_vm->_playbackPaused) {
 		_movie->processEvent(kEventEnterFrame); // Triggers the frame script in D2-3, explicit enterFrame handlers in D4+
-		if (_vm->getVersion() == 3) {
+		if (_vm->getVersion() == 300) {
 			// Movie version of enterFrame, for D3 only. The Lingo Dictionary claims
 			// "This handler executes before anything else when the playback head moves."
 			// but this is incorrect. The frame script is executed first.
@@ -632,9 +632,9 @@ void Score::loadFrames(Common::SeekableSubReadStreamEndian &stream) {
 	uint32 size = stream.readUint32();
 	size -= 4;
 
-	if (_vm->getVersion() < 4) {
+	if (_vm->getVersion() < 400) {
 		_numChannelsDisplayed = 30;
-	} else if (_vm->getVersion() == 4) {
+	} else if (_vm->getVersion() >= 400 && _vm->getVersion() < 500) {
 		uint32 frame1Offset = stream.readUint32();
 		uint32 numFrames = stream.readUint32();
 		uint16 version = stream.readUint16();
@@ -658,7 +658,7 @@ void Score::loadFrames(Common::SeekableSubReadStreamEndian &stream) {
 		warning("STUB: Score::loadFrames. frame1Offset: %x numFrames: %x version: %x spriteRecordSize: %x numChannels: %x numChannelsDisplayed: %x",
 			frame1Offset, numFrames, version, spriteRecordSize, numChannels, _numChannelsDisplayed);
 		// Unknown, some bytes - constant (refer to contuinity).
-	} else if (_vm->getVersion() > 4) {
+	} else if (_vm->getVersion() >= 500) {
 		//what data is up the top of D5 VWSC?
 		uint32 unk1 = stream.readUint32();
 		uint32 unk2 = stream.readUint32();
@@ -718,7 +718,7 @@ void Score::loadFrames(Common::SeekableSubReadStreamEndian &stream) {
 
 			while (frameSize != 0) {
 
-				if (_vm->getVersion() < 4) {
+				if (_vm->getVersion() < 400) {
 					channelSize = stream.readByte() * 2;
 					channelOffset = stream.readByte() * 2;
 					frameSize -= channelSize + 2;
diff --git a/engines/director/sound.cpp b/engines/director/sound.cpp
index d7410900ba..637cfcdaae 100644
--- a/engines/director/sound.cpp
+++ b/engines/director/sound.cpp
@@ -41,7 +41,7 @@ namespace Director {
 
 DirectorSound::DirectorSound(DirectorEngine *vm) : _vm(vm) {
 	uint numChannels = 2;
-	if (g_director->getVersion() >= 4) {
+	if (g_director->getVersion() >= 400) {
 		numChannels = 4;
 	}
 
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index d3b2da486f..e1749d3c80 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -119,7 +119,7 @@ bool Sprite::isActive() {
 
 bool Sprite::shouldHilite() {
 	if ((_cast && _cast->_autoHilite) || (isQDShape() && _ink == kInkTypeMatte))
-		if (g_director->getVersion() < 4 && !_moveable)
+		if (g_director->getVersion() < 400 && !_moveable)
 			if (_movie->getScriptContext(kScoreScript, _scriptId) ||
 					_movie->getScriptContext(kCastScript, _castId))
 				return true;
diff --git a/engines/director/util.cpp b/engines/director/util.cpp
index 141ae51a3e..2a74a62c76 100644
--- a/engines/director/util.cpp
+++ b/engines/director/util.cpp
@@ -398,7 +398,7 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
 		// Let's try to translate file path into 8.3 format
 		Common::String addedexts;
 
-		if (g_director->getPlatform() == Common::kPlatformWindows && g_director->getVersion() < 5) {
+		if (g_director->getPlatform() == Common::kPlatformWindows && g_director->getVersion() < 500) {
 			convPath.clear();
 			const char *ptr = initialPath.c_str();
 			Common::String component;


Commit: 2f0090e11dc3e15f27ef44932b39589b7a7c240b
    https://github.com/scummvm/scummvm/commit/2f0090e11dc3e15f27ef44932b39589b7a7c240b
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-10T15:00:55-04:00

Commit Message:
DIRECTOR: LINGO: Reload builtins on version change

Changed paths:
    engines/director/director.cpp
    engines/director/director.h
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-object.cpp
    engines/director/lingo/lingo-object.h
    engines/director/lingo/lingo-the.cpp
    engines/director/lingo/lingo.cpp
    engines/director/lingo/lingo.h


diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index 1160934075..26fe59cd28 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -132,6 +132,15 @@ void DirectorEngine::setCurrentMovie(Movie *movie) {
 	_currentWindow = movie->getWindow();
 }
 
+void DirectorEngine::setVersion(uint16 version) {
+	if (version == _version)
+		return;
+	
+	debug("Switching to Director v%d", version);
+	_version = version;
+	_lingo->reloadBuiltIns();
+}
+
 Common::Error DirectorEngine::run() {
 	debug("Starting v%d Director game", getVersion());
 
diff --git a/engines/director/director.h b/engines/director/director.h
index 75618f18d7..38f2afe3f8 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -173,7 +173,7 @@ public:
 	const char *getGameId() const;
 	uint16 getDescriptionVersion() const;
 	uint16 getVersion() const { return _version; }
-	void setVersion(uint16 version) { _version = version; }
+	void setVersion(uint16 version);
 	Common::Platform getPlatform() const;
 	Common::Language getLanguage() const;
 	const char *getExtra();
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 1164a0863f..a06708984f 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -297,14 +297,13 @@ void Lingo::initBuiltIns() {
 		default:
 			break;
 		}
-
-		_functions[(void *)sym.u.s] = new FuncDesc(blt->name, "");
 	}
 }
 
-void Lingo::cleanupBuiltins() {
-	for (FuncHash::iterator it = _functions.begin(); it != _functions.end(); ++it)
-		delete it->_value;
+void Lingo::cleanupBuiltIns() {
+	_builtinCmds.clear();
+	_builtinFuncs.clear();
+	_builtinConsts.clear();
 }
 
 void Lingo::printSTUBWithArglist(const char *funcname, int nargs, const char *prefix) {
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index da72b99759..3a4dc311b2 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -176,6 +176,11 @@ void Lingo::initFuncs() {
 	}
 }
 
+void Lingo::cleanupFuncs() {
+	for (FuncHash::iterator it = _functions.begin(); it != _functions.end(); ++it)
+		delete it->_value;
+}
+
 void Lingo::push(Datum d) {
 	_stack.push_back(d);
 }
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 4119e6bfb5..1d97d4e032 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -92,6 +92,11 @@ void Lingo::initMethods() {
 	Window::initMethods(windowMethods);
 }
 
+void Lingo::cleanupMethods() {
+	_methods.clear();
+	Window::cleanupMethods();
+}
+
 static struct XLibProto {
 	const char *name;
 	void (*initializer)(int);
@@ -124,6 +129,10 @@ void Lingo::initXLibs() {
 	}
 }
 
+void Lingo::cleanupXLibs() {
+	_xlibInitializers.clear();
+}
+
 void Lingo::openXLib(Common::String name, ObjectType type) {
 
 	Common::Platform platform = _vm->getPlatform();
diff --git a/engines/director/lingo/lingo-object.h b/engines/director/lingo/lingo-object.h
index d13ffe02a9..ec0e5cf4ee 100644
--- a/engines/director/lingo/lingo-object.h
+++ b/engines/director/lingo/lingo-object.h
@@ -101,6 +101,10 @@ public:
 		}
 	}
 
+	static void cleanupMethods() {
+		_methods->clear();
+	}
+
 	virtual ~Object() {
 		delete _refCount;
 	};
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index cf8adbc45e..76c7e445ff 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -312,6 +312,11 @@ void Lingo::initTheEntities() {
 	}
 }
 
+void Lingo::cleanUpTheEntities() {
+	_entityNames.clear();
+	_fieldNames.clear();
+}
+
 const char *Lingo::entity2str(int id) {
 	static char buf[20];
 
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index a012689e15..419cace070 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -194,7 +194,19 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 
 Lingo::~Lingo() {
 	resetLingo();
-	cleanupBuiltins();
+	cleanupFuncs();
+}
+
+void Lingo::reloadBuiltIns() {
+	debug("Reloading builtins");
+	cleanupBuiltIns();
+	cleanUpTheEntities();
+	cleanupMethods();
+	cleanupXLibs();
+	initBuiltIns();
+	initTheEntities();
+	initMethods();
+	initXLibs();
 }
 
 LingoArchive::~LingoArchive() {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index b3441dcef6..7081073f65 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -244,12 +244,16 @@ public:
 	void printCallStack(uint pc);
 	Common::String decodeInstruction(LingoArchive *archive, ScriptData *sd, uint pc, uint *newPC = NULL);
 
+	void reloadBuiltIns();
 	void initBuiltIns();
-	void cleanupBuiltins();
+	void cleanupBuiltIns();
 	void initFuncs();
+	void cleanupFuncs();
 	void initBytecode();
 	void initMethods();
+	void cleanupMethods();
 	void initXLibs();
+	void cleanupXLibs();
 	void openXLib(Common::String name, ObjectType type);
 
 	void runTests();
@@ -334,6 +338,7 @@ public:
 	// lingo-the.cpp
 public:
 	void initTheEntities();
+	void cleanUpTheEntities();
 	const char *entity2str(int id);
 	const char *field2str(int id);
 


Commit: 48be72b95afe9d5aeedb5a8f557687f2a3ae4792
    https://github.com/scummvm/scummvm/commit/48be72b95afe9d5aeedb5a8f557687f2a3ae4792
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-10T15:00:55-04:00

Commit Message:
DIRECTOR: Load version from config

Changed paths:
    engines/director/cast.cpp


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 77ce1ff57d..78efb80a37 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -346,6 +346,38 @@ bool Cast::loadArchive() {
 	return true;
 }
 
+uint16 humanVersion(uint16 ver) {
+	if (ver >= 0x79F)
+		return 1201;
+	if (ver >= 0x783)
+		return 1200;
+	if (ver >= 0x782)
+		return 1150;
+	if (ver >= 0x781)
+		return 1100;
+	if (ver >= 0x73B)
+		return 1000;
+	if (ver >= 0x6A4)
+		return 850;
+	if (ver >= 0x582)
+		return 800;
+	if (ver >= 0x4C8)
+		return 700;
+	if (ver >= 0x4C2)
+		return 600;
+	if (ver >= 0x4B1)
+		return 500;
+	if (ver >= 0x45D)
+		return 404;
+	if (ver >= 0x45B)
+		return 400;
+	if (ver >= 0x405)
+		return 310;
+	if (ver >= 0x404)
+		return 300;
+	return 200;
+}
+
 void Cast::loadConfig(Common::SeekableSubReadStreamEndian &stream) {
 	debugC(1, kDebugLoading, "****** Loading Config VWCF");
 
@@ -353,7 +385,8 @@ void Cast::loadConfig(Common::SeekableSubReadStreamEndian &stream) {
 		stream.hexdump(stream.size());
 
 	uint16 len = stream.readUint16();
-	uint16 ver1 = stream.readUint16();
+	uint16 fileVersion = stream.readUint16(); // TODO: very high fileVersion means protected
+	uint16 humanFileVersion = humanVersion(fileVersion);
 	Common::Rect movieRect = Movie::readRect(stream);
 	if (!_isShared)
 		_movie->_movieRect = movieRect;
@@ -378,29 +411,51 @@ void Cast::loadConfig(Common::SeekableSubReadStreamEndian &stream) {
 		_movie->_stageColor = stageColor;
 
 	uint16 bitdepth = stream.readUint16();
-	byte color = stream.readByte();	// boolean, color = 1, B/W = 0
-	uint16 stageColorR = stream.readUint16();
-	uint16 stageColorG = stream.readUint16();
-	uint16 stageColorB = stream.readUint16();
 
-	for (int i = 0; i < 0x0b; i++) {
-		stream.readByte();
-	}
+	// byte color = stream.readByte();	// boolean, color = 1, B/W = 0
+	// uint16 stageColorR = stream.readUint16();
+	// uint16 stageColorG = stream.readUint16();
+	// uint16 stageColorB = stream.readUint16();
 
-	if (_vm->getVersion() >= 400) {
-		for (int i = 0; i < 0x16; i++)
+	uint16 directorVersion = fileVersion;
+	uint16 humanDirectorVersion = humanFileVersion;
+	if (humanFileVersion >= 300) {
+		for (int i = 0; i < 0x06; i++) {
 			stream.readByte();
+		}
 
-		_defaultPalette = (int16)stream.readUint16();
+		directorVersion = stream.readUint16();
+		humanDirectorVersion = humanVersion(directorVersion);
 
-		for (int i = 0; i < 0x08; i++)
+		for (int i = 0; i < 0x0a; i++) {
 			stream.readByte();
+		}
+
+		if (humanDirectorVersion >= 400) {
+			for (int i = 0; i < 0x16; i++)
+				stream.readByte();
+
+			_defaultPalette = (int16)stream.readUint16();
+
+			for (int i = 0; i < 0x08; i++)
+				stream.readByte();
+		}
+	}
+
+	if (humanDirectorVersion > _vm->getVersion()) {
+		if (_vm->getVersion() > 0)
+			warning("Movie is from later version v%d", humanDirectorVersion);
+		_vm->setVersion(humanDirectorVersion);
+	} else if (humanDirectorVersion < _vm->getVersion()) {
+		warning("Movie is from earlier version v%d", humanDirectorVersion);
+		// Don't change version in case there are other movies, factories,
+		// etc., which need features from the later version
 	}
 
 	debugC(1, kDebugLoading, "Cast::loadConfig(): len: %d, ver: %d, framerate: %d, light: %d, unk: %d, font: %d, size: %d"
-			", style: %d", len, ver1, currentFrameRate, lightswitch, unk1, commentFont, commentSize, commentStyle);
-	debugC(1, kDebugLoading, "Cast::loadConfig(): stagecolor: %d, depth: %d, color: %d, rgb: 0x%04x 0x%04x 0x%04x",
-			stageColor, bitdepth, color, stageColorR, stageColorG, stageColorB);
+			", style: %d", len, fileVersion, currentFrameRate, lightswitch, unk1, commentFont, commentSize, commentStyle);
+	debugC(1, kDebugLoading, "Cast::loadConfig(): stagecolor: %d, depth: %d, directorVer: %d",
+			stageColor, bitdepth, directorVersion);
 	if (debugChannelSet(1, kDebugLoading))
 		movieRect.debugPrint(1, "Cast::loadConfig(): Movie rect: ");
 }




More information about the Scummvm-git-logs mailing list