diff options
Diffstat (limited to 'sword1')
-rw-r--r-- | sword1/logic.cpp | 99 | ||||
-rw-r--r-- | sword1/logic.h | 44 | ||||
-rw-r--r-- | sword1/staticres.cpp | 583 | ||||
-rw-r--r-- | sword1/sword1.cpp | 900 | ||||
-rw-r--r-- | sword1/sword1.h | 3 | ||||
-rw-r--r-- | sword1/sworddefs.h | 74 |
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, |