From 64656342a999f2fcc6d4b0c8fd789e44aa2048ba Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 14 Oct 2011 16:08:34 -0400 Subject: PEGASUS: Add the Mars reactor element code --- engines/pegasus/neighborhood/mars/reactor.cpp | 298 ++++++++++++++++++++++++++ engines/pegasus/neighborhood/mars/reactor.h | 108 ++++++++++ 2 files changed, 406 insertions(+) create mode 100755 engines/pegasus/neighborhood/mars/reactor.cpp create mode 100755 engines/pegasus/neighborhood/mars/reactor.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/reactor.cpp b/engines/pegasus/neighborhood/mars/reactor.cpp new file mode 100755 index 0000000000..dd44fc49e1 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/reactor.cpp @@ -0,0 +1,298 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * aint32 with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/pegasus.h" +#include "pegasus/neighborhood/mars/reactor.h" + +namespace Pegasus { + +static const tCoordType kCurrentGuessWidth = 121; +static const tCoordType kCurrentGuessHeight = 23; + +static const tCoordType kOneGuessWidth = 25; +static const tCoordType kOneGuessHeight = 23; + +static const tResIDType kReactorChoicesPICTID = 905; + +static const tCoordType kCurrentGuessLeft = kNavAreaLeft + 146; +static const tCoordType kCurrentGuessTop = kNavAreaTop + 90; + +ReactorGuess::ReactorGuess(const tDisplayElementID id) : DisplayElement(id) { + setBounds(kCurrentGuessLeft, kCurrentGuessTop, kCurrentGuessLeft + kCurrentGuessWidth, + kCurrentGuessTop + kCurrentGuessHeight); + setDisplayOrder(kMonitorLayer); + _currentGuess[0] = -1; + _currentGuess[1] = -1; + _currentGuess[2] = -1; +} + +void ReactorGuess::initReactorGuess() { + _colors.getImageFromPICTResource(((PegasusEngine *)g_engine)->_resFork, kReactorChoicesPICTID); + startDisplaying(); + show(); +} + +void ReactorGuess::disposeReactorGuess() { + stopDisplaying(); + _colors.deallocateSurface(); +} + +void ReactorGuess::setGuess(int32 a, int32 b, int32 c) { + _currentGuess[0] = a; + _currentGuess[1] = b; + _currentGuess[2] = c; + triggerRedraw(); +} + +void ReactorGuess::draw(const Common::Rect &) { + if (_colors.isSurfaceValid()) { + Common::Rect r1(0, 0, kOneGuessWidth, kOneGuessHeight); + Common::Rect r2 = r1; + + for (int i = 0; i < 3; i++) { + if (_currentGuess[i] >= 0) { + r1.moveTo(kOneGuessWidth * _currentGuess[i], 0); + r2.moveTo(kCurrentGuessLeft + 48 * i, kCurrentGuessTop); + _colors.copyToCurrentPortTransparent(r1, r2); + } + } + } +} + +static const tCoordType kReactorChoiceHiliteWidth = 166; +static const tCoordType kReactorChoiceHiliteHeight = 26; + +static const tCoordType kChoiceHiliteLefts[6] = { + 0, + 34, + 34 + 34, + 34 + 34 + 32, + 34 + 34 + 32 + 34, + 34 + 34 + 32 + 34 + 32 +}; + +static const tResIDType kReactorChoiceHilitePICTID = 901; + +static const tCoordType kReactorChoiceHiliteLeft = kNavAreaLeft + 116; +static const tCoordType kReactorChoiceHiliteTop = kNavAreaTop + 158; + +ReactorChoiceHighlight::ReactorChoiceHighlight(const tDisplayElementID id) : DisplayElement(id) { + setBounds(kReactorChoiceHiliteLeft, kReactorChoiceHiliteTop, kReactorChoiceHiliteLeft + kReactorChoiceHiliteWidth, + kReactorChoiceHiliteTop + kReactorChoiceHiliteHeight); + setDisplayOrder(kMonitorLayer); +} + +void ReactorChoiceHighlight::initReactorChoiceHighlight() { + _colors.getImageFromPICTResource(((PegasusEngine *)g_engine)->_resFork, kReactorChoiceHilitePICTID); + startDisplaying(); + show(); +} + +void ReactorChoiceHighlight::disposeReactorChoiceHighlight() { + stopDisplaying(); + _colors.deallocateSurface(); +} + +void ReactorChoiceHighlight::draw(const Common::Rect &) { + if (_colors.isSurfaceValid()) { + for (int i = 0; i < 5; ++i) { + if (_choices.getFlag(i)) { + Common::Rect r1(0, 0, kChoiceHiliteLefts[i + 1] - kChoiceHiliteLefts[i], kReactorChoiceHiliteHeight); + Common::Rect r2 = r1; + r1.moveTo(kChoiceHiliteLefts[i], 0); + r2.moveTo(kReactorChoiceHiliteLeft + kChoiceHiliteLefts[i], kReactorChoiceHiliteTop); + _colors.copyToCurrentPort(r1, r2); + } + } + } +} + +static const tCoordType kReactorHistoryWidth = 128; +static const tCoordType kReactorHistoryHeight = 168; + +static const tCoordType kColorWidths[5] = {24, 25, 25, 26, 27}; +static const tCoordType kColorHeights[5] = {14, 15, 17, 17, 19}; + +// TODO: Remove global construction +static const tCoordType kColorTops[5] = { + 0, + kColorHeights[0], + kColorHeights[0] + kColorHeights[1], + kColorHeights[0] + kColorHeights[1] + kColorHeights[2], + kColorHeights[0] + kColorHeights[1] + kColorHeights[2] + kColorHeights[3], +}; + +static const tCoordType kHistoryLefts[5][3] = { + { 302 + kNavAreaLeft, 329 + kNavAreaLeft, 357 + kNavAreaLeft }, + { 302 + kNavAreaLeft, 331 + kNavAreaLeft, 360 + kNavAreaLeft }, + { 303 + kNavAreaLeft, 333 + kNavAreaLeft, 363 + kNavAreaLeft }, + { 304 + kNavAreaLeft, 335 + kNavAreaLeft, 366 + kNavAreaLeft }, + { 305 + kNavAreaLeft, 337 + kNavAreaLeft, 369 + kNavAreaLeft } +}; + +static const tCoordType kHistoryTops[5] = { + 39 + kNavAreaTop, + 61 + kNavAreaTop, + 84 + kNavAreaTop, + 110 + kNavAreaTop, + 137 + kNavAreaTop +}; + +static const tCoordType kOneAnswerWidth = 35; +static const tCoordType kOneAnswerHeight = 27; + +static const tCoordType kDigitWidth = 16; +static const tCoordType kDigitHeight = 12; + +static const tCoordType kCorrectCountLefts[5] = { + 388 + kNavAreaLeft, + 392 + kNavAreaLeft, + 398 + kNavAreaLeft, + 402 + kNavAreaLeft, + 406 + kNavAreaLeft +}; + +static const tCoordType kCorrectCountTops[5] = { + 40 + kNavAreaTop, + 62 + kNavAreaTop, + 86 + kNavAreaTop, + 112 + kNavAreaTop, + 140 + kNavAreaTop +}; + +static const tResIDType kReactorDigitsPICTID = 902; +static const tResIDType kReactorHistoryPICTID = 903; +static const tResIDType kReactorAnswerPICTID = 904; + +static const tCoordType kReactorHistoryLeft = kNavAreaLeft + 302; +static const tCoordType kReactorHistoryTop = kNavAreaTop + 39; + +static const tCoordType kAnswerLeft = kNavAreaLeft + 304; +static const tCoordType kAnswerTop = kNavAreaTop + 180; + +ReactorHistory::ReactorHistory(const tDisplayElementID id) : DisplayElement(id) { + setBounds(kReactorHistoryLeft, kReactorHistoryTop, kReactorHistoryLeft + kReactorHistoryWidth, + kReactorHistoryTop + kReactorHistoryHeight); + setDisplayOrder(kMonitorLayer); + _numGuesses = 0; + _answer[0] = -1; + _answer[1] = -1; + _answer[2] = -1; + _showAnswer = false; +} + +void ReactorHistory::initReactorHistory() { + _colors.getImageFromPICTResource(((PegasusEngine *)g_engine)->_resFork, kReactorHistoryPICTID); + _digits.getImageFromPICTResource(((PegasusEngine *)g_engine)->_resFork, kReactorDigitsPICTID); + _answerColors.getImageFromPICTResource(((PegasusEngine *)g_engine)->_resFork, kReactorAnswerPICTID); + startDisplaying(); + show(); +} + +void ReactorHistory::disposeReactorHistory() { + stopDisplaying(); + _colors.deallocateSurface(); +} + +void ReactorHistory::addGuess(int32 a, int32 b, int32 c) { + _history[_numGuesses][0] = a; + _history[_numGuesses][1] = b; + _history[_numGuesses][2] = c; + _numGuesses++; + triggerRedraw(); +} + +void ReactorHistory::clearHistory() { + _numGuesses = 0; + _showAnswer = false; + triggerRedraw(); +} + +void ReactorHistory::setAnswer(int32 a, int32 b, int32 c) { + _answer[0] = a; + _answer[1] = b; + _answer[2] = c; +} + +void ReactorHistory::showAnswer() { + _showAnswer = true; + triggerRedraw(); +} + +bool ReactorHistory::isSolved() { + for (int i = 0; i < _numGuesses; i++) + if (_history[i][0] == _answer[0] && _history[i][1] == _answer[1] && _history[i][2] == _answer[2]) + return true; + + return false; +} + +void ReactorHistory::draw(const Common::Rect &) { + if (_colors.isSurfaceValid() && _digits.isSurfaceValid()) { + for (int i = 0; i < _numGuesses; ++i) { + Common::Rect r1(0, 0, kColorWidths[i], kColorHeights[i]); + Common::Rect r2 = r1; + Common::Rect r3(0, 0, kDigitWidth, kDigitHeight); + Common::Rect r4 = r3; + int correct = 0; + + for (int j = 0; j < 3; ++j) { + r1.moveTo(kColorWidths[i] * _history[i][j], kColorTops[i]); + r2.moveTo(kHistoryLefts[i][j], kHistoryTops[i]); + _colors.copyToCurrentPortTransparent(r1, r2); + + if (_history[i][j] == _answer[j]) + correct++; + } + + r3.moveTo(kDigitWidth * correct, 0); + r4.moveTo(kCorrectCountLefts[i], kCorrectCountTops[i]); + _digits.copyToCurrentPort(r3, r4); + } + + if (_showAnswer && _answerColors.isSurfaceValid()) { + Common::Rect r1(0, 0, kOneAnswerWidth, kOneAnswerHeight); + Common::Rect r2 = r1; + + for (int i = 0; i < 3; i++) { + r1.moveTo(kOneAnswerWidth * _answer[i], 0); + r2.moveTo(kAnswerLeft + 34 * i, kAnswerTop); + _answerColors.copyToCurrentPortTransparent(r1, r2); + } + } + } +} + +int32 ReactorHistory::getCurrentNumCorrect() { + int correct = 0; + + for (int i = 0; i < 3; i++) + if (_history[_numGuesses - 1][i] == _answer[i]) + correct++; + + return correct; +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/reactor.h b/engines/pegasus/neighborhood/mars/reactor.h new file mode 100755 index 0000000000..671970102b --- /dev/null +++ b/engines/pegasus/neighborhood/mars/reactor.h @@ -0,0 +1,108 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_REACTOR_H +#define PEGASUS_NEIGHBORHOOD_MARS_REACTOR_H + +#include "pegasus/elements.h" +#include "pegasus/surface.h" +#include "pegasus/util.h" + +namespace Pegasus { + +class ReactorGuess : public DisplayElement { +public: + ReactorGuess(const tDisplayElementID); + virtual ~ReactorGuess() {} + + void initReactorGuess(); + void disposeReactorGuess(); + + void setGuess(int32, int32, int32); + + void draw(const Common::Rect &); + +protected: + int32 _currentGuess[3]; + + Surface _colors; +}; + +class ReactorChoiceHighlight : public DisplayElement { +public: + ReactorChoiceHighlight(const tDisplayElementID); + virtual ~ReactorChoiceHighlight() {} + + void initReactorChoiceHighlight(); + void disposeReactorChoiceHighlight(); + + void resetHighlight() { + _choices.clearAllFlags(); + triggerRedraw(); + } + + bool choiceHighlighted(uint32 whichChoice) { return _choices.getFlag(whichChoice); } + + void draw(const Common::Rect &); + + void highlightChoice(uint32 whichChoice) { + _choices.setFlag(whichChoice); + triggerRedraw(); + } + +protected: + Surface _colors; + FlagsArray _choices; +}; + +class ReactorHistory : public DisplayElement { +public: + ReactorHistory(const tDisplayElementID); + virtual ~ReactorHistory() {} + + void initReactorHistory(); + void disposeReactorHistory(); + + void draw(const Common::Rect &); + + void addGuess(int32, int32, int32); + int32 getNumGuesses() { return _numGuesses; } + void clearHistory(); + void setAnswer(int32, int32, int32); + void showAnswer(); + bool isSolved(); + int32 getCurrentNumCorrect(); + +protected: + Surface _colors, _digits, _answerColors; + int32 _answer[3]; + int32 _history[5][3]; + int32 _numGuesses; + bool _showAnswer; +}; + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From 1c949d375a4f0dabb179e0e035bb3dbf8c059abf Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Sat, 15 Oct 2011 19:48:36 -0400 Subject: PEGASUS: Add the Mars neighborhood Does not include the space chase just yet or canyon chase. The robot timer seems a bit wonky right now and doesn't stop, but everything else seems to be working. --- engines/pegasus/neighborhood/mars/mars.cpp | 3419 ++++++++++++++++++++++++++++ engines/pegasus/neighborhood/mars/mars.h | 198 ++ 2 files changed, 3617 insertions(+) create mode 100755 engines/pegasus/neighborhood/mars/mars.cpp create mode 100755 engines/pegasus/neighborhood/mars/mars.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp new file mode 100755 index 0000000000..3f46edb9a3 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -0,0 +1,3419 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/energymonitor.h" +#include "pegasus/gamestate.h" +#include "pegasus/pegasus.h" +#include "pegasus/ai/ai_area.h" +#include "pegasus/items/biochips/opticalchip.h" +#include "pegasus/items/biochips/shieldchip.h" +#include "pegasus/items/inventory/airmask.h" +#include "pegasus/neighborhood/mars/mars.h" + +namespace Pegasus { + +const TimeValue kMarsOxyMaskOnIn = 0; +const TimeValue kMarsOxyMaskOnOut = 1560; + +const TimeValue kMarsAirlockButtonBeepIn = 1560; +const TimeValue kMarsAirlockButtonBeepOut = 1620; + +const TimeValue kMarsColorMatchingButtonBeepIn = 1620; +const TimeValue kMarsColorMatchingButtonBeepOut = 1680; + +const TimeValue kMarsKioskBeepIn = 1680; +const TimeValue kMarsKioskBeepOut = 1740; + +const TimeValue kMarsBumpIntoWallIn = 1740; +const TimeValue kMarsBumpIntoWallOut = 1888; + +const TimeValue kMarsGantryDoorCloseIn = 1888; +const TimeValue kMarsGantryDoorCloseOut = 2866; + +const TimeValue kMarsTransportDoorCloseIn = 2866; +const TimeValue kMarsTransportDoorCloseOut = 3593; + +const TimeValue kMarsAirlockPressurizeIn = 3593; +const TimeValue kMarsAirlockPressurizeOut = 4766; + +const TimeValue kMarsBigAirlockDoorCloseIn = 4766; +const TimeValue kMarsBigAirlockDoorCloseOut = 7872; + +const TimeValue kMarsSmallAirlockDoorCloseIn = 7872; +const TimeValue kMarsSmallAirlockDoorCloseOut = 10000; + +const TimeValue kMarsMazeDoorCloseIn = 10000; +const TimeValue kMarsMazeDoorCloseOut = 10969; + +const TimeValue kMarsRobotTakesTransportIn = 10969; +const TimeValue kMarsRobotTakesTransportOut = 12802; + +const TimeValue kMarsPodDepartedUpperPlatformIn = 12802; +const TimeValue kMarsPodDepartedUpperPlatformOut = 15783; + +const TimeValue kMarsPodDepartedLowerPlatformIn = 15783; +const TimeValue kMarsPodDepartedLowerPlatformOut = 18736; + +const TimeValue kMarsPodArrivedUpperPlatformIn = 18736; +const TimeValue kMarsPodArrivedUpperPlatformOut = 21605; + +const TimeValue kMarsCheckInRequiredIn = 21605; +const TimeValue kMarsCheckInRequiredOut = 27463; + +const TimeValue kMarsCantOpenShuttleIn = 27463; +const TimeValue kMarsCantOpenShuttleOut = 29214; + +const TimeValue kMarsShuttleLockOverrideIn = 29214; +const TimeValue kMarsShuttleLockOverrideOut = 30330; + +const TimeValue kMarsNoShuttleIn = 30330; +const TimeValue kMarsNoShuttleOut = 31502; + +const TimeValue kMustBeUnlockedIn = 31502; +const TimeValue kMustBeUnlockedOut = 33960; + +const TimeValue kColorMatchBlueIn = 33960; +const TimeValue kColorMatchBlueOut = 34240; + +const TimeValue kColorMatchRedIn = 34240; +const TimeValue kColorMatchRedOut = 34538; + +const TimeValue kColorMatchGreenIn = 34538; +const TimeValue kColorMatchGreenOut = 34827; + +const TimeValue kColorMatchYellowIn = 34827; +const TimeValue kColorMatchYellowOut = 35162; + +const TimeValue kColorMatchPurpleIn = 35162; +const TimeValue kColorMatchPurpleOut = 35426; + +const TimeValue kColorMatchZeroNodesIn = 35426; +const TimeValue kColorMatchZeroNodesOut = 36376; + +const TimeValue kColorMatchOneNodeIn = 36376; +const TimeValue kColorMatchOneNodeOut = 37209; + +const TimeValue kColorMatchTwoNodesIn = 37209; +const TimeValue kColorMatchTwoNodesOut = 37983; + +const TimeValue kColorMatchThreeNodesIn = 37983; +const TimeValue kColorMatchThreeNodesOut = 38784; + +const TimeValue kMarsShuttle1DepartedIn = 38784; +const TimeValue kMarsShuttle1DepartedOut = 40323; + +const TimeValue kMarsShuttle2DepartedIn = 40323; +const TimeValue kMarsShuttle2DepartedOut = 41824; + +const TimeValue kShuttleCockpitIn = 41824; +const TimeValue kShuttleCockpitOut = 43126; + +const TimeValue kShuttleOnboardIn = 43126; +const TimeValue kShuttleOnboardOut = 44284; + +const TimeValue kShuttleNavigationIn = 44284; +const TimeValue kShuttleNavigationOut = 46049; + +const TimeValue kShuttleCommunicationIn = 46049; +const TimeValue kShuttleCommunicationOut = 47288; + +const TimeValue kShuttleAutoTestingIn = 47288; +const TimeValue kShuttleAutoTestingOut = 48179; + +const TimeValue kMarsThrusterAutoTestIn = 48179; +const TimeValue kMarsThrusterAutoTestOut = 49979; + +const TimeValue kShuttleAllSystemsIn = 49979; +const TimeValue kShuttleAllSystemsOut = 51065; + +const TimeValue kShuttleSecureLooseIn = 51065; +const TimeValue kShuttleSecureLooseOut = 52346; + +const TimeValue kShuttlePrepareForDropIn = 52346; +const TimeValue kShuttlePrepareForDropOut = 53216; + +const TimeValue kShuttleAllClearIn = 53216; +const TimeValue kShuttleAllClearOut = 54031; + +const TimeValue kShuttleConfiguringIn = 54031; +const TimeValue kShuttleConfiguringOut = 54994; + +const TimeValue kShuttleGeneratingIn = 54994; +const TimeValue kShuttleGeneratingOut = 56033; + +const TimeValue kShuttleBreakawayIn = 56033; +const TimeValue kShuttleBreakawayOut = 57346; + +const TimeValue kMarsAtmosphericBreakawayIn = 57346; +const TimeValue kMarsAtmosphericBreakawayOut = 59237; + +const TimeValue kMarsCockpitChatterIn = 59237; +const TimeValue kMarsCockpitChatterOut = 70344; + +const TimeValue kShuttleDamperDescIn = 70344; +const TimeValue kShuttleDamperDescOut = 73262; + +const TimeValue kShuttleGravitonDescIn = 73262; +const TimeValue kShuttleGravitonDescOut = 75296; + +const TimeValue kShuttleTractorDescIn = 75296; +const TimeValue kShuttleTractorDescOut = 78381; + +const TimeValue kShuttleTargetSightedIn = 78381; +const TimeValue kShuttleTargetSightedOut = 79074; + +const TimeValue kShuttleAutopilotEngagedIn = 79074; +const TimeValue kShuttleAutopilotEngagedOut = 80414; + +const TimeValue kMarsEDBBlastIn = 80414; +const TimeValue kMarsEDBBlastOut = 80705; + +const TimeValue kMarsGravitonBlastIn = 80705; +const TimeValue kMarsGravitonBlastOut = 81199; + +const TimeValue kMarsJunkCollisionIn = 81199; +const TimeValue kMarsJunkCollisionOut = 81961; + +const TimeValue kShuttleGravitonIn = 81961; +const TimeValue kShuttleGravitonOut = 82587; + +const TimeValue kShuttleDampingBeamIn = 82587; +const TimeValue kShuttleDampingBeamOut = 83331; + +const TimeValue kShuttleTractorBeamIn = 83331; +const TimeValue kShuttleTractorBeamOut = 83802; + +const TimeValue kShuttleHullBreachIn = 83802; +const TimeValue kShuttleHullBreachOut = 84721; + +const TimeValue kShuttleWingDamageIn = 84721; +const TimeValue kShuttleWingDamageOut = 85640; + +const TimeValue kShuttleHullDamageIn = 85640; +const TimeValue kShuttleHullDamageOut = 86513; + +const TimeValue kShuttleEnergyTooLowIn = 86513; +const TimeValue kShuttleEnergyTooLowOut = 87578; + +const TimeValue kShuttleTractorLimitedIn = 87578; +const TimeValue kShuttleTractorLimitedOut = 89164; + +const TimeValue kShuttleCantHoldIn = 89164; +const TimeValue kShuttleCantHoldOut = 90945; + +const TimeValue kShuttleBrokeFreeIn = 90945; +const TimeValue kShuttleBrokeFreeOut = 92322; + +const TimeValue kShuttleDestroyedIn = 92322; +const TimeValue kShuttleDestroyedOut = 93189; + +const TimeValue kShuttleCoordinatesIn = 93189; +const TimeValue kShuttleCoordinatesOut = 94018; + +const TimeValue kShuttleScanningIn = 94018; +const TimeValue kShuttleScanningOut = 94975; + +const TimeValue kShuttleSafeIn = 94975; +const TimeValue kShuttleSafeOut = 96176; + +const TimeValue kShuttleOverloadedIn = 96176; +const TimeValue kShuttleOverloadedOut = 101308; + +const TimeScale kMarsMovieScale = 600; +const TimeScale kMarsFramesPerSecond = 15; +const TimeScale kMarsFrameDuration = 40; + +// Alternate IDs. + +const tAlternateID kAltMarsNormal = 0; +const tAlternateID kAltMarsPodAtMars34 = 1; +const tAlternateID kAltMarsTookCard = 2; +const tAlternateID kAltMars35AirlockEast = 3; +const tAlternateID kAltMars35AirlockWest = 4; +const tAlternateID kAltMarsPodAtMars45 = 5; +const tAlternateID kAltMarsTookMask = 6; +const tAlternateID kAltMarsMaskOnFiller = 7; +const tAlternateID kAltMars60AirlockEast = 8; +const tAlternateID kAltMars60AirlockWest = 9; + +// Room IDs. + +const tRoomID kMars00 = 1; +const tRoomID kMars01 = 2; +const tRoomID kMars02 = 3; +const tRoomID kMars03 = 4; +const tRoomID kMars04 = 5; +const tRoomID kMars05 = 6; +const tRoomID kMars06 = 7; +const tRoomID kMars07 = 8; +const tRoomID kMars08 = 9; +const tRoomID kMars09 = 10; +const tRoomID kMars10 = 11; +const tRoomID kMars11 = 12; +const tRoomID kMars12 = 13; +const tRoomID kMars13 = 14; +const tRoomID kMars14 = 15; +const tRoomID kMars15 = 16; +const tRoomID kMars16 = 17; +const tRoomID kMars17 = 18; +const tRoomID kMars18 = 19; +const tRoomID kMars19 = 20; +const tRoomID kMars20 = 21; +const tRoomID kMars21 = 22; +const tRoomID kMars22 = 23; +const tRoomID kMars23 = 24; +const tRoomID kMars24 = 25; +const tRoomID kMars25 = 26; +const tRoomID kMars26 = 27; +const tRoomID kMars27 = 28; +const tRoomID kMars28 = 29; +const tRoomID kMars29 = 30; +const tRoomID kMars30 = 31; +const tRoomID kMars31 = 32; +const tRoomID kMars31South = 33; +const tRoomID kMars32 = 34; +const tRoomID kMars33 = 35; +const tRoomID kMars33North = 36; +const tRoomID kMars34 = 37; +const tRoomID kMars36 = 39; +const tRoomID kMars37 = 40; +const tRoomID kMars38 = 41; +const tRoomID kMars41 = 43; +const tRoomID kMars42 = 44; +const tRoomID kMars43 = 45; +const tRoomID kMars44 = 46; +const tRoomID kMars45 = 47; +const tRoomID kMars46 = 48; +const tRoomID kMars47 = 49; +const tRoomID kMars48 = 50; +const tRoomID kMars49 = 51; +const tRoomID kMars50 = 52; +const tRoomID kMars51 = 53; +const tRoomID kMars52 = 54; +const tRoomID kMars54 = 55; +const tRoomID kMars56 = 56; +const tRoomID kMars58 = 57; +const tRoomID kMarsRobotShuttle = 59; +const tRoomID kMarsMaze005 = 61; +const tRoomID kMarsMaze006 = 62; +const tRoomID kMarsMaze007 = 63; +const tRoomID kMarsMaze008 = 64; +const tRoomID kMarsMaze009 = 65; +const tRoomID kMarsMaze010 = 66; +const tRoomID kMarsMaze011 = 67; +const tRoomID kMarsMaze012 = 68; +const tRoomID kMarsMaze015 = 69; +const tRoomID kMarsMaze016 = 70; +const tRoomID kMarsMaze017 = 71; +const tRoomID kMarsMaze018 = 72; +const tRoomID kMarsMaze019 = 73; +const tRoomID kMarsMaze020 = 74; +const tRoomID kMarsMaze021 = 75; +const tRoomID kMarsMaze022 = 76; +const tRoomID kMarsMaze023 = 77; +const tRoomID kMarsMaze024 = 78; +const tRoomID kMarsMaze025 = 79; +const tRoomID kMarsMaze026 = 80; +const tRoomID kMarsMaze027 = 81; +const tRoomID kMarsMaze028 = 82; +const tRoomID kMarsMaze031 = 83; +const tRoomID kMarsMaze032 = 84; +const tRoomID kMarsMaze033 = 85; +const tRoomID kMarsMaze034 = 86; +const tRoomID kMarsMaze035 = 87; +const tRoomID kMarsMaze036 = 88; +const tRoomID kMarsMaze037 = 89; +const tRoomID kMarsMaze038 = 90; +const tRoomID kMarsMaze039 = 91; +const tRoomID kMarsMaze042 = 92; +const tRoomID kMarsMaze043 = 93; +const tRoomID kMarsMaze044 = 94; +const tRoomID kMarsMaze045 = 95; +const tRoomID kMarsMaze046 = 96; +const tRoomID kMarsMaze047 = 97; +const tRoomID kMarsMaze049 = 98; +const tRoomID kMarsMaze050 = 99; +const tRoomID kMarsMaze051 = 100; +const tRoomID kMarsMaze052 = 101; +const tRoomID kMarsMaze053 = 102; +const tRoomID kMarsMaze054 = 103; +const tRoomID kMarsMaze055 = 104; +const tRoomID kMarsMaze056 = 105; +const tRoomID kMarsMaze057 = 106; +const tRoomID kMarsMaze058 = 107; +const tRoomID kMarsMaze059 = 108; +const tRoomID kMarsMaze060 = 109; +const tRoomID kMarsMaze061 = 110; +const tRoomID kMarsMaze063 = 111; +const tRoomID kMarsMaze064 = 112; +const tRoomID kMarsMaze065 = 113; +const tRoomID kMarsMaze066 = 114; +const tRoomID kMarsMaze067 = 115; +const tRoomID kMarsMaze068 = 116; +const tRoomID kMarsMaze069 = 117; +const tRoomID kMarsMaze070 = 118; +const tRoomID kMarsMaze071 = 119; +const tRoomID kMarsMaze072 = 120; +const tRoomID kMarsMaze074 = 121; +const tRoomID kMarsMaze076 = 122; +const tRoomID kMarsMaze078 = 123; +const tRoomID kMarsMaze079 = 124; +const tRoomID kMarsMaze081 = 125; +const tRoomID kMarsMaze083 = 126; +const tRoomID kMarsMaze084 = 127; +const tRoomID kMarsMaze085 = 128; +const tRoomID kMarsMaze086 = 129; +const tRoomID kMarsMaze087 = 130; +const tRoomID kMarsMaze088 = 131; +const tRoomID kMarsMaze089 = 132; +const tRoomID kMarsMaze090 = 133; +const tRoomID kMarsMaze091 = 134; +const tRoomID kMarsMaze092 = 135; +const tRoomID kMarsMaze093 = 136; +const tRoomID kMarsMaze098 = 137; +const tRoomID kMarsMaze099 = 138; +const tRoomID kMarsMaze100 = 139; +const tRoomID kMarsMaze101 = 140; +const tRoomID kMarsMaze104 = 141; +const tRoomID kMarsMaze105 = 142; +const tRoomID kMarsMaze106 = 143; +const tRoomID kMarsMaze107 = 144; +const tRoomID kMarsMaze108 = 145; +const tRoomID kMarsMaze111 = 146; +const tRoomID kMarsMaze113 = 147; +const tRoomID kMarsMaze114 = 148; +const tRoomID kMarsMaze115 = 149; +const tRoomID kMarsMaze116 = 150; +const tRoomID kMarsMaze117 = 151; +const tRoomID kMarsMaze118 = 152; +const tRoomID kMarsMaze119 = 153; +const tRoomID kMarsMaze120 = 154; +const tRoomID kMarsMaze121 = 155; +const tRoomID kMarsMaze122 = 156; +const tRoomID kMarsMaze123 = 157; +const tRoomID kMarsMaze124 = 158; +const tRoomID kMarsMaze125 = 159; +const tRoomID kMarsMaze126 = 160; +const tRoomID kMarsMaze127 = 161; +const tRoomID kMarsMaze128 = 162; +const tRoomID kMarsMaze129 = 163; +const tRoomID kMarsMaze130 = 164; +const tRoomID kMarsMaze131 = 165; +const tRoomID kMarsMaze132 = 166; +const tRoomID kMarsMaze133 = 167; +const tRoomID kMarsMaze136 = 168; +const tRoomID kMarsMaze137 = 169; +const tRoomID kMarsMaze138 = 170; +const tRoomID kMarsMaze139 = 171; +const tRoomID kMarsMaze140 = 172; +const tRoomID kMarsMaze141 = 173; +const tRoomID kMarsMaze142 = 174; +const tRoomID kMarsMaze143 = 175; +const tRoomID kMarsMaze144 = 176; +const tRoomID kMarsMaze145 = 177; +const tRoomID kMarsMaze146 = 178; +const tRoomID kMarsMaze147 = 179; +const tRoomID kMarsMaze148 = 180; +const tRoomID kMarsMaze149 = 181; +const tRoomID kMarsMaze152 = 182; +const tRoomID kMarsMaze153 = 183; +const tRoomID kMarsMaze154 = 184; +const tRoomID kMarsMaze155 = 185; +const tRoomID kMarsMaze156 = 186; +const tRoomID kMarsMaze157 = 187; +const tRoomID kMarsMaze159 = 188; +const tRoomID kMarsMaze160 = 189; +const tRoomID kMarsMaze161 = 190; +const tRoomID kMarsMaze162 = 191; +const tRoomID kMarsMaze163 = 192; +const tRoomID kMarsMaze164 = 193; +const tRoomID kMarsMaze165 = 194; +const tRoomID kMarsMaze166 = 195; +const tRoomID kMarsMaze167 = 196; +const tRoomID kMarsMaze168 = 197; +const tRoomID kMarsMaze169 = 198; +const tRoomID kMarsMaze170 = 199; +const tRoomID kMarsMaze171 = 200; +const tRoomID kMarsMaze172 = 201; +const tRoomID kMarsMaze173 = 202; +const tRoomID kMarsMaze174 = 203; +const tRoomID kMarsMaze175 = 204; +const tRoomID kMarsMaze177 = 205; +const tRoomID kMarsMaze178 = 206; +const tRoomID kMarsMaze179 = 207; +const tRoomID kMarsMaze180 = 208; +const tRoomID kMarsMaze181 = 209; +const tRoomID kMarsMaze182 = 210; +const tRoomID kMarsMaze183 = 211; +const tRoomID kMarsMaze184 = 212; +const tRoomID kMarsMaze187 = 213; +const tRoomID kMarsMaze188 = 214; +const tRoomID kMarsMaze189 = 215; +const tRoomID kMarsMaze190 = 216; +const tRoomID kMarsMaze191 = 217; +const tRoomID kMarsMaze192 = 218; +const tRoomID kMarsMaze193 = 219; +const tRoomID kMarsMaze194 = 220; +const tRoomID kMarsMaze195 = 221; +const tRoomID kMarsMaze198 = 222; +const tRoomID kMarsMaze199 = 223; +const tRoomID kMarsDeathRoom = 225; + +// Hot Spot Activation IDs. + +const tHotSpotActivationID kActivationReadyForKiosk = 1; +const tHotSpotActivationID kActivationKioskChoice = 2; +const tHotSpotActivationID kActivationTunnelMapReady = 3; +const tHotSpotActivationID kActivateMarsPodClosed = 4; +const tHotSpotActivationID kActivateMarsPodOpen = 5; +const tHotSpotActivationID kActivateReadyToPressurizeAirlock = 6; +const tHotSpotActivationID kActivateAirlockPressurized = 7; +const tHotSpotActivationID kActivateMaskOnHolder = 8; +const tHotSpotActivationID kActivateMaskOnFiller = 9; +const tHotSpotActivationID kActivateReactorPlatformOut = 10; +const tHotSpotActivationID kActivateReactorPlatformIn = 11; +const tHotSpotActivationID kActivateReactorAskLowerScreen = 12; +const tHotSpotActivationID kActivateReactorReadyForNitrogen = 13; +const tHotSpotActivationID kActivateReactorReadyForCrowBar = 14; +const tHotSpotActivationID kActivateReactorAskOperation = 15; +const tHotSpotActivationID kActivateReactorRanEvaluation = 16; +const tHotSpotActivationID kActivateReactorRanDiagnostics = 17; +const tHotSpotActivationID kActivateReactorAnalyzed = 18; +const tHotSpotActivationID kActivateReactorInstructions = 19; +const tHotSpotActivationID kActivateReactorInGame = 20; +const tHotSpotActivationID kActivateReactorBombSafe = 21; +const tHotSpotActivationID kActivateReactorBombExposed = 22; +const tHotSpotActivationID kActivationRobotHeadClosed = 23; +const tHotSpotActivationID kActivationRobotHeadOpen = 24; + +// Hot Spot IDs. + +const tHotSpotID kMars11NorthKioskSpotID = 5000; +const tHotSpotID kMars11NorthKioskSightsSpotID = 5001; +const tHotSpotID kMars11NorthKioskColonySpotID = 5002; +const tHotSpotID kMars12NorthKioskSpotID = 5003; +const tHotSpotID kMars12NorthKioskSightsSpotID = 5004; +const tHotSpotID kMars12NorthKioskColonySpotID = 5005; +const tHotSpotID kMars31SouthSpotID = 5006; +const tHotSpotID kMars31SouthOutSpotID = 5007; +const tHotSpotID kMars31SouthCardSpotID = 5008; +const tHotSpotID kMars33NorthSpotID = 5009; +const tHotSpotID kMars33NorthOutSpotID = 5010; +const tHotSpotID kMars33NorthMonitorSpotID = 5011; +const tHotSpotID kMars34NorthCardDropSpotID = 5012; +const tHotSpotID kMars34SouthOpenStorageSpotID = 5013; +const tHotSpotID kMars34SouthCloseStorageSpotID = 5014; +const tHotSpotID kMars34SouthCrowbarSpotID = 5015; +const tHotSpotID kMars35EastPressurizeSpotID = 5016; +const tHotSpotID kMars35EastSpinSpotID = 5017; +const tHotSpotID kMars35WestPressurizeSpotID = 5018; +const tHotSpotID kMars35WestSpinSpotID = 5019; +const tHotSpotID kMars45NorthOpenStorageSpotID = 5020; +const tHotSpotID kMars45NorthCloseStorageSpotID = 5021; +const tHotSpotID kMars45NorthCrowbarSpotID = 5022; +const tHotSpotID kAttackRobotHotSpotID = 5023; +const tHotSpotID kMars49AirMaskSpotID = 5024; +const tHotSpotID kMars49AirMaskFilledSpotID = 5025; +const tHotSpotID kMars49AirFillingDropSpotID = 5026; +const tHotSpotID kMars52MoveLeftSpotID = 5027; +const tHotSpotID kMars52MoveRightSpotID = 5028; +const tHotSpotID kMars52ExtractSpotID = 5029; +const tHotSpotID kMars53RetractSpotID = 5030; +const tHotSpotID kMars54MoveLeftSpotID = 5031; +const tHotSpotID kMars54MoveRightSpotID = 5032; +const tHotSpotID kMars54ExtractSpotID = 5033; +const tHotSpotID kMars55RetractSpotID = 5034; +const tHotSpotID kMars56MoveLeftSpotID = 5035; +const tHotSpotID kMars56MoveRightSpotID = 5036; +const tHotSpotID kMars56ExtractSpotID = 5037; +const tHotSpotID kMars57RetractSpotID = 5038; +const tHotSpotID kMars57LowerScreenSpotID = 5039; +const tHotSpotID kMars57Retract2SpotID = 5040; +const tHotSpotID kMars57DropNitrogenSpotID = 5041; +const tHotSpotID kMars57DropCrowBarSpotID = 5042; +const tHotSpotID kMars57CantOpenPanelSpotID = 5043; +const tHotSpotID kMars57ShieldEvaluationSpotID = 5044; +const tHotSpotID kMars57MeasureOutputSpotID = 5045; +const tHotSpotID kMars57RunDiagnosticsSpotID = 5046; +const tHotSpotID kMars57BackToOperationMenuSpotID = 5047; +const tHotSpotID kMars57AnalyzeObjectSpotID = 5048; +const tHotSpotID kMars57RemoveObjectMenuSpotID = 5049; +const tHotSpotID kMars57CircuitLinkSpotID = 5050; +const tHotSpotID kMars57CancelCircuitLinkSpotID = 5051; +const tHotSpotID kMars57GameInstructionsSpotID = 5052; +const tHotSpotID kMars57UndoMoveSpotID = 5053; +const tHotSpotID kMars57RedMoveSpotID = 5054; +const tHotSpotID kMars57YellowMoveSpotID = 5055; +const tHotSpotID kMars57GreenMoveSpotID = 5056; +const tHotSpotID kMars57BlueMoveSpotID = 5057; +const tHotSpotID kMars57PurpleMoveSpotID = 5058; +const tHotSpotID kMars57LowerScreenSafelySpotID = 5059; +const tHotSpotID kMars57GrabBombSpotID = 5060; +const tHotSpotID kMars58MoveLeftSpotID = 5061; +const tHotSpotID kMars58MoveRightSpotID = 5062; +const tHotSpotID kMars58ExtractSpotID = 5063; +const tHotSpotID kMars59RetractSpotID = 5064; +const tHotSpotID kMars60EastPressurizeSpotID = 5065; +const tHotSpotID kMars60EastSpinSpotID = 5066; +const tHotSpotID kMars60WestPressurizeSpotID = 5067; +const tHotSpotID kMars60WestSpinSpotID = 5068; +const tHotSpotID kRobotShuttleOpenHeadSpotID = 5069; +const tHotSpotID kRobotShuttleMapChipSpotID = 5070; +const tHotSpotID kRobotShuttleOpticalChipSpotID = 5071; +const tHotSpotID kRobotShuttleShieldChipSpotID = 5072; + +// Extra sequence IDs. + +const tExtraID kMarsArrivalFromTSA = 0; +const tExtraID kMars0AWatchShuttleDepart = 1; +const tExtraID kRobotThrowsPlayer = 2; +const tExtraID kMarsInfoKioskIntro = 3; +const tExtraID kMarsColonyInfo = 4; +const tExtraID kMarsSightsInfo = 5; +const tExtraID kRobotOnWayToShuttle = 6; +const tExtraID kMars31SouthZoomInNoCard = 7; +const tExtraID kMars31SouthViewNoCard = 8; +const tExtraID kMars31SouthZoomOutNoCard = 9; +const tExtraID kMars31SouthZoomViewNoCard = 10; +const tExtraID kMars33SlideShow1 = 11; +const tExtraID kMars33SlideShow2 = 12; +const tExtraID kMars33SlideShow3 = 13; +const tExtraID kMars33SlideShow4 = 14; +const tExtraID kMars34SpotOpenWithBar = 15; +const tExtraID kMars34SpotCloseWithBar = 16; +const tExtraID kMars34SpotOpenNoBar = 17; +const tExtraID kMars34SpotCloseNoBar = 18; +const tExtraID kMars34ViewOpenWithBar = 19; +const tExtraID kMars34ViewOpenNoBar = 20; +const tExtraID kMars34NorthPodGreeting = 21; +const tExtraID kMarsTurnOnPod = 22; +const tExtraID kMarsTakePodToMars45 = 23; +const tExtraID kMars35WestSpinAirlockToEast = 24; +const tExtraID kMars35EastSpinAirlockToWest = 25; +const tExtraID kMars45SpotOpenWithBar = 26; +const tExtraID kMars45SpotCloseWithBar = 27; +const tExtraID kMars45SpotOpenNoBar = 28; +const tExtraID kMars45SpotCloseNoBar = 29; +const tExtraID kMars45ViewOpenWithBar = 30; +const tExtraID kMars45ViewOpenNoBar = 31; +const tExtraID kMars48RobotApproaches = 32; +const tExtraID kMars48RobotKillsPlayer = 33; +const tExtraID kMars48RobotLoops = 34; +const tExtraID kMars48RobotView = 35; +const tExtraID kMars48RobotDefends = 36; +const tExtraID kMars49SouthViewMaskFilling = 37; +const tExtraID kMars52SpinLeft = 38; +const tExtraID kMars52SpinRight = 39; +const tExtraID kMars52Extend = 40; +const tExtraID kMars53Retract = 41; +const tExtraID kMars54SpinLeft = 42; +const tExtraID kMars54SpinRight = 43; +const tExtraID kMars54Extend = 44; +const tExtraID kMars55Retract = 45; +const tExtraID kMars56SpinLeft = 46; +const tExtraID kMars56SpinRight = 47; +const tExtraID kMars56ExtendWithBomb = 48; +const tExtraID kMars56ExtendNoBomb = 49; +const tExtraID kMars57RetractWithBomb = 50; +const tExtraID kMars57RetractNoBomb = 51; +const tExtraID kMars57LowerScreenClosed = 52; +const tExtraID kMars57CantOpenPanel = 53; +const tExtraID kMars57FreezeLock = 54; +const tExtraID kMars57BreakLock = 55; +const tExtraID kMars57LockFrozenView = 56; +const tExtraID kMars57ThawLock = 57; +const tExtraID kMars57OpenPanel = 58; +const tExtraID kMars57OpenPanelChoices = 59; +const tExtraID kMars57ShieldEvaluation = 60; +const tExtraID kMars57MeasureOutput = 61; +const tExtraID kMars57ShieldOkayLoop = 62; +const tExtraID kMars57RunDiagnostics = 63; +const tExtraID kMars57BombExplodes = 64; +const tExtraID kMars57BombAnalysis = 65; +const tExtraID kMars57DontLink = 66; +const tExtraID kMars57CircuitLink = 67; +const tExtraID kMars57GameLevel1 = 68; +const tExtraID kMars57GameLevel2 = 69; +const tExtraID kMars57GameLevel3 = 70; +const tExtraID kMars57BombExplodesInGame = 71; +const tExtraID kMars57GameSolved = 72; +const tExtraID kMars57ExposeBomb = 73; +const tExtraID kMars57BackToNormal = 74; +const tExtraID kMars57ViewOpenNoBomb = 75; +const tExtraID kMars58SpinLeft = 76; +const tExtraID kMars58SpinRight = 77; +const tExtraID kMars58Extend = 78; +const tExtraID kMars59Retract = 79; +const tExtraID kMars60WestSpinAirlockToEast = 80; +const tExtraID kMars60EastSpinAirlockToWest = 81; +const tExtraID kMarsRobotHeadOpen = 82; +const tExtraID kMarsRobotHeadClose = 83; +const tExtraID kMarsRobotHead000 = 84; +const tExtraID kMarsRobotHead001 = 85; +const tExtraID kMarsRobotHead010 = 86; +const tExtraID kMarsRobotHead011 = 87; +const tExtraID kMarsRobotHead100 = 88; +const tExtraID kMarsRobotHead101 = 89; +const tExtraID kMarsRobotHead110 = 90; +const tExtraID kMarsRobotHead111 = 91; +const tExtraID kMarsMaze007RobotApproach = 92; +const tExtraID kMarsMaze007RobotLoop = 93; +const tExtraID kMarsMaze007RobotDeath = 94; +const tExtraID kMarsMaze015SouthRobotApproach = 95; +const tExtraID kMarsMaze015SouthRobotLoop = 96; +const tExtraID kMarsMaze015SouthRobotDeath = 97; +const tExtraID kMarsMaze101EastRobotApproach = 98; +const tExtraID kMarsMaze101EastRobotLoop = 99; +const tExtraID kMarsMaze101EastRobotDeath = 100; +const tExtraID kMarsMaze104WestLoop = 101; +const tExtraID kMarsMaze104WestDeath = 102; +const tExtraID kMarsMaze133SouthApproach = 103; +const tExtraID kMarsMaze133SouthLoop = 104; +const tExtraID kMarsMaze133SouthDeath = 105; +const tExtraID kMarsMaze136NorthApproach = 106; +const tExtraID kMarsMaze136NorthLoop = 107; +const tExtraID kMarsMaze136NorthDeath = 108; +const tExtraID kMarsMaze184WestLoop = 109; +const tExtraID kMarsMaze184WestDeath = 110; +const tExtraID kMars200DeathInBucket = 111; + +const tResIDType kReactorUndoHilitePICTID = 900; + +const tCoordType kUndoHiliteLeft = kNavAreaLeft + 140; +const tCoordType kUndoHiliteTop = kNavAreaTop + 36; + +const int16 kMars52Compass = 90; +const int16 kMars54Compass = 180; +const int16 kMars56Compass = 270; +const int16 kMars58Compass = 0; + +// This should really be 22.5. +// Probably no one will know the difference. +const int16 kMarsShieldPanelOffsetAngle = 22; + +const tCanMoveForwardReason kCantMoveRobotBlocking = kCantMoveLastReason + 1; + +const tNotificationFlags kTimeForCanyonChaseFlag = kLastNeighborhoodNotificationFlag << 1; +const tNotificationFlags kExplosionFinishedFlag = kTimeForCanyonChaseFlag << 1; +const tNotificationFlags kTimeToTransportFlag = kExplosionFinishedFlag << 1; + +const tNotificationFlags kMarsNotificationFlags = kTimeForCanyonChaseFlag | + kExplosionFinishedFlag | + kTimeToTransportFlag; + +const TimeValue kLittleExplosionStart = 0 * 40; +const TimeValue kLittleExplosionStop = 24 * 40; + +const TimeValue kBigExplosionStart = 24 * 40; +const TimeValue kBigExplosionStop = 62 * 40; + +enum { + kMaze007RobotLoopingEvent, + kMaze015RobotLoopingEvent, + kMaze101RobotLoopingEvent, + kMaze104RobotLoopingEvent, + kMaze133RobotLoopingEvent, + kMaze136RobotLoopingEvent, + kMaze184RobotLoopingEvent +}; + +enum { + kMaze007RobotLoopingTime = (64 + 96) * kMarsFrameDuration, + kMaze015RobotLoopingTime = (64 + 93) * kMarsFrameDuration, + kMaze101RobotLoopingTime = (64 + 45) * kMarsFrameDuration, + kMaze104RobotLoopingTime = 96 * kMarsFrameDuration, + kMaze133RobotLoopingTime = (64 + 96) * kMarsFrameDuration, + kMaze136RobotLoopingTime = (64 + 96) * kMarsFrameDuration, + kMaze184RobotLoopingTime = 96 * kMarsFrameDuration +}; + +void robotTimerExpiredFunction(FunctionPtr *, void *mars) { + ((Mars *)mars)->robotTiredOfWaiting(); +} + +void lockThawTimerExpiredFunction(FunctionPtr *, void *mars) { + ((Mars *)mars)->lockThawed(); +} + +void bombTimerExpiredFunction(FunctionPtr *, void *mars) { + ((Mars *)mars)->didntFindBomb(); +} + +void bombTimerExpiredInGameFunction(FunctionPtr *, void *mars) { + ((Mars *)mars)->bombExplodesInGame(); +} + +void airStageExpiredFunction(FunctionPtr *, void *mars) { + ((Mars *)mars)->airStageExpired(); +} + +Mars::Mars(InputHandler *nextHandler, PegasusEngine *owner) : Neighborhood(nextHandler, owner, "Mars", kMarsID), + _guessObject(kNoDisplayElement), _undoPict(kNoDisplayElement), _guessHistory(kNoDisplayElement), + _choiceHighlight(kNoDisplayElement), _shuttleInterface1(kNoDisplayElement), _shuttleInterface2(kNoDisplayElement), + _shuttleInterface3(kNoDisplayElement), _shuttleInterface4(kNoDisplayElement), _canyonChaseMovie(kNoDisplayElement) { + _noAirFuse.setFunctionPtr(&airStageExpiredFunction, this); + setIsItemTaken(kMarsCard); + setIsItemTaken(kAirMask); + setIsItemTaken(kCrowbar); + setIsItemTaken(kCardBomb); +} + +Mars::~Mars() { +} + +void Mars::init() { + Neighborhood::init(); + + Hotspot *attackSpot = g_allHotspots.findHotspotByID(kAttackRobotHotSpotID); + attackSpot->setMaskedHotspotFlags(kDropItemSpotFlag, kDropItemSpotFlag); + _attackingItem = NULL; + + forceStridingStop(kMars08, kNorth, kAltMarsNormal); + + _neighborhoodNotification.notifyMe(this, kMarsNotificationFlags, kMarsNotificationFlags); +} + +void Mars::flushGameState() { + g_energyMonitor->saveCurrentEnergyValue(); +} + +void Mars::start() { + g_energyMonitor->stopEnergyDraining(); + g_energyMonitor->restoreLastEnergyValue(); + _vm->resetEnergyDeathReason(); + g_energyMonitor->startEnergyDraining(); + Neighborhood::start(); +} + +class AirMaskCondition : public AICondition { +public: + AirMaskCondition(const uint32); + + virtual bool fireCondition(); + +protected: + uint32 _airThreshold; + uint32 _lastAirLevel; +}; + +AirMaskCondition::AirMaskCondition(const uint32 airThreshold) { + _airThreshold = airThreshold; + _lastAirLevel = g_airMask->getAirLeft(); +} + +bool AirMaskCondition::fireCondition() { + bool result = g_airMask && g_airMask->isAirMaskOn() && + g_airMask->getAirLeft() <= _airThreshold && _lastAirLevel > _airThreshold; + + _lastAirLevel = g_airMask->getAirLeft(); + return result; +} + +void Mars::setUpAIRules() { + Neighborhood::setUpAIRules(); + + // Don't add these rules if we're going to the robot's shuttle... + if (g_AIArea && !GameState.getMarsReadyForShuttleTransport()) { + AIPlayMessageAction *messageAction = new AIPlayMessageAction("Images/AI/Globals/XGLOB1E", false); + AILocationCondition *locCondition = new AILocationCondition(1); + locCondition->addLocation(MakeRoomView(kMars47, kSouth)); + AIRule *rule = new AIRule(locCondition, messageAction); + g_AIArea->addAIRule(rule); + + messageAction = new AIPlayMessageAction("Images/AI/Mars/XM27NB", false); + locCondition = new AILocationCondition(1); + locCondition->addLocation(MakeRoomView(kMars27, kNorth)); + rule = new AIRule(locCondition, messageAction); + g_AIArea->addAIRule(rule); + + messageAction = new AIPlayMessageAction("Images/AI/Mars/XM27NB", false); + locCondition = new AILocationCondition(1); + locCondition->addLocation(MakeRoomView(kMars28, kNorth)); + rule = new AIRule(locCondition, messageAction); + g_AIArea->addAIRule(rule); + + messageAction = new AIPlayMessageAction("Images/AI/Mars/XM41ED", false); + locCondition = new AILocationCondition(1); + locCondition->addLocation(MakeRoomView(kMars19, kEast)); + rule = new AIRule(locCondition, messageAction); + g_AIArea->addAIRule(rule); + + AIDeactivateRuleAction *deactivate = new AIDeactivateRuleAction(rule); + locCondition = new AILocationCondition(1); + locCondition->addLocation(MakeRoomView(kMars35, kWest)); + rule = new AIRule(locCondition, deactivate); + g_AIArea->addAIRule(rule); + + messageAction = new AIPlayMessageAction("Images/AI/Mars/XM41ED", false); + locCondition = new AILocationCondition(1); + locCondition->addLocation(MakeRoomView(kMars48, kWest)); + rule = new AIRule(locCondition, messageAction); + g_AIArea->addAIRule(rule); + + AirMaskCondition *airMask50Condition = new AirMaskCondition(50); + messageAction = new AIPlayMessageAction("Images/AI/Mars/XMMAZB1", false); + AIRule *rule50 = new AIRule(airMask50Condition, messageAction); + + AirMaskCondition *airMask25Condition = new AirMaskCondition(25); + AICompoundAction *compound = new AICompoundAction(); + messageAction = new AIPlayMessageAction("Images/AI/Mars/XMMAZB2", false); + compound->addAction(messageAction); + deactivate = new AIDeactivateRuleAction(rule50); + compound->addAction(deactivate); + AIRule *rule25 = new AIRule(airMask25Condition, compound); + + AirMaskCondition *airMask5Condition = new AirMaskCondition(5); + compound = new AICompoundAction; + messageAction = new AIPlayMessageAction("Images/AI/Mars/XMMAZB3", false); + compound->addAction(messageAction); + deactivate = new AIDeactivateRuleAction(rule50); + compound->addAction(deactivate); + deactivate = new AIDeactivateRuleAction(rule25); + compound->addAction(deactivate); + AIRule *rule5 = new AIRule(airMask5Condition, compound); + + g_AIArea->addAIRule(rule5); + g_AIArea->addAIRule(rule25); + g_AIArea->addAIRule(rule50); + + messageAction = new AIPlayMessageAction("Images/AI/Mars/XM51ND", false); + AIDoorOpenedCondition *doorOpen = new AIDoorOpenedCondition(MakeRoomView(kMars51, kEast)); + rule = new AIRule(doorOpen, messageAction); + g_AIArea->addAIRule(rule); + } +} + +uint16 Mars::getDateResID() const { + return kDate2185ID; +} + +TimeValue Mars::getViewTime(const tRoomID room, const tDirectionConstant direction) { + ExtraTable::Entry extra; + SpotTable::Entry spotEntry; + uint32 extraID = 0xffffffff; + + switch (MakeRoomView(room, direction)) { + case MakeRoomView(kMars0A, kNorth): + if (!GameState.getMarsSeenTimeStream()) { + getExtraEntry(kMarsArrivalFromTSA, extra); + return extra.movieStart; + } + break; + case MakeRoomView(kMars31South, kSouth): + if (GameState.isTakenItemID(kMarsCard)) + extraID = kMars31SouthZoomViewNoCard; + break; + case MakeRoomView(kMars31, kSouth): + if (GameState.isTakenItemID(kMarsCard)) + extraID = kMars31SouthViewNoCard; + break; + case MakeRoomView(kMars34, kSouth): + if (_privateFlags.getFlag(kMarsPrivatePodStorageOpenFlag)) { + if (GameState.isTakenItemID(kCrowbar)) + extraID = kMars34ViewOpenNoBar; + else + extraID = kMars34ViewOpenWithBar; + } + break; + case MakeRoomView(kMars36, kSouth): + case MakeRoomView(kMars37, kSouth): + case MakeRoomView(kMars38, kSouth): + findSpotEntry(room, direction, kSpotOnTurnMask | kSpotLoopsMask, spotEntry); + return spotEntry.movieStart; + case MakeRoomView(kMars45, kNorth): + if (_privateFlags.getFlag(kMarsPrivatePodStorageOpenFlag)) { + if (GameState.isTakenItemID(kCrowbar)) + extraID = kMars45ViewOpenNoBar; + else + extraID = kMars45ViewOpenWithBar; + } + break; + case MakeRoomView(kMars48, kEast): + if (GameState.getMarsSeenRobotAtReactor() && !GameState.getMarsAvoidedReactorRobot()) + extraID = kMars48RobotView; + break; + case MakeRoomView(kMars56, kEast): + if (_privateFlags.getFlag(kMarsPrivateBombExposedFlag)) { + if (_privateFlags.getFlag(kMarsPrivateDraggingBombFlag)) + extraID = kMars57ViewOpenNoBomb; + else + extraID = kMars57ExposeBomb; + } else if (GameState.getMarsLockBroken()) { + extraID = kMars57OpenPanelChoices; + } else if (GameState.getMarsLockFrozen()) { + extraID = kMars57LockFrozenView; + } + break; + case MakeRoomView(kMarsRobotShuttle, kEast): + if (getCurrentActivation() == kActivationRobotHeadOpen) { + extraID = kMarsRobotHead111; + + if (_privateFlags.getFlag(kMarsPrivateGotMapChipFlag)) + extraID -= 1; + if (_privateFlags.getFlag(kMarsPrivateGotOpticalChipFlag)) + extraID -= 2; + if (_privateFlags.getFlag(kMarsPrivateGotShieldChipFlag)) + extraID -= 4; + } + break; + } + + if (extraID == 0xffffffff) + return Neighborhood::getViewTime(room, direction); + + getExtraEntry(extraID, extra); + return extra.movieEnd - 1; +} + +void Mars::getZoomEntry(const tHotSpotID spotID, ZoomTable::Entry &entry) { + Neighborhood::getZoomEntry(spotID, entry); + + uint32 extraID = 0xffffffff; + + switch (spotID) { + case kMars31SouthSpotID: + if (GameState.getCurrentDirection() == kSouth && GameState.isTakenItemID(kMarsCard)) + extraID = kMars31SouthZoomInNoCard; + break; + case kMars31SouthOutSpotID: + if (GameState.getCurrentDirection() == kSouth && GameState.isTakenItemID(kMarsCard)) + extraID = kMars31SouthZoomOutNoCard; + break; + } + + if (extraID != 0xffffffff) { + ExtraTable::Entry extra; + getExtraEntry(extraID, extra); + entry.movieStart = extra.movieStart; + entry.movieEnd = extra.movieEnd; + } +} + +void Mars::findSpotEntry(const tRoomID room, const tDirectionConstant direction, tSpotFlags flags, SpotTable::Entry &entry) { + Neighborhood::findSpotEntry(room, direction, flags, entry); + + if ((flags & (kSpotOnArrivalMask | kSpotOnTurnMask)) != 0) { + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars27, kNorth): + if (GameState.getMarsSeenThermalScan()) + entry.clear(); + else + GameState.setMarsSeenThermalScan(true); + break; + case MakeRoomView(kMars28, kNorth): + if (GameState.getMarsSeenThermalScan()) + entry.clear(); + else + GameState.setMarsSeenThermalScan(true); + break; + } + } +} + +tCanMoveForwardReason Mars::canMoveForward(ExitTable::Entry &entry) { + tCanMoveForwardReason reason = Neighborhood::canMoveForward(entry); + + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars48, kEast): + if (GameState.getMarsSeenRobotAtReactor() && !GameState.getMarsAvoidedReactorRobot()) + reason = kCantMoveRobotBlocking; + break; + case MakeRoomView(kMars48, kSouth): + if (GameState.getMarsSeenRobotAtReactor() && !GameState.getMarsAvoidedReactorRobot()) + _utilityFuse.stopFuse(); + break; + } + + return reason; +} + +void Mars::cantMoveThatWay(tCanMoveForwardReason reason) { + if (reason == kCantMoveRobotBlocking) { + startExtraSequence(kMars48RobotKillsPlayer, kExtraCompletedFlag, kFilterNoInput); + loadLoopSound2(""); + } else { + Neighborhood::cantMoveThatWay(reason); + } +} + +void Mars::moveForward() { + if (GameState.getCurrentRoom() == kMars02 || (GameState.getCurrentRoom() >= kMars05 && GameState.getCurrentRoom() <= kMars08)) + loadLoopSound2(""); + + Neighborhood::moveForward(); +} + +void Mars::bumpIntoWall() { + requestSpotSound(kMarsBumpIntoWallIn, kMarsBumpIntoWallOut, kFilterNoInput, 0); + Neighborhood::bumpIntoWall(); +} + +tCanOpenDoorReason Mars::canOpenDoor(DoorTable::Entry &entry) { + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars05, kEast): + case MakeRoomView(kMars06, kEast): + case MakeRoomView(kMars07, kEast): + if (!GameState.getMarsSecurityDown()) + return kCantOpenLocked; + break; + case MakeRoomView(kMarsMaze037, kWest): + case MakeRoomView(kMarsMaze038, kEast): + if (GameState.getMarsMazeDoorPair1()) + return kCantOpenLocked; + break; + case MakeRoomView(kMarsMaze050, kNorth): + case MakeRoomView(kMarsMaze058, kSouth): + if (!GameState.getMarsMazeDoorPair1()) + return kCantOpenLocked; + break; + case MakeRoomView(kMarsMaze047, kNorth): + case MakeRoomView(kMarsMaze142, kSouth): + if (GameState.getMarsMazeDoorPair2()) + return kCantOpenLocked; + break; + case MakeRoomView(kMarsMaze057, kNorth): + case MakeRoomView(kMarsMaze136, kSouth): + if (!GameState.getMarsMazeDoorPair2()) + return kCantOpenLocked; + break; + case MakeRoomView(kMarsMaze120, kWest): + case MakeRoomView(kMarsMaze121, kEast): + if (GameState.getMarsMazeDoorPair3()) + return kCantOpenLocked; + break; + case MakeRoomView(kMarsMaze081, kNorth): + case MakeRoomView(kMarsMaze083, kSouth): + if (!GameState.getMarsMazeDoorPair3()) + return kCantOpenLocked; + break; + } + + return Neighborhood::canOpenDoor(entry); +} + +void Mars::cantOpenDoor(tCanOpenDoorReason reason) { + switch (GameState.getCurrentRoom()) { + case kMars05: + case kMars06: + case kMars07: + playSpotSoundSync(kMarsCantOpenShuttleIn, kMarsCantOpenShuttleOut); + break; + default: + Neighborhood::cantOpenDoor(reason); + break; + } +} + +void Mars::openDoor() { + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars06, kEast): + case MakeRoomView(kMars07, kEast): + if (GameState.getMarsSecurityDown()) + playSpotSoundSync(kMarsNoShuttleIn, kMarsNoShuttleOut); + break; + case MakeRoomView(kMars47, kSouth): + if (GameState.isTakenItemID(kAirMask)) + setCurrentAlternate(kAltMarsTookMask); + else + setCurrentAlternate(kAltMarsNormal); + break; + case MakeRoomView(kMars48, kNorth): + if (GameState.getMarsPodAtUpperPlatform()) + setCurrentAlternate(kAltMarsNormal); + else + setCurrentAlternate(kAltMarsPodAtMars45); + break; + case MakeRoomView(kMars48, kEast): + if (GameState.getMarsSeenRobotAtReactor() && !GameState.getMarsAvoidedReactorRobot()) { + die(kDeathDidntGetOutOfWay); + return; + } + break; + } + + Neighborhood::openDoor(); +} + +void Mars::doorOpened() { + switch (GameState.getCurrentRoom()) { + case kMars27: + case kMars28: + if (GameState.getCurrentDirection() == kNorth) + _vm->die(kDeathArrestedInMars); + else + Neighborhood::doorOpened(); + break; + case kMars41: + case kMars42: + if (GameState.getCurrentDirection() == kEast) + _vm->die(kDeathWrongShuttleLock); + else + Neighborhood::doorOpened(); + break; + case kMars51: + Neighborhood::doorOpened(); + setUpReactorEnergyDrain(); + + if (g_AIArea) + g_AIArea->checkRules(); + break; + case kMars19: + if (GameState.getCurrentDirection() == kEast) + GameState.setMarsAirlockOpen(true); + + Neighborhood::doorOpened(); + break; + case kMars48: + if (GameState.getCurrentDirection() == kWest) + GameState.setMarsAirlockOpen(true); + + Neighborhood::doorOpened(); + break; + default: + Neighborhood::doorOpened(); + break; + } +} + +void Mars::setUpReactorEnergyDrain() { + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars51, kEast): + if (GameState.isCurrentDoorOpen()) { + if (g_energyMonitor->getEnergyDrainRate() == kEnergyDrainNormal) { + if (GameState.getShieldOn()) { + g_shield->setItemState(kShieldRadiation); + g_energyMonitor->setEnergyDrainRate(kMarsReactorEnergyDrainWithShield); + } else { + g_energyMonitor->setEnergyDrainRate(kMarsReactorEnergyDrainNoShield); + } + _vm->setEnergyDeathReason(kDeathReactorBurn); + } + } else { + if (g_energyMonitor->getEnergyDrainRate() != kEnergyDrainNormal) { + if (GameState.getShieldOn()) + g_shield->setItemState(kShieldNormal); + g_energyMonitor->setEnergyDrainRate(kEnergyDrainNormal); + _vm->resetEnergyDeathReason(); + } + } + break; + case MakeRoomView(kMars52, kNorth): + case MakeRoomView(kMars52, kSouth): + case MakeRoomView(kMars52, kEast): + case MakeRoomView(kMars52, kWest): + case MakeRoomView(kMars54, kNorth): + case MakeRoomView(kMars54, kSouth): + case MakeRoomView(kMars54, kEast): + case MakeRoomView(kMars54, kWest): + case MakeRoomView(kMars56, kNorth): + case MakeRoomView(kMars56, kSouth): + case MakeRoomView(kMars56, kEast): + case MakeRoomView(kMars56, kWest): + case MakeRoomView(kMars58, kNorth): + case MakeRoomView(kMars58, kSouth): + case MakeRoomView(kMars58, kEast): + case MakeRoomView(kMars58, kWest): + if (g_energyMonitor->getEnergyDrainRate() == kEnergyDrainNormal) { + if (GameState.getShieldOn()) { + g_shield->setItemState(kShieldRadiation); + g_energyMonitor->setEnergyDrainRate(kMarsReactorEnergyDrainWithShield); + } else { + g_energyMonitor->setEnergyDrainRate(kMarsReactorEnergyDrainNoShield); + } + _vm->setEnergyDeathReason(kDeathReactorBurn); + } + break; + default: + if (g_energyMonitor->getEnergyDrainRate() != kEnergyDrainNormal) { + if (GameState.getShieldOn()) + g_shield->setItemState(kShieldNormal); + g_energyMonitor->setEnergyDrainRate(kEnergyDrainNormal); + _vm->resetEnergyDeathReason(); + } + break; + } +} + +void Mars::closeDoorOffScreen(const tRoomID room, const tDirectionConstant direction) { + switch (room) { + case kMars51: + playSpotSoundSync(kMarsGantryDoorCloseIn, kMarsGantryDoorCloseOut); + if (GameState.getShieldOn()) + g_shield->setItemState(kShieldNormal); + g_energyMonitor->setEnergyDrainRate(kEnergyDrainNormal); + _vm->resetEnergyDeathReason(); + break; + case kMars05: + case kMars06: + case kMars07: + case kMars13: + case kMars22: + case kMars47: + case kMars52: + playSpotSoundSync(kMarsGantryDoorCloseIn, kMarsGantryDoorCloseOut); + break; + case kMars18: + case kMars32: + playSpotSoundSync(kMarsTransportDoorCloseIn, kMarsTransportDoorCloseOut); + break; + case kMars19: + if (GameState.getCurrentRoom() != kMars35) { + playSpotSoundSync(kMarsBigAirlockDoorCloseIn, kMarsBigAirlockDoorCloseOut); + GameState.setMarsAirlockOpen(false); + } + break; + case kMars36: + if (GameState.getCurrentRoom() != kMars35) + playSpotSoundSync(kMarsSmallAirlockDoorCloseIn, kMarsSmallAirlockDoorCloseOut); + break; + case kMars48: + if (direction == kWest) { + if (GameState.getCurrentRoom() != kMars60) { + playSpotSoundSync(kMarsSmallAirlockDoorCloseIn, kMarsSmallAirlockDoorCloseOut); + GameState.setMarsAirlockOpen(false); + } + } else { + playSpotSoundSync(kMarsGantryDoorCloseIn, kMarsGantryDoorCloseOut); + } + break; + case kMars41: + case kMars42: + case kMars43: + if (direction == kWest) + playSpotSoundSync(kMarsGantryDoorCloseIn, kMarsGantryDoorCloseOut); + break; + case kMarsMaze037: + case kMarsMaze038: + case kMarsMaze012: + case kMarsMaze066: + case kMarsMaze050: + case kMarsMaze058: + case kMarsMaze057: + case kMarsMaze136: + case kMarsMaze047: + case kMarsMaze142: + case kMarsMaze133: + case kMarsMaze132: + case kMarsMaze113: + case kMarsMaze114: + case kMarsMaze120: + case kMarsMaze121: + case kMarsMaze081: + case kMarsMaze083: + case kMarsMaze088: + case kMarsMaze089: + case kMarsMaze179: + case kMarsMaze180: + playSpotSoundSync(kMarsMazeDoorCloseIn, kMarsMazeDoorCloseOut); + break; + } +} + +void Mars::checkAirlockDoors() { + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars19, kWest): + case MakeRoomView(kMars18, kWest): + case MakeRoomView(kMars17, kWest): + case MakeRoomView(kMars16, kWest): + case MakeRoomView(kMars15, kWest): + case MakeRoomView(kMars14, kWest): + case MakeRoomView(kMars12, kWest): + case MakeRoomView(kMars11, kWest): + case MakeRoomView(kMars10, kWest): + if (GameState.getMarsInAirlock()) { + playSpotSoundSync(kMarsBigAirlockDoorCloseIn, kMarsBigAirlockDoorCloseOut); + GameState.setMarsInAirlock(false); + } + break; + case MakeRoomView(kMars36, kEast): + case MakeRoomView(kMars37, kEast): + case MakeRoomView(kMars38, kEast): + case MakeRoomView(kMars39, kEast): + case MakeRoomView(kMars48, kEast): + case MakeRoomView(kMars50, kEast): + case MakeRoomView(kMars51, kEast): + case MakeRoomView(kMars52, kEast): + if (GameState.getMarsInAirlock()) { + playSpotSoundSync(kMarsSmallAirlockDoorCloseIn, kMarsSmallAirlockDoorCloseOut); + GameState.setMarsInAirlock(false); + } + break; + case MakeRoomView(kMars35, kWest): + case MakeRoomView(kMars35, kEast): + case MakeRoomView(kMars60, kWest): + case MakeRoomView(kMars60, kEast): + GameState.setMarsInAirlock(true); + break; + default: + GameState.setMarsInAirlock(false); + break; + } +} + +int16 Mars::getStaticCompassAngle(const tRoomID room, const tDirectionConstant dir) { + int16 angle = Neighborhood::getStaticCompassAngle(room, dir); + + switch (MakeRoomView(room, dir)) { + case MakeRoomView(kMars0A, kNorth): + angle -= 20; + break; + case MakeRoomView(kMars23, kNorth): + case MakeRoomView(kMars23, kSouth): + case MakeRoomView(kMars23, kEast): + case MakeRoomView(kMars23, kWest): + case MakeRoomView(kMars26, kNorth): + case MakeRoomView(kMars26, kSouth): + case MakeRoomView(kMars26, kEast): + case MakeRoomView(kMars26, kWest): + angle += 30; + break; + case MakeRoomView(kMars24, kNorth): + case MakeRoomView(kMars24, kSouth): + case MakeRoomView(kMars24, kEast): + case MakeRoomView(kMars24, kWest): + case MakeRoomView(kMars25, kNorth): + case MakeRoomView(kMars25, kSouth): + case MakeRoomView(kMars25, kEast): + case MakeRoomView(kMars25, kWest): + angle -= 30; + break; + case MakeRoomView(kMars54, kNorth): + case MakeRoomView(kMars54, kSouth): + case MakeRoomView(kMars54, kEast): + case MakeRoomView(kMars54, kWest): + angle += 90; + break; + case MakeRoomView(kMars56, kNorth): + case MakeRoomView(kMars56, kSouth): + case MakeRoomView(kMars56, kEast): + case MakeRoomView(kMars56, kWest): + angle += 180; + break; + case MakeRoomView(kMars58, kNorth): + case MakeRoomView(kMars58, kSouth): + case MakeRoomView(kMars58, kEast): + case MakeRoomView(kMars58, kWest): + angle -= 90; + break; + } + + return angle; +} + +void Mars::getExitCompassMove(const ExitTable::Entry &exitEntry, FaderMoveSpec &compassMove) { + Neighborhood::getExitCompassMove(exitEntry, compassMove); + + if (exitEntry.room == kMars43 && exitEntry.direction == kEast) { + compassMove.insertFaderKnot(exitEntry.movieStart + 16 * kMarsFrameDuration, 90); + compassMove.insertFaderKnot(exitEntry.movieStart + 32 * kMarsFrameDuration, 270); + } else if (exitEntry.room == kMars46 && exitEntry.direction == kWest && exitEntry.altCode != kAltMarsPodAtMars45) { + compassMove.makeTwoKnotFaderSpec(kMarsMovieScale, exitEntry.movieStart, 270, exitEntry.movieEnd, 360); + compassMove.insertFaderKnot(exitEntry.movieStart + 43 * kMarsFrameDuration, 270); + compassMove.insertFaderKnot(exitEntry.movieStart + 58 * kMarsFrameDuration, 360); + } +} + +void Mars::getExtraCompassMove(const ExtraTable::Entry &entry, FaderMoveSpec &compassMove) { + switch (entry.extra) { + case kMarsTakePodToMars45: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, 0, entry.movieEnd, 180); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 3), 30); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 11), 10); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 14), 40); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 16), 30); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 23), 100); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 31), 70); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 34), 100); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 37), 85); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 42), 135); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 44), 125); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 46), 145); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 49), 160); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * (kMarsFramesPerSecond * 51), 180); + break; + case kMars35WestSpinAirlockToEast: + case kMars60WestSpinAirlockToEast: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, 90, entry.movieEnd, 270); + compassMove.insertFaderKnot(entry.movieStart + kMarsMovieScale, 90); + compassMove.insertFaderKnot(entry.movieStart + kMarsMovieScale * 3, 270); + break; + case kMars35EastSpinAirlockToWest: + case kMars60EastSpinAirlockToWest: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, 270, entry.movieEnd, 90); + compassMove.insertFaderKnot(entry.movieStart + kMarsMovieScale, 270); + compassMove.insertFaderKnot(entry.movieStart + kMarsMovieScale * 3, 90); + break; + case kMars52SpinLeft: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, kMars52Compass, entry.movieEnd, kMars54Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars52Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 110, kMars54Compass); + break; + case kMars52SpinRight: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, kMars52Compass, entry.movieEnd, kMars58Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars52Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 110, kMars58Compass); + break; + case kMars52Extend: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, kMars52Compass, + entry.movieEnd, kMars52Compass + kMarsShieldPanelOffsetAngle); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars52Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 60, kMars52Compass + kMarsShieldPanelOffsetAngle); + break; + case kMars53Retract: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, + kMars52Compass + kMarsShieldPanelOffsetAngle, entry.movieEnd, kMars52Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars52Compass + kMarsShieldPanelOffsetAngle); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 60, kMars52Compass); + break; + case kMars56ExtendWithBomb: + case kMars56ExtendNoBomb: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, kMars56Compass, + entry.movieEnd, kMars56Compass - kMarsShieldPanelOffsetAngle); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars56Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 60, kMars56Compass - kMarsShieldPanelOffsetAngle); + break; + case kMars57RetractWithBomb: + case kMars57RetractNoBomb: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, + kMars56Compass - kMarsShieldPanelOffsetAngle, entry.movieEnd, kMars56Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars56Compass - kMarsShieldPanelOffsetAngle); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 60, kMars56Compass); + break; + case kMars54SpinLeft: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, kMars54Compass, entry.movieEnd, kMars56Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars54Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 110, kMars56Compass); + break; + case kMars54SpinRight: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, kMars54Compass, entry.movieEnd, kMars52Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars54Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 110, kMars52Compass); + break; + case kMars56SpinLeft: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, kMars56Compass, + entry.movieEnd, kMars58Compass + 360); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars56Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 110, kMars58Compass + 360); + break; + case kMars56SpinRight: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, kMars56Compass, entry.movieEnd, kMars54Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars56Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 110, kMars54Compass); + break; + case kMars58SpinLeft: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, kMars58Compass, + entry.movieEnd, kMars52Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars58Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 110, kMars52Compass); + break; + case kMars58SpinRight: + compassMove.makeTwoKnotFaderSpec(_navMovie.getScale(), entry.movieStart, + kMars58Compass + 360, entry.movieEnd, kMars56Compass); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 10, kMars58Compass + 360); + compassMove.insertFaderKnot(entry.movieStart + kMarsFrameDuration * 110, kMars56Compass); + break; + default: + Neighborhood::getExtraCompassMove(entry, compassMove); + } +} + +void Mars::loadAmbientLoops() { + tRoomID room = GameState.getCurrentRoom(); + + if ((room >= kMars0A && room <= kMars21) || (room >= kMars41 && room <= kMars43)) { + if (GameState.getMarsSeenTimeStream()) + loadLoopSound1("Sounds/Mars/Gantry Ambient.22K.8.AIFF"); + } else if (room >= kMars22 && room <= kMars31South) { + loadLoopSound1("Sounds/Mars/Reception.02.22K.8.AIFF", 0x100 / 4); + } else if (room >= kMars32 && room <= kMars34) { + loadLoopSound1("Sounds/Mars/Pod Room Ambient.22K.8.AIFF"); + } else if (room == kMars35) { + if (getAirQuality(room) == kAirQualityVacuum) + loadLoopSound1("Sounds/Mars/Gear Room Ambient.22K.8.AIFF"); + else + loadLoopSound1("Sounds/Mars/Gantry Ambient.22K.8.AIFF", 0x100 / 2); + } else if (room >= kMars36 && room <= kMars39) { + loadLoopSound1("Sounds/Mars/Gear Room Ambient.22K.8.AIFF"); + } else if (room >= kMars45 && room <= kMars51) { + loadLoopSound1("Sounds/Mars/Lower Mars Ambient.22K.8.AIFF"); + } else if (room >= kMars52 && room <= kMars58) { + loadLoopSound1("Sounds/Mars/ReactorLoop.22K.8.AIFF"); + } else if (room == kMars60) { + if (getAirQuality(room) == kAirQualityVacuum) + loadLoopSound1("Sounds/Mars/Mars Maze Ambient.22K.8.AIFF"); + else + loadLoopSound1("Sounds/Mars/Lower Mars Ambient.22K.8.AIFF", 0x100 / 2); + } else if (room >= kMarsMaze004 && room <= kMarsMaze200) { + loadLoopSound1("Sounds/Mars/Mars Maze Ambient.22K.8.AIFF"); + } else if (room == kMarsRobotShuttle) { + loadLoopSound1("Sounds/Mars/Robot Shuttle.22K.8.AIFF"); + } + + if (!_noAirFuse.isFuseLit()) { + switch (room) { + case kMars02: + case kMars05: + case kMars06: + case kMars07: + case kMars08: + loadLoopSound2("Sounds/Mars/Gantry Loop.aiff", 0x100, 0, 0); + break; + // Robot at maze 48 + case kMarsMaze037: + if (GameState.isCurrentDoorOpen()) + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 2); + else + loadLoopSound2(""); + break; + case kMarsMaze038: + case kMarsMaze039: + case kMarsMaze049: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100); + break; + case kMarsMaze050: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 * 3 / 4); + break; + case kMarsMaze051: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 2); + break; + case kMarsMaze052: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 4); + break; + case kMarsMaze042: + case kMarsMaze053: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 8); + break; + case kMarsMaze058: + if (GameState.isCurrentDoorOpen()) + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 4); + else + loadLoopSound2(""); + break; + // Robot at 151 + case kMarsMaze148: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100); + break; + case kMarsMaze147: + case kMarsMaze149: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 * 3 / 4); + break; + case kMarsMaze146: + case kMarsMaze152: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 2); + break; + case kMarsMaze145: + case kMarsMaze153: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 4); + break; + // Robots at 80 and 82. + case kMarsMaze079: + case kMarsMaze081: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100); + break; + case kMarsMaze078: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 * 3 / 4); + break; + case kMarsMaze083: + if (GameState.isCurrentDoorOpen()) + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 * 3 / 4); + else + loadLoopSound2(""); + break; + case kMarsMaze118: + case kMarsMaze076: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 2); + break; + case kMarsMaze074: + case kMarsMaze117: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 4); + break; + // Robot at 94 + case kMarsMaze093: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100); + break; + case kMarsMaze091: + case kMarsMaze092: + case kMarsMaze098: + case kMarsMaze101: + case kMarsMaze100: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 * 3 / 4); + break; + case kMarsMaze090: + case kMarsMaze099: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 2); + break; + case kMarsMaze089: + if (GameState.isCurrentDoorOpen()) + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 2); + break; + case kMarsMaze178: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 4); + break; + // Robot at 197 + case kMarsMaze191: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100); + break; + case kMarsMaze190: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 * 3 / 4); + break; + case kMarsMaze198: + case kMarsMaze189: + loadLoopSound2("Sounds/Mars/Maze Sparks.22K.AIFF", 0x100 / 2); + break; + default: + loadLoopSound2(""); + break; + } + } +} + +void Mars::checkContinuePoint(const tRoomID room, const tDirectionConstant direction) { + switch (MakeRoomView(room, direction)) { + case MakeRoomView(kMars02, kSouth): + case MakeRoomView(kMars19, kEast): + case MakeRoomView(kMars22, kNorth): + case MakeRoomView(kMars43, kEast): + case MakeRoomView(kMars51, kEast): + case MakeRoomView(kMars56, kEast): + case MakeRoomView(kMars60, kWest): + case MakeRoomView(kMarsMaze004, kWest): + case MakeRoomView(kMarsMaze009, kWest): + case MakeRoomView(kMarsMaze012, kWest): + case MakeRoomView(kMarsMaze037, kWest): + case MakeRoomView(kMarsMaze047, kNorth): + case MakeRoomView(kMarsMaze052, kWest): + case MakeRoomView(kMarsMaze057, kNorth): + case MakeRoomView(kMarsMaze071, kWest): + case MakeRoomView(kMarsMaze081, kNorth): + case MakeRoomView(kMarsMaze088, kWest): + case MakeRoomView(kMarsMaze093, kWest): + case MakeRoomView(kMarsMaze115, kNorth): + case MakeRoomView(kMarsMaze120, kWest): + case MakeRoomView(kMarsMaze126, kEast): + case MakeRoomView(kMarsMaze133, kNorth): + case MakeRoomView(kMarsMaze144, kNorth): + case MakeRoomView(kMarsMaze156, kEast): + case MakeRoomView(kMarsMaze162, kNorth): + case MakeRoomView(kMarsMaze177, kWest): + case MakeRoomView(kMarsMaze180, kNorth): + case MakeRoomView(kMarsMaze187, kWest): + case MakeRoomView(kMarsMaze199, kWest): + makeContinuePoint(); + break; + case MakeRoomView(kMars05, kEast): + case MakeRoomView(kMars06, kEast): + case MakeRoomView(kMars07, kEast): + if (GameState.getMarsSecurityDown()) + makeContinuePoint(); + break; + case MakeRoomView(kMars46, kSouth): + if (!GameState.getMarsSeenRobotAtReactor()) + makeContinuePoint(); + break; + case MakeRoomView(kMars46, kWest): + if (GameState.getMarsAvoidedReactorRobot()) + makeContinuePoint(); + break; + } +} + +void Mars::launchMaze007Robot() { + startExtraLongSequence(kMarsMaze007RobotApproach, kMarsMaze007RobotDeath, kExtraCompletedFlag, kFilterAllInput); + scheduleEvent(kMaze007RobotLoopingTime, kMarsMovieScale, kMaze007RobotLoopingEvent); +} + +void Mars::launchMaze015Robot() { + startExtraLongSequence(kMarsMaze015SouthRobotApproach, kMarsMaze015SouthRobotDeath, kExtraCompletedFlag, kFilterAllInput); + scheduleEvent(kMaze015RobotLoopingTime, kMarsMovieScale, kMaze015RobotLoopingEvent); +} + +void Mars::launchMaze101Robot() { + startExtraLongSequence(kMarsMaze101EastRobotApproach, kMarsMaze101EastRobotDeath, kExtraCompletedFlag, kFilterAllInput); + scheduleEvent(kMaze101RobotLoopingTime, kMarsMovieScale, kMaze101RobotLoopingEvent); +} + +void Mars::launchMaze104Robot() { + startExtraLongSequence(kMarsMaze104WestLoop, kMarsMaze104WestDeath, kExtraCompletedFlag, kFilterAllInput); + scheduleEvent(kMaze104RobotLoopingTime, kMarsMovieScale, kMaze104RobotLoopingEvent); +} + +void Mars::launchMaze133Robot() { + startExtraLongSequence(kMarsMaze133SouthApproach, kMarsMaze133SouthDeath, kExtraCompletedFlag, kFilterAllInput); + scheduleEvent(kMaze133RobotLoopingTime, kMarsMovieScale, kMaze133RobotLoopingEvent); +} + +void Mars::launchMaze136Robot() { + startExtraLongSequence(kMarsMaze136NorthApproach, kMarsMaze136NorthDeath, kExtraCompletedFlag, kFilterAllInput); + scheduleEvent(kMaze136RobotLoopingTime, kMarsMovieScale, kMaze136RobotLoopingEvent); +} + +void Mars::launchMaze184Robot() { + startExtraLongSequence(kMarsMaze184WestLoop, kMarsMaze184WestDeath, kExtraCompletedFlag, kFilterAllInput); + scheduleEvent(kMaze184RobotLoopingTime, kMarsMovieScale, kMaze184RobotLoopingEvent); +} + +void Mars::timerExpired(const uint32 eventType) { + switch (eventType) { + case kMaze007RobotLoopingEvent: + case kMaze015RobotLoopingEvent: + case kMaze101RobotLoopingEvent: + case kMaze104RobotLoopingEvent: + case kMaze133RobotLoopingEvent: + case kMaze136RobotLoopingEvent: + case kMaze184RobotLoopingEvent: + _interruptionFilter = kFilterNoInput; + break; + } +} + +void Mars::arriveAt(const tRoomID room, const tDirectionConstant direction) { + switch (MakeRoomView(room, direction)) { + case MakeRoomView(kMars18, kNorth): + if (GameState.getMarsPodAtUpperPlatform()) + setCurrentAlternate(kAltMarsPodAtMars34); + break; + case MakeRoomView(kMars27, kEast): + case MakeRoomView(kMars29, kEast): + if (GameState.isTakenItemID(kMarsCard)) + setCurrentAlternate(kAltMarsTookCard); + else + setCurrentAlternate(kAltMarsNormal); + break; + case MakeRoomView(kMars35, kEast): + case MakeRoomView(kMars35, kWest): + if (GameState.getMarsAirlockOpen()) + setCurrentAlternate(kAltMars35AirlockWest); + else + setCurrentAlternate(kAltMars35AirlockEast); + break; + case MakeRoomView(kMars60, kEast): + case MakeRoomView(kMars60, kWest): + if (GameState.getMarsAirlockOpen()) + setCurrentAlternate(kAltMars60AirlockEast); + else + setCurrentAlternate(kAltMars60AirlockWest); + break; + case MakeRoomView(kMars45, kNorth): + case MakeRoomView(kMars45, kSouth): + case MakeRoomView(kMars45, kEast): + case MakeRoomView(kMars45, kWest): + GameState.setMarsPodAtUpperPlatform(false); + setCurrentAlternate(kAltMarsPodAtMars45); + break; + case MakeRoomView(kMars46, kNorth): + case MakeRoomView(kMars46, kSouth): + case MakeRoomView(kMars46, kEast): + case MakeRoomView(kMars46, kWest): + case MakeRoomView(kMars47, kNorth): + case MakeRoomView(kMars47, kSouth): + case MakeRoomView(kMars47, kEast): + case MakeRoomView(kMars47, kWest): + if (GameState.getMarsPodAtUpperPlatform()) + setCurrentAlternate(kAltMarsNormal); + else + setCurrentAlternate(kAltMarsPodAtMars45); + break; + case MakeRoomView(kMars48, kNorth): + case MakeRoomView(kMars48, kSouth): + case MakeRoomView(kMars48, kEast): + case MakeRoomView(kMars48, kWest): + case MakeRoomView(kMars49, kNorth): + case MakeRoomView(kMars49, kEast): + case MakeRoomView(kMars49, kWest): + if (GameState.isTakenItemID(kAirMask)) + setCurrentAlternate(kAltMarsTookMask); + else + setCurrentAlternate(kAltMarsNormal); + break; + case MakeRoomView(kMars49, kSouth): + if (GameState.getMarsMaskOnFiller()) + setCurrentAlternate(kAltMarsMaskOnFiller); + else if (GameState.isTakenItemID(kAirMask)) + setCurrentAlternate(kAltMarsTookMask); + else + setCurrentAlternate(kAltMarsNormal); + break; + } + + Neighborhood::arriveAt(room, direction); + checkAirlockDoors(); + setUpReactorEnergyDrain(); + + switch (MakeRoomView(room, direction)) { + case MakeRoomView(kMars0A, kNorth): + if (!GameState.getMarsSeenTimeStream()) + startExtraLongSequence(kMarsArrivalFromTSA, kMars0AWatchShuttleDepart, kExtraCompletedFlag, kFilterNoInput); + break; + case MakeRoomView(kMars07, kSouth): + case MakeRoomView(kMars13, kNorth): + if (!GameState.getMarsHeardCheckInMessage()) { + playSpotSoundSync(kMarsCheckInRequiredIn, kMarsCheckInRequiredOut); + GameState.setMarsHeardCheckInMessage(true); + } + break; + case MakeRoomView(kMars44, kWest): + // TODO: Space Chase + _neighborhoodNotification.setNotificationFlags(kTimeForCanyonChaseFlag, kTimeForCanyonChaseFlag); + break; + case MakeRoomView(kMars10, kNorth): + if (!GameState.getMarsRobotThrownPlayer()) + startExtraSequence(kRobotThrowsPlayer, kExtraCompletedFlag, kFilterNoInput); + break; + case MakeRoomView(kMars11, kSouth): + case MakeRoomView(kMars12, kSouth): + setCurrentActivation(kActivationReadyForKiosk); + break; + case MakeRoomView(kMars15, kWest): + if (GameState.getMarsThreadedMaze() && !GameState.getMarsSecurityDown()) { + playSpotSoundSync(kMarsShuttle2DepartedIn, kMarsShuttle2DepartedOut); + restoreStriding(kMars17, kWest, kAltMarsNormal); + GameState.setMarsSecurityDown(true); + } + break; + case MakeRoomView(kMars17, kNorth): + case MakeRoomView(kMars17, kSouth): + case MakeRoomView(kMars17, kEast): + case MakeRoomView(kMars17, kWest): + if (GameState.getMarsThreadedMaze() && !GameState.getMarsSecurityDown()) + forceStridingStop(kMars17, kWest, kAltMarsNormal); + + if (GameState.getMarsThreadedMaze() && !GameState.getMarsSawRobotLeave()) { + startExtraSequence(kRobotOnWayToShuttle, kExtraCompletedFlag, kFilterNoInput); + restoreStriding(kMars19, kWest, kAltMarsNormal); + GameState.setMarsSawRobotLeave(true); + } + break; + case MakeRoomView(kMars19, kNorth): + case MakeRoomView(kMars19, kSouth): + case MakeRoomView(kMars19, kWest): + if (GameState.getMarsThreadedMaze() && !GameState.getMarsSawRobotLeave()) + forceStridingStop(kMars19, kWest, kAltMarsNormal); + + if (GameState.getMarsThreadedMaze() && !GameState.getMarsSecurityDown()) + forceStridingStop(kMars17, kWest, kAltMarsNormal); + break; + case MakeRoomView(kMars19, kEast): + if (GameState.getMarsThreadedMaze() && !GameState.getMarsSawRobotLeave()) + forceStridingStop(kMars19, kWest, kAltMarsNormal); + + if (GameState.getMarsThreadedMaze() && !GameState.getMarsSecurityDown()) + forceStridingStop(kMars17, kWest, kAltMarsNormal); + break; + case MakeRoomView(kMars32, kNorth): + if (!GameState.getMarsPodAtUpperPlatform()) { + playSpotSoundSync(kMarsPodArrivedUpperPlatformIn, kMarsPodArrivedUpperPlatformOut); + GameState.setMarsPodAtUpperPlatform(true); + } + break; + case MakeRoomView(kMars33North, kNorth): + setCurrentActivation(kActivationTunnelMapReady); + // Fall through... + case MakeRoomView(kMars33, kSouth): + case MakeRoomView(kMars33, kEast): + case MakeRoomView(kMars33, kWest): + case MakeRoomView(kMars32, kSouth): + case MakeRoomView(kMars32, kEast): + case MakeRoomView(kMars32, kWest): + if (!GameState.getMarsPodAtUpperPlatform()) + GameState.setMarsPodAtUpperPlatform(true); + break; + case MakeRoomView(kMars34, kNorth): + startExtraSequence(kMars34NorthPodGreeting, kExtraCompletedFlag, kFilterNoInput); + break; + case MakeRoomView(kMars34, kSouth): + case MakeRoomView(kMars45, kNorth): + setCurrentActivation(kActivateMarsPodClosed); + break; + case MakeRoomView(kMars35, kWest): + if (GameState.getMarsThreadedMaze() && !GameState.getMarsSecurityDown()) + forceStridingStop(kMars19, kWest, kAltMarsNormal); + // Fall through... + case MakeRoomView(kMars60, kEast): + if (!GameState.getMarsAirlockOpen()) + setCurrentActivation(kActivateReadyToPressurizeAirlock); + break; + case MakeRoomView(kMars35, kEast): + case MakeRoomView(kMars60, kWest): + if (GameState.getMarsAirlockOpen()) + setCurrentActivation(kActivateReadyToPressurizeAirlock); + break; + case MakeRoomView(kMars39, kWest): + if (GameState.getLastRoom() == kMarsMaze200) + GameState.setMarsPodAtUpperPlatform(false); + break; + case MakeRoomView(kMars45, kSouth): + // Set up maze doors here. + // Doing it here makes sure that it will be the same if the player comes + // back out of the maze and goes back in, but will vary if + // the player comes back down to the maze a second time. + GameState.setMarsMazeDoorPair1(_vm->getRandomBit()); + GameState.setMarsMazeDoorPair2(_vm->getRandomBit()); + GameState.setMarsMazeDoorPair3(_vm->getRandomBit()); + GameState.setMarsArrivedBelow(true); + break; + case MakeRoomView(kMars48, kEast): + if (!GameState.getMarsSeenRobotAtReactor()) { + // Preload the looping sound... + loadLoopSound2("Sounds/Mars/Robot Loop.aiff", 0, 0, 0); + startExtraSequence(kMars48RobotApproaches, kExtraCompletedFlag, kFilterNoInput); + } else if (!GameState.getMarsAvoidedReactorRobot()) { + loadLoopSound2("Sounds/Mars/Robot Loop.aiff", 0x100, 0, 0); + loopExtraSequence(kMars48RobotLoops); + _utilityFuse.primeFuse(kMarsRobotPatienceLimit); + _utilityFuse.setFunctionPtr(&robotTimerExpiredFunction, (void *)this); + _utilityFuse.lightFuse(); + } + break; + case MakeRoomView(kMars48, kSouth): + if (GameState.getMarsSeenRobotAtReactor() && !GameState.getMarsAvoidedReactorRobot()) { + loadLoopSound2("Sounds/Mars/Robot Loop.aiff", 0x100, 0, 0); + _utilityFuse.primeFuse(kMarsRobotPatienceLimit); + _utilityFuse.setFunctionPtr(&robotTimerExpiredFunction, (void *)this); + _utilityFuse.lightFuse(); + } + break; + case MakeRoomView(kMars49, kSouth): + if (GameState.getMarsSeenRobotAtReactor() && !GameState.getMarsAvoidedReactorRobot()) { + playSpotSoundSync(kMarsRobotTakesTransportIn, kMarsRobotTakesTransportOut); + playSpotSoundSync(kMarsPodDepartedLowerPlatformIn, kMarsPodDepartedLowerPlatformOut); + GameState.setMarsAvoidedReactorRobot(true); + GameState.setMarsPodAtUpperPlatform(true); + GameState.getScoringAvoidedRobot(); + } + + if (GameState.isTakenItemID(kAirMask)) + setCurrentActivation(kActivateHotSpotAlways); + else if (GameState.getMarsMaskOnFiller()) + setCurrentActivation(kActivateMaskOnFiller); + else + setCurrentActivation(kActivateMaskOnHolder); + break; + case MakeRoomView(kMars51, kWest): + case MakeRoomView(kMars50, kWest): + case MakeRoomView(kMars48, kWest): + if (GameState.getShieldOn()) + g_shield->setItemState(kShieldNormal); + g_energyMonitor->setEnergyDrainRate(kEnergyDrainNormal); + _vm->resetEnergyDeathReason(); + break; + case MakeRoomView(kMars52, kNorth): + case MakeRoomView(kMars52, kSouth): + case MakeRoomView(kMars52, kEast): + case MakeRoomView(kMars52, kWest): + case MakeRoomView(kMars54, kNorth): + case MakeRoomView(kMars54, kSouth): + case MakeRoomView(kMars54, kEast): + case MakeRoomView(kMars54, kWest): + case MakeRoomView(kMars56, kNorth): + case MakeRoomView(kMars56, kSouth): + case MakeRoomView(kMars56, kWest): + case MakeRoomView(kMars58, kNorth): + case MakeRoomView(kMars58, kSouth): + case MakeRoomView(kMars58, kEast): + case MakeRoomView(kMars58, kWest): + setCurrentActivation(kActivateReactorPlatformOut); + break; + case MakeRoomView(kMars56, kEast): + if (GameState.getMarsLockBroken()) { + setCurrentActivation(kActivateReactorAskOperation); + _privateFlags.setFlag(kMarsPrivatePlatformZoomedInFlag, true); + } else if (GameState.getMarsLockFrozen()) { + setCurrentActivation(kActivateReactorReadyForCrowBar); + _privateFlags.setFlag(kMarsPrivatePlatformZoomedInFlag, true); + _utilityFuse.primeFuse(kLockFreezeTimeLmit); + _utilityFuse.setFunctionPtr(&lockThawTimerExpiredFunction, (void *)this); + _utilityFuse.lightFuse(); + } else { + setCurrentActivation(kActivateReactorPlatformOut); + } + break; + case MakeRoomView(kMarsRobotShuttle, kEast): + setCurrentActivation(kActivationRobotHeadClosed); + break; + case MakeRoomView(kMarsMaze007, kNorth): + launchMaze007Robot(); + break; + case MakeRoomView(kMarsMaze015, kSouth): + launchMaze015Robot(); + break; + case MakeRoomView(kMarsMaze101, kEast): + launchMaze101Robot(); + break; + case MakeRoomView(kMarsMaze104, kWest): + launchMaze104Robot(); + break; + case MakeRoomView(kMarsMaze133, kSouth): + launchMaze133Robot(); + break; + case MakeRoomView(kMarsMaze136, kNorth): + launchMaze136Robot(); + break; + case MakeRoomView(kMarsMaze184, kWest): + launchMaze184Robot(); + break; + case MakeRoomView(kMarsMaze199, kSouth): + GameState.setScoringThreadedMaze(); + GameState.setMarsThreadedMaze(true); + break; + case MakeRoomView(kMarsDeathRoom, kNorth): + case MakeRoomView(kMarsDeathRoom, kSouth): + case MakeRoomView(kMarsDeathRoom, kEast): + case MakeRoomView(kMarsDeathRoom, kWest): + switch (GameState.getLastRoom()) { + case kMars39: + die(kDeathDidntLeaveBucket); + break; + case kMars46: + die(kDeathRunOverByPod); + break; + } + break; + } + + checkAirMask(); +} + +void Mars::shieldOn() { + setUpReactorEnergyDrain(); +} + +void Mars::shieldOff() { + setUpReactorEnergyDrain(); +} + +void Mars::turnTo(const tDirectionConstant direction) { + switch (MakeRoomView(GameState.getCurrentRoom(), direction)) { + case MakeRoomView(kMars27, kNorth): + case MakeRoomView(kMars27, kSouth): + case MakeRoomView(kMars27, kEast): + case MakeRoomView(kMars29, kNorth): + case MakeRoomView(kMars29, kSouth): + case MakeRoomView(kMars29, kEast): + if (GameState.isTakenItemID(kMarsCard)) + setCurrentAlternate(kAltMarsTookCard); + break; + case MakeRoomView(kMars35, kNorth): + case MakeRoomView(kMars35, kSouth): + case MakeRoomView(kMars60, kNorth): + case MakeRoomView(kMars60, kSouth): + if (getCurrentActivation() == kActivateAirlockPressurized) + playSpotSoundSync(kMarsAirlockPressurizeIn, kMarsAirlockPressurizeOut); + break; + } + + Neighborhood::turnTo(direction); + + switch (MakeRoomView(GameState.getCurrentRoom(), direction)) { + case MakeRoomView(kMars11, kSouth): + case MakeRoomView(kMars12, kSouth): + setCurrentActivation(kActivationReadyForKiosk); + break; + case MakeRoomView(kMars18, kNorth): + if (GameState.getMarsPodAtUpperPlatform()) + setCurrentAlternate(kAltMarsPodAtMars34); + break; + case MakeRoomView(kMars22, kSouth): + if (!GameState.getMarsHeardCheckInMessage()) { + playSpotSoundSync(kMarsCheckInRequiredIn, kMarsCheckInRequiredOut); + GameState.setMarsHeardCheckInMessage(true); + } + break; + case MakeRoomView(kMars34, kSouth): + case MakeRoomView(kMars45, kNorth): + setCurrentActivation(kActivateMarsPodClosed); + break; + case MakeRoomView(kMars34, kNorth): + startExtraSequence(kMars34NorthPodGreeting, kExtraCompletedFlag, kFilterNoInput); + break; + case MakeRoomView(kMars35, kEast): + case MakeRoomView(kMars60, kWest): + if (GameState.getMarsAirlockOpen()) + setCurrentActivation(kActivateReadyToPressurizeAirlock); + break; + case MakeRoomView(kMars60, kEast): + if (!GameState.getMarsAirlockOpen()) + setCurrentActivation(kActivateReadyToPressurizeAirlock); + break; + case MakeRoomView(kMars35, kWest): + if (!GameState.getMarsAirlockOpen()) + setCurrentActivation(kActivateReadyToPressurizeAirlock); + + // Do this here because this will be called after spinning the airlock after + // going through the gear room. + if (GameState.getMarsThreadedMaze()) + GameState.setScoringThreadedGearRoom(); + break; + case MakeRoomView(kMars48, kNorth): + if (GameState.getMarsSeenRobotAtReactor() && !GameState.getMarsAvoidedReactorRobot()) + die(kDeathDidntGetOutOfWay); + break; + case MakeRoomView(kMars48, kEast): + if (!GameState.getMarsSeenRobotAtReactor()) { + // Preload the looping sound... + loadLoopSound2("Sounds/Mars/Robot Loop.aiff", 0, 0, 0); + startExtraSequence(kMars48RobotApproaches, kExtraCompletedFlag, kFilterNoInput); + } else if (!GameState.getMarsAvoidedReactorRobot()) { + loopExtraSequence(kMars48RobotLoops); + } else if (GameState.isTakenItemID(kAirMask)) { + setCurrentAlternate(kAltMarsTookMask); + } else { + setCurrentAlternate(kAltMarsNormal); + } + break; + case MakeRoomView(kMars48, kWest): + if (GameState.getMarsSeenRobotAtReactor() && !GameState.getMarsAvoidedReactorRobot()) + die(kDeathDidntGetOutOfWay); + else if (GameState.isTakenItemID(kAirMask)) + setCurrentAlternate(kAltMarsTookMask); + else + setCurrentAlternate(kAltMarsNormal); + break; + case MakeRoomView(kMars49, kSouth): + if (GameState.isTakenItemID(kAirMask)) + setCurrentActivation(kActivateHotSpotAlways); + else + setCurrentActivation(kActivateMaskOnHolder); + break; + case MakeRoomView(kMars52, kNorth): + case MakeRoomView(kMars52, kSouth): + case MakeRoomView(kMars52, kEast): + case MakeRoomView(kMars52, kWest): + case MakeRoomView(kMars54, kNorth): + case MakeRoomView(kMars54, kSouth): + case MakeRoomView(kMars54, kEast): + case MakeRoomView(kMars54, kWest): + case MakeRoomView(kMars56, kNorth): + case MakeRoomView(kMars56, kSouth): + case MakeRoomView(kMars56, kEast): + case MakeRoomView(kMars56, kWest): + case MakeRoomView(kMars58, kNorth): + case MakeRoomView(kMars58, kSouth): + case MakeRoomView(kMars58, kEast): + case MakeRoomView(kMars58, kWest): + setCurrentActivation(kActivateReactorPlatformOut); + break; + case MakeRoomView(kMarsMaze007, kNorth): + launchMaze007Robot(); + break; + case MakeRoomView(kMarsMaze015, kSouth): + launchMaze015Robot(); + break; + case MakeRoomView(kMarsMaze101, kEast): + launchMaze101Robot(); + break; + case MakeRoomView(kMarsMaze104, kWest): + launchMaze104Robot(); + break; + case MakeRoomView(kMarsMaze133, kSouth): + launchMaze133Robot(); + break; + case MakeRoomView(kMarsMaze136, kNorth): + launchMaze136Robot(); + break; + case MakeRoomView(kMarsMaze184, kWest): + launchMaze184Robot(); + break; + } +} + +void Mars::activateOneHotspot(HotspotInfoTable::Entry &entry, Hotspot *hotspot) { + switch (hotspot->getObjectID()) { + case kMars57RedMoveSpotID: + case kMars57YellowMoveSpotID: + case kMars57GreenMoveSpotID: + if (!_choiceHighlight.choiceHighlighted(hotspot->getObjectID() - kMars57RedMoveSpotID)) + hotspot->setActive(); + break; + case kMars57BlueMoveSpotID: + if (_reactorStage >= 2 && !_choiceHighlight.choiceHighlighted(3)) + hotspot->setActive(); + break; + case kMars57PurpleMoveSpotID: + if (_reactorStage == 3 && !_choiceHighlight.choiceHighlighted(4)) + hotspot->setActive(); + break; + default: + Neighborhood::activateOneHotspot(entry, hotspot); + break; + } +} + +void Mars::activateHotspots() { + InventoryItem *item; + + Neighborhood::activateHotspots(); + + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars48, kEast): + if ((_navMovie.getFlags() & kLoopTimeBase) != 0 && _vm->getDragType() == kDragInventoryUse) + g_allHotspots.activateOneHotspot(kAttackRobotHotSpotID); + break; + case MakeRoomView(kMars56, kEast): + switch (getCurrentActivation()) { + case kActivateReactorReadyForNitrogen: + item = (InventoryItem *)g_allItems.findItemByID(kNitrogenCanister); + if (item->getItemState() != kNitrogenFull) + g_allHotspots.deactivateOneHotspot(kMars57DropNitrogenSpotID); + // Fall through... + case kActivateReactorReadyForCrowBar: + g_allHotspots.activateOneHotspot(kMars57CantOpenPanelSpotID); + break; + } + break; + case MakeRoomView(kMarsRobotShuttle, kEast): + if (_privateFlags.getFlag(kMarsPrivateGotMapChipFlag)) + g_allHotspots.deactivateOneHotspot(kRobotShuttleMapChipSpotID); + else + g_allHotspots.activateOneHotspot(kRobotShuttleMapChipSpotID); + + if (_privateFlags.getFlag(kMarsPrivateGotOpticalChipFlag)) + g_allHotspots.deactivateOneHotspot(kRobotShuttleOpticalChipSpotID); + else + g_allHotspots.activateOneHotspot(kRobotShuttleOpticalChipSpotID); + + if (_privateFlags.getFlag(kMarsPrivateGotShieldChipFlag)) + g_allHotspots.deactivateOneHotspot(kRobotShuttleShieldChipSpotID); + else + g_allHotspots.activateOneHotspot(kRobotShuttleShieldChipSpotID); + break; + default: + if (_privateFlags.getFlag(kMarsPrivateInSpaceChaseFlag)) { + // TODO + } + break; + } +} + +void Mars::clickInHotspot(const Input &input, const Hotspot *clickedSpot) { + switch (clickedSpot->getObjectID()) { + case kMars11NorthKioskSpotID: + case kMars12NorthKioskSpotID: + playSpotSoundSync(kMarsKioskBeepIn, kMarsKioskBeepOut); + Neighborhood::clickInHotspot(input, clickedSpot); + break; + case kMars11NorthKioskSightsSpotID: + case kMars12NorthKioskSightsSpotID: + playSpotSoundSync(kMarsKioskBeepIn, kMarsKioskBeepOut); + if (!startExtraSequenceSync(kMarsSightsInfo, kFilterAllInput)) + showExtraView(kMarsInfoKioskIntro); + break; + case kMars11NorthKioskColonySpotID: + case kMars12NorthKioskColonySpotID: + playSpotSoundSync(kMarsKioskBeepIn, kMarsKioskBeepOut); + if (!startExtraSequenceSync(kMarsColonyInfo, kFilterAllInput)) + showExtraView(kMarsInfoKioskIntro); + break; + case kMars33NorthMonitorSpotID: + switch (_lastExtra) { + case kMars33SlideShow1: + startExtraSequence(kMars33SlideShow2, kExtraCompletedFlag, kFilterNoInput); + break; + case kMars33SlideShow2: + startExtraSequence(kMars33SlideShow3, kExtraCompletedFlag, kFilterNoInput); + break; + case kMars33SlideShow3: + startExtraSequence(kMars33SlideShow4, kExtraCompletedFlag, kFilterNoInput); + break; + case kMars33SlideShow4: + // Should never happen... + default: + startExtraSequence(kMars33SlideShow1, kExtraCompletedFlag, kFilterNoInput); + break; + } + break; + case kMars34SouthOpenStorageSpotID: + if (GameState.isTakenItemID(kCrowbar)) + startExtraSequence(kMars34SpotOpenNoBar, kExtraCompletedFlag, kFilterNoInput); + else + startExtraSequence(kMars34SpotOpenWithBar, kExtraCompletedFlag, kFilterNoInput); + break; + case kMars34SouthCloseStorageSpotID: + if (GameState.isTakenItemID(kCrowbar)) + startExtraSequence(kMars34SpotCloseNoBar, kExtraCompletedFlag, kFilterNoInput); + else + startExtraSequence(kMars34SpotCloseWithBar, kExtraCompletedFlag, kFilterNoInput); + break; + case kMars35WestPressurizeSpotID: + case kMars35EastPressurizeSpotID: + case kMars60WestPressurizeSpotID: + case kMars60EastPressurizeSpotID: + playSpotSoundSync(kMarsAirlockButtonBeepIn, kMarsAirlockButtonBeepOut); + playSpotSoundSync(kMarsAirlockPressurizeIn, kMarsAirlockPressurizeOut); + setCurrentActivation(kActivateAirlockPressurized); + break; + case kMars45NorthOpenStorageSpotID: + if (GameState.isTakenItemID(kCrowbar)) + startExtraSequence(kMars45SpotOpenNoBar, kExtraCompletedFlag, kFilterNoInput); + else + startExtraSequence(kMars45SpotOpenWithBar, kExtraCompletedFlag, kFilterNoInput); + break; + case kMars45NorthCloseStorageSpotID: + if (GameState.isTakenItemID(kCrowbar)) + startExtraSequence(kMars45SpotCloseNoBar, kExtraCompletedFlag, kFilterNoInput); + else + startExtraSequence(kMars45SpotCloseWithBar, kExtraCompletedFlag, kFilterNoInput); + break; + case kMars56ExtractSpotID: + if (GameState.isTakenItemID(kCardBomb)) { + startExtraSequence(kMars56ExtendNoBomb, kExtraCompletedFlag, kFilterNoInput); + setCurrentActivation(kActivateReactorPlatformIn); + } else { + startExtraSequence(kMars56ExtendWithBomb, kExtraCompletedFlag, kFilterNoInput); + setCurrentActivation(kActivateReactorAskLowerScreen); + } + break; + case kMars57UndoMoveSpotID: + playSpotSoundSync(kMarsColorMatchingButtonBeepIn, kMarsColorMatchingButtonBeepOut); + doUndoOneGuess(); + break; + case kMars57RedMoveSpotID: + playSpotSoundSync(kMarsColorMatchingButtonBeepIn, kMarsColorMatchingButtonBeepOut); + doReactorGuess(0); + break; + case kMars57YellowMoveSpotID: + playSpotSoundSync(kMarsColorMatchingButtonBeepIn, kMarsColorMatchingButtonBeepOut); + doReactorGuess(1); + break; + case kMars57GreenMoveSpotID: + playSpotSoundSync(kMarsColorMatchingButtonBeepIn, kMarsColorMatchingButtonBeepOut); + doReactorGuess(2); + break; + case kMars57BlueMoveSpotID: + playSpotSoundSync(kMarsColorMatchingButtonBeepIn, kMarsColorMatchingButtonBeepOut); + doReactorGuess(3); + break; + case kMars57PurpleMoveSpotID: + playSpotSoundSync(kMarsColorMatchingButtonBeepIn, kMarsColorMatchingButtonBeepOut); + doReactorGuess(4); + break; + default: + Neighborhood::clickInHotspot(input, clickedSpot); + break; + } +} + +tInputBits Mars::getInputFilter() { + tInputBits result = Neighborhood::getInputFilter(); + + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars49, kSouth): + if (GameState.getMarsMaskOnFiller()) + // Can't move when mask is on filler. + result &= ~kFilterAllDirections; + break; + case MakeRoomView(kMars52, kNorth): + case MakeRoomView(kMars52, kSouth): + case MakeRoomView(kMars52, kEast): + case MakeRoomView(kMars52, kWest): + case MakeRoomView(kMars54, kNorth): + case MakeRoomView(kMars54, kSouth): + case MakeRoomView(kMars54, kEast): + case MakeRoomView(kMars54, kWest): + case MakeRoomView(kMars56, kNorth): + case MakeRoomView(kMars56, kSouth): + case MakeRoomView(kMars56, kEast): + case MakeRoomView(kMars56, kWest): + case MakeRoomView(kMars58, kNorth): + case MakeRoomView(kMars58, kSouth): + case MakeRoomView(kMars58, kEast): + case MakeRoomView(kMars58, kWest): + if (_privateFlags.getFlag(kMarsPrivatePlatformZoomedInFlag)) + // Can't move when platform is extended. + result &= ~kFilterAllDirections; + break; + case MakeRoomView(kMars44, kWest): + // TODO + break; + } + + return result; +} + +// Only called when trying to pick up an item and the player can't (because +// the inventory is too full or because the player lets go of the item before +// dropping it into the inventory). +Hotspot *Mars::getItemScreenSpot(Item *item, DisplayElement *element) { + tHotSpotID destSpotID; + + switch (item->getObjectID()) { + case kCardBomb: + destSpotID = kMars57GrabBombSpotID; + break; + case kMarsCard: + destSpotID = kMars31SouthCardSpotID; + break; + case kAirMask: + if (GameState.getMarsMaskOnFiller()) + destSpotID = kMars49AirFillingDropSpotID; + else + destSpotID = kMars49AirMaskSpotID; + break; + case kCrowbar: + if (GameState.getCurrentRoom() == kMars34) + destSpotID = kMars34SouthCrowbarSpotID; + else + destSpotID = kMars45NorthCrowbarSpotID; + break; + case kMapBiochip: + destSpotID = kRobotShuttleMapChipSpotID; + break; + case kOpticalBiochip: + destSpotID = kRobotShuttleOpticalChipSpotID; + break; + case kShieldBiochip: + destSpotID = kRobotShuttleShieldChipSpotID; + break; + default: + destSpotID = kNoHotSpotID; + break; + } + + if (destSpotID == kNoHotSpotID) + return Neighborhood::getItemScreenSpot(item, element); + + return g_allHotspots.findHotspotByID(destSpotID); +} + +void Mars::takeItemFromRoom(Item *item) { + switch (item->getObjectID()) { + case kAirMask: + setCurrentAlternate(kAltMarsTookMask); + break; + case kCardBomb: + _privateFlags.setFlag(kMarsPrivateDraggingBombFlag, true); + break; + case kMapBiochip: + _privateFlags.setFlag(kMarsPrivateGotMapChipFlag, true); + break; + case kShieldBiochip: + _privateFlags.setFlag(kMarsPrivateGotShieldChipFlag, true); + break; + case kOpticalBiochip: + _privateFlags.setFlag(kMarsPrivateGotOpticalChipFlag, true); + break; + } + + Neighborhood::takeItemFromRoom(item); +} + +void Mars::pickedUpItem(Item *item) { + switch (item->getObjectID()) { + case kAirMask: + setCurrentActivation(kActivateHotSpotAlways); + if (!GameState.getScoringGotOxygenMask()) { + g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Mars/XM48SB", false, kWarningInterruption); + GameState.setScoringGotOxygenMask(); + } + break; + case kCrowbar: + GameState.setScoringGotCrowBar(); + g_AIArea->checkMiddleArea(); + break; + case kMarsCard: + GameState.setScoringGotMarsCard(); + g_AIArea->checkMiddleArea(); + break; + case kCardBomb: + GameState.setScoringGotCardBomb(); + if (GameState.getMarsLockBroken()) { + startExtraSequence(kMars57BackToNormal, kExtraCompletedFlag, kFilterNoInput); + GameState.setMarsLockBroken(false); + } + + _privateFlags.setFlag(kMarsPrivateDraggingBombFlag, false); + break; + case kMapBiochip: + if (_privateFlags.getFlag(kMarsPrivateGotMapChipFlag) && + _privateFlags.getFlag(kMarsPrivateGotShieldChipFlag) && + _privateFlags.getFlag(kMarsPrivateGotOpticalChipFlag)) { + GameState.setMarsFinished(true); + GameState.setScoringMarsGandhi(); + startExtraSequence(kMarsRobotHeadClose, kExtraCompletedFlag, kFilterNoInput); + } + break; + case kShieldBiochip: + if (_privateFlags.getFlag(kMarsPrivateGotMapChipFlag) && + _privateFlags.getFlag(kMarsPrivateGotShieldChipFlag) && + _privateFlags.getFlag(kMarsPrivateGotOpticalChipFlag)) { + GameState.setMarsFinished(true); + GameState.setScoringMarsGandhi(); + startExtraSequence(kMarsRobotHeadClose, kExtraCompletedFlag, kFilterNoInput); + } + break; + case kOpticalBiochip: + g_opticalChip->addAries(); + GameState.setScoringGotMarsOpMemChip(); + + if (_privateFlags.getFlag(kMarsPrivateGotMapChipFlag) && + _privateFlags.getFlag(kMarsPrivateGotShieldChipFlag) && + _privateFlags.getFlag(kMarsPrivateGotOpticalChipFlag)) { + GameState.setMarsFinished(true); + GameState.setScoringMarsGandhi(); + startExtraSequence(kMarsRobotHeadClose, kExtraCompletedFlag, kFilterNoInput); + } + break; + } +} + +void Mars::dropItemIntoRoom(Item *item, Hotspot *dropSpot) { + if (dropSpot->getObjectID() == kAttackRobotHotSpotID) { + _attackingItem = (InventoryItem *)item; + startExtraSequence(kMars48RobotDefends, kExtraCompletedFlag, kFilterNoInput); + loadLoopSound2(""); + } else { + switch (item->getObjectID()) { + case kMarsCard: + Neighborhood::dropItemIntoRoom(item, dropSpot); + if (dropSpot && dropSpot->getObjectID() == kMars34NorthCardDropSpotID) + startExtraSequence(kMarsTurnOnPod, kExtraCompletedFlag, kFilterNoInput); + break; + case kNitrogenCanister: + Neighborhood::dropItemIntoRoom(item, dropSpot); + if (dropSpot && dropSpot->getObjectID() == kMars57DropNitrogenSpotID) + startExtraSequence(kMars57FreezeLock, kExtraCompletedFlag, kFilterNoInput); + break; + case kCrowbar: + _utilityFuse.stopFuse(); + Neighborhood::dropItemIntoRoom(item, dropSpot); + if (dropSpot && dropSpot->getObjectID() == kMars57DropCrowBarSpotID) + startExtraSequence(kMars57BreakLock, kExtraCompletedFlag, kFilterNoInput); + break; + case kAirMask: + if (dropSpot) { + if (dropSpot->getObjectID() == kMars49AirFillingDropSpotID) { + if (!GameState.getMarsMaskOnFiller()) { + Neighborhood::dropItemIntoRoom(item, dropSpot); + startExtraSequence(kMars49SouthViewMaskFilling, kExtraCompletedFlag, kFilterNoInput); + } else { + setCurrentActivation(kActivateMaskOnFiller); + setCurrentAlternate(kAltMarsMaskOnFiller); + Neighborhood::dropItemIntoRoom(item, dropSpot); + } + } else if (dropSpot->getObjectID() == kMars49AirMaskSpotID) { + setCurrentAlternate(kAltMarsNormal); + setCurrentActivation(kActivateMaskOnHolder); + Neighborhood::dropItemIntoRoom(item, dropSpot); + } + } + break; + case kCardBomb: + _privateFlags.setFlag(kMarsPrivateDraggingBombFlag, false); + Neighborhood::dropItemIntoRoom(item, dropSpot); + break; + case kMapBiochip: + _privateFlags.setFlag(kMarsPrivateGotMapChipFlag, false); + Neighborhood::dropItemIntoRoom(item, dropSpot); + break; + case kShieldBiochip: + _privateFlags.setFlag(kMarsPrivateGotShieldChipFlag, false); + Neighborhood::dropItemIntoRoom(item, dropSpot); + break; + case kOpticalBiochip: + _privateFlags.setFlag(kMarsPrivateGotOpticalChipFlag, false); + Neighborhood::dropItemIntoRoom(item, dropSpot); + break; + default: + Neighborhood::dropItemIntoRoom(item, dropSpot); + break; + } + } +} + +void Mars::robotTiredOfWaiting() { + if (GameState.getCurrentRoomAndView() == MakeRoomView(kMars48, kEast)) { + if (_attackingItem) { + startExtraSequence(kMars48RobotKillsPlayer, kExtraCompletedFlag, kFilterNoInput); + loadLoopSound2(""); + } else { + _privateFlags.setFlag(kMarsPrivateRobotTiredOfWaitingFlag, true); + } + } else { + die(kDeathDidntGetOutOfWay); + } +} + +void Mars::turnLeft() { + if (isEventTimerRunning()) + cancelEvent(); + + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars34, kSouth): + if (_privateFlags.getFlag(kMarsPrivatePodStorageOpenFlag)) { + _privateFlags.setFlag(kMarsPrivatePodTurnLeftFlag, true); + if (GameState.isTakenItemID(kCrowbar)) + startExtraSequence(kMars34SpotCloseNoBar, kExtraCompletedFlag, kFilterNoInput); + else + startExtraSequence(kMars34SpotCloseWithBar, kExtraCompletedFlag, kFilterNoInput); + } else { + Neighborhood::turnLeft(); + } + break; + case MakeRoomView(kMars45, kNorth): + if (_privateFlags.getFlag(kMarsPrivatePodStorageOpenFlag)) { + _privateFlags.setFlag(kMarsPrivatePodTurnLeftFlag, true); + if (GameState.isTakenItemID(kCrowbar)) + startExtraSequence(kMars45SpotCloseNoBar, kExtraCompletedFlag, kFilterNoInput); + else + startExtraSequence(kMars45SpotCloseWithBar, kExtraCompletedFlag, kFilterNoInput); + } else { + Neighborhood::turnLeft(); + } + break; + default: + Neighborhood::turnLeft(); + break; + } +} + +void Mars::turnRight() { + if (isEventTimerRunning()) + cancelEvent(); + + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars34, kSouth): + if (_privateFlags.getFlag(kMarsPrivatePodStorageOpenFlag)) { + _privateFlags.setFlag(kMarsPrivatePodTurnRightFlag, true); + if (GameState.isTakenItemID(kCrowbar)) + startExtraSequence(kMars34SpotCloseNoBar, kExtraCompletedFlag, kFilterNoInput); + else + startExtraSequence(kMars34SpotCloseWithBar, kExtraCompletedFlag, kFilterNoInput); + } else { + Neighborhood::turnRight(); + } + break; + case MakeRoomView(kMars45, kNorth): + if (_privateFlags.getFlag(kMarsPrivatePodStorageOpenFlag)) { + _privateFlags.setFlag(kMarsPrivatePodTurnRightFlag, true); + if (GameState.isTakenItemID(kCrowbar)) + startExtraSequence(kMars45SpotCloseNoBar, kExtraCompletedFlag, kFilterNoInput); + else + startExtraSequence(kMars45SpotCloseWithBar, kExtraCompletedFlag, kFilterNoInput); + } else { + Neighborhood::turnRight(); + } + break; + default: + Neighborhood::turnRight(); + break; + } +} + +void Mars::receiveNotification(Notification *notification, const tNotificationFlags flag) { + InventoryItem *item; + + Neighborhood::receiveNotification(notification, flag); + + if ((flag & kExtraCompletedFlag) != 0) { + _interruptionFilter = kFilterAllInput; + + switch (_lastExtra) { + case kMarsArrivalFromTSA: + GameState.setMarsSeenTimeStream(true); + loadAmbientLoops(); + playSpotSoundSync(kMarsShuttle1DepartedIn, kMarsShuttle1DepartedOut); + makeContinuePoint(); + break; + case kRobotThrowsPlayer: + GameState.setMarsRobotThrownPlayer(true); + GameState.setScoringThrownByRobot(); + restoreStriding(kMars08, kNorth, kAltMarsNormal); + arriveAt(kMars08, kNorth); + if (!GameState.getMarsHeardUpperPodMessage()) { + playSpotSoundSync(kMarsPodDepartedUpperPlatformIn, + kMarsPodDepartedUpperPlatformOut); + GameState.setMarsHeardUpperPodMessage(true); + } + break; + case kMarsInfoKioskIntro: + GameState.setScoringSawMarsKiosk(); + setCurrentActivation(kActivationKioskChoice); + break; + case kMars33SlideShow4: + GameState.setScoringSawTransportMap(); + setCurrentActivation(kActivateHotSpotAlways); + break; + case kMars34SpotOpenNoBar: + case kMars34SpotOpenWithBar: + case kMars45SpotOpenNoBar: + case kMars45SpotOpenWithBar: + _privateFlags.setFlag(kMarsPrivatePodStorageOpenFlag, true); + setCurrentActivation(kActivateMarsPodOpen); + break; + case kMars34SpotCloseNoBar: + case kMars34SpotCloseWithBar: + case kMars45SpotCloseNoBar: + case kMars45SpotCloseWithBar: + _privateFlags.setFlag(kMarsPrivatePodStorageOpenFlag, false); + setCurrentActivation(kActivateMarsPodClosed); + if (_privateFlags.getFlag(kMarsPrivatePodTurnLeftFlag)) { + _privateFlags.setFlag(kMarsPrivatePodTurnLeftFlag, false); + turnLeft(); + } else if (_privateFlags.getFlag(kMarsPrivatePodTurnRightFlag)) { + _privateFlags.setFlag(kMarsPrivatePodTurnRightFlag, false); + turnRight(); + } + break; + case kMarsTurnOnPod: + item = (InventoryItem *)g_allItems.findItemByID(kMarsCard); + _vm->addItemToInventory(item); + GameState.setScoringTurnedOnTransport(); + loadLoopSound1(""); + loadLoopSound2(""); + startExtraSequence(kMarsTakePodToMars45, kExtraCompletedFlag, kFilterNoInput); + break; + case kMarsTakePodToMars45: + arriveAt(kMars45, kSouth); + break; + case kMars35WestSpinAirlockToEast: + GameState.setMarsAirlockOpen(false); + setCurrentAlternate(kAltMars35AirlockEast); + turnTo(kWest); + setCurrentActivation(kActivateReadyToPressurizeAirlock); + g_airMask->airQualityChanged(); + checkAirMask(); + loadAmbientLoops(); + break; + case kMars35EastSpinAirlockToWest: + GameState.setMarsAirlockOpen(true); + setCurrentAlternate(kAltMars35AirlockWest); + turnTo(kEast); + setCurrentActivation(kActivateReadyToPressurizeAirlock); + g_airMask->airQualityChanged(); + checkAirMask(); + loadAmbientLoops(); + break; + case kMars48RobotApproaches: + loadLoopSound2("Sounds/Mars/Robot Loop.aiff", 0x100, 0, 0); + GameState.setMarsSeenRobotAtReactor(true); + loopExtraSequence(kMars48RobotLoops); + _utilityFuse.primeFuse(kMarsRobotPatienceLimit); + _utilityFuse.setFunctionPtr(&robotTimerExpiredFunction, (void *)this); + _utilityFuse.lightFuse(); + break; + case kMars48RobotDefends: + _vm->addItemToInventory(_attackingItem); + _attackingItem = 0; + if (_privateFlags.getFlag(kMarsPrivateRobotTiredOfWaitingFlag)) { + startExtraSequence(kMars48RobotKillsPlayer, kExtraCompletedFlag, kFilterNoInput); + loadLoopSound2("", 0x100, 0, 0); + } else { + loadLoopSound2("Sounds/Mars/Robot Loop.aiff", 0x100, 0, 0); + loopExtraSequence(kMars48RobotLoops, kExtraCompletedFlag); + } + break; + case kMars48RobotKillsPlayer: + loadLoopSound2(""); + die(kDeathDidntGetOutOfWay); + break; + case kMars49SouthViewMaskFilling: + setCurrentActivation(kActivateMaskOnFiller); + setCurrentAlternate(kAltMarsMaskOnFiller); + GameState.setMarsMaskOnFiller(true); + break; + case kMars58SpinLeft: + case kMars54SpinRight: + GameState.setScoringActivatedPlatform(); + arriveAt(kMars52, kEast); + break; + case kMars52SpinLeft: + case kMars56SpinRight: + GameState.setScoringActivatedPlatform(); + arriveAt(kMars54, kEast); + break; + case kMars54SpinLeft: + case kMars58SpinRight: + GameState.setScoringActivatedPlatform(); + arriveAt(kMars56, kEast); + break; + case kMars56SpinLeft: + case kMars52SpinRight: + GameState.setScoringActivatedPlatform(); + arriveAt(kMars58, kEast); + break; + case kMars52Extend: + case kMars54Extend: + case kMars56ExtendNoBomb: + case kMars58Extend: + GameState.setScoringActivatedPlatform(); + setCurrentActivation(kActivateReactorPlatformIn); + _privateFlags.setFlag(kMarsPrivatePlatformZoomedInFlag, true); + break; + case kMars53Retract: + case kMars55Retract: + case kMars57RetractWithBomb: + case kMars57RetractNoBomb: + case kMars59Retract: + GameState.setScoringActivatedPlatform(); + setCurrentActivation(kActivateReactorPlatformOut); + _privateFlags.setFlag(kMarsPrivatePlatformZoomedInFlag, false); + break; + case kMars56ExtendWithBomb: + playSpotSoundSync(kMustBeUnlockedIn, kMustBeUnlockedOut); + GameState.setScoringActivatedPlatform(); + _privateFlags.setFlag(kMarsPrivatePlatformZoomedInFlag, true); + break; + case kMars57CantOpenPanel: + GameState.setScoringActivatedPlatform(); + setCurrentActivation(kActivateReactorAskLowerScreen); + break; + case kMars57LowerScreenClosed: + case kMars57ThawLock: + setCurrentActivation(kActivateReactorReadyForNitrogen); + GameState.setMarsLockFrozen(false); + break; + case kMars57FreezeLock: + item = (InventoryItem *)g_allItems.findItemByID(kNitrogenCanister); + item->setItemState(kNitrogenEmpty); + _vm->addItemToInventory(item); + setCurrentActivation(kActivateReactorReadyForCrowBar); + GameState.setScoringUsedLiquidNitrogen(); + GameState.setMarsLockFrozen(true); + showExtraView(kMars57LockFrozenView); + _utilityFuse.primeFuse(kLockFreezeTimeLmit); + _utilityFuse.setFunctionPtr(&lockThawTimerExpiredFunction, (void *)this); + _utilityFuse.lightFuse(); + break; + case kMars57BreakLock: + item = (InventoryItem *)g_allItems.findItemByID(kCrowbar); + _vm->addItemToInventory(item); + GameState.setScoringUsedCrowBar(); + GameState.setMarsLockBroken(true); + GameState.setMarsLockFrozen(false); + startExtraLongSequence(kMars57OpenPanel, kMars57OpenPanelChoices, kExtraCompletedFlag, kFilterNoInput); + break; + case kMars57OpenPanel: + case kMars57OpenPanelChoices: + setCurrentActivation(kActivateReactorAskOperation); + break; + case kMars57ShieldEvaluation: + case kMars57MeasureOutput: + setCurrentActivation(kActivateReactorRanEvaluation); + loopExtraSequence(kMars57ShieldOkayLoop); + break; + case kMars57RunDiagnostics: + setCurrentActivation(kActivateReactorRanDiagnostics); + GameState.setScoringFoundCardBomb(); + break; + case kMars57BombExplodes: + case kMars57BombExplodesInGame: + die(kDeathDidntDisarmMarsBomb); + break; + case kMars57BombAnalysis: + setCurrentActivation(kActivateReactorAnalyzed); + break; + case kMars57DontLink: + startExtraSequence(kMars57OpenPanelChoices, kExtraCompletedFlag, kFilterNoInput); + break; + case kMars57CircuitLink: + setCurrentActivation(kActivateReactorInstructions); + break; + case kMars57GameLevel1: + setUpReactorLevel1(); + break; + case kMars57GameLevel2: + case kMars57GameLevel3: + setUpNextReactorLevel(); + break; + case kMars57GameSolved: + setCurrentActivation(kActivateReactorBombSafe); + break; + case kMars57ExposeBomb: + setCurrentActivation(kActivateReactorBombExposed); + _privateFlags.setFlag(kMarsPrivateBombExposedFlag, true); + break; + case kMars57BackToNormal: + setCurrentActivation(kActivateReactorPlatformIn); + _privateFlags.setFlag(kMarsPrivateBombExposedFlag, false); + g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Mars/XM51SW", false, kWarningInterruption); + break; + case kMars60WestSpinAirlockToEast: + GameState.setMarsAirlockOpen(true); + setCurrentAlternate(kAltMars60AirlockEast); + turnTo(kWest); + setCurrentActivation(kActivateReadyToPressurizeAirlock); + g_airMask->airQualityChanged(); + checkAirMask(); + loadAmbientLoops(); + break; + case kMars60EastSpinAirlockToWest: + GameState.setMarsAirlockOpen(false); + setCurrentAlternate(kAltMars60AirlockWest); + turnTo(kEast); + setCurrentActivation(kActivateReadyToPressurizeAirlock); + g_airMask->airQualityChanged(); + checkAirMask(); + loadAmbientLoops(); + break; + case kMarsRobotHeadOpen: + setCurrentActivation(kActivationRobotHeadOpen); + break; + case kMarsRobotHeadClose: + recallToTSASuccess(); + break; + case kMarsMaze007RobotApproach: + case kMarsMaze015SouthRobotApproach: + case kMarsMaze101EastRobotApproach: + case kMarsMaze104WestLoop: + case kMarsMaze133SouthApproach: + case kMarsMaze136NorthApproach: + case kMarsMaze184WestLoop: + die(kDeathGroundByMazebot); + break; + } + } else if ((flag & kTimeForCanyonChaseFlag) != 0) { + // TODO + } else if ((flag & kExplosionFinishedFlag) != 0) { + // TODO + } else if ((flag & kTimeToTransportFlag) != 0) { + // TODO + } + + if (g_AIArea) + g_AIArea->checkMiddleArea(); +} + +void Mars::spotCompleted() { + Neighborhood::spotCompleted(); + + if (GameState.getCurrentRoom() == kMarsRobotShuttle) + g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Mars/XN59WD", false, kWarningInterruption); +} + +tAirQuality Mars::getAirQuality(const tRoomID room) { + if ((room >= kMars36 && room <= kMars39) || (room >= kMarsMaze004 && room <= kMarsMaze200)) + return kAirQualityVacuum; + if (room == kMars35 && !GameState.getMarsAirlockOpen()) + return kAirQualityVacuum; + if (room == kMars60 && !GameState.getMarsAirlockOpen()) + return kAirQualityVacuum; + + return Neighborhood::getAirQuality(room); +} + +// Start up panting sound if necessary. + +void Mars::checkAirMask() { + Neighborhood::checkAirMask(); + + if (getAirQuality(GameState.getCurrentRoom()) == kAirQualityVacuum) { + if (g_airMask->isAirMaskOn()) { + if (_noAirFuse.isFuseLit()) { + _noAirFuse.stopFuse(); + loadLoopSound2(""); + loadAmbientLoops(); + playSpotSoundSync(kMarsOxyMaskOnIn, kMarsOxyMaskOnOut); + } + } else { + if (!_noAirFuse.isFuseLit()) { + loadLoopSound2("Sounds/Mars/SukWind1.22K.AIFF"); + _noAirFuse.primeFuse(kVacuumSurvivalTimeLimit); + _noAirFuse.lightFuse(); + } + } + } else { + if (_noAirFuse.isFuseLit()) { + _noAirFuse.stopFuse(); + loadLoopSound2(""); + loadAmbientLoops(); + } + } +} + +void Mars::airStageExpired() { + if (((PegasusEngine *)g_engine)->playerHasItemID(kAirMask)) + die(kDeathNoAirInMaze); + else + die(kDeathNoMaskInMaze); +} + +void Mars::lockThawed() { + startExtraSequence(kMars57ThawLock, kExtraCompletedFlag, kFilterNoInput); +} + +void Mars::setUpReactorLevel1() { + _reactorStage = 1; + makeColorSequence(); + _guessObject.initReactorGuess(); + _undoPict.initFromPICTResource(_vm->_resFork, kReactorUndoHilitePICTID); + _undoPict.setDisplayOrder(kMonitorLayer); + _undoPict.moveElementTo(kUndoHiliteLeft, kUndoHiliteTop); + _undoPict.startDisplaying(); + _guessHistory.initReactorHistory(); + _choiceHighlight.initReactorChoiceHighlight(); + setCurrentActivation(kActivateReactorInGame); + _bombFuse.primeFuse(kColorMatchingTimeLimit); + _bombFuse.setFunctionPtr(&bombTimerExpiredInGameFunction, (void *)this); + _bombFuse.lightFuse(); +} + +void Mars::setUpNextReactorLevel() { + _guessObject.show(); + _guessHistory.show(); + _guessHistory.clearHistory(); + _choiceHighlight.show(); + _reactorStage++; + makeColorSequence(); +} + +void Mars::makeColorSequence() { + int32 code[5]; + int32 highest = _reactorStage + 2; + + for (int32 i = 0; i < highest; i++) + code[i] = i; + + _vm->shuffleArray(code, highest); + _currentGuess[0] = -1; + _currentGuess[1] = -1; + _currentGuess[2] = -1; + _nextGuess = 0; + _guessObject.setGuess(-1, -1, -1); + _guessHistory.setAnswer(code[0], code[1], code[2]); +} + +void Mars::doUndoOneGuess() { + if (_nextGuess > 0) { + _undoPict.show(); + _vm->delayShell(1, 2); + _undoPict.hide(); + _nextGuess--; + _currentGuess[_nextGuess] = -1; + _guessObject.setGuess(_currentGuess[0], _currentGuess[1], _currentGuess[2]); + _choiceHighlight.resetHighlight(); + + if (_currentGuess[0] != -1) { + _choiceHighlight.highlightChoice(_currentGuess[0]); + + if (_currentGuess[1] != -1) { + _choiceHighlight.highlightChoice(_currentGuess[1]); + + if (_currentGuess[2] != -1) + _choiceHighlight.highlightChoice(_currentGuess[2]); + } + } + } +} + +void Mars::doReactorGuess(int32 guess) { + _choiceHighlight.highlightChoice(guess); + _currentGuess[_nextGuess] = guess; + _guessObject.setGuess(_currentGuess[0], _currentGuess[1], _currentGuess[2]); + + switch (guess) { + case 0: + playSpotSoundSync(kColorMatchRedIn, kColorMatchRedOut); + break; + case 1: + playSpotSoundSync(kColorMatchYellowIn, kColorMatchYellowOut); + break; + case 2: + playSpotSoundSync(kColorMatchGreenIn, kColorMatchGreenOut); + break; + case 3: + playSpotSoundSync(kColorMatchBlueIn, kColorMatchBlueOut); + break; + case 4: + playSpotSoundSync(kColorMatchPurpleIn, kColorMatchPurpleOut); + break; + } + + _nextGuess++; + + if (_nextGuess == 3) { + _vm->delayShell(1, 2); + _nextGuess = 0; + _guessHistory.addGuess(_currentGuess[0], _currentGuess[1], _currentGuess[2]); + + switch (_guessHistory.getCurrentNumCorrect()) { + case 0: + playSpotSoundSync(kColorMatchZeroNodesIn, kColorMatchZeroNodesOut); + break; + case 1: + playSpotSoundSync(kColorMatchOneNodeIn, kColorMatchOneNodeOut); + break; + case 2: + playSpotSoundSync(kColorMatchTwoNodesIn, kColorMatchTwoNodesOut); + break; + case 3: + playSpotSoundSync(kColorMatchThreeNodesIn, kColorMatchThreeNodesOut); + break; + } + + _currentGuess[0] = -1; + _currentGuess[1] = -1; + _currentGuess[2] = -1; + _guessObject.setGuess(-1, -1, -1); + _choiceHighlight.resetHighlight(); + + if (_guessHistory.isSolved()) { + _guessHistory.showAnswer(); + _vm->delayShell(1, 2); + _guessObject.hide(); + _guessHistory.hide(); + _choiceHighlight.hide(); + + switch (_reactorStage) { + case 1: + startExtraSequence(kMars57GameLevel2, kExtraCompletedFlag, kFilterNoInput); + break; + case 2: + startExtraSequence(kMars57GameLevel3, kExtraCompletedFlag, kFilterNoInput); + break; + case 3: + _bombFuse.stopFuse(); + _guessObject.disposeReactorGuess(); + _undoPict.deallocateSurface(); + _guessHistory.disposeReactorHistory(); + _choiceHighlight.disposeReactorChoiceHighlight(); + GameState.setScoringDisarmedCardBomb(); + startExtraSequence(kMars57GameSolved, kExtraCompletedFlag, kFilterNoInput); + break; + } + } else if (_guessHistory.getNumGuesses() >= 5) { + _vm->delayShell(2, 1); + bombExplodesInGame(); + } + } +} + +void Mars::bombExplodesInGame() { + _guessObject.disposeReactorGuess(); + _undoPict.deallocateSurface(); + _guessHistory.disposeReactorHistory(); + _choiceHighlight.disposeReactorChoiceHighlight(); + startExtraSequence(kMars57BombExplodesInGame, kExtraCompletedFlag, kFilterNoInput); +} + +void Mars::didntFindBomb() { + die(kDeathDidntFindMarsBomb); +} + +Common::String Mars::getBriefingMovie() { + Common::String movieName = Neighborhood::getBriefingMovie(); + + if (!movieName.empty()) + return movieName; + + return "Images/AI/Mars/XM01"; +} + +Common::String Mars::getEnvScanMovie() { + Common::String movieName = Neighborhood::getEnvScanMovie(); + + if (movieName.empty()) { + tRoomID room = GameState.getCurrentRoom(); + + if (room >= kMars0A && room <= kMars21) + return "Images/AI/Mars/XME1"; + else if (room >= kMars22 && room <= kMars31South) + return "Images/AI/Mars/XME2"; + else if (room >= kMars52 && room <= kMars58) + return "Images/AI/Mars/XMREACE"; + + return "Images/AI/Mars/XME3"; + } + + return movieName; +} + +uint Mars::getNumHints() { + uint numHints = Neighborhood::getNumHints(); + + if (numHints == 0) { + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars27, kNorth): + case MakeRoomView(kMars28, kNorth): + case MakeRoomView(kMars49, kSouth): + numHints = 1; + break; + case MakeRoomView(kMars31, kSouth): + case MakeRoomView(kMars31South, kSouth): + if (!GameState.isTakenItemID(kMarsCard)) + numHints = 1; + break; + case MakeRoomView(kMars34, kNorth): + if (!GameState.isTakenItemID(kMarsCard)) + numHints = 2; + break; + case MakeRoomView(kMars34, kSouth): + case MakeRoomView(kMars45, kNorth): + if (!GameState.isTakenItemID(kCrowbar)) + numHints = 1; + break; + case MakeRoomView(kMars51, kEast): + if (GameState.isCurrentDoorOpen() && !GameState.getShieldOn()) { + if (GameState.isTakenItemID(kShieldBiochip)) + numHints = 1; + else + numHints = 2; + } + break; + case MakeRoomView(kMars52, kNorth): + case MakeRoomView(kMars52, kSouth): + case MakeRoomView(kMars52, kEast): + case MakeRoomView(kMars52, kWest): + case MakeRoomView(kMars54, kNorth): + case MakeRoomView(kMars54, kSouth): + case MakeRoomView(kMars54, kEast): + case MakeRoomView(kMars54, kWest): + case MakeRoomView(kMars56, kNorth): + case MakeRoomView(kMars56, kSouth): + case MakeRoomView(kMars56, kWest): + case MakeRoomView(kMars58, kNorth): + case MakeRoomView(kMars58, kSouth): + case MakeRoomView(kMars58, kEast): + case MakeRoomView(kMars58, kWest): + if (!GameState.getShieldOn()) { + if (GameState.isTakenItemID(kShieldBiochip)) + numHints = 1; + else + numHints = 2; + } + break; + case MakeRoomView(kMars56, kEast): + if (getCurrentActivation() == kActivateReactorReadyForNitrogen) { + if ((tExtraID)_lastExtra == kMars57LowerScreenClosed) + numHints = 3; + } else if (getCurrentActivation() == kActivateReactorPlatformOut) { + if (!GameState.getShieldOn()) { + if (GameState.isTakenItemID(kShieldBiochip)) + numHints = 1; + else + numHints = 2; + } + } + break; + } + } + + return numHints; +} + +Common::String Mars::getHintMovie(uint hintNum) { + Common::String movieName = Neighborhood::getHintMovie(hintNum); + + if (movieName.empty()) { + switch (GameState.getCurrentRoomAndView()) { + case MakeRoomView(kMars27, kNorth): + case MakeRoomView(kMars28, kNorth): + return "Images/AI/Globals/XGLOB5C"; + case MakeRoomView(kMars31, kSouth): + case MakeRoomView(kMars31South, kSouth): + case MakeRoomView(kMars34, kSouth): + case MakeRoomView(kMars45, kNorth): + return "Images/AI/Globals/XGLOB1C"; + case MakeRoomView(kMars34, kNorth): + if (hintNum == 1) + return "Images/AI/Globals/XGLOB2C"; + + return "Images/AI/Globals/XGLOB3G"; + case MakeRoomView(kMars49, kSouth): + if (GameState.isTakenItemID(kAirMask)) + return "Images/AI/Globals/XGLOB3E"; + + return "Images/AI/Globals/XGLOB1C"; + case MakeRoomView(kMars51, kEast): + if (GameState.isTakenItemID(kShieldBiochip)) + return "Images/AI/Mars/XM52NW"; + + if (hintNum == 1) + return "Images/AI/Globals/XGLOB2D"; + + return "Images/AI/Globals/XGLOB3F"; + case MakeRoomView(kMars52, kNorth): + case MakeRoomView(kMars52, kSouth): + case MakeRoomView(kMars52, kEast): + case MakeRoomView(kMars52, kWest): + case MakeRoomView(kMars54, kNorth): + case MakeRoomView(kMars54, kSouth): + case MakeRoomView(kMars54, kEast): + case MakeRoomView(kMars54, kWest): + case MakeRoomView(kMars56, kNorth): + case MakeRoomView(kMars56, kSouth): + case MakeRoomView(kMars56, kWest): + case MakeRoomView(kMars58, kNorth): + case MakeRoomView(kMars58, kSouth): + case MakeRoomView(kMars58, kEast): + case MakeRoomView(kMars58, kWest): + if (hintNum == 1) { + if (GameState.isTakenItemID(kShieldBiochip)) + return "Images/AI/Mars/XM52NW"; + + return "Images/AI/Globals/XGLOB2D"; + } + + return "Images/AI/Globals/XGLOB3F"; + case MakeRoomView(kMars56, kEast): + if (getCurrentActivation() == kActivateReactorReadyForNitrogen) + return Common::String::format("Images/AI/Mars/XM57SD%d", hintNum); + + if (hintNum == 1) { + if (GameState.isTakenItemID(kShieldBiochip)) + return "Images/AI/Mars/XM52NW"; + + return "Images/AI/Globals/XGLOB2D"; + } + + return "Images/AI/Globals/XGLOB3F"; + } + } + + return movieName; +} + +bool Mars::inColorMatchingGame() { + return _guessObject.isDisplaying(); +} + +bool Mars::canSolve() { + return GameState.getCurrentRoomAndView() == MakeRoomView(kMars56, kEast) && (getCurrentActivation() == kActivateReactorReadyForNitrogen || + getCurrentActivation() == kActivateReactorReadyForCrowBar || inColorMatchingGame()); +} + +void Mars::doSolve() { + if (getCurrentActivation() == kActivateReactorReadyForNitrogen || getCurrentActivation() == kActivateReactorReadyForCrowBar) { + _utilityFuse.stopFuse(); + GameState.setMarsLockBroken(true); + GameState.setMarsLockFrozen(false); + startExtraLongSequence(kMars57OpenPanel, kMars57OpenPanelChoices, kExtraCompletedFlag, kFilterNoInput); + } else if (inColorMatchingGame()) { + _bombFuse.stopFuse(); + _guessObject.disposeReactorGuess(); + _undoPict.deallocateSurface(); + _guessHistory.disposeReactorHistory(); + _choiceHighlight.disposeReactorChoiceHighlight(); + startExtraSequence(kMars57GameSolved, kExtraCompletedFlag, kFilterNoInput); + } +} + +Common::String Mars::getSoundSpotsName() { + return "Sounds/Mars/Mars Spots"; +} + +Common::String Mars::getNavMovieName() { + return "Images/Mars/Mars.movie"; +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/mars.h b/engines/pegasus/neighborhood/mars/mars.h new file mode 100755 index 0000000000..3eb0fc80e6 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/mars.h @@ -0,0 +1,198 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_MARS_H +#define PEGASUS_NEIGHBORHOOD_MARS_MARS_H + +#include "pegasus/neighborhood/neighborhood.h" +#include "pegasus/neighborhood/mars/reactor.h" + +namespace Pegasus { + +class InventoryItem; +class Mars; + +enum tMarsTimerCode { + kMarsLaunchTubeReached, + kMarsCanyonChaseFinished, + kMarsSpaceChaseFinished // Player ran out of time... +}; + +struct tMarsTimerEvent { + Mars *mars; + tMarsTimerCode event; +}; + +enum tShuttleWeaponSelection { + kNoWeapon, + kEnergyBeam, + kGravitonCannon, + kTractorBeam +}; + +const tRoomID kMars0A = 0; +const tRoomID kMars35 = 38; +const tRoomID kMars39 = 42; +const tRoomID kMars60 = 58; +const tRoomID kMarsMaze004 = 60; +const tRoomID kMarsMaze200 = 224; + +class Mars : public Neighborhood { +friend void robotTimerExpiredFunction(FunctionPtr *, void *); +friend void lockThawTimerExpiredFunction(FunctionPtr *, void *); +friend void bombTimerExpiredFunction(FunctionPtr *, void *); +friend void bombTimerExpiredInGameFunction(FunctionPtr *, void *); +friend void airStageExpiredFunction(FunctionPtr *, void *); + +public: + Mars(InputHandler *, PegasusEngine *); + virtual ~Mars(); + + void flushGameState(); + + virtual uint16 getDateResID() const; + + virtual tAirQuality getAirQuality(const tRoomID); + + void checkAirMask(); + + Common::String getBriefingMovie(); + Common::String getEnvScanMovie(); + uint getNumHints(); + Common::String getHintMovie(uint); + + virtual void shieldOn(); + virtual void shieldOff(); + + void checkContinuePoint(const tRoomID, const tDirectionConstant); + + bool canSolve(); + void doSolve(); + + bool inColorMatchingGame(); + + // TODO: Space chase functions + +protected: + enum { + kMarsPrivatePodStorageOpenFlag, + kMarsPrivatePodTurnLeftFlag, + kMarsPrivatePodTurnRightFlag, + kMarsPrivateRobotTiredOfWaitingFlag, + kMarsPrivatePlatformZoomedInFlag, + kMarsPrivateBombExposedFlag, + kMarsPrivateDraggingBombFlag, + kMarsPrivateInSpaceChaseFlag, + kMarsPrivateGotMapChipFlag, + kMarsPrivateGotOpticalChipFlag, + kMarsPrivateGotShieldChipFlag, + kNumMarsPrivateFlags + }; + + void init(); + void start(); + void setUpAIRules(); + void arriveAt(const tRoomID, const tDirectionConstant); + void takeItemFromRoom(Item *); + void dropItemIntoRoom(Item *, Hotspot *); + void activateHotspots(); + void activateOneHotspot(HotspotInfoTable::Entry &, Hotspot *); + void clickInHotspot(const Input &, const Hotspot *); + tInputBits getInputFilter(); + + TimeValue getViewTime(const tRoomID, const tDirectionConstant); + void getZoomEntry(const tHotSpotID, ZoomTable::Entry &); + void findSpotEntry(const tRoomID, const tDirectionConstant, tSpotFlags, SpotTable::Entry &); + tCanOpenDoorReason canOpenDoor(DoorTable::Entry &); + void openDoor(); + void closeDoorOffScreen(const tRoomID, const tDirectionConstant); + int16 getStaticCompassAngle(const tRoomID, const tDirectionConstant); + void getExitCompassMove(const ExitTable::Entry &, FaderMoveSpec &); + void getExtraCompassMove(const ExtraTable::Entry &, FaderMoveSpec &); + void turnTo(const tDirectionConstant); + void receiveNotification(Notification *, const tNotificationFlags); + void doorOpened(); + void setUpReactorEnergyDrain(); + Hotspot *getItemScreenSpot(Item *, DisplayElement *); + void lockThawed(); + void robotTiredOfWaiting(); + + void setUpReactorLevel1(); + void setUpNextReactorLevel(); + void makeColorSequence(); + void doUndoOneGuess(); + void doReactorGuess(int32 guess); + void bombExplodesInGame(); + void didntFindBomb(); + tCanMoveForwardReason canMoveForward(ExitTable::Entry &); + void cantMoveThatWay(tCanMoveForwardReason); + void moveForward(); + void bumpIntoWall(); + void turnLeft(); + void turnRight(); + void airStageExpired(); + void loadAmbientLoops(); + void checkAirlockDoors(); + void pickedUpItem(Item *item); + void cantOpenDoor(tCanOpenDoorReason); + void launchMaze007Robot(); + void launchMaze015Robot(); + void launchMaze101Robot(); + void launchMaze104Robot(); + void launchMaze133Robot(); + void launchMaze136Robot(); + void launchMaze184Robot(); + void timerExpired(const uint32); + void spotCompleted(); + + // TODO: Space chase functions + + Common::String getSoundSpotsName(); + Common::String getNavMovieName(); + + InventoryItem *_attackingItem; + FuseFunction _bombFuse; + FuseFunction _noAirFuse; + FuseFunction _utilityFuse; + FlagsArray _privateFlags; + uint _reactorStage, _nextGuess; + int32 _currentGuess[3]; + ReactorGuess _guessObject; + Picture _undoPict; + ReactorHistory _guessHistory; + ReactorChoiceHighlight _choiceHighlight; + + Picture _shuttleInterface1; + Picture _shuttleInterface2; + Picture _shuttleInterface3; + Picture _shuttleInterface4; + Movie _canyonChaseMovie; + + // TODO: Space chase variables +}; + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From 1529ed0891b9721c349e84468dcb28d4f655dc1b Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Mon, 17 Oct 2011 09:21:49 -0400 Subject: PEGASUS: Implement deleting items when inventory is full --- engines/pegasus/neighborhood/mars/mars.cpp | 3 --- engines/pegasus/neighborhood/mars/mars.h | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index 3f46edb9a3..f13890cc18 100755 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -292,11 +292,9 @@ const tRoomID kMars28 = 29; const tRoomID kMars29 = 30; const tRoomID kMars30 = 31; const tRoomID kMars31 = 32; -const tRoomID kMars31South = 33; const tRoomID kMars32 = 34; const tRoomID kMars33 = 35; const tRoomID kMars33North = 36; -const tRoomID kMars34 = 37; const tRoomID kMars36 = 39; const tRoomID kMars37 = 40; const tRoomID kMars38 = 41; @@ -308,7 +306,6 @@ const tRoomID kMars45 = 47; const tRoomID kMars46 = 48; const tRoomID kMars47 = 49; const tRoomID kMars48 = 50; -const tRoomID kMars49 = 51; const tRoomID kMars50 = 52; const tRoomID kMars51 = 53; const tRoomID kMars52 = 54; diff --git a/engines/pegasus/neighborhood/mars/mars.h b/engines/pegasus/neighborhood/mars/mars.h index 3eb0fc80e6..b663a621af 100755 --- a/engines/pegasus/neighborhood/mars/mars.h +++ b/engines/pegasus/neighborhood/mars/mars.h @@ -53,8 +53,11 @@ enum tShuttleWeaponSelection { }; const tRoomID kMars0A = 0; +const tRoomID kMars31South = 33; +const tRoomID kMars34 = 37; const tRoomID kMars35 = 38; const tRoomID kMars39 = 42; +const tRoomID kMars49 = 51; const tRoomID kMars60 = 58; const tRoomID kMarsMaze004 = 60; const tRoomID kMarsMaze200 = 224; -- cgit v1.2.3 From de3962fbc8707f90eeed4cabfbaf06c7e939b565 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Sun, 23 Oct 2011 18:52:49 -0400 Subject: PEGASUS: Add the Mars canyon chase sequence --- engines/pegasus/neighborhood/mars/mars.cpp | 226 +++++++++++++++++- engines/pegasus/neighborhood/mars/mars.h | 258 ++++++++++++++++++++- .../neighborhood/mars/shuttleenergymeter.cpp | 116 +++++++++ .../pegasus/neighborhood/mars/shuttleenergymeter.h | 73 ++++++ 4 files changed, 664 insertions(+), 9 deletions(-) create mode 100755 engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp create mode 100755 engines/pegasus/neighborhood/mars/shuttleenergymeter.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index f13890cc18..7404e1e580 100755 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -23,6 +23,10 @@ * */ +#include "common/events.h" +#include "video/qt_decoder.h" + +#include "pegasus/cursor.h" #include "pegasus/energymonitor.h" #include "pegasus/gamestate.h" #include "pegasus/pegasus.h" @@ -698,9 +702,6 @@ const tExtraID kMars200DeathInBucket = 111; const tResIDType kReactorUndoHilitePICTID = 900; -const tCoordType kUndoHiliteLeft = kNavAreaLeft + 140; -const tCoordType kUndoHiliteTop = kNavAreaTop + 36; - const int16 kMars52Compass = 90; const int16 kMars54Compass = 180; const int16 kMars56Compass = 270; @@ -766,10 +767,18 @@ void airStageExpiredFunction(FunctionPtr *, void *mars) { ((Mars *)mars)->airStageExpired(); } +void marsTimerFunction(FunctionPtr *, void *event) { + ((MarsTimerEvent *)event)->mars->marsTimerExpired(*(MarsTimerEvent *)event); +} + Mars::Mars(InputHandler *nextHandler, PegasusEngine *owner) : Neighborhood(nextHandler, owner, "Mars", kMarsID), _guessObject(kNoDisplayElement), _undoPict(kNoDisplayElement), _guessHistory(kNoDisplayElement), _choiceHighlight(kNoDisplayElement), _shuttleInterface1(kNoDisplayElement), _shuttleInterface2(kNoDisplayElement), - _shuttleInterface3(kNoDisplayElement), _shuttleInterface4(kNoDisplayElement), _canyonChaseMovie(kNoDisplayElement) { + _shuttleInterface3(kNoDisplayElement), _shuttleInterface4(kNoDisplayElement), _canyonChaseMovie(kNoDisplayElement), + _leftShuttleMovie(kNoDisplayElement), _rightShuttleMovie(kNoDisplayElement), _lowerLeftShuttleMovie(kNoDisplayElement), + _lowerRightShuttleMovie(kNoDisplayElement), _centerShuttleMovie(kNoDisplayElement), + _upperLeftShuttleMovie(kNoDisplayElement), _upperRightShuttleMovie(kNoDisplayElement), + _leftDamageShuttleMovie(kNoDisplayElement), _rightDamageShuttleMovie(kNoDisplayElement) { _noAirFuse.setFunctionPtr(&airStageExpiredFunction, this); setIsItemTaken(kMarsCard); setIsItemTaken(kAirMask); @@ -2980,7 +2989,7 @@ void Mars::receiveNotification(Notification *notification, const tNotificationFl break; } } else if ((flag & kTimeForCanyonChaseFlag) != 0) { - // TODO + doCanyonChase(); } else if ((flag & kExplosionFinishedFlag) != 0) { // TODO } else if ((flag & kTimeToTransportFlag) != 0) { @@ -2998,6 +3007,213 @@ void Mars::spotCompleted() { g_AIArea->playAIMovie(kRightAreaSignature, "Images/AI/Mars/XN59WD", false, kWarningInterruption); } +void Mars::doCanyonChase() { + GameState.setScoringEnteredShuttle(); + setNextHandler(_vm); + throwAwayInterface(); + + _vm->_cursor->hide(); + + // Open the spot sounds movie again... + _spotSounds.initFromQuickTime(getSoundSpotsName()); + _spotSounds.setVolume(_vm->getSoundFXLevel()); + + Video::VideoDecoder *video = new Video::QuickTimeDecoder(); + if (!video->loadFile("Images/Mars/M44ESA.movie")) + error("Could not load interface->shuttle transition video"); + + while (!_vm->shouldQuit() && !video->endOfVideo()) { + if (video->needsUpdate()) { + const Graphics::Surface *frame = video->decodeNextFrame(); + + if (frame) + _vm->drawScaledFrame(frame, 0, 0); + } + + Common::Event event; + while (g_system->getEventManager()->pollEvent(event)) + ; + + g_system->delayMillis(10); + } + + delete video; + + if (_vm->shouldQuit()) + return; + + initOnePicture(&_shuttleInterface1, "Images/Mars/MCmain1.pict", kShuttleBackgroundOrder, kShuttle1Left, + kShuttle1Top, true); + initOnePicture(&_shuttleInterface2, "Images/Mars/MCmain2.pict", kShuttleBackgroundOrder, kShuttle2Left, + kShuttle2Top, true); + initOnePicture(&_shuttleInterface3, "Images/Mars/MCmain3.pict", kShuttleBackgroundOrder, kShuttle3Left, + kShuttle3Top, true); + initOnePicture(&_shuttleInterface4, "Images/Mars/MCmain4.pict", kShuttleBackgroundOrder, kShuttle4Left, + kShuttle4Top, true); + + initOneMovie(&_canyonChaseMovie, "Images/Mars/Canyon.movie", + kShuttleMonitorOrder, kShuttleWindowLeft, kShuttleWindowTop, true); + _canyonChaseMovie.setVolume(_vm->getSoundFXLevel()); + + loadLoopSound1("Sounds/Mars/Inside Cockpit.22K.8.AIFF"); + + // Swing shuttle around... + playMovieSegment(&_canyonChaseMovie, kShuttleSwingStart, kShuttleSwingStop); + + initOneMovie(&_leftShuttleMovie, "Images/Mars/Left Shuttle.movie", + kShuttleMonitorOrder, kShuttleLeftLeft, kShuttleLeftTop, false); + + initOneMovie(&_rightShuttleMovie, "Images/Mars/Right Shuttle.movie", + kShuttleMonitorOrder, kShuttleRightLeft, kShuttleRightTop, false); + + initOneMovie(&_lowerLeftShuttleMovie, "Images/Mars/Lower Left Shuttle.movie", kShuttleMonitorOrder, + kShuttleLowerLeftLeft, kShuttleLowerLeftTop, false); + + initOneMovie(&_lowerRightShuttleMovie, "Images/Mars/Lower Right Shuttle.movie", kShuttleMonitorOrder, + kShuttleLowerRightLeft, kShuttleLowerRightTop, false); + + initOneMovie(&_centerShuttleMovie, "Images/Mars/Center Shuttle.movie", + kShuttleMonitorOrder, kShuttleCenterLeft, kShuttleCenterTop, false); + + initOneMovie(&_upperLeftShuttleMovie, "Images/Mars/Upper Left Shuttle.movie", kShuttleMonitorOrder, + kShuttleUpperLeftLeft, kShuttleUpperLeftTop, false); + + initOneMovie(&_upperRightShuttleMovie, "Images/Mars/Upper Right Shuttle.movie", kShuttleMonitorOrder, + kShuttleUpperRightLeft, kShuttleUpperRightTop, false); + + initOneMovie(&_leftDamageShuttleMovie, "Images/Mars/Left Damage Shuttle.movie", + kShuttleStatusOrder, kShuttleLeftEnergyLeft, kShuttleLeftEnergyTop, false); + + initOneMovie(&_rightDamageShuttleMovie, "Images/Mars/Right Damage Shuttle.movie", + kShuttleStatusOrder, kShuttleRightEnergyLeft, kShuttleRightEnergyTop, false); + + _centerShuttleMovie.show(); + _centerShuttleMovie.setTime(kShuttleCenterBoardingTime); + playSpotSoundSync(kShuttleCockpitIn, kShuttleCockpitOut); + + _centerShuttleMovie.setTime(kShuttleCenterCheckTime); + playSpotSoundSync(kShuttleOnboardIn, kShuttleOnboardOut); + + _shuttleEnergyMeter.initShuttleEnergyMeter(); + _shuttleEnergyMeter.powerUpMeter(); + while (_shuttleEnergyMeter.isFading()) { + _vm->checkCallBacks(); + _vm->refreshDisplay(); + g_system->updateScreen(); + } + + _leftShuttleMovie.show(); + playMovieSegment(&_leftShuttleMovie, kShuttleLeftIntroStart, kShuttleLeftIntroStop); + + _leftShuttleMovie.setTime(kShuttleLeftNormalTime); + _leftShuttleMovie.redrawMovieWorld(); + + _leftDamageShuttleMovie.show(); + playMovieSegment(&_leftDamageShuttleMovie); + + // Take it down a tick initially. This sets the time to the time of the last tick, + // so that subsequence drops will drop it down a tick. + _leftDamageShuttleMovie.setTime(_leftDamageShuttleMovie.getTime() - 40); + + _lowerRightShuttleMovie.show(); + _lowerRightShuttleMovie.setTime(kShuttleLowerRightOffTime); + _lowerRightShuttleMovie.redrawMovieWorld(); + _centerShuttleMovie.setTime(kShuttleCenterNavCompTime); + _centerShuttleMovie.redrawMovieWorld(); + playSpotSoundSync(kShuttleNavigationIn, kShuttleNavigationOut); + + _centerShuttleMovie.setTime(kShuttleCenterCommTime); + _centerShuttleMovie.redrawMovieWorld(); + playSpotSoundSync(kShuttleCommunicationIn, kShuttleCommunicationOut); + + _centerShuttleMovie.setTime(kShuttleCenterAllSystemsTime); + _centerShuttleMovie.redrawMovieWorld(); + playSpotSoundSync(kShuttleAllSystemsIn, kShuttleAllSystemsOut); + + _centerShuttleMovie.setTime(kShuttleCenterSecureLooseTime); + _centerShuttleMovie.redrawMovieWorld(); + playSpotSoundSync(kShuttleSecureLooseIn, kShuttleSecureLooseOut); + + _centerShuttleMovie.setTime(kShuttleCenterAutoTestTime); + _centerShuttleMovie.redrawMovieWorld(); + playSpotSoundSync(kShuttleAutoTestingIn, kShuttleAutoTestingOut); + + _leftShuttleMovie.setTime(kShuttleLeftAutoTestTime); + _leftShuttleMovie.redrawMovieWorld(); + playSpotSoundSync(kMarsThrusterAutoTestIn, kMarsThrusterAutoTestOut); + _leftShuttleMovie.setTime(kShuttleLeftNormalTime); + _leftShuttleMovie.redrawMovieWorld(); + + _centerShuttleMovie.setTime(kShuttleCenterLaunchTime); + _centerShuttleMovie.redrawMovieWorld(); + playSpotSoundSync(kShuttlePrepareForDropIn, kShuttlePrepareForDropOut); + + playSpotSoundSync(kShuttleAllClearIn, kShuttleAllClearOut); + + _centerShuttleMovie.setTime(kShuttleCenterEnterTubeTime); + _centerShuttleMovie.redrawMovieWorld(); + + _lowerLeftShuttleMovie.show(); + _lowerLeftShuttleMovie.setTime(kShuttleLowerLeftCollisionTime); + + loadLoopSound1(""); + + _canyonChaseMovie.setSegment(kCanyonChaseStart, kCanyonChaseStop); + _canyonChaseMovie.start(); + + startMarsTimer(kLaunchTubeReachedTime, kMovieTicksPerSecond, kMarsLaunchTubeReached); +} + +void Mars::setSoundFXLevel(const uint16 level) { + Neighborhood::setSoundFXLevel(level); + + if (_canyonChaseMovie.isMovieValid()) + _canyonChaseMovie.setVolume(level); + + // TODO: Explosions +} + +void Mars::startMarsTimer(TimeValue time, TimeScale scale, MarsTimerCode code) { + _utilityFuse.primeFuse(time, scale); + _marsEvent.mars = this; + _marsEvent.event = code; + _utilityFuse.setFunctionPtr(&marsTimerFunction, (void *)&_marsEvent); + _utilityFuse.lightFuse(); +} + +void Mars::marsTimerExpired(MarsTimerEvent &event) { + switch (event.event) { + case kMarsLaunchTubeReached: + _lowerLeftShuttleMovie.setTime(kShuttleLowerLeftTubeTime); + _lowerLeftShuttleMovie.redrawMovieWorld(); + startMarsTimer(kCanyonChaseFinishedTime, kMovieTicksPerSecond, kMarsCanyonChaseFinished); + break; + case kMarsCanyonChaseFinished: + GameState.setScoringEnteredLaunchTube(); + + while (_canyonChaseMovie.isRunning()) { + _vm->checkCallBacks(); + _vm->refreshDisplay(); + _vm->_system->delayMillis(10); + } + + _canyonChaseMovie.stop(); + _canyonChaseMovie.stopDisplaying(); + _canyonChaseMovie.releaseMovie(); + + error("STUB: Space chase"); + break; + case kMarsSpaceChaseFinished: + // Player failed to stop the robot in time... + // TODO + break; + default: + break; + } + + _interruptionFilter = kFilterAllInput; +} + tAirQuality Mars::getAirQuality(const tRoomID room) { if ((room >= kMars36 && room <= kMars39) || (room >= kMarsMaze004 && room <= kMarsMaze200)) return kAirQualityVacuum; diff --git a/engines/pegasus/neighborhood/mars/mars.h b/engines/pegasus/neighborhood/mars/mars.h index b663a621af..1b29cdfc1e 100755 --- a/engines/pegasus/neighborhood/mars/mars.h +++ b/engines/pegasus/neighborhood/mars/mars.h @@ -28,24 +28,254 @@ #include "pegasus/neighborhood/neighborhood.h" #include "pegasus/neighborhood/mars/reactor.h" +#include "pegasus/neighborhood/mars/shuttleenergymeter.h" namespace Pegasus { +// Element Coordinates + +const tCoordType kUndoHiliteLeft = kNavAreaLeft + 140; +const tCoordType kUndoHiliteTop = kNavAreaTop + 36; + +const tCoordType kCurrentGuessLeft = kNavAreaLeft + 146; +const tCoordType kCurrentGuessTop = kNavAreaTop + 90; + +const tCoordType kReactorChoiceHiliteLeft = kNavAreaLeft + 116; +const tCoordType kReactorChoiceHiliteTop = kNavAreaTop + 158; + +const tCoordType kReactorHistoryLeft = kNavAreaLeft + 302; +const tCoordType kReactorHistoryTop = kNavAreaTop + 39; + +const tCoordType kAnswerLeft = kNavAreaLeft + 304; +const tCoordType kAnswerTop = kNavAreaTop + 180; + +const tCoordType kShuttle1Left = 0; +const tCoordType kShuttle1Top = 0; + +const tCoordType kShuttle2Left = 0; +const tCoordType kShuttle2Top = 96; + +const tCoordType kShuttle3Left = 500; +const tCoordType kShuttle3Top = 96; + +const tCoordType kShuttle4Left = 0; +const tCoordType kShuttle4Top = 320; + +const tCoordType kShuttleWindowLeft = 140; +const tCoordType kShuttleWindowTop = 96; +const tCoordType kShuttleWindowWidth = 360; +const tCoordType kShuttleWindowHeight = 224; + +const tCoordType kShuttleWindowMidH = (kShuttleWindowLeft * 2 + kShuttleWindowWidth) / 2; +const tCoordType kShuttleWindowMidV = (kShuttleWindowTop * 2 + kShuttleWindowHeight) / 2; + +const tCoordType kShuttleLeftLeft = 0; +const tCoordType kShuttleLeftTop = 128; + +const tCoordType kShuttleRightLeft = 506; +const tCoordType kShuttleRightTop = 128; + +const tCoordType kShuttleLowerLeftLeft = 74; +const tCoordType kShuttleLowerLeftTop = 358; + +const tCoordType kShuttleLowerRightLeft = 486; +const tCoordType kShuttleLowerRightTop = 354; + +const tCoordType kShuttleCenterLeft = 260; +const tCoordType kShuttleCenterTop = 336; + +const tCoordType kShuttleUpperLeftLeft = 30; +const tCoordType kShuttleUpperLeftTop = 32; + +const tCoordType kShuttleUpperRightLeft = 506; +const tCoordType kShuttleUpperRightTop = 52; + +const tCoordType kShuttleLeftEnergyLeft = 110; +const tCoordType kShuttleLeftEnergyTop = 186; + +const tCoordType kShuttleRightEnergyLeft = 510; +const tCoordType kShuttleRightEnergyTop = 186; + +const tCoordType kShuttleEnergyLeft = 186; +const tCoordType kShuttleEnergyTop = 60; +const tCoordType kShuttleEnergyWidth = 252; +const tCoordType kShuttleEnergyHeight = 22; + +const tCoordType kPlanetStartLeft = kShuttleWindowLeft; +const tCoordType kPlanetStartTop = kShuttleWindowTop + kShuttleWindowHeight; + +const tCoordType kPlanetStopLeft = kShuttleWindowLeft; +const tCoordType kPlanetStopTop = kShuttleWindowTop + kShuttleWindowHeight - 100; + +const tCoordType kShuttleTractorLeft = kShuttleWindowLeft + 6; +const tCoordType kShuttleTractorTop = kShuttleWindowTop + 56; +const tCoordType kShuttleTractorWidth = 348; +const tCoordType kShuttleTractorHeight = 112; + +const tCoordType kShuttleJunkLeft = kShuttleWindowLeft + 6; +const tCoordType kShuttleJunkTop = kShuttleWindowTop + 6; + +const tDisplayOrder kShuttlePlanetOrder = kInterfaceLayer; +const tDisplayOrder kShuttleAlienShipOrder = kShuttlePlanetOrder + 1; +const tDisplayOrder kShuttleRobotShipOrder = kShuttleAlienShipOrder + 1; +const tDisplayOrder kShuttleTractorBeamMovieOrder = kShuttleRobotShipOrder + 1; +const tDisplayOrder kShuttleWeaponBackOrder = kShuttleTractorBeamMovieOrder + 1; +const tDisplayOrder kShuttleJunkOrder = kShuttleWeaponBackOrder + 1; +const tDisplayOrder kShuttleWeaponFrontOrder = kShuttleJunkOrder + 1; +const tDisplayOrder kShuttleTractorBeamOrder = kShuttleWeaponFrontOrder + 1; +const tDisplayOrder kShuttleHUDOrder = kShuttleTractorBeamOrder + 1; +const tDisplayOrder kShuttleBackgroundOrder = kShuttleHUDOrder + 1; +const tDisplayOrder kShuttleMonitorOrder = kShuttleBackgroundOrder + 1; +const tDisplayOrder kShuttleStatusOrder = kShuttleMonitorOrder + 1; + +const TimeValue kShuttleSwingStart = 0; +const TimeValue kShuttleSwingStop = 5 * 600; + +const TimeValue kCanyonChaseStart = kShuttleSwingStop; +const TimeValue kCanyonChaseStop = 60 * 600 + 43 * 600 + 14 * 40; + +const TimeValue kLaunchTubeReachedTime = 60 * 600 + 38 * 600 - kCanyonChaseStart; +const TimeValue kCanyonChaseFinishedTime = kCanyonChaseStop - kCanyonChaseStart - + kLaunchTubeReachedTime; + +// Left shuttle. + +const TimeValue kShuttleLeftIntroStart = 0; +const TimeValue kShuttleLeftIntroStop = 400; + +const TimeValue kShuttleLeftBlankTime = 400; + +const TimeValue kShuttleLeftNormalTime = 440; + +const TimeValue kShuttleLeftAutoTestTime = 480; + +const TimeValue kShuttleLeftDamagedTime = 520; + +const TimeValue kShuttleLeftDampingTime = 560; + +const TimeValue kShuttleLeftGravitonTime = 600; + +const TimeValue kShuttleLeftTractorTime = 640; + +// Right shuttle. + +const TimeValue kShuttleRightIntroStart = 0; +const TimeValue kShuttleRightIntroStop = 400; + +const TimeValue kShuttleRightDestroyedStart = 400; +const TimeValue kShuttleRightDestroyedStop = 840; + +const TimeValue kShuttleRightBlankTime = 840; + +const TimeValue kShuttleRightNormalTime = 880; + +const TimeValue kShuttleRightDamagedTime = 920; + +const TimeValue kShuttleRightTargetLockTime = 960; + +const TimeValue kShuttleRightGravitonTime = 1000; + +const TimeValue kShuttleRightOverloadTime = 1040; + +// Lower Left shuttle. + +const TimeValue kShuttleLowerLeftCollisionTime = 0; + +const TimeValue kShuttleLowerLeftTubeTime = 40; + +const TimeValue kShuttleLowerLeftAutopilotTime = 80; + +// Lower Right shuttle. + +const TimeValue kShuttleLowerRightOffTime = 0; + +const TimeValue kShuttleLowerRightTrackingTime = 40; + +const TimeValue kShuttleLowerRightTransportTime = 80; + +const TimeValue kShuttleLowerRightTransportHiliteTime = 120; + +// Center shuttle. + +const TimeValue kShuttleCenterBoardingTime = 0; + +const TimeValue kShuttleCenterCheckTime = 40; + +const TimeValue kShuttleCenterNavCompTime = 80; + +const TimeValue kShuttleCenterCommTime = 120; + +const TimeValue kShuttleCenterWeaponsTime = 160; + +const TimeValue kShuttleCenterAllSystemsTime = 200; + +const TimeValue kShuttleCenterSecureLooseTime = 240; + +const TimeValue kShuttleCenterAutoTestTime = 280; + +const TimeValue kShuttleCenterLaunchTime = 320; + +const TimeValue kShuttleCenterEnterTubeTime = 360; + +const TimeValue kShuttleCenterTargetSightedTime = 400; + +const TimeValue kShuttleCenterVerifyingTime = 440; + +const TimeValue kShuttleCenterScanningTime = 480; + +const TimeValue kShuttleCenterSafeTime = 520; + +// Upper Left shuttle. + +const TimeValue kShuttleUpperLeftDimTime = 0; + +const TimeValue kShuttleUpperLeftDampingTime = 40; + +const TimeValue kShuttleUpperLeftGravitonTime = 80; + +const TimeValue kShuttleUpperLeftTractorTime = 120; + +// Upper Right shuttle. + +const TimeValue kShuttleUpperRightLockedTime = 0; + +const TimeValue kShuttleUpperRightArmedTime = 40; + +const TimeValue kShuttleUpperRightAlienDestroyedTime = 80; + +const TimeValue kShuttleUpperRightOverloadTime = 120; + +const TimeValue kShuttleUpperRightTargetDestroyedTime = 160; + +// Shuttle distance + +const int kShuttleDistance = 500; + +const int kJunkMaxDistance = kShuttleDistance; +const int kJunkMinDistance = 40; + +const int kEnergyBeamMaxDistance = kShuttleDistance; +const int kEnergyBeamMinDistance = 40; + +const int kGravitonMaxDistance = kShuttleDistance; +const int kGravitonMinDistance = 40; + + class InventoryItem; class Mars; -enum tMarsTimerCode { +enum MarsTimerCode { kMarsLaunchTubeReached, kMarsCanyonChaseFinished, kMarsSpaceChaseFinished // Player ran out of time... }; -struct tMarsTimerEvent { +struct MarsTimerEvent { Mars *mars; - tMarsTimerCode event; + MarsTimerCode event; }; -enum tShuttleWeaponSelection { +enum ShuttleWeaponSelection { kNoWeapon, kEnergyBeam, kGravitonCannon, @@ -68,6 +298,7 @@ friend void lockThawTimerExpiredFunction(FunctionPtr *, void *); friend void bombTimerExpiredFunction(FunctionPtr *, void *); friend void bombTimerExpiredInGameFunction(FunctionPtr *, void *); friend void airStageExpiredFunction(FunctionPtr *, void *); +friend void marsTimerFunction(FunctionPtr *, void *); public: Mars(InputHandler *, PegasusEngine *); @@ -91,6 +322,8 @@ public: void checkContinuePoint(const tRoomID, const tDirectionConstant); + void setSoundFXLevel(const uint16); + bool canSolve(); void doSolve(); @@ -170,6 +403,10 @@ protected: void timerExpired(const uint32); void spotCompleted(); + void doCanyonChase(void); + void startMarsTimer(TimeValue, TimeScale, MarsTimerCode); + void marsTimerExpired(MarsTimerEvent &); + // TODO: Space chase functions Common::String getSoundSpotsName(); @@ -193,6 +430,19 @@ protected: Picture _shuttleInterface4; Movie _canyonChaseMovie; + MarsTimerEvent _marsEvent; + + Movie _leftShuttleMovie; + Movie _rightShuttleMovie; + Movie _lowerLeftShuttleMovie; + Movie _lowerRightShuttleMovie; + Movie _centerShuttleMovie; + Movie _upperLeftShuttleMovie; + Movie _upperRightShuttleMovie; + Movie _leftDamageShuttleMovie; + Movie _rightDamageShuttleMovie; + ShuttleEnergyMeter _shuttleEnergyMeter; + // TODO: Space chase variables }; diff --git a/engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp b/engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp new file mode 100755 index 0000000000..f16735d6a8 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp @@ -0,0 +1,116 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/neighborhood/mars/mars.h" +#include "pegasus/neighborhood/mars/shuttleenergymeter.h" + +namespace Pegasus { + +ShuttleEnergyMeter::ShuttleEnergyMeter() : FaderAnimation(kNoDisplayElement) { + setBounds(kShuttleEnergyLeft, kShuttleEnergyTop, kShuttleEnergyLeft + kShuttleEnergyWidth, + kShuttleEnergyTop + kShuttleEnergyHeight); + setDisplayOrder(kShuttleStatusOrder); + setFaderValue(0); +} + +void ShuttleEnergyMeter::initShuttleEnergyMeter() { + _meterImage.getImageFromPICTFile("Images/Mars/Shuttle Energy.pict"); + _lowWarning.getImageFromPICTFile("Images/Mars/Shuttle Low Energy.pict"); + startDisplaying(); + show(); +} + +void ShuttleEnergyMeter::disposeShuttleEnergyMeter() { + stopFader(); + hide(); + stopDisplaying(); + _meterImage.deallocateSurface(); + _lowWarning.deallocateSurface(); +} + +void ShuttleEnergyMeter::draw(const Common::Rect &) { + int32 currentValue = getFaderValue(); + + Common::Rect r1, r2, bounds; + getBounds(bounds); + + if (currentValue < kLowShuttleEnergy) { + _lowWarning.getSurfaceBounds(r1); + r2 = r1; + r2.moveTo(bounds.left, bounds.top); + _lowWarning.copyToCurrentPort(r1, r2); + } + + _meterImage.getSurfaceBounds(r1); + r1.right = r1.left + r1.width() * currentValue / kFullShuttleEnergy; + r2 = r1; + r2.moveTo(bounds.left + 102, bounds.top + 6); + _meterImage.copyToCurrentPort(r1, r2); +} + +void ShuttleEnergyMeter::powerUpMeter() { + FaderMoveSpec moveSpec; + moveSpec.makeTwoKnotFaderSpec(kThirtyTicksPerSecond, 0, 0, 45, kFullShuttleEnergy); + startFader(moveSpec); +} + +void ShuttleEnergyMeter::setEnergyValue(const int32 value) { + stopFader(); + FaderMoveSpec moveSpec; + moveSpec.makeTwoKnotFaderSpec(kFifteenTicksPerSecond, value * 3, value, kFullShuttleEnergy * 3, kFullShuttleEnergy); + startFader(moveSpec); +} + +void ShuttleEnergyMeter::drainForTractorBeam() { + stopFader(); + TimeValue startTime = 0, stopTime; + int32 startValue = getFaderValue(), stopValue; + + if (startValue < kTractorBeamEnergy) { + stopTime = startValue * kTractorBeamTime / kTractorBeamEnergy; + stopValue = 0; + } else { + stopTime = kTractorBeamTime; + stopValue = startValue - kTractorBeamEnergy; + } + + FaderMoveSpec moveSpec; + moveSpec.makeTwoKnotFaderSpec(kTractorBeamScale, startTime, startValue, stopTime, stopValue); + startFader(moveSpec); +} + +int32 ShuttleEnergyMeter::getEnergyValue() const { + return getFaderValue(); +} + +void ShuttleEnergyMeter::dropEnergyValue(const int32 delta) { + setEnergyValue(getFaderValue() - delta); +} + +bool ShuttleEnergyMeter::enoughEnergyForTractorBeam() const { + return getEnergyValue() >= kTractorBeamEnergy; +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/shuttleenergymeter.h b/engines/pegasus/neighborhood/mars/shuttleenergymeter.h new file mode 100755 index 0000000000..169a0f63cd --- /dev/null +++ b/engines/pegasus/neighborhood/mars/shuttleenergymeter.h @@ -0,0 +1,73 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_SHUTTLEENERGYMETER_H +#define PEGASUS_NEIGHBORHOOD_MARS_SHUTTLEENERGYMETER_H + +#include "pegasus/fader.h" +#include "pegasus/surface.h" + +namespace Pegasus { + +const int32 kFullShuttleEnergy = 100; +// Low is 20 percent +const int32 kLowShuttleEnergy = kFullShuttleEnergy * 20 / 100; + +const int32 kMinDampingEnergy = 15; +const int32 kMinGravitonEnergy = 63; + +const TimeScale kTractorBeamScale = kFifteenTicksPerSecond; +const TimeValue kTractorBeamTime = kFiveSeconds * kTractorBeamScale; +const int32 kTractorBeamEnergy = kLowShuttleEnergy; + +class ShuttleEnergyMeter : public FaderAnimation { +public: + ShuttleEnergyMeter(); + ~ShuttleEnergyMeter() {} + + void initShuttleEnergyMeter(); + void disposeShuttleEnergyMeter(); + + void powerUpMeter(); + + void setEnergyValue(const int32); + int32 getEnergyValue() const; + + void dropEnergyValue(const int32); + + void drainForTractorBeam(); + + bool enoughEnergyForTractorBeam() const; + + void draw(const Common::Rect &); + +protected: + Surface _meterImage; + Surface _lowWarning; +}; + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From c3d9a1cb358e868b6af0a2c010dea017004aa90f Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Sun, 23 Oct 2011 20:52:22 -0400 Subject: PEGASUS: Add the hermite code for the space chase --- engines/pegasus/neighborhood/mars/hermite.cpp | 76 +++++++++++++++++++++++++++ engines/pegasus/neighborhood/mars/hermite.h | 41 +++++++++++++++ 2 files changed, 117 insertions(+) create mode 100755 engines/pegasus/neighborhood/mars/hermite.cpp create mode 100755 engines/pegasus/neighborhood/mars/hermite.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/hermite.cpp b/engines/pegasus/neighborhood/mars/hermite.cpp new file mode 100755 index 0000000000..814e92ff53 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/hermite.cpp @@ -0,0 +1,76 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/neighborhood/mars/hermite.h" + +namespace Pegasus { + +tCoordType hermite(tCoordType p1, tCoordType p4, tCoordType r1, tCoordType r4, int32 time, int32 duration) { + float t = (float)time / duration; + float tsq = t * t; + float tcu = t * tsq; + float tcu2 = tcu + tcu; + float tsq2 = tsq + tsq; + float tsq3 = tsq2 + tsq; + return (tCoordType)((tcu2 - tsq3 + 1) * p1 + (tsq3 - tcu2) * p4 + (tcu - tsq2 + t) * r1 + (tcu - tsq) * r4); +} + +tCoordType dHermite(tCoordType p1, tCoordType p4, tCoordType r1, tCoordType r4, int32 time, int32 duration) { + float t = (float)time / duration; + float t2 = t + t; + float t4 = t2 + t2; + float t6 = t4 + t2; + float tsq = t * t; + float tsq3 = tsq + tsq + tsq; + float tsq6 = tsq3 + tsq3; + return (tCoordType)((tsq6 - t6) * p1 + (t6 - tsq6) * p4 + (tsq3 - t4 + 1) * r1 + (tsq3 - t2) * r4); +} + +void hermite(Common::Point p1, Common::Point p4, Common::Point r1, Common::Point r4, int32 time, int32 duration, Common::Point &result) { + float t = (float)time / duration; + float tsq = t * t; + float tcu = t * tsq; + float tcu2 = tcu + tcu; + float tsq2 = tsq + tsq; + float tsq3 = tsq2 + tsq; + + result.x = (int16)((tcu2 - tsq3 + 1) * p1.x + (tsq3 - tcu2) * p4.x + (tcu - tsq2 + t) * r1.x + (tcu - tsq) * r4.x); + result.y = (int16)((tcu2 - tsq3 + 1) * p1.y + (tsq3 - tcu2) * p4.y + (tcu - tsq2 + t) * r1.y + (tcu - tsq) * r4.y); +} + +void dHermite(Common::Point p1, Common::Point p4, Common::Point r1, Common::Point r4, int32 time, int32 duration, Common::Point &result) { + float t = (float)time / duration; + float t2 = t + t; + float t4 = t2 + t2; + float t6 = t4 + t2; + float tsq = t * t; + float tsq3 = tsq + tsq + tsq; + float tsq6 = tsq3 + tsq3; + + result.x = (int16)((tsq6 - t6) * p1.x + (t6 - tsq6) * p4.x + (tsq3 - t4 + 1) * r1.x + (tsq3 - t2) * r4.x); + result.y = (int16)((tsq6 - t6) * p1.y + (t6 - tsq6) * p4.y + (tsq3 - t4 + 1) * r1.y + (tsq3 - t2) * r4.y); +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/hermite.h b/engines/pegasus/neighborhood/mars/hermite.h new file mode 100755 index 0000000000..de0122f84b --- /dev/null +++ b/engines/pegasus/neighborhood/mars/hermite.h @@ -0,0 +1,41 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_HERMITE_H +#define PEGASUS_NEIGHBORHOOD_MARS_HERMITE_H + +#include "common/rect.h" +#include "pegasus/types.h" + +namespace Pegasus { + +tCoordType hermite(tCoordType p1, tCoordType p4, tCoordType r1, tCoordType r4, int32 t, int32 duration); +tCoordType dHermite(tCoordType p1, tCoordType p4, tCoordType r1, tCoordType r4, int32 t, int32 duration); +void hermite(Common::Point p1, Common::Point p4, Common::Point r1, Common::Point r4, int32 t, int32 duration, Common::Point &result); +void dHermite(Common::Point p1, Common::Point p4, Common::Point r1, Common::Point r4, int32 t, int32 duration, Common::Point &result); + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From cbcdf9909223d220e94829cd57a0e76b573bb1f9 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Sun, 23 Oct 2011 21:38:40 -0400 Subject: PEGASUS: Add the basic 3D logic for the space chase --- engines/pegasus/neighborhood/mars/spacechase3d.cpp | 90 +++++++++++++++++++++ engines/pegasus/neighborhood/mars/spacechase3d.h | 91 ++++++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100755 engines/pegasus/neighborhood/mars/spacechase3d.cpp create mode 100755 engines/pegasus/neighborhood/mars/spacechase3d.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/spacechase3d.cpp b/engines/pegasus/neighborhood/mars/spacechase3d.cpp new file mode 100755 index 0000000000..a15898f573 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/spacechase3d.cpp @@ -0,0 +1,90 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/neighborhood/mars/spacechase3d.h" + +namespace Pegasus { + +void project3DTo2D(const Point3D &pt3D, Common::Point &pt2D) { + pt2D.x = (int)convertSpaceXToScreenH(pt3D.x, pt3D.z); + pt2D.y = (int)convertSpaceYToScreenV(pt3D.y, pt3D.z); +} + +void project2DTo3D(const Common::Point &pt2D, const float screenDistance, Point3D &pt3D) { + pt3D.x = convertScreenHToSpaceX(pt2D.x, screenDistance); + pt3D.y = convertScreenVToSpaceY(pt2D.y, screenDistance); + pt3D.z = screenDistance; +} + +void linearInterp(const Point3D &pt1, const Point3D &pt2, const float t, Point3D &pt3) { + pt3.x = pt1.x + (pt2.x - pt1.x) * t; + pt3.y = pt1.y + (pt2.y - pt1.y) * t; + pt3.z = pt1.z + (pt2.z - pt1.z) * t; +} + +void linearInterp(const Point3D &pt1, const float x2, const float y2, const float z2, const float t, Point3D &pt3) { + pt3.x = pt1.x + (x2 - pt1.x) * t; + pt3.y = pt1.y + (y2 - pt1.y) * t; + pt3.z = pt1.z + (z2 - pt1.z) * t; +} + +void linearInterp(const float x1, const float y1, const float z1, const Point3D &pt2, const float t, Point3D &pt3) { + pt3.x = x1 + (pt2.x - x1) * t; + pt3.y = y1 + (pt2.y - y1) * t; + pt3.z = z1 + (pt2.z - z1) * t; +} + +void linearInterp(const float x1, const float y1, const float z1, const float x2, const float y2, const float z2, + const float t, Point3D &pt3) { + pt3.x = x1 + (x2 - x1) * t; + pt3.y = y1 + (y2 - y1) * t; + pt3.z = z1 + (z2 - z1) * t; +} + +void linearInterp(const Common::Point &pt1, const Common::Point &pt2, const float t, Common::Point &pt3) { + pt3.x = (int)(pt1.x + (pt2.x - pt1.x) * t); + pt3.y = (int)(pt1.y + (pt2.y - pt1.y) * t); +} + +void linearInterp(const Common::Point &pt1, const float h2, const float v2, const float t, Common::Point &pt3) { + pt3.x = (int)(pt1.x + (h2 - pt1.x) * t); + pt3.y = (int)(pt1.y + (v2 - pt1.y) * t); +} + +void linearInterp(const float h1, const float v1, const Common::Point &pt2, const float t, Common::Point &pt3) { + pt3.x = (int)(h1 + (pt2.x - h1) * t); + pt3.y = (int)(v1 + (pt2.y - v1) * t); +} + +void linearInterp(const float h1, const float v1, const float h2, const float v2, const float t, Common::Point &pt3) { + pt3.x = (int)(h1 + (h2 - h1) * t); + pt3.y = (int)(v1 + (v2 - v1) * t); +} + +float linearInterp(const float arg1, const float arg2, const float t) { + return arg1 + (arg2 - arg1) * t; +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/spacechase3d.h b/engines/pegasus/neighborhood/mars/spacechase3d.h new file mode 100755 index 0000000000..3f22ba68e4 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/spacechase3d.h @@ -0,0 +1,91 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_SPACECHASE3D_H +#define PEGASUS_NEIGHBORHOOD_MARS_SPACECHASE3D_H + +#include "pegasus/neighborhood/mars/mars.h" + +namespace Pegasus { + +// This is approximately right for a field of view of 72 degrees +// (Should be set to the tangent of FOV). +//const float kTangentFOV = 0.76254; +const float kTangentFOV = 1.0; + +// Define these as macros and they can be used to define constants... +#define convertSpaceXToScreenH(x, z) \ + ((x) / (z) * (kScreenWidth / (2 * kTangentFOV)) + kShuttleWindowMidH) + +#define convertSpaceYToScreenV(y, z) \ + (kShuttleWindowMidV - (y) / (z) * (kScreenWidth / (2 * kTangentFOV))) + +#define convertScreenHToSpaceX(x, d) \ + (((2.0 * kTangentFOV) / kScreenWidth) * ((float)(x) - kShuttleWindowMidH) * (d)) + +#define convertScreenVToSpaceY(y, d) \ + (((2.0 * kTangentFOV) / kScreenWidth) * ((float)kShuttleWindowMidV - (y)) * (d)) + +struct Point3D { + float x, y, z; + + Point3D() : x(0), y(0), z(0) {} + Point3D(float x1, float y1, float z1) : x(x1), y(y1), z(z1) {} + bool operator==(const Point3D &p) const { return x == p.x && y == p.y && z == p.z; } + bool operator!=(const Point3D &p) const { return x != p.x || y != p.y || z != p.z; } + + void translate(float dx, float dy, float dz) { + x += dx; + y += dy; + z += dz; + } +}; + +const int kScreenWidth = kShuttleWindowWidth; + +bool isNegative(int a); +bool isPositive(int a); +int sign(int a); +bool sameSign(int a, int b); + +void project3DTo2D(const Point3D &pt3D, Common::Point &pt2D); +void project2DTo3D(const Common::Point &pt2D, const float screenDistance, Point3D &pt3D); + +void linearInterp(const Point3D &pt1, const Point3D &pt2, const float t, Point3D &pt3); +void linearInterp(const Point3D &pt1, const float x2, const float y2, const float z2, const float t, Point3D &pt3); +void linearInterp(const float x1, const float y1, const float z1, const Point3D &pt2, const float t, Point3D &pt3); +void linearInterp(const float x1, const float y1, const float z1, const float x2, + const float y2, const float z2, const float t, Point3D &pt3); + +void linearInterp(const Common::Point &pt1, const Common::Point &pt2, const float t, Common::Point &pt3); +void linearInterp(const Common::Point &pt1, const float h2, const float v2, const float t, Common::Point &pt3); +void linearInterp(const float h1, const float v1, const Common::Point &pt2, const float t, Common::Point &pt3); +void linearInterp(const float h1, const float v1, const float h2, const float v2, const float t, Common::Point &pt3); + +float linearInterp(const float arg1, const float arg2, const float t); + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From 841f96868aed34a0edc02c4b32d66849cd9f350c Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Sun, 23 Oct 2011 21:54:13 -0400 Subject: PEGASUS: Add the planet mover for the space chase --- engines/pegasus/neighborhood/mars/planetmover.cpp | 106 ++++++++++++++++++++++ engines/pegasus/neighborhood/mars/planetmover.h | 57 ++++++++++++ 2 files changed, 163 insertions(+) create mode 100755 engines/pegasus/neighborhood/mars/planetmover.cpp create mode 100755 engines/pegasus/neighborhood/mars/planetmover.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/planetmover.cpp b/engines/pegasus/neighborhood/mars/planetmover.cpp new file mode 100755 index 0000000000..368c295e76 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/planetmover.cpp @@ -0,0 +1,106 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/movie.h" +#include "pegasus/pegasus.h" +#include "pegasus/neighborhood/mars/hermite.h" +#include "pegasus/neighborhood/mars/mars.h" +#include "pegasus/neighborhood/mars/planetmover.h" + +namespace Pegasus { + +const TimeScale kRovingScale = kTractorBeamScale; +const TimeValue kRovingTime = kTenSeconds * kRovingScale; +const TimeValue kRovingSlop = kTwoSeconds * kRovingScale; + +const tCoordType kMaxVelocity = 20; + +PlanetMover::PlanetMover() { + setScale(kRovingScale); + _dropping = false; + _planetMovie = 0; +} + +void PlanetMover::startMoving(Movie *planetMovie) { + _planetMovie = planetMovie; + _p4 = kPlanetStartTop; + _r4 = ((PegasusEngine *)g_engine)->getRandomNumber(kMaxVelocity - 1); + if (_r4 + _p4 < kPlanetStopTop) + _r4 = kPlanetStopTop - _p4; + newDestination(); +} + +void PlanetMover::stopMoving() { + stop(); +} + +void PlanetMover::dropPlanetOutOfSight() { + stop(); + tCoordType currentLoc = hermite(_p1, _p4, _r1, _r4, _lastTime, _duration); + tCoordType currentV = dHermite(_p1, _p4, _r1, _r4, _lastTime, _duration); + _p1 = currentLoc; + _r1 = currentV; + _p4 = kPlanetStartTop; + _r4 = 0; + _duration = kTractorBeamTime - kTractorBeamScale; + _dropping = true; + setSegment(0, _duration); + setTime(0); + start(); +} + +void PlanetMover::newDestination() { + _p1 = _p4; + _r1 = _r4; + + // Slightly worked differently than the original to work into our random number stuff + uint diff = ABS(kPlanetStopTop - kPlanetStartTop); + _p4 = kPlanetStopTop + (diff != 0) ? ((PegasusEngine *)g_engine)->getRandomNumber(diff - 1) : 0; + + _r4 = ((PegasusEngine *)g_engine)->getRandomNumber(kMaxVelocity - 1); + + if (_r4 + _p4 < kPlanetStopTop) + _r4 = kPlanetStopTop - _p4; + + stop(); + _duration = kRovingTime + ((PegasusEngine *)g_engine)->getRandomNumber(kRovingSlop - 1); + setSegment(0, _duration); + setTime(0); + start(); +} + +void PlanetMover::timeChanged(const TimeValue) { + if (_planetMovie) { + _planetMovie->moveElementTo(kPlanetStartLeft, hermite(_p1, _p4, _r1, _r4, _lastTime, _duration)); + if (_lastTime == _duration) { + if (_dropping) + stop(); + else + newDestination(); + } + } +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/planetmover.h b/engines/pegasus/neighborhood/mars/planetmover.h new file mode 100755 index 0000000000..faf76cd9fa --- /dev/null +++ b/engines/pegasus/neighborhood/mars/planetmover.h @@ -0,0 +1,57 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_PLANETMOVER_H +#define PEGASUS_NEIGHBORHOOD_MARS_PLANETMOVER_H + +#include "pegasus/timers.h" + +namespace Pegasus { + +class Movie; + +class PlanetMover : IdlerTimeBase { +public: + PlanetMover(); + virtual ~PlanetMover() {} + + void startMoving(Movie *); + void stopMoving(); + + void dropPlanetOutOfSight(); + +protected: + void newDestination(); + virtual void timeChanged(const TimeValue); + + Movie *_planetMovie; + tCoordType _p1, _p4, _r1, _r4; + TimeValue _duration; + bool _dropping; +}; + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From b3059e75e2597671abe501e62e73138f0825976b Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Sun, 23 Oct 2011 22:50:54 -0400 Subject: PEGASUS: Add the space junk stuff --- engines/pegasus/neighborhood/mars/mars.cpp | 131 ++++++++++++++- engines/pegasus/neighborhood/mars/mars.h | 7 + engines/pegasus/neighborhood/mars/spacejunk.cpp | 213 ++++++++++++++++++++++++ engines/pegasus/neighborhood/mars/spacejunk.h | 76 +++++++++ 4 files changed, 423 insertions(+), 4 deletions(-) create mode 100755 engines/pegasus/neighborhood/mars/spacejunk.cpp create mode 100755 engines/pegasus/neighborhood/mars/spacejunk.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index 7404e1e580..b5564bb88a 100755 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -778,7 +778,7 @@ Mars::Mars(InputHandler *nextHandler, PegasusEngine *owner) : Neighborhood(nextH _leftShuttleMovie(kNoDisplayElement), _rightShuttleMovie(kNoDisplayElement), _lowerLeftShuttleMovie(kNoDisplayElement), _lowerRightShuttleMovie(kNoDisplayElement), _centerShuttleMovie(kNoDisplayElement), _upperLeftShuttleMovie(kNoDisplayElement), _upperRightShuttleMovie(kNoDisplayElement), - _leftDamageShuttleMovie(kNoDisplayElement), _rightDamageShuttleMovie(kNoDisplayElement) { + _leftDamageShuttleMovie(kNoDisplayElement), _rightDamageShuttleMovie(kNoDisplayElement), _explosions(kNoDisplayElement) { _noAirFuse.setFunctionPtr(&airStageExpiredFunction, this); setIsItemTaken(kMarsCard); setIsItemTaken(kAirMask); @@ -2991,6 +2991,8 @@ void Mars::receiveNotification(Notification *notification, const tNotificationFl } else if ((flag & kTimeForCanyonChaseFlag) != 0) { doCanyonChase(); } else if ((flag & kExplosionFinishedFlag) != 0) { + _explosions.stop(); + _explosions.hide(); // TODO } else if ((flag & kTimeToTransportFlag) != 0) { // TODO @@ -3170,7 +3172,8 @@ void Mars::setSoundFXLevel(const uint16 level) { if (_canyonChaseMovie.isMovieValid()) _canyonChaseMovie.setVolume(level); - // TODO: Explosions + if (_explosions.isMovieValid()) + _explosions.setVolume(level); } void Mars::startMarsTimer(TimeValue time, TimeScale scale, MarsTimerCode code) { @@ -3181,7 +3184,10 @@ void Mars::startMarsTimer(TimeValue time, TimeScale scale, MarsTimerCode code) { _utilityFuse.lightFuse(); } -void Mars::marsTimerExpired(MarsTimerEvent &event) { +void Mars::marsTimerExpired(MarsTimerEvent &event) { + Common::Rect r; + uint16 x, y; + switch (event.event) { case kMarsLaunchTubeReached: _lowerLeftShuttleMovie.setTime(kShuttleLowerLeftTubeTime); @@ -3205,7 +3211,38 @@ void Mars::marsTimerExpired(MarsTimerEvent &event) { break; case kMarsSpaceChaseFinished: // Player failed to stop the robot in time... - // TODO + _interruptionFilter = kFilterNoInput; + + _rightShuttleMovie.setTime(kShuttleRightTargetLockTime); + _rightShuttleMovie.redrawMovieWorld(); + + _upperRightShuttleMovie.show(); + _upperRightShuttleMovie.setTime(kShuttleUpperRightLockedTime); + _upperRightShuttleMovie.redrawMovieWorld(); + + _rightShuttleMovie.setTime(kShuttleRightGravitonTime); + _rightShuttleMovie.redrawMovieWorld(); + _upperRightShuttleMovie.setTime(kShuttleUpperRightArmedTime); + _upperRightShuttleMovie.redrawMovieWorld(); + + _vm->delayShell(3, 1); + + x = _vm->getRandomNumber(19); + y = _vm->getRandomNumber(19); + + r = Common::Rect(kShuttleWindowMidH - x, kShuttleWindowMidV - y, + kShuttleWindowMidH - x + 20, kShuttleWindowMidV - y + 20); + showBigExplosion(r, kShuttleAlienShipOrder); + + while (_explosions.isRunning()) { + _vm->checkCallBacks(); + _vm->refreshDisplay(); + g_system->delayMillis(10); + } + + throwAwayMarsShuttle(); + reinstateMonocleInterface(); + recallToTSAFailure(); break; default: break; @@ -3214,6 +3251,92 @@ void Mars::marsTimerExpired(MarsTimerEvent &event) { _interruptionFilter = kFilterAllInput; } +void Mars::throwAwayMarsShuttle() { + _shuttleInterface1.deallocateSurface(); + _shuttleInterface1.stopDisplaying(); + _shuttleInterface2.deallocateSurface(); + _shuttleInterface2.stopDisplaying(); + _shuttleInterface3.deallocateSurface(); + _shuttleInterface3.stopDisplaying(); + _shuttleInterface4.deallocateSurface(); + _shuttleInterface4.stopDisplaying(); + + _spotSounds.disposeSound(); + + _canyonChaseMovie.releaseMovie(); + _canyonChaseMovie.stopDisplaying(); + _leftShuttleMovie.releaseMovie(); + _leftShuttleMovie.stopDisplaying(); + _rightShuttleMovie.releaseMovie(); + _rightShuttleMovie.stopDisplaying(); + _lowerLeftShuttleMovie.releaseMovie(); + _lowerLeftShuttleMovie.stopDisplaying(); + _lowerRightShuttleMovie.releaseMovie(); + _lowerRightShuttleMovie.stopDisplaying(); + _centerShuttleMovie.releaseMovie(); + _centerShuttleMovie.stopDisplaying(); + _upperLeftShuttleMovie.releaseMovie(); + _upperLeftShuttleMovie.stopDisplaying(); + _upperRightShuttleMovie.releaseMovie(); + _upperRightShuttleMovie.stopDisplaying(); + _leftDamageShuttleMovie.releaseMovie(); + _leftDamageShuttleMovie.stopDisplaying(); + _rightDamageShuttleMovie.releaseMovie(); + _rightDamageShuttleMovie.stopDisplaying(); + + // TODO: Some more to do here + + _explosions.releaseMovie(); + _explosions.stopDisplaying(); + + loadLoopSound1(""); +} + +void Mars::showBigExplosion(const Common::Rect &r, const tDisplayOrder order) { + if (_explosions.isMovieValid()) { + _explosions.setDisplayOrder(order); + + Common::Rect r2 = r; + int dx = r.width() / 2; + int dy = r.height() / 2; + r2.left -= dx; + r2.right += dx; + r2.top -= dy; + r2.bottom += dy; + + _explosions.setBounds(r2); + _explosions.show(); + _explosions.stop(); + _explosions.setSegment(kBigExplosionStart, kBigExplosionStop); + _explosions.setTime(kBigExplosionStart); + _explosionCallBack.scheduleCallBack(kTriggerAtStop, 0, 0); + _explosions.start(); + } +} + +void Mars::hitByJunk() { + _leftDamageShuttleMovie.setTime(_leftDamageShuttleMovie.getTime() - 40); + playSpotSoundSync(kMarsJunkCollisionIn, kMarsJunkCollisionOut); + + if (_leftDamageShuttleMovie.getTime() == 0) { + die(kDeathRanIntoSpaceJunk); + } else { + TimeValue t = _leftDamageShuttleMovie.getTime() / 40; + + if (t == 1) + playSpotSoundSync(kShuttleHullBreachIn, kShuttleHullBreachOut); + + t = _leftShuttleMovie.getTime(); + _leftShuttleMovie.setTime(kShuttleLeftDamagedTime); + _vm->delayShell(1, 3); + _leftShuttleMovie.setTime(t); + } +} + +void Mars::setUpNextDropTime() { + // TODO +} + tAirQuality Mars::getAirQuality(const tRoomID room) { if ((room >= kMars36 && room <= kMars39) || (room >= kMarsMaze004 && room <= kMarsMaze200)) return kAirQualityVacuum; diff --git a/engines/pegasus/neighborhood/mars/mars.h b/engines/pegasus/neighborhood/mars/mars.h index 1b29cdfc1e..f2d7b336e9 100755 --- a/engines/pegasus/neighborhood/mars/mars.h +++ b/engines/pegasus/neighborhood/mars/mars.h @@ -312,6 +312,10 @@ public: void checkAirMask(); + void showBigExplosion(const Common::Rect &, const tDisplayOrder); + void hitByJunk(); + void setUpNextDropTime(); + Common::String getBriefingMovie(); Common::String getEnvScanMovie(); uint getNumHints(); @@ -406,6 +410,7 @@ protected: void doCanyonChase(void); void startMarsTimer(TimeValue, TimeScale, MarsTimerCode); void marsTimerExpired(MarsTimerEvent &); + void throwAwayMarsShuttle(); // TODO: Space chase functions @@ -442,6 +447,8 @@ protected: Movie _leftDamageShuttleMovie; Movie _rightDamageShuttleMovie; ShuttleEnergyMeter _shuttleEnergyMeter; + ScalingMovie _explosions; + NotificationCallBack _explosionCallBack; // TODO: Space chase variables }; diff --git a/engines/pegasus/neighborhood/mars/spacejunk.cpp b/engines/pegasus/neighborhood/mars/spacejunk.cpp new file mode 100755 index 0000000000..8c78db4050 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/spacejunk.cpp @@ -0,0 +1,213 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/pegasus.h" +#include "pegasus/neighborhood/mars/spacejunk.h" + +namespace Pegasus { + +//const TimeValue kWeaponReboundTime = kTwoSeconds * kJunkTimeScale; +//const TimeValue kCollisionReboundTime = kOneSecond * kJunkTimeScale; +const tCoordType kMaxBounceSize = 90; +const tCoordType kBounceTargetHRange = 640 - kMaxBounceSize - 2; +const tCoordType kBounceTargetVRange = 480 - kMaxBounceSize - 2; + +const float kJunkXTarget = 0; +const float kJunkYTarget = 0; +const float kJunkZTarget = kJunkMinDistance; + +SpaceJunk *g_spaceJunk = 0; + +SpaceJunk::SpaceJunk(const tDisplayElementID id) : ScalingMovie(id) { + _timer.setScale(kJunkTimeScale); + _bouncing = false; + g_spaceJunk = this; +} + +SpaceJunk::~SpaceJunk() { + g_spaceJunk = 0; +} + +void SpaceJunk::launchJunk(int16 whichJunk, tCoordType xOrigin, tCoordType yOrigin) { + _bouncing = false; + TimeValue startTime = whichJunk * 16 * 40; + TimeValue stopTime = startTime + 16 * 40; + + _launchPoint = Point3D(convertScreenHToSpaceX(xOrigin, kJunkMaxDistance), + convertScreenVToSpaceY(yOrigin, kJunkMaxDistance), kJunkMaxDistance); + startIdling(); + stop(); + setFlags(0); + setSegment(startTime, stopTime); + setFlags(kLoopTimeBase); + setTime(startTime); + start(); + show(); + _timer.stop(); + _timer.setSegment(0, kJunkTravelTime); + _timer.setTime(0); + + // Force it to set up correctly from the get-go + useIdleTime(); + + _timer.start(); +} + +void SpaceJunk::setCenter(const tCoordType centerX, const tCoordType centerY) { + _center.x = centerX; + _center.y = centerY; + + Common::Rect r; + getBounds(r); + r.moveTo(centerX - (r.width() >> 1), centerY - (r.height() >> 1)); + setBounds(r); +} + +void SpaceJunk::setScaleSize(const tCoordType size) { + Common::Rect r; + r.left = _center.x - (size >> 1); + r.top = _center.y - (size >> 1); + r.right = r.left + size; + r.bottom = r.top + size; + setBounds(r); +} + +void SpaceJunk::useIdleTime() { + if (_bouncing) { + TimeValue time = _timer.getTime(); + Common::Point pt; + pt.x = linearInterp(0, _bounceTime, time, _bounceStart.x, _bounceStop.x); + pt.y = linearInterp(0, _bounceTime, time, _bounceStart.y, _bounceStop.y); + tCoordType size = linearInterp(0, _bounceTime, time, _bounceSizeStart, _bounceSizeStop); + setCenter(pt.x, pt.y); + setScaleSize(size); + + if (time == _bounceTime) { + stop(); + stopIdling(); + hide(); + ((Mars *)g_neighborhood)->setUpNextDropTime(); + } + } else { + float t = (float)_timer.getTime() / kJunkTravelTime; + linearInterp(_launchPoint, kJunkXTarget, kJunkYTarget, kJunkZTarget, t, _junkPosition); + + Common::Point pt2D; + project3DTo2D(_junkPosition, pt2D); + setCenter(pt2D.x, pt2D.y); + setScaleSize((int)(convertSpaceYToScreenV(_junkPosition.y - kJunkSize / 2, _junkPosition.z) - + convertSpaceYToScreenV(_junkPosition.y + kJunkSize / 2, _junkPosition.z))); + + if (t == 1.0) { + rebound(kCollisionReboundTime); + ((Mars *)g_neighborhood)->hitByJunk(); + } + } +} + +bool SpaceJunk::pointInJunk(const Common::Point &pt) { + Common::Rect r; + getBounds(r); + + int dx = r.width() / 4; + int dy = r.height() / 4; + + r.left += dx; + r.right -= dx; + r.top += dy; + r.top -= dy; + + return r.contains(pt); +} + +void SpaceJunk::rebound(const TimeValue reboundTime) { + Common::Rect bounds; + getBounds(bounds); + + _bounceStart.x = (bounds.left + bounds.right) >> 1; + _bounceStart.y = (bounds.top + bounds.bottom) >> 1; + + PegasusEngine *vm = (PegasusEngine *)g_engine; + + switch (vm->getRandomNumber(3)) { + case 0: + _bounceStop.x = kMaxBounceSize / 2 + 1 + vm->getRandomNumber(kBounceTargetHRange - 1); + _bounceStop.y = kMaxBounceSize / 2 + 1; + break; + case 1: + _bounceStop.x = kMaxBounceSize / 2 + 1 + vm->getRandomNumber(kBounceTargetHRange - 1); + _bounceStop.y = 480 - kMaxBounceSize / 2 + 1; + break; + case 2: + _bounceStop.x = kMaxBounceSize / 2 + 1; + _bounceStop.y = kMaxBounceSize / 2 + 1 + vm->getRandomNumber(kBounceTargetVRange - 1); + break; + case 3: + _bounceStop.x = 640 - kMaxBounceSize / 2 + 1; + _bounceStop.y = kMaxBounceSize / 2 + 1 + vm->getRandomNumber(kBounceTargetVRange - 1); + break; + } + + _bounceSizeStart = bounds.width(); + _bounceSizeStop = MIN(_bounceSizeStart, kMaxBounceSize); + + _timer.stop(); + _timer.setSegment(0, reboundTime); + _bounceTime = reboundTime; + _timer.setTime(0); + _timer.start(); + + _bouncing = true; +} + +void SpaceJunk::hitByEnergyBeam(Common::Point) { + rebound(kWeaponReboundTime); + setGlowing(true); + ((PegasusEngine *)g_engine)->delayShell(1, 3); + setGlowing(false); +} + +void SpaceJunk::hitByGravitonCannon(Common::Point impactPoint) { + stop(); + stopIdling(); + hide(); + + Common::Rect r; + getBounds(r); + r = Common::Rect::center(impactPoint.x, impactPoint.y, r.width(), r.height()); + + ((Mars *)g_neighborhood)->showBigExplosion(r, kShuttleJunkOrder); + ((Mars *)g_neighborhood)->setUpNextDropTime(); +} + +void SpaceJunk::getJunkPosition(Point3D &position) { + position = _junkPosition; +} + +bool SpaceJunk::isJunkFlying() { + return isIdling(); +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/spacejunk.h b/engines/pegasus/neighborhood/mars/spacejunk.h new file mode 100755 index 0000000000..d3315b0bd0 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/spacejunk.h @@ -0,0 +1,76 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_SPACEJUNK_H +#define PEGASUS_NEIGHBORHOOD_MARS_SPACEJUNK_H + +#include "pegasus/neighborhood/mars/spacechase3d.h" + +namespace Pegasus { + +const tCoordType kJunkMaxScreenSize = 250; + +const float kJunkSize = convertScreenVToSpaceY(kShuttleWindowMidV - kJunkMaxScreenSize / 2, kJunkMinDistance) - + convertScreenVToSpaceY(kShuttleWindowMidV + kJunkMaxScreenSize / 2, kJunkMinDistance); + +class SpaceJunk : public ScalingMovie, public Idler { +public: + SpaceJunk(const tDisplayElementID); + virtual ~SpaceJunk(); + + void setCenter(const tCoordType, const tCoordType); + void setScaleSize(const tCoordType); + + void useIdleTime(); + + void launchJunk(int16, tCoordType, tCoordType); + + void getJunkPosition(Point3D &); + bool isJunkFlying(); + + bool pointInJunk(const Common::Point &); + + void hitByEnergyBeam(Common::Point impactPoint); + void hitByGravitonCannon(Common::Point impactPoint); + + bool junkFlying() { return _timer.isRunning(); } + +protected: + void rebound(const TimeValue); + + TimeBase _timer; + Point3D _launchPoint, _junkPosition; + Common::Point _center; + bool _bouncing; + Common::Point _bounceStart, _bounceStop; + tCoordType _bounceSizeStart, _bounceSizeStop; + TimeValue _bounceTime; +}; + +extern SpaceJunk *g_spaceJunk; + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From 61311a2648f973c4ceb534243918d6462fea0488 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Mon, 24 Oct 2011 16:23:32 -0400 Subject: PEGASUS: Add the robot ship --- engines/pegasus/neighborhood/mars/mars.cpp | 73 +++++- engines/pegasus/neighborhood/mars/mars.h | 4 + engines/pegasus/neighborhood/mars/robotship.cpp | 269 +++++++++++++++++++++ engines/pegasus/neighborhood/mars/robotship.h | 86 +++++++ engines/pegasus/neighborhood/mars/spacechase3d.cpp | 16 ++ 5 files changed, 445 insertions(+), 3 deletions(-) create mode 100755 engines/pegasus/neighborhood/mars/robotship.cpp create mode 100755 engines/pegasus/neighborhood/mars/robotship.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index b5564bb88a..b6b9211554 100755 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -2993,7 +2993,19 @@ void Mars::receiveNotification(Notification *notification, const tNotificationFl } else if ((flag & kExplosionFinishedFlag) != 0) { _explosions.stop(); _explosions.hide(); - // TODO + if (g_robotShip->isDead()) { + GameState.setMarsFinished(true); + _centerShuttleMovie.hide(); + _upperRightShuttleMovie.show(); + _upperRightShuttleMovie.setTime(kShuttleUpperRightTargetDestroyedTime); + _upperRightShuttleMovie.redrawMovieWorld(); + _rightDamageShuttleMovie.hide(); + playMovieSegment(&_rightShuttleMovie, kShuttleRightDestroyedStart, kShuttleRightDestroyedStop); + playSpotSoundSync(kShuttleDestroyedIn, kShuttleDestroyedOut); + throwAwayMarsShuttle(); + reinstateMonocleInterface(); + recallToTSASuccess(); + } } else if ((flag & kTimeToTransportFlag) != 0) { // TODO } @@ -3285,7 +3297,8 @@ void Mars::throwAwayMarsShuttle() { _rightDamageShuttleMovie.stopDisplaying(); // TODO: Some more to do here - + _shuttleEnergyMeter.disposeShuttleEnergyMeter(); + _robotShip.cleanUpRobotShip(); _explosions.releaseMovie(); _explosions.stopDisplaying(); @@ -3314,6 +3327,28 @@ void Mars::showBigExplosion(const Common::Rect &r, const tDisplayOrder order) { } } +void Mars::showLittleExplosion(const Common::Rect &r, const tDisplayOrder order) { + if (_explosions.isMovieValid()) { + _explosions.setDisplayOrder(order); + + Common::Rect r2 = r; + int dx = r.width() / 2; + int dy = r.height() / 2; + r2.left -= dx; + r2.right += dx; + r2.top -= dy; + r2.bottom += dy; + _explosions.setBounds(r2); + + _explosions.show(); + _explosions.stop(); + _explosions.setSegment(kLittleExplosionStart, kLittleExplosionStop); + _explosions.setTime(kLittleExplosionStart); + _explosionCallBack.scheduleCallBack(kTriggerAtStop, 0, 0); + _explosions.start(); + } +} + void Mars::hitByJunk() { _leftDamageShuttleMovie.setTime(_leftDamageShuttleMovie.getTime() - 40); playSpotSoundSync(kMarsJunkCollisionIn, kMarsJunkCollisionOut); @@ -3334,7 +3369,39 @@ void Mars::hitByJunk() { } void Mars::setUpNextDropTime() { - // TODO + _robotShip.setUpNextDropTime(); +} + +void Mars::decreaseRobotShuttleEnergy(const int delta, Common::Point impactPoint) { + _rightDamageShuttleMovie.setTime(_rightDamageShuttleMovie.getTime() - 40 * delta); + _rightDamageShuttleMovie.redrawMovieWorld(); + + if (_rightDamageShuttleMovie.getTime() == 0) { + Common::Rect r; + _robotShip.getShuttleBounds(r); + int size = MAX(r.width(), r.height()); + r = Common::Rect::center(impactPoint.x, impactPoint.y, size, size); + _robotShip.killRobotShip(); + showBigExplosion(r, kShuttleRobotShipOrder); + } else if (delta > 1) { + Common::Rect r; + _robotShip.getShuttleBounds(r); + int size = MIN(r.width(), r.height()); + r = Common::Rect::center(impactPoint.x, impactPoint.y, size, size); + showLittleExplosion(r, kShuttleWeaponBackOrder); + TimeValue t = _rightShuttleMovie.getTime(); + _rightShuttleMovie.setTime(kShuttleRightDamagedTime); + _rightShuttleMovie.redrawMovieWorld(); + _vm->delayShell(1, 3); + _rightShuttleMovie.setTime(t); + _rightShuttleMovie.redrawMovieWorld(); + } + + if (_rightDamageShuttleMovie.getTime() <= 40) { + GameState.setScoringStoppedRobotsShuttle(); + if (!GameState.getMarsHitRobotWithCannon()) + GameState.setScoringMarsGandhi(); + } } tAirQuality Mars::getAirQuality(const tRoomID room) { diff --git a/engines/pegasus/neighborhood/mars/mars.h b/engines/pegasus/neighborhood/mars/mars.h index f2d7b336e9..8e199d1bc1 100755 --- a/engines/pegasus/neighborhood/mars/mars.h +++ b/engines/pegasus/neighborhood/mars/mars.h @@ -28,6 +28,7 @@ #include "pegasus/neighborhood/neighborhood.h" #include "pegasus/neighborhood/mars/reactor.h" +#include "pegasus/neighborhood/mars/robotship.h" #include "pegasus/neighborhood/mars/shuttleenergymeter.h" namespace Pegasus { @@ -313,7 +314,9 @@ public: void checkAirMask(); void showBigExplosion(const Common::Rect &, const tDisplayOrder); + void showLittleExplosion(const Common::Rect &, const tDisplayOrder); void hitByJunk(); + void decreaseRobotShuttleEnergy(const int, Common::Point impactPoint); void setUpNextDropTime(); Common::String getBriefingMovie(); @@ -447,6 +450,7 @@ protected: Movie _leftDamageShuttleMovie; Movie _rightDamageShuttleMovie; ShuttleEnergyMeter _shuttleEnergyMeter; + RobotShip _robotShip; ScalingMovie _explosions; NotificationCallBack _explosionCallBack; diff --git a/engines/pegasus/neighborhood/mars/robotship.cpp b/engines/pegasus/neighborhood/mars/robotship.cpp new file mode 100755 index 0000000000..279bdd8365 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/robotship.cpp @@ -0,0 +1,269 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/gamestate.h" +#include "pegasus/pegasus.h" +#include "pegasus/neighborhood/mars/hermite.h" +#include "pegasus/neighborhood/mars/mars.h" +#include "pegasus/neighborhood/mars/robotship.h" +#include "pegasus/neighborhood/mars/spacechase3d.h" +#include "pegasus/neighborhood/mars/spacejunk.h" + +namespace Pegasus { + +const TimeScale kRovingScale = kTractorBeamScale; +const TimeValue kRovingTime = kSixSeconds * kRovingScale; +const TimeValue kRovingSlop = kThreeSeconds * kRovingScale; + +const int kNumSpriteColumns = 15; +const int kNumSpriteRows = 16; + +const tCoordType kInitialLocationLeft = kShuttleWindowLeft - 50; +const tCoordType kInitialLocationTop = kShuttleWindowTop - 50; +const tCoordType kInitialLocationWidth = kShuttleWindowWidth + 100; +const tCoordType kInitialLocationHeight = kShuttleWindowHeight + 100; + +const tCoordType kVelocityVectorLength = 100; +const tCoordType kVelocityVectorSlop = 50; + +const tCoordType kRovingLeft = kShuttleWindowLeft + 20; +const tCoordType kRovingTop = kShuttleWindowTop + 20; +const tCoordType kRovingWidth = kShuttleWindowMidH - kRovingLeft; +const tCoordType kRovingHeight = kShuttleWindowMidV - kRovingTop; + +RobotShip* g_robotShip = 0; + +void timeToDropJunkFunction(FunctionPtr *, void *robotShip) { + ((RobotShip *)robotShip)->timeToDropJunk(); +} + +RobotShip::RobotShip() : _spritesMovie(kNoDisplayElement) { + g_robotShip = this; + _shipRange = Common::Rect(kShuttleWindowLeft, kShuttleWindowTop, kShuttleWindowLeft + kShuttleWindowWidth, + kShuttleWindowTop + kShuttleWindowHeight); + setScale(kRovingScale); + _currentLocation.x = 0; + _currentLocation.y = 0; + _snaring = false; + _dropJunkFuse.setFunctionPtr(&timeToDropJunkFunction, (void *)this); +} + +RobotShip::~RobotShip() { + g_robotShip = 0; +} + +void RobotShip::initRobotShip() { + _spritesMovie.initFromMovieFile("Images/Mars/Ship.movie", true); + _spritesMovie.setDisplayOrder(kShuttleRobotShipOrder); + _spritesMovie.moveElementTo(kPlanetStartLeft, kPlanetStartTop); + _spritesMovie.startDisplaying(); + _spritesMovie.show(); + + Common::Rect r; + _spritesMovie.getBounds(r); + _shipWidth = r.width(); + _shipHeight = r.height(); + _dead = false; +} + +void RobotShip::cleanUpRobotShip() { + _dropJunkFuse.stopFuse(); + _spritesMovie.stopDisplaying(); + _spritesMovie.releaseMovie(); +} + +void RobotShip::startMoving() { + if (((PegasusEngine *)g_engine)->getRandomBit()) { + _p4.x = kInitialLocationLeft + ((PegasusEngine *)g_engine)->getRandomNumber(kInitialLocationWidth - 1); + if (((PegasusEngine *)g_engine)->getRandomBit()) + _p4.y = kInitialLocationTop; + else + _p4.y = kInitialLocationTop + kInitialLocationHeight; + } else { + _p4.y = kInitialLocationTop + ((PegasusEngine *)g_engine)->getRandomNumber(kInitialLocationHeight - 1); + if (((PegasusEngine *)g_engine)->getRandomBit()) + _p4.x = kInitialLocationLeft; + else + _p4.x = kInitialLocationLeft + kInitialLocationWidth; + } + + makeVelocityVector(_p4.x, _p4.y, kShuttleWindowLeft + kShuttleWindowWidth / 2, + kShuttleWindowTop + kShuttleWindowHeight / 2, _r4); + newDestination(); + setUpNextDropTime(); +} + +void RobotShip::killRobotShip() { + cleanUpRobotShip(); + _dead = true; +} + +void RobotShip::setUpNextDropTime() { + if (!isSnared()) { + _dropJunkFuse.primeFuse(kJunkDropBaseTime + ((PegasusEngine *)g_engine)->getRandomNumber(kJunkDropSlopTime)); + _dropJunkFuse.lightFuse(); + } +} + +void RobotShip::timeToDropJunk() { + if (g_spaceJunk) { + tCoordType x, y; + _spritesMovie.getCenter(x, y); + g_spaceJunk->launchJunk(((PegasusEngine *)g_engine)->getRandomNumber(24), x, y); + } +} + +void RobotShip::newDestination() { + _p1 = _p4; + _r1 = _r4; + + _p4.x = kRovingLeft + ((PegasusEngine *)g_engine)->getRandomNumber(kRovingWidth - 1); + _p4.y = kRovingTop + ((PegasusEngine *)g_engine)->getRandomNumber(kRovingHeight - 1); + + if (((PegasusEngine *)g_engine)->getRandomNumber(7) < 6) { + if (!sameSign(_p4.x - kShuttleWindowMidH, kShuttleWindowMidH - _p1.x)) { + if (sign(_p4.x - kShuttleWindowMidH) > 0) + _p4.x -= kRovingWidth; + else + _p4.x += kRovingWidth; + } + } + + if (((PegasusEngine *)g_engine)->getRandomNumber(7) < 6) { + if (!sameSign(_p4.y - kShuttleWindowMidV, kShuttleWindowMidV - _p1.y)) { + if (sign(_p4.y - kShuttleWindowMidV) > 0) + _p4.y -= kRovingHeight; + else + _p4.y += kRovingHeight; + } + } + + makeVelocityVector(_p4.x, _p4.y, kShuttleWindowLeft + kShuttleWindowWidth / 2, + kShuttleWindowTop + kShuttleWindowHeight / 2, _r4); + stop(); + _duration = kRovingTime + ((PegasusEngine *)g_engine)->getRandomNumber(kRovingSlop - 1); + setSegment(0, _duration); + setTime(0); + start(); +} + +void RobotShip::moveRobotTo(tCoordType x, tCoordType y) { + _currentLocation.x = x; + _currentLocation.y = y; + + if (_spritesMovie.isMovieValid()) { + _spritesMovie.moveElementTo(x - (_shipWidth >> 1), y - (_shipHeight >> 1)); + + if (x < _shipRange.left) + x = 0; + else if (x > _shipRange.right - 1) + x = _shipRange.width() - 1; + else + x -= _shipRange.left; + + if (y < _shipRange.top) + y = 0; + else if (y > _shipRange.bottom - 1) + y = _shipRange.height() - 1; + else + y -= _shipRange.top; + + x = kNumSpriteColumns * x / _shipRange.width(); + y = kNumSpriteRows * y / _shipRange.height(); + + _spritesMovie.setTime(40 * (x + y * kNumSpriteColumns)); + } +} + +bool RobotShip::pointInShuttle(Common::Point &pt) { + Common::Rect r; + _spritesMovie.getBounds(r); + + int dx = r.width() / 4; + int dy = r.height() / 6; + + r.left += dx; + r.right -= dx; + r.top += dy; + r.bottom -= dy; + + return r.contains(pt); +} + +void RobotShip::hitByEnergyBeam(Common::Point impactPoint) { + ((Mars *)g_neighborhood)->decreaseRobotShuttleEnergy(1, impactPoint); + setGlowing(true); + ((PegasusEngine *)g_engine)->delayShell(1, 3); + setGlowing(false); +} + +void RobotShip::hitByGravitonCannon(Common::Point impactPoint) { + GameState.setMarsHitRobotWithCannon(true); + ((Mars *)g_neighborhood)->decreaseRobotShuttleEnergy(6, impactPoint); +} + +void RobotShip::snareByTractorBeam() { + _dropJunkFuse.stopFuse(); + stop(); + + Common::Point currentV; + dHermite(_p1, _p4, _r1, _r4, _lastTime, _duration, currentV); + + _p1 = _currentLocation; + _r1 = currentV; + _p4.x = kShuttleWindowMidH; + _p4.y = kShuttleWindowMidV; + _r4.x = 0; + _r4.y = 0; + _duration = kTractorBeamTime; + _snaring = true; + setSegment(0, _duration); + setTime(0); + start(); +} + +void RobotShip::timeChanged(const TimeValue) { + Common::Point newLocation; + hermite(_p1, _p4, _r1, _r4, _lastTime, _duration, newLocation); + moveRobotTo(newLocation.x, newLocation.y); + + if (_lastTime == _duration) { + if (_snaring) + stop(); + else + newDestination(); + } +} + +void RobotShip::makeVelocityVector(tCoordType x1, tCoordType y1, tCoordType x2, tCoordType y2, Common::Point &vector) { + tCoordType length = ((PegasusEngine *)g_engine)->getRandomNumber(kVelocityVectorSlop - 1) + kVelocityVectorLength; + vector.x = x2 - x1; + vector.y = y2 - y1; + float oldLength = sqrt(vector.x * vector.x + vector.y * vector.y); + vector.x = (int)(vector.x * length / oldLength); + vector.y = (int)(vector.y * length / oldLength); +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/robotship.h b/engines/pegasus/neighborhood/mars/robotship.h new file mode 100755 index 0000000000..7c6d996566 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/robotship.h @@ -0,0 +1,86 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_ROBOTSHIP_H +#define PEGASUS_NEIGHBORHOOD_MARS_ROBOTSHIP_H + +#include "pegasus/movie.h" + +namespace Pegasus { + +const tCoordType kShuttleMovieWidth = 114; +const tCoordType kShuttleMovieHeight = 42; + +class RobotShip : IdlerTimeBase { +friend void timeToDropJunkFunction(FunctionPtr *, void *); + +public: + RobotShip(); + virtual ~RobotShip(); + + void initRobotShip(); + void cleanUpRobotShip(); + + void startMoving(); + + void killRobotShip(); + + bool pointInShuttle(Common::Point&); + + void hitByEnergyBeam(Common::Point impactPoint); + void hitByGravitonCannon(Common::Point impactPoint); + + void getShuttleBounds(Common::Rect &r) { _spritesMovie.getBounds(r); } + + void setGlowing(const bool glowing) { _spritesMovie.setGlowing(glowing); } + + void snareByTractorBeam(); + bool isSnared() { return _snaring && getTime() == _duration; } + + bool isDead() { return _dead; } + + void setUpNextDropTime(); + +protected: + void newDestination(); + void moveRobotTo(tCoordType, tCoordType); + void timeToDropJunk(); + virtual void timeChanged(const TimeValue); + void makeVelocityVector(tCoordType, tCoordType, tCoordType, tCoordType, Common::Point &); + + GlowingMovie _spritesMovie; + Common::Rect _shipRange; + int _shipWidth, _shipHeight; + Common::Point _p1, _p4, _r1, _r4, _currentLocation; + FuseFunction _dropJunkFuse; + TimeValue _duration; + bool _snaring, _dead; +}; + +extern RobotShip *g_robotShip; + +} // End of namespace Pegasus + +#endif diff --git a/engines/pegasus/neighborhood/mars/spacechase3d.cpp b/engines/pegasus/neighborhood/mars/spacechase3d.cpp index a15898f573..05f8233763 100755 --- a/engines/pegasus/neighborhood/mars/spacechase3d.cpp +++ b/engines/pegasus/neighborhood/mars/spacechase3d.cpp @@ -87,4 +87,20 @@ float linearInterp(const float arg1, const float arg2, const float t) { return arg1 + (arg2 - arg1) * t; } +bool isNegative(int a) { + return a < 0; +} + +bool isPositive(int a) { + return a > 0; +} + +int sign(int a) { + return isNegative(a) ? -1 : isPositive(a) ? 1 : 0; +} + +bool sameSign(int a, int b) { + return sign(a) == sign(b); +} + } // End of namespace Pegasus -- cgit v1.2.3 From 9f1d9f369769ce550dc8e7f3fac55c02bb9ad7c4 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Thu, 27 Oct 2011 14:43:18 -0400 Subject: PEGASUS: Add the shuttle weapon base class --- .../pegasus/neighborhood/mars/shuttleweapon.cpp | 127 +++++++++++++++++++++ engines/pegasus/neighborhood/mars/shuttleweapon.h | 68 +++++++++++ 2 files changed, 195 insertions(+) create mode 100755 engines/pegasus/neighborhood/mars/shuttleweapon.cpp create mode 100755 engines/pegasus/neighborhood/mars/shuttleweapon.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/shuttleweapon.cpp b/engines/pegasus/neighborhood/mars/shuttleweapon.cpp new file mode 100755 index 0000000000..799cca8bc0 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/shuttleweapon.cpp @@ -0,0 +1,127 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/neighborhood/mars/shuttleweapon.h" +#include "pegasus/neighborhood/mars/spacejunk.h" + +namespace Pegasus { + +ShuttleWeapon::ShuttleWeapon() : IdlerAnimation(kNoDisplayElement) { + setScale(kShuttleWeaponScale); + _weaponDuration = kShuttleWeaponScale * 2; + setSegment(0, _weaponDuration); + setBounds(kShuttleWindowLeft, kShuttleWindowTop, kShuttleWindowLeft + kShuttleWindowWidth, + kShuttleWindowTop + kShuttleWindowHeight); + setDisplayOrder(kShuttleWeaponFrontOrder); +} + +void ShuttleWeapon::initShuttleWeapon() { + startDisplaying(); +} + +void ShuttleWeapon::cleanUpShuttleWeapon() { + stop(); + hide(); + stopDisplaying(); +} + +bool ShuttleWeapon::canFireWeapon() { + return !isRunning(); +} + +void ShuttleWeapon::fireWeapon(const tCoordType hStop, const tCoordType vStop) { + if (!isRunning()) { + stop(); + setTime(0); + show(); + + Common::Point pt2D(hStop, vStop); + project2DTo3D(pt2D, kShuttleDistance, _weaponTarget); + _weaponTime = 0; + setDisplayOrder(kShuttleWeaponFrontOrder); + start(); + } +} + +void ShuttleWeapon::updateWeaponPosition() { + _weaponTime = (float)_lastTime / _weaponDuration; + linearInterp(_weaponOrigin, _weaponTarget, _weaponTime, _weaponLocation); + + if (_weaponTime == 1.0) { + stop(); + hide(); + } else { + triggerRedraw(); + } +} + +void ShuttleWeapon::timeChanged(const TimeValue) { + updateWeaponPosition(); + + bool hit = false; + Common::Point impactPoint; + + if (g_spaceJunk->isJunkFlying()) { + hit = collisionWithJunk(impactPoint); + if (hit) { + stop(); + hide(); + hitJunk(impactPoint); + } + } + + if (!hit && _weaponTime == 1.0 && collisionWithShuttle(impactPoint)) + hitShuttle(impactPoint); +} + +bool ShuttleWeapon::collisionWithJunk(Common::Point &impactPoint) { + if (getDisplayOrder() == kShuttleWeaponFrontOrder) { + Point3D junkPosition; + g_spaceJunk->getJunkPosition(junkPosition); + + if (junkPosition.z < _weaponLocation.z) { + setDisplayOrder(kShuttleWeaponBackOrder); + project3DTo2D(_weaponLocation, impactPoint); + return g_spaceJunk->pointInJunk(impactPoint); + } + } + + return false; +} + +bool ShuttleWeapon::collisionWithShuttle(Common::Point &impactPoint) { + project3DTo2D(_weaponLocation, impactPoint); + return g_robotShip->pointInShuttle(impactPoint); +} + +void ShuttleWeapon::hitJunk(Common::Point impactPoint) { + g_spaceJunk->hitByEnergyBeam(impactPoint); +} + +void ShuttleWeapon::hitShuttle(Common::Point impactPoint) { + g_robotShip->hitByEnergyBeam(impactPoint); +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/shuttleweapon.h b/engines/pegasus/neighborhood/mars/shuttleweapon.h new file mode 100755 index 0000000000..b43dc92eb5 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/shuttleweapon.h @@ -0,0 +1,68 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_SHUTTLEWEAPON_H +#define PEGASUS_NEIGHBORHOOD_MARS_SHUTTLEWEAPON_H + +#include "pegasus/timers.h" +#include "pegasus/neighborhood/mars/spacechase3d.h" + +namespace Pegasus { + +// Can fire multiple times? +// For now, no... +// clone2727 adds: And now forever + +const TimeScale kShuttleWeaponScale = kFifteenTicksPerSecond; + +class ShuttleWeapon : public IdlerAnimation { +public: + ShuttleWeapon(); + virtual ~ShuttleWeapon() {} + + virtual void initShuttleWeapon(); + virtual void cleanUpShuttleWeapon(); + + virtual void fireWeapon(const tCoordType, const tCoordType); + + bool canFireWeapon(); + +protected: + void timeChanged(const TimeValue); + virtual void updateWeaponPosition(); + virtual bool collisionWithJunk(Common::Point &impactPoint); + bool collisionWithShuttle(Common::Point &impactPoint); + virtual void hitJunk(Common::Point impactPoint); + virtual void hitShuttle(Common::Point impactPoint); + + Point3D _weaponOrigin, _weaponTarget; + Point3D _weaponLocation; + float _weaponTime; + TimeValue _weaponDuration; +}; + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From 099070377965e2ec897355e89080491c42da0935 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Thu, 27 Oct 2011 16:02:20 -0400 Subject: PEGASUS: Add the graviton cannon! --- .../pegasus/neighborhood/mars/gravitoncannon.cpp | 134 +++++++++++++++++++++ engines/pegasus/neighborhood/mars/gravitoncannon.h | 55 +++++++++ 2 files changed, 189 insertions(+) create mode 100755 engines/pegasus/neighborhood/mars/gravitoncannon.cpp create mode 100755 engines/pegasus/neighborhood/mars/gravitoncannon.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/gravitoncannon.cpp b/engines/pegasus/neighborhood/mars/gravitoncannon.cpp new file mode 100755 index 0000000000..e56fddc51f --- /dev/null +++ b/engines/pegasus/neighborhood/mars/gravitoncannon.cpp @@ -0,0 +1,134 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/neighborhood/mars/gravitoncannon.h" +#include "pegasus/neighborhood/mars/robotship.h" +#include "pegasus/neighborhood/mars/spacejunk.h" + +namespace Pegasus { + +const TimeValue kGravitonTime = kOneSecond * kShuttleWeaponScale; + +const tCoordType kGravitonOriginH = kShuttleWindowLeft - 1; +const tCoordType kGravitonOriginV = kShuttleWindowMidV; + +const float kGravitonXOrigin = convertScreenHToSpaceX(kGravitonOriginH, kGravitonMinDistance); +const float kGravitonYOrigin = convertScreenVToSpaceY(kGravitonOriginV, kGravitonMinDistance); +const float kGravitonZOrigin = kGravitonMinDistance; + +// Width of graviton sprite... +const tCoordType kGravitonMaxScreenWidth = 78; +const tCoordType kGravitonMaxScreenHeight = 46; + +const float kGravitonWidth = convertScreenHToSpaceX(kShuttleWindowMidH + kGravitonMaxScreenWidth / 2, kGravitonMinDistance) + - convertScreenHToSpaceX(kShuttleWindowMidH - kGravitonMaxScreenWidth / 2, kGravitonMinDistance); +const float kGravitonHeight = convertScreenVToSpaceY(kShuttleWindowMidV - kGravitonMaxScreenHeight / 2, kGravitonMinDistance) + - convertScreenVToSpaceY(kShuttleWindowMidV + kGravitonMaxScreenHeight / 2, kGravitonMinDistance); + +GravitonCannon::GravitonCannon() { + _weaponDuration = kGravitonTime; + setSegment(0, kGravitonTime); + _weaponOrigin = Point3D(kGravitonXOrigin, kGravitonYOrigin, kGravitonZOrigin); + _rightOrigin = Point3D(-kGravitonXOrigin, kGravitonYOrigin, kGravitonZOrigin); +} + +void GravitonCannon::initShuttleWeapon() { + ShuttleWeapon::initShuttleWeapon(); + _gravitonImage.getImageFromPICTFile("Images/Mars/Graviton Cannon"); + _gravitonImage.getSurfaceBounds(_gravitonBounds); +} + +void GravitonCannon::cleanUpShuttleWeapon() { + _gravitonImage.deallocateSurface(); + ShuttleWeapon::cleanUpShuttleWeapon(); +} + +void GravitonCannon::draw(const Common::Rect &) { + // Left graviton... + Point3D pt3D = _weaponLocation; + pt3D.translate(-kGravitonWidth / 2, kGravitonHeight / 2, 0); + Common::Point pt2D; + project3DTo2D(pt3D, pt2D); + Common::Rect gravitonRect; + gravitonRect.left = pt2D.x; + gravitonRect.top = pt2D.y; + + pt3D.translate(kGravitonWidth, -kGravitonHeight, 0); + project3DTo2D(pt3D, pt2D); + gravitonRect.right = pt2D.x; + gravitonRect.bottom = pt2D.y; + + _gravitonImage.scaleTransparentCopy(_gravitonBounds, gravitonRect); + + // Right graviton... + pt3D = _rightLocation; + pt3D.translate(-kGravitonWidth / 2, kGravitonHeight / 2, 0); + project3DTo2D(pt3D, pt2D); + gravitonRect.left = pt2D.x; + gravitonRect.top = pt2D.y; + + pt3D.translate(kGravitonWidth, -kGravitonHeight, 0); + project3DTo2D(pt3D, pt2D); + gravitonRect.right = pt2D.x; + gravitonRect.bottom = pt2D.y; + + _gravitonImage.scaleTransparentCopy(_gravitonBounds, gravitonRect); +} + +void GravitonCannon::updateWeaponPosition() { + ShuttleWeapon::updateWeaponPosition(); + if (_weaponTime != 1.0) + linearInterp(_rightOrigin, _weaponTarget, _weaponTime, _rightLocation); +} + +bool GravitonCannon::collisionWithJunk(Common::Point &impactPoint) { + if (getDisplayOrder() == kShuttleWeaponFrontOrder) { + Point3D junkPosition; + g_spaceJunk->getJunkPosition(junkPosition); + + if (junkPosition.z < _weaponLocation.z) { + setDisplayOrder(kShuttleWeaponBackOrder); + project3DTo2D(_weaponLocation, impactPoint); + + if (g_spaceJunk->pointInJunk(impactPoint)) + return true; + + project3DTo2D(_rightLocation, impactPoint); + return g_spaceJunk->pointInJunk(impactPoint); + } + } + + return false; +} + +void GravitonCannon::hitJunk(Common::Point impactPoint) { + g_spaceJunk->hitByGravitonCannon(impactPoint); +} + +void GravitonCannon::hitShuttle(Common::Point impactPoint) { + g_robotShip->hitByGravitonCannon(impactPoint); +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/gravitoncannon.h b/engines/pegasus/neighborhood/mars/gravitoncannon.h new file mode 100755 index 0000000000..1919c03000 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/gravitoncannon.h @@ -0,0 +1,55 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_GRAVITONCANNON_H +#define PEGASUS_NEIGHBORHOOD_MARS_GRAVITONCANNON_H + +#include "pegasus/neighborhood/mars/shuttleweapon.h" + +namespace Pegasus { + +class GravitonCannon : public ShuttleWeapon { + GravitonCannon(); + virtual ~GravitonCannon() {} + + void initShuttleWeapon(); + void cleanUpShuttleWeapon(); + + void draw(const Common::Rect &); + +protected: + virtual void updateWeaponPosition(); + virtual bool collisionWithJunk(Common::Point &impactPoint); + virtual void hitJunk(Common::Point impactPoint); + virtual void hitShuttle(Common::Point impactPoint); + + Surface _gravitonImage; + Common::Rect _gravitonBounds; + Point3D _rightOrigin, _rightLocation; +}; + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From 1bd2480f5f3de254928bbf68127a219a04fb0158 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Thu, 27 Oct 2011 16:41:54 -0400 Subject: PEGASUS: Add the tractor beam class --- engines/pegasus/neighborhood/mars/tractorbeam.cpp | 139 ++++++++++++++++++++++ engines/pegasus/neighborhood/mars/tractorbeam.h | 43 +++++++ 2 files changed, 182 insertions(+) create mode 100755 engines/pegasus/neighborhood/mars/tractorbeam.cpp create mode 100755 engines/pegasus/neighborhood/mars/tractorbeam.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/tractorbeam.cpp b/engines/pegasus/neighborhood/mars/tractorbeam.cpp new file mode 100755 index 0000000000..5c04b25b04 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/tractorbeam.cpp @@ -0,0 +1,139 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/pegasus.h" +#include "pegasus/neighborhood/mars/mars.h" +#include "pegasus/neighborhood/mars/tractorbeam.h" + +namespace Pegasus { + +TractorBeam::TractorBeam() : DisplayElement(kNoDisplayElement) { + setBounds(kShuttleTractorLeft, kShuttleTractorTop, kShuttleTractorLeft + kShuttleTractorWidth, + kShuttleTractorTop + kShuttleTractorHeight); + setDisplayOrder(kShuttleTractorBeamOrder); + +} + +const int kHalfWidth = kShuttleTractorWidth >> 1; +const int kHalfHeight = kShuttleTractorHeight >> 1; + +const int kW3Vert = kHalfHeight * kHalfHeight * kHalfHeight; +const int kW3Div2Vert = kW3Vert >> 1; + +const int kW3Horiz = kHalfWidth * kHalfWidth * kHalfWidth; +const int kW3Div2Horiz = kW3Horiz >> 1; + +const int kMaxLevel = 50; + +const int kAVert = -2 * kMaxLevel; +const int kBVert = 3 * kMaxLevel * kHalfHeight; + +#define READ_PIXEL(ptr) \ + if (screen->format.bytesPerPixel == 2) \ + color = READ_UINT16(ptr); \ + else \ + color = READ_UINT32(ptr); \ + screen->format.colorToRGB(color, r, g, b) + +#define WRITE_PIXEL(ptr) \ + color = screen->format.RGBToColor(r, g, b); \ + if (screen->format.bytesPerPixel == 2) \ + WRITE_UINT16(ptr, color); \ + else \ + WRITE_UINT32(ptr, color) + +#define DO_BLEND(ptr) \ + READ_PIXEL(ptr); \ + g += (((0xff - g) * blendHoriz) >> 8); \ + b += (((0xff - b) * blendHoriz) >> 8); \ + WRITE_PIXEL(ptr) + +void TractorBeam::draw(const Common::Rect &) { + Graphics::Surface *screen = ((PegasusEngine *)g_engine)->_gfx->getWorkArea(); + + // Set up vertical DDA. + int blendVert = 0; + int dVert = 0; + int d1Vert = kAVert + kBVert; + int d2Vert = 6 * kAVert + 2 * kBVert; + int d3Vert = 6 * kAVert; + + byte *rowPtrTop = (byte *)screen->getBasePtr(_bounds.left, _bounds.top); + byte *rowPtrBottom = (byte *)screen->getBasePtr(_bounds.left, _bounds.top + ((kHalfHeight << 1) - 1)); + + for (int y = kHalfHeight; y > 0; y--) { + // Set up horizontal DDA + int A = -2 * blendVert; + int B = 3 * blendVert * kHalfWidth; + int blendHoriz = 0; + int dHoriz = 0; + int d1Horiz = A + B; + int d2Horiz = 6 * A + 2 * B; + int d3Horiz = 6 * A; + + byte *pTopLeft = rowPtrTop; + byte *pTopRight = rowPtrTop + (kHalfWidth * 2 - 1) * screen->format.bytesPerPixel; + byte *pBottomLeft = rowPtrBottom; + byte *pBottomRight = rowPtrBottom + (kHalfWidth * 2 - 1) * screen->format.bytesPerPixel; + + for (int x = kHalfWidth; x > 0; x--) { + byte r, g, b; + uint32 color; + + DO_BLEND(pTopLeft); + DO_BLEND(pTopRight); + DO_BLEND(pBottomLeft); + DO_BLEND(pBottomRight); + + pTopLeft += screen->format.bytesPerPixel; + pBottomLeft += screen->format.bytesPerPixel; + pTopRight -= screen->format.bytesPerPixel; + pBottomRight -= screen->format.bytesPerPixel; + + while (dHoriz > kW3Div2Horiz) { + blendHoriz++; + dHoriz -= kW3Horiz; + } + + dHoriz += d1Horiz; + d1Horiz += d2Horiz; + d2Horiz += d3Horiz; + } + + rowPtrTop += screen->pitch; + rowPtrBottom -= screen->pitch; + + while (dVert > kW3Div2Vert) { + blendVert++; + dVert -= kW3Vert; + } + + dVert += d1Vert; + d1Vert += d2Vert; + d2Vert += d3Vert; + } +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/tractorbeam.h b/engines/pegasus/neighborhood/mars/tractorbeam.h new file mode 100755 index 0000000000..cd87992d11 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/tractorbeam.h @@ -0,0 +1,43 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_TRACTORBEAM_H +#define PEGASUS_NEIGHBORHOOD_MARS_TRACTORBEAM_H + +#include "pegasus/elements.h" + +namespace Pegasus { + +class TractorBeam : public DisplayElement { +public: + TractorBeam(); + virtual ~TractorBeam() {} + + void draw(const Common::Rect &); +}; + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From 015d81b742b2f83b8eab12f88741fe42b87f8d18 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Thu, 27 Oct 2011 19:24:11 -0400 Subject: PEGASUS: Add the energy beam weapon --- engines/pegasus/neighborhood/mars/energybeam.cpp | 70 ++++++++++++++++++++++++ engines/pegasus/neighborhood/mars/energybeam.h | 43 +++++++++++++++ 2 files changed, 113 insertions(+) create mode 100755 engines/pegasus/neighborhood/mars/energybeam.cpp create mode 100755 engines/pegasus/neighborhood/mars/energybeam.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/energybeam.cpp b/engines/pegasus/neighborhood/mars/energybeam.cpp new file mode 100755 index 0000000000..6a30c48dfb --- /dev/null +++ b/engines/pegasus/neighborhood/mars/energybeam.cpp @@ -0,0 +1,70 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/pegasus.h" +#include "pegasus/neighborhood/mars/energybeam.h" + +namespace Pegasus { + +const TimeValue kEnergyBeamTime = kOneSecond * kShuttleWeaponScale / 2; + +const tCoordType kEnergyBeamOriginH = kShuttleWindowMidH; +const tCoordType kEnergyBeamOriginV = kShuttleWindowTop + kShuttleWindowHeight; + +const float kBeamXOrigin = convertScreenHToSpaceX(kEnergyBeamOriginH, kEnergyBeamMinDistance); +const float kBeamYOrigin = convertScreenVToSpaceY(kEnergyBeamOriginV, kEnergyBeamMinDistance); +const float kBeamZOrigin = kEnergyBeamMinDistance; + +EnergyBeam::EnergyBeam() { + _weaponDuration = kEnergyBeamTime; + setSegment(0, kEnergyBeamTime); + _weaponOrigin = Point3D(kBeamXOrigin, kBeamYOrigin, kBeamZOrigin); +} + +void EnergyBeam::draw(const Common::Rect &) { + static const int kBeamColorRed1 = 224; + static const int kBeamColorRed2 = 64; + + Graphics::Surface *surface = ((PegasusEngine *)g_engine)->_gfx->getWorkArea(); + + byte red = linearInterp(0, kEnergyBeamTime, _lastTime, kBeamColorRed1, kBeamColorRed2); + uint32 color = surface->format.RGBToColor(red, 0, 0); + + Point3D startPoint; + if (_weaponTime < 0.1) + startPoint = _weaponOrigin; + else + linearInterp(_weaponOrigin, _weaponTarget, _weaponTime - 0.1, startPoint); + + Common::Point lineStart; + project3DTo2D(startPoint, lineStart); + + Common::Point lineEnd; + project3DTo2D(_weaponLocation, lineEnd); + + surface->drawThickLine(lineStart.x, lineStart.y, lineEnd.x, lineEnd.y, 2, 1, color); +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/energybeam.h b/engines/pegasus/neighborhood/mars/energybeam.h new file mode 100755 index 0000000000..715ed4b01d --- /dev/null +++ b/engines/pegasus/neighborhood/mars/energybeam.h @@ -0,0 +1,43 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_ENERGYBEAM_H +#define PEGASUS_NEIGHBORHOOD_MARS_ENERGYBEAM_H + +#include "pegasus/neighborhood/mars/shuttleweapon.h" + +namespace Pegasus { + +class EnergyBeam : public ShuttleWeapon { +public: + EnergyBeam(); + virtual ~EnergyBeam() {} + + void draw(const Common::Rect &); +}; + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From e29d00e6b6020dffcd80419e707ec4b0e58bef46 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Thu, 27 Oct 2011 19:56:52 -0400 Subject: PEGASUS: Add the Shuttle HUD --- engines/pegasus/neighborhood/mars/shuttlehud.cpp | 246 +++++++++++++++++++++++ engines/pegasus/neighborhood/mars/shuttlehud.h | 61 ++++++ 2 files changed, 307 insertions(+) create mode 100755 engines/pegasus/neighborhood/mars/shuttlehud.cpp create mode 100755 engines/pegasus/neighborhood/mars/shuttlehud.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/shuttlehud.cpp b/engines/pegasus/neighborhood/mars/shuttlehud.cpp new file mode 100755 index 0000000000..71f5b1e2ac --- /dev/null +++ b/engines/pegasus/neighborhood/mars/shuttlehud.cpp @@ -0,0 +1,246 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "pegasus/pegasus.h" +#include "pegasus/neighborhood/mars/mars.h" +#include "pegasus/neighborhood/mars/robotship.h" +#include "pegasus/neighborhood/mars/shuttlehud.h" + +namespace Pegasus { + +const tCoordType kHUDTargetGridLeft = kShuttleWindowLeft + 16; +const tCoordType kHUDTargetGridTop = kShuttleWindowTop + 8; +const tCoordType kHUDTargetGridWidth = 328; +const tCoordType kHUDTargetGridHeight = 206; + +const tCoordType kHUDRS232Left = kHUDTargetGridLeft + 264; +const tCoordType kHUDRS232Top = kHUDTargetGridTop + 2; + +const tCoordType kHUDLockLeft = kShuttleWindowLeft + 101; +const tCoordType kHUDLockTop = kShuttleWindowTop + 49; +const tCoordType kHUDLockWidth = 145; +const tCoordType kHUDLockHeight = 124; + +const tCoordType kTractorLockWidth = 50; +const tCoordType kTractorLockHeight = 30; + +const tCoordType kTractorLockLeft = kShuttleWindowMidH - kTractorLockWidth / 2; +const tCoordType kTractorLockTop = kShuttleWindowMidV - kTractorLockHeight / 2; +const tCoordType kTractorLockRight = kTractorLockLeft + kTractorLockWidth; +const tCoordType kTractorLockBottom = kTractorLockTop + kTractorLockHeight; + +static const uint16 s_RS232Data[] = { + 0xF0E1, 0xCE70, + 0xF9E1, 0xEF78, + 0x4900, 0x2108, + 0x79C0, 0xE738, + 0x70E1, 0xC770, + 0x5821, 0x0140, + 0x4DE1, 0xEF78, + 0x45C1, 0xEE78 +}; + +static const uint16 s_lockData[] = { + 0xE007, 0xFE1F, 0xF8E0, 0x7000, + 0xE00F, 0xFF3F, 0xFCE0, 0xE000, + 0xE00E, 0x0738, 0x1CE1, 0xC000, + 0xE00E, 0x0738, 0x00FF, 0x8000, + 0xE00E, 0x0738, 0x00FF, 0x0000, + 0xE00E, 0x0738, 0x00E3, 0x8000, + 0xE00E, 0x0738, 0x1CE1, 0xC000, + 0xFFCF, 0xFF3F, 0xFCE0, 0xE000, + 0xFFC7, 0xFE1F, 0xF8E0, 0x7000 +}; + +#define drawHUDLockLine(x1, y1, x2, y2, penX, penY, color) \ + screen->drawThickLine((x1) + kHUDLockLeft, (y1) + kHUDLockTop, \ + (x2) + kHUDLockLeft, (y2) + kHUDLockTop, penX, penY, color) + +#define drawHUDLockArrows(offset, color) \ + drawHUDLockLine(63, 0 + (offset), 68, 5 + (offset), 1, 3, color); \ + drawHUDLockLine(71, 8 + (offset), 77, 14 + (offset), 1, 3, color); \ + drawHUDLockLine(78, 14 + (offset), 84, 8 + (offset), 1, 3, color); \ + drawHUDLockLine(87, 5 + (offset), 92, 0 + (offset), 1, 3, color); \ + drawHUDLockLine(63, 121 - (offset), 68, 116 - (offset), 1, 3, color); \ + drawHUDLockLine(71, 113 - (offset), 77, 107 - (offset), 1, 3, color); \ + drawHUDLockLine(78, 107 - (offset), 84, 113 - (offset), 1, 3, color); \ + drawHUDLockLine(87, 116 - (offset), 92, 121 - (offset), 1, 3, color); \ +\ + drawHUDLockLine(13 + (offset), 47, 18 + (offset), 52, 3, 1, color); \ + drawHUDLockLine(21 + (offset), 55, 27 + (offset), 61, 3, 1, color); \ + drawHUDLockLine(27 + (offset), 62, 21 + (offset), 68, 3, 1, color); \ + drawHUDLockLine(18 + (offset), 71, 13 + (offset), 76, 3, 1, color); \ + drawHUDLockLine(142 - (offset), 47, 137 - (offset), 52, 3, 1, color); \ + drawHUDLockLine(134 - (offset), 55, 128 - (offset), 61, 3, 1, color); \ + drawHUDLockLine(128 - (offset), 62, 134 - (offset), 68, 3, 1, color); \ + drawHUDLockLine(137 - (offset), 71, 142 - (offset), 76, 3, 1, color) + +ShuttleHUD::ShuttleHUD() : DisplayElement(kNoDisplayElement) { + _lightGreen = g_system->getScreenFormat().RGBToColor(0, 204, 0); + _gridDarkGreen = g_system->getScreenFormat().RGBToColor(0, 85, 0); + _lockDarkGreen1 = g_system->getScreenFormat().RGBToColor(0, 68, 0); + _lockDarkGreen2 = g_system->getScreenFormat().RGBToColor(0, 65, 0); + + _targetLocked = false; + setBounds(kShuttleWindowLeft, kShuttleWindowTop, kShuttleWindowLeft + kShuttleWindowWidth, + kShuttleWindowTop + kShuttleWindowHeight); + setDisplayOrder(kShuttleHUDOrder); +} + +void ShuttleHUD::initShuttleHUD() { + startDisplaying(); + startIdling(); +} + +void ShuttleHUD::cleanUpShuttleHUD() { + stopIdling(); + stopDisplaying(); +} + +void ShuttleHUD::showTargetGrid() { + show(); +} + +void ShuttleHUD::hideTargetGrid() { + hide(); + unlockOnTarget(); +} + +void ShuttleHUD::useIdleTime() { + if (isVisible()) { + Common::Rect r; + g_robotShip->getShuttleBounds(r); + if (r.left < kTractorLockRight && r.right > kTractorLockLeft && r.top < kTractorLockBottom && r.bottom > kTractorLockTop) + lockOnTarget(); + else + unlockOnTarget(); + } +} + +void ShuttleHUD::lockOnTarget() { + if (!_targetLocked) { + _targetLocked = true; + triggerRedraw(); + } +} + +void ShuttleHUD::unlockOnTarget() { + if (_targetLocked) { + _targetLocked = false; + triggerRedraw(); + } +} + +void ShuttleHUD::draw(const Common::Rect &) { + Graphics::Surface *screen = ((PegasusEngine *)g_engine)->_gfx->getWorkArea(); + + for (int y = 0; y < 35; y++) { + Common::Rect r; + + if (y & 1) { + if (y == 17) { + r = Common::Rect(0, 0, 4, 2); + r.moveTo(kHUDTargetGridLeft + 8, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + r.moveTo(kHUDTargetGridLeft + kHUDTargetGridWidth - 12, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + + r = Common::Rect(0, 0, 6, 2); + r.moveTo(kHUDTargetGridLeft + 2, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _lightGreen); + r.moveTo(kHUDTargetGridLeft + kHUDTargetGridWidth - 8, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _lightGreen); + + r = Common::Rect(0, 0, 23, 2); + r.moveTo(kHUDTargetGridLeft + 12, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _lightGreen); + r.moveTo(kHUDTargetGridLeft + kHUDTargetGridWidth - 35, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _lightGreen); + } else if (y == 1 || y == 15 || y == 19 || y == 33) { + r = Common::Rect(0, 0, 4, 2); + r.moveTo(kHUDTargetGridLeft + 2, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + r.moveTo(kHUDTargetGridLeft + kHUDTargetGridWidth - 6, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + + r = Common::Rect(0, 0, 15, 2); + r.moveTo(kHUDTargetGridLeft + 8, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + r.moveTo(kHUDTargetGridLeft + kHUDTargetGridWidth - 23, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + } else { + r = Common::Rect(0, 0, 4, 2); + r.moveTo(kHUDTargetGridLeft + 2, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + r.moveTo(kHUDTargetGridLeft + kHUDTargetGridWidth - 6, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + + r = Common::Rect(0, 0, 10, 2); + r.moveTo(kHUDTargetGridLeft + 8, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + r.moveTo(kHUDTargetGridLeft + kHUDTargetGridWidth - 18, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + } + } else { + r = Common::Rect(0, 0, 2, 2); + r.moveTo(kHUDTargetGridLeft, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + r.moveTo(kHUDTargetGridLeft + kHUDTargetGridWidth - 2, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + + r = Common::Rect(0, 0, 4, 2); + r.moveTo(kHUDTargetGridLeft + 8, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + r.moveTo(kHUDTargetGridLeft + kHUDTargetGridWidth - 12, y * 6 + kHUDTargetGridTop); + screen->fillRect(r, _gridDarkGreen); + } + } + + drawOneBitImageOr(screen, s_lockData, 4, Common::Rect(kHUDRS232Left, kHUDRS232Top, + kHUDRS232Left + 29, kHUDRS232Top + 8), _gridDarkGreen); + + if (_targetLocked) { + drawHUDLockArrows(0, _lockDarkGreen2); + drawHUDLockArrows(12, _lockDarkGreen1); + drawHUDLockArrows(24, _lightGreen); + drawOneBitImageOr(screen, s_lockData, 8, Common::Rect(kHUDLockLeft, kHUDLockTop + 115, + kHUDLockLeft + 52, kHUDLockTop + 115 + 9), _lightGreen); + } +} + +void ShuttleHUD::drawOneBitImageOr(Graphics::Surface *screen, const uint16 *data, int pitch, const Common::Rect &bounds, uint32 color) { + for (int y = 0; y < bounds.height(); y++) { + for (int x = 0; x < bounds.width(); x++) { + if ((data[y * pitch + x / 16] & (1 << (15 - (x % 16)))) != 0) { + if (screen->format.bytesPerPixel == 2) + WRITE_UINT16((byte *)screen->getBasePtr(x + bounds.left, y + bounds.top), color); + else + WRITE_UINT32((byte *)screen->getBasePtr(x + bounds.left, y + bounds.top), color); + } + } + } +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/shuttlehud.h b/engines/pegasus/neighborhood/mars/shuttlehud.h new file mode 100755 index 0000000000..7cab9ed107 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/shuttlehud.h @@ -0,0 +1,61 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_SHUTTLEHUD_H +#define PEGASUS_NEIGHBORHOOD_MARS_SHUTTLEHUD_H + +#include "pegasus/elements.h" +#include "pegasus/timers.h" + +namespace Pegasus { + +class ShuttleHUD : public DisplayElement, public Idler { +public: + ShuttleHUD(); + virtual ~ShuttleHUD(); + + void showTargetGrid(); + void hideTargetGrid(); + + void initShuttleHUD(); + void cleanUpShuttleHUD(); + + bool isTargetLocked() { return _targetLocked; } + + void draw(const Common::Rect &); + +protected: + void useIdleTime(); + void lockOnTarget(); + void unlockOnTarget(); + void drawOneBitImageOr(Graphics::Surface *, const uint16 *, int, const Common::Rect &, uint32); + + bool _targetLocked; + uint32 _lightGreen, _gridDarkGreen, _lockDarkGreen1, _lockDarkGreen2; +}; + +} // End of namespace Pegasus + +#endif -- cgit v1.2.3 From 3f69c195ae5824a7f3037add447cca40e8827e6c Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 28 Oct 2011 01:24:57 -0400 Subject: PEGASUS: Allow for initial support of the space chase It's not ready yet, but it's slowly becoming playable. For instance, scaling, the shuttle HUD, and the energy beam work on the first try which is nothing short of a miracle. This commit also moved around some Mars constants because the previous include setup did not work; I hope to make the other neighborhoods have a separate constants file too. --- engines/pegasus/neighborhood/mars/constants.h | 941 ++++++++++++++ engines/pegasus/neighborhood/mars/gravitoncannon.h | 2 + engines/pegasus/neighborhood/mars/mars.cpp | 1278 +++++++++----------- engines/pegasus/neighborhood/mars/mars.h | 270 +---- engines/pegasus/neighborhood/mars/planetmover.cpp | 3 +- engines/pegasus/neighborhood/mars/robotship.cpp | 1 + .../neighborhood/mars/shuttleenergymeter.cpp | 2 +- engines/pegasus/neighborhood/mars/shuttlehud.cpp | 2 +- engines/pegasus/neighborhood/mars/shuttlehud.h | 2 +- .../pegasus/neighborhood/mars/shuttleweapon.cpp | 2 + engines/pegasus/neighborhood/mars/shuttleweapon.h | 2 +- engines/pegasus/neighborhood/mars/spacechase3d.h | 2 +- engines/pegasus/neighborhood/mars/spacejunk.cpp | 1 + engines/pegasus/neighborhood/mars/spacejunk.h | 2 + engines/pegasus/neighborhood/mars/tractorbeam.cpp | 2 +- 15 files changed, 1582 insertions(+), 930 deletions(-) create mode 100755 engines/pegasus/neighborhood/mars/constants.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/constants.h b/engines/pegasus/neighborhood/mars/constants.h new file mode 100755 index 0000000000..c96a8a1522 --- /dev/null +++ b/engines/pegasus/neighborhood/mars/constants.h @@ -0,0 +1,941 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_NEIGHBORHOOD_MARS_CONSTANTS_H +#define PEGASUS_NEIGHBORHOOD_MARS_CONSTANTS_H + +#include "pegasus/constants.h" + +namespace Pegasus { + +// Element Coordinates + +const tCoordType kUndoHiliteLeft = kNavAreaLeft + 140; +const tCoordType kUndoHiliteTop = kNavAreaTop + 36; + +const tCoordType kCurrentGuessLeft = kNavAreaLeft + 146; +const tCoordType kCurrentGuessTop = kNavAreaTop + 90; + +const tCoordType kReactorChoiceHiliteLeft = kNavAreaLeft + 116; +const tCoordType kReactorChoiceHiliteTop = kNavAreaTop + 158; + +const tCoordType kReactorHistoryLeft = kNavAreaLeft + 302; +const tCoordType kReactorHistoryTop = kNavAreaTop + 39; + +const tCoordType kAnswerLeft = kNavAreaLeft + 304; +const tCoordType kAnswerTop = kNavAreaTop + 180; + +const tCoordType kShuttle1Left = 0; +const tCoordType kShuttle1Top = 0; + +const tCoordType kShuttle2Left = 0; +const tCoordType kShuttle2Top = 96; + +const tCoordType kShuttle3Left = 500; +const tCoordType kShuttle3Top = 96; + +const tCoordType kShuttle4Left = 0; +const tCoordType kShuttle4Top = 320; + +const tCoordType kShuttleWindowLeft = 140; +const tCoordType kShuttleWindowTop = 96; +const tCoordType kShuttleWindowWidth = 360; +const tCoordType kShuttleWindowHeight = 224; + +const tCoordType kShuttleWindowMidH = (kShuttleWindowLeft * 2 + kShuttleWindowWidth) / 2; +const tCoordType kShuttleWindowMidV = (kShuttleWindowTop * 2 + kShuttleWindowHeight) / 2; + +const tCoordType kShuttleLeftLeft = 0; +const tCoordType kShuttleLeftTop = 128; + +const tCoordType kShuttleRightLeft = 506; +const tCoordType kShuttleRightTop = 128; + +const tCoordType kShuttleLowerLeftLeft = 74; +const tCoordType kShuttleLowerLeftTop = 358; + +const tCoordType kShuttleLowerRightLeft = 486; +const tCoordType kShuttleLowerRightTop = 354; + +const tCoordType kShuttleCenterLeft = 260; +const tCoordType kShuttleCenterTop = 336; + +const tCoordType kShuttleUpperLeftLeft = 30; +const tCoordType kShuttleUpperLeftTop = 32; + +const tCoordType kShuttleUpperRightLeft = 506; +const tCoordType kShuttleUpperRightTop = 52; + +const tCoordType kShuttleLeftEnergyLeft = 110; +const tCoordType kShuttleLeftEnergyTop = 186; + +const tCoordType kShuttleRightEnergyLeft = 510; +const tCoordType kShuttleRightEnergyTop = 186; + +const tCoordType kShuttleEnergyLeft = 186; +const tCoordType kShuttleEnergyTop = 60; +const tCoordType kShuttleEnergyWidth = 252; +const tCoordType kShuttleEnergyHeight = 22; + +const tCoordType kPlanetStartLeft = kShuttleWindowLeft; +const tCoordType kPlanetStartTop = kShuttleWindowTop + kShuttleWindowHeight; + +const tCoordType kPlanetStopLeft = kShuttleWindowLeft; +const tCoordType kPlanetStopTop = kShuttleWindowTop + kShuttleWindowHeight - 100; + +const tCoordType kShuttleTractorLeft = kShuttleWindowLeft + 6; +const tCoordType kShuttleTractorTop = kShuttleWindowTop + 56; +const tCoordType kShuttleTractorWidth = 348; +const tCoordType kShuttleTractorHeight = 112; + +const tCoordType kShuttleJunkLeft = kShuttleWindowLeft + 6; +const tCoordType kShuttleJunkTop = kShuttleWindowTop + 6; + +const tDisplayOrder kShuttlePlanetOrder = kInterfaceLayer; +const tDisplayOrder kShuttleAlienShipOrder = kShuttlePlanetOrder + 1; +const tDisplayOrder kShuttleRobotShipOrder = kShuttleAlienShipOrder + 1; +const tDisplayOrder kShuttleTractorBeamMovieOrder = kShuttleRobotShipOrder + 1; +const tDisplayOrder kShuttleWeaponBackOrder = kShuttleTractorBeamMovieOrder + 1; +const tDisplayOrder kShuttleJunkOrder = kShuttleWeaponBackOrder + 1; +const tDisplayOrder kShuttleWeaponFrontOrder = kShuttleJunkOrder + 1; +const tDisplayOrder kShuttleTractorBeamOrder = kShuttleWeaponFrontOrder + 1; +const tDisplayOrder kShuttleHUDOrder = kShuttleTractorBeamOrder + 1; +const tDisplayOrder kShuttleBackgroundOrder = kShuttleHUDOrder + 1; +const tDisplayOrder kShuttleMonitorOrder = kShuttleBackgroundOrder + 1; +const tDisplayOrder kShuttleStatusOrder = kShuttleMonitorOrder + 1; + +const TimeValue kShuttleSwingStart = 0; +const TimeValue kShuttleSwingStop = 5 * 600; + +const TimeValue kCanyonChaseStart = kShuttleSwingStop; +const TimeValue kCanyonChaseStop = 60 * 600 + 43 * 600 + 14 * 40; + +const TimeValue kLaunchTubeReachedTime = 60 * 600 + 38 * 600 - kCanyonChaseStart; +const TimeValue kCanyonChaseFinishedTime = kCanyonChaseStop - kCanyonChaseStart - + kLaunchTubeReachedTime; + +// Left shuttle. + +const TimeValue kShuttleLeftIntroStart = 0; +const TimeValue kShuttleLeftIntroStop = 400; + +const TimeValue kShuttleLeftBlankTime = 400; + +const TimeValue kShuttleLeftNormalTime = 440; + +const TimeValue kShuttleLeftAutoTestTime = 480; + +const TimeValue kShuttleLeftDamagedTime = 520; + +const TimeValue kShuttleLeftDampingTime = 560; + +const TimeValue kShuttleLeftGravitonTime = 600; + +const TimeValue kShuttleLeftTractorTime = 640; + +// Right shuttle. + +const TimeValue kShuttleRightIntroStart = 0; +const TimeValue kShuttleRightIntroStop = 400; + +const TimeValue kShuttleRightDestroyedStart = 400; +const TimeValue kShuttleRightDestroyedStop = 840; + +const TimeValue kShuttleRightBlankTime = 840; + +const TimeValue kShuttleRightNormalTime = 880; + +const TimeValue kShuttleRightDamagedTime = 920; + +const TimeValue kShuttleRightTargetLockTime = 960; + +const TimeValue kShuttleRightGravitonTime = 1000; + +const TimeValue kShuttleRightOverloadTime = 1040; + +// Lower Left shuttle. + +const TimeValue kShuttleLowerLeftCollisionTime = 0; + +const TimeValue kShuttleLowerLeftTubeTime = 40; + +const TimeValue kShuttleLowerLeftAutopilotTime = 80; + +// Lower Right shuttle. + +const TimeValue kShuttleLowerRightOffTime = 0; + +const TimeValue kShuttleLowerRightTrackingTime = 40; + +const TimeValue kShuttleLowerRightTransportTime = 80; + +const TimeValue kShuttleLowerRightTransportHiliteTime = 120; + +// Center shuttle. + +const TimeValue kShuttleCenterBoardingTime = 0; + +const TimeValue kShuttleCenterCheckTime = 40; + +const TimeValue kShuttleCenterNavCompTime = 80; + +const TimeValue kShuttleCenterCommTime = 120; + +const TimeValue kShuttleCenterWeaponsTime = 160; + +const TimeValue kShuttleCenterAllSystemsTime = 200; + +const TimeValue kShuttleCenterSecureLooseTime = 240; + +const TimeValue kShuttleCenterAutoTestTime = 280; + +const TimeValue kShuttleCenterLaunchTime = 320; + +const TimeValue kShuttleCenterEnterTubeTime = 360; + +const TimeValue kShuttleCenterTargetSightedTime = 400; + +const TimeValue kShuttleCenterVerifyingTime = 440; + +const TimeValue kShuttleCenterScanningTime = 480; + +const TimeValue kShuttleCenterSafeTime = 520; + +// Upper Left shuttle. + +const TimeValue kShuttleUpperLeftDimTime = 0; + +const TimeValue kShuttleUpperLeftDampingTime = 40; + +const TimeValue kShuttleUpperLeftGravitonTime = 80; + +const TimeValue kShuttleUpperLeftTractorTime = 120; + +// Upper Right shuttle. + +const TimeValue kShuttleUpperRightLockedTime = 0; + +const TimeValue kShuttleUpperRightArmedTime = 40; + +const TimeValue kShuttleUpperRightAlienDestroyedTime = 80; + +const TimeValue kShuttleUpperRightOverloadTime = 120; + +const TimeValue kShuttleUpperRightTargetDestroyedTime = 160; + +// Shuttle distance + +const int kShuttleDistance = 500; + +const int kJunkMaxDistance = kShuttleDistance; +const int kJunkMinDistance = 40; + +const int kEnergyBeamMaxDistance = kShuttleDistance; +const int kEnergyBeamMinDistance = 40; + +const int kGravitonMaxDistance = kShuttleDistance; +const int kGravitonMinDistance = 40; + +const TimeValue kMarsOxyMaskOnIn = 0; +const TimeValue kMarsOxyMaskOnOut = 1560; + +const TimeValue kMarsAirlockButtonBeepIn = 1560; +const TimeValue kMarsAirlockButtonBeepOut = 1620; + +const TimeValue kMarsColorMatchingButtonBeepIn = 1620; +const TimeValue kMarsColorMatchingButtonBeepOut = 1680; + +const TimeValue kMarsKioskBeepIn = 1680; +const TimeValue kMarsKioskBeepOut = 1740; + +const TimeValue kMarsBumpIntoWallIn = 1740; +const TimeValue kMarsBumpIntoWallOut = 1888; + +const TimeValue kMarsGantryDoorCloseIn = 1888; +const TimeValue kMarsGantryDoorCloseOut = 2866; + +const TimeValue kMarsTransportDoorCloseIn = 2866; +const TimeValue kMarsTransportDoorCloseOut = 3593; + +const TimeValue kMarsAirlockPressurizeIn = 3593; +const TimeValue kMarsAirlockPressurizeOut = 4766; + +const TimeValue kMarsBigAirlockDoorCloseIn = 4766; +const TimeValue kMarsBigAirlockDoorCloseOut = 7872; + +const TimeValue kMarsSmallAirlockDoorCloseIn = 7872; +const TimeValue kMarsSmallAirlockDoorCloseOut = 10000; + +const TimeValue kMarsMazeDoorCloseIn = 10000; +const TimeValue kMarsMazeDoorCloseOut = 10969; + +const TimeValue kMarsRobotTakesTransportIn = 10969; +const TimeValue kMarsRobotTakesTransportOut = 12802; + +const TimeValue kMarsPodDepartedUpperPlatformIn = 12802; +const TimeValue kMarsPodDepartedUpperPlatformOut = 15783; + +const TimeValue kMarsPodDepartedLowerPlatformIn = 15783; +const TimeValue kMarsPodDepartedLowerPlatformOut = 18736; + +const TimeValue kMarsPodArrivedUpperPlatformIn = 18736; +const TimeValue kMarsPodArrivedUpperPlatformOut = 21605; + +const TimeValue kMarsCheckInRequiredIn = 21605; +const TimeValue kMarsCheckInRequiredOut = 27463; + +const TimeValue kMarsCantOpenShuttleIn = 27463; +const TimeValue kMarsCantOpenShuttleOut = 29214; + +const TimeValue kMarsShuttleLockOverrideIn = 29214; +const TimeValue kMarsShuttleLockOverrideOut = 30330; + +const TimeValue kMarsNoShuttleIn = 30330; +const TimeValue kMarsNoShuttleOut = 31502; + +const TimeValue kMustBeUnlockedIn = 31502; +const TimeValue kMustBeUnlockedOut = 33960; + +const TimeValue kColorMatchBlueIn = 33960; +const TimeValue kColorMatchBlueOut = 34240; + +const TimeValue kColorMatchRedIn = 34240; +const TimeValue kColorMatchRedOut = 34538; + +const TimeValue kColorMatchGreenIn = 34538; +const TimeValue kColorMatchGreenOut = 34827; + +const TimeValue kColorMatchYellowIn = 34827; +const TimeValue kColorMatchYellowOut = 35162; + +const TimeValue kColorMatchPurpleIn = 35162; +const TimeValue kColorMatchPurpleOut = 35426; + +const TimeValue kColorMatchZeroNodesIn = 35426; +const TimeValue kColorMatchZeroNodesOut = 36376; + +const TimeValue kColorMatchOneNodeIn = 36376; +const TimeValue kColorMatchOneNodeOut = 37209; + +const TimeValue kColorMatchTwoNodesIn = 37209; +const TimeValue kColorMatchTwoNodesOut = 37983; + +const TimeValue kColorMatchThreeNodesIn = 37983; +const TimeValue kColorMatchThreeNodesOut = 38784; + +const TimeValue kMarsShuttle1DepartedIn = 38784; +const TimeValue kMarsShuttle1DepartedOut = 40323; + +const TimeValue kMarsShuttle2DepartedIn = 40323; +const TimeValue kMarsShuttle2DepartedOut = 41824; + +const TimeValue kShuttleCockpitIn = 41824; +const TimeValue kShuttleCockpitOut = 43126; + +const TimeValue kShuttleOnboardIn = 43126; +const TimeValue kShuttleOnboardOut = 44284; + +const TimeValue kShuttleNavigationIn = 44284; +const TimeValue kShuttleNavigationOut = 46049; + +const TimeValue kShuttleCommunicationIn = 46049; +const TimeValue kShuttleCommunicationOut = 47288; + +const TimeValue kShuttleAutoTestingIn = 47288; +const TimeValue kShuttleAutoTestingOut = 48179; + +const TimeValue kMarsThrusterAutoTestIn = 48179; +const TimeValue kMarsThrusterAutoTestOut = 49979; + +const TimeValue kShuttleAllSystemsIn = 49979; +const TimeValue kShuttleAllSystemsOut = 51065; + +const TimeValue kShuttleSecureLooseIn = 51065; +const TimeValue kShuttleSecureLooseOut = 52346; + +const TimeValue kShuttlePrepareForDropIn = 52346; +const TimeValue kShuttlePrepareForDropOut = 53216; + +const TimeValue kShuttleAllClearIn = 53216; +const TimeValue kShuttleAllClearOut = 54031; + +const TimeValue kShuttleConfiguringIn = 54031; +const TimeValue kShuttleConfiguringOut = 54994; + +const TimeValue kShuttleGeneratingIn = 54994; +const TimeValue kShuttleGeneratingOut = 56033; + +const TimeValue kShuttleBreakawayIn = 56033; +const TimeValue kShuttleBreakawayOut = 57346; + +const TimeValue kMarsAtmosphericBreakawayIn = 57346; +const TimeValue kMarsAtmosphericBreakawayOut = 59237; + +const TimeValue kMarsCockpitChatterIn = 59237; +const TimeValue kMarsCockpitChatterOut = 70344; + +const TimeValue kShuttleDamperDescIn = 70344; +const TimeValue kShuttleDamperDescOut = 73262; + +const TimeValue kShuttleGravitonDescIn = 73262; +const TimeValue kShuttleGravitonDescOut = 75296; + +const TimeValue kShuttleTractorDescIn = 75296; +const TimeValue kShuttleTractorDescOut = 78381; + +const TimeValue kShuttleTargetSightedIn = 78381; +const TimeValue kShuttleTargetSightedOut = 79074; + +const TimeValue kShuttleAutopilotEngagedIn = 79074; +const TimeValue kShuttleAutopilotEngagedOut = 80414; + +const TimeValue kMarsEDBBlastIn = 80414; +const TimeValue kMarsEDBBlastOut = 80705; + +const TimeValue kMarsGravitonBlastIn = 80705; +const TimeValue kMarsGravitonBlastOut = 81199; + +const TimeValue kMarsJunkCollisionIn = 81199; +const TimeValue kMarsJunkCollisionOut = 81961; + +const TimeValue kShuttleGravitonIn = 81961; +const TimeValue kShuttleGravitonOut = 82587; + +const TimeValue kShuttleDampingBeamIn = 82587; +const TimeValue kShuttleDampingBeamOut = 83331; + +const TimeValue kShuttleTractorBeamIn = 83331; +const TimeValue kShuttleTractorBeamOut = 83802; + +const TimeValue kShuttleHullBreachIn = 83802; +const TimeValue kShuttleHullBreachOut = 84721; + +const TimeValue kShuttleWingDamageIn = 84721; +const TimeValue kShuttleWingDamageOut = 85640; + +const TimeValue kShuttleHullDamageIn = 85640; +const TimeValue kShuttleHullDamageOut = 86513; + +const TimeValue kShuttleEnergyTooLowIn = 86513; +const TimeValue kShuttleEnergyTooLowOut = 87578; + +const TimeValue kShuttleTractorLimitedIn = 87578; +const TimeValue kShuttleTractorLimitedOut = 89164; + +const TimeValue kShuttleCantHoldIn = 89164; +const TimeValue kShuttleCantHoldOut = 90945; + +const TimeValue kShuttleBrokeFreeIn = 90945; +const TimeValue kShuttleBrokeFreeOut = 92322; + +const TimeValue kShuttleDestroyedIn = 92322; +const TimeValue kShuttleDestroyedOut = 93189; + +const TimeValue kShuttleCoordinatesIn = 93189; +const TimeValue kShuttleCoordinatesOut = 94018; + +const TimeValue kShuttleScanningIn = 94018; +const TimeValue kShuttleScanningOut = 94975; + +const TimeValue kShuttleSafeIn = 94975; +const TimeValue kShuttleSafeOut = 96176; + +const TimeValue kShuttleOverloadedIn = 96176; +const TimeValue kShuttleOverloadedOut = 101308; + +const TimeScale kMarsMovieScale = 600; +const TimeScale kMarsFramesPerSecond = 15; +const TimeScale kMarsFrameDuration = 40; + +// Alternate IDs. + +const tAlternateID kAltMarsNormal = 0; +const tAlternateID kAltMarsPodAtMars34 = 1; +const tAlternateID kAltMarsTookCard = 2; +const tAlternateID kAltMars35AirlockEast = 3; +const tAlternateID kAltMars35AirlockWest = 4; +const tAlternateID kAltMarsPodAtMars45 = 5; +const tAlternateID kAltMarsTookMask = 6; +const tAlternateID kAltMarsMaskOnFiller = 7; +const tAlternateID kAltMars60AirlockEast = 8; +const tAlternateID kAltMars60AirlockWest = 9; + +// Room IDs. + +const tRoomID kMars0A = 0; +const tRoomID kMars00 = 1; +const tRoomID kMars01 = 2; +const tRoomID kMars02 = 3; +const tRoomID kMars03 = 4; +const tRoomID kMars04 = 5; +const tRoomID kMars05 = 6; +const tRoomID kMars06 = 7; +const tRoomID kMars07 = 8; +const tRoomID kMars08 = 9; +const tRoomID kMars09 = 10; +const tRoomID kMars10 = 11; +const tRoomID kMars11 = 12; +const tRoomID kMars12 = 13; +const tRoomID kMars13 = 14; +const tRoomID kMars14 = 15; +const tRoomID kMars15 = 16; +const tRoomID kMars16 = 17; +const tRoomID kMars17 = 18; +const tRoomID kMars18 = 19; +const tRoomID kMars19 = 20; +const tRoomID kMars20 = 21; +const tRoomID kMars21 = 22; +const tRoomID kMars22 = 23; +const tRoomID kMars23 = 24; +const tRoomID kMars24 = 25; +const tRoomID kMars25 = 26; +const tRoomID kMars26 = 27; +const tRoomID kMars27 = 28; +const tRoomID kMars28 = 29; +const tRoomID kMars29 = 30; +const tRoomID kMars30 = 31; +const tRoomID kMars31 = 32; +const tRoomID kMars31South = 33; +const tRoomID kMars32 = 34; +const tRoomID kMars33 = 35; +const tRoomID kMars33North = 36; +const tRoomID kMars34 = 37; +const tRoomID kMars35 = 38; +const tRoomID kMars36 = 39; +const tRoomID kMars37 = 40; +const tRoomID kMars38 = 41; +const tRoomID kMars39 = 42; +const tRoomID kMars41 = 43; +const tRoomID kMars42 = 44; +const tRoomID kMars43 = 45; +const tRoomID kMars44 = 46; +const tRoomID kMars45 = 47; +const tRoomID kMars46 = 48; +const tRoomID kMars47 = 49; +const tRoomID kMars48 = 50; +const tRoomID kMars49 = 51; +const tRoomID kMars50 = 52; +const tRoomID kMars51 = 53; +const tRoomID kMars52 = 54; +const tRoomID kMars54 = 55; +const tRoomID kMars56 = 56; +const tRoomID kMars58 = 57; +const tRoomID kMars60 = 58; +const tRoomID kMarsRobotShuttle = 59; +const tRoomID kMarsMaze004 = 60; +const tRoomID kMarsMaze005 = 61; +const tRoomID kMarsMaze006 = 62; +const tRoomID kMarsMaze007 = 63; +const tRoomID kMarsMaze008 = 64; +const tRoomID kMarsMaze009 = 65; +const tRoomID kMarsMaze010 = 66; +const tRoomID kMarsMaze011 = 67; +const tRoomID kMarsMaze012 = 68; +const tRoomID kMarsMaze015 = 69; +const tRoomID kMarsMaze016 = 70; +const tRoomID kMarsMaze017 = 71; +const tRoomID kMarsMaze018 = 72; +const tRoomID kMarsMaze019 = 73; +const tRoomID kMarsMaze020 = 74; +const tRoomID kMarsMaze021 = 75; +const tRoomID kMarsMaze022 = 76; +const tRoomID kMarsMaze023 = 77; +const tRoomID kMarsMaze024 = 78; +const tRoomID kMarsMaze025 = 79; +const tRoomID kMarsMaze026 = 80; +const tRoomID kMarsMaze027 = 81; +const tRoomID kMarsMaze028 = 82; +const tRoomID kMarsMaze031 = 83; +const tRoomID kMarsMaze032 = 84; +const tRoomID kMarsMaze033 = 85; +const tRoomID kMarsMaze034 = 86; +const tRoomID kMarsMaze035 = 87; +const tRoomID kMarsMaze036 = 88; +const tRoomID kMarsMaze037 = 89; +const tRoomID kMarsMaze038 = 90; +const tRoomID kMarsMaze039 = 91; +const tRoomID kMarsMaze042 = 92; +const tRoomID kMarsMaze043 = 93; +const tRoomID kMarsMaze044 = 94; +const tRoomID kMarsMaze045 = 95; +const tRoomID kMarsMaze046 = 96; +const tRoomID kMarsMaze047 = 97; +const tRoomID kMarsMaze049 = 98; +const tRoomID kMarsMaze050 = 99; +const tRoomID kMarsMaze051 = 100; +const tRoomID kMarsMaze052 = 101; +const tRoomID kMarsMaze053 = 102; +const tRoomID kMarsMaze054 = 103; +const tRoomID kMarsMaze055 = 104; +const tRoomID kMarsMaze056 = 105; +const tRoomID kMarsMaze057 = 106; +const tRoomID kMarsMaze058 = 107; +const tRoomID kMarsMaze059 = 108; +const tRoomID kMarsMaze060 = 109; +const tRoomID kMarsMaze061 = 110; +const tRoomID kMarsMaze063 = 111; +const tRoomID kMarsMaze064 = 112; +const tRoomID kMarsMaze065 = 113; +const tRoomID kMarsMaze066 = 114; +const tRoomID kMarsMaze067 = 115; +const tRoomID kMarsMaze068 = 116; +const tRoomID kMarsMaze069 = 117; +const tRoomID kMarsMaze070 = 118; +const tRoomID kMarsMaze071 = 119; +const tRoomID kMarsMaze072 = 120; +const tRoomID kMarsMaze074 = 121; +const tRoomID kMarsMaze076 = 122; +const tRoomID kMarsMaze078 = 123; +const tRoomID kMarsMaze079 = 124; +const tRoomID kMarsMaze081 = 125; +const tRoomID kMarsMaze083 = 126; +const tRoomID kMarsMaze084 = 127; +const tRoomID kMarsMaze085 = 128; +const tRoomID kMarsMaze086 = 129; +const tRoomID kMarsMaze087 = 130; +const tRoomID kMarsMaze088 = 131; +const tRoomID kMarsMaze089 = 132; +const tRoomID kMarsMaze090 = 133; +const tRoomID kMarsMaze091 = 134; +const tRoomID kMarsMaze092 = 135; +const tRoomID kMarsMaze093 = 136; +const tRoomID kMarsMaze098 = 137; +const tRoomID kMarsMaze099 = 138; +const tRoomID kMarsMaze100 = 139; +const tRoomID kMarsMaze101 = 140; +const tRoomID kMarsMaze104 = 141; +const tRoomID kMarsMaze105 = 142; +const tRoomID kMarsMaze106 = 143; +const tRoomID kMarsMaze107 = 144; +const tRoomID kMarsMaze108 = 145; +const tRoomID kMarsMaze111 = 146; +const tRoomID kMarsMaze113 = 147; +const tRoomID kMarsMaze114 = 148; +const tRoomID kMarsMaze115 = 149; +const tRoomID kMarsMaze116 = 150; +const tRoomID kMarsMaze117 = 151; +const tRoomID kMarsMaze118 = 152; +const tRoomID kMarsMaze119 = 153; +const tRoomID kMarsMaze120 = 154; +const tRoomID kMarsMaze121 = 155; +const tRoomID kMarsMaze122 = 156; +const tRoomID kMarsMaze123 = 157; +const tRoomID kMarsMaze124 = 158; +const tRoomID kMarsMaze125 = 159; +const tRoomID kMarsMaze126 = 160; +const tRoomID kMarsMaze127 = 161; +const tRoomID kMarsMaze128 = 162; +const tRoomID kMarsMaze129 = 163; +const tRoomID kMarsMaze130 = 164; +const tRoomID kMarsMaze131 = 165; +const tRoomID kMarsMaze132 = 166; +const tRoomID kMarsMaze133 = 167; +const tRoomID kMarsMaze136 = 168; +const tRoomID kMarsMaze137 = 169; +const tRoomID kMarsMaze138 = 170; +const tRoomID kMarsMaze139 = 171; +const tRoomID kMarsMaze140 = 172; +const tRoomID kMarsMaze141 = 173; +const tRoomID kMarsMaze142 = 174; +const tRoomID kMarsMaze143 = 175; +const tRoomID kMarsMaze144 = 176; +const tRoomID kMarsMaze145 = 177; +const tRoomID kMarsMaze146 = 178; +const tRoomID kMarsMaze147 = 179; +const tRoomID kMarsMaze148 = 180; +const tRoomID kMarsMaze149 = 181; +const tRoomID kMarsMaze152 = 182; +const tRoomID kMarsMaze153 = 183; +const tRoomID kMarsMaze154 = 184; +const tRoomID kMarsMaze155 = 185; +const tRoomID kMarsMaze156 = 186; +const tRoomID kMarsMaze157 = 187; +const tRoomID kMarsMaze159 = 188; +const tRoomID kMarsMaze160 = 189; +const tRoomID kMarsMaze161 = 190; +const tRoomID kMarsMaze162 = 191; +const tRoomID kMarsMaze163 = 192; +const tRoomID kMarsMaze164 = 193; +const tRoomID kMarsMaze165 = 194; +const tRoomID kMarsMaze166 = 195; +const tRoomID kMarsMaze167 = 196; +const tRoomID kMarsMaze168 = 197; +const tRoomID kMarsMaze169 = 198; +const tRoomID kMarsMaze170 = 199; +const tRoomID kMarsMaze171 = 200; +const tRoomID kMarsMaze172 = 201; +const tRoomID kMarsMaze173 = 202; +const tRoomID kMarsMaze174 = 203; +const tRoomID kMarsMaze175 = 204; +const tRoomID kMarsMaze177 = 205; +const tRoomID kMarsMaze178 = 206; +const tRoomID kMarsMaze179 = 207; +const tRoomID kMarsMaze180 = 208; +const tRoomID kMarsMaze181 = 209; +const tRoomID kMarsMaze182 = 210; +const tRoomID kMarsMaze183 = 211; +const tRoomID kMarsMaze184 = 212; +const tRoomID kMarsMaze187 = 213; +const tRoomID kMarsMaze188 = 214; +const tRoomID kMarsMaze189 = 215; +const tRoomID kMarsMaze190 = 216; +const tRoomID kMarsMaze191 = 217; +const tRoomID kMarsMaze192 = 218; +const tRoomID kMarsMaze193 = 219; +const tRoomID kMarsMaze194 = 220; +const tRoomID kMarsMaze195 = 221; +const tRoomID kMarsMaze198 = 222; +const tRoomID kMarsMaze199 = 223; +const tRoomID kMarsMaze200 = 224; +const tRoomID kMarsDeathRoom = 225; + +// Hot Spot Activation IDs. + +const tHotSpotActivationID kActivationReadyForKiosk = 1; +const tHotSpotActivationID kActivationKioskChoice = 2; +const tHotSpotActivationID kActivationTunnelMapReady = 3; +const tHotSpotActivationID kActivateMarsPodClosed = 4; +const tHotSpotActivationID kActivateMarsPodOpen = 5; +const tHotSpotActivationID kActivateReadyToPressurizeAirlock = 6; +const tHotSpotActivationID kActivateAirlockPressurized = 7; +const tHotSpotActivationID kActivateMaskOnHolder = 8; +const tHotSpotActivationID kActivateMaskOnFiller = 9; +const tHotSpotActivationID kActivateReactorPlatformOut = 10; +const tHotSpotActivationID kActivateReactorPlatformIn = 11; +const tHotSpotActivationID kActivateReactorAskLowerScreen = 12; +const tHotSpotActivationID kActivateReactorReadyForNitrogen = 13; +const tHotSpotActivationID kActivateReactorReadyForCrowBar = 14; +const tHotSpotActivationID kActivateReactorAskOperation = 15; +const tHotSpotActivationID kActivateReactorRanEvaluation = 16; +const tHotSpotActivationID kActivateReactorRanDiagnostics = 17; +const tHotSpotActivationID kActivateReactorAnalyzed = 18; +const tHotSpotActivationID kActivateReactorInstructions = 19; +const tHotSpotActivationID kActivateReactorInGame = 20; +const tHotSpotActivationID kActivateReactorBombSafe = 21; +const tHotSpotActivationID kActivateReactorBombExposed = 22; +const tHotSpotActivationID kActivationRobotHeadClosed = 23; +const tHotSpotActivationID kActivationRobotHeadOpen = 24; + +// Hot Spot IDs. + +const tHotSpotID kMars11NorthKioskSpotID = 5000; +const tHotSpotID kMars11NorthKioskSightsSpotID = 5001; +const tHotSpotID kMars11NorthKioskColonySpotID = 5002; +const tHotSpotID kMars12NorthKioskSpotID = 5003; +const tHotSpotID kMars12NorthKioskSightsSpotID = 5004; +const tHotSpotID kMars12NorthKioskColonySpotID = 5005; +const tHotSpotID kMars31SouthSpotID = 5006; +const tHotSpotID kMars31SouthOutSpotID = 5007; +const tHotSpotID kMars31SouthCardSpotID = 5008; +const tHotSpotID kMars33NorthSpotID = 5009; +const tHotSpotID kMars33NorthOutSpotID = 5010; +const tHotSpotID kMars33NorthMonitorSpotID = 5011; +const tHotSpotID kMars34NorthCardDropSpotID = 5012; +const tHotSpotID kMars34SouthOpenStorageSpotID = 5013; +const tHotSpotID kMars34SouthCloseStorageSpotID = 5014; +const tHotSpotID kMars34SouthCrowbarSpotID = 5015; +const tHotSpotID kMars35EastPressurizeSpotID = 5016; +const tHotSpotID kMars35EastSpinSpotID = 5017; +const tHotSpotID kMars35WestPressurizeSpotID = 5018; +const tHotSpotID kMars35WestSpinSpotID = 5019; +const tHotSpotID kMars45NorthOpenStorageSpotID = 5020; +const tHotSpotID kMars45NorthCloseStorageSpotID = 5021; +const tHotSpotID kMars45NorthCrowbarSpotID = 5022; +const tHotSpotID kAttackRobotHotSpotID = 5023; +const tHotSpotID kMars49AirMaskSpotID = 5024; +const tHotSpotID kMars49AirMaskFilledSpotID = 5025; +const tHotSpotID kMars49AirFillingDropSpotID = 5026; +const tHotSpotID kMars52MoveLeftSpotID = 5027; +const tHotSpotID kMars52MoveRightSpotID = 5028; +const tHotSpotID kMars52ExtractSpotID = 5029; +const tHotSpotID kMars53RetractSpotID = 5030; +const tHotSpotID kMars54MoveLeftSpotID = 5031; +const tHotSpotID kMars54MoveRightSpotID = 5032; +const tHotSpotID kMars54ExtractSpotID = 5033; +const tHotSpotID kMars55RetractSpotID = 5034; +const tHotSpotID kMars56MoveLeftSpotID = 5035; +const tHotSpotID kMars56MoveRightSpotID = 5036; +const tHotSpotID kMars56ExtractSpotID = 5037; +const tHotSpotID kMars57RetractSpotID = 5038; +const tHotSpotID kMars57LowerScreenSpotID = 5039; +const tHotSpotID kMars57Retract2SpotID = 5040; +const tHotSpotID kMars57DropNitrogenSpotID = 5041; +const tHotSpotID kMars57DropCrowBarSpotID = 5042; +const tHotSpotID kMars57CantOpenPanelSpotID = 5043; +const tHotSpotID kMars57ShieldEvaluationSpotID = 5044; +const tHotSpotID kMars57MeasureOutputSpotID = 5045; +const tHotSpotID kMars57RunDiagnosticsSpotID = 5046; +const tHotSpotID kMars57BackToOperationMenuSpotID = 5047; +const tHotSpotID kMars57AnalyzeObjectSpotID = 5048; +const tHotSpotID kMars57RemoveObjectMenuSpotID = 5049; +const tHotSpotID kMars57CircuitLinkSpotID = 5050; +const tHotSpotID kMars57CancelCircuitLinkSpotID = 5051; +const tHotSpotID kMars57GameInstructionsSpotID = 5052; +const tHotSpotID kMars57UndoMoveSpotID = 5053; +const tHotSpotID kMars57RedMoveSpotID = 5054; +const tHotSpotID kMars57YellowMoveSpotID = 5055; +const tHotSpotID kMars57GreenMoveSpotID = 5056; +const tHotSpotID kMars57BlueMoveSpotID = 5057; +const tHotSpotID kMars57PurpleMoveSpotID = 5058; +const tHotSpotID kMars57LowerScreenSafelySpotID = 5059; +const tHotSpotID kMars57GrabBombSpotID = 5060; +const tHotSpotID kMars58MoveLeftSpotID = 5061; +const tHotSpotID kMars58MoveRightSpotID = 5062; +const tHotSpotID kMars58ExtractSpotID = 5063; +const tHotSpotID kMars59RetractSpotID = 5064; +const tHotSpotID kMars60EastPressurizeSpotID = 5065; +const tHotSpotID kMars60EastSpinSpotID = 5066; +const tHotSpotID kMars60WestPressurizeSpotID = 5067; +const tHotSpotID kMars60WestSpinSpotID = 5068; +const tHotSpotID kRobotShuttleOpenHeadSpotID = 5069; +const tHotSpotID kRobotShuttleMapChipSpotID = 5070; +const tHotSpotID kRobotShuttleOpticalChipSpotID = 5071; +const tHotSpotID kRobotShuttleShieldChipSpotID = 5072; + +// Extra sequence IDs. + +const tExtraID kMarsArrivalFromTSA = 0; +const tExtraID kMars0AWatchShuttleDepart = 1; +const tExtraID kRobotThrowsPlayer = 2; +const tExtraID kMarsInfoKioskIntro = 3; +const tExtraID kMarsColonyInfo = 4; +const tExtraID kMarsSightsInfo = 5; +const tExtraID kRobotOnWayToShuttle = 6; +const tExtraID kMars31SouthZoomInNoCard = 7; +const tExtraID kMars31SouthViewNoCard = 8; +const tExtraID kMars31SouthZoomOutNoCard = 9; +const tExtraID kMars31SouthZoomViewNoCard = 10; +const tExtraID kMars33SlideShow1 = 11; +const tExtraID kMars33SlideShow2 = 12; +const tExtraID kMars33SlideShow3 = 13; +const tExtraID kMars33SlideShow4 = 14; +const tExtraID kMars34SpotOpenWithBar = 15; +const tExtraID kMars34SpotCloseWithBar = 16; +const tExtraID kMars34SpotOpenNoBar = 17; +const tExtraID kMars34SpotCloseNoBar = 18; +const tExtraID kMars34ViewOpenWithBar = 19; +const tExtraID kMars34ViewOpenNoBar = 20; +const tExtraID kMars34NorthPodGreeting = 21; +const tExtraID kMarsTurnOnPod = 22; +const tExtraID kMarsTakePodToMars45 = 23; +const tExtraID kMars35WestSpinAirlockToEast = 24; +const tExtraID kMars35EastSpinAirlockToWest = 25; +const tExtraID kMars45SpotOpenWithBar = 26; +const tExtraID kMars45SpotCloseWithBar = 27; +const tExtraID kMars45SpotOpenNoBar = 28; +const tExtraID kMars45SpotCloseNoBar = 29; +const tExtraID kMars45ViewOpenWithBar = 30; +const tExtraID kMars45ViewOpenNoBar = 31; +const tExtraID kMars48RobotApproaches = 32; +const tExtraID kMars48RobotKillsPlayer = 33; +const tExtraID kMars48RobotLoops = 34; +const tExtraID kMars48RobotView = 35; +const tExtraID kMars48RobotDefends = 36; +const tExtraID kMars49SouthViewMaskFilling = 37; +const tExtraID kMars52SpinLeft = 38; +const tExtraID kMars52SpinRight = 39; +const tExtraID kMars52Extend = 40; +const tExtraID kMars53Retract = 41; +const tExtraID kMars54SpinLeft = 42; +const tExtraID kMars54SpinRight = 43; +const tExtraID kMars54Extend = 44; +const tExtraID kMars55Retract = 45; +const tExtraID kMars56SpinLeft = 46; +const tExtraID kMars56SpinRight = 47; +const tExtraID kMars56ExtendWithBomb = 48; +const tExtraID kMars56ExtendNoBomb = 49; +const tExtraID kMars57RetractWithBomb = 50; +const tExtraID kMars57RetractNoBomb = 51; +const tExtraID kMars57LowerScreenClosed = 52; +const tExtraID kMars57CantOpenPanel = 53; +const tExtraID kMars57FreezeLock = 54; +const tExtraID kMars57BreakLock = 55; +const tExtraID kMars57LockFrozenView = 56; +const tExtraID kMars57ThawLock = 57; +const tExtraID kMars57OpenPanel = 58; +const tExtraID kMars57OpenPanelChoices = 59; +const tExtraID kMars57ShieldEvaluation = 60; +const tExtraID kMars57MeasureOutput = 61; +const tExtraID kMars57ShieldOkayLoop = 62; +const tExtraID kMars57RunDiagnostics = 63; +const tExtraID kMars57BombExplodes = 64; +const tExtraID kMars57BombAnalysis = 65; +const tExtraID kMars57DontLink = 66; +const tExtraID kMars57CircuitLink = 67; +const tExtraID kMars57GameLevel1 = 68; +const tExtraID kMars57GameLevel2 = 69; +const tExtraID kMars57GameLevel3 = 70; +const tExtraID kMars57BombExplodesInGame = 71; +const tExtraID kMars57GameSolved = 72; +const tExtraID kMars57ExposeBomb = 73; +const tExtraID kMars57BackToNormal = 74; +const tExtraID kMars57ViewOpenNoBomb = 75; +const tExtraID kMars58SpinLeft = 76; +const tExtraID kMars58SpinRight = 77; +const tExtraID kMars58Extend = 78; +const tExtraID kMars59Retract = 79; +const tExtraID kMars60WestSpinAirlockToEast = 80; +const tExtraID kMars60EastSpinAirlockToWest = 81; +const tExtraID kMarsRobotHeadOpen = 82; +const tExtraID kMarsRobotHeadClose = 83; +const tExtraID kMarsRobotHead000 = 84; +const tExtraID kMarsRobotHead001 = 85; +const tExtraID kMarsRobotHead010 = 86; +const tExtraID kMarsRobotHead011 = 87; +const tExtraID kMarsRobotHead100 = 88; +const tExtraID kMarsRobotHead101 = 89; +const tExtraID kMarsRobotHead110 = 90; +const tExtraID kMarsRobotHead111 = 91; +const tExtraID kMarsMaze007RobotApproach = 92; +const tExtraID kMarsMaze007RobotLoop = 93; +const tExtraID kMarsMaze007RobotDeath = 94; +const tExtraID kMarsMaze015SouthRobotApproach = 95; +const tExtraID kMarsMaze015SouthRobotLoop = 96; +const tExtraID kMarsMaze015SouthRobotDeath = 97; +const tExtraID kMarsMaze101EastRobotApproach = 98; +const tExtraID kMarsMaze101EastRobotLoop = 99; +const tExtraID kMarsMaze101EastRobotDeath = 100; +const tExtraID kMarsMaze104WestLoop = 101; +const tExtraID kMarsMaze104WestDeath = 102; +const tExtraID kMarsMaze133SouthApproach = 103; +const tExtraID kMarsMaze133SouthLoop = 104; +const tExtraID kMarsMaze133SouthDeath = 105; +const tExtraID kMarsMaze136NorthApproach = 106; +const tExtraID kMarsMaze136NorthLoop = 107; +const tExtraID kMarsMaze136NorthDeath = 108; +const tExtraID kMarsMaze184WestLoop = 109; +const tExtraID kMarsMaze184WestDeath = 110; +const tExtraID kMars200DeathInBucket = 111; + +const tResIDType kReactorUndoHilitePICTID = 900; + +const int16 kMars52Compass = 90; +const int16 kMars54Compass = 180; +const int16 kMars56Compass = 270; +const int16 kMars58Compass = 0; + +} // End of namespace Pegasus + +#endif diff --git a/engines/pegasus/neighborhood/mars/gravitoncannon.h b/engines/pegasus/neighborhood/mars/gravitoncannon.h index 1919c03000..b94fd55e5b 100755 --- a/engines/pegasus/neighborhood/mars/gravitoncannon.h +++ b/engines/pegasus/neighborhood/mars/gravitoncannon.h @@ -26,11 +26,13 @@ #ifndef PEGASUS_NEIGHBORHOOD_MARS_GRAVITONCANNON_H #define PEGASUS_NEIGHBORHOOD_MARS_GRAVITONCANNON_H +#include "pegasus/surface.h" #include "pegasus/neighborhood/mars/shuttleweapon.h" namespace Pegasus { class GravitonCannon : public ShuttleWeapon { +public: GravitonCannon(); virtual ~GravitonCannon() {} diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index b6b9211554..5c366383b4 100755 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -38,675 +38,6 @@ namespace Pegasus { -const TimeValue kMarsOxyMaskOnIn = 0; -const TimeValue kMarsOxyMaskOnOut = 1560; - -const TimeValue kMarsAirlockButtonBeepIn = 1560; -const TimeValue kMarsAirlockButtonBeepOut = 1620; - -const TimeValue kMarsColorMatchingButtonBeepIn = 1620; -const TimeValue kMarsColorMatchingButtonBeepOut = 1680; - -const TimeValue kMarsKioskBeepIn = 1680; -const TimeValue kMarsKioskBeepOut = 1740; - -const TimeValue kMarsBumpIntoWallIn = 1740; -const TimeValue kMarsBumpIntoWallOut = 1888; - -const TimeValue kMarsGantryDoorCloseIn = 1888; -const TimeValue kMarsGantryDoorCloseOut = 2866; - -const TimeValue kMarsTransportDoorCloseIn = 2866; -const TimeValue kMarsTransportDoorCloseOut = 3593; - -const TimeValue kMarsAirlockPressurizeIn = 3593; -const TimeValue kMarsAirlockPressurizeOut = 4766; - -const TimeValue kMarsBigAirlockDoorCloseIn = 4766; -const TimeValue kMarsBigAirlockDoorCloseOut = 7872; - -const TimeValue kMarsSmallAirlockDoorCloseIn = 7872; -const TimeValue kMarsSmallAirlockDoorCloseOut = 10000; - -const TimeValue kMarsMazeDoorCloseIn = 10000; -const TimeValue kMarsMazeDoorCloseOut = 10969; - -const TimeValue kMarsRobotTakesTransportIn = 10969; -const TimeValue kMarsRobotTakesTransportOut = 12802; - -const TimeValue kMarsPodDepartedUpperPlatformIn = 12802; -const TimeValue kMarsPodDepartedUpperPlatformOut = 15783; - -const TimeValue kMarsPodDepartedLowerPlatformIn = 15783; -const TimeValue kMarsPodDepartedLowerPlatformOut = 18736; - -const TimeValue kMarsPodArrivedUpperPlatformIn = 18736; -const TimeValue kMarsPodArrivedUpperPlatformOut = 21605; - -const TimeValue kMarsCheckInRequiredIn = 21605; -const TimeValue kMarsCheckInRequiredOut = 27463; - -const TimeValue kMarsCantOpenShuttleIn = 27463; -const TimeValue kMarsCantOpenShuttleOut = 29214; - -const TimeValue kMarsShuttleLockOverrideIn = 29214; -const TimeValue kMarsShuttleLockOverrideOut = 30330; - -const TimeValue kMarsNoShuttleIn = 30330; -const TimeValue kMarsNoShuttleOut = 31502; - -const TimeValue kMustBeUnlockedIn = 31502; -const TimeValue kMustBeUnlockedOut = 33960; - -const TimeValue kColorMatchBlueIn = 33960; -const TimeValue kColorMatchBlueOut = 34240; - -const TimeValue kColorMatchRedIn = 34240; -const TimeValue kColorMatchRedOut = 34538; - -const TimeValue kColorMatchGreenIn = 34538; -const TimeValue kColorMatchGreenOut = 34827; - -const TimeValue kColorMatchYellowIn = 34827; -const TimeValue kColorMatchYellowOut = 35162; - -const TimeValue kColorMatchPurpleIn = 35162; -const TimeValue kColorMatchPurpleOut = 35426; - -const TimeValue kColorMatchZeroNodesIn = 35426; -const TimeValue kColorMatchZeroNodesOut = 36376; - -const TimeValue kColorMatchOneNodeIn = 36376; -const TimeValue kColorMatchOneNodeOut = 37209; - -const TimeValue kColorMatchTwoNodesIn = 37209; -const TimeValue kColorMatchTwoNodesOut = 37983; - -const TimeValue kColorMatchThreeNodesIn = 37983; -const TimeValue kColorMatchThreeNodesOut = 38784; - -const TimeValue kMarsShuttle1DepartedIn = 38784; -const TimeValue kMarsShuttle1DepartedOut = 40323; - -const TimeValue kMarsShuttle2DepartedIn = 40323; -const TimeValue kMarsShuttle2DepartedOut = 41824; - -const TimeValue kShuttleCockpitIn = 41824; -const TimeValue kShuttleCockpitOut = 43126; - -const TimeValue kShuttleOnboardIn = 43126; -const TimeValue kShuttleOnboardOut = 44284; - -const TimeValue kShuttleNavigationIn = 44284; -const TimeValue kShuttleNavigationOut = 46049; - -const TimeValue kShuttleCommunicationIn = 46049; -const TimeValue kShuttleCommunicationOut = 47288; - -const TimeValue kShuttleAutoTestingIn = 47288; -const TimeValue kShuttleAutoTestingOut = 48179; - -const TimeValue kMarsThrusterAutoTestIn = 48179; -const TimeValue kMarsThrusterAutoTestOut = 49979; - -const TimeValue kShuttleAllSystemsIn = 49979; -const TimeValue kShuttleAllSystemsOut = 51065; - -const TimeValue kShuttleSecureLooseIn = 51065; -const TimeValue kShuttleSecureLooseOut = 52346; - -const TimeValue kShuttlePrepareForDropIn = 52346; -const TimeValue kShuttlePrepareForDropOut = 53216; - -const TimeValue kShuttleAllClearIn = 53216; -const TimeValue kShuttleAllClearOut = 54031; - -const TimeValue kShuttleConfiguringIn = 54031; -const TimeValue kShuttleConfiguringOut = 54994; - -const TimeValue kShuttleGeneratingIn = 54994; -const TimeValue kShuttleGeneratingOut = 56033; - -const TimeValue kShuttleBreakawayIn = 56033; -const TimeValue kShuttleBreakawayOut = 57346; - -const TimeValue kMarsAtmosphericBreakawayIn = 57346; -const TimeValue kMarsAtmosphericBreakawayOut = 59237; - -const TimeValue kMarsCockpitChatterIn = 59237; -const TimeValue kMarsCockpitChatterOut = 70344; - -const TimeValue kShuttleDamperDescIn = 70344; -const TimeValue kShuttleDamperDescOut = 73262; - -const TimeValue kShuttleGravitonDescIn = 73262; -const TimeValue kShuttleGravitonDescOut = 75296; - -const TimeValue kShuttleTractorDescIn = 75296; -const TimeValue kShuttleTractorDescOut = 78381; - -const TimeValue kShuttleTargetSightedIn = 78381; -const TimeValue kShuttleTargetSightedOut = 79074; - -const TimeValue kShuttleAutopilotEngagedIn = 79074; -const TimeValue kShuttleAutopilotEngagedOut = 80414; - -const TimeValue kMarsEDBBlastIn = 80414; -const TimeValue kMarsEDBBlastOut = 80705; - -const TimeValue kMarsGravitonBlastIn = 80705; -const TimeValue kMarsGravitonBlastOut = 81199; - -const TimeValue kMarsJunkCollisionIn = 81199; -const TimeValue kMarsJunkCollisionOut = 81961; - -const TimeValue kShuttleGravitonIn = 81961; -const TimeValue kShuttleGravitonOut = 82587; - -const TimeValue kShuttleDampingBeamIn = 82587; -const TimeValue kShuttleDampingBeamOut = 83331; - -const TimeValue kShuttleTractorBeamIn = 83331; -const TimeValue kShuttleTractorBeamOut = 83802; - -const TimeValue kShuttleHullBreachIn = 83802; -const TimeValue kShuttleHullBreachOut = 84721; - -const TimeValue kShuttleWingDamageIn = 84721; -const TimeValue kShuttleWingDamageOut = 85640; - -const TimeValue kShuttleHullDamageIn = 85640; -const TimeValue kShuttleHullDamageOut = 86513; - -const TimeValue kShuttleEnergyTooLowIn = 86513; -const TimeValue kShuttleEnergyTooLowOut = 87578; - -const TimeValue kShuttleTractorLimitedIn = 87578; -const TimeValue kShuttleTractorLimitedOut = 89164; - -const TimeValue kShuttleCantHoldIn = 89164; -const TimeValue kShuttleCantHoldOut = 90945; - -const TimeValue kShuttleBrokeFreeIn = 90945; -const TimeValue kShuttleBrokeFreeOut = 92322; - -const TimeValue kShuttleDestroyedIn = 92322; -const TimeValue kShuttleDestroyedOut = 93189; - -const TimeValue kShuttleCoordinatesIn = 93189; -const TimeValue kShuttleCoordinatesOut = 94018; - -const TimeValue kShuttleScanningIn = 94018; -const TimeValue kShuttleScanningOut = 94975; - -const TimeValue kShuttleSafeIn = 94975; -const TimeValue kShuttleSafeOut = 96176; - -const TimeValue kShuttleOverloadedIn = 96176; -const TimeValue kShuttleOverloadedOut = 101308; - -const TimeScale kMarsMovieScale = 600; -const TimeScale kMarsFramesPerSecond = 15; -const TimeScale kMarsFrameDuration = 40; - -// Alternate IDs. - -const tAlternateID kAltMarsNormal = 0; -const tAlternateID kAltMarsPodAtMars34 = 1; -const tAlternateID kAltMarsTookCard = 2; -const tAlternateID kAltMars35AirlockEast = 3; -const tAlternateID kAltMars35AirlockWest = 4; -const tAlternateID kAltMarsPodAtMars45 = 5; -const tAlternateID kAltMarsTookMask = 6; -const tAlternateID kAltMarsMaskOnFiller = 7; -const tAlternateID kAltMars60AirlockEast = 8; -const tAlternateID kAltMars60AirlockWest = 9; - -// Room IDs. - -const tRoomID kMars00 = 1; -const tRoomID kMars01 = 2; -const tRoomID kMars02 = 3; -const tRoomID kMars03 = 4; -const tRoomID kMars04 = 5; -const tRoomID kMars05 = 6; -const tRoomID kMars06 = 7; -const tRoomID kMars07 = 8; -const tRoomID kMars08 = 9; -const tRoomID kMars09 = 10; -const tRoomID kMars10 = 11; -const tRoomID kMars11 = 12; -const tRoomID kMars12 = 13; -const tRoomID kMars13 = 14; -const tRoomID kMars14 = 15; -const tRoomID kMars15 = 16; -const tRoomID kMars16 = 17; -const tRoomID kMars17 = 18; -const tRoomID kMars18 = 19; -const tRoomID kMars19 = 20; -const tRoomID kMars20 = 21; -const tRoomID kMars21 = 22; -const tRoomID kMars22 = 23; -const tRoomID kMars23 = 24; -const tRoomID kMars24 = 25; -const tRoomID kMars25 = 26; -const tRoomID kMars26 = 27; -const tRoomID kMars27 = 28; -const tRoomID kMars28 = 29; -const tRoomID kMars29 = 30; -const tRoomID kMars30 = 31; -const tRoomID kMars31 = 32; -const tRoomID kMars32 = 34; -const tRoomID kMars33 = 35; -const tRoomID kMars33North = 36; -const tRoomID kMars36 = 39; -const tRoomID kMars37 = 40; -const tRoomID kMars38 = 41; -const tRoomID kMars41 = 43; -const tRoomID kMars42 = 44; -const tRoomID kMars43 = 45; -const tRoomID kMars44 = 46; -const tRoomID kMars45 = 47; -const tRoomID kMars46 = 48; -const tRoomID kMars47 = 49; -const tRoomID kMars48 = 50; -const tRoomID kMars50 = 52; -const tRoomID kMars51 = 53; -const tRoomID kMars52 = 54; -const tRoomID kMars54 = 55; -const tRoomID kMars56 = 56; -const tRoomID kMars58 = 57; -const tRoomID kMarsRobotShuttle = 59; -const tRoomID kMarsMaze005 = 61; -const tRoomID kMarsMaze006 = 62; -const tRoomID kMarsMaze007 = 63; -const tRoomID kMarsMaze008 = 64; -const tRoomID kMarsMaze009 = 65; -const tRoomID kMarsMaze010 = 66; -const tRoomID kMarsMaze011 = 67; -const tRoomID kMarsMaze012 = 68; -const tRoomID kMarsMaze015 = 69; -const tRoomID kMarsMaze016 = 70; -const tRoomID kMarsMaze017 = 71; -const tRoomID kMarsMaze018 = 72; -const tRoomID kMarsMaze019 = 73; -const tRoomID kMarsMaze020 = 74; -const tRoomID kMarsMaze021 = 75; -const tRoomID kMarsMaze022 = 76; -const tRoomID kMarsMaze023 = 77; -const tRoomID kMarsMaze024 = 78; -const tRoomID kMarsMaze025 = 79; -const tRoomID kMarsMaze026 = 80; -const tRoomID kMarsMaze027 = 81; -const tRoomID kMarsMaze028 = 82; -const tRoomID kMarsMaze031 = 83; -const tRoomID kMarsMaze032 = 84; -const tRoomID kMarsMaze033 = 85; -const tRoomID kMarsMaze034 = 86; -const tRoomID kMarsMaze035 = 87; -const tRoomID kMarsMaze036 = 88; -const tRoomID kMarsMaze037 = 89; -const tRoomID kMarsMaze038 = 90; -const tRoomID kMarsMaze039 = 91; -const tRoomID kMarsMaze042 = 92; -const tRoomID kMarsMaze043 = 93; -const tRoomID kMarsMaze044 = 94; -const tRoomID kMarsMaze045 = 95; -const tRoomID kMarsMaze046 = 96; -const tRoomID kMarsMaze047 = 97; -const tRoomID kMarsMaze049 = 98; -const tRoomID kMarsMaze050 = 99; -const tRoomID kMarsMaze051 = 100; -const tRoomID kMarsMaze052 = 101; -const tRoomID kMarsMaze053 = 102; -const tRoomID kMarsMaze054 = 103; -const tRoomID kMarsMaze055 = 104; -const tRoomID kMarsMaze056 = 105; -const tRoomID kMarsMaze057 = 106; -const tRoomID kMarsMaze058 = 107; -const tRoomID kMarsMaze059 = 108; -const tRoomID kMarsMaze060 = 109; -const tRoomID kMarsMaze061 = 110; -const tRoomID kMarsMaze063 = 111; -const tRoomID kMarsMaze064 = 112; -const tRoomID kMarsMaze065 = 113; -const tRoomID kMarsMaze066 = 114; -const tRoomID kMarsMaze067 = 115; -const tRoomID kMarsMaze068 = 116; -const tRoomID kMarsMaze069 = 117; -const tRoomID kMarsMaze070 = 118; -const tRoomID kMarsMaze071 = 119; -const tRoomID kMarsMaze072 = 120; -const tRoomID kMarsMaze074 = 121; -const tRoomID kMarsMaze076 = 122; -const tRoomID kMarsMaze078 = 123; -const tRoomID kMarsMaze079 = 124; -const tRoomID kMarsMaze081 = 125; -const tRoomID kMarsMaze083 = 126; -const tRoomID kMarsMaze084 = 127; -const tRoomID kMarsMaze085 = 128; -const tRoomID kMarsMaze086 = 129; -const tRoomID kMarsMaze087 = 130; -const tRoomID kMarsMaze088 = 131; -const tRoomID kMarsMaze089 = 132; -const tRoomID kMarsMaze090 = 133; -const tRoomID kMarsMaze091 = 134; -const tRoomID kMarsMaze092 = 135; -const tRoomID kMarsMaze093 = 136; -const tRoomID kMarsMaze098 = 137; -const tRoomID kMarsMaze099 = 138; -const tRoomID kMarsMaze100 = 139; -const tRoomID kMarsMaze101 = 140; -const tRoomID kMarsMaze104 = 141; -const tRoomID kMarsMaze105 = 142; -const tRoomID kMarsMaze106 = 143; -const tRoomID kMarsMaze107 = 144; -const tRoomID kMarsMaze108 = 145; -const tRoomID kMarsMaze111 = 146; -const tRoomID kMarsMaze113 = 147; -const tRoomID kMarsMaze114 = 148; -const tRoomID kMarsMaze115 = 149; -const tRoomID kMarsMaze116 = 150; -const tRoomID kMarsMaze117 = 151; -const tRoomID kMarsMaze118 = 152; -const tRoomID kMarsMaze119 = 153; -const tRoomID kMarsMaze120 = 154; -const tRoomID kMarsMaze121 = 155; -const tRoomID kMarsMaze122 = 156; -const tRoomID kMarsMaze123 = 157; -const tRoomID kMarsMaze124 = 158; -const tRoomID kMarsMaze125 = 159; -const tRoomID kMarsMaze126 = 160; -const tRoomID kMarsMaze127 = 161; -const tRoomID kMarsMaze128 = 162; -const tRoomID kMarsMaze129 = 163; -const tRoomID kMarsMaze130 = 164; -const tRoomID kMarsMaze131 = 165; -const tRoomID kMarsMaze132 = 166; -const tRoomID kMarsMaze133 = 167; -const tRoomID kMarsMaze136 = 168; -const tRoomID kMarsMaze137 = 169; -const tRoomID kMarsMaze138 = 170; -const tRoomID kMarsMaze139 = 171; -const tRoomID kMarsMaze140 = 172; -const tRoomID kMarsMaze141 = 173; -const tRoomID kMarsMaze142 = 174; -const tRoomID kMarsMaze143 = 175; -const tRoomID kMarsMaze144 = 176; -const tRoomID kMarsMaze145 = 177; -const tRoomID kMarsMaze146 = 178; -const tRoomID kMarsMaze147 = 179; -const tRoomID kMarsMaze148 = 180; -const tRoomID kMarsMaze149 = 181; -const tRoomID kMarsMaze152 = 182; -const tRoomID kMarsMaze153 = 183; -const tRoomID kMarsMaze154 = 184; -const tRoomID kMarsMaze155 = 185; -const tRoomID kMarsMaze156 = 186; -const tRoomID kMarsMaze157 = 187; -const tRoomID kMarsMaze159 = 188; -const tRoomID kMarsMaze160 = 189; -const tRoomID kMarsMaze161 = 190; -const tRoomID kMarsMaze162 = 191; -const tRoomID kMarsMaze163 = 192; -const tRoomID kMarsMaze164 = 193; -const tRoomID kMarsMaze165 = 194; -const tRoomID kMarsMaze166 = 195; -const tRoomID kMarsMaze167 = 196; -const tRoomID kMarsMaze168 = 197; -const tRoomID kMarsMaze169 = 198; -const tRoomID kMarsMaze170 = 199; -const tRoomID kMarsMaze171 = 200; -const tRoomID kMarsMaze172 = 201; -const tRoomID kMarsMaze173 = 202; -const tRoomID kMarsMaze174 = 203; -const tRoomID kMarsMaze175 = 204; -const tRoomID kMarsMaze177 = 205; -const tRoomID kMarsMaze178 = 206; -const tRoomID kMarsMaze179 = 207; -const tRoomID kMarsMaze180 = 208; -const tRoomID kMarsMaze181 = 209; -const tRoomID kMarsMaze182 = 210; -const tRoomID kMarsMaze183 = 211; -const tRoomID kMarsMaze184 = 212; -const tRoomID kMarsMaze187 = 213; -const tRoomID kMarsMaze188 = 214; -const tRoomID kMarsMaze189 = 215; -const tRoomID kMarsMaze190 = 216; -const tRoomID kMarsMaze191 = 217; -const tRoomID kMarsMaze192 = 218; -const tRoomID kMarsMaze193 = 219; -const tRoomID kMarsMaze194 = 220; -const tRoomID kMarsMaze195 = 221; -const tRoomID kMarsMaze198 = 222; -const tRoomID kMarsMaze199 = 223; -const tRoomID kMarsDeathRoom = 225; - -// Hot Spot Activation IDs. - -const tHotSpotActivationID kActivationReadyForKiosk = 1; -const tHotSpotActivationID kActivationKioskChoice = 2; -const tHotSpotActivationID kActivationTunnelMapReady = 3; -const tHotSpotActivationID kActivateMarsPodClosed = 4; -const tHotSpotActivationID kActivateMarsPodOpen = 5; -const tHotSpotActivationID kActivateReadyToPressurizeAirlock = 6; -const tHotSpotActivationID kActivateAirlockPressurized = 7; -const tHotSpotActivationID kActivateMaskOnHolder = 8; -const tHotSpotActivationID kActivateMaskOnFiller = 9; -const tHotSpotActivationID kActivateReactorPlatformOut = 10; -const tHotSpotActivationID kActivateReactorPlatformIn = 11; -const tHotSpotActivationID kActivateReactorAskLowerScreen = 12; -const tHotSpotActivationID kActivateReactorReadyForNitrogen = 13; -const tHotSpotActivationID kActivateReactorReadyForCrowBar = 14; -const tHotSpotActivationID kActivateReactorAskOperation = 15; -const tHotSpotActivationID kActivateReactorRanEvaluation = 16; -const tHotSpotActivationID kActivateReactorRanDiagnostics = 17; -const tHotSpotActivationID kActivateReactorAnalyzed = 18; -const tHotSpotActivationID kActivateReactorInstructions = 19; -const tHotSpotActivationID kActivateReactorInGame = 20; -const tHotSpotActivationID kActivateReactorBombSafe = 21; -const tHotSpotActivationID kActivateReactorBombExposed = 22; -const tHotSpotActivationID kActivationRobotHeadClosed = 23; -const tHotSpotActivationID kActivationRobotHeadOpen = 24; - -// Hot Spot IDs. - -const tHotSpotID kMars11NorthKioskSpotID = 5000; -const tHotSpotID kMars11NorthKioskSightsSpotID = 5001; -const tHotSpotID kMars11NorthKioskColonySpotID = 5002; -const tHotSpotID kMars12NorthKioskSpotID = 5003; -const tHotSpotID kMars12NorthKioskSightsSpotID = 5004; -const tHotSpotID kMars12NorthKioskColonySpotID = 5005; -const tHotSpotID kMars31SouthSpotID = 5006; -const tHotSpotID kMars31SouthOutSpotID = 5007; -const tHotSpotID kMars31SouthCardSpotID = 5008; -const tHotSpotID kMars33NorthSpotID = 5009; -const tHotSpotID kMars33NorthOutSpotID = 5010; -const tHotSpotID kMars33NorthMonitorSpotID = 5011; -const tHotSpotID kMars34NorthCardDropSpotID = 5012; -const tHotSpotID kMars34SouthOpenStorageSpotID = 5013; -const tHotSpotID kMars34SouthCloseStorageSpotID = 5014; -const tHotSpotID kMars34SouthCrowbarSpotID = 5015; -const tHotSpotID kMars35EastPressurizeSpotID = 5016; -const tHotSpotID kMars35EastSpinSpotID = 5017; -const tHotSpotID kMars35WestPressurizeSpotID = 5018; -const tHotSpotID kMars35WestSpinSpotID = 5019; -const tHotSpotID kMars45NorthOpenStorageSpotID = 5020; -const tHotSpotID kMars45NorthCloseStorageSpotID = 5021; -const tHotSpotID kMars45NorthCrowbarSpotID = 5022; -const tHotSpotID kAttackRobotHotSpotID = 5023; -const tHotSpotID kMars49AirMaskSpotID = 5024; -const tHotSpotID kMars49AirMaskFilledSpotID = 5025; -const tHotSpotID kMars49AirFillingDropSpotID = 5026; -const tHotSpotID kMars52MoveLeftSpotID = 5027; -const tHotSpotID kMars52MoveRightSpotID = 5028; -const tHotSpotID kMars52ExtractSpotID = 5029; -const tHotSpotID kMars53RetractSpotID = 5030; -const tHotSpotID kMars54MoveLeftSpotID = 5031; -const tHotSpotID kMars54MoveRightSpotID = 5032; -const tHotSpotID kMars54ExtractSpotID = 5033; -const tHotSpotID kMars55RetractSpotID = 5034; -const tHotSpotID kMars56MoveLeftSpotID = 5035; -const tHotSpotID kMars56MoveRightSpotID = 5036; -const tHotSpotID kMars56ExtractSpotID = 5037; -const tHotSpotID kMars57RetractSpotID = 5038; -const tHotSpotID kMars57LowerScreenSpotID = 5039; -const tHotSpotID kMars57Retract2SpotID = 5040; -const tHotSpotID kMars57DropNitrogenSpotID = 5041; -const tHotSpotID kMars57DropCrowBarSpotID = 5042; -const tHotSpotID kMars57CantOpenPanelSpotID = 5043; -const tHotSpotID kMars57ShieldEvaluationSpotID = 5044; -const tHotSpotID kMars57MeasureOutputSpotID = 5045; -const tHotSpotID kMars57RunDiagnosticsSpotID = 5046; -const tHotSpotID kMars57BackToOperationMenuSpotID = 5047; -const tHotSpotID kMars57AnalyzeObjectSpotID = 5048; -const tHotSpotID kMars57RemoveObjectMenuSpotID = 5049; -const tHotSpotID kMars57CircuitLinkSpotID = 5050; -const tHotSpotID kMars57CancelCircuitLinkSpotID = 5051; -const tHotSpotID kMars57GameInstructionsSpotID = 5052; -const tHotSpotID kMars57UndoMoveSpotID = 5053; -const tHotSpotID kMars57RedMoveSpotID = 5054; -const tHotSpotID kMars57YellowMoveSpotID = 5055; -const tHotSpotID kMars57GreenMoveSpotID = 5056; -const tHotSpotID kMars57BlueMoveSpotID = 5057; -const tHotSpotID kMars57PurpleMoveSpotID = 5058; -const tHotSpotID kMars57LowerScreenSafelySpotID = 5059; -const tHotSpotID kMars57GrabBombSpotID = 5060; -const tHotSpotID kMars58MoveLeftSpotID = 5061; -const tHotSpotID kMars58MoveRightSpotID = 5062; -const tHotSpotID kMars58ExtractSpotID = 5063; -const tHotSpotID kMars59RetractSpotID = 5064; -const tHotSpotID kMars60EastPressurizeSpotID = 5065; -const tHotSpotID kMars60EastSpinSpotID = 5066; -const tHotSpotID kMars60WestPressurizeSpotID = 5067; -const tHotSpotID kMars60WestSpinSpotID = 5068; -const tHotSpotID kRobotShuttleOpenHeadSpotID = 5069; -const tHotSpotID kRobotShuttleMapChipSpotID = 5070; -const tHotSpotID kRobotShuttleOpticalChipSpotID = 5071; -const tHotSpotID kRobotShuttleShieldChipSpotID = 5072; - -// Extra sequence IDs. - -const tExtraID kMarsArrivalFromTSA = 0; -const tExtraID kMars0AWatchShuttleDepart = 1; -const tExtraID kRobotThrowsPlayer = 2; -const tExtraID kMarsInfoKioskIntro = 3; -const tExtraID kMarsColonyInfo = 4; -const tExtraID kMarsSightsInfo = 5; -const tExtraID kRobotOnWayToShuttle = 6; -const tExtraID kMars31SouthZoomInNoCard = 7; -const tExtraID kMars31SouthViewNoCard = 8; -const tExtraID kMars31SouthZoomOutNoCard = 9; -const tExtraID kMars31SouthZoomViewNoCard = 10; -const tExtraID kMars33SlideShow1 = 11; -const tExtraID kMars33SlideShow2 = 12; -const tExtraID kMars33SlideShow3 = 13; -const tExtraID kMars33SlideShow4 = 14; -const tExtraID kMars34SpotOpenWithBar = 15; -const tExtraID kMars34SpotCloseWithBar = 16; -const tExtraID kMars34SpotOpenNoBar = 17; -const tExtraID kMars34SpotCloseNoBar = 18; -const tExtraID kMars34ViewOpenWithBar = 19; -const tExtraID kMars34ViewOpenNoBar = 20; -const tExtraID kMars34NorthPodGreeting = 21; -const tExtraID kMarsTurnOnPod = 22; -const tExtraID kMarsTakePodToMars45 = 23; -const tExtraID kMars35WestSpinAirlockToEast = 24; -const tExtraID kMars35EastSpinAirlockToWest = 25; -const tExtraID kMars45SpotOpenWithBar = 26; -const tExtraID kMars45SpotCloseWithBar = 27; -const tExtraID kMars45SpotOpenNoBar = 28; -const tExtraID kMars45SpotCloseNoBar = 29; -const tExtraID kMars45ViewOpenWithBar = 30; -const tExtraID kMars45ViewOpenNoBar = 31; -const tExtraID kMars48RobotApproaches = 32; -const tExtraID kMars48RobotKillsPlayer = 33; -const tExtraID kMars48RobotLoops = 34; -const tExtraID kMars48RobotView = 35; -const tExtraID kMars48RobotDefends = 36; -const tExtraID kMars49SouthViewMaskFilling = 37; -const tExtraID kMars52SpinLeft = 38; -const tExtraID kMars52SpinRight = 39; -const tExtraID kMars52Extend = 40; -const tExtraID kMars53Retract = 41; -const tExtraID kMars54SpinLeft = 42; -const tExtraID kMars54SpinRight = 43; -const tExtraID kMars54Extend = 44; -const tExtraID kMars55Retract = 45; -const tExtraID kMars56SpinLeft = 46; -const tExtraID kMars56SpinRight = 47; -const tExtraID kMars56ExtendWithBomb = 48; -const tExtraID kMars56ExtendNoBomb = 49; -const tExtraID kMars57RetractWithBomb = 50; -const tExtraID kMars57RetractNoBomb = 51; -const tExtraID kMars57LowerScreenClosed = 52; -const tExtraID kMars57CantOpenPanel = 53; -const tExtraID kMars57FreezeLock = 54; -const tExtraID kMars57BreakLock = 55; -const tExtraID kMars57LockFrozenView = 56; -const tExtraID kMars57ThawLock = 57; -const tExtraID kMars57OpenPanel = 58; -const tExtraID kMars57OpenPanelChoices = 59; -const tExtraID kMars57ShieldEvaluation = 60; -const tExtraID kMars57MeasureOutput = 61; -const tExtraID kMars57ShieldOkayLoop = 62; -const tExtraID kMars57RunDiagnostics = 63; -const tExtraID kMars57BombExplodes = 64; -const tExtraID kMars57BombAnalysis = 65; -const tExtraID kMars57DontLink = 66; -const tExtraID kMars57CircuitLink = 67; -const tExtraID kMars57GameLevel1 = 68; -const tExtraID kMars57GameLevel2 = 69; -const tExtraID kMars57GameLevel3 = 70; -const tExtraID kMars57BombExplodesInGame = 71; -const tExtraID kMars57GameSolved = 72; -const tExtraID kMars57ExposeBomb = 73; -const tExtraID kMars57BackToNormal = 74; -const tExtraID kMars57ViewOpenNoBomb = 75; -const tExtraID kMars58SpinLeft = 76; -const tExtraID kMars58SpinRight = 77; -const tExtraID kMars58Extend = 78; -const tExtraID kMars59Retract = 79; -const tExtraID kMars60WestSpinAirlockToEast = 80; -const tExtraID kMars60EastSpinAirlockToWest = 81; -const tExtraID kMarsRobotHeadOpen = 82; -const tExtraID kMarsRobotHeadClose = 83; -const tExtraID kMarsRobotHead000 = 84; -const tExtraID kMarsRobotHead001 = 85; -const tExtraID kMarsRobotHead010 = 86; -const tExtraID kMarsRobotHead011 = 87; -const tExtraID kMarsRobotHead100 = 88; -const tExtraID kMarsRobotHead101 = 89; -const tExtraID kMarsRobotHead110 = 90; -const tExtraID kMarsRobotHead111 = 91; -const tExtraID kMarsMaze007RobotApproach = 92; -const tExtraID kMarsMaze007RobotLoop = 93; -const tExtraID kMarsMaze007RobotDeath = 94; -const tExtraID kMarsMaze015SouthRobotApproach = 95; -const tExtraID kMarsMaze015SouthRobotLoop = 96; -const tExtraID kMarsMaze015SouthRobotDeath = 97; -const tExtraID kMarsMaze101EastRobotApproach = 98; -const tExtraID kMarsMaze101EastRobotLoop = 99; -const tExtraID kMarsMaze101EastRobotDeath = 100; -const tExtraID kMarsMaze104WestLoop = 101; -const tExtraID kMarsMaze104WestDeath = 102; -const tExtraID kMarsMaze133SouthApproach = 103; -const tExtraID kMarsMaze133SouthLoop = 104; -const tExtraID kMarsMaze133SouthDeath = 105; -const tExtraID kMarsMaze136NorthApproach = 106; -const tExtraID kMarsMaze136NorthLoop = 107; -const tExtraID kMarsMaze136NorthDeath = 108; -const tExtraID kMarsMaze184WestLoop = 109; -const tExtraID kMarsMaze184WestDeath = 110; -const tExtraID kMars200DeathInBucket = 111; - -const tResIDType kReactorUndoHilitePICTID = 900; - -const int16 kMars52Compass = 90; -const int16 kMars54Compass = 180; -const int16 kMars56Compass = 270; -const int16 kMars58Compass = 0; - // This should really be 22.5. // Probably no one will know the difference. const int16 kMarsShieldPanelOffsetAngle = 22; @@ -747,6 +78,13 @@ enum { kMaze184RobotLoopingTime = 96 * kMarsFrameDuration }; +// I've made a couple macros for these rects so we don't +// have to globally construct them or whatnot +#define kShuttleEnergyBeamBounds Common::Rect(24, 27, 24 + 112, 27 + 46) +#define kShuttleGravitonBounds Common::Rect(24, 73, 24 + 112, 73 + 30) +#define kShuttleTractorBounds Common::Rect(24, 103, 24 + 112, 103 + 30) +#define kShuttleTransportBounds Common::Rect(484, 353, 89 + 484, 79 + 353) + void robotTimerExpiredFunction(FunctionPtr *, void *mars) { ((Mars *)mars)->robotTiredOfWaiting(); } @@ -778,7 +116,10 @@ Mars::Mars(InputHandler *nextHandler, PegasusEngine *owner) : Neighborhood(nextH _leftShuttleMovie(kNoDisplayElement), _rightShuttleMovie(kNoDisplayElement), _lowerLeftShuttleMovie(kNoDisplayElement), _lowerRightShuttleMovie(kNoDisplayElement), _centerShuttleMovie(kNoDisplayElement), _upperLeftShuttleMovie(kNoDisplayElement), _upperRightShuttleMovie(kNoDisplayElement), - _leftDamageShuttleMovie(kNoDisplayElement), _rightDamageShuttleMovie(kNoDisplayElement), _explosions(kNoDisplayElement) { + _leftDamageShuttleMovie(kNoDisplayElement), _rightDamageShuttleMovie(kNoDisplayElement), _explosions(kNoDisplayElement), + _planetMovie(kNoDisplayElement), _junk(kNoDisplayElement), _energyChoiceSpot(kShuttleEnergySpotID), + _gravitonChoiceSpot(kShuttleGravitonSpotID), _tractorChoiceSpot(kShuttleTractorSpotID), + _shuttleViewSpot(kShuttleViewSpotID), _shuttleTransportSpot(kShuttleTransportSpotID) { _noAirFuse.setFunctionPtr(&airStageExpiredFunction, this); setIsItemTaken(kMarsCard); setIsItemTaken(kAirMask); @@ -787,6 +128,11 @@ Mars::Mars(InputHandler *nextHandler, PegasusEngine *owner) : Neighborhood(nextH } Mars::~Mars() { + g_allHotspots.remove(&_energyChoiceSpot); + g_allHotspots.remove(&_gravitonChoiceSpot); + g_allHotspots.remove(&_tractorChoiceSpot); + g_allHotspots.remove(&_shuttleViewSpot); + g_allHotspots.remove(&_shuttleTransportSpot); } void Mars::init() { @@ -1880,8 +1226,12 @@ void Mars::arriveAt(const tRoomID room, const tDirectionConstant direction) { } break; case MakeRoomView(kMars44, kWest): - // TODO: Space Chase - _neighborhoodNotification.setNotificationFlags(kTimeForCanyonChaseFlag, kTimeForCanyonChaseFlag); + if (GameState.getMarsReadyForShuttleTransport()) + startUpFromFinishedSpaceChase(); + else if (GameState.getMarsFinishedCanyonChase()) + startUpFromSpaceChase(); + else + _neighborhoodNotification.setNotificationFlags(kTimeForCanyonChaseFlag, kTimeForCanyonChaseFlag); break; case MakeRoomView(kMars10, kNorth): if (!GameState.getMarsRobotThrownPlayer()) @@ -2306,7 +1656,15 @@ void Mars::activateHotspots() { break; default: if (_privateFlags.getFlag(kMarsPrivateInSpaceChaseFlag)) { - // TODO + if (GameState.getMarsReadyForShuttleTransport()) { + _shuttleTransportSpot.setActive(); + } else { + _energyChoiceSpot.setActive(); + _gravitonChoiceSpot.setActive(); + _tractorChoiceSpot.setActive(); + if (_weaponSelection != kNoWeapon) + _shuttleViewSpot.setActive(); + } } break; } @@ -2414,6 +1772,13 @@ void Mars::clickInHotspot(const Input &input, const Hotspot *clickedSpot) { playSpotSoundSync(kMarsColorMatchingButtonBeepIn, kMarsColorMatchingButtonBeepOut); doReactorGuess(4); break; + case kShuttleEnergySpotID: + case kShuttleGravitonSpotID: + case kShuttleTractorSpotID: + case kShuttleViewSpotID: + case kShuttleTransportSpotID: + spaceChaseClick(input, clickedSpot->getObjectID()); + break; default: Neighborhood::clickInHotspot(input, clickedSpot); break; @@ -2450,7 +1815,8 @@ tInputBits Mars::getInputFilter() { result &= ~kFilterAllDirections; break; case MakeRoomView(kMars44, kWest): - // TODO + if (_canyonChaseMovie.isMovieValid() && _canyonChaseMovie.isRunning()) + result &= ~kFilterAllDirections; break; } @@ -3007,7 +2373,7 @@ void Mars::receiveNotification(Notification *notification, const tNotificationFl recallToTSASuccess(); } } else if ((flag & kTimeToTransportFlag) != 0) { - // TODO + transportToRobotShip(); } if (g_AIArea) @@ -3128,6 +2494,7 @@ void Mars::doCanyonChase() { // Take it down a tick initially. This sets the time to the time of the last tick, // so that subsequence drops will drop it down a tick. _leftDamageShuttleMovie.setTime(_leftDamageShuttleMovie.getTime() - 40); + _leftDamageShuttleMovie.redrawMovieWorld(); _lowerRightShuttleMovie.show(); _lowerRightShuttleMovie.setTime(kShuttleLowerRightOffTime); @@ -3178,6 +2545,242 @@ void Mars::doCanyonChase() { startMarsTimer(kLaunchTubeReachedTime, kMovieTicksPerSecond, kMarsLaunchTubeReached); } +void Mars::startUpFromFinishedSpaceChase() { + setNextHandler(_vm); + throwAwayInterface(); + + initOnePicture(&_shuttleInterface1, "Images/Mars/MCmain1.pict", kShuttleBackgroundOrder, kShuttle1Left, + kShuttle1Top, true); + initOnePicture(&_shuttleInterface2, "Images/Mars/MCmain2.pict", kShuttleBackgroundOrder, kShuttle2Left, + kShuttle2Top, true); + initOnePicture(&_shuttleInterface3, "Images/Mars/MCmain3.pict", kShuttleBackgroundOrder, kShuttle3Left, + kShuttle3Top, true); + initOnePicture(&_shuttleInterface4, "Images/Mars/MCmain4.pict", kShuttleBackgroundOrder, kShuttle4Left, + kShuttle4Top, true); + + initOneMovie(&_leftShuttleMovie, "Images/Mars/Left Shuttle.movie", + kShuttleMonitorOrder, kShuttleLeftLeft, kShuttleLeftTop, false); + + initOneMovie(&_rightShuttleMovie, "Images/Mars/Right Shuttle.movie", + kShuttleMonitorOrder, kShuttleRightLeft, kShuttleRightTop, false); + + initOneMovie(&_lowerLeftShuttleMovie, "Images/Mars/Lower Left Shuttle.movie", kShuttleMonitorOrder, + kShuttleLowerLeftLeft, kShuttleLowerLeftTop, false); + + initOneMovie(&_lowerRightShuttleMovie, "Images/Mars/Lower Right Shuttle.movie", kShuttleMonitorOrder, + kShuttleLowerRightLeft, kShuttleLowerRightTop, false); + + initOneMovie(&_centerShuttleMovie, "Images/Mars/Center Shuttle.movie", + kShuttleMonitorOrder, kShuttleCenterLeft, kShuttleCenterTop, false); + + initOneMovie(&_upperLeftShuttleMovie, "Images/Mars/Upper Left Shuttle.movie", kShuttleMonitorOrder, + kShuttleUpperLeftLeft, kShuttleUpperLeftTop, false); + + initOneMovie(&_upperRightShuttleMovie, "Images/Mars/Upper Right Shuttle.movie", kShuttleMonitorOrder, + kShuttleUpperRightLeft, kShuttleUpperRightTop, false); + + initOneMovie(&_leftDamageShuttleMovie, "Images/Mars/Left Damage Shuttle.movie", + kShuttleStatusOrder, kShuttleLeftEnergyLeft, kShuttleLeftEnergyTop, false); + + initOneMovie(&_rightDamageShuttleMovie, "Images/Mars/Right Damage Shuttle.movie", + kShuttleStatusOrder, kShuttleRightEnergyLeft, kShuttleRightEnergyTop, false); + + _centerShuttleMovie.show(); + + _shuttleEnergyMeter.initShuttleEnergyMeter(); + _shuttleEnergyMeter.setEnergyValue(kFullShuttleEnergy); + + _leftShuttleMovie.show(); + _leftShuttleMovie.setTime(kShuttleLeftNormalTime); + _leftShuttleMovie.redrawMovieWorld(); + + _leftDamageShuttleMovie.show(); + _leftDamageShuttleMovie.setTime(_leftDamageShuttleMovie.getDuration() - 40); + _leftDamageShuttleMovie.redrawMovieWorld(); + + _lowerRightShuttleMovie.show(); + + _lowerLeftShuttleMovie.show(); + + loadLoopSound1("Sounds/Mars/Space Ambient.22K.8.AIFF"); + + initOneMovie(&_junk, "Images/Mars/Junk.movie", kShuttleJunkOrder, kShuttleJunkLeft, + kShuttleJunkTop, false); + + initOneMovie(&_explosions, "Images/Mars/Explosions.movie", kShuttleWeaponFrontOrder, 0, 0, false); + _explosionCallBack.initCallBack(&_explosions, kCallBackAtExtremes); + + _energyBeam.initShuttleWeapon(); + _gravitonCannon.initShuttleWeapon(); + + _upperLeftShuttleMovie.show(); + _upperLeftShuttleMovie.setTime(kShuttleUpperLeftDimTime); + _upperLeftShuttleMovie.redrawMovieWorld(); + + _rightShuttleMovie.show(); + _rightShuttleMovie.setTime(kShuttleRightIntroStop - 1); + _rightShuttleMovie.redrawMovieWorld(); + + _rightDamageShuttleMovie.show(); + _rightDamageShuttleMovie.setTime(40); + _rightDamageShuttleMovie.redrawMovieWorld(); + + _lowerLeftShuttleMovie.setTime(kShuttleLowerLeftAutopilotTime); + _lowerLeftShuttleMovie.redrawMovieWorld(); + + _shuttleTransportSpot.setArea(kShuttleTransportBounds); + _shuttleTransportSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); + g_allHotspots.push_back(&_shuttleTransportSpot); + + _privateFlags.setFlag(kMarsPrivateInSpaceChaseFlag, true); + + _upperRightShuttleMovie.show(); + _upperRightShuttleMovie.setTime(kShuttleUpperRightOverloadTime); + _upperRightShuttleMovie.redrawMovieWorld(); + + _centerShuttleMovie.setTime(kShuttleCenterSafeTime); + _centerShuttleMovie.redrawMovieWorld(); + + _lowerRightShuttleMovie.setTime(kShuttleLowerRightTransportTime); + _lowerRightShuttleMovie.redrawMovieWorld(); + + initOneMovie(&_canyonChaseMovie, "Images/Mars/M98EAS.movie", kShuttleTractorBeamMovieOrder, + kShuttleWindowLeft, kShuttleWindowTop, true); + _canyonChaseMovie.setTime(_canyonChaseMovie.getDuration()); + _canyonChaseMovie.redrawMovieWorld(); +} + +void Mars::startUpFromSpaceChase() { + setNextHandler(_vm); + throwAwayInterface(); + + // Open the spot sounds movie again... + _spotSounds.initFromQuickTime(getSoundSpotsName()); + _spotSounds.setVolume(_vm->getSoundFXLevel());; + + initOnePicture(&_shuttleInterface1, "Images/Mars/MCmain1.pict", kShuttleBackgroundOrder, kShuttle1Left, + kShuttle1Top, true); + initOnePicture(&_shuttleInterface2, "Images/Mars/MCmain2.pict", kShuttleBackgroundOrder, kShuttle2Left, + kShuttle2Top, true); + initOnePicture(&_shuttleInterface3, "Images/Mars/MCmain3.pict", kShuttleBackgroundOrder, kShuttle3Left, + kShuttle3Top, true); + initOnePicture(&_shuttleInterface4, "Images/Mars/MCmain4.pict", kShuttleBackgroundOrder, kShuttle4Left, + kShuttle4Top, true); + + initOneMovie(&_leftShuttleMovie, "Images/Mars/Left Shuttle.movie", + kShuttleMonitorOrder, kShuttleLeftLeft, kShuttleLeftTop, false); + + initOneMovie(&_rightShuttleMovie, "Images/Mars/Right Shuttle.movie", + kShuttleMonitorOrder, kShuttleRightLeft, kShuttleRightTop, false); + + initOneMovie(&_lowerLeftShuttleMovie, "Images/Mars/Lower Left Shuttle.movie", kShuttleMonitorOrder, + kShuttleLowerLeftLeft, kShuttleLowerLeftTop, false); + + initOneMovie(&_lowerRightShuttleMovie, "Images/Mars/Lower Right Shuttle.movie", kShuttleMonitorOrder, + kShuttleLowerRightLeft, kShuttleLowerRightTop, false); + + initOneMovie(&_centerShuttleMovie, "Images/Mars/Center Shuttle.movie", + kShuttleMonitorOrder, kShuttleCenterLeft, kShuttleCenterTop, false); + + initOneMovie(&_upperLeftShuttleMovie, "Images/Mars/Upper Left Shuttle.movie", kShuttleMonitorOrder, + kShuttleUpperLeftLeft, kShuttleUpperLeftTop, false); + + initOneMovie(&_upperRightShuttleMovie, "Images/Mars/Upper Right Shuttle.movie", kShuttleMonitorOrder, + kShuttleUpperRightLeft, kShuttleUpperRightTop, false); + + initOneMovie(&_leftDamageShuttleMovie, "Images/Mars/Left Damage Shuttle.movie", + kShuttleStatusOrder, kShuttleLeftEnergyLeft, kShuttleLeftEnergyTop, false); + + initOneMovie(&_rightDamageShuttleMovie, "Images/Mars/Right Damage Shuttle.movie", + kShuttleStatusOrder, kShuttleRightEnergyLeft, kShuttleRightEnergyTop, false); + + _centerShuttleMovie.show(); + + _shuttleEnergyMeter.initShuttleEnergyMeter(); + _shuttleEnergyMeter.setEnergyValue(kFullShuttleEnergy); + + _leftShuttleMovie.show(); + _leftShuttleMovie.setTime(kShuttleLeftNormalTime); + _leftShuttleMovie.redrawMovieWorld(); + + _leftDamageShuttleMovie.show(); + _leftDamageShuttleMovie.setTime(_leftDamageShuttleMovie.getDuration() - 40); + _leftDamageShuttleMovie.redrawMovieWorld(); + + _lowerRightShuttleMovie.show(); + + _lowerLeftShuttleMovie.show(); + + loadLoopSound1("Sounds/Mars/Space Ambient.22K.8.AIFF"); + + initOneMovie(&_planetMovie, "Images/Mars/Planet.movie", kShuttlePlanetOrder, + kPlanetStartLeft, kPlanetStartTop, true); + _planetMovie.setFlags(kLoopTimeBase); + + initOneMovie(&_junk, "Images/Mars/Junk.movie", kShuttleJunkOrder, kShuttleJunkLeft, + kShuttleJunkTop, false); + + initOneMovie(&_explosions, "Images/Mars/Explosions.movie", kShuttleWeaponFrontOrder, 0, 0, false); + _explosionCallBack.initCallBack(&_explosions, kCallBackAtExtremes); + + _energyBeam.initShuttleWeapon(); + _gravitonCannon.initShuttleWeapon(); + + _upperLeftShuttleMovie.show(); + + _robotShip.initRobotShip(); + + _planetMovie.start(); + _planetMover.startMoving(&_planetMovie); + + _upperLeftShuttleMovie.setTime(kShuttleUpperLeftDimTime); + _upperLeftShuttleMovie.redrawMovieWorld(); + + _centerShuttleMovie.setTime(kShuttleCenterTargetSightedTime); + _centerShuttleMovie.redrawMovieWorld(); + + _lowerRightShuttleMovie.setTime(kShuttleLowerRightTrackingTime); + _lowerRightShuttleMovie.redrawMovieWorld(); + + _rightShuttleMovie.show(); + _rightShuttleMovie.setTime(kShuttleRightIntroStop - 1); + _rightShuttleMovie.redrawMovieWorld(); + + _rightDamageShuttleMovie.show(); + _rightDamageShuttleMovie.setTime(_rightDamageShuttleMovie.getDuration() - 40); + _rightDamageShuttleMovie.redrawMovieWorld(); + + _lowerLeftShuttleMovie.setTime(kShuttleLowerLeftAutopilotTime); + _lowerLeftShuttleMovie.redrawMovieWorld(); + + _robotShip.startMoving(); + + _shuttleHUD.initShuttleHUD(); + + _tractorBeam.startDisplaying(); + + _energyChoiceSpot.setArea(kShuttleEnergyBeamBounds); + _energyChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); + g_allHotspots.push_back(&_energyChoiceSpot); + _gravitonChoiceSpot.setArea(kShuttleGravitonBounds); + _gravitonChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); + g_allHotspots.push_back(&_gravitonChoiceSpot); + _tractorChoiceSpot.setArea(kShuttleTractorBounds); + _tractorChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); + g_allHotspots.push_back(&_tractorChoiceSpot); + _shuttleViewSpot.setArea(kShuttleWindowLeft, kShuttleWindowTop, + kShuttleWindowLeft + kShuttleWindowWidth, kShuttleWindowTop + kShuttleWindowHeight); + _shuttleViewSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); + g_allHotspots.push_back(&_shuttleViewSpot); + _shuttleTransportSpot.setArea(kShuttleTransportBounds); + _shuttleTransportSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); + g_allHotspots.push_back(&_shuttleTransportSpot); + + _privateFlags.setFlag(kMarsPrivateInSpaceChaseFlag, true); + + startMarsTimer(kSpaceChaseTimeLimit, kOneTickPerSecond, kMarsSpaceChaseFinished); +} + void Mars::setSoundFXLevel(const uint16 level) { Neighborhood::setSoundFXLevel(level); @@ -3219,7 +2822,101 @@ void Mars::marsTimerExpired(MarsTimerEvent &event) { _canyonChaseMovie.stopDisplaying(); _canyonChaseMovie.releaseMovie(); - error("STUB: Space chase"); + loadLoopSound1("Sounds/Mars/Space Ambient.22K.8.AIFF"); + + playSpotSoundSync(kShuttleConfiguringIn, kShuttleConfiguringOut); + playSpotSoundSync(kShuttleGeneratingIn, kShuttleGeneratingOut); + playSpotSoundSync(kShuttleBreakawayIn, kShuttleBreakawayOut); + playSpotSoundSync(kMarsAtmosphericBreakawayIn, kMarsAtmosphericBreakawayOut); + + initOneMovie(&_planetMovie, "Images/Mars/Planet.movie", kShuttlePlanetOrder, kPlanetStartLeft, kPlanetStartTop, true); + _planetMovie.setFlags(kLoopTimeBase); + + initOneMovie(&_junk, "Images/Mars/Junk.movie", kShuttleJunkOrder, kShuttleJunkLeft, kShuttleJunkTop, false); + + initOneMovie(&_explosions, "Images/Mars/Explosions.movie", kShuttleWeaponFrontOrder, 0, 0, false); + _explosionCallBack.initCallBack(&_explosions, kCallBackAtExtremes); + + _energyBeam.initShuttleWeapon(); + _gravitonCannon.initShuttleWeapon(); + + _centerShuttleMovie.setTime(kShuttleCenterWeaponsTime); + _centerShuttleMovie.redrawMovieWorld(); + + _upperLeftShuttleMovie.show(); + _upperLeftShuttleMovie.setTime(kShuttleUpperLeftDampingTime); + _upperLeftShuttleMovie.redrawMovieWorld(); + + _robotShip.initRobotShip(); + + _planetMovie.start(); + _planetMover.startMoving(&_planetMovie); + + playSpotSoundSync(kShuttleDamperDescIn, kShuttleDamperDescOut); + _upperLeftShuttleMovie.setTime(kShuttleUpperLeftGravitonTime); + _upperLeftShuttleMovie.redrawMovieWorld(); + + playSpotSoundSync(kShuttleGravitonDescIn, kShuttleGravitonDescOut); + _upperLeftShuttleMovie.setTime(kShuttleUpperLeftTractorTime); + _upperLeftShuttleMovie.redrawMovieWorld(); + + playSpotSoundSync(kShuttleTractorDescIn, kShuttleTractorDescOut); + _upperLeftShuttleMovie.setTime(kShuttleUpperLeftDimTime); + _upperLeftShuttleMovie.redrawMovieWorld(); + + _centerShuttleMovie.setTime(kShuttleCenterTargetSightedTime); + _centerShuttleMovie.redrawMovieWorld(); + playSpotSoundSync(kShuttleTargetSightedIn, kShuttleTargetSightedOut); + + _lowerRightShuttleMovie.setTime(kShuttleLowerRightTrackingTime); + _lowerRightShuttleMovie.redrawMovieWorld(); + _rightShuttleMovie.show(); + playMovieSegment(&_rightShuttleMovie, kShuttleRightIntroStart, kShuttleRightIntroStop); + + _rightDamageShuttleMovie.show(); + playMovieSegment(&_rightDamageShuttleMovie); + + // Take it down a tick initially. This sets the time to the time of the last tick, + // so that subsequence drops will drop it down a tick. + _rightDamageShuttleMovie.setTime(_rightDamageShuttleMovie.getTime() - 40); + _rightDamageShuttleMovie.redrawMovieWorld(); + + _lowerLeftShuttleMovie.setTime(kShuttleLowerLeftAutopilotTime); + _lowerLeftShuttleMovie.redrawMovieWorld(); + playSpotSoundSync(kShuttleAutopilotEngagedIn, kShuttleAutopilotEngagedOut); + + _robotShip.startMoving(); + + _shuttleHUD.initShuttleHUD(); + + _tractorBeam.startDisplaying(); + + _energyChoiceSpot.setArea(kShuttleEnergyBeamBounds); + _energyChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); + g_allHotspots.push_back(&_energyChoiceSpot); + _gravitonChoiceSpot.setArea(kShuttleGravitonBounds); + _gravitonChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); + g_allHotspots.push_back(&_gravitonChoiceSpot); + _tractorChoiceSpot.setArea(kShuttleTractorBounds); + _tractorChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); + g_allHotspots.push_back(&_tractorChoiceSpot); + _shuttleViewSpot.setArea(kShuttleWindowLeft, kShuttleWindowTop, + kShuttleWindowLeft + kShuttleWindowWidth, kShuttleWindowTop + kShuttleWindowHeight); + _shuttleViewSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); + g_allHotspots.push_back(&_shuttleViewSpot); + _shuttleTransportSpot.setArea(kShuttleTransportBounds); + _shuttleTransportSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); + g_allHotspots.push_back(&_shuttleTransportSpot); + + _privateFlags.setFlag(kMarsPrivateInSpaceChaseFlag, true); + + playSpotSoundSync(kMarsCockpitChatterIn, kMarsCockpitChatterOut); + + GameState.setMarsFinishedCanyonChase(true); + + startMarsTimer(kSpaceChaseTimeLimit, kOneTickPerSecond, kMarsSpaceChaseFinished); + + _vm->_cursor->hideUntilMoved(); break; case kMarsSpaceChaseFinished: // Player failed to stop the robot in time... @@ -3295,16 +2992,226 @@ void Mars::throwAwayMarsShuttle() { _leftDamageShuttleMovie.stopDisplaying(); _rightDamageShuttleMovie.releaseMovie(); _rightDamageShuttleMovie.stopDisplaying(); - - // TODO: Some more to do here + _shuttleEnergyMeter.disposeShuttleEnergyMeter(); _robotShip.cleanUpRobotShip(); + _shuttleHUD.cleanUpShuttleHUD(); + _tractorBeam.stopDisplaying(); + _junk.releaseMovie(); + _junk.stopDisplaying(); + _energyBeam.cleanUpShuttleWeapon(); + _gravitonCannon.cleanUpShuttleWeapon(); + g_allHotspots.remove(&_energyChoiceSpot); + g_allHotspots.remove(&_gravitonChoiceSpot); + g_allHotspots.remove(&_tractorChoiceSpot); + g_allHotspots.remove(&_shuttleViewSpot); + g_allHotspots.remove(&_shuttleTransportSpot); _explosions.releaseMovie(); _explosions.stopDisplaying(); loadLoopSound1(""); } +void Mars::transportToRobotShip() { + throwAwayMarsShuttle(); + + Video::VideoDecoder *video = new Video::QuickTimeDecoder(); + if (!video->loadFile("Images/Mars/M98EAE.movie")) + error("Could not load shuttle->interface transition video"); + + while (!_vm->shouldQuit() && !video->endOfVideo()) { + if (video->needsUpdate()) { + const Graphics::Surface *frame = video->decodeNextFrame(); + + if (frame) + _vm->drawScaledFrame(frame, 0, 0); + } + + Common::Event event; + while (g_system->getEventManager()->pollEvent(event)) + ; + + g_system->delayMillis(10); + } + + delete video; + + if (_vm->shouldQuit()) + return; + + reinstateMonocleInterface(); + + g_energyMonitor->stopEnergyDraining(); + g_energyMonitor->restoreLastEnergyValue(); + _vm->resetEnergyDeathReason(); + g_energyMonitor->startEnergyDraining(); + + arriveAt(kMarsRobotShuttle, kEast); + + _navMovie.stop(); + _navMovie.setTime(_navMovie.getStart()); + _navMovie.start(); +} + +const int kRobotTooStrong = 1; +const int kTractorTooWeak = 2; +const int kCapturedRobotShip = 3; + +void Mars::spaceChaseClick(const Input &input, const tHotSpotID id) { + Common::Point pt; + + switch (id) { + case kShuttleEnergySpotID: + _upperLeftShuttleMovie.setTime(kShuttleUpperLeftDampingTime); + _upperLeftShuttleMovie.redrawMovieWorld(); + _leftShuttleMovie.setTime(kShuttleLeftDampingTime); + _leftShuttleMovie.redrawMovieWorld(); + _shuttleHUD.hide(); + _weaponSelection = kEnergyBeam; + playSpotSoundSync(kShuttleDampingBeamIn, kShuttleDampingBeamOut); + break; + case kShuttleGravitonSpotID: + _upperLeftShuttleMovie.setTime(kShuttleUpperLeftGravitonTime); + _upperLeftShuttleMovie.redrawMovieWorld(); + _leftShuttleMovie.setTime(kShuttleLeftGravitonTime); + _leftShuttleMovie.redrawMovieWorld(); + _shuttleHUD.hide(); + _weaponSelection = kGravitonCannon; + playSpotSoundSync(kShuttleGravitonIn, kShuttleGravitonOut); + break; + case kShuttleTractorSpotID: + _upperLeftShuttleMovie.setTime(kShuttleUpperLeftTractorTime); + _upperLeftShuttleMovie.redrawMovieWorld(); + _leftShuttleMovie.setTime(kShuttleLeftTractorTime); + _leftShuttleMovie.redrawMovieWorld(); + _shuttleHUD.show(); + _weaponSelection = kTractorBeam; + playSpotSoundSync(kShuttleTractorBeamIn, kShuttleTractorBeamOut); + break; + case kShuttleViewSpotID: + switch (_weaponSelection) { + case kEnergyBeam: + if (_shuttleEnergyMeter.getEnergyValue() < kMinDampingEnergy) { + playSpotSoundSync(kShuttleEnergyTooLowIn, kShuttleEnergyTooLowOut); + } else { + if (_energyBeam.canFireWeapon()) { + _shuttleEnergyMeter.dropEnergyValue(kMinDampingEnergy); + input.getInputLocation(pt); + _energyBeam.fireWeapon(pt.x, pt.y); + playSpotSoundSync(kMarsEDBBlastIn, kMarsEDBBlastOut); + } + } + break; + case kGravitonCannon: + if (_shuttleEnergyMeter.getEnergyValue() < kMinGravitonEnergy) { + playSpotSoundSync(kShuttleEnergyTooLowIn, kShuttleEnergyTooLowOut); + } else { + if (_gravitonCannon.canFireWeapon()) { + _shuttleEnergyMeter.dropEnergyValue(kMinGravitonEnergy); + input.getInputLocation(pt); + _gravitonCannon.fireWeapon(pt.x, pt.y); + playSpotSoundSync(kMarsGravitonBlastIn, kMarsGravitonBlastOut); + } + } + break; + case kTractorBeam: + if (_shuttleHUD.isTargetLocked()) { + // play tractor beam sound? + _utilityFuse.stopFuse(); + + _tractorBeam.show(); + + int capture; + if (_rightDamageShuttleMovie.getTime() > 40) { + capture = kRobotTooStrong; + } else if (!_shuttleEnergyMeter.enoughEnergyForTractorBeam()) { + capture = kTractorTooWeak; + } else { + _robotShip.snareByTractorBeam(); + capture = kCapturedRobotShip; + _planetMover.dropPlanetOutOfSight(); + } + + _shuttleEnergyMeter.drainForTractorBeam(); + + while (_shuttleEnergyMeter.isFading()) { + _vm->checkCallBacks(); + _vm->refreshDisplay(); + _vm->_system->delayMillis(10); + } + + _shuttleEnergyMeter.setEnergyValue(_shuttleEnergyMeter.getEnergyValue()); + + switch (capture) { + case kRobotTooStrong: + _tractorBeam.hide(); + playSpotSoundSync(kShuttleBrokeFreeIn, kShuttleBrokeFreeOut); + _utilityFuse.lightFuse(); + break; + case kTractorTooWeak: + playSpotSoundSync(kShuttleCantHoldIn, kShuttleCantHoldOut); + _tractorBeam.hide(); + _utilityFuse.lightFuse(); + break; + case kCapturedRobotShip: + _tractorBeam.hide(); + _shuttleHUD.hide(); + _robotShip.cleanUpRobotShip(); + _planetMovie.stop(); + _planetMovie.stopDisplaying(); + _planetMovie.releaseMovie(); + + // Shameless reuse of a variable :P + initOneMovie(&_canyonChaseMovie, "Images/Mars/M98EAS.movie", kShuttleTractorBeamMovieOrder, + kShuttleWindowLeft, kShuttleWindowTop, true); + _canyonChaseMovie.redrawMovieWorld(); + playMovieSegment(&_canyonChaseMovie, 0, _canyonChaseMovie.getDuration()); + + // wait here until any junk clears... + while (_junk.junkFlying()) { + _vm->checkCallBacks(); + _vm->refreshDisplay(); + _vm->_system->delayMillis(10); + } + + _upperRightShuttleMovie.show(); + _upperRightShuttleMovie.setTime(kShuttleUpperRightOverloadTime); + _upperRightShuttleMovie.redrawMovieWorld(); + + playSpotSoundSync(kShuttleOverloadedIn, kShuttleOverloadedOut); + _centerShuttleMovie.setTime(kShuttleCenterVerifyingTime); + _centerShuttleMovie.redrawMovieWorld(); + + playSpotSoundSync(kShuttleCoordinatesIn, kShuttleCoordinatesOut); + _centerShuttleMovie.setTime(kShuttleCenterScanningTime); + _centerShuttleMovie.redrawMovieWorld(); + + playSpotSoundSync(kShuttleScanningIn, kShuttleScanningOut); + _centerShuttleMovie.setTime(kShuttleCenterSafeTime); + _centerShuttleMovie.redrawMovieWorld(); + + playSpotSoundSync(kShuttleSafeIn, kShuttleSafeOut); + _lowerRightShuttleMovie.setTime(kShuttleLowerRightTransportTime); + _lowerRightShuttleMovie.redrawMovieWorld(); + GameState.setMarsReadyForShuttleTransport(true); + break; + } + } else { + playSpotSoundSync(kShuttleTractorLimitedIn, kShuttleTractorLimitedOut); + } + break; + default: + break; + } + break; + case kShuttleTransportSpotID: + _lowerRightShuttleMovie.setTime(kShuttleLowerRightTransportHiliteTime); + _lowerRightShuttleMovie.redrawMovieWorld(); + _neighborhoodNotification.setNotificationFlags(kTimeToTransportFlag, kTimeToTransportFlag); + break; + } +} + void Mars::showBigExplosion(const Common::Rect &r, const tDisplayOrder order) { if (_explosions.isMovieValid()) { _explosions.setDisplayOrder(order); @@ -3351,6 +3258,8 @@ void Mars::showLittleExplosion(const Common::Rect &r, const tDisplayOrder order) void Mars::hitByJunk() { _leftDamageShuttleMovie.setTime(_leftDamageShuttleMovie.getTime() - 40); + _leftDamageShuttleMovie.redrawMovieWorld(); + playSpotSoundSync(kMarsJunkCollisionIn, kMarsJunkCollisionOut); if (_leftDamageShuttleMovie.getTime() == 0) { @@ -3363,8 +3272,10 @@ void Mars::hitByJunk() { t = _leftShuttleMovie.getTime(); _leftShuttleMovie.setTime(kShuttleLeftDamagedTime); + _leftShuttleMovie.redrawMovieWorld(); _vm->delayShell(1, 3); _leftShuttleMovie.setTime(t); + _leftShuttleMovie.redrawMovieWorld(); } } @@ -3404,6 +3315,17 @@ void Mars::decreaseRobotShuttleEnergy(const int delta, Common::Point impactPoint } } +void Mars::updateCursor(const Common::Point cursorLocation, const Hotspot *cursorSpot) { + if (cursorSpot && cursorSpot->getObjectID() == kShuttleViewSpotID) { + if (_weaponSelection != kNoWeapon) + _vm->_cursor->setCurrentFrameIndex(6); + else + _vm->_cursor->setCurrentFrameIndex(0); + } else { + Neighborhood::updateCursor(cursorLocation, cursorSpot); + } +} + tAirQuality Mars::getAirQuality(const tRoomID room) { if ((room >= kMars36 && room <= kMars39) || (room >= kMarsMaze004 && room <= kMarsMaze200)) return kAirQualityVacuum; diff --git a/engines/pegasus/neighborhood/mars/mars.h b/engines/pegasus/neighborhood/mars/mars.h index 8e199d1bc1..01474ab831 100755 --- a/engines/pegasus/neighborhood/mars/mars.h +++ b/engines/pegasus/neighborhood/mars/mars.h @@ -27,241 +27,19 @@ #define PEGASUS_NEIGHBORHOOD_MARS_MARS_H #include "pegasus/neighborhood/neighborhood.h" +#include "pegasus/neighborhood/mars/constants.h" +#include "pegasus/neighborhood/mars/energybeam.h" +#include "pegasus/neighborhood/mars/gravitoncannon.h" +#include "pegasus/neighborhood/mars/planetmover.h" #include "pegasus/neighborhood/mars/reactor.h" #include "pegasus/neighborhood/mars/robotship.h" #include "pegasus/neighborhood/mars/shuttleenergymeter.h" +#include "pegasus/neighborhood/mars/shuttlehud.h" +#include "pegasus/neighborhood/mars/spacejunk.h" +#include "pegasus/neighborhood/mars/tractorbeam.h" namespace Pegasus { -// Element Coordinates - -const tCoordType kUndoHiliteLeft = kNavAreaLeft + 140; -const tCoordType kUndoHiliteTop = kNavAreaTop + 36; - -const tCoordType kCurrentGuessLeft = kNavAreaLeft + 146; -const tCoordType kCurrentGuessTop = kNavAreaTop + 90; - -const tCoordType kReactorChoiceHiliteLeft = kNavAreaLeft + 116; -const tCoordType kReactorChoiceHiliteTop = kNavAreaTop + 158; - -const tCoordType kReactorHistoryLeft = kNavAreaLeft + 302; -const tCoordType kReactorHistoryTop = kNavAreaTop + 39; - -const tCoordType kAnswerLeft = kNavAreaLeft + 304; -const tCoordType kAnswerTop = kNavAreaTop + 180; - -const tCoordType kShuttle1Left = 0; -const tCoordType kShuttle1Top = 0; - -const tCoordType kShuttle2Left = 0; -const tCoordType kShuttle2Top = 96; - -const tCoordType kShuttle3Left = 500; -const tCoordType kShuttle3Top = 96; - -const tCoordType kShuttle4Left = 0; -const tCoordType kShuttle4Top = 320; - -const tCoordType kShuttleWindowLeft = 140; -const tCoordType kShuttleWindowTop = 96; -const tCoordType kShuttleWindowWidth = 360; -const tCoordType kShuttleWindowHeight = 224; - -const tCoordType kShuttleWindowMidH = (kShuttleWindowLeft * 2 + kShuttleWindowWidth) / 2; -const tCoordType kShuttleWindowMidV = (kShuttleWindowTop * 2 + kShuttleWindowHeight) / 2; - -const tCoordType kShuttleLeftLeft = 0; -const tCoordType kShuttleLeftTop = 128; - -const tCoordType kShuttleRightLeft = 506; -const tCoordType kShuttleRightTop = 128; - -const tCoordType kShuttleLowerLeftLeft = 74; -const tCoordType kShuttleLowerLeftTop = 358; - -const tCoordType kShuttleLowerRightLeft = 486; -const tCoordType kShuttleLowerRightTop = 354; - -const tCoordType kShuttleCenterLeft = 260; -const tCoordType kShuttleCenterTop = 336; - -const tCoordType kShuttleUpperLeftLeft = 30; -const tCoordType kShuttleUpperLeftTop = 32; - -const tCoordType kShuttleUpperRightLeft = 506; -const tCoordType kShuttleUpperRightTop = 52; - -const tCoordType kShuttleLeftEnergyLeft = 110; -const tCoordType kShuttleLeftEnergyTop = 186; - -const tCoordType kShuttleRightEnergyLeft = 510; -const tCoordType kShuttleRightEnergyTop = 186; - -const tCoordType kShuttleEnergyLeft = 186; -const tCoordType kShuttleEnergyTop = 60; -const tCoordType kShuttleEnergyWidth = 252; -const tCoordType kShuttleEnergyHeight = 22; - -const tCoordType kPlanetStartLeft = kShuttleWindowLeft; -const tCoordType kPlanetStartTop = kShuttleWindowTop + kShuttleWindowHeight; - -const tCoordType kPlanetStopLeft = kShuttleWindowLeft; -const tCoordType kPlanetStopTop = kShuttleWindowTop + kShuttleWindowHeight - 100; - -const tCoordType kShuttleTractorLeft = kShuttleWindowLeft + 6; -const tCoordType kShuttleTractorTop = kShuttleWindowTop + 56; -const tCoordType kShuttleTractorWidth = 348; -const tCoordType kShuttleTractorHeight = 112; - -const tCoordType kShuttleJunkLeft = kShuttleWindowLeft + 6; -const tCoordType kShuttleJunkTop = kShuttleWindowTop + 6; - -const tDisplayOrder kShuttlePlanetOrder = kInterfaceLayer; -const tDisplayOrder kShuttleAlienShipOrder = kShuttlePlanetOrder + 1; -const tDisplayOrder kShuttleRobotShipOrder = kShuttleAlienShipOrder + 1; -const tDisplayOrder kShuttleTractorBeamMovieOrder = kShuttleRobotShipOrder + 1; -const tDisplayOrder kShuttleWeaponBackOrder = kShuttleTractorBeamMovieOrder + 1; -const tDisplayOrder kShuttleJunkOrder = kShuttleWeaponBackOrder + 1; -const tDisplayOrder kShuttleWeaponFrontOrder = kShuttleJunkOrder + 1; -const tDisplayOrder kShuttleTractorBeamOrder = kShuttleWeaponFrontOrder + 1; -const tDisplayOrder kShuttleHUDOrder = kShuttleTractorBeamOrder + 1; -const tDisplayOrder kShuttleBackgroundOrder = kShuttleHUDOrder + 1; -const tDisplayOrder kShuttleMonitorOrder = kShuttleBackgroundOrder + 1; -const tDisplayOrder kShuttleStatusOrder = kShuttleMonitorOrder + 1; - -const TimeValue kShuttleSwingStart = 0; -const TimeValue kShuttleSwingStop = 5 * 600; - -const TimeValue kCanyonChaseStart = kShuttleSwingStop; -const TimeValue kCanyonChaseStop = 60 * 600 + 43 * 600 + 14 * 40; - -const TimeValue kLaunchTubeReachedTime = 60 * 600 + 38 * 600 - kCanyonChaseStart; -const TimeValue kCanyonChaseFinishedTime = kCanyonChaseStop - kCanyonChaseStart - - kLaunchTubeReachedTime; - -// Left shuttle. - -const TimeValue kShuttleLeftIntroStart = 0; -const TimeValue kShuttleLeftIntroStop = 400; - -const TimeValue kShuttleLeftBlankTime = 400; - -const TimeValue kShuttleLeftNormalTime = 440; - -const TimeValue kShuttleLeftAutoTestTime = 480; - -const TimeValue kShuttleLeftDamagedTime = 520; - -const TimeValue kShuttleLeftDampingTime = 560; - -const TimeValue kShuttleLeftGravitonTime = 600; - -const TimeValue kShuttleLeftTractorTime = 640; - -// Right shuttle. - -const TimeValue kShuttleRightIntroStart = 0; -const TimeValue kShuttleRightIntroStop = 400; - -const TimeValue kShuttleRightDestroyedStart = 400; -const TimeValue kShuttleRightDestroyedStop = 840; - -const TimeValue kShuttleRightBlankTime = 840; - -const TimeValue kShuttleRightNormalTime = 880; - -const TimeValue kShuttleRightDamagedTime = 920; - -const TimeValue kShuttleRightTargetLockTime = 960; - -const TimeValue kShuttleRightGravitonTime = 1000; - -const TimeValue kShuttleRightOverloadTime = 1040; - -// Lower Left shuttle. - -const TimeValue kShuttleLowerLeftCollisionTime = 0; - -const TimeValue kShuttleLowerLeftTubeTime = 40; - -const TimeValue kShuttleLowerLeftAutopilotTime = 80; - -// Lower Right shuttle. - -const TimeValue kShuttleLowerRightOffTime = 0; - -const TimeValue kShuttleLowerRightTrackingTime = 40; - -const TimeValue kShuttleLowerRightTransportTime = 80; - -const TimeValue kShuttleLowerRightTransportHiliteTime = 120; - -// Center shuttle. - -const TimeValue kShuttleCenterBoardingTime = 0; - -const TimeValue kShuttleCenterCheckTime = 40; - -const TimeValue kShuttleCenterNavCompTime = 80; - -const TimeValue kShuttleCenterCommTime = 120; - -const TimeValue kShuttleCenterWeaponsTime = 160; - -const TimeValue kShuttleCenterAllSystemsTime = 200; - -const TimeValue kShuttleCenterSecureLooseTime = 240; - -const TimeValue kShuttleCenterAutoTestTime = 280; - -const TimeValue kShuttleCenterLaunchTime = 320; - -const TimeValue kShuttleCenterEnterTubeTime = 360; - -const TimeValue kShuttleCenterTargetSightedTime = 400; - -const TimeValue kShuttleCenterVerifyingTime = 440; - -const TimeValue kShuttleCenterScanningTime = 480; - -const TimeValue kShuttleCenterSafeTime = 520; - -// Upper Left shuttle. - -const TimeValue kShuttleUpperLeftDimTime = 0; - -const TimeValue kShuttleUpperLeftDampingTime = 40; - -const TimeValue kShuttleUpperLeftGravitonTime = 80; - -const TimeValue kShuttleUpperLeftTractorTime = 120; - -// Upper Right shuttle. - -const TimeValue kShuttleUpperRightLockedTime = 0; - -const TimeValue kShuttleUpperRightArmedTime = 40; - -const TimeValue kShuttleUpperRightAlienDestroyedTime = 80; - -const TimeValue kShuttleUpperRightOverloadTime = 120; - -const TimeValue kShuttleUpperRightTargetDestroyedTime = 160; - -// Shuttle distance - -const int kShuttleDistance = 500; - -const int kJunkMaxDistance = kShuttleDistance; -const int kJunkMinDistance = 40; - -const int kEnergyBeamMaxDistance = kShuttleDistance; -const int kEnergyBeamMinDistance = 40; - -const int kGravitonMaxDistance = kShuttleDistance; -const int kGravitonMinDistance = 40; - - class InventoryItem; class Mars; @@ -283,16 +61,6 @@ enum ShuttleWeaponSelection { kTractorBeam }; -const tRoomID kMars0A = 0; -const tRoomID kMars31South = 33; -const tRoomID kMars34 = 37; -const tRoomID kMars35 = 38; -const tRoomID kMars39 = 42; -const tRoomID kMars49 = 51; -const tRoomID kMars60 = 58; -const tRoomID kMarsMaze004 = 60; -const tRoomID kMarsMaze200 = 224; - class Mars : public Neighborhood { friend void robotTimerExpiredFunction(FunctionPtr *, void *); friend void lockThawTimerExpiredFunction(FunctionPtr *, void *); @@ -336,8 +104,6 @@ public: bool inColorMatchingGame(); - // TODO: Space chase functions - protected: enum { kMarsPrivatePodStorageOpenFlag, @@ -414,8 +180,11 @@ protected: void startMarsTimer(TimeValue, TimeScale, MarsTimerCode); void marsTimerExpired(MarsTimerEvent &); void throwAwayMarsShuttle(); - - // TODO: Space chase functions + void startUpFromFinishedSpaceChase(); + void startUpFromSpaceChase(); + void transportToRobotShip(); + void spaceChaseClick(const Input &, const tHotSpotID); + void updateCursor(const Common::Point, const Hotspot *); Common::String getSoundSpotsName(); Common::String getNavMovieName(); @@ -450,11 +219,22 @@ protected: Movie _leftDamageShuttleMovie; Movie _rightDamageShuttleMovie; ShuttleEnergyMeter _shuttleEnergyMeter; + Movie _planetMovie; + PlanetMover _planetMover; RobotShip _robotShip; + ShuttleHUD _shuttleHUD; + TractorBeam _tractorBeam; + SpaceJunk _junk; + EnergyBeam _energyBeam; + GravitonCannon _gravitonCannon; + Hotspot _energyChoiceSpot; + Hotspot _gravitonChoiceSpot; + Hotspot _tractorChoiceSpot; + Hotspot _shuttleViewSpot; + Hotspot _shuttleTransportSpot; + ShuttleWeaponSelection _weaponSelection; ScalingMovie _explosions; NotificationCallBack _explosionCallBack; - - // TODO: Space chase variables }; } // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/planetmover.cpp b/engines/pegasus/neighborhood/mars/planetmover.cpp index 368c295e76..2fa8a771f5 100755 --- a/engines/pegasus/neighborhood/mars/planetmover.cpp +++ b/engines/pegasus/neighborhood/mars/planetmover.cpp @@ -25,9 +25,10 @@ #include "pegasus/movie.h" #include "pegasus/pegasus.h" +#include "pegasus/neighborhood/mars/constants.h" #include "pegasus/neighborhood/mars/hermite.h" -#include "pegasus/neighborhood/mars/mars.h" #include "pegasus/neighborhood/mars/planetmover.h" +#include "pegasus/neighborhood/mars/shuttleenergymeter.h" namespace Pegasus { diff --git a/engines/pegasus/neighborhood/mars/robotship.cpp b/engines/pegasus/neighborhood/mars/robotship.cpp index 279bdd8365..862a8b2edd 100755 --- a/engines/pegasus/neighborhood/mars/robotship.cpp +++ b/engines/pegasus/neighborhood/mars/robotship.cpp @@ -194,6 +194,7 @@ void RobotShip::moveRobotTo(tCoordType x, tCoordType y) { y = kNumSpriteRows * y / _shipRange.height(); _spritesMovie.setTime(40 * (x + y * kNumSpriteColumns)); + _spritesMovie.redrawMovieWorld(); } } diff --git a/engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp b/engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp index f16735d6a8..21bb1fb700 100755 --- a/engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp +++ b/engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp @@ -23,7 +23,7 @@ * */ -#include "pegasus/neighborhood/mars/mars.h" +#include "pegasus/neighborhood/mars/constants.h" #include "pegasus/neighborhood/mars/shuttleenergymeter.h" namespace Pegasus { diff --git a/engines/pegasus/neighborhood/mars/shuttlehud.cpp b/engines/pegasus/neighborhood/mars/shuttlehud.cpp index 71f5b1e2ac..dfdb3818cb 100755 --- a/engines/pegasus/neighborhood/mars/shuttlehud.cpp +++ b/engines/pegasus/neighborhood/mars/shuttlehud.cpp @@ -24,7 +24,7 @@ */ #include "pegasus/pegasus.h" -#include "pegasus/neighborhood/mars/mars.h" +#include "pegasus/neighborhood/mars/constants.h" #include "pegasus/neighborhood/mars/robotship.h" #include "pegasus/neighborhood/mars/shuttlehud.h" diff --git a/engines/pegasus/neighborhood/mars/shuttlehud.h b/engines/pegasus/neighborhood/mars/shuttlehud.h index 7cab9ed107..dc1c7598b5 100755 --- a/engines/pegasus/neighborhood/mars/shuttlehud.h +++ b/engines/pegasus/neighborhood/mars/shuttlehud.h @@ -34,7 +34,7 @@ namespace Pegasus { class ShuttleHUD : public DisplayElement, public Idler { public: ShuttleHUD(); - virtual ~ShuttleHUD(); + virtual ~ShuttleHUD() {} void showTargetGrid(); void hideTargetGrid(); diff --git a/engines/pegasus/neighborhood/mars/shuttleweapon.cpp b/engines/pegasus/neighborhood/mars/shuttleweapon.cpp index 799cca8bc0..14614d1c87 100755 --- a/engines/pegasus/neighborhood/mars/shuttleweapon.cpp +++ b/engines/pegasus/neighborhood/mars/shuttleweapon.cpp @@ -23,6 +23,8 @@ * */ +#include "pegasus/neighborhood/mars/constants.h" +#include "pegasus/neighborhood/mars/robotship.h" #include "pegasus/neighborhood/mars/shuttleweapon.h" #include "pegasus/neighborhood/mars/spacejunk.h" diff --git a/engines/pegasus/neighborhood/mars/shuttleweapon.h b/engines/pegasus/neighborhood/mars/shuttleweapon.h index b43dc92eb5..c62cee1acc 100755 --- a/engines/pegasus/neighborhood/mars/shuttleweapon.h +++ b/engines/pegasus/neighborhood/mars/shuttleweapon.h @@ -26,7 +26,7 @@ #ifndef PEGASUS_NEIGHBORHOOD_MARS_SHUTTLEWEAPON_H #define PEGASUS_NEIGHBORHOOD_MARS_SHUTTLEWEAPON_H -#include "pegasus/timers.h" +#include "pegasus/elements.h" #include "pegasus/neighborhood/mars/spacechase3d.h" namespace Pegasus { diff --git a/engines/pegasus/neighborhood/mars/spacechase3d.h b/engines/pegasus/neighborhood/mars/spacechase3d.h index 3f22ba68e4..1e145a1770 100755 --- a/engines/pegasus/neighborhood/mars/spacechase3d.h +++ b/engines/pegasus/neighborhood/mars/spacechase3d.h @@ -26,7 +26,7 @@ #ifndef PEGASUS_NEIGHBORHOOD_MARS_SPACECHASE3D_H #define PEGASUS_NEIGHBORHOOD_MARS_SPACECHASE3D_H -#include "pegasus/neighborhood/mars/mars.h" +#include "pegasus/neighborhood/mars/constants.h" namespace Pegasus { diff --git a/engines/pegasus/neighborhood/mars/spacejunk.cpp b/engines/pegasus/neighborhood/mars/spacejunk.cpp index 8c78db4050..8ae36cec0f 100755 --- a/engines/pegasus/neighborhood/mars/spacejunk.cpp +++ b/engines/pegasus/neighborhood/mars/spacejunk.cpp @@ -24,6 +24,7 @@ */ #include "pegasus/pegasus.h" +#include "pegasus/neighborhood/mars/mars.h" #include "pegasus/neighborhood/mars/spacejunk.h" namespace Pegasus { diff --git a/engines/pegasus/neighborhood/mars/spacejunk.h b/engines/pegasus/neighborhood/mars/spacejunk.h index d3315b0bd0..ba5aa753e0 100755 --- a/engines/pegasus/neighborhood/mars/spacejunk.h +++ b/engines/pegasus/neighborhood/mars/spacejunk.h @@ -26,6 +26,8 @@ #ifndef PEGASUS_NEIGHBORHOOD_MARS_SPACEJUNK_H #define PEGASUS_NEIGHBORHOOD_MARS_SPACEJUNK_H +#include "pegasus/movie.h" +#include "pegasus/neighborhood/mars/constants.h" #include "pegasus/neighborhood/mars/spacechase3d.h" namespace Pegasus { diff --git a/engines/pegasus/neighborhood/mars/tractorbeam.cpp b/engines/pegasus/neighborhood/mars/tractorbeam.cpp index 5c04b25b04..5ea63a0934 100755 --- a/engines/pegasus/neighborhood/mars/tractorbeam.cpp +++ b/engines/pegasus/neighborhood/mars/tractorbeam.cpp @@ -24,7 +24,7 @@ */ #include "pegasus/pegasus.h" -#include "pegasus/neighborhood/mars/mars.h" +#include "pegasus/neighborhood/mars/constants.h" #include "pegasus/neighborhood/mars/tractorbeam.h" namespace Pegasus { -- cgit v1.2.3 From 59f7d432d11f7527a01e04be09c8afaef3d1cb1d Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 28 Oct 2011 01:43:05 -0400 Subject: PEGASUS: Implement dirty rect erase code (as used by the space chase) --- engines/pegasus/neighborhood/mars/mars.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index 5c366383b4..a7816180fc 100755 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -2822,6 +2822,8 @@ void Mars::marsTimerExpired(MarsTimerEvent &event) { _canyonChaseMovie.stopDisplaying(); _canyonChaseMovie.releaseMovie(); + _vm->_gfx->enableErase(); + loadLoopSound1("Sounds/Mars/Space Ambient.22K.8.AIFF"); playSpotSoundSync(kShuttleConfiguringIn, kShuttleConfiguringOut); -- cgit v1.2.3 From 88360741bdcc8a5456dd719bac8678d9cbaddfe3 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 28 Oct 2011 11:19:27 -0400 Subject: PEGASUS: Fix the planet mover --- engines/pegasus/neighborhood/mars/planetmover.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/planetmover.cpp b/engines/pegasus/neighborhood/mars/planetmover.cpp index 2fa8a771f5..2b287547b5 100755 --- a/engines/pegasus/neighborhood/mars/planetmover.cpp +++ b/engines/pegasus/neighborhood/mars/planetmover.cpp @@ -76,10 +76,7 @@ void PlanetMover::newDestination() { _p1 = _p4; _r1 = _r4; - // Slightly worked differently than the original to work into our random number stuff - uint diff = ABS(kPlanetStopTop - kPlanetStartTop); - _p4 = kPlanetStopTop + (diff != 0) ? ((PegasusEngine *)g_engine)->getRandomNumber(diff - 1) : 0; - + _p4 = kPlanetStopTop + ((PegasusEngine *)g_engine)->getRandomNumber(kPlanetStartTop - kPlanetStopTop - 1); _r4 = ((PegasusEngine *)g_engine)->getRandomNumber(kMaxVelocity - 1); if (_r4 + _p4 < kPlanetStopTop) -- cgit v1.2.3 From 514d93622dd05bee743e565c5ad1dadd42af3c04 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 28 Oct 2011 11:31:05 -0400 Subject: PEGASUS: Fix RS232 draw call --- engines/pegasus/neighborhood/mars/shuttlehud.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/shuttlehud.cpp b/engines/pegasus/neighborhood/mars/shuttlehud.cpp index dfdb3818cb..8451260c3d 100755 --- a/engines/pegasus/neighborhood/mars/shuttlehud.cpp +++ b/engines/pegasus/neighborhood/mars/shuttlehud.cpp @@ -218,7 +218,7 @@ void ShuttleHUD::draw(const Common::Rect &) { } } - drawOneBitImageOr(screen, s_lockData, 4, Common::Rect(kHUDRS232Left, kHUDRS232Top, + drawOneBitImageOr(screen, s_RS232Data, 4, Common::Rect(kHUDRS232Left, kHUDRS232Top, kHUDRS232Left + 29, kHUDRS232Top + 8), _gridDarkGreen); if (_targetLocked) { -- cgit v1.2.3 From 020f3842478b6eaa67e2b8efbc16502db3fe4599 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 28 Oct 2011 11:45:00 -0400 Subject: PEGASUS: Fix pitch of one bit images in the shuttle HUD --- engines/pegasus/neighborhood/mars/shuttlehud.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/shuttlehud.cpp b/engines/pegasus/neighborhood/mars/shuttlehud.cpp index 8451260c3d..1850926ef3 100755 --- a/engines/pegasus/neighborhood/mars/shuttlehud.cpp +++ b/engines/pegasus/neighborhood/mars/shuttlehud.cpp @@ -218,14 +218,14 @@ void ShuttleHUD::draw(const Common::Rect &) { } } - drawOneBitImageOr(screen, s_RS232Data, 4, Common::Rect(kHUDRS232Left, kHUDRS232Top, + drawOneBitImageOr(screen, s_RS232Data, 2, Common::Rect(kHUDRS232Left, kHUDRS232Top, kHUDRS232Left + 29, kHUDRS232Top + 8), _gridDarkGreen); if (_targetLocked) { drawHUDLockArrows(0, _lockDarkGreen2); drawHUDLockArrows(12, _lockDarkGreen1); drawHUDLockArrows(24, _lightGreen); - drawOneBitImageOr(screen, s_lockData, 8, Common::Rect(kHUDLockLeft, kHUDLockTop + 115, + drawOneBitImageOr(screen, s_lockData, 4, Common::Rect(kHUDLockLeft, kHUDLockTop + 115, kHUDLockLeft + 52, kHUDLockTop + 115 + 9), _lightGreen); } } -- cgit v1.2.3 From 1ca6da46ad55a26dab7b8d9b8ad5d8e354f99097 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 28 Oct 2011 22:21:30 -0400 Subject: PEGASUS: Fix destroying the robot shuttle --- engines/pegasus/neighborhood/mars/mars.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index a7816180fc..3a9273e91e 100755 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -145,6 +145,9 @@ void Mars::init() { forceStridingStop(kMars08, kNorth, kAltMarsNormal); _neighborhoodNotification.notifyMe(this, kMarsNotificationFlags, kMarsNotificationFlags); + + _explosionCallBack.setNotification(&_neighborhoodNotification); + _explosionCallBack.setCallBackFlag(kExplosionFinishedFlag); } void Mars::flushGameState() { -- cgit v1.2.3 From bcf5ea1dc246b86a06ca9f1f97fa5525bd0a006b Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Sat, 29 Oct 2011 12:19:58 -0400 Subject: PEGASUS: Keep the space junk from flying beyond the screen boundary --- engines/pegasus/neighborhood/mars/spacejunk.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/spacejunk.cpp b/engines/pegasus/neighborhood/mars/spacejunk.cpp index 8ae36cec0f..a1f9bf7c37 100755 --- a/engines/pegasus/neighborhood/mars/spacejunk.cpp +++ b/engines/pegasus/neighborhood/mars/spacejunk.cpp @@ -82,7 +82,7 @@ void SpaceJunk::setCenter(const tCoordType centerX, const tCoordType centerY) { Common::Rect r; getBounds(r); - r.moveTo(centerX - (r.width() >> 1), centerY - (r.height() >> 1)); + r.moveTo(MAX(centerX - (r.width() >> 1), 0), MAX(centerY - (r.height() >> 1), 0)); setBounds(r); } @@ -170,7 +170,7 @@ void SpaceJunk::rebound(const TimeValue reboundTime) { _bounceStop.y = kMaxBounceSize / 2 + 1 + vm->getRandomNumber(kBounceTargetVRange - 1); break; } - + _bounceSizeStart = bounds.width(); _bounceSizeStop = MIN(_bounceSizeStart, kMaxBounceSize); -- cgit v1.2.3 From faa6018cad43c89c415397112e9fd7ca46fff5da Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Tue, 1 Nov 2011 20:38:22 -0400 Subject: PEGASUS: Just clip the junk from going off right or bottom too --- engines/pegasus/neighborhood/mars/spacejunk.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/spacejunk.cpp b/engines/pegasus/neighborhood/mars/spacejunk.cpp index a1f9bf7c37..a751dc2a71 100755 --- a/engines/pegasus/neighborhood/mars/spacejunk.cpp +++ b/engines/pegasus/neighborhood/mars/spacejunk.cpp @@ -82,7 +82,7 @@ void SpaceJunk::setCenter(const tCoordType centerX, const tCoordType centerY) { Common::Rect r; getBounds(r); - r.moveTo(MAX(centerX - (r.width() >> 1), 0), MAX(centerY - (r.height() >> 1), 0)); + r.moveTo(CLIP(centerX - (r.width() >> 1), 0, 640), CLIP(centerY - (r.height() >> 1), 0, 480)); setBounds(r); } -- cgit v1.2.3 From 12efb47b536d2f663c9cde2739a1fd40599da669 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 16 Dec 2011 14:17:50 -0500 Subject: PEGASUS: Remove t prefix from typedefs Some other minor cleanup too --- engines/pegasus/neighborhood/mars/constants.h | 1030 ++++++++++---------- engines/pegasus/neighborhood/mars/energybeam.cpp | 4 +- .../pegasus/neighborhood/mars/gravitoncannon.cpp | 8 +- engines/pegasus/neighborhood/mars/hermite.cpp | 8 +- engines/pegasus/neighborhood/mars/hermite.h | 4 +- engines/pegasus/neighborhood/mars/mars.cpp | 58 +- engines/pegasus/neighborhood/mars/mars.h | 36 +- engines/pegasus/neighborhood/mars/planetmover.cpp | 6 +- engines/pegasus/neighborhood/mars/planetmover.h | 2 +- engines/pegasus/neighborhood/mars/reactor.cpp | 72 +- engines/pegasus/neighborhood/mars/reactor.h | 6 +- engines/pegasus/neighborhood/mars/robotship.cpp | 28 +- engines/pegasus/neighborhood/mars/robotship.h | 8 +- engines/pegasus/neighborhood/mars/shuttlehud.cpp | 40 +- .../pegasus/neighborhood/mars/shuttleweapon.cpp | 2 +- engines/pegasus/neighborhood/mars/shuttleweapon.h | 2 +- engines/pegasus/neighborhood/mars/spacejunk.cpp | 16 +- engines/pegasus/neighborhood/mars/spacejunk.h | 12 +- 18 files changed, 671 insertions(+), 671 deletions(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/constants.h b/engines/pegasus/neighborhood/mars/constants.h index c96a8a1522..103518664c 100755 --- a/engines/pegasus/neighborhood/mars/constants.h +++ b/engines/pegasus/neighborhood/mars/constants.h @@ -32,99 +32,99 @@ namespace Pegasus { // Element Coordinates -const tCoordType kUndoHiliteLeft = kNavAreaLeft + 140; -const tCoordType kUndoHiliteTop = kNavAreaTop + 36; +const CoordType kUndoHiliteLeft = kNavAreaLeft + 140; +const CoordType kUndoHiliteTop = kNavAreaTop + 36; -const tCoordType kCurrentGuessLeft = kNavAreaLeft + 146; -const tCoordType kCurrentGuessTop = kNavAreaTop + 90; +const CoordType kCurrentGuessLeft = kNavAreaLeft + 146; +const CoordType kCurrentGuessTop = kNavAreaTop + 90; -const tCoordType kReactorChoiceHiliteLeft = kNavAreaLeft + 116; -const tCoordType kReactorChoiceHiliteTop = kNavAreaTop + 158; +const CoordType kReactorChoiceHiliteLeft = kNavAreaLeft + 116; +const CoordType kReactorChoiceHiliteTop = kNavAreaTop + 158; -const tCoordType kReactorHistoryLeft = kNavAreaLeft + 302; -const tCoordType kReactorHistoryTop = kNavAreaTop + 39; +const CoordType kReactorHistoryLeft = kNavAreaLeft + 302; +const CoordType kReactorHistoryTop = kNavAreaTop + 39; -const tCoordType kAnswerLeft = kNavAreaLeft + 304; -const tCoordType kAnswerTop = kNavAreaTop + 180; +const CoordType kAnswerLeft = kNavAreaLeft + 304; +const CoordType kAnswerTop = kNavAreaTop + 180; -const tCoordType kShuttle1Left = 0; -const tCoordType kShuttle1Top = 0; +const CoordType kShuttle1Left = 0; +const CoordType kShuttle1Top = 0; -const tCoordType kShuttle2Left = 0; -const tCoordType kShuttle2Top = 96; +const CoordType kShuttle2Left = 0; +const CoordType kShuttle2Top = 96; -const tCoordType kShuttle3Left = 500; -const tCoordType kShuttle3Top = 96; +const CoordType kShuttle3Left = 500; +const CoordType kShuttle3Top = 96; -const tCoordType kShuttle4Left = 0; -const tCoordType kShuttle4Top = 320; +const CoordType kShuttle4Left = 0; +const CoordType kShuttle4Top = 320; -const tCoordType kShuttleWindowLeft = 140; -const tCoordType kShuttleWindowTop = 96; -const tCoordType kShuttleWindowWidth = 360; -const tCoordType kShuttleWindowHeight = 224; +const CoordType kShuttleWindowLeft = 140; +const CoordType kShuttleWindowTop = 96; +const CoordType kShuttleWindowWidth = 360; +const CoordType kShuttleWindowHeight = 224; -const tCoordType kShuttleWindowMidH = (kShuttleWindowLeft * 2 + kShuttleWindowWidth) / 2; -const tCoordType kShuttleWindowMidV = (kShuttleWindowTop * 2 + kShuttleWindowHeight) / 2; +const CoordType kShuttleWindowMidH = (kShuttleWindowLeft * 2 + kShuttleWindowWidth) / 2; +const CoordType kShuttleWindowMidV = (kShuttleWindowTop * 2 + kShuttleWindowHeight) / 2; -const tCoordType kShuttleLeftLeft = 0; -const tCoordType kShuttleLeftTop = 128; +const CoordType kShuttleLeftLeft = 0; +const CoordType kShuttleLeftTop = 128; -const tCoordType kShuttleRightLeft = 506; -const tCoordType kShuttleRightTop = 128; +const CoordType kShuttleRightLeft = 506; +const CoordType kShuttleRightTop = 128; -const tCoordType kShuttleLowerLeftLeft = 74; -const tCoordType kShuttleLowerLeftTop = 358; +const CoordType kShuttleLowerLeftLeft = 74; +const CoordType kShuttleLowerLeftTop = 358; -const tCoordType kShuttleLowerRightLeft = 486; -const tCoordType kShuttleLowerRightTop = 354; +const CoordType kShuttleLowerRightLeft = 486; +const CoordType kShuttleLowerRightTop = 354; -const tCoordType kShuttleCenterLeft = 260; -const tCoordType kShuttleCenterTop = 336; +const CoordType kShuttleCenterLeft = 260; +const CoordType kShuttleCenterTop = 336; -const tCoordType kShuttleUpperLeftLeft = 30; -const tCoordType kShuttleUpperLeftTop = 32; +const CoordType kShuttleUpperLeftLeft = 30; +const CoordType kShuttleUpperLeftTop = 32; -const tCoordType kShuttleUpperRightLeft = 506; -const tCoordType kShuttleUpperRightTop = 52; +const CoordType kShuttleUpperRightLeft = 506; +const CoordType kShuttleUpperRightTop = 52; -const tCoordType kShuttleLeftEnergyLeft = 110; -const tCoordType kShuttleLeftEnergyTop = 186; +const CoordType kShuttleLeftEnergyLeft = 110; +const CoordType kShuttleLeftEnergyTop = 186; -const tCoordType kShuttleRightEnergyLeft = 510; -const tCoordType kShuttleRightEnergyTop = 186; +const CoordType kShuttleRightEnergyLeft = 510; +const CoordType kShuttleRightEnergyTop = 186; -const tCoordType kShuttleEnergyLeft = 186; -const tCoordType kShuttleEnergyTop = 60; -const tCoordType kShuttleEnergyWidth = 252; -const tCoordType kShuttleEnergyHeight = 22; +const CoordType kShuttleEnergyLeft = 186; +const CoordType kShuttleEnergyTop = 60; +const CoordType kShuttleEnergyWidth = 252; +const CoordType kShuttleEnergyHeight = 22; -const tCoordType kPlanetStartLeft = kShuttleWindowLeft; -const tCoordType kPlanetStartTop = kShuttleWindowTop + kShuttleWindowHeight; +const CoordType kPlanetStartLeft = kShuttleWindowLeft; +const CoordType kPlanetStartTop = kShuttleWindowTop + kShuttleWindowHeight; -const tCoordType kPlanetStopLeft = kShuttleWindowLeft; -const tCoordType kPlanetStopTop = kShuttleWindowTop + kShuttleWindowHeight - 100; +const CoordType kPlanetStopLeft = kShuttleWindowLeft; +const CoordType kPlanetStopTop = kShuttleWindowTop + kShuttleWindowHeight - 100; -const tCoordType kShuttleTractorLeft = kShuttleWindowLeft + 6; -const tCoordType kShuttleTractorTop = kShuttleWindowTop + 56; -const tCoordType kShuttleTractorWidth = 348; -const tCoordType kShuttleTractorHeight = 112; +const CoordType kShuttleTractorLeft = kShuttleWindowLeft + 6; +const CoordType kShuttleTractorTop = kShuttleWindowTop + 56; +const CoordType kShuttleTractorWidth = 348; +const CoordType kShuttleTractorHeight = 112; -const tCoordType kShuttleJunkLeft = kShuttleWindowLeft + 6; -const tCoordType kShuttleJunkTop = kShuttleWindowTop + 6; +const CoordType kShuttleJunkLeft = kShuttleWindowLeft + 6; +const CoordType kShuttleJunkTop = kShuttleWindowTop + 6; -const tDisplayOrder kShuttlePlanetOrder = kInterfaceLayer; -const tDisplayOrder kShuttleAlienShipOrder = kShuttlePlanetOrder + 1; -const tDisplayOrder kShuttleRobotShipOrder = kShuttleAlienShipOrder + 1; -const tDisplayOrder kShuttleTractorBeamMovieOrder = kShuttleRobotShipOrder + 1; -const tDisplayOrder kShuttleWeaponBackOrder = kShuttleTractorBeamMovieOrder + 1; -const tDisplayOrder kShuttleJunkOrder = kShuttleWeaponBackOrder + 1; -const tDisplayOrder kShuttleWeaponFrontOrder = kShuttleJunkOrder + 1; -const tDisplayOrder kShuttleTractorBeamOrder = kShuttleWeaponFrontOrder + 1; -const tDisplayOrder kShuttleHUDOrder = kShuttleTractorBeamOrder + 1; -const tDisplayOrder kShuttleBackgroundOrder = kShuttleHUDOrder + 1; -const tDisplayOrder kShuttleMonitorOrder = kShuttleBackgroundOrder + 1; -const tDisplayOrder kShuttleStatusOrder = kShuttleMonitorOrder + 1; +const DisplayOrder kShuttlePlanetOrder = kInterfaceLayer; +const DisplayOrder kShuttleAlienShipOrder = kShuttlePlanetOrder + 1; +const DisplayOrder kShuttleRobotShipOrder = kShuttleAlienShipOrder + 1; +const DisplayOrder kShuttleTractorBeamMovieOrder = kShuttleRobotShipOrder + 1; +const DisplayOrder kShuttleWeaponBackOrder = kShuttleTractorBeamMovieOrder + 1; +const DisplayOrder kShuttleJunkOrder = kShuttleWeaponBackOrder + 1; +const DisplayOrder kShuttleWeaponFrontOrder = kShuttleJunkOrder + 1; +const DisplayOrder kShuttleTractorBeamOrder = kShuttleWeaponFrontOrder + 1; +const DisplayOrder kShuttleHUDOrder = kShuttleTractorBeamOrder + 1; +const DisplayOrder kShuttleBackgroundOrder = kShuttleHUDOrder + 1; +const DisplayOrder kShuttleMonitorOrder = kShuttleBackgroundOrder + 1; +const DisplayOrder kShuttleStatusOrder = kShuttleMonitorOrder + 1; const TimeValue kShuttleSwingStart = 0; const TimeValue kShuttleSwingStop = 5 * 600; @@ -471,465 +471,465 @@ const TimeScale kMarsFrameDuration = 40; // Alternate IDs. -const tAlternateID kAltMarsNormal = 0; -const tAlternateID kAltMarsPodAtMars34 = 1; -const tAlternateID kAltMarsTookCard = 2; -const tAlternateID kAltMars35AirlockEast = 3; -const tAlternateID kAltMars35AirlockWest = 4; -const tAlternateID kAltMarsPodAtMars45 = 5; -const tAlternateID kAltMarsTookMask = 6; -const tAlternateID kAltMarsMaskOnFiller = 7; -const tAlternateID kAltMars60AirlockEast = 8; -const tAlternateID kAltMars60AirlockWest = 9; +const AlternateID kAltMarsNormal = 0; +const AlternateID kAltMarsPodAtMars34 = 1; +const AlternateID kAltMarsTookCard = 2; +const AlternateID kAltMars35AirlockEast = 3; +const AlternateID kAltMars35AirlockWest = 4; +const AlternateID kAltMarsPodAtMars45 = 5; +const AlternateID kAltMarsTookMask = 6; +const AlternateID kAltMarsMaskOnFiller = 7; +const AlternateID kAltMars60AirlockEast = 8; +const AlternateID kAltMars60AirlockWest = 9; // Room IDs. -const tRoomID kMars0A = 0; -const tRoomID kMars00 = 1; -const tRoomID kMars01 = 2; -const tRoomID kMars02 = 3; -const tRoomID kMars03 = 4; -const tRoomID kMars04 = 5; -const tRoomID kMars05 = 6; -const tRoomID kMars06 = 7; -const tRoomID kMars07 = 8; -const tRoomID kMars08 = 9; -const tRoomID kMars09 = 10; -const tRoomID kMars10 = 11; -const tRoomID kMars11 = 12; -const tRoomID kMars12 = 13; -const tRoomID kMars13 = 14; -const tRoomID kMars14 = 15; -const tRoomID kMars15 = 16; -const tRoomID kMars16 = 17; -const tRoomID kMars17 = 18; -const tRoomID kMars18 = 19; -const tRoomID kMars19 = 20; -const tRoomID kMars20 = 21; -const tRoomID kMars21 = 22; -const tRoomID kMars22 = 23; -const tRoomID kMars23 = 24; -const tRoomID kMars24 = 25; -const tRoomID kMars25 = 26; -const tRoomID kMars26 = 27; -const tRoomID kMars27 = 28; -const tRoomID kMars28 = 29; -const tRoomID kMars29 = 30; -const tRoomID kMars30 = 31; -const tRoomID kMars31 = 32; -const tRoomID kMars31South = 33; -const tRoomID kMars32 = 34; -const tRoomID kMars33 = 35; -const tRoomID kMars33North = 36; -const tRoomID kMars34 = 37; -const tRoomID kMars35 = 38; -const tRoomID kMars36 = 39; -const tRoomID kMars37 = 40; -const tRoomID kMars38 = 41; -const tRoomID kMars39 = 42; -const tRoomID kMars41 = 43; -const tRoomID kMars42 = 44; -const tRoomID kMars43 = 45; -const tRoomID kMars44 = 46; -const tRoomID kMars45 = 47; -const tRoomID kMars46 = 48; -const tRoomID kMars47 = 49; -const tRoomID kMars48 = 50; -const tRoomID kMars49 = 51; -const tRoomID kMars50 = 52; -const tRoomID kMars51 = 53; -const tRoomID kMars52 = 54; -const tRoomID kMars54 = 55; -const tRoomID kMars56 = 56; -const tRoomID kMars58 = 57; -const tRoomID kMars60 = 58; -const tRoomID kMarsRobotShuttle = 59; -const tRoomID kMarsMaze004 = 60; -const tRoomID kMarsMaze005 = 61; -const tRoomID kMarsMaze006 = 62; -const tRoomID kMarsMaze007 = 63; -const tRoomID kMarsMaze008 = 64; -const tRoomID kMarsMaze009 = 65; -const tRoomID kMarsMaze010 = 66; -const tRoomID kMarsMaze011 = 67; -const tRoomID kMarsMaze012 = 68; -const tRoomID kMarsMaze015 = 69; -const tRoomID kMarsMaze016 = 70; -const tRoomID kMarsMaze017 = 71; -const tRoomID kMarsMaze018 = 72; -const tRoomID kMarsMaze019 = 73; -const tRoomID kMarsMaze020 = 74; -const tRoomID kMarsMaze021 = 75; -const tRoomID kMarsMaze022 = 76; -const tRoomID kMarsMaze023 = 77; -const tRoomID kMarsMaze024 = 78; -const tRoomID kMarsMaze025 = 79; -const tRoomID kMarsMaze026 = 80; -const tRoomID kMarsMaze027 = 81; -const tRoomID kMarsMaze028 = 82; -const tRoomID kMarsMaze031 = 83; -const tRoomID kMarsMaze032 = 84; -const tRoomID kMarsMaze033 = 85; -const tRoomID kMarsMaze034 = 86; -const tRoomID kMarsMaze035 = 87; -const tRoomID kMarsMaze036 = 88; -const tRoomID kMarsMaze037 = 89; -const tRoomID kMarsMaze038 = 90; -const tRoomID kMarsMaze039 = 91; -const tRoomID kMarsMaze042 = 92; -const tRoomID kMarsMaze043 = 93; -const tRoomID kMarsMaze044 = 94; -const tRoomID kMarsMaze045 = 95; -const tRoomID kMarsMaze046 = 96; -const tRoomID kMarsMaze047 = 97; -const tRoomID kMarsMaze049 = 98; -const tRoomID kMarsMaze050 = 99; -const tRoomID kMarsMaze051 = 100; -const tRoomID kMarsMaze052 = 101; -const tRoomID kMarsMaze053 = 102; -const tRoomID kMarsMaze054 = 103; -const tRoomID kMarsMaze055 = 104; -const tRoomID kMarsMaze056 = 105; -const tRoomID kMarsMaze057 = 106; -const tRoomID kMarsMaze058 = 107; -const tRoomID kMarsMaze059 = 108; -const tRoomID kMarsMaze060 = 109; -const tRoomID kMarsMaze061 = 110; -const tRoomID kMarsMaze063 = 111; -const tRoomID kMarsMaze064 = 112; -const tRoomID kMarsMaze065 = 113; -const tRoomID kMarsMaze066 = 114; -const tRoomID kMarsMaze067 = 115; -const tRoomID kMarsMaze068 = 116; -const tRoomID kMarsMaze069 = 117; -const tRoomID kMarsMaze070 = 118; -const tRoomID kMarsMaze071 = 119; -const tRoomID kMarsMaze072 = 120; -const tRoomID kMarsMaze074 = 121; -const tRoomID kMarsMaze076 = 122; -const tRoomID kMarsMaze078 = 123; -const tRoomID kMarsMaze079 = 124; -const tRoomID kMarsMaze081 = 125; -const tRoomID kMarsMaze083 = 126; -const tRoomID kMarsMaze084 = 127; -const tRoomID kMarsMaze085 = 128; -const tRoomID kMarsMaze086 = 129; -const tRoomID kMarsMaze087 = 130; -const tRoomID kMarsMaze088 = 131; -const tRoomID kMarsMaze089 = 132; -const tRoomID kMarsMaze090 = 133; -const tRoomID kMarsMaze091 = 134; -const tRoomID kMarsMaze092 = 135; -const tRoomID kMarsMaze093 = 136; -const tRoomID kMarsMaze098 = 137; -const tRoomID kMarsMaze099 = 138; -const tRoomID kMarsMaze100 = 139; -const tRoomID kMarsMaze101 = 140; -const tRoomID kMarsMaze104 = 141; -const tRoomID kMarsMaze105 = 142; -const tRoomID kMarsMaze106 = 143; -const tRoomID kMarsMaze107 = 144; -const tRoomID kMarsMaze108 = 145; -const tRoomID kMarsMaze111 = 146; -const tRoomID kMarsMaze113 = 147; -const tRoomID kMarsMaze114 = 148; -const tRoomID kMarsMaze115 = 149; -const tRoomID kMarsMaze116 = 150; -const tRoomID kMarsMaze117 = 151; -const tRoomID kMarsMaze118 = 152; -const tRoomID kMarsMaze119 = 153; -const tRoomID kMarsMaze120 = 154; -const tRoomID kMarsMaze121 = 155; -const tRoomID kMarsMaze122 = 156; -const tRoomID kMarsMaze123 = 157; -const tRoomID kMarsMaze124 = 158; -const tRoomID kMarsMaze125 = 159; -const tRoomID kMarsMaze126 = 160; -const tRoomID kMarsMaze127 = 161; -const tRoomID kMarsMaze128 = 162; -const tRoomID kMarsMaze129 = 163; -const tRoomID kMarsMaze130 = 164; -const tRoomID kMarsMaze131 = 165; -const tRoomID kMarsMaze132 = 166; -const tRoomID kMarsMaze133 = 167; -const tRoomID kMarsMaze136 = 168; -const tRoomID kMarsMaze137 = 169; -const tRoomID kMarsMaze138 = 170; -const tRoomID kMarsMaze139 = 171; -const tRoomID kMarsMaze140 = 172; -const tRoomID kMarsMaze141 = 173; -const tRoomID kMarsMaze142 = 174; -const tRoomID kMarsMaze143 = 175; -const tRoomID kMarsMaze144 = 176; -const tRoomID kMarsMaze145 = 177; -const tRoomID kMarsMaze146 = 178; -const tRoomID kMarsMaze147 = 179; -const tRoomID kMarsMaze148 = 180; -const tRoomID kMarsMaze149 = 181; -const tRoomID kMarsMaze152 = 182; -const tRoomID kMarsMaze153 = 183; -const tRoomID kMarsMaze154 = 184; -const tRoomID kMarsMaze155 = 185; -const tRoomID kMarsMaze156 = 186; -const tRoomID kMarsMaze157 = 187; -const tRoomID kMarsMaze159 = 188; -const tRoomID kMarsMaze160 = 189; -const tRoomID kMarsMaze161 = 190; -const tRoomID kMarsMaze162 = 191; -const tRoomID kMarsMaze163 = 192; -const tRoomID kMarsMaze164 = 193; -const tRoomID kMarsMaze165 = 194; -const tRoomID kMarsMaze166 = 195; -const tRoomID kMarsMaze167 = 196; -const tRoomID kMarsMaze168 = 197; -const tRoomID kMarsMaze169 = 198; -const tRoomID kMarsMaze170 = 199; -const tRoomID kMarsMaze171 = 200; -const tRoomID kMarsMaze172 = 201; -const tRoomID kMarsMaze173 = 202; -const tRoomID kMarsMaze174 = 203; -const tRoomID kMarsMaze175 = 204; -const tRoomID kMarsMaze177 = 205; -const tRoomID kMarsMaze178 = 206; -const tRoomID kMarsMaze179 = 207; -const tRoomID kMarsMaze180 = 208; -const tRoomID kMarsMaze181 = 209; -const tRoomID kMarsMaze182 = 210; -const tRoomID kMarsMaze183 = 211; -const tRoomID kMarsMaze184 = 212; -const tRoomID kMarsMaze187 = 213; -const tRoomID kMarsMaze188 = 214; -const tRoomID kMarsMaze189 = 215; -const tRoomID kMarsMaze190 = 216; -const tRoomID kMarsMaze191 = 217; -const tRoomID kMarsMaze192 = 218; -const tRoomID kMarsMaze193 = 219; -const tRoomID kMarsMaze194 = 220; -const tRoomID kMarsMaze195 = 221; -const tRoomID kMarsMaze198 = 222; -const tRoomID kMarsMaze199 = 223; -const tRoomID kMarsMaze200 = 224; -const tRoomID kMarsDeathRoom = 225; +const RoomID kMars0A = 0; +const RoomID kMars00 = 1; +const RoomID kMars01 = 2; +const RoomID kMars02 = 3; +const RoomID kMars03 = 4; +const RoomID kMars04 = 5; +const RoomID kMars05 = 6; +const RoomID kMars06 = 7; +const RoomID kMars07 = 8; +const RoomID kMars08 = 9; +const RoomID kMars09 = 10; +const RoomID kMars10 = 11; +const RoomID kMars11 = 12; +const RoomID kMars12 = 13; +const RoomID kMars13 = 14; +const RoomID kMars14 = 15; +const RoomID kMars15 = 16; +const RoomID kMars16 = 17; +const RoomID kMars17 = 18; +const RoomID kMars18 = 19; +const RoomID kMars19 = 20; +const RoomID kMars20 = 21; +const RoomID kMars21 = 22; +const RoomID kMars22 = 23; +const RoomID kMars23 = 24; +const RoomID kMars24 = 25; +const RoomID kMars25 = 26; +const RoomID kMars26 = 27; +const RoomID kMars27 = 28; +const RoomID kMars28 = 29; +const RoomID kMars29 = 30; +const RoomID kMars30 = 31; +const RoomID kMars31 = 32; +const RoomID kMars31South = 33; +const RoomID kMars32 = 34; +const RoomID kMars33 = 35; +const RoomID kMars33North = 36; +const RoomID kMars34 = 37; +const RoomID kMars35 = 38; +const RoomID kMars36 = 39; +const RoomID kMars37 = 40; +const RoomID kMars38 = 41; +const RoomID kMars39 = 42; +const RoomID kMars41 = 43; +const RoomID kMars42 = 44; +const RoomID kMars43 = 45; +const RoomID kMars44 = 46; +const RoomID kMars45 = 47; +const RoomID kMars46 = 48; +const RoomID kMars47 = 49; +const RoomID kMars48 = 50; +const RoomID kMars49 = 51; +const RoomID kMars50 = 52; +const RoomID kMars51 = 53; +const RoomID kMars52 = 54; +const RoomID kMars54 = 55; +const RoomID kMars56 = 56; +const RoomID kMars58 = 57; +const RoomID kMars60 = 58; +const RoomID kMarsRobotShuttle = 59; +const RoomID kMarsMaze004 = 60; +const RoomID kMarsMaze005 = 61; +const RoomID kMarsMaze006 = 62; +const RoomID kMarsMaze007 = 63; +const RoomID kMarsMaze008 = 64; +const RoomID kMarsMaze009 = 65; +const RoomID kMarsMaze010 = 66; +const RoomID kMarsMaze011 = 67; +const RoomID kMarsMaze012 = 68; +const RoomID kMarsMaze015 = 69; +const RoomID kMarsMaze016 = 70; +const RoomID kMarsMaze017 = 71; +const RoomID kMarsMaze018 = 72; +const RoomID kMarsMaze019 = 73; +const RoomID kMarsMaze020 = 74; +const RoomID kMarsMaze021 = 75; +const RoomID kMarsMaze022 = 76; +const RoomID kMarsMaze023 = 77; +const RoomID kMarsMaze024 = 78; +const RoomID kMarsMaze025 = 79; +const RoomID kMarsMaze026 = 80; +const RoomID kMarsMaze027 = 81; +const RoomID kMarsMaze028 = 82; +const RoomID kMarsMaze031 = 83; +const RoomID kMarsMaze032 = 84; +const RoomID kMarsMaze033 = 85; +const RoomID kMarsMaze034 = 86; +const RoomID kMarsMaze035 = 87; +const RoomID kMarsMaze036 = 88; +const RoomID kMarsMaze037 = 89; +const RoomID kMarsMaze038 = 90; +const RoomID kMarsMaze039 = 91; +const RoomID kMarsMaze042 = 92; +const RoomID kMarsMaze043 = 93; +const RoomID kMarsMaze044 = 94; +const RoomID kMarsMaze045 = 95; +const RoomID kMarsMaze046 = 96; +const RoomID kMarsMaze047 = 97; +const RoomID kMarsMaze049 = 98; +const RoomID kMarsMaze050 = 99; +const RoomID kMarsMaze051 = 100; +const RoomID kMarsMaze052 = 101; +const RoomID kMarsMaze053 = 102; +const RoomID kMarsMaze054 = 103; +const RoomID kMarsMaze055 = 104; +const RoomID kMarsMaze056 = 105; +const RoomID kMarsMaze057 = 106; +const RoomID kMarsMaze058 = 107; +const RoomID kMarsMaze059 = 108; +const RoomID kMarsMaze060 = 109; +const RoomID kMarsMaze061 = 110; +const RoomID kMarsMaze063 = 111; +const RoomID kMarsMaze064 = 112; +const RoomID kMarsMaze065 = 113; +const RoomID kMarsMaze066 = 114; +const RoomID kMarsMaze067 = 115; +const RoomID kMarsMaze068 = 116; +const RoomID kMarsMaze069 = 117; +const RoomID kMarsMaze070 = 118; +const RoomID kMarsMaze071 = 119; +const RoomID kMarsMaze072 = 120; +const RoomID kMarsMaze074 = 121; +const RoomID kMarsMaze076 = 122; +const RoomID kMarsMaze078 = 123; +const RoomID kMarsMaze079 = 124; +const RoomID kMarsMaze081 = 125; +const RoomID kMarsMaze083 = 126; +const RoomID kMarsMaze084 = 127; +const RoomID kMarsMaze085 = 128; +const RoomID kMarsMaze086 = 129; +const RoomID kMarsMaze087 = 130; +const RoomID kMarsMaze088 = 131; +const RoomID kMarsMaze089 = 132; +const RoomID kMarsMaze090 = 133; +const RoomID kMarsMaze091 = 134; +const RoomID kMarsMaze092 = 135; +const RoomID kMarsMaze093 = 136; +const RoomID kMarsMaze098 = 137; +const RoomID kMarsMaze099 = 138; +const RoomID kMarsMaze100 = 139; +const RoomID kMarsMaze101 = 140; +const RoomID kMarsMaze104 = 141; +const RoomID kMarsMaze105 = 142; +const RoomID kMarsMaze106 = 143; +const RoomID kMarsMaze107 = 144; +const RoomID kMarsMaze108 = 145; +const RoomID kMarsMaze111 = 146; +const RoomID kMarsMaze113 = 147; +const RoomID kMarsMaze114 = 148; +const RoomID kMarsMaze115 = 149; +const RoomID kMarsMaze116 = 150; +const RoomID kMarsMaze117 = 151; +const RoomID kMarsMaze118 = 152; +const RoomID kMarsMaze119 = 153; +const RoomID kMarsMaze120 = 154; +const RoomID kMarsMaze121 = 155; +const RoomID kMarsMaze122 = 156; +const RoomID kMarsMaze123 = 157; +const RoomID kMarsMaze124 = 158; +const RoomID kMarsMaze125 = 159; +const RoomID kMarsMaze126 = 160; +const RoomID kMarsMaze127 = 161; +const RoomID kMarsMaze128 = 162; +const RoomID kMarsMaze129 = 163; +const RoomID kMarsMaze130 = 164; +const RoomID kMarsMaze131 = 165; +const RoomID kMarsMaze132 = 166; +const RoomID kMarsMaze133 = 167; +const RoomID kMarsMaze136 = 168; +const RoomID kMarsMaze137 = 169; +const RoomID kMarsMaze138 = 170; +const RoomID kMarsMaze139 = 171; +const RoomID kMarsMaze140 = 172; +const RoomID kMarsMaze141 = 173; +const RoomID kMarsMaze142 = 174; +const RoomID kMarsMaze143 = 175; +const RoomID kMarsMaze144 = 176; +const RoomID kMarsMaze145 = 177; +const RoomID kMarsMaze146 = 178; +const RoomID kMarsMaze147 = 179; +const RoomID kMarsMaze148 = 180; +const RoomID kMarsMaze149 = 181; +const RoomID kMarsMaze152 = 182; +const RoomID kMarsMaze153 = 183; +const RoomID kMarsMaze154 = 184; +const RoomID kMarsMaze155 = 185; +const RoomID kMarsMaze156 = 186; +const RoomID kMarsMaze157 = 187; +const RoomID kMarsMaze159 = 188; +const RoomID kMarsMaze160 = 189; +const RoomID kMarsMaze161 = 190; +const RoomID kMarsMaze162 = 191; +const RoomID kMarsMaze163 = 192; +const RoomID kMarsMaze164 = 193; +const RoomID kMarsMaze165 = 194; +const RoomID kMarsMaze166 = 195; +const RoomID kMarsMaze167 = 196; +const RoomID kMarsMaze168 = 197; +const RoomID kMarsMaze169 = 198; +const RoomID kMarsMaze170 = 199; +const RoomID kMarsMaze171 = 200; +const RoomID kMarsMaze172 = 201; +const RoomID kMarsMaze173 = 202; +const RoomID kMarsMaze174 = 203; +const RoomID kMarsMaze175 = 204; +const RoomID kMarsMaze177 = 205; +const RoomID kMarsMaze178 = 206; +const RoomID kMarsMaze179 = 207; +const RoomID kMarsMaze180 = 208; +const RoomID kMarsMaze181 = 209; +const RoomID kMarsMaze182 = 210; +const RoomID kMarsMaze183 = 211; +const RoomID kMarsMaze184 = 212; +const RoomID kMarsMaze187 = 213; +const RoomID kMarsMaze188 = 214; +const RoomID kMarsMaze189 = 215; +const RoomID kMarsMaze190 = 216; +const RoomID kMarsMaze191 = 217; +const RoomID kMarsMaze192 = 218; +const RoomID kMarsMaze193 = 219; +const RoomID kMarsMaze194 = 220; +const RoomID kMarsMaze195 = 221; +const RoomID kMarsMaze198 = 222; +const RoomID kMarsMaze199 = 223; +const RoomID kMarsMaze200 = 224; +const RoomID kMarsDeathRoom = 225; // Hot Spot Activation IDs. -const tHotSpotActivationID kActivationReadyForKiosk = 1; -const tHotSpotActivationID kActivationKioskChoice = 2; -const tHotSpotActivationID kActivationTunnelMapReady = 3; -const tHotSpotActivationID kActivateMarsPodClosed = 4; -const tHotSpotActivationID kActivateMarsPodOpen = 5; -const tHotSpotActivationID kActivateReadyToPressurizeAirlock = 6; -const tHotSpotActivationID kActivateAirlockPressurized = 7; -const tHotSpotActivationID kActivateMaskOnHolder = 8; -const tHotSpotActivationID kActivateMaskOnFiller = 9; -const tHotSpotActivationID kActivateReactorPlatformOut = 10; -const tHotSpotActivationID kActivateReactorPlatformIn = 11; -const tHotSpotActivationID kActivateReactorAskLowerScreen = 12; -const tHotSpotActivationID kActivateReactorReadyForNitrogen = 13; -const tHotSpotActivationID kActivateReactorReadyForCrowBar = 14; -const tHotSpotActivationID kActivateReactorAskOperation = 15; -const tHotSpotActivationID kActivateReactorRanEvaluation = 16; -const tHotSpotActivationID kActivateReactorRanDiagnostics = 17; -const tHotSpotActivationID kActivateReactorAnalyzed = 18; -const tHotSpotActivationID kActivateReactorInstructions = 19; -const tHotSpotActivationID kActivateReactorInGame = 20; -const tHotSpotActivationID kActivateReactorBombSafe = 21; -const tHotSpotActivationID kActivateReactorBombExposed = 22; -const tHotSpotActivationID kActivationRobotHeadClosed = 23; -const tHotSpotActivationID kActivationRobotHeadOpen = 24; +const HotSpotActivationID kActivationReadyForKiosk = 1; +const HotSpotActivationID kActivationKioskChoice = 2; +const HotSpotActivationID kActivationTunnelMapReady = 3; +const HotSpotActivationID kActivateMarsPodClosed = 4; +const HotSpotActivationID kActivateMarsPodOpen = 5; +const HotSpotActivationID kActivateReadyToPressurizeAirlock = 6; +const HotSpotActivationID kActivateAirlockPressurized = 7; +const HotSpotActivationID kActivateMaskOnHolder = 8; +const HotSpotActivationID kActivateMaskOnFiller = 9; +const HotSpotActivationID kActivateReactorPlatformOut = 10; +const HotSpotActivationID kActivateReactorPlatformIn = 11; +const HotSpotActivationID kActivateReactorAskLowerScreen = 12; +const HotSpotActivationID kActivateReactorReadyForNitrogen = 13; +const HotSpotActivationID kActivateReactorReadyForCrowBar = 14; +const HotSpotActivationID kActivateReactorAskOperation = 15; +const HotSpotActivationID kActivateReactorRanEvaluation = 16; +const HotSpotActivationID kActivateReactorRanDiagnostics = 17; +const HotSpotActivationID kActivateReactorAnalyzed = 18; +const HotSpotActivationID kActivateReactorInstructions = 19; +const HotSpotActivationID kActivateReactorInGame = 20; +const HotSpotActivationID kActivateReactorBombSafe = 21; +const HotSpotActivationID kActivateReactorBombExposed = 22; +const HotSpotActivationID kActivationRobotHeadClosed = 23; +const HotSpotActivationID kActivationRobotHeadOpen = 24; // Hot Spot IDs. -const tHotSpotID kMars11NorthKioskSpotID = 5000; -const tHotSpotID kMars11NorthKioskSightsSpotID = 5001; -const tHotSpotID kMars11NorthKioskColonySpotID = 5002; -const tHotSpotID kMars12NorthKioskSpotID = 5003; -const tHotSpotID kMars12NorthKioskSightsSpotID = 5004; -const tHotSpotID kMars12NorthKioskColonySpotID = 5005; -const tHotSpotID kMars31SouthSpotID = 5006; -const tHotSpotID kMars31SouthOutSpotID = 5007; -const tHotSpotID kMars31SouthCardSpotID = 5008; -const tHotSpotID kMars33NorthSpotID = 5009; -const tHotSpotID kMars33NorthOutSpotID = 5010; -const tHotSpotID kMars33NorthMonitorSpotID = 5011; -const tHotSpotID kMars34NorthCardDropSpotID = 5012; -const tHotSpotID kMars34SouthOpenStorageSpotID = 5013; -const tHotSpotID kMars34SouthCloseStorageSpotID = 5014; -const tHotSpotID kMars34SouthCrowbarSpotID = 5015; -const tHotSpotID kMars35EastPressurizeSpotID = 5016; -const tHotSpotID kMars35EastSpinSpotID = 5017; -const tHotSpotID kMars35WestPressurizeSpotID = 5018; -const tHotSpotID kMars35WestSpinSpotID = 5019; -const tHotSpotID kMars45NorthOpenStorageSpotID = 5020; -const tHotSpotID kMars45NorthCloseStorageSpotID = 5021; -const tHotSpotID kMars45NorthCrowbarSpotID = 5022; -const tHotSpotID kAttackRobotHotSpotID = 5023; -const tHotSpotID kMars49AirMaskSpotID = 5024; -const tHotSpotID kMars49AirMaskFilledSpotID = 5025; -const tHotSpotID kMars49AirFillingDropSpotID = 5026; -const tHotSpotID kMars52MoveLeftSpotID = 5027; -const tHotSpotID kMars52MoveRightSpotID = 5028; -const tHotSpotID kMars52ExtractSpotID = 5029; -const tHotSpotID kMars53RetractSpotID = 5030; -const tHotSpotID kMars54MoveLeftSpotID = 5031; -const tHotSpotID kMars54MoveRightSpotID = 5032; -const tHotSpotID kMars54ExtractSpotID = 5033; -const tHotSpotID kMars55RetractSpotID = 5034; -const tHotSpotID kMars56MoveLeftSpotID = 5035; -const tHotSpotID kMars56MoveRightSpotID = 5036; -const tHotSpotID kMars56ExtractSpotID = 5037; -const tHotSpotID kMars57RetractSpotID = 5038; -const tHotSpotID kMars57LowerScreenSpotID = 5039; -const tHotSpotID kMars57Retract2SpotID = 5040; -const tHotSpotID kMars57DropNitrogenSpotID = 5041; -const tHotSpotID kMars57DropCrowBarSpotID = 5042; -const tHotSpotID kMars57CantOpenPanelSpotID = 5043; -const tHotSpotID kMars57ShieldEvaluationSpotID = 5044; -const tHotSpotID kMars57MeasureOutputSpotID = 5045; -const tHotSpotID kMars57RunDiagnosticsSpotID = 5046; -const tHotSpotID kMars57BackToOperationMenuSpotID = 5047; -const tHotSpotID kMars57AnalyzeObjectSpotID = 5048; -const tHotSpotID kMars57RemoveObjectMenuSpotID = 5049; -const tHotSpotID kMars57CircuitLinkSpotID = 5050; -const tHotSpotID kMars57CancelCircuitLinkSpotID = 5051; -const tHotSpotID kMars57GameInstructionsSpotID = 5052; -const tHotSpotID kMars57UndoMoveSpotID = 5053; -const tHotSpotID kMars57RedMoveSpotID = 5054; -const tHotSpotID kMars57YellowMoveSpotID = 5055; -const tHotSpotID kMars57GreenMoveSpotID = 5056; -const tHotSpotID kMars57BlueMoveSpotID = 5057; -const tHotSpotID kMars57PurpleMoveSpotID = 5058; -const tHotSpotID kMars57LowerScreenSafelySpotID = 5059; -const tHotSpotID kMars57GrabBombSpotID = 5060; -const tHotSpotID kMars58MoveLeftSpotID = 5061; -const tHotSpotID kMars58MoveRightSpotID = 5062; -const tHotSpotID kMars58ExtractSpotID = 5063; -const tHotSpotID kMars59RetractSpotID = 5064; -const tHotSpotID kMars60EastPressurizeSpotID = 5065; -const tHotSpotID kMars60EastSpinSpotID = 5066; -const tHotSpotID kMars60WestPressurizeSpotID = 5067; -const tHotSpotID kMars60WestSpinSpotID = 5068; -const tHotSpotID kRobotShuttleOpenHeadSpotID = 5069; -const tHotSpotID kRobotShuttleMapChipSpotID = 5070; -const tHotSpotID kRobotShuttleOpticalChipSpotID = 5071; -const tHotSpotID kRobotShuttleShieldChipSpotID = 5072; +const HotSpotID kMars11NorthKioskSpotID = 5000; +const HotSpotID kMars11NorthKioskSightsSpotID = 5001; +const HotSpotID kMars11NorthKioskColonySpotID = 5002; +const HotSpotID kMars12NorthKioskSpotID = 5003; +const HotSpotID kMars12NorthKioskSightsSpotID = 5004; +const HotSpotID kMars12NorthKioskColonySpotID = 5005; +const HotSpotID kMars31SouthSpotID = 5006; +const HotSpotID kMars31SouthOutSpotID = 5007; +const HotSpotID kMars31SouthCardSpotID = 5008; +const HotSpotID kMars33NorthSpotID = 5009; +const HotSpotID kMars33NorthOutSpotID = 5010; +const HotSpotID kMars33NorthMonitorSpotID = 5011; +const HotSpotID kMars34NorthCardDropSpotID = 5012; +const HotSpotID kMars34SouthOpenStorageSpotID = 5013; +const HotSpotID kMars34SouthCloseStorageSpotID = 5014; +const HotSpotID kMars34SouthCrowbarSpotID = 5015; +const HotSpotID kMars35EastPressurizeSpotID = 5016; +const HotSpotID kMars35EastSpinSpotID = 5017; +const HotSpotID kMars35WestPressurizeSpotID = 5018; +const HotSpotID kMars35WestSpinSpotID = 5019; +const HotSpotID kMars45NorthOpenStorageSpotID = 5020; +const HotSpotID kMars45NorthCloseStorageSpotID = 5021; +const HotSpotID kMars45NorthCrowbarSpotID = 5022; +const HotSpotID kAttackRobotHotSpotID = 5023; +const HotSpotID kMars49AirMaskSpotID = 5024; +const HotSpotID kMars49AirMaskFilledSpotID = 5025; +const HotSpotID kMars49AirFillingDropSpotID = 5026; +const HotSpotID kMars52MoveLeftSpotID = 5027; +const HotSpotID kMars52MoveRightSpotID = 5028; +const HotSpotID kMars52ExtractSpotID = 5029; +const HotSpotID kMars53RetractSpotID = 5030; +const HotSpotID kMars54MoveLeftSpotID = 5031; +const HotSpotID kMars54MoveRightSpotID = 5032; +const HotSpotID kMars54ExtractSpotID = 5033; +const HotSpotID kMars55RetractSpotID = 5034; +const HotSpotID kMars56MoveLeftSpotID = 5035; +const HotSpotID kMars56MoveRightSpotID = 5036; +const HotSpotID kMars56ExtractSpotID = 5037; +const HotSpotID kMars57RetractSpotID = 5038; +const HotSpotID kMars57LowerScreenSpotID = 5039; +const HotSpotID kMars57Retract2SpotID = 5040; +const HotSpotID kMars57DropNitrogenSpotID = 5041; +const HotSpotID kMars57DropCrowBarSpotID = 5042; +const HotSpotID kMars57CantOpenPanelSpotID = 5043; +const HotSpotID kMars57ShieldEvaluationSpotID = 5044; +const HotSpotID kMars57MeasureOutputSpotID = 5045; +const HotSpotID kMars57RunDiagnosticsSpotID = 5046; +const HotSpotID kMars57BackToOperationMenuSpotID = 5047; +const HotSpotID kMars57AnalyzeObjectSpotID = 5048; +const HotSpotID kMars57RemoveObjectMenuSpotID = 5049; +const HotSpotID kMars57CircuitLinkSpotID = 5050; +const HotSpotID kMars57CancelCircuitLinkSpotID = 5051; +const HotSpotID kMars57GameInstructionsSpotID = 5052; +const HotSpotID kMars57UndoMoveSpotID = 5053; +const HotSpotID kMars57RedMoveSpotID = 5054; +const HotSpotID kMars57YellowMoveSpotID = 5055; +const HotSpotID kMars57GreenMoveSpotID = 5056; +const HotSpotID kMars57BlueMoveSpotID = 5057; +const HotSpotID kMars57PurpleMoveSpotID = 5058; +const HotSpotID kMars57LowerScreenSafelySpotID = 5059; +const HotSpotID kMars57GrabBombSpotID = 5060; +const HotSpotID kMars58MoveLeftSpotID = 5061; +const HotSpotID kMars58MoveRightSpotID = 5062; +const HotSpotID kMars58ExtractSpotID = 5063; +const HotSpotID kMars59RetractSpotID = 5064; +const HotSpotID kMars60EastPressurizeSpotID = 5065; +const HotSpotID kMars60EastSpinSpotID = 5066; +const HotSpotID kMars60WestPressurizeSpotID = 5067; +const HotSpotID kMars60WestSpinSpotID = 5068; +const HotSpotID kRobotShuttleOpenHeadSpotID = 5069; +const HotSpotID kRobotShuttleMapChipSpotID = 5070; +const HotSpotID kRobotShuttleOpticalChipSpotID = 5071; +const HotSpotID kRobotShuttleShieldChipSpotID = 5072; // Extra sequence IDs. -const tExtraID kMarsArrivalFromTSA = 0; -const tExtraID kMars0AWatchShuttleDepart = 1; -const tExtraID kRobotThrowsPlayer = 2; -const tExtraID kMarsInfoKioskIntro = 3; -const tExtraID kMarsColonyInfo = 4; -const tExtraID kMarsSightsInfo = 5; -const tExtraID kRobotOnWayToShuttle = 6; -const tExtraID kMars31SouthZoomInNoCard = 7; -const tExtraID kMars31SouthViewNoCard = 8; -const tExtraID kMars31SouthZoomOutNoCard = 9; -const tExtraID kMars31SouthZoomViewNoCard = 10; -const tExtraID kMars33SlideShow1 = 11; -const tExtraID kMars33SlideShow2 = 12; -const tExtraID kMars33SlideShow3 = 13; -const tExtraID kMars33SlideShow4 = 14; -const tExtraID kMars34SpotOpenWithBar = 15; -const tExtraID kMars34SpotCloseWithBar = 16; -const tExtraID kMars34SpotOpenNoBar = 17; -const tExtraID kMars34SpotCloseNoBar = 18; -const tExtraID kMars34ViewOpenWithBar = 19; -const tExtraID kMars34ViewOpenNoBar = 20; -const tExtraID kMars34NorthPodGreeting = 21; -const tExtraID kMarsTurnOnPod = 22; -const tExtraID kMarsTakePodToMars45 = 23; -const tExtraID kMars35WestSpinAirlockToEast = 24; -const tExtraID kMars35EastSpinAirlockToWest = 25; -const tExtraID kMars45SpotOpenWithBar = 26; -const tExtraID kMars45SpotCloseWithBar = 27; -const tExtraID kMars45SpotOpenNoBar = 28; -const tExtraID kMars45SpotCloseNoBar = 29; -const tExtraID kMars45ViewOpenWithBar = 30; -const tExtraID kMars45ViewOpenNoBar = 31; -const tExtraID kMars48RobotApproaches = 32; -const tExtraID kMars48RobotKillsPlayer = 33; -const tExtraID kMars48RobotLoops = 34; -const tExtraID kMars48RobotView = 35; -const tExtraID kMars48RobotDefends = 36; -const tExtraID kMars49SouthViewMaskFilling = 37; -const tExtraID kMars52SpinLeft = 38; -const tExtraID kMars52SpinRight = 39; -const tExtraID kMars52Extend = 40; -const tExtraID kMars53Retract = 41; -const tExtraID kMars54SpinLeft = 42; -const tExtraID kMars54SpinRight = 43; -const tExtraID kMars54Extend = 44; -const tExtraID kMars55Retract = 45; -const tExtraID kMars56SpinLeft = 46; -const tExtraID kMars56SpinRight = 47; -const tExtraID kMars56ExtendWithBomb = 48; -const tExtraID kMars56ExtendNoBomb = 49; -const tExtraID kMars57RetractWithBomb = 50; -const tExtraID kMars57RetractNoBomb = 51; -const tExtraID kMars57LowerScreenClosed = 52; -const tExtraID kMars57CantOpenPanel = 53; -const tExtraID kMars57FreezeLock = 54; -const tExtraID kMars57BreakLock = 55; -const tExtraID kMars57LockFrozenView = 56; -const tExtraID kMars57ThawLock = 57; -const tExtraID kMars57OpenPanel = 58; -const tExtraID kMars57OpenPanelChoices = 59; -const tExtraID kMars57ShieldEvaluation = 60; -const tExtraID kMars57MeasureOutput = 61; -const tExtraID kMars57ShieldOkayLoop = 62; -const tExtraID kMars57RunDiagnostics = 63; -const tExtraID kMars57BombExplodes = 64; -const tExtraID kMars57BombAnalysis = 65; -const tExtraID kMars57DontLink = 66; -const tExtraID kMars57CircuitLink = 67; -const tExtraID kMars57GameLevel1 = 68; -const tExtraID kMars57GameLevel2 = 69; -const tExtraID kMars57GameLevel3 = 70; -const tExtraID kMars57BombExplodesInGame = 71; -const tExtraID kMars57GameSolved = 72; -const tExtraID kMars57ExposeBomb = 73; -const tExtraID kMars57BackToNormal = 74; -const tExtraID kMars57ViewOpenNoBomb = 75; -const tExtraID kMars58SpinLeft = 76; -const tExtraID kMars58SpinRight = 77; -const tExtraID kMars58Extend = 78; -const tExtraID kMars59Retract = 79; -const tExtraID kMars60WestSpinAirlockToEast = 80; -const tExtraID kMars60EastSpinAirlockToWest = 81; -const tExtraID kMarsRobotHeadOpen = 82; -const tExtraID kMarsRobotHeadClose = 83; -const tExtraID kMarsRobotHead000 = 84; -const tExtraID kMarsRobotHead001 = 85; -const tExtraID kMarsRobotHead010 = 86; -const tExtraID kMarsRobotHead011 = 87; -const tExtraID kMarsRobotHead100 = 88; -const tExtraID kMarsRobotHead101 = 89; -const tExtraID kMarsRobotHead110 = 90; -const tExtraID kMarsRobotHead111 = 91; -const tExtraID kMarsMaze007RobotApproach = 92; -const tExtraID kMarsMaze007RobotLoop = 93; -const tExtraID kMarsMaze007RobotDeath = 94; -const tExtraID kMarsMaze015SouthRobotApproach = 95; -const tExtraID kMarsMaze015SouthRobotLoop = 96; -const tExtraID kMarsMaze015SouthRobotDeath = 97; -const tExtraID kMarsMaze101EastRobotApproach = 98; -const tExtraID kMarsMaze101EastRobotLoop = 99; -const tExtraID kMarsMaze101EastRobotDeath = 100; -const tExtraID kMarsMaze104WestLoop = 101; -const tExtraID kMarsMaze104WestDeath = 102; -const tExtraID kMarsMaze133SouthApproach = 103; -const tExtraID kMarsMaze133SouthLoop = 104; -const tExtraID kMarsMaze133SouthDeath = 105; -const tExtraID kMarsMaze136NorthApproach = 106; -const tExtraID kMarsMaze136NorthLoop = 107; -const tExtraID kMarsMaze136NorthDeath = 108; -const tExtraID kMarsMaze184WestLoop = 109; -const tExtraID kMarsMaze184WestDeath = 110; -const tExtraID kMars200DeathInBucket = 111; - -const tResIDType kReactorUndoHilitePICTID = 900; +const ExtraID kMarsArrivalFromTSA = 0; +const ExtraID kMars0AWatchShuttleDepart = 1; +const ExtraID kRobotThrowsPlayer = 2; +const ExtraID kMarsInfoKioskIntro = 3; +const ExtraID kMarsColonyInfo = 4; +const ExtraID kMarsSightsInfo = 5; +const ExtraID kRobotOnWayToShuttle = 6; +const ExtraID kMars31SouthZoomInNoCard = 7; +const ExtraID kMars31SouthViewNoCard = 8; +const ExtraID kMars31SouthZoomOutNoCard = 9; +const ExtraID kMars31SouthZoomViewNoCard = 10; +const ExtraID kMars33SlideShow1 = 11; +const ExtraID kMars33SlideShow2 = 12; +const ExtraID kMars33SlideShow3 = 13; +const ExtraID kMars33SlideShow4 = 14; +const ExtraID kMars34SpotOpenWithBar = 15; +const ExtraID kMars34SpotCloseWithBar = 16; +const ExtraID kMars34SpotOpenNoBar = 17; +const ExtraID kMars34SpotCloseNoBar = 18; +const ExtraID kMars34ViewOpenWithBar = 19; +const ExtraID kMars34ViewOpenNoBar = 20; +const ExtraID kMars34NorthPodGreeting = 21; +const ExtraID kMarsTurnOnPod = 22; +const ExtraID kMarsTakePodToMars45 = 23; +const ExtraID kMars35WestSpinAirlockToEast = 24; +const ExtraID kMars35EastSpinAirlockToWest = 25; +const ExtraID kMars45SpotOpenWithBar = 26; +const ExtraID kMars45SpotCloseWithBar = 27; +const ExtraID kMars45SpotOpenNoBar = 28; +const ExtraID kMars45SpotCloseNoBar = 29; +const ExtraID kMars45ViewOpenWithBar = 30; +const ExtraID kMars45ViewOpenNoBar = 31; +const ExtraID kMars48RobotApproaches = 32; +const ExtraID kMars48RobotKillsPlayer = 33; +const ExtraID kMars48RobotLoops = 34; +const ExtraID kMars48RobotView = 35; +const ExtraID kMars48RobotDefends = 36; +const ExtraID kMars49SouthViewMaskFilling = 37; +const ExtraID kMars52SpinLeft = 38; +const ExtraID kMars52SpinRight = 39; +const ExtraID kMars52Extend = 40; +const ExtraID kMars53Retract = 41; +const ExtraID kMars54SpinLeft = 42; +const ExtraID kMars54SpinRight = 43; +const ExtraID kMars54Extend = 44; +const ExtraID kMars55Retract = 45; +const ExtraID kMars56SpinLeft = 46; +const ExtraID kMars56SpinRight = 47; +const ExtraID kMars56ExtendWithBomb = 48; +const ExtraID kMars56ExtendNoBomb = 49; +const ExtraID kMars57RetractWithBomb = 50; +const ExtraID kMars57RetractNoBomb = 51; +const ExtraID kMars57LowerScreenClosed = 52; +const ExtraID kMars57CantOpenPanel = 53; +const ExtraID kMars57FreezeLock = 54; +const ExtraID kMars57BreakLock = 55; +const ExtraID kMars57LockFrozenView = 56; +const ExtraID kMars57ThawLock = 57; +const ExtraID kMars57OpenPanel = 58; +const ExtraID kMars57OpenPanelChoices = 59; +const ExtraID kMars57ShieldEvaluation = 60; +const ExtraID kMars57MeasureOutput = 61; +const ExtraID kMars57ShieldOkayLoop = 62; +const ExtraID kMars57RunDiagnostics = 63; +const ExtraID kMars57BombExplodes = 64; +const ExtraID kMars57BombAnalysis = 65; +const ExtraID kMars57DontLink = 66; +const ExtraID kMars57CircuitLink = 67; +const ExtraID kMars57GameLevel1 = 68; +const ExtraID kMars57GameLevel2 = 69; +const ExtraID kMars57GameLevel3 = 70; +const ExtraID kMars57BombExplodesInGame = 71; +const ExtraID kMars57GameSolved = 72; +const ExtraID kMars57ExposeBomb = 73; +const ExtraID kMars57BackToNormal = 74; +const ExtraID kMars57ViewOpenNoBomb = 75; +const ExtraID kMars58SpinLeft = 76; +const ExtraID kMars58SpinRight = 77; +const ExtraID kMars58Extend = 78; +const ExtraID kMars59Retract = 79; +const ExtraID kMars60WestSpinAirlockToEast = 80; +const ExtraID kMars60EastSpinAirlockToWest = 81; +const ExtraID kMarsRobotHeadOpen = 82; +const ExtraID kMarsRobotHeadClose = 83; +const ExtraID kMarsRobotHead000 = 84; +const ExtraID kMarsRobotHead001 = 85; +const ExtraID kMarsRobotHead010 = 86; +const ExtraID kMarsRobotHead011 = 87; +const ExtraID kMarsRobotHead100 = 88; +const ExtraID kMarsRobotHead101 = 89; +const ExtraID kMarsRobotHead110 = 90; +const ExtraID kMarsRobotHead111 = 91; +const ExtraID kMarsMaze007RobotApproach = 92; +const ExtraID kMarsMaze007RobotLoop = 93; +const ExtraID kMarsMaze007RobotDeath = 94; +const ExtraID kMarsMaze015SouthRobotApproach = 95; +const ExtraID kMarsMaze015SouthRobotLoop = 96; +const ExtraID kMarsMaze015SouthRobotDeath = 97; +const ExtraID kMarsMaze101EastRobotApproach = 98; +const ExtraID kMarsMaze101EastRobotLoop = 99; +const ExtraID kMarsMaze101EastRobotDeath = 100; +const ExtraID kMarsMaze104WestLoop = 101; +const ExtraID kMarsMaze104WestDeath = 102; +const ExtraID kMarsMaze133SouthApproach = 103; +const ExtraID kMarsMaze133SouthLoop = 104; +const ExtraID kMarsMaze133SouthDeath = 105; +const ExtraID kMarsMaze136NorthApproach = 106; +const ExtraID kMarsMaze136NorthLoop = 107; +const ExtraID kMarsMaze136NorthDeath = 108; +const ExtraID kMarsMaze184WestLoop = 109; +const ExtraID kMarsMaze184WestDeath = 110; +const ExtraID kMars200DeathInBucket = 111; + +const ResIDType kReactorUndoHilitePICTID = 900; const int16 kMars52Compass = 90; const int16 kMars54Compass = 180; diff --git a/engines/pegasus/neighborhood/mars/energybeam.cpp b/engines/pegasus/neighborhood/mars/energybeam.cpp index 6a30c48dfb..85a1596b94 100755 --- a/engines/pegasus/neighborhood/mars/energybeam.cpp +++ b/engines/pegasus/neighborhood/mars/energybeam.cpp @@ -30,8 +30,8 @@ namespace Pegasus { const TimeValue kEnergyBeamTime = kOneSecond * kShuttleWeaponScale / 2; -const tCoordType kEnergyBeamOriginH = kShuttleWindowMidH; -const tCoordType kEnergyBeamOriginV = kShuttleWindowTop + kShuttleWindowHeight; +const CoordType kEnergyBeamOriginH = kShuttleWindowMidH; +const CoordType kEnergyBeamOriginV = kShuttleWindowTop + kShuttleWindowHeight; const float kBeamXOrigin = convertScreenHToSpaceX(kEnergyBeamOriginH, kEnergyBeamMinDistance); const float kBeamYOrigin = convertScreenVToSpaceY(kEnergyBeamOriginV, kEnergyBeamMinDistance); diff --git a/engines/pegasus/neighborhood/mars/gravitoncannon.cpp b/engines/pegasus/neighborhood/mars/gravitoncannon.cpp index e56fddc51f..d383cc34ab 100755 --- a/engines/pegasus/neighborhood/mars/gravitoncannon.cpp +++ b/engines/pegasus/neighborhood/mars/gravitoncannon.cpp @@ -31,16 +31,16 @@ namespace Pegasus { const TimeValue kGravitonTime = kOneSecond * kShuttleWeaponScale; -const tCoordType kGravitonOriginH = kShuttleWindowLeft - 1; -const tCoordType kGravitonOriginV = kShuttleWindowMidV; +const CoordType kGravitonOriginH = kShuttleWindowLeft - 1; +const CoordType kGravitonOriginV = kShuttleWindowMidV; const float kGravitonXOrigin = convertScreenHToSpaceX(kGravitonOriginH, kGravitonMinDistance); const float kGravitonYOrigin = convertScreenVToSpaceY(kGravitonOriginV, kGravitonMinDistance); const float kGravitonZOrigin = kGravitonMinDistance; // Width of graviton sprite... -const tCoordType kGravitonMaxScreenWidth = 78; -const tCoordType kGravitonMaxScreenHeight = 46; +const CoordType kGravitonMaxScreenWidth = 78; +const CoordType kGravitonMaxScreenHeight = 46; const float kGravitonWidth = convertScreenHToSpaceX(kShuttleWindowMidH + kGravitonMaxScreenWidth / 2, kGravitonMinDistance) - convertScreenHToSpaceX(kShuttleWindowMidH - kGravitonMaxScreenWidth / 2, kGravitonMinDistance); diff --git a/engines/pegasus/neighborhood/mars/hermite.cpp b/engines/pegasus/neighborhood/mars/hermite.cpp index 814e92ff53..dc4a2c5fc2 100755 --- a/engines/pegasus/neighborhood/mars/hermite.cpp +++ b/engines/pegasus/neighborhood/mars/hermite.cpp @@ -27,17 +27,17 @@ namespace Pegasus { -tCoordType hermite(tCoordType p1, tCoordType p4, tCoordType r1, tCoordType r4, int32 time, int32 duration) { +CoordType hermite(CoordType p1, CoordType p4, CoordType r1, CoordType r4, int32 time, int32 duration) { float t = (float)time / duration; float tsq = t * t; float tcu = t * tsq; float tcu2 = tcu + tcu; float tsq2 = tsq + tsq; float tsq3 = tsq2 + tsq; - return (tCoordType)((tcu2 - tsq3 + 1) * p1 + (tsq3 - tcu2) * p4 + (tcu - tsq2 + t) * r1 + (tcu - tsq) * r4); + return (CoordType)((tcu2 - tsq3 + 1) * p1 + (tsq3 - tcu2) * p4 + (tcu - tsq2 + t) * r1 + (tcu - tsq) * r4); } -tCoordType dHermite(tCoordType p1, tCoordType p4, tCoordType r1, tCoordType r4, int32 time, int32 duration) { +CoordType dHermite(CoordType p1, CoordType p4, CoordType r1, CoordType r4, int32 time, int32 duration) { float t = (float)time / duration; float t2 = t + t; float t4 = t2 + t2; @@ -45,7 +45,7 @@ tCoordType dHermite(tCoordType p1, tCoordType p4, tCoordType r1, tCoordType r4, float tsq = t * t; float tsq3 = tsq + tsq + tsq; float tsq6 = tsq3 + tsq3; - return (tCoordType)((tsq6 - t6) * p1 + (t6 - tsq6) * p4 + (tsq3 - t4 + 1) * r1 + (tsq3 - t2) * r4); + return (CoordType)((tsq6 - t6) * p1 + (t6 - tsq6) * p4 + (tsq3 - t4 + 1) * r1 + (tsq3 - t2) * r4); } void hermite(Common::Point p1, Common::Point p4, Common::Point r1, Common::Point r4, int32 time, int32 duration, Common::Point &result) { diff --git a/engines/pegasus/neighborhood/mars/hermite.h b/engines/pegasus/neighborhood/mars/hermite.h index de0122f84b..44cb3a5a11 100755 --- a/engines/pegasus/neighborhood/mars/hermite.h +++ b/engines/pegasus/neighborhood/mars/hermite.h @@ -31,8 +31,8 @@ namespace Pegasus { -tCoordType hermite(tCoordType p1, tCoordType p4, tCoordType r1, tCoordType r4, int32 t, int32 duration); -tCoordType dHermite(tCoordType p1, tCoordType p4, tCoordType r1, tCoordType r4, int32 t, int32 duration); +CoordType hermite(CoordType p1, CoordType p4, CoordType r1, CoordType r4, int32 t, int32 duration); +CoordType dHermite(CoordType p1, CoordType p4, CoordType r1, CoordType r4, int32 t, int32 duration); void hermite(Common::Point p1, Common::Point p4, Common::Point r1, Common::Point r4, int32 t, int32 duration, Common::Point &result); void dHermite(Common::Point p1, Common::Point p4, Common::Point r1, Common::Point r4, int32 t, int32 duration, Common::Point &result); diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index 3a9273e91e..93f99904d7 100755 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -42,13 +42,13 @@ namespace Pegasus { // Probably no one will know the difference. const int16 kMarsShieldPanelOffsetAngle = 22; -const tCanMoveForwardReason kCantMoveRobotBlocking = kCantMoveLastReason + 1; +const CanMoveForwardReason kCantMoveRobotBlocking = kCantMoveLastReason + 1; -const tNotificationFlags kTimeForCanyonChaseFlag = kLastNeighborhoodNotificationFlag << 1; -const tNotificationFlags kExplosionFinishedFlag = kTimeForCanyonChaseFlag << 1; -const tNotificationFlags kTimeToTransportFlag = kExplosionFinishedFlag << 1; +const NotificationFlags kTimeForCanyonChaseFlag = kLastNeighborhoodNotificationFlag << 1; +const NotificationFlags kExplosionFinishedFlag = kTimeForCanyonChaseFlag << 1; +const NotificationFlags kTimeToTransportFlag = kExplosionFinishedFlag << 1; -const tNotificationFlags kMarsNotificationFlags = kTimeForCanyonChaseFlag | +const NotificationFlags kMarsNotificationFlags = kTimeForCanyonChaseFlag | kExplosionFinishedFlag | kTimeToTransportFlag; @@ -264,7 +264,7 @@ uint16 Mars::getDateResID() const { return kDate2185ID; } -TimeValue Mars::getViewTime(const tRoomID room, const tDirectionConstant direction) { +TimeValue Mars::getViewTime(const RoomID room, const DirectionConstant direction) { ExtraTable::Entry extra; SpotTable::Entry spotEntry; uint32 extraID = 0xffffffff; @@ -342,7 +342,7 @@ TimeValue Mars::getViewTime(const tRoomID room, const tDirectionConstant directi return extra.movieEnd - 1; } -void Mars::getZoomEntry(const tHotSpotID spotID, ZoomTable::Entry &entry) { +void Mars::getZoomEntry(const HotSpotID spotID, ZoomTable::Entry &entry) { Neighborhood::getZoomEntry(spotID, entry); uint32 extraID = 0xffffffff; @@ -366,7 +366,7 @@ void Mars::getZoomEntry(const tHotSpotID spotID, ZoomTable::Entry &entry) { } } -void Mars::findSpotEntry(const tRoomID room, const tDirectionConstant direction, tSpotFlags flags, SpotTable::Entry &entry) { +void Mars::findSpotEntry(const RoomID room, const DirectionConstant direction, SpotFlags flags, SpotTable::Entry &entry) { Neighborhood::findSpotEntry(room, direction, flags, entry); if ((flags & (kSpotOnArrivalMask | kSpotOnTurnMask)) != 0) { @@ -387,8 +387,8 @@ void Mars::findSpotEntry(const tRoomID room, const tDirectionConstant direction, } } -tCanMoveForwardReason Mars::canMoveForward(ExitTable::Entry &entry) { - tCanMoveForwardReason reason = Neighborhood::canMoveForward(entry); +CanMoveForwardReason Mars::canMoveForward(ExitTable::Entry &entry) { + CanMoveForwardReason reason = Neighborhood::canMoveForward(entry); switch (GameState.getCurrentRoomAndView()) { case MakeRoomView(kMars48, kEast): @@ -404,7 +404,7 @@ tCanMoveForwardReason Mars::canMoveForward(ExitTable::Entry &entry) { return reason; } -void Mars::cantMoveThatWay(tCanMoveForwardReason reason) { +void Mars::cantMoveThatWay(CanMoveForwardReason reason) { if (reason == kCantMoveRobotBlocking) { startExtraSequence(kMars48RobotKillsPlayer, kExtraCompletedFlag, kFilterNoInput); loadLoopSound2(""); @@ -425,7 +425,7 @@ void Mars::bumpIntoWall() { Neighborhood::bumpIntoWall(); } -tCanOpenDoorReason Mars::canOpenDoor(DoorTable::Entry &entry) { +CanOpenDoorReason Mars::canOpenDoor(DoorTable::Entry &entry) { switch (GameState.getCurrentRoomAndView()) { case MakeRoomView(kMars05, kEast): case MakeRoomView(kMars06, kEast): @@ -468,7 +468,7 @@ tCanOpenDoorReason Mars::canOpenDoor(DoorTable::Entry &entry) { return Neighborhood::canOpenDoor(entry); } -void Mars::cantOpenDoor(tCanOpenDoorReason reason) { +void Mars::cantOpenDoor(CanOpenDoorReason reason) { switch (GameState.getCurrentRoom()) { case kMars05: case kMars06: @@ -611,7 +611,7 @@ void Mars::setUpReactorEnergyDrain() { } } -void Mars::closeDoorOffScreen(const tRoomID room, const tDirectionConstant direction) { +void Mars::closeDoorOffScreen(const RoomID room, const DirectionConstant direction) { switch (room) { case kMars51: playSpotSoundSync(kMarsGantryDoorCloseIn, kMarsGantryDoorCloseOut); @@ -727,7 +727,7 @@ void Mars::checkAirlockDoors() { } } -int16 Mars::getStaticCompassAngle(const tRoomID room, const tDirectionConstant dir) { +int16 Mars::getStaticCompassAngle(const RoomID room, const DirectionConstant dir) { int16 angle = Neighborhood::getStaticCompassAngle(room, dir); switch (MakeRoomView(room, dir)) { @@ -895,7 +895,7 @@ void Mars::getExtraCompassMove(const ExtraTable::Entry &entry, FaderMoveSpec &co } void Mars::loadAmbientLoops() { - tRoomID room = GameState.getCurrentRoom(); + RoomID room = GameState.getCurrentRoom(); if ((room >= kMars0A && room <= kMars21) || (room >= kMars41 && room <= kMars43)) { if (GameState.getMarsSeenTimeStream()) @@ -1044,7 +1044,7 @@ void Mars::loadAmbientLoops() { } } -void Mars::checkContinuePoint(const tRoomID room, const tDirectionConstant direction) { +void Mars::checkContinuePoint(const RoomID room, const DirectionConstant direction) { switch (MakeRoomView(room, direction)) { case MakeRoomView(kMars02, kSouth): case MakeRoomView(kMars19, kEast): @@ -1143,7 +1143,7 @@ void Mars::timerExpired(const uint32 eventType) { } } -void Mars::arriveAt(const tRoomID room, const tDirectionConstant direction) { +void Mars::arriveAt(const RoomID room, const DirectionConstant direction) { switch (MakeRoomView(room, direction)) { case MakeRoomView(kMars18, kNorth): if (GameState.getMarsPodAtUpperPlatform()) @@ -1462,7 +1462,7 @@ void Mars::shieldOff() { setUpReactorEnergyDrain(); } -void Mars::turnTo(const tDirectionConstant direction) { +void Mars::turnTo(const DirectionConstant direction) { switch (MakeRoomView(GameState.getCurrentRoom(), direction)) { case MakeRoomView(kMars27, kNorth): case MakeRoomView(kMars27, kSouth): @@ -1788,8 +1788,8 @@ void Mars::clickInHotspot(const Input &input, const Hotspot *clickedSpot) { } } -tInputBits Mars::getInputFilter() { - tInputBits result = Neighborhood::getInputFilter(); +InputBits Mars::getInputFilter() { + InputBits result = Neighborhood::getInputFilter(); switch (GameState.getCurrentRoomAndView()) { case MakeRoomView(kMars49, kSouth): @@ -1830,7 +1830,7 @@ tInputBits Mars::getInputFilter() { // the inventory is too full or because the player lets go of the item before // dropping it into the inventory). Hotspot *Mars::getItemScreenSpot(Item *item, DisplayElement *element) { - tHotSpotID destSpotID; + HotSpotID destSpotID; switch (item->getObjectID()) { case kCardBomb: @@ -2095,7 +2095,7 @@ void Mars::turnRight() { } } -void Mars::receiveNotification(Notification *notification, const tNotificationFlags flag) { +void Mars::receiveNotification(Notification *notification, const NotificationFlags flag) { InventoryItem *item; Neighborhood::receiveNotification(notification, flag); @@ -3062,7 +3062,7 @@ const int kRobotTooStrong = 1; const int kTractorTooWeak = 2; const int kCapturedRobotShip = 3; -void Mars::spaceChaseClick(const Input &input, const tHotSpotID id) { +void Mars::spaceChaseClick(const Input &input, const HotSpotID id) { Common::Point pt; switch (id) { @@ -3217,7 +3217,7 @@ void Mars::spaceChaseClick(const Input &input, const tHotSpotID id) { } } -void Mars::showBigExplosion(const Common::Rect &r, const tDisplayOrder order) { +void Mars::showBigExplosion(const Common::Rect &r, const DisplayOrder order) { if (_explosions.isMovieValid()) { _explosions.setDisplayOrder(order); @@ -3239,7 +3239,7 @@ void Mars::showBigExplosion(const Common::Rect &r, const tDisplayOrder order) { } } -void Mars::showLittleExplosion(const Common::Rect &r, const tDisplayOrder order) { +void Mars::showLittleExplosion(const Common::Rect &r, const DisplayOrder order) { if (_explosions.isMovieValid()) { _explosions.setDisplayOrder(order); @@ -3331,7 +3331,7 @@ void Mars::updateCursor(const Common::Point cursorLocation, const Hotspot *curso } } -tAirQuality Mars::getAirQuality(const tRoomID room) { +AirQuality Mars::getAirQuality(const RoomID room) { if ((room >= kMars36 && room <= kMars39) || (room >= kMarsMaze004 && room <= kMarsMaze200)) return kAirQualityVacuum; if (room == kMars35 && !GameState.getMarsAirlockOpen()) @@ -3553,7 +3553,7 @@ Common::String Mars::getEnvScanMovie() { Common::String movieName = Neighborhood::getEnvScanMovie(); if (movieName.empty()) { - tRoomID room = GameState.getCurrentRoom(); + RoomID room = GameState.getCurrentRoom(); if (room >= kMars0A && room <= kMars21) return "Images/AI/Mars/XME1"; @@ -3624,7 +3624,7 @@ uint Mars::getNumHints() { break; case MakeRoomView(kMars56, kEast): if (getCurrentActivation() == kActivateReactorReadyForNitrogen) { - if ((tExtraID)_lastExtra == kMars57LowerScreenClosed) + if ((ExtraID)_lastExtra == kMars57LowerScreenClosed) numHints = 3; } else if (getCurrentActivation() == kActivateReactorPlatformOut) { if (!GameState.getShieldOn()) { diff --git a/engines/pegasus/neighborhood/mars/mars.h b/engines/pegasus/neighborhood/mars/mars.h index 01474ab831..9aca10a703 100755 --- a/engines/pegasus/neighborhood/mars/mars.h +++ b/engines/pegasus/neighborhood/mars/mars.h @@ -77,12 +77,12 @@ public: virtual uint16 getDateResID() const; - virtual tAirQuality getAirQuality(const tRoomID); + virtual AirQuality getAirQuality(const RoomID); void checkAirMask(); - void showBigExplosion(const Common::Rect &, const tDisplayOrder); - void showLittleExplosion(const Common::Rect &, const tDisplayOrder); + void showBigExplosion(const Common::Rect &, const DisplayOrder); + void showLittleExplosion(const Common::Rect &, const DisplayOrder); void hitByJunk(); void decreaseRobotShuttleEnergy(const int, Common::Point impactPoint); void setUpNextDropTime(); @@ -95,7 +95,7 @@ public: virtual void shieldOn(); virtual void shieldOff(); - void checkContinuePoint(const tRoomID, const tDirectionConstant); + void checkContinuePoint(const RoomID, const DirectionConstant); void setSoundFXLevel(const uint16); @@ -123,25 +123,25 @@ protected: void init(); void start(); void setUpAIRules(); - void arriveAt(const tRoomID, const tDirectionConstant); + void arriveAt(const RoomID, const DirectionConstant); void takeItemFromRoom(Item *); void dropItemIntoRoom(Item *, Hotspot *); void activateHotspots(); void activateOneHotspot(HotspotInfoTable::Entry &, Hotspot *); void clickInHotspot(const Input &, const Hotspot *); - tInputBits getInputFilter(); + InputBits getInputFilter(); - TimeValue getViewTime(const tRoomID, const tDirectionConstant); - void getZoomEntry(const tHotSpotID, ZoomTable::Entry &); - void findSpotEntry(const tRoomID, const tDirectionConstant, tSpotFlags, SpotTable::Entry &); - tCanOpenDoorReason canOpenDoor(DoorTable::Entry &); + TimeValue getViewTime(const RoomID, const DirectionConstant); + void getZoomEntry(const HotSpotID, ZoomTable::Entry &); + void findSpotEntry(const RoomID, const DirectionConstant, SpotFlags, SpotTable::Entry &); + CanOpenDoorReason canOpenDoor(DoorTable::Entry &); void openDoor(); - void closeDoorOffScreen(const tRoomID, const tDirectionConstant); - int16 getStaticCompassAngle(const tRoomID, const tDirectionConstant); + void closeDoorOffScreen(const RoomID, const DirectionConstant); + int16 getStaticCompassAngle(const RoomID, const DirectionConstant); void getExitCompassMove(const ExitTable::Entry &, FaderMoveSpec &); void getExtraCompassMove(const ExtraTable::Entry &, FaderMoveSpec &); - void turnTo(const tDirectionConstant); - void receiveNotification(Notification *, const tNotificationFlags); + void turnTo(const DirectionConstant); + void receiveNotification(Notification *, const NotificationFlags); void doorOpened(); void setUpReactorEnergyDrain(); Hotspot *getItemScreenSpot(Item *, DisplayElement *); @@ -155,8 +155,8 @@ protected: void doReactorGuess(int32 guess); void bombExplodesInGame(); void didntFindBomb(); - tCanMoveForwardReason canMoveForward(ExitTable::Entry &); - void cantMoveThatWay(tCanMoveForwardReason); + CanMoveForwardReason canMoveForward(ExitTable::Entry &); + void cantMoveThatWay(CanMoveForwardReason); void moveForward(); void bumpIntoWall(); void turnLeft(); @@ -165,7 +165,7 @@ protected: void loadAmbientLoops(); void checkAirlockDoors(); void pickedUpItem(Item *item); - void cantOpenDoor(tCanOpenDoorReason); + void cantOpenDoor(CanOpenDoorReason); void launchMaze007Robot(); void launchMaze015Robot(); void launchMaze101Robot(); @@ -183,7 +183,7 @@ protected: void startUpFromFinishedSpaceChase(); void startUpFromSpaceChase(); void transportToRobotShip(); - void spaceChaseClick(const Input &, const tHotSpotID); + void spaceChaseClick(const Input &, const HotSpotID); void updateCursor(const Common::Point, const Hotspot *); Common::String getSoundSpotsName(); diff --git a/engines/pegasus/neighborhood/mars/planetmover.cpp b/engines/pegasus/neighborhood/mars/planetmover.cpp index 2b287547b5..7a43c188f7 100755 --- a/engines/pegasus/neighborhood/mars/planetmover.cpp +++ b/engines/pegasus/neighborhood/mars/planetmover.cpp @@ -36,7 +36,7 @@ const TimeScale kRovingScale = kTractorBeamScale; const TimeValue kRovingTime = kTenSeconds * kRovingScale; const TimeValue kRovingSlop = kTwoSeconds * kRovingScale; -const tCoordType kMaxVelocity = 20; +const CoordType kMaxVelocity = 20; PlanetMover::PlanetMover() { setScale(kRovingScale); @@ -59,8 +59,8 @@ void PlanetMover::stopMoving() { void PlanetMover::dropPlanetOutOfSight() { stop(); - tCoordType currentLoc = hermite(_p1, _p4, _r1, _r4, _lastTime, _duration); - tCoordType currentV = dHermite(_p1, _p4, _r1, _r4, _lastTime, _duration); + CoordType currentLoc = hermite(_p1, _p4, _r1, _r4, _lastTime, _duration); + CoordType currentV = dHermite(_p1, _p4, _r1, _r4, _lastTime, _duration); _p1 = currentLoc; _r1 = currentV; _p4 = kPlanetStartTop; diff --git a/engines/pegasus/neighborhood/mars/planetmover.h b/engines/pegasus/neighborhood/mars/planetmover.h index faf76cd9fa..cc2c412548 100755 --- a/engines/pegasus/neighborhood/mars/planetmover.h +++ b/engines/pegasus/neighborhood/mars/planetmover.h @@ -47,7 +47,7 @@ protected: virtual void timeChanged(const TimeValue); Movie *_planetMovie; - tCoordType _p1, _p4, _r1, _r4; + CoordType _p1, _p4, _r1, _r4; TimeValue _duration; bool _dropping; }; diff --git a/engines/pegasus/neighborhood/mars/reactor.cpp b/engines/pegasus/neighborhood/mars/reactor.cpp index dd44fc49e1..b044fc9f4b 100755 --- a/engines/pegasus/neighborhood/mars/reactor.cpp +++ b/engines/pegasus/neighborhood/mars/reactor.cpp @@ -28,18 +28,18 @@ namespace Pegasus { -static const tCoordType kCurrentGuessWidth = 121; -static const tCoordType kCurrentGuessHeight = 23; +static const CoordType kCurrentGuessWidth = 121; +static const CoordType kCurrentGuessHeight = 23; -static const tCoordType kOneGuessWidth = 25; -static const tCoordType kOneGuessHeight = 23; +static const CoordType kOneGuessWidth = 25; +static const CoordType kOneGuessHeight = 23; -static const tResIDType kReactorChoicesPICTID = 905; +static const ResIDType kReactorChoicesPICTID = 905; -static const tCoordType kCurrentGuessLeft = kNavAreaLeft + 146; -static const tCoordType kCurrentGuessTop = kNavAreaTop + 90; +static const CoordType kCurrentGuessLeft = kNavAreaLeft + 146; +static const CoordType kCurrentGuessTop = kNavAreaTop + 90; -ReactorGuess::ReactorGuess(const tDisplayElementID id) : DisplayElement(id) { +ReactorGuess::ReactorGuess(const DisplayElementID id) : DisplayElement(id) { setBounds(kCurrentGuessLeft, kCurrentGuessTop, kCurrentGuessLeft + kCurrentGuessWidth, kCurrentGuessTop + kCurrentGuessHeight); setDisplayOrder(kMonitorLayer); @@ -81,10 +81,10 @@ void ReactorGuess::draw(const Common::Rect &) { } } -static const tCoordType kReactorChoiceHiliteWidth = 166; -static const tCoordType kReactorChoiceHiliteHeight = 26; +static const CoordType kReactorChoiceHiliteWidth = 166; +static const CoordType kReactorChoiceHiliteHeight = 26; -static const tCoordType kChoiceHiliteLefts[6] = { +static const CoordType kChoiceHiliteLefts[6] = { 0, 34, 34 + 34, @@ -93,12 +93,12 @@ static const tCoordType kChoiceHiliteLefts[6] = { 34 + 34 + 32 + 34 + 32 }; -static const tResIDType kReactorChoiceHilitePICTID = 901; +static const ResIDType kReactorChoiceHilitePICTID = 901; -static const tCoordType kReactorChoiceHiliteLeft = kNavAreaLeft + 116; -static const tCoordType kReactorChoiceHiliteTop = kNavAreaTop + 158; +static const CoordType kReactorChoiceHiliteLeft = kNavAreaLeft + 116; +static const CoordType kReactorChoiceHiliteTop = kNavAreaTop + 158; -ReactorChoiceHighlight::ReactorChoiceHighlight(const tDisplayElementID id) : DisplayElement(id) { +ReactorChoiceHighlight::ReactorChoiceHighlight(const DisplayElementID id) : DisplayElement(id) { setBounds(kReactorChoiceHiliteLeft, kReactorChoiceHiliteTop, kReactorChoiceHiliteLeft + kReactorChoiceHiliteWidth, kReactorChoiceHiliteTop + kReactorChoiceHiliteHeight); setDisplayOrder(kMonitorLayer); @@ -129,14 +129,14 @@ void ReactorChoiceHighlight::draw(const Common::Rect &) { } } -static const tCoordType kReactorHistoryWidth = 128; -static const tCoordType kReactorHistoryHeight = 168; +static const CoordType kReactorHistoryWidth = 128; +static const CoordType kReactorHistoryHeight = 168; -static const tCoordType kColorWidths[5] = {24, 25, 25, 26, 27}; -static const tCoordType kColorHeights[5] = {14, 15, 17, 17, 19}; +static const CoordType kColorWidths[5] = { 24, 25, 25, 26, 27 }; +static const CoordType kColorHeights[5] = { 14, 15, 17, 17, 19}; // TODO: Remove global construction -static const tCoordType kColorTops[5] = { +static const CoordType kColorTops[5] = { 0, kColorHeights[0], kColorHeights[0] + kColorHeights[1], @@ -144,7 +144,7 @@ static const tCoordType kColorTops[5] = { kColorHeights[0] + kColorHeights[1] + kColorHeights[2] + kColorHeights[3], }; -static const tCoordType kHistoryLefts[5][3] = { +static const CoordType kHistoryLefts[5][3] = { { 302 + kNavAreaLeft, 329 + kNavAreaLeft, 357 + kNavAreaLeft }, { 302 + kNavAreaLeft, 331 + kNavAreaLeft, 360 + kNavAreaLeft }, { 303 + kNavAreaLeft, 333 + kNavAreaLeft, 363 + kNavAreaLeft }, @@ -152,7 +152,7 @@ static const tCoordType kHistoryLefts[5][3] = { { 305 + kNavAreaLeft, 337 + kNavAreaLeft, 369 + kNavAreaLeft } }; -static const tCoordType kHistoryTops[5] = { +static const CoordType kHistoryTops[5] = { 39 + kNavAreaTop, 61 + kNavAreaTop, 84 + kNavAreaTop, @@ -160,13 +160,13 @@ static const tCoordType kHistoryTops[5] = { 137 + kNavAreaTop }; -static const tCoordType kOneAnswerWidth = 35; -static const tCoordType kOneAnswerHeight = 27; +static const CoordType kOneAnswerWidth = 35; +static const CoordType kOneAnswerHeight = 27; -static const tCoordType kDigitWidth = 16; -static const tCoordType kDigitHeight = 12; +static const CoordType kDigitWidth = 16; +static const CoordType kDigitHeight = 12; -static const tCoordType kCorrectCountLefts[5] = { +static const CoordType kCorrectCountLefts[5] = { 388 + kNavAreaLeft, 392 + kNavAreaLeft, 398 + kNavAreaLeft, @@ -174,7 +174,7 @@ static const tCoordType kCorrectCountLefts[5] = { 406 + kNavAreaLeft }; -static const tCoordType kCorrectCountTops[5] = { +static const CoordType kCorrectCountTops[5] = { 40 + kNavAreaTop, 62 + kNavAreaTop, 86 + kNavAreaTop, @@ -182,17 +182,17 @@ static const tCoordType kCorrectCountTops[5] = { 140 + kNavAreaTop }; -static const tResIDType kReactorDigitsPICTID = 902; -static const tResIDType kReactorHistoryPICTID = 903; -static const tResIDType kReactorAnswerPICTID = 904; +static const ResIDType kReactorDigitsPICTID = 902; +static const ResIDType kReactorHistoryPICTID = 903; +static const ResIDType kReactorAnswerPICTID = 904; -static const tCoordType kReactorHistoryLeft = kNavAreaLeft + 302; -static const tCoordType kReactorHistoryTop = kNavAreaTop + 39; +static const CoordType kReactorHistoryLeft = kNavAreaLeft + 302; +static const CoordType kReactorHistoryTop = kNavAreaTop + 39; -static const tCoordType kAnswerLeft = kNavAreaLeft + 304; -static const tCoordType kAnswerTop = kNavAreaTop + 180; +static const CoordType kAnswerLeft = kNavAreaLeft + 304; +static const CoordType kAnswerTop = kNavAreaTop + 180; -ReactorHistory::ReactorHistory(const tDisplayElementID id) : DisplayElement(id) { +ReactorHistory::ReactorHistory(const DisplayElementID id) : DisplayElement(id) { setBounds(kReactorHistoryLeft, kReactorHistoryTop, kReactorHistoryLeft + kReactorHistoryWidth, kReactorHistoryTop + kReactorHistoryHeight); setDisplayOrder(kMonitorLayer); diff --git a/engines/pegasus/neighborhood/mars/reactor.h b/engines/pegasus/neighborhood/mars/reactor.h index 671970102b..86338f8266 100755 --- a/engines/pegasus/neighborhood/mars/reactor.h +++ b/engines/pegasus/neighborhood/mars/reactor.h @@ -34,7 +34,7 @@ namespace Pegasus { class ReactorGuess : public DisplayElement { public: - ReactorGuess(const tDisplayElementID); + ReactorGuess(const DisplayElementID); virtual ~ReactorGuess() {} void initReactorGuess(); @@ -52,7 +52,7 @@ protected: class ReactorChoiceHighlight : public DisplayElement { public: - ReactorChoiceHighlight(const tDisplayElementID); + ReactorChoiceHighlight(const DisplayElementID); virtual ~ReactorChoiceHighlight() {} void initReactorChoiceHighlight(); @@ -79,7 +79,7 @@ protected: class ReactorHistory : public DisplayElement { public: - ReactorHistory(const tDisplayElementID); + ReactorHistory(const DisplayElementID); virtual ~ReactorHistory() {} void initReactorHistory(); diff --git a/engines/pegasus/neighborhood/mars/robotship.cpp b/engines/pegasus/neighborhood/mars/robotship.cpp index 862a8b2edd..b1ecdde008 100755 --- a/engines/pegasus/neighborhood/mars/robotship.cpp +++ b/engines/pegasus/neighborhood/mars/robotship.cpp @@ -40,18 +40,18 @@ const TimeValue kRovingSlop = kThreeSeconds * kRovingScale; const int kNumSpriteColumns = 15; const int kNumSpriteRows = 16; -const tCoordType kInitialLocationLeft = kShuttleWindowLeft - 50; -const tCoordType kInitialLocationTop = kShuttleWindowTop - 50; -const tCoordType kInitialLocationWidth = kShuttleWindowWidth + 100; -const tCoordType kInitialLocationHeight = kShuttleWindowHeight + 100; +const CoordType kInitialLocationLeft = kShuttleWindowLeft - 50; +const CoordType kInitialLocationTop = kShuttleWindowTop - 50; +const CoordType kInitialLocationWidth = kShuttleWindowWidth + 100; +const CoordType kInitialLocationHeight = kShuttleWindowHeight + 100; -const tCoordType kVelocityVectorLength = 100; -const tCoordType kVelocityVectorSlop = 50; +const CoordType kVelocityVectorLength = 100; +const CoordType kVelocityVectorSlop = 50; -const tCoordType kRovingLeft = kShuttleWindowLeft + 20; -const tCoordType kRovingTop = kShuttleWindowTop + 20; -const tCoordType kRovingWidth = kShuttleWindowMidH - kRovingLeft; -const tCoordType kRovingHeight = kShuttleWindowMidV - kRovingTop; +const CoordType kRovingLeft = kShuttleWindowLeft + 20; +const CoordType kRovingTop = kShuttleWindowTop + 20; +const CoordType kRovingWidth = kShuttleWindowMidH - kRovingLeft; +const CoordType kRovingHeight = kShuttleWindowMidV - kRovingTop; RobotShip* g_robotShip = 0; @@ -129,7 +129,7 @@ void RobotShip::setUpNextDropTime() { void RobotShip::timeToDropJunk() { if (g_spaceJunk) { - tCoordType x, y; + CoordType x, y; _spritesMovie.getCenter(x, y); g_spaceJunk->launchJunk(((PegasusEngine *)g_engine)->getRandomNumber(24), x, y); } @@ -169,7 +169,7 @@ void RobotShip::newDestination() { start(); } -void RobotShip::moveRobotTo(tCoordType x, tCoordType y) { +void RobotShip::moveRobotTo(CoordType x, CoordType y) { _currentLocation.x = x; _currentLocation.y = y; @@ -258,8 +258,8 @@ void RobotShip::timeChanged(const TimeValue) { } } -void RobotShip::makeVelocityVector(tCoordType x1, tCoordType y1, tCoordType x2, tCoordType y2, Common::Point &vector) { - tCoordType length = ((PegasusEngine *)g_engine)->getRandomNumber(kVelocityVectorSlop - 1) + kVelocityVectorLength; +void RobotShip::makeVelocityVector(CoordType x1, CoordType y1, CoordType x2, CoordType y2, Common::Point &vector) { + CoordType length = ((PegasusEngine *)g_engine)->getRandomNumber(kVelocityVectorSlop - 1) + kVelocityVectorLength; vector.x = x2 - x1; vector.y = y2 - y1; float oldLength = sqrt(vector.x * vector.x + vector.y * vector.y); diff --git a/engines/pegasus/neighborhood/mars/robotship.h b/engines/pegasus/neighborhood/mars/robotship.h index 7c6d996566..7921198d48 100755 --- a/engines/pegasus/neighborhood/mars/robotship.h +++ b/engines/pegasus/neighborhood/mars/robotship.h @@ -30,8 +30,8 @@ namespace Pegasus { -const tCoordType kShuttleMovieWidth = 114; -const tCoordType kShuttleMovieHeight = 42; +const CoordType kShuttleMovieWidth = 114; +const CoordType kShuttleMovieHeight = 42; class RobotShip : IdlerTimeBase { friend void timeToDropJunkFunction(FunctionPtr *, void *); @@ -65,10 +65,10 @@ public: protected: void newDestination(); - void moveRobotTo(tCoordType, tCoordType); + void moveRobotTo(CoordType, CoordType); void timeToDropJunk(); virtual void timeChanged(const TimeValue); - void makeVelocityVector(tCoordType, tCoordType, tCoordType, tCoordType, Common::Point &); + void makeVelocityVector(CoordType, CoordType, CoordType, CoordType, Common::Point &); GlowingMovie _spritesMovie; Common::Rect _shipRange; diff --git a/engines/pegasus/neighborhood/mars/shuttlehud.cpp b/engines/pegasus/neighborhood/mars/shuttlehud.cpp index 1850926ef3..cac188e01e 100755 --- a/engines/pegasus/neighborhood/mars/shuttlehud.cpp +++ b/engines/pegasus/neighborhood/mars/shuttlehud.cpp @@ -30,26 +30,26 @@ namespace Pegasus { -const tCoordType kHUDTargetGridLeft = kShuttleWindowLeft + 16; -const tCoordType kHUDTargetGridTop = kShuttleWindowTop + 8; -const tCoordType kHUDTargetGridWidth = 328; -const tCoordType kHUDTargetGridHeight = 206; - -const tCoordType kHUDRS232Left = kHUDTargetGridLeft + 264; -const tCoordType kHUDRS232Top = kHUDTargetGridTop + 2; - -const tCoordType kHUDLockLeft = kShuttleWindowLeft + 101; -const tCoordType kHUDLockTop = kShuttleWindowTop + 49; -const tCoordType kHUDLockWidth = 145; -const tCoordType kHUDLockHeight = 124; - -const tCoordType kTractorLockWidth = 50; -const tCoordType kTractorLockHeight = 30; - -const tCoordType kTractorLockLeft = kShuttleWindowMidH - kTractorLockWidth / 2; -const tCoordType kTractorLockTop = kShuttleWindowMidV - kTractorLockHeight / 2; -const tCoordType kTractorLockRight = kTractorLockLeft + kTractorLockWidth; -const tCoordType kTractorLockBottom = kTractorLockTop + kTractorLockHeight; +const CoordType kHUDTargetGridLeft = kShuttleWindowLeft + 16; +const CoordType kHUDTargetGridTop = kShuttleWindowTop + 8; +const CoordType kHUDTargetGridWidth = 328; +const CoordType kHUDTargetGridHeight = 206; + +const CoordType kHUDRS232Left = kHUDTargetGridLeft + 264; +const CoordType kHUDRS232Top = kHUDTargetGridTop + 2; + +const CoordType kHUDLockLeft = kShuttleWindowLeft + 101; +const CoordType kHUDLockTop = kShuttleWindowTop + 49; +const CoordType kHUDLockWidth = 145; +const CoordType kHUDLockHeight = 124; + +const CoordType kTractorLockWidth = 50; +const CoordType kTractorLockHeight = 30; + +const CoordType kTractorLockLeft = kShuttleWindowMidH - kTractorLockWidth / 2; +const CoordType kTractorLockTop = kShuttleWindowMidV - kTractorLockHeight / 2; +const CoordType kTractorLockRight = kTractorLockLeft + kTractorLockWidth; +const CoordType kTractorLockBottom = kTractorLockTop + kTractorLockHeight; static const uint16 s_RS232Data[] = { 0xF0E1, 0xCE70, diff --git a/engines/pegasus/neighborhood/mars/shuttleweapon.cpp b/engines/pegasus/neighborhood/mars/shuttleweapon.cpp index 14614d1c87..0151a26f29 100755 --- a/engines/pegasus/neighborhood/mars/shuttleweapon.cpp +++ b/engines/pegasus/neighborhood/mars/shuttleweapon.cpp @@ -53,7 +53,7 @@ bool ShuttleWeapon::canFireWeapon() { return !isRunning(); } -void ShuttleWeapon::fireWeapon(const tCoordType hStop, const tCoordType vStop) { +void ShuttleWeapon::fireWeapon(const CoordType hStop, const CoordType vStop) { if (!isRunning()) { stop(); setTime(0); diff --git a/engines/pegasus/neighborhood/mars/shuttleweapon.h b/engines/pegasus/neighborhood/mars/shuttleweapon.h index c62cee1acc..30e42face8 100755 --- a/engines/pegasus/neighborhood/mars/shuttleweapon.h +++ b/engines/pegasus/neighborhood/mars/shuttleweapon.h @@ -45,7 +45,7 @@ public: virtual void initShuttleWeapon(); virtual void cleanUpShuttleWeapon(); - virtual void fireWeapon(const tCoordType, const tCoordType); + virtual void fireWeapon(const CoordType, const CoordType); bool canFireWeapon(); diff --git a/engines/pegasus/neighborhood/mars/spacejunk.cpp b/engines/pegasus/neighborhood/mars/spacejunk.cpp index a751dc2a71..28847136f6 100755 --- a/engines/pegasus/neighborhood/mars/spacejunk.cpp +++ b/engines/pegasus/neighborhood/mars/spacejunk.cpp @@ -31,9 +31,9 @@ namespace Pegasus { //const TimeValue kWeaponReboundTime = kTwoSeconds * kJunkTimeScale; //const TimeValue kCollisionReboundTime = kOneSecond * kJunkTimeScale; -const tCoordType kMaxBounceSize = 90; -const tCoordType kBounceTargetHRange = 640 - kMaxBounceSize - 2; -const tCoordType kBounceTargetVRange = 480 - kMaxBounceSize - 2; +const CoordType kMaxBounceSize = 90; +const CoordType kBounceTargetHRange = 640 - kMaxBounceSize - 2; +const CoordType kBounceTargetVRange = 480 - kMaxBounceSize - 2; const float kJunkXTarget = 0; const float kJunkYTarget = 0; @@ -41,7 +41,7 @@ const float kJunkZTarget = kJunkMinDistance; SpaceJunk *g_spaceJunk = 0; -SpaceJunk::SpaceJunk(const tDisplayElementID id) : ScalingMovie(id) { +SpaceJunk::SpaceJunk(const DisplayElementID id) : ScalingMovie(id) { _timer.setScale(kJunkTimeScale); _bouncing = false; g_spaceJunk = this; @@ -51,7 +51,7 @@ SpaceJunk::~SpaceJunk() { g_spaceJunk = 0; } -void SpaceJunk::launchJunk(int16 whichJunk, tCoordType xOrigin, tCoordType yOrigin) { +void SpaceJunk::launchJunk(int16 whichJunk, CoordType xOrigin, CoordType yOrigin) { _bouncing = false; TimeValue startTime = whichJunk * 16 * 40; TimeValue stopTime = startTime + 16 * 40; @@ -76,7 +76,7 @@ void SpaceJunk::launchJunk(int16 whichJunk, tCoordType xOrigin, tCoordType yOrig _timer.start(); } -void SpaceJunk::setCenter(const tCoordType centerX, const tCoordType centerY) { +void SpaceJunk::setCenter(const CoordType centerX, const CoordType centerY) { _center.x = centerX; _center.y = centerY; @@ -86,7 +86,7 @@ void SpaceJunk::setCenter(const tCoordType centerX, const tCoordType centerY) { setBounds(r); } -void SpaceJunk::setScaleSize(const tCoordType size) { +void SpaceJunk::setScaleSize(const CoordType size) { Common::Rect r; r.left = _center.x - (size >> 1); r.top = _center.y - (size >> 1); @@ -101,7 +101,7 @@ void SpaceJunk::useIdleTime() { Common::Point pt; pt.x = linearInterp(0, _bounceTime, time, _bounceStart.x, _bounceStop.x); pt.y = linearInterp(0, _bounceTime, time, _bounceStart.y, _bounceStop.y); - tCoordType size = linearInterp(0, _bounceTime, time, _bounceSizeStart, _bounceSizeStop); + CoordType size = linearInterp(0, _bounceTime, time, _bounceSizeStart, _bounceSizeStop); setCenter(pt.x, pt.y); setScaleSize(size); diff --git a/engines/pegasus/neighborhood/mars/spacejunk.h b/engines/pegasus/neighborhood/mars/spacejunk.h index ba5aa753e0..03943b92c9 100755 --- a/engines/pegasus/neighborhood/mars/spacejunk.h +++ b/engines/pegasus/neighborhood/mars/spacejunk.h @@ -32,22 +32,22 @@ namespace Pegasus { -const tCoordType kJunkMaxScreenSize = 250; +const CoordType kJunkMaxScreenSize = 250; const float kJunkSize = convertScreenVToSpaceY(kShuttleWindowMidV - kJunkMaxScreenSize / 2, kJunkMinDistance) - convertScreenVToSpaceY(kShuttleWindowMidV + kJunkMaxScreenSize / 2, kJunkMinDistance); class SpaceJunk : public ScalingMovie, public Idler { public: - SpaceJunk(const tDisplayElementID); + SpaceJunk(const DisplayElementID); virtual ~SpaceJunk(); - void setCenter(const tCoordType, const tCoordType); - void setScaleSize(const tCoordType); + void setCenter(const CoordType, const CoordType); + void setScaleSize(const CoordType); void useIdleTime(); - void launchJunk(int16, tCoordType, tCoordType); + void launchJunk(int16, CoordType, CoordType); void getJunkPosition(Point3D &); bool isJunkFlying(); @@ -67,7 +67,7 @@ protected: Common::Point _center; bool _bouncing; Common::Point _bounceStart, _bounceStop; - tCoordType _bounceSizeStart, _bounceSizeStop; + CoordType _bounceSizeStart, _bounceSizeStop; TimeValue _bounceTime; }; -- cgit v1.2.3 From f72884cb7bbe594888f6d14a3e03c7839ef2c508 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 16 Dec 2011 23:24:55 -0500 Subject: PEGASUS: Cleanup some constants Added missing static qualifiers, get rid of some short/long --- engines/pegasus/neighborhood/mars/constants.h | 1446 ++++++++++---------- engines/pegasus/neighborhood/mars/energybeam.cpp | 12 +- .../pegasus/neighborhood/mars/gravitoncannon.cpp | 20 +- engines/pegasus/neighborhood/mars/mars.cpp | 20 +- engines/pegasus/neighborhood/mars/planetmover.cpp | 8 +- engines/pegasus/neighborhood/mars/robotship.cpp | 30 +- engines/pegasus/neighborhood/mars/robotship.h | 4 +- .../pegasus/neighborhood/mars/shuttleenergymeter.h | 14 +- engines/pegasus/neighborhood/mars/shuttlehud.cpp | 40 +- engines/pegasus/neighborhood/mars/shuttleweapon.h | 2 +- engines/pegasus/neighborhood/mars/spacechase3d.h | 6 +- engines/pegasus/neighborhood/mars/spacejunk.cpp | 16 +- engines/pegasus/neighborhood/mars/spacejunk.h | 4 +- engines/pegasus/neighborhood/mars/tractorbeam.cpp | 18 +- 14 files changed, 819 insertions(+), 821 deletions(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/constants.h b/engines/pegasus/neighborhood/mars/constants.h index 103518664c..b1013dacc5 100755 --- a/engines/pegasus/neighborhood/mars/constants.h +++ b/engines/pegasus/neighborhood/mars/constants.h @@ -32,909 +32,909 @@ namespace Pegasus { // Element Coordinates -const CoordType kUndoHiliteLeft = kNavAreaLeft + 140; -const CoordType kUndoHiliteTop = kNavAreaTop + 36; +static const CoordType kUndoHiliteLeft = kNavAreaLeft + 140; +static const CoordType kUndoHiliteTop = kNavAreaTop + 36; -const CoordType kCurrentGuessLeft = kNavAreaLeft + 146; -const CoordType kCurrentGuessTop = kNavAreaTop + 90; +static const CoordType kCurrentGuessLeft = kNavAreaLeft + 146; +static const CoordType kCurrentGuessTop = kNavAreaTop + 90; -const CoordType kReactorChoiceHiliteLeft = kNavAreaLeft + 116; -const CoordType kReactorChoiceHiliteTop = kNavAreaTop + 158; +static const CoordType kReactorChoiceHiliteLeft = kNavAreaLeft + 116; +static const CoordType kReactorChoiceHiliteTop = kNavAreaTop + 158; -const CoordType kReactorHistoryLeft = kNavAreaLeft + 302; -const CoordType kReactorHistoryTop = kNavAreaTop + 39; +static const CoordType kReactorHistoryLeft = kNavAreaLeft + 302; +static const CoordType kReactorHistoryTop = kNavAreaTop + 39; -const CoordType kAnswerLeft = kNavAreaLeft + 304; -const CoordType kAnswerTop = kNavAreaTop + 180; +static const CoordType kAnswerLeft = kNavAreaLeft + 304; +static const CoordType kAnswerTop = kNavAreaTop + 180; -const CoordType kShuttle1Left = 0; -const CoordType kShuttle1Top = 0; +static const CoordType kShuttle1Left = 0; +static const CoordType kShuttle1Top = 0; -const CoordType kShuttle2Left = 0; -const CoordType kShuttle2Top = 96; +static const CoordType kShuttle2Left = 0; +static const CoordType kShuttle2Top = 96; -const CoordType kShuttle3Left = 500; -const CoordType kShuttle3Top = 96; +static const CoordType kShuttle3Left = 500; +static const CoordType kShuttle3Top = 96; -const CoordType kShuttle4Left = 0; -const CoordType kShuttle4Top = 320; +static const CoordType kShuttle4Left = 0; +static const CoordType kShuttle4Top = 320; -const CoordType kShuttleWindowLeft = 140; -const CoordType kShuttleWindowTop = 96; -const CoordType kShuttleWindowWidth = 360; -const CoordType kShuttleWindowHeight = 224; +static const CoordType kShuttleWindowLeft = 140; +static const CoordType kShuttleWindowTop = 96; +static const CoordType kShuttleWindowWidth = 360; +static const CoordType kShuttleWindowHeight = 224; -const CoordType kShuttleWindowMidH = (kShuttleWindowLeft * 2 + kShuttleWindowWidth) / 2; -const CoordType kShuttleWindowMidV = (kShuttleWindowTop * 2 + kShuttleWindowHeight) / 2; +static const CoordType kShuttleWindowMidH = (kShuttleWindowLeft * 2 + kShuttleWindowWidth) / 2; +static const CoordType kShuttleWindowMidV = (kShuttleWindowTop * 2 + kShuttleWindowHeight) / 2; -const CoordType kShuttleLeftLeft = 0; -const CoordType kShuttleLeftTop = 128; +static const CoordType kShuttleLeftLeft = 0; +static const CoordType kShuttleLeftTop = 128; -const CoordType kShuttleRightLeft = 506; -const CoordType kShuttleRightTop = 128; +static const CoordType kShuttleRightLeft = 506; +static const CoordType kShuttleRightTop = 128; -const CoordType kShuttleLowerLeftLeft = 74; -const CoordType kShuttleLowerLeftTop = 358; +static const CoordType kShuttleLowerLeftLeft = 74; +static const CoordType kShuttleLowerLeftTop = 358; -const CoordType kShuttleLowerRightLeft = 486; -const CoordType kShuttleLowerRightTop = 354; +static const CoordType kShuttleLowerRightLeft = 486; +static const CoordType kShuttleLowerRightTop = 354; -const CoordType kShuttleCenterLeft = 260; -const CoordType kShuttleCenterTop = 336; +static const CoordType kShuttleCenterLeft = 260; +static const CoordType kShuttleCenterTop = 336; -const CoordType kShuttleUpperLeftLeft = 30; -const CoordType kShuttleUpperLeftTop = 32; +static const CoordType kShuttleUpperLeftLeft = 30; +static const CoordType kShuttleUpperLeftTop = 32; -const CoordType kShuttleUpperRightLeft = 506; -const CoordType kShuttleUpperRightTop = 52; +static const CoordType kShuttleUpperRightLeft = 506; +static const CoordType kShuttleUpperRightTop = 52; -const CoordType kShuttleLeftEnergyLeft = 110; -const CoordType kShuttleLeftEnergyTop = 186; +static const CoordType kShuttleLeftEnergyLeft = 110; +static const CoordType kShuttleLeftEnergyTop = 186; -const CoordType kShuttleRightEnergyLeft = 510; -const CoordType kShuttleRightEnergyTop = 186; +static const CoordType kShuttleRightEnergyLeft = 510; +static const CoordType kShuttleRightEnergyTop = 186; -const CoordType kShuttleEnergyLeft = 186; -const CoordType kShuttleEnergyTop = 60; -const CoordType kShuttleEnergyWidth = 252; -const CoordType kShuttleEnergyHeight = 22; +static const CoordType kShuttleEnergyLeft = 186; +static const CoordType kShuttleEnergyTop = 60; +static const CoordType kShuttleEnergyWidth = 252; +static const CoordType kShuttleEnergyHeight = 22; -const CoordType kPlanetStartLeft = kShuttleWindowLeft; -const CoordType kPlanetStartTop = kShuttleWindowTop + kShuttleWindowHeight; +static const CoordType kPlanetStartLeft = kShuttleWindowLeft; +static const CoordType kPlanetStartTop = kShuttleWindowTop + kShuttleWindowHeight; -const CoordType kPlanetStopLeft = kShuttleWindowLeft; -const CoordType kPlanetStopTop = kShuttleWindowTop + kShuttleWindowHeight - 100; +static const CoordType kPlanetStopLeft = kShuttleWindowLeft; +static const CoordType kPlanetStopTop = kShuttleWindowTop + kShuttleWindowHeight - 100; -const CoordType kShuttleTractorLeft = kShuttleWindowLeft + 6; -const CoordType kShuttleTractorTop = kShuttleWindowTop + 56; -const CoordType kShuttleTractorWidth = 348; -const CoordType kShuttleTractorHeight = 112; +static const CoordType kShuttleTractorLeft = kShuttleWindowLeft + 6; +static const CoordType kShuttleTractorTop = kShuttleWindowTop + 56; +static const CoordType kShuttleTractorWidth = 348; +static const CoordType kShuttleTractorHeight = 112; -const CoordType kShuttleJunkLeft = kShuttleWindowLeft + 6; -const CoordType kShuttleJunkTop = kShuttleWindowTop + 6; +static const CoordType kShuttleJunkLeft = kShuttleWindowLeft + 6; +static const CoordType kShuttleJunkTop = kShuttleWindowTop + 6; -const DisplayOrder kShuttlePlanetOrder = kInterfaceLayer; -const DisplayOrder kShuttleAlienShipOrder = kShuttlePlanetOrder + 1; -const DisplayOrder kShuttleRobotShipOrder = kShuttleAlienShipOrder + 1; -const DisplayOrder kShuttleTractorBeamMovieOrder = kShuttleRobotShipOrder + 1; -const DisplayOrder kShuttleWeaponBackOrder = kShuttleTractorBeamMovieOrder + 1; -const DisplayOrder kShuttleJunkOrder = kShuttleWeaponBackOrder + 1; -const DisplayOrder kShuttleWeaponFrontOrder = kShuttleJunkOrder + 1; -const DisplayOrder kShuttleTractorBeamOrder = kShuttleWeaponFrontOrder + 1; -const DisplayOrder kShuttleHUDOrder = kShuttleTractorBeamOrder + 1; -const DisplayOrder kShuttleBackgroundOrder = kShuttleHUDOrder + 1; -const DisplayOrder kShuttleMonitorOrder = kShuttleBackgroundOrder + 1; -const DisplayOrder kShuttleStatusOrder = kShuttleMonitorOrder + 1; +static const DisplayOrder kShuttlePlanetOrder = kInterfaceLayer; +static const DisplayOrder kShuttleAlienShipOrder = kShuttlePlanetOrder + 1; +static const DisplayOrder kShuttleRobotShipOrder = kShuttleAlienShipOrder + 1; +static const DisplayOrder kShuttleTractorBeamMovieOrder = kShuttleRobotShipOrder + 1; +static const DisplayOrder kShuttleWeaponBackOrder = kShuttleTractorBeamMovieOrder + 1; +static const DisplayOrder kShuttleJunkOrder = kShuttleWeaponBackOrder + 1; +static const DisplayOrder kShuttleWeaponFrontOrder = kShuttleJunkOrder + 1; +static const DisplayOrder kShuttleTractorBeamOrder = kShuttleWeaponFrontOrder + 1; +static const DisplayOrder kShuttleHUDOrder = kShuttleTractorBeamOrder + 1; +static const DisplayOrder kShuttleBackgroundOrder = kShuttleHUDOrder + 1; +static const DisplayOrder kShuttleMonitorOrder = kShuttleBackgroundOrder + 1; +static const DisplayOrder kShuttleStatusOrder = kShuttleMonitorOrder + 1; -const TimeValue kShuttleSwingStart = 0; -const TimeValue kShuttleSwingStop = 5 * 600; +static const TimeValue kShuttleSwingStart = 0; +static const TimeValue kShuttleSwingStop = 5 * 600; -const TimeValue kCanyonChaseStart = kShuttleSwingStop; -const TimeValue kCanyonChaseStop = 60 * 600 + 43 * 600 + 14 * 40; +static const TimeValue kCanyonChaseStart = kShuttleSwingStop; +static const TimeValue kCanyonChaseStop = 60 * 600 + 43 * 600 + 14 * 40; -const TimeValue kLaunchTubeReachedTime = 60 * 600 + 38 * 600 - kCanyonChaseStart; -const TimeValue kCanyonChaseFinishedTime = kCanyonChaseStop - kCanyonChaseStart - +static const TimeValue kLaunchTubeReachedTime = 60 * 600 + 38 * 600 - kCanyonChaseStart; +static const TimeValue kCanyonChaseFinishedTime = kCanyonChaseStop - kCanyonChaseStart - kLaunchTubeReachedTime; // Left shuttle. -const TimeValue kShuttleLeftIntroStart = 0; -const TimeValue kShuttleLeftIntroStop = 400; +static const TimeValue kShuttleLeftIntroStart = 0; +static const TimeValue kShuttleLeftIntroStop = 400; -const TimeValue kShuttleLeftBlankTime = 400; +static const TimeValue kShuttleLeftBlankTime = 400; -const TimeValue kShuttleLeftNormalTime = 440; +static const TimeValue kShuttleLeftNormalTime = 440; -const TimeValue kShuttleLeftAutoTestTime = 480; +static const TimeValue kShuttleLeftAutoTestTime = 480; -const TimeValue kShuttleLeftDamagedTime = 520; +static const TimeValue kShuttleLeftDamagedTime = 520; -const TimeValue kShuttleLeftDampingTime = 560; +static const TimeValue kShuttleLeftDampingTime = 560; -const TimeValue kShuttleLeftGravitonTime = 600; +static const TimeValue kShuttleLeftGravitonTime = 600; -const TimeValue kShuttleLeftTractorTime = 640; +static const TimeValue kShuttleLeftTractorTime = 640; // Right shuttle. -const TimeValue kShuttleRightIntroStart = 0; -const TimeValue kShuttleRightIntroStop = 400; +static const TimeValue kShuttleRightIntroStart = 0; +static const TimeValue kShuttleRightIntroStop = 400; -const TimeValue kShuttleRightDestroyedStart = 400; -const TimeValue kShuttleRightDestroyedStop = 840; +static const TimeValue kShuttleRightDestroyedStart = 400; +static const TimeValue kShuttleRightDestroyedStop = 840; -const TimeValue kShuttleRightBlankTime = 840; +static const TimeValue kShuttleRightBlankTime = 840; -const TimeValue kShuttleRightNormalTime = 880; +static const TimeValue kShuttleRightNormalTime = 880; -const TimeValue kShuttleRightDamagedTime = 920; +static const TimeValue kShuttleRightDamagedTime = 920; -const TimeValue kShuttleRightTargetLockTime = 960; +static const TimeValue kShuttleRightTargetLockTime = 960; -const TimeValue kShuttleRightGravitonTime = 1000; +static const TimeValue kShuttleRightGravitonTime = 1000; -const TimeValue kShuttleRightOverloadTime = 1040; +static const TimeValue kShuttleRightOverloadTime = 1040; // Lower Left shuttle. -const TimeValue kShuttleLowerLeftCollisionTime = 0; +static const TimeValue kShuttleLowerLeftCollisionTime = 0; -const TimeValue kShuttleLowerLeftTubeTime = 40; +static const TimeValue kShuttleLowerLeftTubeTime = 40; -const TimeValue kShuttleLowerLeftAutopilotTime = 80; +static const TimeValue kShuttleLowerLeftAutopilotTime = 80; // Lower Right shuttle. -const TimeValue kShuttleLowerRightOffTime = 0; +static const TimeValue kShuttleLowerRightOffTime = 0; -const TimeValue kShuttleLowerRightTrackingTime = 40; +static const TimeValue kShuttleLowerRightTrackingTime = 40; -const TimeValue kShuttleLowerRightTransportTime = 80; +static const TimeValue kShuttleLowerRightTransportTime = 80; -const TimeValue kShuttleLowerRightTransportHiliteTime = 120; +static const TimeValue kShuttleLowerRightTransportHiliteTime = 120; // Center shuttle. -const TimeValue kShuttleCenterBoardingTime = 0; +static const TimeValue kShuttleCenterBoardingTime = 0; -const TimeValue kShuttleCenterCheckTime = 40; +static const TimeValue kShuttleCenterCheckTime = 40; -const TimeValue kShuttleCenterNavCompTime = 80; +static const TimeValue kShuttleCenterNavCompTime = 80; -const TimeValue kShuttleCenterCommTime = 120; +static const TimeValue kShuttleCenterCommTime = 120; -const TimeValue kShuttleCenterWeaponsTime = 160; +static const TimeValue kShuttleCenterWeaponsTime = 160; -const TimeValue kShuttleCenterAllSystemsTime = 200; +static const TimeValue kShuttleCenterAllSystemsTime = 200; -const TimeValue kShuttleCenterSecureLooseTime = 240; +static const TimeValue kShuttleCenterSecureLooseTime = 240; -const TimeValue kShuttleCenterAutoTestTime = 280; +static const TimeValue kShuttleCenterAutoTestTime = 280; -const TimeValue kShuttleCenterLaunchTime = 320; +static const TimeValue kShuttleCenterLaunchTime = 320; -const TimeValue kShuttleCenterEnterTubeTime = 360; +static const TimeValue kShuttleCenterEnterTubeTime = 360; -const TimeValue kShuttleCenterTargetSightedTime = 400; +static const TimeValue kShuttleCenterTargetSightedTime = 400; -const TimeValue kShuttleCenterVerifyingTime = 440; +static const TimeValue kShuttleCenterVerifyingTime = 440; -const TimeValue kShuttleCenterScanningTime = 480; +static const TimeValue kShuttleCenterScanningTime = 480; -const TimeValue kShuttleCenterSafeTime = 520; +static const TimeValue kShuttleCenterSafeTime = 520; // Upper Left shuttle. -const TimeValue kShuttleUpperLeftDimTime = 0; +static const TimeValue kShuttleUpperLeftDimTime = 0; -const TimeValue kShuttleUpperLeftDampingTime = 40; +static const TimeValue kShuttleUpperLeftDampingTime = 40; -const TimeValue kShuttleUpperLeftGravitonTime = 80; +static const TimeValue kShuttleUpperLeftGravitonTime = 80; -const TimeValue kShuttleUpperLeftTractorTime = 120; +static const TimeValue kShuttleUpperLeftTractorTime = 120; // Upper Right shuttle. -const TimeValue kShuttleUpperRightLockedTime = 0; +static const TimeValue kShuttleUpperRightLockedTime = 0; -const TimeValue kShuttleUpperRightArmedTime = 40; +static const TimeValue kShuttleUpperRightArmedTime = 40; -const TimeValue kShuttleUpperRightAlienDestroyedTime = 80; +static const TimeValue kShuttleUpperRightAlienDestroyedTime = 80; -const TimeValue kShuttleUpperRightOverloadTime = 120; +static const TimeValue kShuttleUpperRightOverloadTime = 120; -const TimeValue kShuttleUpperRightTargetDestroyedTime = 160; +static const TimeValue kShuttleUpperRightTargetDestroyedTime = 160; // Shuttle distance -const int kShuttleDistance = 500; +static const int kShuttleDistance = 500; -const int kJunkMaxDistance = kShuttleDistance; -const int kJunkMinDistance = 40; +static const int kJunkMaxDistance = kShuttleDistance; +static const int kJunkMinDistance = 40; -const int kEnergyBeamMaxDistance = kShuttleDistance; -const int kEnergyBeamMinDistance = 40; +static const int kEnergyBeamMaxDistance = kShuttleDistance; +static const int kEnergyBeamMinDistance = 40; -const int kGravitonMaxDistance = kShuttleDistance; -const int kGravitonMinDistance = 40; +static const int kGravitonMaxDistance = kShuttleDistance; +static const int kGravitonMinDistance = 40; -const TimeValue kMarsOxyMaskOnIn = 0; -const TimeValue kMarsOxyMaskOnOut = 1560; +static const TimeValue kMarsOxyMaskOnIn = 0; +static const TimeValue kMarsOxyMaskOnOut = 1560; -const TimeValue kMarsAirlockButtonBeepIn = 1560; -const TimeValue kMarsAirlockButtonBeepOut = 1620; +static const TimeValue kMarsAirlockButtonBeepIn = 1560; +static const TimeValue kMarsAirlockButtonBeepOut = 1620; -const TimeValue kMarsColorMatchingButtonBeepIn = 1620; -const TimeValue kMarsColorMatchingButtonBeepOut = 1680; +static const TimeValue kMarsColorMatchingButtonBeepIn = 1620; +static const TimeValue kMarsColorMatchingButtonBeepOut = 1680; -const TimeValue kMarsKioskBeepIn = 1680; -const TimeValue kMarsKioskBeepOut = 1740; +static const TimeValue kMarsKioskBeepIn = 1680; +static const TimeValue kMarsKioskBeepOut = 1740; -const TimeValue kMarsBumpIntoWallIn = 1740; -const TimeValue kMarsBumpIntoWallOut = 1888; +static const TimeValue kMarsBumpIntoWallIn = 1740; +static const TimeValue kMarsBumpIntoWallOut = 1888; -const TimeValue kMarsGantryDoorCloseIn = 1888; -const TimeValue kMarsGantryDoorCloseOut = 2866; +static const TimeValue kMarsGantryDoorCloseIn = 1888; +static const TimeValue kMarsGantryDoorCloseOut = 2866; -const TimeValue kMarsTransportDoorCloseIn = 2866; -const TimeValue kMarsTransportDoorCloseOut = 3593; +static const TimeValue kMarsTransportDoorCloseIn = 2866; +static const TimeValue kMarsTransportDoorCloseOut = 3593; -const TimeValue kMarsAirlockPressurizeIn = 3593; -const TimeValue kMarsAirlockPressurizeOut = 4766; +static const TimeValue kMarsAirlockPressurizeIn = 3593; +static const TimeValue kMarsAirlockPressurizeOut = 4766; -const TimeValue kMarsBigAirlockDoorCloseIn = 4766; -const TimeValue kMarsBigAirlockDoorCloseOut = 7872; +static const TimeValue kMarsBigAirlockDoorCloseIn = 4766; +static const TimeValue kMarsBigAirlockDoorCloseOut = 7872; -const TimeValue kMarsSmallAirlockDoorCloseIn = 7872; -const TimeValue kMarsSmallAirlockDoorCloseOut = 10000; +static const TimeValue kMarsSmallAirlockDoorCloseIn = 7872; +static const TimeValue kMarsSmallAirlockDoorCloseOut = 10000; -const TimeValue kMarsMazeDoorCloseIn = 10000; -const TimeValue kMarsMazeDoorCloseOut = 10969; +static const TimeValue kMarsMazeDoorCloseIn = 10000; +static const TimeValue kMarsMazeDoorCloseOut = 10969; -const TimeValue kMarsRobotTakesTransportIn = 10969; -const TimeValue kMarsRobotTakesTransportOut = 12802; +static const TimeValue kMarsRobotTakesTransportIn = 10969; +static const TimeValue kMarsRobotTakesTransportOut = 12802; -const TimeValue kMarsPodDepartedUpperPlatformIn = 12802; -const TimeValue kMarsPodDepartedUpperPlatformOut = 15783; +static const TimeValue kMarsPodDepartedUpperPlatformIn = 12802; +static const TimeValue kMarsPodDepartedUpperPlatformOut = 15783; -const TimeValue kMarsPodDepartedLowerPlatformIn = 15783; -const TimeValue kMarsPodDepartedLowerPlatformOut = 18736; +static const TimeValue kMarsPodDepartedLowerPlatformIn = 15783; +static const TimeValue kMarsPodDepartedLowerPlatformOut = 18736; -const TimeValue kMarsPodArrivedUpperPlatformIn = 18736; -const TimeValue kMarsPodArrivedUpperPlatformOut = 21605; +static const TimeValue kMarsPodArrivedUpperPlatformIn = 18736; +static const TimeValue kMarsPodArrivedUpperPlatformOut = 21605; -const TimeValue kMarsCheckInRequiredIn = 21605; -const TimeValue kMarsCheckInRequiredOut = 27463; +static const TimeValue kMarsCheckInRequiredIn = 21605; +static const TimeValue kMarsCheckInRequiredOut = 27463; -const TimeValue kMarsCantOpenShuttleIn = 27463; -const TimeValue kMarsCantOpenShuttleOut = 29214; +static const TimeValue kMarsCantOpenShuttleIn = 27463; +static const TimeValue kMarsCantOpenShuttleOut = 29214; -const TimeValue kMarsShuttleLockOverrideIn = 29214; -const TimeValue kMarsShuttleLockOverrideOut = 30330; +static const TimeValue kMarsShuttleLockOverrideIn = 29214; +static const TimeValue kMarsShuttleLockOverrideOut = 30330; -const TimeValue kMarsNoShuttleIn = 30330; -const TimeValue kMarsNoShuttleOut = 31502; +static const TimeValue kMarsNoShuttleIn = 30330; +static const TimeValue kMarsNoShuttleOut = 31502; -const TimeValue kMustBeUnlockedIn = 31502; -const TimeValue kMustBeUnlockedOut = 33960; +static const TimeValue kMustBeUnlockedIn = 31502; +static const TimeValue kMustBeUnlockedOut = 33960; -const TimeValue kColorMatchBlueIn = 33960; -const TimeValue kColorMatchBlueOut = 34240; +static const TimeValue kColorMatchBlueIn = 33960; +static const TimeValue kColorMatchBlueOut = 34240; -const TimeValue kColorMatchRedIn = 34240; -const TimeValue kColorMatchRedOut = 34538; +static const TimeValue kColorMatchRedIn = 34240; +static const TimeValue kColorMatchRedOut = 34538; -const TimeValue kColorMatchGreenIn = 34538; -const TimeValue kColorMatchGreenOut = 34827; +static const TimeValue kColorMatchGreenIn = 34538; +static const TimeValue kColorMatchGreenOut = 34827; -const TimeValue kColorMatchYellowIn = 34827; -const TimeValue kColorMatchYellowOut = 35162; +static const TimeValue kColorMatchYellowIn = 34827; +static const TimeValue kColorMatchYellowOut = 35162; -const TimeValue kColorMatchPurpleIn = 35162; -const TimeValue kColorMatchPurpleOut = 35426; +static const TimeValue kColorMatchPurpleIn = 35162; +static const TimeValue kColorMatchPurpleOut = 35426; -const TimeValue kColorMatchZeroNodesIn = 35426; -const TimeValue kColorMatchZeroNodesOut = 36376; +static const TimeValue kColorMatchZeroNodesIn = 35426; +static const TimeValue kColorMatchZeroNodesOut = 36376; -const TimeValue kColorMatchOneNodeIn = 36376; -const TimeValue kColorMatchOneNodeOut = 37209; +static const TimeValue kColorMatchOneNodeIn = 36376; +static const TimeValue kColorMatchOneNodeOut = 37209; -const TimeValue kColorMatchTwoNodesIn = 37209; -const TimeValue kColorMatchTwoNodesOut = 37983; +static const TimeValue kColorMatchTwoNodesIn = 37209; +static const TimeValue kColorMatchTwoNodesOut = 37983; -const TimeValue kColorMatchThreeNodesIn = 37983; -const TimeValue kColorMatchThreeNodesOut = 38784; +static const TimeValue kColorMatchThreeNodesIn = 37983; +static const TimeValue kColorMatchThreeNodesOut = 38784; -const TimeValue kMarsShuttle1DepartedIn = 38784; -const TimeValue kMarsShuttle1DepartedOut = 40323; +static const TimeValue kMarsShuttle1DepartedIn = 38784; +static const TimeValue kMarsShuttle1DepartedOut = 40323; -const TimeValue kMarsShuttle2DepartedIn = 40323; -const TimeValue kMarsShuttle2DepartedOut = 41824; +static const TimeValue kMarsShuttle2DepartedIn = 40323; +static const TimeValue kMarsShuttle2DepartedOut = 41824; -const TimeValue kShuttleCockpitIn = 41824; -const TimeValue kShuttleCockpitOut = 43126; +static const TimeValue kShuttleCockpitIn = 41824; +static const TimeValue kShuttleCockpitOut = 43126; -const TimeValue kShuttleOnboardIn = 43126; -const TimeValue kShuttleOnboardOut = 44284; +static const TimeValue kShuttleOnboardIn = 43126; +static const TimeValue kShuttleOnboardOut = 44284; -const TimeValue kShuttleNavigationIn = 44284; -const TimeValue kShuttleNavigationOut = 46049; +static const TimeValue kShuttleNavigationIn = 44284; +static const TimeValue kShuttleNavigationOut = 46049; -const TimeValue kShuttleCommunicationIn = 46049; -const TimeValue kShuttleCommunicationOut = 47288; +static const TimeValue kShuttleCommunicationIn = 46049; +static const TimeValue kShuttleCommunicationOut = 47288; -const TimeValue kShuttleAutoTestingIn = 47288; -const TimeValue kShuttleAutoTestingOut = 48179; +static const TimeValue kShuttleAutoTestingIn = 47288; +static const TimeValue kShuttleAutoTestingOut = 48179; -const TimeValue kMarsThrusterAutoTestIn = 48179; -const TimeValue kMarsThrusterAutoTestOut = 49979; +static const TimeValue kMarsThrusterAutoTestIn = 48179; +static const TimeValue kMarsThrusterAutoTestOut = 49979; -const TimeValue kShuttleAllSystemsIn = 49979; -const TimeValue kShuttleAllSystemsOut = 51065; +static const TimeValue kShuttleAllSystemsIn = 49979; +static const TimeValue kShuttleAllSystemsOut = 51065; -const TimeValue kShuttleSecureLooseIn = 51065; -const TimeValue kShuttleSecureLooseOut = 52346; +static const TimeValue kShuttleSecureLooseIn = 51065; +static const TimeValue kShuttleSecureLooseOut = 52346; -const TimeValue kShuttlePrepareForDropIn = 52346; -const TimeValue kShuttlePrepareForDropOut = 53216; +static const TimeValue kShuttlePrepareForDropIn = 52346; +static const TimeValue kShuttlePrepareForDropOut = 53216; -const TimeValue kShuttleAllClearIn = 53216; -const TimeValue kShuttleAllClearOut = 54031; +static const TimeValue kShuttleAllClearIn = 53216; +static const TimeValue kShuttleAllClearOut = 54031; -const TimeValue kShuttleConfiguringIn = 54031; -const TimeValue kShuttleConfiguringOut = 54994; +static const TimeValue kShuttleConfiguringIn = 54031; +static const TimeValue kShuttleConfiguringOut = 54994; -const TimeValue kShuttleGeneratingIn = 54994; -const TimeValue kShuttleGeneratingOut = 56033; +static const TimeValue kShuttleGeneratingIn = 54994; +static const TimeValue kShuttleGeneratingOut = 56033; -const TimeValue kShuttleBreakawayIn = 56033; -const TimeValue kShuttleBreakawayOut = 57346; +static const TimeValue kShuttleBreakawayIn = 56033; +static const TimeValue kShuttleBreakawayOut = 57346; -const TimeValue kMarsAtmosphericBreakawayIn = 57346; -const TimeValue kMarsAtmosphericBreakawayOut = 59237; +static const TimeValue kMarsAtmosphericBreakawayIn = 57346; +static const TimeValue kMarsAtmosphericBreakawayOut = 59237; -const TimeValue kMarsCockpitChatterIn = 59237; -const TimeValue kMarsCockpitChatterOut = 70344; +static const TimeValue kMarsCockpitChatterIn = 59237; +static const TimeValue kMarsCockpitChatterOut = 70344; -const TimeValue kShuttleDamperDescIn = 70344; -const TimeValue kShuttleDamperDescOut = 73262; +static const TimeValue kShuttleDamperDescIn = 70344; +static const TimeValue kShuttleDamperDescOut = 73262; -const TimeValue kShuttleGravitonDescIn = 73262; -const TimeValue kShuttleGravitonDescOut = 75296; +static const TimeValue kShuttleGravitonDescIn = 73262; +static const TimeValue kShuttleGravitonDescOut = 75296; -const TimeValue kShuttleTractorDescIn = 75296; -const TimeValue kShuttleTractorDescOut = 78381; +static const TimeValue kShuttleTractorDescIn = 75296; +static const TimeValue kShuttleTractorDescOut = 78381; -const TimeValue kShuttleTargetSightedIn = 78381; -const TimeValue kShuttleTargetSightedOut = 79074; +static const TimeValue kShuttleTargetSightedIn = 78381; +static const TimeValue kShuttleTargetSightedOut = 79074; -const TimeValue kShuttleAutopilotEngagedIn = 79074; -const TimeValue kShuttleAutopilotEngagedOut = 80414; +static const TimeValue kShuttleAutopilotEngagedIn = 79074; +static const TimeValue kShuttleAutopilotEngagedOut = 80414; -const TimeValue kMarsEDBBlastIn = 80414; -const TimeValue kMarsEDBBlastOut = 80705; +static const TimeValue kMarsEDBBlastIn = 80414; +static const TimeValue kMarsEDBBlastOut = 80705; -const TimeValue kMarsGravitonBlastIn = 80705; -const TimeValue kMarsGravitonBlastOut = 81199; +static const TimeValue kMarsGravitonBlastIn = 80705; +static const TimeValue kMarsGravitonBlastOut = 81199; -const TimeValue kMarsJunkCollisionIn = 81199; -const TimeValue kMarsJunkCollisionOut = 81961; +static const TimeValue kMarsJunkCollisionIn = 81199; +static const TimeValue kMarsJunkCollisionOut = 81961; -const TimeValue kShuttleGravitonIn = 81961; -const TimeValue kShuttleGravitonOut = 82587; +static const TimeValue kShuttleGravitonIn = 81961; +static const TimeValue kShuttleGravitonOut = 82587; -const TimeValue kShuttleDampingBeamIn = 82587; -const TimeValue kShuttleDampingBeamOut = 83331; +static const TimeValue kShuttleDampingBeamIn = 82587; +static const TimeValue kShuttleDampingBeamOut = 83331; -const TimeValue kShuttleTractorBeamIn = 83331; -const TimeValue kShuttleTractorBeamOut = 83802; +static const TimeValue kShuttleTractorBeamIn = 83331; +static const TimeValue kShuttleTractorBeamOut = 83802; -const TimeValue kShuttleHullBreachIn = 83802; -const TimeValue kShuttleHullBreachOut = 84721; +static const TimeValue kShuttleHullBreachIn = 83802; +static const TimeValue kShuttleHullBreachOut = 84721; -const TimeValue kShuttleWingDamageIn = 84721; -const TimeValue kShuttleWingDamageOut = 85640; +static const TimeValue kShuttleWingDamageIn = 84721; +static const TimeValue kShuttleWingDamageOut = 85640; -const TimeValue kShuttleHullDamageIn = 85640; -const TimeValue kShuttleHullDamageOut = 86513; +static const TimeValue kShuttleHullDamageIn = 85640; +static const TimeValue kShuttleHullDamageOut = 86513; -const TimeValue kShuttleEnergyTooLowIn = 86513; -const TimeValue kShuttleEnergyTooLowOut = 87578; +static const TimeValue kShuttleEnergyTooLowIn = 86513; +static const TimeValue kShuttleEnergyTooLowOut = 87578; -const TimeValue kShuttleTractorLimitedIn = 87578; -const TimeValue kShuttleTractorLimitedOut = 89164; +static const TimeValue kShuttleTractorLimitedIn = 87578; +static const TimeValue kShuttleTractorLimitedOut = 89164; -const TimeValue kShuttleCantHoldIn = 89164; -const TimeValue kShuttleCantHoldOut = 90945; +static const TimeValue kShuttleCantHoldIn = 89164; +static const TimeValue kShuttleCantHoldOut = 90945; -const TimeValue kShuttleBrokeFreeIn = 90945; -const TimeValue kShuttleBrokeFreeOut = 92322; +static const TimeValue kShuttleBrokeFreeIn = 90945; +static const TimeValue kShuttleBrokeFreeOut = 92322; -const TimeValue kShuttleDestroyedIn = 92322; -const TimeValue kShuttleDestroyedOut = 93189; +static const TimeValue kShuttleDestroyedIn = 92322; +static const TimeValue kShuttleDestroyedOut = 93189; -const TimeValue kShuttleCoordinatesIn = 93189; -const TimeValue kShuttleCoordinatesOut = 94018; +static const TimeValue kShuttleCoordinatesIn = 93189; +static const TimeValue kShuttleCoordinatesOut = 94018; -const TimeValue kShuttleScanningIn = 94018; -const TimeValue kShuttleScanningOut = 94975; +static const TimeValue kShuttleScanningIn = 94018; +static const TimeValue kShuttleScanningOut = 94975; -const TimeValue kShuttleSafeIn = 94975; -const TimeValue kShuttleSafeOut = 96176; +static const TimeValue kShuttleSafeIn = 94975; +static const TimeValue kShuttleSafeOut = 96176; -const TimeValue kShuttleOverloadedIn = 96176; -const TimeValue kShuttleOverloadedOut = 101308; +static const TimeValue kShuttleOverloadedIn = 96176; +static const TimeValue kShuttleOverloadedOut = 101308; -const TimeScale kMarsMovieScale = 600; -const TimeScale kMarsFramesPerSecond = 15; -const TimeScale kMarsFrameDuration = 40; +static const TimeScale kMarsMovieScale = 600; +static const TimeScale kMarsFramesPerSecond = 15; +static const TimeScale kMarsFrameDuration = 40; // Alternate IDs. -const AlternateID kAltMarsNormal = 0; -const AlternateID kAltMarsPodAtMars34 = 1; -const AlternateID kAltMarsTookCard = 2; -const AlternateID kAltMars35AirlockEast = 3; -const AlternateID kAltMars35AirlockWest = 4; -const AlternateID kAltMarsPodAtMars45 = 5; -const AlternateID kAltMarsTookMask = 6; -const AlternateID kAltMarsMaskOnFiller = 7; -const AlternateID kAltMars60AirlockEast = 8; -const AlternateID kAltMars60AirlockWest = 9; +static const AlternateID kAltMarsNormal = 0; +static const AlternateID kAltMarsPodAtMars34 = 1; +static const AlternateID kAltMarsTookCard = 2; +static const AlternateID kAltMars35AirlockEast = 3; +static const AlternateID kAltMars35AirlockWest = 4; +static const AlternateID kAltMarsPodAtMars45 = 5; +static const AlternateID kAltMarsTookMask = 6; +static const AlternateID kAltMarsMaskOnFiller = 7; +static const AlternateID kAltMars60AirlockEast = 8; +static const AlternateID kAltMars60AirlockWest = 9; // Room IDs. -const RoomID kMars0A = 0; -const RoomID kMars00 = 1; -const RoomID kMars01 = 2; -const RoomID kMars02 = 3; -const RoomID kMars03 = 4; -const RoomID kMars04 = 5; -const RoomID kMars05 = 6; -const RoomID kMars06 = 7; -const RoomID kMars07 = 8; -const RoomID kMars08 = 9; -const RoomID kMars09 = 10; -const RoomID kMars10 = 11; -const RoomID kMars11 = 12; -const RoomID kMars12 = 13; -const RoomID kMars13 = 14; -const RoomID kMars14 = 15; -const RoomID kMars15 = 16; -const RoomID kMars16 = 17; -const RoomID kMars17 = 18; -const RoomID kMars18 = 19; -const RoomID kMars19 = 20; -const RoomID kMars20 = 21; -const RoomID kMars21 = 22; -const RoomID kMars22 = 23; -const RoomID kMars23 = 24; -const RoomID kMars24 = 25; -const RoomID kMars25 = 26; -const RoomID kMars26 = 27; -const RoomID kMars27 = 28; -const RoomID kMars28 = 29; -const RoomID kMars29 = 30; -const RoomID kMars30 = 31; -const RoomID kMars31 = 32; -const RoomID kMars31South = 33; -const RoomID kMars32 = 34; -const RoomID kMars33 = 35; -const RoomID kMars33North = 36; -const RoomID kMars34 = 37; -const RoomID kMars35 = 38; -const RoomID kMars36 = 39; -const RoomID kMars37 = 40; -const RoomID kMars38 = 41; -const RoomID kMars39 = 42; -const RoomID kMars41 = 43; -const RoomID kMars42 = 44; -const RoomID kMars43 = 45; -const RoomID kMars44 = 46; -const RoomID kMars45 = 47; -const RoomID kMars46 = 48; -const RoomID kMars47 = 49; -const RoomID kMars48 = 50; -const RoomID kMars49 = 51; -const RoomID kMars50 = 52; -const RoomID kMars51 = 53; -const RoomID kMars52 = 54; -const RoomID kMars54 = 55; -const RoomID kMars56 = 56; -const RoomID kMars58 = 57; -const RoomID kMars60 = 58; -const RoomID kMarsRobotShuttle = 59; -const RoomID kMarsMaze004 = 60; -const RoomID kMarsMaze005 = 61; -const RoomID kMarsMaze006 = 62; -const RoomID kMarsMaze007 = 63; -const RoomID kMarsMaze008 = 64; -const RoomID kMarsMaze009 = 65; -const RoomID kMarsMaze010 = 66; -const RoomID kMarsMaze011 = 67; -const RoomID kMarsMaze012 = 68; -const RoomID kMarsMaze015 = 69; -const RoomID kMarsMaze016 = 70; -const RoomID kMarsMaze017 = 71; -const RoomID kMarsMaze018 = 72; -const RoomID kMarsMaze019 = 73; -const RoomID kMarsMaze020 = 74; -const RoomID kMarsMaze021 = 75; -const RoomID kMarsMaze022 = 76; -const RoomID kMarsMaze023 = 77; -const RoomID kMarsMaze024 = 78; -const RoomID kMarsMaze025 = 79; -const RoomID kMarsMaze026 = 80; -const RoomID kMarsMaze027 = 81; -const RoomID kMarsMaze028 = 82; -const RoomID kMarsMaze031 = 83; -const RoomID kMarsMaze032 = 84; -const RoomID kMarsMaze033 = 85; -const RoomID kMarsMaze034 = 86; -const RoomID kMarsMaze035 = 87; -const RoomID kMarsMaze036 = 88; -const RoomID kMarsMaze037 = 89; -const RoomID kMarsMaze038 = 90; -const RoomID kMarsMaze039 = 91; -const RoomID kMarsMaze042 = 92; -const RoomID kMarsMaze043 = 93; -const RoomID kMarsMaze044 = 94; -const RoomID kMarsMaze045 = 95; -const RoomID kMarsMaze046 = 96; -const RoomID kMarsMaze047 = 97; -const RoomID kMarsMaze049 = 98; -const RoomID kMarsMaze050 = 99; -const RoomID kMarsMaze051 = 100; -const RoomID kMarsMaze052 = 101; -const RoomID kMarsMaze053 = 102; -const RoomID kMarsMaze054 = 103; -const RoomID kMarsMaze055 = 104; -const RoomID kMarsMaze056 = 105; -const RoomID kMarsMaze057 = 106; -const RoomID kMarsMaze058 = 107; -const RoomID kMarsMaze059 = 108; -const RoomID kMarsMaze060 = 109; -const RoomID kMarsMaze061 = 110; -const RoomID kMarsMaze063 = 111; -const RoomID kMarsMaze064 = 112; -const RoomID kMarsMaze065 = 113; -const RoomID kMarsMaze066 = 114; -const RoomID kMarsMaze067 = 115; -const RoomID kMarsMaze068 = 116; -const RoomID kMarsMaze069 = 117; -const RoomID kMarsMaze070 = 118; -const RoomID kMarsMaze071 = 119; -const RoomID kMarsMaze072 = 120; -const RoomID kMarsMaze074 = 121; -const RoomID kMarsMaze076 = 122; -const RoomID kMarsMaze078 = 123; -const RoomID kMarsMaze079 = 124; -const RoomID kMarsMaze081 = 125; -const RoomID kMarsMaze083 = 126; -const RoomID kMarsMaze084 = 127; -const RoomID kMarsMaze085 = 128; -const RoomID kMarsMaze086 = 129; -const RoomID kMarsMaze087 = 130; -const RoomID kMarsMaze088 = 131; -const RoomID kMarsMaze089 = 132; -const RoomID kMarsMaze090 = 133; -const RoomID kMarsMaze091 = 134; -const RoomID kMarsMaze092 = 135; -const RoomID kMarsMaze093 = 136; -const RoomID kMarsMaze098 = 137; -const RoomID kMarsMaze099 = 138; -const RoomID kMarsMaze100 = 139; -const RoomID kMarsMaze101 = 140; -const RoomID kMarsMaze104 = 141; -const RoomID kMarsMaze105 = 142; -const RoomID kMarsMaze106 = 143; -const RoomID kMarsMaze107 = 144; -const RoomID kMarsMaze108 = 145; -const RoomID kMarsMaze111 = 146; -const RoomID kMarsMaze113 = 147; -const RoomID kMarsMaze114 = 148; -const RoomID kMarsMaze115 = 149; -const RoomID kMarsMaze116 = 150; -const RoomID kMarsMaze117 = 151; -const RoomID kMarsMaze118 = 152; -const RoomID kMarsMaze119 = 153; -const RoomID kMarsMaze120 = 154; -const RoomID kMarsMaze121 = 155; -const RoomID kMarsMaze122 = 156; -const RoomID kMarsMaze123 = 157; -const RoomID kMarsMaze124 = 158; -const RoomID kMarsMaze125 = 159; -const RoomID kMarsMaze126 = 160; -const RoomID kMarsMaze127 = 161; -const RoomID kMarsMaze128 = 162; -const RoomID kMarsMaze129 = 163; -const RoomID kMarsMaze130 = 164; -const RoomID kMarsMaze131 = 165; -const RoomID kMarsMaze132 = 166; -const RoomID kMarsMaze133 = 167; -const RoomID kMarsMaze136 = 168; -const RoomID kMarsMaze137 = 169; -const RoomID kMarsMaze138 = 170; -const RoomID kMarsMaze139 = 171; -const RoomID kMarsMaze140 = 172; -const RoomID kMarsMaze141 = 173; -const RoomID kMarsMaze142 = 174; -const RoomID kMarsMaze143 = 175; -const RoomID kMarsMaze144 = 176; -const RoomID kMarsMaze145 = 177; -const RoomID kMarsMaze146 = 178; -const RoomID kMarsMaze147 = 179; -const RoomID kMarsMaze148 = 180; -const RoomID kMarsMaze149 = 181; -const RoomID kMarsMaze152 = 182; -const RoomID kMarsMaze153 = 183; -const RoomID kMarsMaze154 = 184; -const RoomID kMarsMaze155 = 185; -const RoomID kMarsMaze156 = 186; -const RoomID kMarsMaze157 = 187; -const RoomID kMarsMaze159 = 188; -const RoomID kMarsMaze160 = 189; -const RoomID kMarsMaze161 = 190; -const RoomID kMarsMaze162 = 191; -const RoomID kMarsMaze163 = 192; -const RoomID kMarsMaze164 = 193; -const RoomID kMarsMaze165 = 194; -const RoomID kMarsMaze166 = 195; -const RoomID kMarsMaze167 = 196; -const RoomID kMarsMaze168 = 197; -const RoomID kMarsMaze169 = 198; -const RoomID kMarsMaze170 = 199; -const RoomID kMarsMaze171 = 200; -const RoomID kMarsMaze172 = 201; -const RoomID kMarsMaze173 = 202; -const RoomID kMarsMaze174 = 203; -const RoomID kMarsMaze175 = 204; -const RoomID kMarsMaze177 = 205; -const RoomID kMarsMaze178 = 206; -const RoomID kMarsMaze179 = 207; -const RoomID kMarsMaze180 = 208; -const RoomID kMarsMaze181 = 209; -const RoomID kMarsMaze182 = 210; -const RoomID kMarsMaze183 = 211; -const RoomID kMarsMaze184 = 212; -const RoomID kMarsMaze187 = 213; -const RoomID kMarsMaze188 = 214; -const RoomID kMarsMaze189 = 215; -const RoomID kMarsMaze190 = 216; -const RoomID kMarsMaze191 = 217; -const RoomID kMarsMaze192 = 218; -const RoomID kMarsMaze193 = 219; -const RoomID kMarsMaze194 = 220; -const RoomID kMarsMaze195 = 221; -const RoomID kMarsMaze198 = 222; -const RoomID kMarsMaze199 = 223; -const RoomID kMarsMaze200 = 224; -const RoomID kMarsDeathRoom = 225; +static const RoomID kMars0A = 0; +static const RoomID kMars00 = 1; +static const RoomID kMars01 = 2; +static const RoomID kMars02 = 3; +static const RoomID kMars03 = 4; +static const RoomID kMars04 = 5; +static const RoomID kMars05 = 6; +static const RoomID kMars06 = 7; +static const RoomID kMars07 = 8; +static const RoomID kMars08 = 9; +static const RoomID kMars09 = 10; +static const RoomID kMars10 = 11; +static const RoomID kMars11 = 12; +static const RoomID kMars12 = 13; +static const RoomID kMars13 = 14; +static const RoomID kMars14 = 15; +static const RoomID kMars15 = 16; +static const RoomID kMars16 = 17; +static const RoomID kMars17 = 18; +static const RoomID kMars18 = 19; +static const RoomID kMars19 = 20; +static const RoomID kMars20 = 21; +static const RoomID kMars21 = 22; +static const RoomID kMars22 = 23; +static const RoomID kMars23 = 24; +static const RoomID kMars24 = 25; +static const RoomID kMars25 = 26; +static const RoomID kMars26 = 27; +static const RoomID kMars27 = 28; +static const RoomID kMars28 = 29; +static const RoomID kMars29 = 30; +static const RoomID kMars30 = 31; +static const RoomID kMars31 = 32; +static const RoomID kMars31South = 33; +static const RoomID kMars32 = 34; +static const RoomID kMars33 = 35; +static const RoomID kMars33North = 36; +static const RoomID kMars34 = 37; +static const RoomID kMars35 = 38; +static const RoomID kMars36 = 39; +static const RoomID kMars37 = 40; +static const RoomID kMars38 = 41; +static const RoomID kMars39 = 42; +static const RoomID kMars41 = 43; +static const RoomID kMars42 = 44; +static const RoomID kMars43 = 45; +static const RoomID kMars44 = 46; +static const RoomID kMars45 = 47; +static const RoomID kMars46 = 48; +static const RoomID kMars47 = 49; +static const RoomID kMars48 = 50; +static const RoomID kMars49 = 51; +static const RoomID kMars50 = 52; +static const RoomID kMars51 = 53; +static const RoomID kMars52 = 54; +static const RoomID kMars54 = 55; +static const RoomID kMars56 = 56; +static const RoomID kMars58 = 57; +static const RoomID kMars60 = 58; +static const RoomID kMarsRobotShuttle = 59; +static const RoomID kMarsMaze004 = 60; +static const RoomID kMarsMaze005 = 61; +static const RoomID kMarsMaze006 = 62; +static const RoomID kMarsMaze007 = 63; +static const RoomID kMarsMaze008 = 64; +static const RoomID kMarsMaze009 = 65; +static const RoomID kMarsMaze010 = 66; +static const RoomID kMarsMaze011 = 67; +static const RoomID kMarsMaze012 = 68; +static const RoomID kMarsMaze015 = 69; +static const RoomID kMarsMaze016 = 70; +static const RoomID kMarsMaze017 = 71; +static const RoomID kMarsMaze018 = 72; +static const RoomID kMarsMaze019 = 73; +static const RoomID kMarsMaze020 = 74; +static const RoomID kMarsMaze021 = 75; +static const RoomID kMarsMaze022 = 76; +static const RoomID kMarsMaze023 = 77; +static const RoomID kMarsMaze024 = 78; +static const RoomID kMarsMaze025 = 79; +static const RoomID kMarsMaze026 = 80; +static const RoomID kMarsMaze027 = 81; +static const RoomID kMarsMaze028 = 82; +static const RoomID kMarsMaze031 = 83; +static const RoomID kMarsMaze032 = 84; +static const RoomID kMarsMaze033 = 85; +static const RoomID kMarsMaze034 = 86; +static const RoomID kMarsMaze035 = 87; +static const RoomID kMarsMaze036 = 88; +static const RoomID kMarsMaze037 = 89; +static const RoomID kMarsMaze038 = 90; +static const RoomID kMarsMaze039 = 91; +static const RoomID kMarsMaze042 = 92; +static const RoomID kMarsMaze043 = 93; +static const RoomID kMarsMaze044 = 94; +static const RoomID kMarsMaze045 = 95; +static const RoomID kMarsMaze046 = 96; +static const RoomID kMarsMaze047 = 97; +static const RoomID kMarsMaze049 = 98; +static const RoomID kMarsMaze050 = 99; +static const RoomID kMarsMaze051 = 100; +static const RoomID kMarsMaze052 = 101; +static const RoomID kMarsMaze053 = 102; +static const RoomID kMarsMaze054 = 103; +static const RoomID kMarsMaze055 = 104; +static const RoomID kMarsMaze056 = 105; +static const RoomID kMarsMaze057 = 106; +static const RoomID kMarsMaze058 = 107; +static const RoomID kMarsMaze059 = 108; +static const RoomID kMarsMaze060 = 109; +static const RoomID kMarsMaze061 = 110; +static const RoomID kMarsMaze063 = 111; +static const RoomID kMarsMaze064 = 112; +static const RoomID kMarsMaze065 = 113; +static const RoomID kMarsMaze066 = 114; +static const RoomID kMarsMaze067 = 115; +static const RoomID kMarsMaze068 = 116; +static const RoomID kMarsMaze069 = 117; +static const RoomID kMarsMaze070 = 118; +static const RoomID kMarsMaze071 = 119; +static const RoomID kMarsMaze072 = 120; +static const RoomID kMarsMaze074 = 121; +static const RoomID kMarsMaze076 = 122; +static const RoomID kMarsMaze078 = 123; +static const RoomID kMarsMaze079 = 124; +static const RoomID kMarsMaze081 = 125; +static const RoomID kMarsMaze083 = 126; +static const RoomID kMarsMaze084 = 127; +static const RoomID kMarsMaze085 = 128; +static const RoomID kMarsMaze086 = 129; +static const RoomID kMarsMaze087 = 130; +static const RoomID kMarsMaze088 = 131; +static const RoomID kMarsMaze089 = 132; +static const RoomID kMarsMaze090 = 133; +static const RoomID kMarsMaze091 = 134; +static const RoomID kMarsMaze092 = 135; +static const RoomID kMarsMaze093 = 136; +static const RoomID kMarsMaze098 = 137; +static const RoomID kMarsMaze099 = 138; +static const RoomID kMarsMaze100 = 139; +static const RoomID kMarsMaze101 = 140; +static const RoomID kMarsMaze104 = 141; +static const RoomID kMarsMaze105 = 142; +static const RoomID kMarsMaze106 = 143; +static const RoomID kMarsMaze107 = 144; +static const RoomID kMarsMaze108 = 145; +static const RoomID kMarsMaze111 = 146; +static const RoomID kMarsMaze113 = 147; +static const RoomID kMarsMaze114 = 148; +static const RoomID kMarsMaze115 = 149; +static const RoomID kMarsMaze116 = 150; +static const RoomID kMarsMaze117 = 151; +static const RoomID kMarsMaze118 = 152; +static const RoomID kMarsMaze119 = 153; +static const RoomID kMarsMaze120 = 154; +static const RoomID kMarsMaze121 = 155; +static const RoomID kMarsMaze122 = 156; +static const RoomID kMarsMaze123 = 157; +static const RoomID kMarsMaze124 = 158; +static const RoomID kMarsMaze125 = 159; +static const RoomID kMarsMaze126 = 160; +static const RoomID kMarsMaze127 = 161; +static const RoomID kMarsMaze128 = 162; +static const RoomID kMarsMaze129 = 163; +static const RoomID kMarsMaze130 = 164; +static const RoomID kMarsMaze131 = 165; +static const RoomID kMarsMaze132 = 166; +static const RoomID kMarsMaze133 = 167; +static const RoomID kMarsMaze136 = 168; +static const RoomID kMarsMaze137 = 169; +static const RoomID kMarsMaze138 = 170; +static const RoomID kMarsMaze139 = 171; +static const RoomID kMarsMaze140 = 172; +static const RoomID kMarsMaze141 = 173; +static const RoomID kMarsMaze142 = 174; +static const RoomID kMarsMaze143 = 175; +static const RoomID kMarsMaze144 = 176; +static const RoomID kMarsMaze145 = 177; +static const RoomID kMarsMaze146 = 178; +static const RoomID kMarsMaze147 = 179; +static const RoomID kMarsMaze148 = 180; +static const RoomID kMarsMaze149 = 181; +static const RoomID kMarsMaze152 = 182; +static const RoomID kMarsMaze153 = 183; +static const RoomID kMarsMaze154 = 184; +static const RoomID kMarsMaze155 = 185; +static const RoomID kMarsMaze156 = 186; +static const RoomID kMarsMaze157 = 187; +static const RoomID kMarsMaze159 = 188; +static const RoomID kMarsMaze160 = 189; +static const RoomID kMarsMaze161 = 190; +static const RoomID kMarsMaze162 = 191; +static const RoomID kMarsMaze163 = 192; +static const RoomID kMarsMaze164 = 193; +static const RoomID kMarsMaze165 = 194; +static const RoomID kMarsMaze166 = 195; +static const RoomID kMarsMaze167 = 196; +static const RoomID kMarsMaze168 = 197; +static const RoomID kMarsMaze169 = 198; +static const RoomID kMarsMaze170 = 199; +static const RoomID kMarsMaze171 = 200; +static const RoomID kMarsMaze172 = 201; +static const RoomID kMarsMaze173 = 202; +static const RoomID kMarsMaze174 = 203; +static const RoomID kMarsMaze175 = 204; +static const RoomID kMarsMaze177 = 205; +static const RoomID kMarsMaze178 = 206; +static const RoomID kMarsMaze179 = 207; +static const RoomID kMarsMaze180 = 208; +static const RoomID kMarsMaze181 = 209; +static const RoomID kMarsMaze182 = 210; +static const RoomID kMarsMaze183 = 211; +static const RoomID kMarsMaze184 = 212; +static const RoomID kMarsMaze187 = 213; +static const RoomID kMarsMaze188 = 214; +static const RoomID kMarsMaze189 = 215; +static const RoomID kMarsMaze190 = 216; +static const RoomID kMarsMaze191 = 217; +static const RoomID kMarsMaze192 = 218; +static const RoomID kMarsMaze193 = 219; +static const RoomID kMarsMaze194 = 220; +static const RoomID kMarsMaze195 = 221; +static const RoomID kMarsMaze198 = 222; +static const RoomID kMarsMaze199 = 223; +static const RoomID kMarsMaze200 = 224; +static const RoomID kMarsDeathRoom = 225; // Hot Spot Activation IDs. -const HotSpotActivationID kActivationReadyForKiosk = 1; -const HotSpotActivationID kActivationKioskChoice = 2; -const HotSpotActivationID kActivationTunnelMapReady = 3; -const HotSpotActivationID kActivateMarsPodClosed = 4; -const HotSpotActivationID kActivateMarsPodOpen = 5; -const HotSpotActivationID kActivateReadyToPressurizeAirlock = 6; -const HotSpotActivationID kActivateAirlockPressurized = 7; -const HotSpotActivationID kActivateMaskOnHolder = 8; -const HotSpotActivationID kActivateMaskOnFiller = 9; -const HotSpotActivationID kActivateReactorPlatformOut = 10; -const HotSpotActivationID kActivateReactorPlatformIn = 11; -const HotSpotActivationID kActivateReactorAskLowerScreen = 12; -const HotSpotActivationID kActivateReactorReadyForNitrogen = 13; -const HotSpotActivationID kActivateReactorReadyForCrowBar = 14; -const HotSpotActivationID kActivateReactorAskOperation = 15; -const HotSpotActivationID kActivateReactorRanEvaluation = 16; -const HotSpotActivationID kActivateReactorRanDiagnostics = 17; -const HotSpotActivationID kActivateReactorAnalyzed = 18; -const HotSpotActivationID kActivateReactorInstructions = 19; -const HotSpotActivationID kActivateReactorInGame = 20; -const HotSpotActivationID kActivateReactorBombSafe = 21; -const HotSpotActivationID kActivateReactorBombExposed = 22; -const HotSpotActivationID kActivationRobotHeadClosed = 23; -const HotSpotActivationID kActivationRobotHeadOpen = 24; +static const HotSpotActivationID kActivationReadyForKiosk = 1; +static const HotSpotActivationID kActivationKioskChoice = 2; +static const HotSpotActivationID kActivationTunnelMapReady = 3; +static const HotSpotActivationID kActivateMarsPodClosed = 4; +static const HotSpotActivationID kActivateMarsPodOpen = 5; +static const HotSpotActivationID kActivateReadyToPressurizeAirlock = 6; +static const HotSpotActivationID kActivateAirlockPressurized = 7; +static const HotSpotActivationID kActivateMaskOnHolder = 8; +static const HotSpotActivationID kActivateMaskOnFiller = 9; +static const HotSpotActivationID kActivateReactorPlatformOut = 10; +static const HotSpotActivationID kActivateReactorPlatformIn = 11; +static const HotSpotActivationID kActivateReactorAskLowerScreen = 12; +static const HotSpotActivationID kActivateReactorReadyForNitrogen = 13; +static const HotSpotActivationID kActivateReactorReadyForCrowBar = 14; +static const HotSpotActivationID kActivateReactorAskOperation = 15; +static const HotSpotActivationID kActivateReactorRanEvaluation = 16; +static const HotSpotActivationID kActivateReactorRanDiagnostics = 17; +static const HotSpotActivationID kActivateReactorAnalyzed = 18; +static const HotSpotActivationID kActivateReactorInstructions = 19; +static const HotSpotActivationID kActivateReactorInGame = 20; +static const HotSpotActivationID kActivateReactorBombSafe = 21; +static const HotSpotActivationID kActivateReactorBombExposed = 22; +static const HotSpotActivationID kActivationRobotHeadClosed = 23; +static const HotSpotActivationID kActivationRobotHeadOpen = 24; // Hot Spot IDs. -const HotSpotID kMars11NorthKioskSpotID = 5000; -const HotSpotID kMars11NorthKioskSightsSpotID = 5001; -const HotSpotID kMars11NorthKioskColonySpotID = 5002; -const HotSpotID kMars12NorthKioskSpotID = 5003; -const HotSpotID kMars12NorthKioskSightsSpotID = 5004; -const HotSpotID kMars12NorthKioskColonySpotID = 5005; -const HotSpotID kMars31SouthSpotID = 5006; -const HotSpotID kMars31SouthOutSpotID = 5007; -const HotSpotID kMars31SouthCardSpotID = 5008; -const HotSpotID kMars33NorthSpotID = 5009; -const HotSpotID kMars33NorthOutSpotID = 5010; -const HotSpotID kMars33NorthMonitorSpotID = 5011; -const HotSpotID kMars34NorthCardDropSpotID = 5012; -const HotSpotID kMars34SouthOpenStorageSpotID = 5013; -const HotSpotID kMars34SouthCloseStorageSpotID = 5014; -const HotSpotID kMars34SouthCrowbarSpotID = 5015; -const HotSpotID kMars35EastPressurizeSpotID = 5016; -const HotSpotID kMars35EastSpinSpotID = 5017; -const HotSpotID kMars35WestPressurizeSpotID = 5018; -const HotSpotID kMars35WestSpinSpotID = 5019; -const HotSpotID kMars45NorthOpenStorageSpotID = 5020; -const HotSpotID kMars45NorthCloseStorageSpotID = 5021; -const HotSpotID kMars45NorthCrowbarSpotID = 5022; -const HotSpotID kAttackRobotHotSpotID = 5023; -const HotSpotID kMars49AirMaskSpotID = 5024; -const HotSpotID kMars49AirMaskFilledSpotID = 5025; -const HotSpotID kMars49AirFillingDropSpotID = 5026; -const HotSpotID kMars52MoveLeftSpotID = 5027; -const HotSpotID kMars52MoveRightSpotID = 5028; -const HotSpotID kMars52ExtractSpotID = 5029; -const HotSpotID kMars53RetractSpotID = 5030; -const HotSpotID kMars54MoveLeftSpotID = 5031; -const HotSpotID kMars54MoveRightSpotID = 5032; -const HotSpotID kMars54ExtractSpotID = 5033; -const HotSpotID kMars55RetractSpotID = 5034; -const HotSpotID kMars56MoveLeftSpotID = 5035; -const HotSpotID kMars56MoveRightSpotID = 5036; -const HotSpotID kMars56ExtractSpotID = 5037; -const HotSpotID kMars57RetractSpotID = 5038; -const HotSpotID kMars57LowerScreenSpotID = 5039; -const HotSpotID kMars57Retract2SpotID = 5040; -const HotSpotID kMars57DropNitrogenSpotID = 5041; -const HotSpotID kMars57DropCrowBarSpotID = 5042; -const HotSpotID kMars57CantOpenPanelSpotID = 5043; -const HotSpotID kMars57ShieldEvaluationSpotID = 5044; -const HotSpotID kMars57MeasureOutputSpotID = 5045; -const HotSpotID kMars57RunDiagnosticsSpotID = 5046; -const HotSpotID kMars57BackToOperationMenuSpotID = 5047; -const HotSpotID kMars57AnalyzeObjectSpotID = 5048; -const HotSpotID kMars57RemoveObjectMenuSpotID = 5049; -const HotSpotID kMars57CircuitLinkSpotID = 5050; -const HotSpotID kMars57CancelCircuitLinkSpotID = 5051; -const HotSpotID kMars57GameInstructionsSpotID = 5052; -const HotSpotID kMars57UndoMoveSpotID = 5053; -const HotSpotID kMars57RedMoveSpotID = 5054; -const HotSpotID kMars57YellowMoveSpotID = 5055; -const HotSpotID kMars57GreenMoveSpotID = 5056; -const HotSpotID kMars57BlueMoveSpotID = 5057; -const HotSpotID kMars57PurpleMoveSpotID = 5058; -const HotSpotID kMars57LowerScreenSafelySpotID = 5059; -const HotSpotID kMars57GrabBombSpotID = 5060; -const HotSpotID kMars58MoveLeftSpotID = 5061; -const HotSpotID kMars58MoveRightSpotID = 5062; -const HotSpotID kMars58ExtractSpotID = 5063; -const HotSpotID kMars59RetractSpotID = 5064; -const HotSpotID kMars60EastPressurizeSpotID = 5065; -const HotSpotID kMars60EastSpinSpotID = 5066; -const HotSpotID kMars60WestPressurizeSpotID = 5067; -const HotSpotID kMars60WestSpinSpotID = 5068; -const HotSpotID kRobotShuttleOpenHeadSpotID = 5069; -const HotSpotID kRobotShuttleMapChipSpotID = 5070; -const HotSpotID kRobotShuttleOpticalChipSpotID = 5071; -const HotSpotID kRobotShuttleShieldChipSpotID = 5072; +static const HotSpotID kMars11NorthKioskSpotID = 5000; +static const HotSpotID kMars11NorthKioskSightsSpotID = 5001; +static const HotSpotID kMars11NorthKioskColonySpotID = 5002; +static const HotSpotID kMars12NorthKioskSpotID = 5003; +static const HotSpotID kMars12NorthKioskSightsSpotID = 5004; +static const HotSpotID kMars12NorthKioskColonySpotID = 5005; +static const HotSpotID kMars31SouthSpotID = 5006; +static const HotSpotID kMars31SouthOutSpotID = 5007; +static const HotSpotID kMars31SouthCardSpotID = 5008; +static const HotSpotID kMars33NorthSpotID = 5009; +static const HotSpotID kMars33NorthOutSpotID = 5010; +static const HotSpotID kMars33NorthMonitorSpotID = 5011; +static const HotSpotID kMars34NorthCardDropSpotID = 5012; +static const HotSpotID kMars34SouthOpenStorageSpotID = 5013; +static const HotSpotID kMars34SouthCloseStorageSpotID = 5014; +static const HotSpotID kMars34SouthCrowbarSpotID = 5015; +static const HotSpotID kMars35EastPressurizeSpotID = 5016; +static const HotSpotID kMars35EastSpinSpotID = 5017; +static const HotSpotID kMars35WestPressurizeSpotID = 5018; +static const HotSpotID kMars35WestSpinSpotID = 5019; +static const HotSpotID kMars45NorthOpenStorageSpotID = 5020; +static const HotSpotID kMars45NorthCloseStorageSpotID = 5021; +static const HotSpotID kMars45NorthCrowbarSpotID = 5022; +static const HotSpotID kAttackRobotHotSpotID = 5023; +static const HotSpotID kMars49AirMaskSpotID = 5024; +static const HotSpotID kMars49AirMaskFilledSpotID = 5025; +static const HotSpotID kMars49AirFillingDropSpotID = 5026; +static const HotSpotID kMars52MoveLeftSpotID = 5027; +static const HotSpotID kMars52MoveRightSpotID = 5028; +static const HotSpotID kMars52ExtractSpotID = 5029; +static const HotSpotID kMars53RetractSpotID = 5030; +static const HotSpotID kMars54MoveLeftSpotID = 5031; +static const HotSpotID kMars54MoveRightSpotID = 5032; +static const HotSpotID kMars54ExtractSpotID = 5033; +static const HotSpotID kMars55RetractSpotID = 5034; +static const HotSpotID kMars56MoveLeftSpotID = 5035; +static const HotSpotID kMars56MoveRightSpotID = 5036; +static const HotSpotID kMars56ExtractSpotID = 5037; +static const HotSpotID kMars57RetractSpotID = 5038; +static const HotSpotID kMars57LowerScreenSpotID = 5039; +static const HotSpotID kMars57Retract2SpotID = 5040; +static const HotSpotID kMars57DropNitrogenSpotID = 5041; +static const HotSpotID kMars57DropCrowBarSpotID = 5042; +static const HotSpotID kMars57CantOpenPanelSpotID = 5043; +static const HotSpotID kMars57ShieldEvaluationSpotID = 5044; +static const HotSpotID kMars57MeasureOutputSpotID = 5045; +static const HotSpotID kMars57RunDiagnosticsSpotID = 5046; +static const HotSpotID kMars57BackToOperationMenuSpotID = 5047; +static const HotSpotID kMars57AnalyzeObjectSpotID = 5048; +static const HotSpotID kMars57RemoveObjectMenuSpotID = 5049; +static const HotSpotID kMars57CircuitLinkSpotID = 5050; +static const HotSpotID kMars57CancelCircuitLinkSpotID = 5051; +static const HotSpotID kMars57GameInstructionsSpotID = 5052; +static const HotSpotID kMars57UndoMoveSpotID = 5053; +static const HotSpotID kMars57RedMoveSpotID = 5054; +static const HotSpotID kMars57YellowMoveSpotID = 5055; +static const HotSpotID kMars57GreenMoveSpotID = 5056; +static const HotSpotID kMars57BlueMoveSpotID = 5057; +static const HotSpotID kMars57PurpleMoveSpotID = 5058; +static const HotSpotID kMars57LowerScreenSafelySpotID = 5059; +static const HotSpotID kMars57GrabBombSpotID = 5060; +static const HotSpotID kMars58MoveLeftSpotID = 5061; +static const HotSpotID kMars58MoveRightSpotID = 5062; +static const HotSpotID kMars58ExtractSpotID = 5063; +static const HotSpotID kMars59RetractSpotID = 5064; +static const HotSpotID kMars60EastPressurizeSpotID = 5065; +static const HotSpotID kMars60EastSpinSpotID = 5066; +static const HotSpotID kMars60WestPressurizeSpotID = 5067; +static const HotSpotID kMars60WestSpinSpotID = 5068; +static const HotSpotID kRobotShuttleOpenHeadSpotID = 5069; +static const HotSpotID kRobotShuttleMapChipSpotID = 5070; +static const HotSpotID kRobotShuttleOpticalChipSpotID = 5071; +static const HotSpotID kRobotShuttleShieldChipSpotID = 5072; // Extra sequence IDs. -const ExtraID kMarsArrivalFromTSA = 0; -const ExtraID kMars0AWatchShuttleDepart = 1; -const ExtraID kRobotThrowsPlayer = 2; -const ExtraID kMarsInfoKioskIntro = 3; -const ExtraID kMarsColonyInfo = 4; -const ExtraID kMarsSightsInfo = 5; -const ExtraID kRobotOnWayToShuttle = 6; -const ExtraID kMars31SouthZoomInNoCard = 7; -const ExtraID kMars31SouthViewNoCard = 8; -const ExtraID kMars31SouthZoomOutNoCard = 9; -const ExtraID kMars31SouthZoomViewNoCard = 10; -const ExtraID kMars33SlideShow1 = 11; -const ExtraID kMars33SlideShow2 = 12; -const ExtraID kMars33SlideShow3 = 13; -const ExtraID kMars33SlideShow4 = 14; -const ExtraID kMars34SpotOpenWithBar = 15; -const ExtraID kMars34SpotCloseWithBar = 16; -const ExtraID kMars34SpotOpenNoBar = 17; -const ExtraID kMars34SpotCloseNoBar = 18; -const ExtraID kMars34ViewOpenWithBar = 19; -const ExtraID kMars34ViewOpenNoBar = 20; -const ExtraID kMars34NorthPodGreeting = 21; -const ExtraID kMarsTurnOnPod = 22; -const ExtraID kMarsTakePodToMars45 = 23; -const ExtraID kMars35WestSpinAirlockToEast = 24; -const ExtraID kMars35EastSpinAirlockToWest = 25; -const ExtraID kMars45SpotOpenWithBar = 26; -const ExtraID kMars45SpotCloseWithBar = 27; -const ExtraID kMars45SpotOpenNoBar = 28; -const ExtraID kMars45SpotCloseNoBar = 29; -const ExtraID kMars45ViewOpenWithBar = 30; -const ExtraID kMars45ViewOpenNoBar = 31; -const ExtraID kMars48RobotApproaches = 32; -const ExtraID kMars48RobotKillsPlayer = 33; -const ExtraID kMars48RobotLoops = 34; -const ExtraID kMars48RobotView = 35; -const ExtraID kMars48RobotDefends = 36; -const ExtraID kMars49SouthViewMaskFilling = 37; -const ExtraID kMars52SpinLeft = 38; -const ExtraID kMars52SpinRight = 39; -const ExtraID kMars52Extend = 40; -const ExtraID kMars53Retract = 41; -const ExtraID kMars54SpinLeft = 42; -const ExtraID kMars54SpinRight = 43; -const ExtraID kMars54Extend = 44; -const ExtraID kMars55Retract = 45; -const ExtraID kMars56SpinLeft = 46; -const ExtraID kMars56SpinRight = 47; -const ExtraID kMars56ExtendWithBomb = 48; -const ExtraID kMars56ExtendNoBomb = 49; -const ExtraID kMars57RetractWithBomb = 50; -const ExtraID kMars57RetractNoBomb = 51; -const ExtraID kMars57LowerScreenClosed = 52; -const ExtraID kMars57CantOpenPanel = 53; -const ExtraID kMars57FreezeLock = 54; -const ExtraID kMars57BreakLock = 55; -const ExtraID kMars57LockFrozenView = 56; -const ExtraID kMars57ThawLock = 57; -const ExtraID kMars57OpenPanel = 58; -const ExtraID kMars57OpenPanelChoices = 59; -const ExtraID kMars57ShieldEvaluation = 60; -const ExtraID kMars57MeasureOutput = 61; -const ExtraID kMars57ShieldOkayLoop = 62; -const ExtraID kMars57RunDiagnostics = 63; -const ExtraID kMars57BombExplodes = 64; -const ExtraID kMars57BombAnalysis = 65; -const ExtraID kMars57DontLink = 66; -const ExtraID kMars57CircuitLink = 67; -const ExtraID kMars57GameLevel1 = 68; -const ExtraID kMars57GameLevel2 = 69; -const ExtraID kMars57GameLevel3 = 70; -const ExtraID kMars57BombExplodesInGame = 71; -const ExtraID kMars57GameSolved = 72; -const ExtraID kMars57ExposeBomb = 73; -const ExtraID kMars57BackToNormal = 74; -const ExtraID kMars57ViewOpenNoBomb = 75; -const ExtraID kMars58SpinLeft = 76; -const ExtraID kMars58SpinRight = 77; -const ExtraID kMars58Extend = 78; -const ExtraID kMars59Retract = 79; -const ExtraID kMars60WestSpinAirlockToEast = 80; -const ExtraID kMars60EastSpinAirlockToWest = 81; -const ExtraID kMarsRobotHeadOpen = 82; -const ExtraID kMarsRobotHeadClose = 83; -const ExtraID kMarsRobotHead000 = 84; -const ExtraID kMarsRobotHead001 = 85; -const ExtraID kMarsRobotHead010 = 86; -const ExtraID kMarsRobotHead011 = 87; -const ExtraID kMarsRobotHead100 = 88; -const ExtraID kMarsRobotHead101 = 89; -const ExtraID kMarsRobotHead110 = 90; -const ExtraID kMarsRobotHead111 = 91; -const ExtraID kMarsMaze007RobotApproach = 92; -const ExtraID kMarsMaze007RobotLoop = 93; -const ExtraID kMarsMaze007RobotDeath = 94; -const ExtraID kMarsMaze015SouthRobotApproach = 95; -const ExtraID kMarsMaze015SouthRobotLoop = 96; -const ExtraID kMarsMaze015SouthRobotDeath = 97; -const ExtraID kMarsMaze101EastRobotApproach = 98; -const ExtraID kMarsMaze101EastRobotLoop = 99; -const ExtraID kMarsMaze101EastRobotDeath = 100; -const ExtraID kMarsMaze104WestLoop = 101; -const ExtraID kMarsMaze104WestDeath = 102; -const ExtraID kMarsMaze133SouthApproach = 103; -const ExtraID kMarsMaze133SouthLoop = 104; -const ExtraID kMarsMaze133SouthDeath = 105; -const ExtraID kMarsMaze136NorthApproach = 106; -const ExtraID kMarsMaze136NorthLoop = 107; -const ExtraID kMarsMaze136NorthDeath = 108; -const ExtraID kMarsMaze184WestLoop = 109; -const ExtraID kMarsMaze184WestDeath = 110; -const ExtraID kMars200DeathInBucket = 111; - -const ResIDType kReactorUndoHilitePICTID = 900; - -const int16 kMars52Compass = 90; -const int16 kMars54Compass = 180; -const int16 kMars56Compass = 270; -const int16 kMars58Compass = 0; +static const ExtraID kMarsArrivalFromTSA = 0; +static const ExtraID kMars0AWatchShuttleDepart = 1; +static const ExtraID kRobotThrowsPlayer = 2; +static const ExtraID kMarsInfoKioskIntro = 3; +static const ExtraID kMarsColonyInfo = 4; +static const ExtraID kMarsSightsInfo = 5; +static const ExtraID kRobotOnWayToShuttle = 6; +static const ExtraID kMars31SouthZoomInNoCard = 7; +static const ExtraID kMars31SouthViewNoCard = 8; +static const ExtraID kMars31SouthZoomOutNoCard = 9; +static const ExtraID kMars31SouthZoomViewNoCard = 10; +static const ExtraID kMars33SlideShow1 = 11; +static const ExtraID kMars33SlideShow2 = 12; +static const ExtraID kMars33SlideShow3 = 13; +static const ExtraID kMars33SlideShow4 = 14; +static const ExtraID kMars34SpotOpenWithBar = 15; +static const ExtraID kMars34SpotCloseWithBar = 16; +static const ExtraID kMars34SpotOpenNoBar = 17; +static const ExtraID kMars34SpotCloseNoBar = 18; +static const ExtraID kMars34ViewOpenWithBar = 19; +static const ExtraID kMars34ViewOpenNoBar = 20; +static const ExtraID kMars34NorthPodGreeting = 21; +static const ExtraID kMarsTurnOnPod = 22; +static const ExtraID kMarsTakePodToMars45 = 23; +static const ExtraID kMars35WestSpinAirlockToEast = 24; +static const ExtraID kMars35EastSpinAirlockToWest = 25; +static const ExtraID kMars45SpotOpenWithBar = 26; +static const ExtraID kMars45SpotCloseWithBar = 27; +static const ExtraID kMars45SpotOpenNoBar = 28; +static const ExtraID kMars45SpotCloseNoBar = 29; +static const ExtraID kMars45ViewOpenWithBar = 30; +static const ExtraID kMars45ViewOpenNoBar = 31; +static const ExtraID kMars48RobotApproaches = 32; +static const ExtraID kMars48RobotKillsPlayer = 33; +static const ExtraID kMars48RobotLoops = 34; +static const ExtraID kMars48RobotView = 35; +static const ExtraID kMars48RobotDefends = 36; +static const ExtraID kMars49SouthViewMaskFilling = 37; +static const ExtraID kMars52SpinLeft = 38; +static const ExtraID kMars52SpinRight = 39; +static const ExtraID kMars52Extend = 40; +static const ExtraID kMars53Retract = 41; +static const ExtraID kMars54SpinLeft = 42; +static const ExtraID kMars54SpinRight = 43; +static const ExtraID kMars54Extend = 44; +static const ExtraID kMars55Retract = 45; +static const ExtraID kMars56SpinLeft = 46; +static const ExtraID kMars56SpinRight = 47; +static const ExtraID kMars56ExtendWithBomb = 48; +static const ExtraID kMars56ExtendNoBomb = 49; +static const ExtraID kMars57RetractWithBomb = 50; +static const ExtraID kMars57RetractNoBomb = 51; +static const ExtraID kMars57LowerScreenClosed = 52; +static const ExtraID kMars57CantOpenPanel = 53; +static const ExtraID kMars57FreezeLock = 54; +static const ExtraID kMars57BreakLock = 55; +static const ExtraID kMars57LockFrozenView = 56; +static const ExtraID kMars57ThawLock = 57; +static const ExtraID kMars57OpenPanel = 58; +static const ExtraID kMars57OpenPanelChoices = 59; +static const ExtraID kMars57ShieldEvaluation = 60; +static const ExtraID kMars57MeasureOutput = 61; +static const ExtraID kMars57ShieldOkayLoop = 62; +static const ExtraID kMars57RunDiagnostics = 63; +static const ExtraID kMars57BombExplodes = 64; +static const ExtraID kMars57BombAnalysis = 65; +static const ExtraID kMars57DontLink = 66; +static const ExtraID kMars57CircuitLink = 67; +static const ExtraID kMars57GameLevel1 = 68; +static const ExtraID kMars57GameLevel2 = 69; +static const ExtraID kMars57GameLevel3 = 70; +static const ExtraID kMars57BombExplodesInGame = 71; +static const ExtraID kMars57GameSolved = 72; +static const ExtraID kMars57ExposeBomb = 73; +static const ExtraID kMars57BackToNormal = 74; +static const ExtraID kMars57ViewOpenNoBomb = 75; +static const ExtraID kMars58SpinLeft = 76; +static const ExtraID kMars58SpinRight = 77; +static const ExtraID kMars58Extend = 78; +static const ExtraID kMars59Retract = 79; +static const ExtraID kMars60WestSpinAirlockToEast = 80; +static const ExtraID kMars60EastSpinAirlockToWest = 81; +static const ExtraID kMarsRobotHeadOpen = 82; +static const ExtraID kMarsRobotHeadClose = 83; +static const ExtraID kMarsRobotHead000 = 84; +static const ExtraID kMarsRobotHead001 = 85; +static const ExtraID kMarsRobotHead010 = 86; +static const ExtraID kMarsRobotHead011 = 87; +static const ExtraID kMarsRobotHead100 = 88; +static const ExtraID kMarsRobotHead101 = 89; +static const ExtraID kMarsRobotHead110 = 90; +static const ExtraID kMarsRobotHead111 = 91; +static const ExtraID kMarsMaze007RobotApproach = 92; +static const ExtraID kMarsMaze007RobotLoop = 93; +static const ExtraID kMarsMaze007RobotDeath = 94; +static const ExtraID kMarsMaze015SouthRobotApproach = 95; +static const ExtraID kMarsMaze015SouthRobotLoop = 96; +static const ExtraID kMarsMaze015SouthRobotDeath = 97; +static const ExtraID kMarsMaze101EastRobotApproach = 98; +static const ExtraID kMarsMaze101EastRobotLoop = 99; +static const ExtraID kMarsMaze101EastRobotDeath = 100; +static const ExtraID kMarsMaze104WestLoop = 101; +static const ExtraID kMarsMaze104WestDeath = 102; +static const ExtraID kMarsMaze133SouthApproach = 103; +static const ExtraID kMarsMaze133SouthLoop = 104; +static const ExtraID kMarsMaze133SouthDeath = 105; +static const ExtraID kMarsMaze136NorthApproach = 106; +static const ExtraID kMarsMaze136NorthLoop = 107; +static const ExtraID kMarsMaze136NorthDeath = 108; +static const ExtraID kMarsMaze184WestLoop = 109; +static const ExtraID kMarsMaze184WestDeath = 110; +static const ExtraID kMars200DeathInBucket = 111; + +static const ResIDType kReactorUndoHilitePICTID = 900; + +static const int16 kMars52Compass = 90; +static const int16 kMars54Compass = 180; +static const int16 kMars56Compass = 270; +static const int16 kMars58Compass = 0; } // End of namespace Pegasus diff --git a/engines/pegasus/neighborhood/mars/energybeam.cpp b/engines/pegasus/neighborhood/mars/energybeam.cpp index 85a1596b94..964c8ba381 100755 --- a/engines/pegasus/neighborhood/mars/energybeam.cpp +++ b/engines/pegasus/neighborhood/mars/energybeam.cpp @@ -28,14 +28,14 @@ namespace Pegasus { -const TimeValue kEnergyBeamTime = kOneSecond * kShuttleWeaponScale / 2; +static const TimeValue kEnergyBeamTime = kOneSecond * kShuttleWeaponScale / 2; -const CoordType kEnergyBeamOriginH = kShuttleWindowMidH; -const CoordType kEnergyBeamOriginV = kShuttleWindowTop + kShuttleWindowHeight; +static const CoordType kEnergyBeamOriginH = kShuttleWindowMidH; +static const CoordType kEnergyBeamOriginV = kShuttleWindowTop + kShuttleWindowHeight; -const float kBeamXOrigin = convertScreenHToSpaceX(kEnergyBeamOriginH, kEnergyBeamMinDistance); -const float kBeamYOrigin = convertScreenVToSpaceY(kEnergyBeamOriginV, kEnergyBeamMinDistance); -const float kBeamZOrigin = kEnergyBeamMinDistance; +static const float kBeamXOrigin = convertScreenHToSpaceX(kEnergyBeamOriginH, kEnergyBeamMinDistance); +static const float kBeamYOrigin = convertScreenVToSpaceY(kEnergyBeamOriginV, kEnergyBeamMinDistance); +static const float kBeamZOrigin = kEnergyBeamMinDistance; EnergyBeam::EnergyBeam() { _weaponDuration = kEnergyBeamTime; diff --git a/engines/pegasus/neighborhood/mars/gravitoncannon.cpp b/engines/pegasus/neighborhood/mars/gravitoncannon.cpp index d383cc34ab..140bd12fc0 100755 --- a/engines/pegasus/neighborhood/mars/gravitoncannon.cpp +++ b/engines/pegasus/neighborhood/mars/gravitoncannon.cpp @@ -29,22 +29,22 @@ namespace Pegasus { -const TimeValue kGravitonTime = kOneSecond * kShuttleWeaponScale; +static const TimeValue kGravitonTime = kOneSecond * kShuttleWeaponScale; -const CoordType kGravitonOriginH = kShuttleWindowLeft - 1; -const CoordType kGravitonOriginV = kShuttleWindowMidV; +static const CoordType kGravitonOriginH = kShuttleWindowLeft - 1; +static const CoordType kGravitonOriginV = kShuttleWindowMidV; -const float kGravitonXOrigin = convertScreenHToSpaceX(kGravitonOriginH, kGravitonMinDistance); -const float kGravitonYOrigin = convertScreenVToSpaceY(kGravitonOriginV, kGravitonMinDistance); -const float kGravitonZOrigin = kGravitonMinDistance; +static const float kGravitonXOrigin = convertScreenHToSpaceX(kGravitonOriginH, kGravitonMinDistance); +static const float kGravitonYOrigin = convertScreenVToSpaceY(kGravitonOriginV, kGravitonMinDistance); +static const float kGravitonZOrigin = kGravitonMinDistance; // Width of graviton sprite... -const CoordType kGravitonMaxScreenWidth = 78; -const CoordType kGravitonMaxScreenHeight = 46; +static const CoordType kGravitonMaxScreenWidth = 78; +static const CoordType kGravitonMaxScreenHeight = 46; -const float kGravitonWidth = convertScreenHToSpaceX(kShuttleWindowMidH + kGravitonMaxScreenWidth / 2, kGravitonMinDistance) +static const float kGravitonWidth = convertScreenHToSpaceX(kShuttleWindowMidH + kGravitonMaxScreenWidth / 2, kGravitonMinDistance) - convertScreenHToSpaceX(kShuttleWindowMidH - kGravitonMaxScreenWidth / 2, kGravitonMinDistance); -const float kGravitonHeight = convertScreenVToSpaceY(kShuttleWindowMidV - kGravitonMaxScreenHeight / 2, kGravitonMinDistance) +static const float kGravitonHeight = convertScreenVToSpaceY(kShuttleWindowMidV - kGravitonMaxScreenHeight / 2, kGravitonMinDistance) - convertScreenVToSpaceY(kShuttleWindowMidV + kGravitonMaxScreenHeight / 2, kGravitonMinDistance); GravitonCannon::GravitonCannon() { diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index 93f99904d7..c950a85897 100755 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -40,23 +40,23 @@ namespace Pegasus { // This should really be 22.5. // Probably no one will know the difference. -const int16 kMarsShieldPanelOffsetAngle = 22; +static const int16 kMarsShieldPanelOffsetAngle = 22; -const CanMoveForwardReason kCantMoveRobotBlocking = kCantMoveLastReason + 1; +static const CanMoveForwardReason kCantMoveRobotBlocking = kCantMoveLastReason + 1; -const NotificationFlags kTimeForCanyonChaseFlag = kLastNeighborhoodNotificationFlag << 1; -const NotificationFlags kExplosionFinishedFlag = kTimeForCanyonChaseFlag << 1; -const NotificationFlags kTimeToTransportFlag = kExplosionFinishedFlag << 1; +static const NotificationFlags kTimeForCanyonChaseFlag = kLastNeighborhoodNotificationFlag << 1; +static const NotificationFlags kExplosionFinishedFlag = kTimeForCanyonChaseFlag << 1; +static const NotificationFlags kTimeToTransportFlag = kExplosionFinishedFlag << 1; -const NotificationFlags kMarsNotificationFlags = kTimeForCanyonChaseFlag | +static const NotificationFlags kMarsNotificationFlags = kTimeForCanyonChaseFlag | kExplosionFinishedFlag | kTimeToTransportFlag; -const TimeValue kLittleExplosionStart = 0 * 40; -const TimeValue kLittleExplosionStop = 24 * 40; +static const TimeValue kLittleExplosionStart = 0 * 40; +static const TimeValue kLittleExplosionStop = 24 * 40; -const TimeValue kBigExplosionStart = 24 * 40; -const TimeValue kBigExplosionStop = 62 * 40; +static const TimeValue kBigExplosionStart = 24 * 40; +static const TimeValue kBigExplosionStop = 62 * 40; enum { kMaze007RobotLoopingEvent, diff --git a/engines/pegasus/neighborhood/mars/planetmover.cpp b/engines/pegasus/neighborhood/mars/planetmover.cpp index 7a43c188f7..ef26a7b573 100755 --- a/engines/pegasus/neighborhood/mars/planetmover.cpp +++ b/engines/pegasus/neighborhood/mars/planetmover.cpp @@ -32,11 +32,11 @@ namespace Pegasus { -const TimeScale kRovingScale = kTractorBeamScale; -const TimeValue kRovingTime = kTenSeconds * kRovingScale; -const TimeValue kRovingSlop = kTwoSeconds * kRovingScale; +static const TimeScale kRovingScale = kTractorBeamScale; +static const TimeValue kRovingTime = kTenSeconds * kRovingScale; +static const TimeValue kRovingSlop = kTwoSeconds * kRovingScale; -const CoordType kMaxVelocity = 20; +static const CoordType kMaxVelocity = 20; PlanetMover::PlanetMover() { setScale(kRovingScale); diff --git a/engines/pegasus/neighborhood/mars/robotship.cpp b/engines/pegasus/neighborhood/mars/robotship.cpp index b1ecdde008..9776027839 100755 --- a/engines/pegasus/neighborhood/mars/robotship.cpp +++ b/engines/pegasus/neighborhood/mars/robotship.cpp @@ -33,25 +33,25 @@ namespace Pegasus { -const TimeScale kRovingScale = kTractorBeamScale; -const TimeValue kRovingTime = kSixSeconds * kRovingScale; -const TimeValue kRovingSlop = kThreeSeconds * kRovingScale; +static const TimeScale kRovingScale = kTractorBeamScale; +static const TimeValue kRovingTime = kSixSeconds * kRovingScale; +static const TimeValue kRovingSlop = kThreeSeconds * kRovingScale; -const int kNumSpriteColumns = 15; -const int kNumSpriteRows = 16; +static const int kNumSpriteColumns = 15; +static const int kNumSpriteRows = 16; -const CoordType kInitialLocationLeft = kShuttleWindowLeft - 50; -const CoordType kInitialLocationTop = kShuttleWindowTop - 50; -const CoordType kInitialLocationWidth = kShuttleWindowWidth + 100; -const CoordType kInitialLocationHeight = kShuttleWindowHeight + 100; +static const CoordType kInitialLocationLeft = kShuttleWindowLeft - 50; +static const CoordType kInitialLocationTop = kShuttleWindowTop - 50; +static const CoordType kInitialLocationWidth = kShuttleWindowWidth + 100; +static const CoordType kInitialLocationHeight = kShuttleWindowHeight + 100; -const CoordType kVelocityVectorLength = 100; -const CoordType kVelocityVectorSlop = 50; +static const CoordType kVelocityVectorLength = 100; +static const CoordType kVelocityVectorSlop = 50; -const CoordType kRovingLeft = kShuttleWindowLeft + 20; -const CoordType kRovingTop = kShuttleWindowTop + 20; -const CoordType kRovingWidth = kShuttleWindowMidH - kRovingLeft; -const CoordType kRovingHeight = kShuttleWindowMidV - kRovingTop; +static const CoordType kRovingLeft = kShuttleWindowLeft + 20; +static const CoordType kRovingTop = kShuttleWindowTop + 20; +static const CoordType kRovingWidth = kShuttleWindowMidH - kRovingLeft; +static const CoordType kRovingHeight = kShuttleWindowMidV - kRovingTop; RobotShip* g_robotShip = 0; diff --git a/engines/pegasus/neighborhood/mars/robotship.h b/engines/pegasus/neighborhood/mars/robotship.h index 7921198d48..b668e8f154 100755 --- a/engines/pegasus/neighborhood/mars/robotship.h +++ b/engines/pegasus/neighborhood/mars/robotship.h @@ -30,8 +30,8 @@ namespace Pegasus { -const CoordType kShuttleMovieWidth = 114; -const CoordType kShuttleMovieHeight = 42; +static const CoordType kShuttleMovieWidth = 114; +static const CoordType kShuttleMovieHeight = 42; class RobotShip : IdlerTimeBase { friend void timeToDropJunkFunction(FunctionPtr *, void *); diff --git a/engines/pegasus/neighborhood/mars/shuttleenergymeter.h b/engines/pegasus/neighborhood/mars/shuttleenergymeter.h index 169a0f63cd..51161e094e 100755 --- a/engines/pegasus/neighborhood/mars/shuttleenergymeter.h +++ b/engines/pegasus/neighborhood/mars/shuttleenergymeter.h @@ -31,16 +31,16 @@ namespace Pegasus { -const int32 kFullShuttleEnergy = 100; +static const int32 kFullShuttleEnergy = 100; // Low is 20 percent -const int32 kLowShuttleEnergy = kFullShuttleEnergy * 20 / 100; +static const int32 kLowShuttleEnergy = kFullShuttleEnergy * 20 / 100; -const int32 kMinDampingEnergy = 15; -const int32 kMinGravitonEnergy = 63; +static const int32 kMinDampingEnergy = 15; +static const int32 kMinGravitonEnergy = 63; -const TimeScale kTractorBeamScale = kFifteenTicksPerSecond; -const TimeValue kTractorBeamTime = kFiveSeconds * kTractorBeamScale; -const int32 kTractorBeamEnergy = kLowShuttleEnergy; +static const TimeScale kTractorBeamScale = kFifteenTicksPerSecond; +static const TimeValue kTractorBeamTime = kFiveSeconds * kTractorBeamScale; +static const int32 kTractorBeamEnergy = kLowShuttleEnergy; class ShuttleEnergyMeter : public FaderAnimation { public: diff --git a/engines/pegasus/neighborhood/mars/shuttlehud.cpp b/engines/pegasus/neighborhood/mars/shuttlehud.cpp index cac188e01e..14f5b88319 100755 --- a/engines/pegasus/neighborhood/mars/shuttlehud.cpp +++ b/engines/pegasus/neighborhood/mars/shuttlehud.cpp @@ -30,26 +30,26 @@ namespace Pegasus { -const CoordType kHUDTargetGridLeft = kShuttleWindowLeft + 16; -const CoordType kHUDTargetGridTop = kShuttleWindowTop + 8; -const CoordType kHUDTargetGridWidth = 328; -const CoordType kHUDTargetGridHeight = 206; - -const CoordType kHUDRS232Left = kHUDTargetGridLeft + 264; -const CoordType kHUDRS232Top = kHUDTargetGridTop + 2; - -const CoordType kHUDLockLeft = kShuttleWindowLeft + 101; -const CoordType kHUDLockTop = kShuttleWindowTop + 49; -const CoordType kHUDLockWidth = 145; -const CoordType kHUDLockHeight = 124; - -const CoordType kTractorLockWidth = 50; -const CoordType kTractorLockHeight = 30; - -const CoordType kTractorLockLeft = kShuttleWindowMidH - kTractorLockWidth / 2; -const CoordType kTractorLockTop = kShuttleWindowMidV - kTractorLockHeight / 2; -const CoordType kTractorLockRight = kTractorLockLeft + kTractorLockWidth; -const CoordType kTractorLockBottom = kTractorLockTop + kTractorLockHeight; +static const CoordType kHUDTargetGridLeft = kShuttleWindowLeft + 16; +static const CoordType kHUDTargetGridTop = kShuttleWindowTop + 8; +static const CoordType kHUDTargetGridWidth = 328; +static const CoordType kHUDTargetGridHeight = 206; + +static const CoordType kHUDRS232Left = kHUDTargetGridLeft + 264; +static const CoordType kHUDRS232Top = kHUDTargetGridTop + 2; + +static const CoordType kHUDLockLeft = kShuttleWindowLeft + 101; +static const CoordType kHUDLockTop = kShuttleWindowTop + 49; +static const CoordType kHUDLockWidth = 145; +static const CoordType kHUDLockHeight = 124; + +static const CoordType kTractorLockWidth = 50; +static const CoordType kTractorLockHeight = 30; + +static const CoordType kTractorLockLeft = kShuttleWindowMidH - kTractorLockWidth / 2; +static const CoordType kTractorLockTop = kShuttleWindowMidV - kTractorLockHeight / 2; +static const CoordType kTractorLockRight = kTractorLockLeft + kTractorLockWidth; +static const CoordType kTractorLockBottom = kTractorLockTop + kTractorLockHeight; static const uint16 s_RS232Data[] = { 0xF0E1, 0xCE70, diff --git a/engines/pegasus/neighborhood/mars/shuttleweapon.h b/engines/pegasus/neighborhood/mars/shuttleweapon.h index 30e42face8..38529c8919 100755 --- a/engines/pegasus/neighborhood/mars/shuttleweapon.h +++ b/engines/pegasus/neighborhood/mars/shuttleweapon.h @@ -35,7 +35,7 @@ namespace Pegasus { // For now, no... // clone2727 adds: And now forever -const TimeScale kShuttleWeaponScale = kFifteenTicksPerSecond; +static const TimeScale kShuttleWeaponScale = kFifteenTicksPerSecond; class ShuttleWeapon : public IdlerAnimation { public: diff --git a/engines/pegasus/neighborhood/mars/spacechase3d.h b/engines/pegasus/neighborhood/mars/spacechase3d.h index 1e145a1770..f6815e69bd 100755 --- a/engines/pegasus/neighborhood/mars/spacechase3d.h +++ b/engines/pegasus/neighborhood/mars/spacechase3d.h @@ -32,8 +32,8 @@ namespace Pegasus { // This is approximately right for a field of view of 72 degrees // (Should be set to the tangent of FOV). -//const float kTangentFOV = 0.76254; -const float kTangentFOV = 1.0; +//static const float kTangentFOV = 0.76254; +static const float kTangentFOV = 1.0; // Define these as macros and they can be used to define constants... #define convertSpaceXToScreenH(x, z) \ @@ -63,7 +63,7 @@ struct Point3D { } }; -const int kScreenWidth = kShuttleWindowWidth; +static const int kScreenWidth = kShuttleWindowWidth; bool isNegative(int a); bool isPositive(int a); diff --git a/engines/pegasus/neighborhood/mars/spacejunk.cpp b/engines/pegasus/neighborhood/mars/spacejunk.cpp index 28847136f6..9f34c21461 100755 --- a/engines/pegasus/neighborhood/mars/spacejunk.cpp +++ b/engines/pegasus/neighborhood/mars/spacejunk.cpp @@ -29,15 +29,13 @@ namespace Pegasus { -//const TimeValue kWeaponReboundTime = kTwoSeconds * kJunkTimeScale; -//const TimeValue kCollisionReboundTime = kOneSecond * kJunkTimeScale; -const CoordType kMaxBounceSize = 90; -const CoordType kBounceTargetHRange = 640 - kMaxBounceSize - 2; -const CoordType kBounceTargetVRange = 480 - kMaxBounceSize - 2; - -const float kJunkXTarget = 0; -const float kJunkYTarget = 0; -const float kJunkZTarget = kJunkMinDistance; +static const CoordType kMaxBounceSize = 90; +static const CoordType kBounceTargetHRange = 640 - kMaxBounceSize - 2; +static const CoordType kBounceTargetVRange = 480 - kMaxBounceSize - 2; + +static const float kJunkXTarget = 0; +static const float kJunkYTarget = 0; +static const float kJunkZTarget = kJunkMinDistance; SpaceJunk *g_spaceJunk = 0; diff --git a/engines/pegasus/neighborhood/mars/spacejunk.h b/engines/pegasus/neighborhood/mars/spacejunk.h index 03943b92c9..f2dbf9a838 100755 --- a/engines/pegasus/neighborhood/mars/spacejunk.h +++ b/engines/pegasus/neighborhood/mars/spacejunk.h @@ -32,9 +32,9 @@ namespace Pegasus { -const CoordType kJunkMaxScreenSize = 250; +static const CoordType kJunkMaxScreenSize = 250; -const float kJunkSize = convertScreenVToSpaceY(kShuttleWindowMidV - kJunkMaxScreenSize / 2, kJunkMinDistance) - +static const float kJunkSize = convertScreenVToSpaceY(kShuttleWindowMidV - kJunkMaxScreenSize / 2, kJunkMinDistance) - convertScreenVToSpaceY(kShuttleWindowMidV + kJunkMaxScreenSize / 2, kJunkMinDistance); class SpaceJunk : public ScalingMovie, public Idler { diff --git a/engines/pegasus/neighborhood/mars/tractorbeam.cpp b/engines/pegasus/neighborhood/mars/tractorbeam.cpp index 5ea63a0934..81c96299cf 100755 --- a/engines/pegasus/neighborhood/mars/tractorbeam.cpp +++ b/engines/pegasus/neighborhood/mars/tractorbeam.cpp @@ -36,19 +36,19 @@ TractorBeam::TractorBeam() : DisplayElement(kNoDisplayElement) { } -const int kHalfWidth = kShuttleTractorWidth >> 1; -const int kHalfHeight = kShuttleTractorHeight >> 1; +static const int kHalfWidth = kShuttleTractorWidth >> 1; +static const int kHalfHeight = kShuttleTractorHeight >> 1; -const int kW3Vert = kHalfHeight * kHalfHeight * kHalfHeight; -const int kW3Div2Vert = kW3Vert >> 1; +static const int kW3Vert = kHalfHeight * kHalfHeight * kHalfHeight; +static const int kW3Div2Vert = kW3Vert >> 1; -const int kW3Horiz = kHalfWidth * kHalfWidth * kHalfWidth; -const int kW3Div2Horiz = kW3Horiz >> 1; +static const int kW3Horiz = kHalfWidth * kHalfWidth * kHalfWidth; +static const int kW3Div2Horiz = kW3Horiz >> 1; -const int kMaxLevel = 50; +static const int kMaxLevel = 50; -const int kAVert = -2 * kMaxLevel; -const int kBVert = 3 * kMaxLevel * kHalfHeight; +static const int kAVert = -2 * kMaxLevel; +static const int kBVert = 3 * kMaxLevel * kHalfHeight; #define READ_PIXEL(ptr) \ if (screen->format.bytesPerPixel == 2) \ -- cgit v1.2.3 From a600dcb56a9633ebfae0d726480352b6f2e9b3ba Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Tue, 20 Dec 2011 18:26:25 -0500 Subject: PEGASUS: Some space/misc cleanup --- engines/pegasus/neighborhood/mars/constants.h | 28 +++++++++++----------- .../pegasus/neighborhood/mars/gravitoncannon.cpp | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/constants.h b/engines/pegasus/neighborhood/mars/constants.h index b1013dacc5..82a7f03b68 100755 --- a/engines/pegasus/neighborhood/mars/constants.h +++ b/engines/pegasus/neighborhood/mars/constants.h @@ -30,7 +30,7 @@ namespace Pegasus { -// Element Coordinates +// Element Coordinates static const CoordType kUndoHiliteLeft = kNavAreaLeft + 140; static const CoordType kUndoHiliteTop = kNavAreaTop + 36; @@ -136,7 +136,7 @@ static const TimeValue kLaunchTubeReachedTime = 60 * 600 + 38 * 600 - kCanyonCha static const TimeValue kCanyonChaseFinishedTime = kCanyonChaseStop - kCanyonChaseStart - kLaunchTubeReachedTime; -// Left shuttle. +// Left shuttle. static const TimeValue kShuttleLeftIntroStart = 0; static const TimeValue kShuttleLeftIntroStop = 400; @@ -155,7 +155,7 @@ static const TimeValue kShuttleLeftGravitonTime = 600; static const TimeValue kShuttleLeftTractorTime = 640; -// Right shuttle. +// Right shuttle. static const TimeValue kShuttleRightIntroStart = 0; static const TimeValue kShuttleRightIntroStop = 400; @@ -175,7 +175,7 @@ static const TimeValue kShuttleRightGravitonTime = 1000; static const TimeValue kShuttleRightOverloadTime = 1040; -// Lower Left shuttle. +// Lower Left shuttle. static const TimeValue kShuttleLowerLeftCollisionTime = 0; @@ -183,7 +183,7 @@ static const TimeValue kShuttleLowerLeftTubeTime = 40; static const TimeValue kShuttleLowerLeftAutopilotTime = 80; -// Lower Right shuttle. +// Lower Right shuttle. static const TimeValue kShuttleLowerRightOffTime = 0; @@ -193,7 +193,7 @@ static const TimeValue kShuttleLowerRightTransportTime = 80; static const TimeValue kShuttleLowerRightTransportHiliteTime = 120; -// Center shuttle. +// Center shuttle. static const TimeValue kShuttleCenterBoardingTime = 0; @@ -223,7 +223,7 @@ static const TimeValue kShuttleCenterScanningTime = 480; static const TimeValue kShuttleCenterSafeTime = 520; -// Upper Left shuttle. +// Upper Left shuttle. static const TimeValue kShuttleUpperLeftDimTime = 0; @@ -233,7 +233,7 @@ static const TimeValue kShuttleUpperLeftGravitonTime = 80; static const TimeValue kShuttleUpperLeftTractorTime = 120; -// Upper Right shuttle. +// Upper Right shuttle. static const TimeValue kShuttleUpperRightLockedTime = 0; @@ -245,7 +245,7 @@ static const TimeValue kShuttleUpperRightOverloadTime = 120; static const TimeValue kShuttleUpperRightTargetDestroyedTime = 160; -// Shuttle distance +// Shuttle distance static const int kShuttleDistance = 500; @@ -469,7 +469,7 @@ static const TimeScale kMarsMovieScale = 600; static const TimeScale kMarsFramesPerSecond = 15; static const TimeScale kMarsFrameDuration = 40; -// Alternate IDs. +// Alternate IDs. static const AlternateID kAltMarsNormal = 0; static const AlternateID kAltMarsPodAtMars34 = 1; @@ -482,7 +482,7 @@ static const AlternateID kAltMarsMaskOnFiller = 7; static const AlternateID kAltMars60AirlockEast = 8; static const AlternateID kAltMars60AirlockWest = 9; -// Room IDs. +// Room IDs. static const RoomID kMars0A = 0; static const RoomID kMars00 = 1; @@ -711,7 +711,7 @@ static const RoomID kMarsMaze199 = 223; static const RoomID kMarsMaze200 = 224; static const RoomID kMarsDeathRoom = 225; -// Hot Spot Activation IDs. +// Hot Spot Activation IDs. static const HotSpotActivationID kActivationReadyForKiosk = 1; static const HotSpotActivationID kActivationKioskChoice = 2; @@ -738,7 +738,7 @@ static const HotSpotActivationID kActivateReactorBombExposed = 22; static const HotSpotActivationID kActivationRobotHeadClosed = 23; static const HotSpotActivationID kActivationRobotHeadOpen = 24; -// Hot Spot IDs. +// Hot Spot IDs. static const HotSpotID kMars11NorthKioskSpotID = 5000; static const HotSpotID kMars11NorthKioskSightsSpotID = 5001; @@ -814,7 +814,7 @@ static const HotSpotID kRobotShuttleMapChipSpotID = 5070; static const HotSpotID kRobotShuttleOpticalChipSpotID = 5071; static const HotSpotID kRobotShuttleShieldChipSpotID = 5072; -// Extra sequence IDs. +// Extra sequence IDs. static const ExtraID kMarsArrivalFromTSA = 0; static const ExtraID kMars0AWatchShuttleDepart = 1; diff --git a/engines/pegasus/neighborhood/mars/gravitoncannon.cpp b/engines/pegasus/neighborhood/mars/gravitoncannon.cpp index 140bd12fc0..13dc6dfc77 100755 --- a/engines/pegasus/neighborhood/mars/gravitoncannon.cpp +++ b/engines/pegasus/neighborhood/mars/gravitoncannon.cpp @@ -38,7 +38,7 @@ static const float kGravitonXOrigin = convertScreenHToSpaceX(kGravitonOriginH, k static const float kGravitonYOrigin = convertScreenVToSpaceY(kGravitonOriginV, kGravitonMinDistance); static const float kGravitonZOrigin = kGravitonMinDistance; -// Width of graviton sprite... +// Width of graviton sprite... static const CoordType kGravitonMaxScreenWidth = 78; static const CoordType kGravitonMaxScreenHeight = 46; -- cgit v1.2.3 From d29bde9abeb00a42977051bcf6067a71d35fefde Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Tue, 20 Dec 2011 18:56:42 -0500 Subject: PEGASUS: Remove another global construction --- engines/pegasus/neighborhood/mars/reactor.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/reactor.cpp b/engines/pegasus/neighborhood/mars/reactor.cpp index b044fc9f4b..478a01c155 100755 --- a/engines/pegasus/neighborhood/mars/reactor.cpp +++ b/engines/pegasus/neighborhood/mars/reactor.cpp @@ -135,15 +135,6 @@ static const CoordType kReactorHistoryHeight = 168; static const CoordType kColorWidths[5] = { 24, 25, 25, 26, 27 }; static const CoordType kColorHeights[5] = { 14, 15, 17, 17, 19}; -// TODO: Remove global construction -static const CoordType kColorTops[5] = { - 0, - kColorHeights[0], - kColorHeights[0] + kColorHeights[1], - kColorHeights[0] + kColorHeights[1] + kColorHeights[2], - kColorHeights[0] + kColorHeights[1] + kColorHeights[2] + kColorHeights[3], -}; - static const CoordType kHistoryLefts[5][3] = { { 302 + kNavAreaLeft, 329 + kNavAreaLeft, 357 + kNavAreaLeft }, { 302 + kNavAreaLeft, 331 + kNavAreaLeft, 360 + kNavAreaLeft }, @@ -249,7 +240,15 @@ bool ReactorHistory::isSolved() { return false; } -void ReactorHistory::draw(const Common::Rect &) { +void ReactorHistory::draw(const Common::Rect &) { + static const CoordType kColorTops[5] = { + 0, + kColorHeights[0], + kColorHeights[0] + kColorHeights[1], + kColorHeights[0] + kColorHeights[1] + kColorHeights[2], + kColorHeights[0] + kColorHeights[1] + kColorHeights[2] + kColorHeights[3], + }; + if (_colors.isSurfaceValid() && _digits.isSurfaceValid()) { for (int i = 0; i < _numGuesses; ++i) { Common::Rect r1(0, 0, kColorWidths[i], kColorHeights[i]); -- cgit v1.2.3 From b2c29410b9e66566ee5c9faad79b58696a6f3095 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Tue, 20 Mar 2012 14:50:06 -0400 Subject: PEGASUS: Add some more protection about junk flying off-screen --- engines/pegasus/neighborhood/mars/spacejunk.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/spacejunk.cpp b/engines/pegasus/neighborhood/mars/spacejunk.cpp index 9f34c21461..ac8b1a23cc 100755 --- a/engines/pegasus/neighborhood/mars/spacejunk.cpp +++ b/engines/pegasus/neighborhood/mars/spacejunk.cpp @@ -80,7 +80,7 @@ void SpaceJunk::setCenter(const CoordType centerX, const CoordType centerY) { Common::Rect r; getBounds(r); - r.moveTo(CLIP(centerX - (r.width() >> 1), 0, 640), CLIP(centerY - (r.height() >> 1), 0, 480)); + r.moveTo(CLIP(centerX - (r.width() >> 1), 0, 640 - r.width()), CLIP(centerY - (r.height() >> 1), 0, 480 - r.height())); setBounds(r); } -- cgit v1.2.3 From 983bd16bb78b1a6aa8872f2086dbcbca6954f2fb Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Tue, 3 Apr 2012 15:23:08 -0400 Subject: PEGASUS: Fix file permissions --- engines/pegasus/neighborhood/mars/constants.h | 0 engines/pegasus/neighborhood/mars/energybeam.cpp | 0 engines/pegasus/neighborhood/mars/energybeam.h | 0 engines/pegasus/neighborhood/mars/gravitoncannon.cpp | 0 engines/pegasus/neighborhood/mars/gravitoncannon.h | 0 engines/pegasus/neighborhood/mars/hermite.cpp | 0 engines/pegasus/neighborhood/mars/hermite.h | 0 engines/pegasus/neighborhood/mars/mars.cpp | 0 engines/pegasus/neighborhood/mars/mars.h | 0 engines/pegasus/neighborhood/mars/planetmover.cpp | 0 engines/pegasus/neighborhood/mars/planetmover.h | 0 engines/pegasus/neighborhood/mars/reactor.cpp | 0 engines/pegasus/neighborhood/mars/reactor.h | 0 engines/pegasus/neighborhood/mars/robotship.cpp | 0 engines/pegasus/neighborhood/mars/robotship.h | 0 engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp | 0 engines/pegasus/neighborhood/mars/shuttleenergymeter.h | 0 engines/pegasus/neighborhood/mars/shuttlehud.cpp | 0 engines/pegasus/neighborhood/mars/shuttlehud.h | 0 engines/pegasus/neighborhood/mars/shuttleweapon.cpp | 0 engines/pegasus/neighborhood/mars/shuttleweapon.h | 0 engines/pegasus/neighborhood/mars/spacechase3d.cpp | 0 engines/pegasus/neighborhood/mars/spacechase3d.h | 0 engines/pegasus/neighborhood/mars/spacejunk.cpp | 0 engines/pegasus/neighborhood/mars/spacejunk.h | 0 engines/pegasus/neighborhood/mars/tractorbeam.cpp | 0 engines/pegasus/neighborhood/mars/tractorbeam.h | 0 27 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 engines/pegasus/neighborhood/mars/constants.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/energybeam.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/energybeam.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/gravitoncannon.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/gravitoncannon.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/hermite.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/hermite.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/mars.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/mars.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/planetmover.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/planetmover.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/reactor.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/reactor.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/robotship.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/robotship.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/shuttleenergymeter.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/shuttlehud.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/shuttlehud.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/shuttleweapon.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/shuttleweapon.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/spacechase3d.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/spacechase3d.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/spacejunk.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/spacejunk.h mode change 100755 => 100644 engines/pegasus/neighborhood/mars/tractorbeam.cpp mode change 100755 => 100644 engines/pegasus/neighborhood/mars/tractorbeam.h (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/constants.h b/engines/pegasus/neighborhood/mars/constants.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/energybeam.cpp b/engines/pegasus/neighborhood/mars/energybeam.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/energybeam.h b/engines/pegasus/neighborhood/mars/energybeam.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/gravitoncannon.cpp b/engines/pegasus/neighborhood/mars/gravitoncannon.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/gravitoncannon.h b/engines/pegasus/neighborhood/mars/gravitoncannon.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/hermite.cpp b/engines/pegasus/neighborhood/mars/hermite.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/hermite.h b/engines/pegasus/neighborhood/mars/hermite.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/mars.h b/engines/pegasus/neighborhood/mars/mars.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/planetmover.cpp b/engines/pegasus/neighborhood/mars/planetmover.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/planetmover.h b/engines/pegasus/neighborhood/mars/planetmover.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/reactor.cpp b/engines/pegasus/neighborhood/mars/reactor.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/reactor.h b/engines/pegasus/neighborhood/mars/reactor.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/robotship.cpp b/engines/pegasus/neighborhood/mars/robotship.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/robotship.h b/engines/pegasus/neighborhood/mars/robotship.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp b/engines/pegasus/neighborhood/mars/shuttleenergymeter.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/shuttleenergymeter.h b/engines/pegasus/neighborhood/mars/shuttleenergymeter.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/shuttlehud.cpp b/engines/pegasus/neighborhood/mars/shuttlehud.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/shuttlehud.h b/engines/pegasus/neighborhood/mars/shuttlehud.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/shuttleweapon.cpp b/engines/pegasus/neighborhood/mars/shuttleweapon.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/shuttleweapon.h b/engines/pegasus/neighborhood/mars/shuttleweapon.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/spacechase3d.cpp b/engines/pegasus/neighborhood/mars/spacechase3d.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/spacechase3d.h b/engines/pegasus/neighborhood/mars/spacechase3d.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/spacejunk.cpp b/engines/pegasus/neighborhood/mars/spacejunk.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/spacejunk.h b/engines/pegasus/neighborhood/mars/spacejunk.h old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/tractorbeam.cpp b/engines/pegasus/neighborhood/mars/tractorbeam.cpp old mode 100755 new mode 100644 diff --git a/engines/pegasus/neighborhood/mars/tractorbeam.h b/engines/pegasus/neighborhood/mars/tractorbeam.h old mode 100755 new mode 100644 -- cgit v1.2.3 From 3abacdae830392ae72d4d5c02c596af87370255e Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 6 Apr 2012 14:17:25 -0400 Subject: PEGASUS: Attempt to fix compilation on MSVC --- engines/pegasus/neighborhood/mars/robotship.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/robotship.cpp b/engines/pegasus/neighborhood/mars/robotship.cpp index 9776027839..a0ff749910 100644 --- a/engines/pegasus/neighborhood/mars/robotship.cpp +++ b/engines/pegasus/neighborhood/mars/robotship.cpp @@ -262,7 +262,7 @@ void RobotShip::makeVelocityVector(CoordType x1, CoordType y1, CoordType x2, Coo CoordType length = ((PegasusEngine *)g_engine)->getRandomNumber(kVelocityVectorSlop - 1) + kVelocityVectorLength; vector.x = x2 - x1; vector.y = y2 - y1; - float oldLength = sqrt(vector.x * vector.x + vector.y * vector.y); + float oldLength = sqrt((float)(vector.x * vector.x + vector.y * vector.y)); vector.x = (int)(vector.x * length / oldLength); vector.y = (int)(vector.y * length / oldLength); } -- cgit v1.2.3 From 81e7c9a0c1599786a1aeb73d243609a2d280335f Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Tue, 28 Aug 2012 16:36:50 -0400 Subject: PEGASUS: Remove g_allHotspots global construction --- engines/pegasus/neighborhood/mars/mars.cpp | 64 +++++++++++++++--------------- 1 file changed, 32 insertions(+), 32 deletions(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index 816a13f01d..8c1098a73d 100644 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -128,17 +128,17 @@ Mars::Mars(InputHandler *nextHandler, PegasusEngine *owner) : Neighborhood(nextH } Mars::~Mars() { - g_allHotspots.remove(&_energyChoiceSpot); - g_allHotspots.remove(&_gravitonChoiceSpot); - g_allHotspots.remove(&_tractorChoiceSpot); - g_allHotspots.remove(&_shuttleViewSpot); - g_allHotspots.remove(&_shuttleTransportSpot); + _vm->getAllHotspots().remove(&_energyChoiceSpot); + _vm->getAllHotspots().remove(&_gravitonChoiceSpot); + _vm->getAllHotspots().remove(&_tractorChoiceSpot); + _vm->getAllHotspots().remove(&_shuttleViewSpot); + _vm->getAllHotspots().remove(&_shuttleTransportSpot); } void Mars::init() { Neighborhood::init(); - Hotspot *attackSpot = g_allHotspots.findHotspotByID(kAttackRobotHotSpotID); + Hotspot *attackSpot = _vm->getAllHotspots().findHotspotByID(kAttackRobotHotSpotID); attackSpot->setMaskedHotspotFlags(kDropItemSpotFlag, kDropItemSpotFlag); _attackingItem = NULL; @@ -1627,35 +1627,35 @@ void Mars::activateHotspots() { switch (GameState.getCurrentRoomAndView()) { case MakeRoomView(kMars48, kEast): if ((_navMovie.getFlags() & kLoopTimeBase) != 0 && _vm->getDragType() == kDragInventoryUse) - g_allHotspots.activateOneHotspot(kAttackRobotHotSpotID); + _vm->getAllHotspots().activateOneHotspot(kAttackRobotHotSpotID); break; case MakeRoomView(kMars56, kEast): switch (getCurrentActivation()) { case kActivateReactorReadyForNitrogen: item = (InventoryItem *)g_allItems.findItemByID(kNitrogenCanister); if (item->getItemState() != kNitrogenFull) - g_allHotspots.deactivateOneHotspot(kMars57DropNitrogenSpotID); + _vm->getAllHotspots().deactivateOneHotspot(kMars57DropNitrogenSpotID); // Fall through... case kActivateReactorReadyForCrowBar: - g_allHotspots.activateOneHotspot(kMars57CantOpenPanelSpotID); + _vm->getAllHotspots().activateOneHotspot(kMars57CantOpenPanelSpotID); break; } break; case MakeRoomView(kMarsRobotShuttle, kEast): if (_privateFlags.getFlag(kMarsPrivateGotMapChipFlag)) - g_allHotspots.deactivateOneHotspot(kRobotShuttleMapChipSpotID); + _vm->getAllHotspots().deactivateOneHotspot(kRobotShuttleMapChipSpotID); else - g_allHotspots.activateOneHotspot(kRobotShuttleMapChipSpotID); + _vm->getAllHotspots().activateOneHotspot(kRobotShuttleMapChipSpotID); if (_privateFlags.getFlag(kMarsPrivateGotOpticalChipFlag)) - g_allHotspots.deactivateOneHotspot(kRobotShuttleOpticalChipSpotID); + _vm->getAllHotspots().deactivateOneHotspot(kRobotShuttleOpticalChipSpotID); else - g_allHotspots.activateOneHotspot(kRobotShuttleOpticalChipSpotID); + _vm->getAllHotspots().activateOneHotspot(kRobotShuttleOpticalChipSpotID); if (_privateFlags.getFlag(kMarsPrivateGotShieldChipFlag)) - g_allHotspots.deactivateOneHotspot(kRobotShuttleShieldChipSpotID); + _vm->getAllHotspots().deactivateOneHotspot(kRobotShuttleShieldChipSpotID); else - g_allHotspots.activateOneHotspot(kRobotShuttleShieldChipSpotID); + _vm->getAllHotspots().activateOneHotspot(kRobotShuttleShieldChipSpotID); break; default: if (_privateFlags.getFlag(kMarsPrivateInSpaceChaseFlag)) { @@ -1868,7 +1868,7 @@ Hotspot *Mars::getItemScreenSpot(Item *item, DisplayElement *element) { if (destSpotID == kNoHotSpotID) return Neighborhood::getItemScreenSpot(item, element); - return g_allHotspots.findHotspotByID(destSpotID); + return _vm->getAllHotspots().findHotspotByID(destSpotID); } void Mars::takeItemFromRoom(Item *item) { @@ -2635,7 +2635,7 @@ void Mars::startUpFromFinishedSpaceChase() { _shuttleTransportSpot.setArea(kShuttleTransportBounds); _shuttleTransportSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); - g_allHotspots.push_back(&_shuttleTransportSpot); + _vm->getAllHotspots().push_back(&_shuttleTransportSpot); _privateFlags.setFlag(kMarsPrivateInSpaceChaseFlag, true); @@ -2766,20 +2766,20 @@ void Mars::startUpFromSpaceChase() { _energyChoiceSpot.setArea(kShuttleEnergyBeamBounds); _energyChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); - g_allHotspots.push_back(&_energyChoiceSpot); + _vm->getAllHotspots().push_back(&_energyChoiceSpot); _gravitonChoiceSpot.setArea(kShuttleGravitonBounds); _gravitonChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); - g_allHotspots.push_back(&_gravitonChoiceSpot); + _vm->getAllHotspots().push_back(&_gravitonChoiceSpot); _tractorChoiceSpot.setArea(kShuttleTractorBounds); _tractorChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); - g_allHotspots.push_back(&_tractorChoiceSpot); + _vm->getAllHotspots().push_back(&_tractorChoiceSpot); _shuttleViewSpot.setArea(kShuttleWindowLeft, kShuttleWindowTop, kShuttleWindowLeft + kShuttleWindowWidth, kShuttleWindowTop + kShuttleWindowHeight); _shuttleViewSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); - g_allHotspots.push_back(&_shuttleViewSpot); + _vm->getAllHotspots().push_back(&_shuttleViewSpot); _shuttleTransportSpot.setArea(kShuttleTransportBounds); _shuttleTransportSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); - g_allHotspots.push_back(&_shuttleTransportSpot); + _vm->getAllHotspots().push_back(&_shuttleTransportSpot); _privateFlags.setFlag(kMarsPrivateInSpaceChaseFlag, true); @@ -2900,20 +2900,20 @@ void Mars::marsTimerExpired(MarsTimerEvent &event) { _energyChoiceSpot.setArea(kShuttleEnergyBeamBounds); _energyChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); - g_allHotspots.push_back(&_energyChoiceSpot); + _vm->getAllHotspots().push_back(&_energyChoiceSpot); _gravitonChoiceSpot.setArea(kShuttleGravitonBounds); _gravitonChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); - g_allHotspots.push_back(&_gravitonChoiceSpot); + _vm->getAllHotspots().push_back(&_gravitonChoiceSpot); _tractorChoiceSpot.setArea(kShuttleTractorBounds); _tractorChoiceSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); - g_allHotspots.push_back(&_tractorChoiceSpot); + _vm->getAllHotspots().push_back(&_tractorChoiceSpot); _shuttleViewSpot.setArea(kShuttleWindowLeft, kShuttleWindowTop, kShuttleWindowLeft + kShuttleWindowWidth, kShuttleWindowTop + kShuttleWindowHeight); _shuttleViewSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); - g_allHotspots.push_back(&_shuttleViewSpot); + _vm->getAllHotspots().push_back(&_shuttleViewSpot); _shuttleTransportSpot.setArea(kShuttleTransportBounds); _shuttleTransportSpot.setHotspotFlags(kNeighborhoodSpotFlag | kClickSpotFlag); - g_allHotspots.push_back(&_shuttleTransportSpot); + _vm->getAllHotspots().push_back(&_shuttleTransportSpot); _privateFlags.setFlag(kMarsPrivateInSpaceChaseFlag, true); @@ -3008,11 +3008,11 @@ void Mars::throwAwayMarsShuttle() { _junk.stopDisplaying(); _energyBeam.cleanUpShuttleWeapon(); _gravitonCannon.cleanUpShuttleWeapon(); - g_allHotspots.remove(&_energyChoiceSpot); - g_allHotspots.remove(&_gravitonChoiceSpot); - g_allHotspots.remove(&_tractorChoiceSpot); - g_allHotspots.remove(&_shuttleViewSpot); - g_allHotspots.remove(&_shuttleTransportSpot); + _vm->getAllHotspots().remove(&_energyChoiceSpot); + _vm->getAllHotspots().remove(&_gravitonChoiceSpot); + _vm->getAllHotspots().remove(&_tractorChoiceSpot); + _vm->getAllHotspots().remove(&_shuttleViewSpot); + _vm->getAllHotspots().remove(&_shuttleTransportSpot); _explosions.releaseMovie(); _explosions.stopDisplaying(); -- cgit v1.2.3 From f61146f32791831211c7b9399ec681aed109f03b Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Tue, 28 Aug 2012 16:50:15 -0400 Subject: PEGASUS: Remove g_allItems global construction --- engines/pegasus/neighborhood/mars/mars.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'engines/pegasus/neighborhood/mars') diff --git a/engines/pegasus/neighborhood/mars/mars.cpp b/engines/pegasus/neighborhood/mars/mars.cpp index 8c1098a73d..9cc8ab63d4 100644 --- a/engines/pegasus/neighborhood/mars/mars.cpp +++ b/engines/pegasus/neighborhood/mars/mars.cpp @@ -1632,7 +1632,7 @@ void Mars::activateHotspots() { case MakeRoomView(kMars56, kEast): switch (getCurrentActivation()) { case kActivateReactorReadyForNitrogen: - item = (InventoryItem *)g_allItems.findItemByID(kNitrogenCanister); + item = (InventoryItem *)_vm->getAllItems().findItemByID(kNitrogenCanister); if (item->getItemState() != kNitrogenFull) _vm->getAllHotspots().deactivateOneHotspot(kMars57DropNitrogenSpotID); // Fall through... @@ -2151,7 +2151,7 @@ void Mars::receiveNotification(Notification *notification, const NotificationFla } break; case kMarsTurnOnPod: - item = (InventoryItem *)g_allItems.findItemByID(kMarsCard); + item = (InventoryItem *)_vm->getAllItems().findItemByID(kMarsCard); _vm->addItemToInventory(item); GameState.setScoringTurnedOnTransport(); loadLoopSound1(""); @@ -2259,7 +2259,7 @@ void Mars::receiveNotification(Notification *notification, const NotificationFla GameState.setMarsLockFrozen(false); break; case kMars57FreezeLock: - item = (InventoryItem *)g_allItems.findItemByID(kNitrogenCanister); + item = (InventoryItem *)_vm->getAllItems().findItemByID(kNitrogenCanister); item->setItemState(kNitrogenEmpty); _vm->addItemToInventory(item); setCurrentActivation(kActivateReactorReadyForCrowBar); @@ -2271,7 +2271,7 @@ void Mars::receiveNotification(Notification *notification, const NotificationFla _utilityFuse.lightFuse(); break; case kMars57BreakLock: - item = (InventoryItem *)g_allItems.findItemByID(kCrowbar); + item = (InventoryItem *)_vm->getAllItems().findItemByID(kCrowbar); _vm->addItemToInventory(item); GameState.setScoringUsedCrowBar(); GameState.setMarsLockBroken(true); -- cgit v1.2.3