aboutsummaryrefslogtreecommitdiff
path: root/sword1
diff options
context:
space:
mode:
Diffstat (limited to 'sword1')
-rw-r--r--sword1/logic.cpp99
-rw-r--r--sword1/logic.h44
-rw-r--r--sword1/staticres.cpp583
-rw-r--r--sword1/sword1.cpp900
-rw-r--r--sword1/sword1.h3
-rw-r--r--sword1/sworddefs.h74
6 files changed, 768 insertions, 935 deletions
diff --git a/sword1/logic.cpp b/sword1/logic.cpp
index 571535465d..c1e08929fa 100644
--- a/sword1/logic.cpp
+++ b/sword1/logic.cpp
@@ -1676,6 +1676,105 @@ uint16 Logic::inRange(uint16 a, uint16 b, uint16 c) {
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},
diff --git a/sword1/logic.h b/sword1/logic.h
index edc65c8484..503fd98547 100644
--- a/sword1/logic.h
+++ b/sword1/logic.h
@@ -54,15 +54,9 @@ public:
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 @@ private:
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 @@ private:
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 @@ private:
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 @@ private:
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
diff --git a/sword1/staticres.cpp b/sword1/staticres.cpp
index 2294ece0fa..59ea806fbf 100644
--- a/sword1/staticres.cpp
+++ b/sword1/staticres.cpp
@@ -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 @@ const uint16 Sound::_roomsFixedFx[TOTAL_ROOMS][TOTAL_FX_PER_ROOM] =
{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__
diff --git a/sword1/sword1.cpp b/sword1/sword1.cpp
index 86e986dc40..005467e706 100644
--- a/sword1/sword1.cpp
+++ b/sword1/sword1.cpp
@@ -217,870 +217,6 @@ void SwordEngine::reinitialize(void) {
_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 @@ int SwordEngine::go() {
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 @@ int SwordEngine::go() {
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 @@ uint8 SwordEngine::mainLoop(void) {
_screen->draw();
_mouse->animate();
-
_sound->engine();
_menu->refresh(MENU_TOP);
_menu->refresh(MENU_BOT);
@@ -1235,20 +370,13 @@ uint8 SwordEngine::mainLoop(void) {
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 @@ uint8 SwordEngine::mainLoop(void) {
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 @@ uint8 SwordEngine::mainLoop(void) {
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 @@ void SwordEngine::delay(uint amount) { //copied and mutilated from sky.cpp
break;
}
}
-
if (amount > 0)
_system->delayMillis(10);
-
} while (_system->getMillis() < start + amount);
}
diff --git a/sword1/sword1.h b/sword1/sword1.h
index f7f21803f1..9587de304a 100644
--- a/sword1/sword1.h
+++ b/sword1/sword1.h
@@ -80,12 +80,11 @@ protected:
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;
diff --git a/sword1/sworddefs.h b/sword1/sworddefs.h
index 6f142b9b3a..d4b27466e3 100644
--- a/sword1/sworddefs.h
+++ b/sword1/sworddefs.h
@@ -126,52 +126,54 @@ enum Language {
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 @@ enum Language {
#define IT_POPWORDOFFSET 31
#define IT_PUSHWORDOFFSET 32
-#define STAND 0
-
enum ScriptVariableNames {
RETURN_VALUE = 0,
RETURN_VALUE_2,