[Scummvm-cvs-logs] CVS: scummvm/sword1 logic.cpp,1.44,1.45 logic.h,1.12,1.13 staticres.cpp,1.8,1.9 sword1.cpp,1.69,1.70 sword1.h,1.21,1.22 sworddefs.h,1.15,1.16

Robert Göffringmann lavosspawn at users.sourceforge.net
Tue Dec 7 20:39:05 CET 2004


Update of /cvsroot/scummvm/scummvm/sword1
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9567/sword1

Modified Files:
	logic.cpp logic.h staticres.cpp sword1.cpp sword1.h 
	sworddefs.h 
Log Message:
moved the bootparam code out of sword1.cpp

Index: logic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/logic.cpp,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -d -r1.44 -r1.45
--- logic.cpp	5 Dec 2004 02:52:41 -0000	1.44
+++ logic.cpp	8 Dec 2004 04:38:38 -0000	1.45
@@ -1676,6 +1676,105 @@
 	return (a > b)? a : (((b > c) ? c : b));
 }
 
+void Logic::startPosCallFn(uint8 fnId, uint32 param1, uint32 param2, uint32 param3) {
+	Object *obj = NULL;
+	switch(fnId) {
+		case opcPlaySequence:
+			fnPlaySequence(NULL, 0, param1, 0, 0, 0, 0, 0);
+			break;
+		case opcAddObject:
+			fnAddObject(NULL, 0, param1, 0, 0, 0, 0, 0);
+			break;
+        case opcRemoveObject:
+			fnRemoveObject(NULL, 0, param1, 0, 0, 0, 0, 0);
+			break;
+		case opcMegaSet:
+			obj = _objMan->fetchObject(param1);
+			fnMegaSet(obj, param1, param2, param3, 0, 0, 0, 0);
+			break;
+		case opcNoSprite:
+			obj = _objMan->fetchObject(param1);
+			fnNoSprite(obj, param1, param2, param3, 0, 0, 0, 0);
+			break;
+		default:
+			error("Illegal fnCallfn argument %d", fnId);
+	}
+}
+
+void Logic::runStartScript(const uint8 *data) {
+	uint16 varId = 0;
+	uint8 fnId = 0;
+	uint32 param1 = 0, param2 = 0, param3 = 0;
+	while (*data != opcSeqEnd) {
+		switch (*data++) {
+			case opcCallFn:
+				fnId = *data++;
+				param1 = *data++;
+				startPosCallFn(fnId, param1, 0, 0);
+				break;
+			case opcCallFnLong:
+				fnId = *data++;
+				startPosCallFn(fnId, READ_LE_UINT32(data), READ_LE_UINT32(data + 4), READ_LE_UINT32(data + 8));
+				data += 12;
+				break;
+			case opcSetVar8:
+				varId = READ_LE_UINT16(data);
+				_scriptVars[varId] = data[2];
+				data += 3;
+				break;
+			case opcSetVar16:
+				varId = READ_LE_UINT16(data);
+				_scriptVars[varId] = READ_LE_UINT16(data + 2);
+				data += 4;
+				break;				
+			case opcSetVar32:
+				varId = READ_LE_UINT16(data);
+				_scriptVars[varId] = READ_LE_UINT32(data + 2);
+				data += 6;
+				break;
+			case opcGeorge:
+				_scriptVars[CHANGE_X]     = READ_LE_UINT16(data + 0);
+				_scriptVars[CHANGE_Y]     = READ_LE_UINT16(data + 2);
+				_scriptVars[CHANGE_DIR]   = data[4];
+				_scriptVars[CHANGE_PLACE] = READ_LE_UINT24(data + 5);
+				data += 8;
+				break;
+			case opcRunStart:
+				data = _startData[*data];
+				break;
+			case opcRunHelper:
+				data = _helperData[*data];
+				break;
+			default:
+				error("Unexpected opcode in StartScript");
+		}
+	}
+}
+
+void Logic::startPositions(uint32 pos) {
+	bool spainVisit2 = false;
+	if ((pos >= 956) && (pos <= 962)) {
+		spainVisit2 = true;
+		pos -= 900;
+	}
+	if ((pos > 80) || (_startData[pos] == NULL))
+		error("Starting in Section %d is not supported", pos);
+
+	Logic::_scriptVars[CHANGE_STANCE] = STAND;
+	Logic::_scriptVars[GEORGE_CDT_FLAG] = GEO_TLK_TABLE;
+
+	runStartScript(_startData[pos]);
+	if (spainVisit2)
+		runStartScript(_helperData[HELP_SPAIN2]);
+	
+	if (pos == 0)
+		pos = 1;
+	Object *compact = _objMan->fetchObject(PLAYER);
+	fnEnterSection(compact, PLAYER, pos, 0, 0, 0, 0, 0);	// (automatically opens the compact resource for that section)
+	SwordEngine::_systemVars.controlPanelMode = CP_NORMAL;
+	SwordEngine::_systemVars.wantFade = true;
+}
+
 const uint32 Logic::_scriptVarInit[NON_ZERO_SCRIPT_VARS][2] = {
 	{  42,  448}, {  43,  378}, {  51,    1}, {  92,    1}, { 147,   71}, { 201,   1},
 	{ 209,    1}, { 215,    1}, { 242,    2}, { 244,    1}, { 246,    3}, { 247,   1},

Index: logic.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/logic.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- logic.h	21 Oct 2004 12:43:48 -0000	1.12
+++ logic.h	8 Dec 2004 04:38:38 -0000	1.13
@@ -54,15 +54,9 @@
 	void engine(void);
 	void updateScreenParams(void);
 	void runMouseScript(Object *cpt, int32 scriptId);
+	void startPositions(uint32 pos);
 
 	static uint32 _scriptVars[NUM_SCRIPT_VARS];
-// public for startPositions()
-	int fnAddObject		(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
-	int fnEnterSection	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
-	int fnPlaySequence	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
-	int fnMegaSet		(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
-	int fnNoSprite		(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
-
 // public for mouse (menu looking)
 	int cfnPresetScript	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 private:
@@ -102,6 +96,8 @@
 	int fnBackground	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnForeground	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnSort			(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+	int fnNoSprite		(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+	int fnMegaSet		(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnAnim			(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnSetFrame		(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnFullAnim		(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
@@ -114,6 +110,7 @@
 	int fnSetFadeTargetPalette(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnSetPaletteToFade(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnSetPaletteToCut(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+	int fnPlaySequence	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 
 	int fnIdle			(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnPause			(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
@@ -165,7 +162,9 @@
 	int cfnReleaseMenu	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	
 	int fnAddSubject	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+	int fnAddObject		(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnRemoveObject	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
+	int fnEnterSection	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnLeaveSection	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnChangeFloor	(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnWalk			(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
@@ -201,6 +200,37 @@
 	int fnPurple		(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	int fnBlack			(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x);
 	static const uint32 _scriptVarInit[NON_ZERO_SCRIPT_VARS][2];
+	static const uint8 *_startData[];
+	static const uint8 *_helperData[];
+	void startPosCallFn(uint8 fnId, uint32 param1, uint32 param2, uint32 param3);
+	void runStartScript(const uint8 *data);
+};
+
+enum StartPosOpcodes {
+	opcSeqEnd = 0,
+	opcCallFn,
+	opcCallFnLong,
+	opcSetVar8,
+	opcSetVar16,
+	opcSetVar32,
+	opcGeorge,
+	opcRunStart,
+	opcRunHelper,
+	opcPlaySequence,
+	opcAddObject,
+	opcRemoveObject,
+	opcMegaSet,
+	opcNoSprite
+};
+
+enum HelperScripts {
+	HELP_IRELAND = 0,
+	HELP_SYRIA,
+	HELP_SPAIN,
+	HELP_NIGHTTRAIN,
+	HELP_SCOTLAND,
+	HELP_WHITECOAT,
+	HELP_SPAIN2
 };
 
 } // End of namespace Sword1 

Index: staticres.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/staticres.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- staticres.cpp	21 Oct 2004 12:35:39 -0000	1.8
+++ staticres.cpp	8 Dec 2004 04:38:38 -0000	1.9
@@ -29,6 +29,7 @@
 #include "sword1/music.h"
 #include "sword1/sound.h"
 #include "sword1/sword1.h"
+#include "sword1/logic.h"
 
 namespace Sword1 {
 
@@ -6568,6 +6569,588 @@
 	{0},											// 99
 };
 
+#define ENCODE8(VAL) \
+	(uint8)(VAL & 0xFF)
+#define ENCODE16(VAL) \
+	(uint8)(VAL & 0xFF), (uint8)(VAL >> 8)
+#define ENCODE24(VAL) \
+	(uint8)(VAL & 0xFF), (uint8)((VAL >> 8) & 0xFF), (uint8)(VAL >> 16)
+#define ENCODE32(VAL) \
+	(uint8)(VAL & 0xFF), (uint8)((VAL >> 8) & 0xFF), (uint8)((VAL >> 16) & 0xFF), (uint8)(VAL >> 24)
+	
+#define LOGIC_CALL_FN(FN_ID, PARAM) \
+	opcCallFn,     ENCODE8(FN_ID), ENCODE8(PARAM)
+#define LOGIC_CALL_FN_LONG(FN_ID, PARAM1, PARAM2, PARAM3) \
+    opcCallFnLong, ENCODE8(FN_ID), ENCODE32(PARAM1), ENCODE32(PARAM2), ENCODE32(PARAM3)
+#define LOGIC_SET_VAR8(VAR_ID, VAL) \
+	opcSetVar8,  ENCODE16(VAR_ID), ENCODE8(VAL)
+#define LOGIC_SET_VAR16(VAR_ID, VAL) \
+	opcSetVar16, ENCODE16(VAR_ID), ENCODE16(VAL)
+#define LOGIC_SET_VAR32(VAR_ID, VAL) \
+	opcSetVar32, ENCODE16(VAR_ID), ENCODE32(VAL)
+#define GEORGE_POS(POS_X, POS_Y, DIR, PLACE) \
+	opcGeorge,   ENCODE16(POS_X),  ENCODE16(POS_Y), DIR, ENCODE24(PLACE)
+
+#define INIT_SEQ_END \
+	opcSeqEnd
+#define RUN_START_SCRIPT(SCR_ID) \
+	opcRunStart, ENCODE8(SCR_ID)
+#define RUN_HELPER_SCRIPT(SCR_ID) \
+	opcRunHelper, ENCODE8(SCR_ID)
+
+const uint8 g_startPos0[] = {				// Intro with sequence
+	LOGIC_CALL_FN(opcPlaySequence, 4),
+	GEORGE_POS(481, 413, DOWN, FLOOR_1),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos1[] = {				// Intro without sequence
+	GEORGE_POS(481, 413, DOWN, FLOOR_1),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos2[] = {				// blind alley
+	GEORGE_POS(480, 388, DOWN_LEFT, FLOOR_2),
+	LOGIC_CALL_FN(opcAddObject, LIFTING_KEYS),
+	LOGIC_CALL_FN(opcAddObject, ROSSO_CARD),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos3[] = {				// cafe
+	GEORGE_POS(660, 368, DOWN_LEFT, FLOOR_3),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos4[] = {				// ready to use the phone
+	GEORGE_POS(463, 391, DOWN, FLOOR_4),
+	LOGIC_SET_VAR8(MOUE_TEXT,         1),
+	LOGIC_SET_VAR8(MOUE_NICO_FLAG,    1),
+	LOGIC_SET_VAR8(PARIS_FLAG,        5),
+	LOGIC_SET_VAR8(NICO_PHONE_FLAG,   1),
+	LOGIC_SET_VAR8(TAILOR_PHONE_FLAG, 1),
+	LOGIC_SET_VAR8(WORKMAN_GONE_FLAG, 1),
+	LOGIC_SET_VAR8(ALBERT_INFO_FLAG,  1),
+	LOGIC_SET_VAR8(SEEN_SEWERS_FLAG,  1),
+	// item stuff missing
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos5[] = {				// court yard
+	GEORGE_POS(400, 400, DOWN_LEFT, FLOOR_5),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos7[] = {				// sewer two
+	GEORGE_POS(520, 310, DOWN_LEFT, FLOOR_7),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos8[] = {				// cafe repaired
+	GEORGE_POS(481, 413, DOWN, FLOOR_8),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos11[] = {				// costumier
+	GEORGE_POS(264, 436, DOWN_RIGHT, FLOOR_11),
+	LOGIC_CALL_FN(opcAddObject, TISSUE),
+	LOGIC_CALL_FN(opcAddObject, PHOTOGRAPH),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos12[] = {				// hotel street
+	GEORGE_POS(730, 460, LEFT, FLOOR_12),
+	LOGIC_SET_VAR8(NICO_ADDRESS_FLAG,     1),
+	LOGIC_SET_VAR8(NICO_PHONE_FLAG,       1),
+	LOGIC_SET_VAR8(COSTUMES_ADDRESS_FLAG, 1),
+	LOGIC_SET_VAR8(HOTEL_ADDRESS_FLAG,    1),
+	LOGIC_SET_VAR8(AEROPORT_ADDRESS_FLAG, 1),
+	LOGIC_SET_VAR8(TAILOR_PHONE_FLAG,     1),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos14[] = {				// hotel corridor
+	GEORGE_POS(528, 484, UP, FLOOR_14),
+	LOGIC_CALL_FN(opcAddObject, HOTEL_KEY),
+	LOGIC_CALL_FN(opcAddObject, MANUSCRIPT),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos17[] = {				// hotel assassin
+	GEORGE_POS(714, 484, LEFT, FLOOR_17),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos18[] = {				// gendarmerie
+    GEORGE_POS(446, 408, DOWN_LEFT, FLOOR_18),
+	LOGIC_SET_VAR8(PARIS_FLAG, 5),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos19[] = {				// ireland street
+	GEORGE_POS(256, 966, UP_RIGHT, FLOOR_19),
+	RUN_HELPER_SCRIPT(HELP_IRELAND)
+};
+
+const uint8 g_startPos20[] = {				// macdevitts
+	GEORGE_POS(194, 417, DOWN_RIGHT, FLOOR_20),
+	LOGIC_SET_VAR8(FARMER_MOVED_FLAG,  1),
+	LOGIC_SET_VAR8(FARMER_SEAN_FLAG,   5),
+	LOGIC_SET_VAR8(PUB_FLAP_FLAG,      1),
+	LOGIC_SET_VAR8(PUB_TRAP_DOOR,      2),
+	LOGIC_SET_VAR8(KNOWS_PEAGRAM_FLAG, 1),
+	RUN_HELPER_SCRIPT(HELP_IRELAND)
+};
+
+const uint8 g_startPos21[] = {				// pub cellar
+	GEORGE_POS(291, 444, DOWN_RIGHT, FLOOR_21),
+	LOGIC_CALL_FN(opcAddObject, BEER_TOWEL),
+	LOGIC_SET_VAR8(FARMER_MOVED_FLAG,       1),
+	LOGIC_SET_VAR8(FLEECY_STUCK,            1),
+	LOGIC_SET_VAR8(LIFTING_KEYS_IN_HOLE_23, 1),
+	RUN_HELPER_SCRIPT(HELP_IRELAND)
+};
+
+const uint8 g_startPos22[] = {				// castle gate
+	GEORGE_POS(547, 500, UP_LEFT, FLOOR_22),
+	LOGIC_SET_VAR8(IRELAND_FLAG, 4),
+	RUN_HELPER_SCRIPT(HELP_IRELAND)
+};
+
+const uint8 g_startPos23[] = {				// castle hay top
+	GEORGE_POS(535, 510, UP, FLOOR_23),
+	RUN_HELPER_SCRIPT(HELP_IRELAND)
+};
+
+const uint8 g_startPos24[] = {				// castle yard
+	GEORGE_POS(815, 446, DOWN_LEFT, FLOOR_24),
+	RUN_HELPER_SCRIPT(HELP_IRELAND)
+};
+
+const uint8 g_startPos25[] = {				// castle dig
+	GEORGE_POS(369, 492, LEFT, FLOOR_25),
+	LOGIC_CALL_FN(opcAddObject, BEER_TOWEL),
+	LOGIC_SET_VAR8(BEER_TOWEL_BEEN_WET, 1),
+	LOGIC_SET_VAR16(WET_BEER_TOWEL_TIMER, 1000),
+	RUN_HELPER_SCRIPT(HELP_IRELAND)
+};
+
+const uint8 g_startPos26[] = {				// cellar dark
+	GEORGE_POS(291, 444, DOWN_RIGHT, FLOOR_26),
+	RUN_HELPER_SCRIPT(HELP_IRELAND)
+};
+
+const uint8 g_startPos27[] = {				// museum street
+	GEORGE_POS(300, 510, UP_RIGHT, FLOOR_27),
+	LOGIC_SET_VAR8(PARIS_FLAG,                  12),
+	LOGIC_SET_VAR8(MANUSCRIPT_ON_TABLE_10_FLAG,  1),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos31[] = {				// hospital street
+	GEORGE_POS(400, 500, UP_RIGHT, FLOOR_31),
+	LOGIC_SET_VAR8(PARIS_FLAG, 11),
+	LOGIC_CALL_FN(opcAddObject, PHOTOGRAPH),
+	LOGIC_CALL_FN(opcAddObject, LAB_PASS),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos32[] = {				// hospital desk (after we've found out where Marquet is)
+	GEORGE_POS(405, 446, UP_RIGHT, FLOOR_32),
+	LOGIC_SET_VAR8(GOT_BENOIR_FLAG, 1),
+	LOGIC_CALL_FN(opcAddObject, PHOTOGRAPH),
+	LOGIC_CALL_FN(opcAddObject, LAB_PASS),
+	RUN_HELPER_SCRIPT(HELP_WHITECOAT)
+};
+
+const uint8 g_startPos35[] = {				// hospital jacques
+	GEORGE_POS(640, 500, LEFT, FLOOR_35),
+	LOGIC_SET_VAR8(DOOR_34_OPEN,	 1),
+	LOGIC_SET_VAR8(GOT_BENOIR_FLAG,  2),
+	LOGIC_SET_VAR8(HOS_POS_FLAG,    26),
+	LOGIC_SET_VAR8(BENOIR_FLAG,     24),
+	RUN_HELPER_SCRIPT(HELP_WHITECOAT)
+};
+
+const uint8 g_startPos36[] = { 				// montfaucon
+	GEORGE_POS(300, 480, RIGHT, FLOOR_36),
+	LOGIC_CALL_FN(opcAddObject, LENS),
+	LOGIC_CALL_FN(opcAddObject, RED_NOSE),
+	LOGIC_CALL_FN(opcAddObject, LIFTING_KEYS),
+	LOGIC_SET_VAR8(MONTFAUCON_CONTROL_FLAG, 1),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos37[] = {				// catacomb sewer
+	GEORGE_POS(592, 386, RIGHT, FLOOR_37),
+	LOGIC_CALL_FN(opcAddObject, LIFTING_KEYS),
+	LOGIC_CALL_FN(opcAddObject, TRIPOD),
+	LOGIC_CALL_FN(opcAddObject, GEM),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos38[] = {				// catacomb room
+	GEORGE_POS(200, 390, RIGHT, FLOOR_38),
+	LOGIC_CALL_FN(opcAddObject, TRIPOD),
+	LOGIC_CALL_FN(opcAddObject, GEM),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos39[] = {				// catacomb meeting
+	GEORGE_POS(636, 413, DOWN_LEFT, FLOOR_39),
+	LOGIC_SET_VAR8(MEETING_FLAG, 3),	// meeting finished
+	LOGIC_CALL_FN(opcAddObject, TRIPOD),
+	LOGIC_CALL_FN(opcAddObject, GEM),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos40[] = {				// excavation exterior
+	GEORGE_POS(648, 492, LEFT, FLOOR_40),
+	LOGIC_SET_VAR8(NICO_PHONE_FLAG,  1),
+	LOGIC_SET_VAR8(PARIS_FLAG,      16),
+	LOGIC_CALL_FN(opcAddObject, PLASTER),
+	LOGIC_CALL_FN(opcAddObject, POLISHED_CHALICE),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos45[] = {				// syria stall
+	GEORGE_POS(410, 490, DOWN_RIGHT, FLOOR_45),
+	RUN_HELPER_SCRIPT(HELP_SYRIA)
+};
+
+const uint8 g_startPos47[] = {				// syria carpet
+	GEORGE_POS(225, 775, RIGHT, FLOOR_47),
+	RUN_HELPER_SCRIPT(HELP_SYRIA)
+};
+
+const uint8 g_startPos48[] = {				// templar church
+	GEORGE_POS(315, 392, DOWN, FLOOR_48),
+	LOGIC_SET_VAR8(CHALICE_FLAG, 2),
+	LOGIC_SET_VAR8(NEJO_TEXT,    1),
+	LOGIC_CALL_FN(opcAddObject, CHALICE),
+	LOGIC_CALL_FN(opcAddObject, LENS),
+	INIT_SEQ_END
+};
+
+const uint8 g_startPos49[] = {				// syria club
+	GEORGE_POS(438, 400, DOWN_RIGHT, FLOOR_49),
+	LOGIC_CALL_FN(opcAddObject, TOILET_BRUSH),
+	RUN_HELPER_SCRIPT(HELP_SYRIA)
+};
+
+const uint8 g_startPos50[] = {				// syria toilet
+	GEORGE_POS(313, 440, DOWN_RIGHT, FLOOR_50),
+	LOGIC_CALL_FN(opcAddObject, TOILET_KEY),
+	RUN_HELPER_SCRIPT(HELP_SYRIA)
+};
+
+const uint8 g_startPos53[] = {				// bull's head pan
+	LOGIC_SET_VAR32(CHANGE_PLACE, FLOOR_53),
+	LOGIC_CALL_FN(opcAddObject, TOWEL_CUT),
+	RUN_HELPER_SCRIPT(HELP_SYRIA)
+};
+
+const uint8 g_startPos54[] = {				// bull's head
+	GEORGE_POS(680, 425, DOWN_LEFT, FLOOR_54),
+	LOGIC_CALL_FN(opcAddObject, TOWEL_CUT),
+	RUN_HELPER_SCRIPT(HELP_SYRIA)
+};
+
+const uint8 g_startPos55[] = {				// bull secret
+    GEORGE_POS(825, 373, DOWN_LEFT, FLOOR_55),
+	RUN_HELPER_SCRIPT(HELP_SYRIA)
+};
+
+const uint8 g_startPos56[] = {				// contess' room
+	GEORGE_POS(572, 443, LEFT, FLOOR_56),
+	RUN_HELPER_SCRIPT(HELP_SPAIN)
+};
+
+const uint8 g_startPos57[] = {				// Spain drive
+	GEORGE_POS(1630, 460, DOWN_LEFT, FLOOR_57),
+	RUN_HELPER_SCRIPT(HELP_SPAIN)
+};
+
+const uint8 g_startPos58[] = {				// Mausoleum Exterior
+	GEORGE_POS(SC58_PATH_X, SC58_PATH_Y, UP_RIGHT, FLOOR_58),
+	RUN_HELPER_SCRIPT(HELP_SPAIN)
+};
+
+const uint8 g_startPos59[] = {				// Mausoleum interior
+	GEORGE_POS(750, 455, LEFT, FLOOR_59),
+	RUN_HELPER_SCRIPT(HELP_SPAIN)
+};
+
+const uint8 g_startPos60[] = {				// Spain reception
+	GEORGE_POS(750, 475, DOWN_LEFT, FLOOR_60),
+	RUN_HELPER_SCRIPT(HELP_SPAIN)
+};
+
+const uint8 g_startPos61[] = {				// Spain well
+	GEORGE_POS(400, 345, DOWN, LEFT_FLOOR_61),
+	LOGIC_CALL_FN(opcAddObject, STONE_KEY),
+	LOGIC_CALL_FN(opcAddObject, MIRROR),
+	RUN_HELPER_SCRIPT(HELP_SPAIN)
+};
+
+const uint8 g_startPos62[] = {				// chess puzzle
+	LOGIC_SET_VAR32(CHANGE_PLACE, FLOOR_62),
+	LOGIC_SET_VAR8(TOP_MENU_DISABLED, 1),
+	LOGIC_SET_VAR8(GEORGE_ALLOWED_REST_ANIMS, 0),
+	LOGIC_CALL_FN_LONG(opcNoSprite, PLAYER, 0, 0),
+	RUN_HELPER_SCRIPT(HELP_SPAIN)
+};
+
+const uint8 g_startPos63[] = {				// train one
+	GEORGE_POS(710, 450, LEFT, FLOOR_63),
+	LOGIC_SET_VAR8(DOOR_SC65_FLAG, 2),
+	LOGIC_SET_VAR8(DOOR_ONE_63_OPEN, 0),
+	LOGIC_SET_VAR8(DOOR_65_OPEN, 1),
+	LOGIC_SET_VAR8(VAIL_TEXT, 1),
+	RUN_HELPER_SCRIPT(HELP_NIGHTTRAIN)
+};
+
+const uint8 g_startPos65[] = {				// compt one
+	GEORGE_POS(460, 430, DOWN, FLOOR_65),
+	RUN_HELPER_SCRIPT(HELP_NIGHTTRAIN)
+};
+
+const uint8 g_startPos66[] = {				// compt two
+	GEORGE_POS(460, 430, DOWN, FLOOR_66),
+	RUN_HELPER_SCRIPT(HELP_NIGHTTRAIN)
+};
+
+const uint8 g_startPos67[] = {				// compt three
+	GEORGE_POS(460, 430, DOWN, FLOOR_67),
+	RUN_HELPER_SCRIPT(HELP_NIGHTTRAIN)
+};
+
+const uint8 g_startPos69[] = {				// train_guard
+	GEORGE_POS(310, 430, DOWN, FLOOR_69),
+	RUN_HELPER_SCRIPT(HELP_NIGHTTRAIN)
+};
+
+const uint8 g_startPos71[] = {				// churchyard
+	GEORGE_POS(1638, 444, LEFT, RIGHT_FLOOR_71),
+	LOGIC_SET_VAR8(NICO_SCOT_SCREEN, 71),
+	LOGIC_SET_VAR8(NICO_POSITION_71, 1),
+	RUN_HELPER_SCRIPT(HELP_SCOTLAND)
+};
+
+const uint8 g_startPos72[] = {				// church tower
+	GEORGE_POS(150, 503, RIGHT, FLOOR_72),
+	LOGIC_SET_VAR8(NICO_SCOT_SCREEN, 72),
+	RUN_HELPER_SCRIPT(HELP_SCOTLAND)
+};
+
+const uint8 g_startPos73[] = {				// crypt
+	GEORGE_POS(250, 390, DOWN_RIGHT, FLOOR_73),
+	LOGIC_SET_VAR8(NICO_SCOT_SCREEN, 73),
+	LOGIC_SET_VAR8(NICO_POSITION_73, 1)
+};
+
+const uint8 g_startPos80[] = {				// Paris map
+	GEORGE_POS(645, 160, DOWN, FLOOR_80),
+	LOGIC_SET_VAR8(PARIS_FLAG, 3),
+	LOGIC_SET_VAR8(NICO_CLOWN_FLAG, 3),
+	LOGIC_SET_VAR8(NICO_DOOR_FLAG, 2),
+
+	LOGIC_CALL_FN(opcAddObject, RED_NOSE),
+	LOGIC_CALL_FN(opcAddObject, PHOTOGRAPH),
+	LOGIC_CALL_FN(opcAddObject, PLASTER),
+	LOGIC_CALL_FN(opcAddObject, LAB_PASS),
+
+	LOGIC_SET_VAR8(MANUSCRIPT_FLAG,       1),
+	LOGIC_SET_VAR8(NICO_ADDRESS_FLAG,     1),
+	LOGIC_SET_VAR8(NICO_PHONE_FLAG,       1),
+	LOGIC_SET_VAR8(COSTUMES_ADDRESS_FLAG, 1),
+	LOGIC_SET_VAR8(HOTEL_ADDRESS_FLAG,    1),
+	LOGIC_SET_VAR8(MUSEUM_ADDRESS_FLAG,   1),
+	LOGIC_SET_VAR8(HOSPITAL_ADDRESS_FLAG, 1),
+	LOGIC_SET_VAR8(MONTFACN_ADDRESS_FLAG, 1),
+	LOGIC_SET_VAR8(AEROPORT_ADDRESS_FLAG, 1),
+	LOGIC_SET_VAR8(NERVAL_ADDRESS_FLAG,   1),
+
+	LOGIC_SET_VAR8(IRELAND_MAP_FLAG,      1),
+	LOGIC_SET_VAR8(SPAIN_MAP_FLAG,        1),
+	LOGIC_SET_VAR8(SYRIA_FLAG,            2),
+
+	LOGIC_SET_VAR8(TAILOR_PHONE_FLAG,     1),
+	INIT_SEQ_END
+};
+
+const uint8 g_genIreland[] = {
+	LOGIC_SET_VAR8(PARIS_FLAG, 9),
+	LOGIC_CALL_FN(opcAddObject, RED_NOSE),
+	LOGIC_CALL_FN(opcAddObject, PHOTOGRAPH),
+	LOGIC_CALL_FN(opcAddObject, LAB_PASS),
+	LOGIC_CALL_FN(opcAddObject, LIFTING_KEYS),
+	LOGIC_CALL_FN(opcAddObject, MATCHBOOK),
+	LOGIC_CALL_FN(opcAddObject, BUZZER),
+	LOGIC_CALL_FN(opcAddObject, TISSUE),
+	INIT_SEQ_END
+};
+
+const uint8 g_genSyria[] = {
+	LOGIC_SET_VAR8(PARIS_FLAG, 1),
+	LOGIC_CALL_FN(opcAddObject, BALL),
+	LOGIC_CALL_FN(opcAddObject, RED_NOSE),
+	LOGIC_CALL_FN(opcAddObject, PHOTOGRAPH),
+	LOGIC_CALL_FN(opcAddObject, LIFTING_KEYS),
+	LOGIC_CALL_FN(opcAddObject, MATCHBOOK),
+	LOGIC_CALL_FN(opcAddObject, BUZZER),
+	LOGIC_CALL_FN(opcAddObject, TISSUE),
+	LOGIC_SET_VAR8(CHANGE_STANCE, STAND),
+	INIT_SEQ_END
+};
+
+const uint8 g_genSpain[] = {
+	LOGIC_SET_VAR8(PARIS_FLAG, 1),
+	LOGIC_SET_VAR8(SPAIN_VISIT, 1),		// default to 1st spain visit, may get overwritten later
+	LOGIC_CALL_FN(opcAddObject, RED_NOSE),
+	LOGIC_CALL_FN(opcAddObject, PHOTOGRAPH),
+	LOGIC_CALL_FN(opcAddObject, LAB_PASS),
+	LOGIC_CALL_FN(opcAddObject, LIFTING_KEYS),
+	LOGIC_CALL_FN(opcAddObject, BUZZER),
+	LOGIC_CALL_FN(opcAddObject, TISSUE),
+	LOGIC_CALL_FN(opcAddObject, BALL),
+	LOGIC_CALL_FN(opcAddObject, MATCHBOOK),
+	LOGIC_CALL_FN(opcAddObject, PRESSURE_GAUGE),
+	INIT_SEQ_END
+};
+
+const uint8 g_genSpain2[] = {	// 2nd spain visit
+	LOGIC_SET_VAR8(SPAIN_VISIT, 2),
+	LOGIC_CALL_FN(opcRemoveObject, PRESSURE_GAUGE),
+	LOGIC_CALL_FN(opcAddObject, POLISHED_CHALICE),
+	INIT_SEQ_END
+};
+
+const uint8 g_genNightTrain[] = {
+	LOGIC_SET_VAR8(PARIS_FLAG, 18),
+	INIT_SEQ_END
+};
+
+const uint8 g_genScotland[] = {
+	LOGIC_SET_VAR8(PARIS_FLAG, 1),
+	LOGIC_CALL_FN(opcAddObject, RED_NOSE),
+	LOGIC_CALL_FN(opcAddObject, PHOTOGRAPH),
+	LOGIC_CALL_FN(opcAddObject, LAB_PASS),
+	LOGIC_CALL_FN(opcAddObject, LIFTING_KEYS),
+	LOGIC_CALL_FN(opcAddObject, BUZZER),
+	INIT_SEQ_END
+};
+
+const uint8 g_genWhiteCoat[] = {
+	LOGIC_SET_VAR8(PARIS_FLAG,       11),
+	LOGIC_SET_VAR8(EVA_TEXT,          1),
+	LOGIC_SET_VAR8(EVA_MARQUET_FLAG,  2),
+	LOGIC_SET_VAR8(EVA_NURSE_FLAG,    4),
+	LOGIC_SET_VAR8(FOUND_WARD_FLAG,   1),
+	LOGIC_SET_VAR8(CONSULTANT_HERE,   1),
+
+	LOGIC_CALL_FN_LONG(opcMegaSet, PLAYER, GEORGE_WLK, MEGA_WHITE),
+
+	LOGIC_SET_VAR32(GEORGE_CDT_FLAG, WHT_TLK_TABLE),
+	LOGIC_SET_VAR8(GEORGE_TALK_FLAG,          0),
+	LOGIC_SET_VAR8(WHITE_COAT_FLAG,           1),
+	LOGIC_SET_VAR8(GEORGE_ALLOWED_REST_ANIMS, 0),
+	INIT_SEQ_END
+};
+
+const uint8 *Logic::_startData[] = {
+	g_startPos0,
+	g_startPos1,
+	g_startPos2,
+	g_startPos3,
+	g_startPos4,
+	g_startPos5,
+	NULL, //g_startPos6,
+	g_startPos7,
+	g_startPos8,
+	NULL, //g_startPos9,
+	NULL, //g_startPos10,
+	g_startPos11,
+	g_startPos12,
+	NULL, //g_startPos13,
+	g_startPos14,
+	NULL, //g_startPos15,
+	NULL, //g_startPos16,
+	g_startPos17,
+	g_startPos18,
+	g_startPos19,
+	g_startPos20,
+	g_startPos21,
+	g_startPos22,
+	g_startPos23,
+	g_startPos24,
+	g_startPos25,
+	g_startPos26,
+	g_startPos27,
+	NULL, //g_startPos28,
+	NULL, //g_startPos29,
+	NULL, //g_startPos30,
+	g_startPos31,
+	g_startPos32,
+	NULL, //g_startPos33,
+	NULL, //g_startPos34,
+	g_startPos35,
+	g_startPos36,
+	g_startPos37,
+	g_startPos38,
+	g_startPos39,
+	g_startPos40,
+	NULL, //g_startPos41,
+	NULL, //g_startPos42,
+	NULL, //g_startPos43,
+	NULL, //g_startPos44,
+	g_startPos45,
+	NULL, //g_startPos46,
+	g_startPos47,
+	g_startPos48,
+	g_startPos49,
+	g_startPos50,
+	NULL, //g_startPos51,
+	NULL, //g_startPos52,
+	g_startPos53,
+	g_startPos54,
+	g_startPos55,
+	g_startPos56,
+	g_startPos57,
+	g_startPos58,
+	g_startPos59,
+	g_startPos60,
+	g_startPos61,
+	g_startPos62,
+	g_startPos63,
+	NULL, //g_startPos64,
+	g_startPos65,
+	g_startPos66,
+	g_startPos67,
+	NULL, //g_startPos68,
+	g_startPos69,
+	NULL, //g_startPos70,
+	g_startPos71,
+	g_startPos72,
+	g_startPos73,
+	NULL, //g_startPos74,
+	NULL, //g_startPos75,
+	NULL, //g_startPos76
+	NULL, //g_startPos77
+	NULL, //g_startPos78
+	NULL, //g_startPos79
+	g_startPos80
+};
+
+const uint8 *Logic::_helperData[] = {
+	g_genIreland,
+	g_genSyria,
+	g_genSpain,
+	g_genNightTrain,
+	g_genScotland,
+	g_genWhiteCoat,
+	g_genSpain2
+};
+
 } // End of namespace Sword1
 
 #ifdef __PALM_OS__

Index: sword1.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/sword1.cpp,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- sword1.cpp	5 Dec 2004 17:42:19 -0000	1.69
+++ sword1.cpp	8 Dec 2004 04:38:39 -0000	1.70
@@ -217,870 +217,6 @@
 	_systemVars.wantFade = true;
 }
 
-void SwordEngine::startPositions(int32 startNumber) {
-	// int32 sect;
-	Object *compact;
-
-	Logic::_scriptVars[CHANGE_STANCE] = STAND;
-	Logic::_scriptVars[GEORGE_CDT_FLAG] = GEO_TLK_TABLE;
-
-	//-------------------------------------------------------------------------------------------------------
-	// START 0==intro; 1==without
-
-	if ((startNumber==0)||(startNumber==1))
-	{
-		if (startNumber==0)
-		{
-			// Tdebug("Calling fn check cd");
-			// FN_check_CD(0,0,1,0,0,0,0,0);	// request CD for sc1 (which happens to be CD-1)
-			// Tdebug("Calling fn play sequence");
-			_logic->fnPlaySequence(0,0,4,0,0,0,0,0);	// intro
-			debug(1, "Setting start number to 1");
-			startNumber=1;
-		}
-	
-	
-		Logic::_scriptVars[CHANGE_X] = 481;
-		Logic::_scriptVars[CHANGE_Y] = 413;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_1;
-	} 
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==2)	// blind_alley
-	{
-		Logic::_scriptVars[CHANGE_X] = 480;
-		Logic::_scriptVars[CHANGE_Y] = 388;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_2;
-
-		_logic->fnAddObject(0,0,LIFTING_KEYS,0,0,0,0,0);
-		_logic->fnAddObject(0,0,ROSSO_CARD,0,0,0,0,0);
-
-		Logic::_scriptVars[POCKET_1] = 1;
-		Logic::_scriptVars[POCKET_2] = 1;
-		Logic::_scriptVars[POCKET_3] = 1;
-		Logic::_scriptVars[POCKET_4] = 1;
-		Logic::_scriptVars[POCKET_5] = 1;
-		Logic::_scriptVars[POCKET_6] = 1;
-		Logic::_scriptVars[POCKET_7] = 1;
-		Logic::_scriptVars[POCKET_8] = 1;
-		Logic::_scriptVars[POCKET_9] = 1;
-
-		Logic::_scriptVars[POCKET_10] = 1;
-		Logic::_scriptVars[POCKET_11] = 1;
-		Logic::_scriptVars[POCKET_12] = 1;
-		Logic::_scriptVars[POCKET_13] = 1;
-		Logic::_scriptVars[POCKET_14] = 1;
-		Logic::_scriptVars[POCKET_15] = 1;
-		Logic::_scriptVars[POCKET_16] = 1;
-		Logic::_scriptVars[POCKET_17] = 1;
-		Logic::_scriptVars[POCKET_18] = 1;
-		Logic::_scriptVars[POCKET_19] = 1;
-
-		Logic::_scriptVars[POCKET_20] = 1;
-		Logic::_scriptVars[POCKET_21] = 1;
-		Logic::_scriptVars[POCKET_22] = 1;
-		Logic::_scriptVars[POCKET_23] = 1;
-		Logic::_scriptVars[POCKET_24] = 1;
-		Logic::_scriptVars[POCKET_25] = 1;
-		Logic::_scriptVars[POCKET_26] = 1;
-		Logic::_scriptVars[POCKET_27] = 1;
-		Logic::_scriptVars[POCKET_28] = 1;
-		Logic::_scriptVars[POCKET_29] = 1;
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==3)	// cafe
-	{
-		Logic::_scriptVars[CHANGE_X] = 660;
-		Logic::_scriptVars[CHANGE_Y] = 368;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_3;
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==4)	// ready to use phone
-	{
-		Logic::_scriptVars[CHANGE_X] = 463;
-		Logic::_scriptVars[CHANGE_Y] = 391;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_4;
-
-		Logic::_scriptVars[MOUE_TEXT] = 1;		// stop moue from entering ("Freeze...")
-		Logic::_scriptVars[MOUE_NICO_FLAG] = 1;			// Moue gave George her number
-//		paris_flag=2;					// for Nico's phone script
-		Logic::_scriptVars[PARIS_FLAG] = 5;	// to access room8 (cafe_repaired)
-		Logic::_scriptVars[NICO_PHONE_FLAG] = 1;	// Nico's number is on envelope
-		Logic::_scriptVars[TAILOR_PHONE_FLAG] = 1;	// Todryk's number is on envelope
-		Logic::_scriptVars[WORKMAN_GONE_FLAG] = 1;	// Workman not here
-		Logic::_scriptVars[ALBERT_INFO_FLAG] = 1;	// Albert has told us the tailor's number (for Nico's phone script)
-		Logic::_scriptVars[SEEN_SEWERS_FLAG] = 1;
-
-		Logic::_scriptVars[POCKET_30] = 1;
-		Logic::_scriptVars[POCKET_31] = 1;
-		Logic::_scriptVars[POCKET_32] = 1;
-		Logic::_scriptVars[POCKET_33] = 1;
-		Logic::_scriptVars[POCKET_34] = 1;
-		Logic::_scriptVars[POCKET_35] = 1;
-		Logic::_scriptVars[POCKET_36] = 1;
-		Logic::_scriptVars[POCKET_37] = 1;
-		Logic::_scriptVars[POCKET_38] = 1;
-		Logic::_scriptVars[POCKET_39] = 1;
-
-		Logic::_scriptVars[POCKET_40] = 1;
-		Logic::_scriptVars[POCKET_41] = 1;
-		Logic::_scriptVars[POCKET_42] = 1;
-		Logic::_scriptVars[POCKET_43] = 1;
-		Logic::_scriptVars[POCKET_44] = 1;
-		Logic::_scriptVars[POCKET_45] = 1;
-		Logic::_scriptVars[POCKET_46] = 1;
-		Logic::_scriptVars[POCKET_47] = 1;
-		Logic::_scriptVars[POCKET_48] = 1;
-		Logic::_scriptVars[POCKET_49] = 1;
-
-		Logic::_scriptVars[POCKET_50] = 1;
-		Logic::_scriptVars[POCKET_51] = 1;
-		Logic::_scriptVars[POCKET_52] = 1;
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==5)	// court_yard
-	{
-		Logic::_scriptVars[CHANGE_X] = 400;
-		Logic::_scriptVars[CHANGE_Y] = 400;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_5;
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==7)	// sewer_two
-	{
-		Logic::_scriptVars[CHANGE_X] = 520;
-		Logic::_scriptVars[CHANGE_Y] = 310;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_7;
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==8)	// cafe_repaired
-	{
-		Logic::_scriptVars[CHANGE_X] = 481;
-		Logic::_scriptVars[CHANGE_Y] = 413;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_8;
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==11)	// costumier
-	{
-		Logic::_scriptVars[CHANGE_X] = 264;
-		Logic::_scriptVars[CHANGE_Y] = 436;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN_RIGHT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_11;
-
-		_logic->fnAddObject(0,0,TISSUE,0,0,0,0,0);
-		_logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
-	}
-	//-------------------------------------------------------------------------------------------------------
-	// HOTEL SECTION
-	else if (startNumber==12)	// hotel_street
-	{
-		Logic::_scriptVars[CHANGE_X] = 730;
-		Logic::_scriptVars[CHANGE_Y] = 460;
-		Logic::_scriptVars[CHANGE_DIR] = LEFT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_12;
-
-		Logic::_scriptVars[PARIS_FLAG] = 6;
-
-		_logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
-
-		Logic::_scriptVars[NICO_ADDRESS_FLAG] = 1;
-		Logic::_scriptVars[NICO_PHONE_FLAG] = 1;
-		Logic::_scriptVars[COSTUMES_ADDRESS_FLAG] = 1;
-		Logic::_scriptVars[HOTEL_ADDRESS_FLAG] = 1;
-		Logic::_scriptVars[AEROPORT_ADDRESS_FLAG] = 1;
-		Logic::_scriptVars[TAILOR_PHONE_FLAG] = 1;
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==14)	// hotel_corridor
-	{
-		Logic::_scriptVars[CHANGE_X] = 528;
-		Logic::_scriptVars[CHANGE_Y] = 484;
-		Logic::_scriptVars[CHANGE_DIR] = UP;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_14;
-
-		_logic->fnAddObject(0,0,HOTEL_KEY,0,0,0,0,0);
-		_logic->fnAddObject(0,0,MANUSCRIPT,0,0,0,0,0);
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==17)	// hotel_assassin
-	{
-		Logic::_scriptVars[CHANGE_X] = 714;
-		Logic::_scriptVars[CHANGE_Y] = 484;
-		Logic::_scriptVars[CHANGE_DIR] = LEFT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_17;
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==18)	// gendarmerie
-	{
-		Logic::_scriptVars[CHANGE_X] = 446;
-		Logic::_scriptVars[CHANGE_Y] = 408;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_18;
-
-		Logic::_scriptVars[PARIS_FLAG] = 5;	// for Moue & Rosso
-	}
-	//-------------------------------------------------------------------------------------------------------
-	// MUSEUM RAID
-	else if (startNumber==27)	// museum_street
-	{
-		Logic::_scriptVars[CHANGE_X] = 300;
-		Logic::_scriptVars[CHANGE_Y] = 510;
-		Logic::_scriptVars[CHANGE_DIR] = UP_RIGHT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_27;
-
-		Logic::_scriptVars[PARIS_FLAG] = 12;	// for Lobineau in Museum
-		Logic::_scriptVars[MANUSCRIPT_ON_TABLE_10_FLAG] = 1;
-	}
-	//-------------------------------------------------------------------------------------------------------
-	// HOSPITAL SECTION
-	else if (startNumber==31)	// hospital_street
-	{
-		Logic::_scriptVars[CHANGE_X] = 400;
-		Logic::_scriptVars[CHANGE_Y] = 500;
-		Logic::_scriptVars[CHANGE_DIR] = UP_RIGHT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_31;
-
-		Logic::_scriptVars[PARIS_FLAG] = 11;
-
-		_logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LAB_PASS,0,0,0,0,0);
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==32)	// hospital_desk (after we've found out where Marquet is)
-	{
-		Logic::_scriptVars[CHANGE_X] = 405;
-		Logic::_scriptVars[CHANGE_Y] = 446;
-		Logic::_scriptVars[CHANGE_DIR] = UP_RIGHT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_32;
-
-		Logic::_scriptVars[PARIS_FLAG] = 11;
-
-		Logic::_scriptVars[EVA_TEXT] = 1;		// talked to eva
-		Logic::_scriptVars[EVA_MARQUET_FLAG] = 2;
-		Logic::_scriptVars[EVA_NURSE_FLAG] = 4;
-		Logic::_scriptVars[FOUND_WARD_FLAG] = 1;
-		Logic::_scriptVars[CONSULTANT_HERE] = 1;
-
-		compact = (Object*)_objectMan->fetchObject(PLAYER);
-		_logic->fnMegaSet(compact,PLAYER,GEORGE_WLK,MEGA_WHITE,0,0,0,0);
-
-		Logic::_scriptVars[GEORGE_CDT_FLAG] = WHT_TLK_TABLE;
-		Logic::_scriptVars[GEORGE_TALK_FLAG] = 0;
-		Logic::_scriptVars[WHITE_COAT_FLAG] = 1;
-		Logic::_scriptVars[GEORGE_ALLOWED_REST_ANIMS] = 0;		// because wearing white coat now
-		
-		Logic::_scriptVars[GOT_BENOIR_FLAG] = 1;
-
-		_logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LAB_PASS,0,0,0,0,0);
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==35)	// hospital_jacques
-	{
-		Logic::_scriptVars[CHANGE_X] = 640;
-		Logic::_scriptVars[CHANGE_Y] = 500;
-		Logic::_scriptVars[CHANGE_DIR] = LEFT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_35;
-
-		Logic::_scriptVars[PARIS_FLAG] = 11;
-
-		Logic::_scriptVars[EVA_TEXT] = 1;		// talked to eva
-		Logic::_scriptVars[EVA_MARQUET_FLAG] = 2;
-		Logic::_scriptVars[EVA_NURSE_FLAG] = 4;
-		Logic::_scriptVars[FOUND_WARD_FLAG] = 1;
-		Logic::_scriptVars[CONSULTANT_HERE] = 1;
-
-		compact = (Object*)_objectMan->fetchObject(PLAYER);
-		_logic->fnMegaSet(compact,PLAYER,GEORGE_WLK,MEGA_WHITE,0,0,0,0);
-
-		Logic::_scriptVars[GEORGE_CDT_FLAG] = WHT_TLK_TABLE;
-		Logic::_scriptVars[GEORGE_TALK_FLAG] = 0;
-		Logic::_scriptVars[WHITE_COAT_FLAG] = 1;
-		Logic::_scriptVars[GEORGE_ALLOWED_REST_ANIMS] = 0;		// because wearing white coat now
-		Logic::_scriptVars[DOOR_34_OPEN] = 1;
-		
-		Logic::_scriptVars[GOT_BENOIR_FLAG] = 2;
-		Logic::_scriptVars[HOS_POS_FLAG] = 26;
-		Logic::_scriptVars[BENOIR_FLAG] = 24;	// for 'george_enters_ward' script
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==36)	// montfaucon
-	{
-		Logic::_scriptVars[CHANGE_X] = 300;
-		Logic::_scriptVars[CHANGE_Y] = 480;
-		Logic::_scriptVars[CHANGE_DIR] = RIGHT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_36;
-
-		_logic->fnAddObject(0,0,LENS,0,0,0,0,0);
-		_logic->fnAddObject(0,0,RED_NOSE,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LIFTING_KEYS,0,0,0,0,0);
-		
-		Logic::_scriptVars[MONTFAUCON_CONTROL_FLAG] = 1;
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==37)	// catacomb_sewer
-	{
-		Logic::_scriptVars[CHANGE_X] = 592;
-		Logic::_scriptVars[CHANGE_Y] = 386;
-		Logic::_scriptVars[CHANGE_DIR] = RIGHT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_37;
-
-		_logic->fnAddObject(0,0,LIFTING_KEYS,0,0,0,0,0);
-		_logic->fnAddObject(0,0,TRIPOD,0,0,0,0,0);
-		_logic->fnAddObject(0,0,GEM,0,0,0,0,0);
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==38)	// catacomb_room
-	{
-		Logic::_scriptVars[CHANGE_X] = 200;
-		Logic::_scriptVars[CHANGE_Y] = 390;
-		Logic::_scriptVars[CHANGE_DIR] = RIGHT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_38;
-
-		_logic->fnAddObject(0,0,TRIPOD,0,0,0,0,0);
-		_logic->fnAddObject(0,0,GEM,0,0,0,0,0);
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==39)	// catacomb_meeting
-	{
-		Logic::_scriptVars[CHANGE_X] = 636;
-		Logic::_scriptVars[CHANGE_Y] = 413;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_39;
-
-		Logic::_scriptVars[MEETING_FLAG] = 3;	// meeting finished
-
-		_logic->fnAddObject(0,0,TRIPOD,0,0,0,0,0);
-		_logic->fnAddObject(0,0,GEM,0,0,0,0,0);
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==40)	// excavation_exterior
-	{
-		Logic::_scriptVars[CHANGE_X] = 648;
-		Logic::_scriptVars[CHANGE_Y] = 492;
-		Logic::_scriptVars[CHANGE_DIR] = LEFT;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_40;
-
-		Logic::_scriptVars[NICO_PHONE_FLAG] = 1;
-		Logic::_scriptVars[PARIS_FLAG] = 16;
-
-		_logic->fnAddObject(0,0,PLASTER,0,0,0,0,0);
-		_logic->fnAddObject(0,0,POLISHED_CHALICE,0,0,0,0,0);
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==48)	// templar_church
-	{
-		Logic::_scriptVars[CHANGE_X] = 315;
-		Logic::_scriptVars[CHANGE_Y] = 392;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_48;
-
-		_logic->fnAddObject(0,0,CHALICE,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LENS,0,0,0,0,0);
-
-		Logic::_scriptVars[CHALICE_FLAG] = 2;	// from end of Spain1, when George gets chalice
-		Logic::_scriptVars[NEJO_TEXT] = 1;		// so priest is there
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==99)	// test text+speech on blank screen (sc99)
-	{
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_99;
-
-		// if (testingText)
-		if (1)
-		{
-//			lastLineNo = testTextSection*65536 + LastTextNumber(testTextSection);
-			Logic::_scriptVars[LASTLINENO] = 146*65536 + _objectMan->lastTextNumber(146);	// don't finished until at last line in last section
-		}
-	}
-	//-------------------------------------------------------------------------------------------------------
-	else if (startNumber==80)	// Paris Map
-	{
-		Logic::_scriptVars[CHANGE_X] = 645;
-		Logic::_scriptVars[CHANGE_Y] = 160;
-		Logic::_scriptVars[CHANGE_DIR] = DOWN;
-		Logic::_scriptVars[CHANGE_PLACE] = FLOOR_80;
-
-		Logic::_scriptVars[PARIS_FLAG] = 3;	// for Nico's appartment
-		Logic::_scriptVars[NICO_CLOWN_FLAG] = 3;
-
-		Logic::_scriptVars[NICO_DOOR_FLAG] = 2;	// for instant access to Nico's appartment
-
-		_logic->fnAddObject(0,0,RED_NOSE,0,0,0,0,0);
-		_logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
-		_logic->fnAddObject(0,0,PLASTER,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LAB_PASS,0,0,0,0,0);	// for hospital
-
-		Logic::_scriptVars[MANUSCRIPT_FLAG] = 1;
-
-		Logic::_scriptVars[NICO_ADDRESS_FLAG] = 1;
-		Logic::_scriptVars[NICO_PHONE_FLAG] = 1;
-		Logic::_scriptVars[COSTUMES_ADDRESS_FLAG] = 1;
-		Logic::_scriptVars[HOTEL_ADDRESS_FLAG] = 1;
-		Logic::_scriptVars[MUSEUM_ADDRESS_FLAG] = 1;
-		Logic::_scriptVars[HOSPITAL_ADDRESS_FLAG] = 1;
-		Logic::_scriptVars[MONTFACN_ADDRESS_FLAG] = 1;
-		Logic::_scriptVars[AEROPORT_ADDRESS_FLAG] = 1;
-		Logic::_scriptVars[NERVAL_ADDRESS_FLAG] = 1;
-
-		Logic::_scriptVars[IRELAND_MAP_FLAG] = 1;
-		Logic::_scriptVars[SPAIN_MAP_FLAG] = 1;
-		Logic::_scriptVars[SYRIA_FLAG] = 2;
-
-		Logic::_scriptVars[TAILOR_PHONE_FLAG] = 1;
-	}
-	//-------------------------------------------------------------------------------------------------------
-	// IRELAND
-	else if ((startNumber>=19)&&(startNumber<=26))
-	{
-		Logic::_scriptVars[PARIS_FLAG] = 9;
-
-		// already carrying these objects by the time we reach Ireland...
-		_logic->fnAddObject(0,0,RED_NOSE,0,0,0,0,0);
-		_logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LAB_PASS,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LIFTING_KEYS,0,0,0,0,0);
-		_logic->fnAddObject(0,0,MATCHBOOK,0,0,0,0,0);
-		_logic->fnAddObject(0,0,BUZZER,0,0,0,0,0);
-		_logic->fnAddObject(0,0,TISSUE,0,0,0,0,0);
-
-		switch (startNumber)
-		{
-			//---------------------------
-			case 19:	// ireland_street
-			{
-				Logic::_scriptVars[CHANGE_X] = 256;
-				Logic::_scriptVars[CHANGE_Y] = 966;
-				Logic::_scriptVars[CHANGE_DIR] = UP_RIGHT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_19;
-			}
-			break;
-			//---------------------------
-			case 20:	// macdevitts
-			{
-				Logic::_scriptVars[CHANGE_X] = 194;
-				Logic::_scriptVars[CHANGE_Y] = 417;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_RIGHT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_20;
-
-				Logic::_scriptVars[FARMER_MOVED_FLAG] = 1;
-				Logic::_scriptVars[FARMER_SEAN_FLAG] = 5;
-
-				Logic::_scriptVars[PUB_FLAP_FLAG] = 1;
-				Logic::_scriptVars[PUB_TRAP_DOOR] = 2;
-				Logic::_scriptVars[KNOWS_PEAGRAM_FLAG] = 1;
-			}
-			break;
-			//---------------------------
-			case 21:	// pub_cellar
-			{
-				Logic::_scriptVars[CHANGE_X] = 291;
-				Logic::_scriptVars[CHANGE_Y] = 444;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_RIGHT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_21;
-
-				_logic->fnAddObject(0,0,BEER_TOWEL,0,0,0,0,0);
-				
-				Logic::_scriptVars[FARMER_MOVED_FLAG] = 1;
-				Logic::_scriptVars[FLEECY_STUCK] = 1;
-				Logic::_scriptVars[LIFTING_KEYS_IN_HOLE_23] = 1;
-			}
-			break;
-			//---------------------------
-			case 22:	// castle_gate
-			{
-				Logic::_scriptVars[CHANGE_X] = 547;
-				Logic::_scriptVars[CHANGE_Y] = 500;
-				Logic::_scriptVars[CHANGE_DIR] = UP_LEFT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_22;
-
-				Logic::_scriptVars[IRELAND_FLAG] = 4;	// so we can get rid of farmer
-			}
-			break;
-			//---------------------------
-			case 23:	// castle_hay_top
-			{
-				Logic::_scriptVars[CHANGE_X] = 535;
-				Logic::_scriptVars[CHANGE_Y] = 510;
-				Logic::_scriptVars[CHANGE_DIR] = UP;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_23;
-			}
-			break;
-			//---------------------------
-			case 24:	// castle_yard
-			{
-				Logic::_scriptVars[CHANGE_X] = 815;
-				Logic::_scriptVars[CHANGE_Y] = 446;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_24;
-			}
-			break;
-			//---------------------------
-			case 25:	// castle_dig
-			{
-				Logic::_scriptVars[CHANGE_X] = 369;
-				Logic::_scriptVars[CHANGE_Y] = 492;
-				Logic::_scriptVars[CHANGE_DIR] = LEFT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_25;
-
-				_logic->fnAddObject(0,0,BEER_TOWEL,0,0,0,0,0);
-
-				Logic::_scriptVars[BEER_TOWEL_BEEN_WET] = 1;
-				Logic::_scriptVars[WET_BEER_TOWEL_TIMER] = 1000;
-			}
-			break;
-			//---------------------------
-			case 26:	// cellar_dark
-			{
-				Logic::_scriptVars[CHANGE_X] = 291;
-				Logic::_scriptVars[CHANGE_Y] = 444;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_RIGHT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_26;
-			}
-			break;
-			//---------------------------
-		}
-	}
-	//-------------------------------------------------------------------------------------------------------
-	// SYRIA
-
-	else if ((startNumber >= 45) && (startNumber <= 55))
-	{
-		Logic::_scriptVars[PARIS_FLAG] = 1;
-
-		// already carrying these objects by the time we reach Syria...
-		_logic->fnAddObject(0,0,BALL,0,0,0,0,0);
-		_logic->fnAddObject(0,0,RED_NOSE,0,0,0,0,0);
-		_logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LIFTING_KEYS,0,0,0,0,0);
-		_logic->fnAddObject(0,0,MATCHBOOK,0,0,0,0,0);
-		_logic->fnAddObject(0,0,BUZZER,0,0,0,0,0);
-		_logic->fnAddObject(0,0,TISSUE,0,0,0,0,0);
-
-		Logic::_scriptVars[CHANGE_STANCE] = STAND;		// use STAND for all starts
-		
-		switch (startNumber)
-		{
-			//---------------------------
-			case 45:	// syria_stall
-			{
-				Logic::_scriptVars[CHANGE_X] = 410;
-				Logic::_scriptVars[CHANGE_Y] = 490;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_RIGHT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_45;
-			}
-			break;
-			//---------------------------
-			case 47:	// syria_carpet
-			{
-				Logic::_scriptVars[CHANGE_X] = 225;
-				Logic::_scriptVars[CHANGE_Y] = 775;
-				Logic::_scriptVars[CHANGE_DIR] = RIGHT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_47;
-			}
-			break;
-			//---------------------------
-			case 49:	// syria_club
-			{
-				Logic::_scriptVars[CHANGE_X] = 438;
-				Logic::_scriptVars[CHANGE_Y] = 400;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_RIGHT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_49;
-
-				_logic->fnAddObject(0,0,TOILET_BRUSH,0,0,0,0,0);
-			}
-			break;
-			//---------------------------
-			case 50:	// syria_toilet
-			{
-				Logic::_scriptVars[CHANGE_X] = 313;
-				Logic::_scriptVars[CHANGE_Y] = 440;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_RIGHT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_50;
-
-				_logic->fnAddObject(0,0,TOILET_KEY,0,0,0,0,0);
-			}
-			break;
-			//---------------------------
-			case 53:	// bull_head pan
-			{
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_53;
-
-				_logic->fnAddObject(0,0,TOWEL_CUT,0,0,0,0,0);
-			}
-			break;
-			//---------------------------
-			case 54:	// bull_head
-			{
-				Logic::_scriptVars[CHANGE_X] = 680;
-				Logic::_scriptVars[CHANGE_Y] = 425;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_54;
-
-				_logic->fnAddObject(0,0,TOWEL_CUT,0,0,0,0,0);
-			}
-			break;
-			//---------------------------
-			case 55:	// bull_secret
-			{
-				Logic::_scriptVars[CHANGE_X] = 825;
-				Logic::_scriptVars[CHANGE_Y] = 373;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_55;
-			}
-			break;
-			//---------------------------
-			default:
-			{
-				error("Can't start in location %d", startNumber);
-			}
-			break;
-			//---------------------------
-		}
-	}
-	//-------------------------------------------------------------------------------------------------------
-	// SPAIN 1 or 2
-
-	else if ( ((startNumber >= 56) && (startNumber <= 62)) || 
-		  ((startNumber >=956) && (startNumber <= 962)) )
-	{
-		Logic::_scriptVars[PARIS_FLAG] = 1;
-
-		if (startNumber > 900)	// SPAIN 2
-		{
-			startNumber -= 900;	// set to correct start location
-			Logic::_scriptVars[SPAIN_VISIT] = 2;	// set my own script flag to indicate 2nd visit
-		}
-		else
-			Logic::_scriptVars[SPAIN_VISIT] = 1;	// set my own script flag to indicate 1st visit
-
-		// already carrying these objects by the time we reach Spain...
-		_logic->fnAddObject(0,0,RED_NOSE,0,0,0,0,0);
-		_logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LAB_PASS,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LIFTING_KEYS,0,0,0,0,0);
-		_logic->fnAddObject(0,0,BUZZER,0,0,0,0,0);
-		_logic->fnAddObject(0,0,TISSUE,0,0,0,0,0);
-		_logic->fnAddObject(0,0,BALL,0,0,0,0,0);
-		_logic->fnAddObject(0,0,MATCHBOOK,0,0,0,0,0);
-
-		if (Logic::_scriptVars[SPAIN_VISIT] == 1)	// 1st visit
-			_logic->fnAddObject(0,0,PRESSURE_GAUGE,0,0,0,0,0);
-		else						// 2nd visit
-			_logic->fnAddObject(0,0,POLISHED_CHALICE,0,0,0,0,0);
-
-		switch (startNumber)
-		{
-			//---------------------------
-			case 56:	// Countess' room
-			{
-				Logic::_scriptVars[CHANGE_X] = 572;
-				Logic::_scriptVars[CHANGE_Y] = 443;
-				Logic::_scriptVars[CHANGE_DIR] = LEFT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_56;
-			}
-			break;
-			//---------------------------
-			case 57:	// Spain Drive
-			{
-				Logic::_scriptVars[CHANGE_X] = 1630;
-				Logic::_scriptVars[CHANGE_Y] = 460;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_57;
-			}
-			break;
-			//---------------------------
-			case 58:	// Mausoleum Exterior
-			{
-				Logic::_scriptVars[CHANGE_X] = SC58_PATH_X;
-				Logic::_scriptVars[CHANGE_Y] = SC58_PATH_Y;
-				Logic::_scriptVars[CHANGE_DIR] = UP_RIGHT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_58;
-			}
-			break;
-			//---------------------------
-			case 59:	// Mausoleum Interior
-			{
-				Logic::_scriptVars[CHANGE_X] = 750;
-				Logic::_scriptVars[CHANGE_Y] = 455;
-				Logic::_scriptVars[CHANGE_DIR] = LEFT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_59;
-			}
-			break;
-			//---------------------------
-			case 60:	// Spain Reception
-			{
-				Logic::_scriptVars[CHANGE_X] = 750;
-				Logic::_scriptVars[CHANGE_Y] = 475;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_LEFT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_60;
-			}
-			break;
-			//---------------------------
-			case 61:	// Spain Well
-			{
-				Logic::_scriptVars[CHANGE_X] = 400;
-				Logic::_scriptVars[CHANGE_Y] = 345;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN;
-				Logic::_scriptVars[CHANGE_PLACE] = LEFT_FLOOR_61;
-
-				_logic->fnAddObject(0,0,STONE_KEY,0,0,0,0,0);
-				_logic->fnAddObject(0,0,MIRROR,0,0,0,0,0);
-			}
-			break;
-			//---------------------------
-			case 62:	// CHESS PUZZLE
-			{
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_62;  // so it doesn't crash!!
-				
-				_logic->_scriptVars[TOP_MENU_DISABLED] = 1; // because it's irrelevant to the chess puzzle
-				_logic->_scriptVars[GEORGE_ALLOWED_REST_ANIMS] = 0; // because it's irrelevant to the chess puzzle
-
-				compact = (Object*)_objectMan->fetchObject(PLAYER);
-				_logic->fnNoSprite(compact, PLAYER, 0, 0, 0, 0, 0, 0);
-			}
-			break;
-			//---------------------------
-		}
-	}
-	//-------------------------------------------------------------------------------------------------------
-	// NIGHT TRAIN
-
-	else if ((startNumber >= 63) && (startNumber <= 70))
-	{
-		Logic::_scriptVars[PARIS_FLAG] = 18;
-
-		switch (startNumber)
-		{
-			//---------------------------
-			case 63:	// train_one
-			{
-				Logic::_scriptVars[CHANGE_X] = 710;
-				Logic::_scriptVars[CHANGE_Y] = 450;
-				Logic::_scriptVars[CHANGE_DIR] = LEFT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_63;
-				Logic::_scriptVars[DOOR_SC65_FLAG] = 2;
-				Logic::_scriptVars[DOOR_ONE_63_OPEN] = 0;
-				Logic::_scriptVars[DOOR_65_OPEN] = 1;
-				Logic::_scriptVars[VAIL_TEXT] = 1;
-			}
-			break;
-			//---------------------------
-			case 65:	// compt_one
-			{
-				Logic::_scriptVars[CHANGE_X] = 460;
-				Logic::_scriptVars[CHANGE_Y] = 430;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_65;
-			}
-			//---------------------------
-			case 66:	// compt_two
-			{
-				Logic::_scriptVars[CHANGE_X] = 460;
-				Logic::_scriptVars[CHANGE_Y] = 430;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_66;
-			
-				Logic::_scriptVars[WINDOW_66_OPEN] = 1;
-			}
-			break;
-			//---------------------------
-			case 67:	// compt_three
-			{
-				Logic::_scriptVars[CHANGE_X] = 460;
-				Logic::_scriptVars[CHANGE_Y] = 430;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_67;
-			}
-			break;
-			//---------------------------
-			case 69:	// train_guard
-			{
-				Logic::_scriptVars[CHANGE_X] = 310;
-				Logic::_scriptVars[CHANGE_Y] = 430;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_69;
-			}
-			break;
-			//---------------------------
-			default:
-			{
-				error("Can't start in location %d", startNumber);
-			}
-			break;
-			//---------------------------
-		}
-	}
-	//-------------------------------------------------------------------------------------------------------
-	// SCOTLAND
-
-	else if ((startNumber >= 71) && (startNumber <= 73))
-	{
-		Logic::_scriptVars[PARIS_FLAG] = 1;
-
-		// already carrying these objects by the time we reach Scotland...
-		_logic->fnAddObject(0,0,RED_NOSE,0,0,0,0,0);
-		_logic->fnAddObject(0,0,PHOTOGRAPH,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LAB_PASS,0,0,0,0,0);
-		_logic->fnAddObject(0,0,LIFTING_KEYS,0,0,0,0,0);
-		_logic->fnAddObject(0,0,BUZZER,0,0,0,0,0);
-
-		switch (startNumber)
-		{
-			//---------------------------
-			case 71:	// churchyard
-			{
-				Logic::_scriptVars[CHANGE_X] = 1538;
-				Logic::_scriptVars[CHANGE_Y] = 444;
-				Logic::_scriptVars[CHANGE_DIR] = LEFT;
-				Logic::_scriptVars[CHANGE_PLACE] = RIGHT_FLOOR_71;
-
-				Logic::_scriptVars[NICO_SCOT_SCREEN] = 71;
-				Logic::_scriptVars[NICO_POSITION_71] = 1;
-			}
-			break;
-			//---------------------------
-			case 72:	// church_tower
-			{
-				Logic::_scriptVars[CHANGE_X] = 150;
-				Logic::_scriptVars[CHANGE_Y] = 503;
-				Logic::_scriptVars[CHANGE_DIR] = RIGHT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_72;
-
-				Logic::_scriptVars[NICO_SCOT_SCREEN] = 72;
-			}
-			break;
-			//---------------------------
-			case 73:	// crypt
-			{
-				Logic::_scriptVars[CHANGE_X] = 250;
-				Logic::_scriptVars[CHANGE_Y] = 390;
-				Logic::_scriptVars[CHANGE_DIR] = DOWN_RIGHT;
-				Logic::_scriptVars[CHANGE_PLACE] = FLOOR_73;
-
-				Logic::_scriptVars[NICO_SCOT_SCREEN] = 73;
-				Logic::_scriptVars[NICO_POSITION_73] = 1;
-			}
-			break;
-			//---------------------------	
-		}
-	}
-	else
-	{
-		error("Can't start in location %d", startNumber);
-	}
-
-	compact = (Object*)_objectMan->fetchObject(PLAYER);
-	_logic->fnEnterSection(compact, PLAYER, startNumber, 0, 0, 0, 0, 0);	// (automatically opens the compact resource for that section)
-	_systemVars.controlPanelMode = CP_NORMAL;
-	_systemVars.wantFade = true;
-}
-
 void SwordEngine::checkCdFiles(void) { // check if we're running from cd, hdd or what...
 	const char *speechFiles[] = {
 #ifdef USE_MAD
@@ -1149,18 +285,18 @@
 	
 	checkCdFiles();
 
-	uint8 startPos = ConfMan.getInt("boot_param");
+	uint16 startPos = ConfMan.getInt("boot_param");
 	if (startPos)
-		startPositions(startPos);
+		_logic->startPositions(startPos);
 	else {
 		if (_control->savegamesExist()) {
 			_systemVars.controlPanelMode = CP_NEWGAME;
 			if (_control->runPanel() == CONTROL_GAME_RESTORED)
 				_control->doRestore();
 			else if (!_systemVars.engineQuit)
-				startPositions(0);
+				_logic->startPositions(0);
 		} else // no savegames, start new game.
-			startPositions(0);
+			_logic->startPositions(0);
 	}
 	_systemVars.controlPanelMode = CP_NORMAL;
 
@@ -1173,7 +309,7 @@
 			if (action == CONTROL_GAME_RESTORED)
 				_control->doRestore();
 			else if (action == CONTROL_RESTART_GAME)
-				startPositions(1);
+				_logic->startPositions(1);
 			_systemVars.forceRestart = false;
 			_systemVars.controlPanelMode = CP_NORMAL;
 		}
@@ -1227,7 +363,6 @@
 
 			_screen->draw();
 			_mouse->animate();
-
 			_sound->engine();
 			_menu->refresh(MENU_TOP);
 			_menu->refresh(MENU_BOT);
@@ -1235,20 +370,13 @@
 			newTime = _system->getMillis();
 			if (newTime - frameTime < 1000 / FRAME_RATE) {
 				scrollFrameShown = _screen->showScrollFrame();
-				int32 restDelay = (1000 / (FRAME_RATE * 2)) - (_system->getMillis() - frameTime);
-				if (restDelay > 0)
-					delay((uint)restDelay);
+				delay((1000 / (FRAME_RATE * 2)) - (_system->getMillis() - frameTime));
 			}
 
 			newTime = _system->getMillis();
 			if ((newTime - frameTime < 1000 / FRAME_RATE) || (!scrollFrameShown))
 				_screen->updateScreen();
-
-			int32 frameDelay = (1000 / FRAME_RATE) - (_system->getMillis() - frameTime);
-			if (frameDelay > 0)
-				delay((uint)frameDelay);
-			else
-				delay(0);
+			delay((1000 / FRAME_RATE) - (_system->getMillis() - frameTime));			
 
 			_mouse->engine( _mouseX, _mouseY, _mouseState);
 
@@ -1267,13 +395,11 @@
 
 		if ((retCode == 0) && (Logic::_scriptVars[SCREEN] != 53) && _systemVars.wantFade && (!_systemVars.engineQuit)) {
 			_screen->fadeDownPalette();
+			int32 relDelay = (int32)_system->getMillis();
 			while (_screen->stillFading()) {
-				int32 relDelay = (int32)_system->getMillis() + (1000 / FRAME_RATE);
+				relDelay += (1000 / FRAME_RATE);
 				_screen->updateScreen();
-				relDelay -= (int32)_system->getMillis();
-				relDelay = (relDelay > 0) ? relDelay : 0; 
-
-				delay(relDelay);
+				delay(relDelay - (int32)_system->getMillis());
 			}
 		}
 
@@ -1284,17 +410,15 @@
 	return retCode;
 }
 
-void SwordEngine::delay(uint amount) { //copied and mutilated from sky.cpp
+void SwordEngine::delay(int32 amount) { //copied and mutilated from sky.cpp
 
 	OSystem::Event event;
-
 	uint32 start = _system->getMillis();
 
 	do {
 		while (_system->pollEvent(event)) {
 			switch (event.type) {
 			case OSystem::EVENT_KEYDOWN:
-
 				// Make sure backspace works right (this fixes a small issue on OS X)
 				if (event.kbd.keycode == 8)
 					_keyPressed = 8;
@@ -1332,10 +456,8 @@
 				break;
 			}
 		}
-
 		if (amount > 0)
 			_system->delayMillis(10);
-
 	} while (_system->getMillis() < start + amount);
 }
 

Index: sword1.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/sword1.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- sword1.h	5 Dec 2004 02:52:41 -0000	1.21
+++ sword1.h	8 Dec 2004 04:38:39 -0000	1.22
@@ -80,12 +80,11 @@
 	int go();
 	int init(GameDetector &detector);
 private:
-	void delay(uint amount);
+	void delay(int32 amount);
 
 	void checkCdFiles(void);
 	void checkCd(void);
 	uint8 mainLoop(void);
-	void startPositions(int32 startNumber);
 
 	uint16 _mouseX, _mouseY, _mouseState;
 	uint8 _keyPressed;

Index: sworddefs.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/sworddefs.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- sworddefs.h	24 Nov 2004 21:03:21 -0000	1.15
+++ sworddefs.h	8 Dec 2004 04:38:39 -0000	1.16
@@ -126,52 +126,54 @@
 	BS1_PORT
 };
 
-#define SAM 2162689
-#define PLAYER 8388608
-#define GEORGE 8388608
-#define NICO 8454144
+#define SAM		2162689
+#define PLAYER	8388608
+#define GEORGE	8388608
+#define NICO	8454144
+#define BENOIR	8585216
+#define ROSSO	8716288
+#define DUANE	8781824
+#define MOUE	9502720
+#define ALBERT	9568256
 
-#define UP 0
-#define UP_RIGHT 1
-#define U_R 1
-#define RIGHT 2
-#define DOWN_RIGHT 3
-#define D_R 3
-#define DOWN 4
-#define DOWN_LEFT 5
-#define D_L 5
-#define LEFT 6
-#define UP_LEFT 7
-#define U_L 7
-#define BENOIR 8585216
-#define ROSSO 8716288
-#define MOUE 9502720
-#define ALBERT 9568256
-#define DUANE 8781824
+#define STAND		0
+#define UP			0
+#define UP_RIGHT	1
+#define U_R			1
+#define RIGHT		2
+#define DOWN_RIGHT	3
+#define D_R			3
+#define DOWN		4
+#define DOWN_LEFT	5
+#define D_L			5
+#define LEFT		6
+#define UP_LEFT		7
+#define U_L			7
+
+#define BEER_TOWEL 3
+#define HOTEL_KEY 4
+#define BALL 5
+#define RED_NOSE 7
+#define POLISHED_CHALICE 8
+#define PHOTOGRAPH 10
+#define GEM 13
+#define LAB_PASS 17
 #define LIFTING_KEYS 18
+#define MANUSCRIPT 19
+#define PLASTER 23
 #define ROSSO_CARD 27
 #define TISSUE 32
-#define PHOTOGRAPH 10
-#define HOTEL_KEY 4
-#define MANUSCRIPT 19
-#define LAB_PASS 17
 #define LENS 37
-#define RED_NOSE 7
 #define TRIPOD 36
-#define GEM 13
-#define PLASTER 23
-#define POLISHED_CHALICE 8
 #define CHALICE 31
 #define MATCHBOOK 20
+#define PRESSURE_GAUGE 24
 #define BUZZER 26
-#define BEER_TOWEL 3
-#define BALL 5
-#define TOILET_BRUSH 33
 #define TOILET_KEY 28
-#define TOWEL_CUT 39
-#define PRESSURE_GAUGE 24
-#define MIRROR 38
 #define STONE_KEY 30
+#define TOILET_BRUSH 33
+#define MIRROR 38
+#define TOWEL_CUT 39
 
 #define SC58_PATH_X 225
 #define SC58_PATH_Y 369
@@ -348,8 +350,6 @@
 #define IT_POPWORDOFFSET        31
 #define IT_PUSHWORDOFFSET       32
 
-#define STAND 0
-
 enum ScriptVariableNames {
 	RETURN_VALUE = 0,
 	RETURN_VALUE_2,





More information about the Scummvm-git-logs mailing list