Files
scummvm-cursorfix/engines/pegasus/neighborhood/mars/mars.h
2026-02-02 04:50:13 +01:00

259 lines
7.9 KiB
C++

/* 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 3 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, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef PEGASUS_NEIGHBORHOOD_MARS_MARS_H
#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 {
class CanyonChase;
class InventoryItem;
class Mars;
class TunnelPod;
enum MarsTimerCode {
kMarsPodCautionDisplayed,
kMarsPodCautionDismissed,
kMarsCanyonChaseExited,
kMarsCanyonChaseFaded,
kMarsLaunchTubeReached,
kMarsCanyonChaseFinished,
kMarsSpaceChaseFinished // Player ran out of time...
};
struct MarsTimerEvent {
Mars *mars;
MarsTimerCode event;
void fire();
};
enum ShuttleWeaponSelection {
kNoWeapon,
kEnergyBeam,
kGravitonCannon,
kTractorBeam
};
class Mars : public Neighborhood {
friend class CanyonChase;
friend class TunnelPod;
friend struct MarsTimerEvent;
public:
Mars(InputHandler *, PegasusEngine *);
~Mars() override;
GameInteraction *makeInteraction(const InteractionID) override;
void flushGameState() override;
uint16 getDateResID() const override;
AirQuality getAirQuality(const RoomID) override;
void checkAirMask() override;
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();
Common::Path getBriefingMovie() override;
Common::Path getEnvScanMovie() override;
uint getNumHints() override;
Common::Path getHintMovie(uint) override;
void shieldOn() override;
void shieldOff() override;
void checkContinuePoint(const RoomID, const DirectionConstant) override;
void setSoundFXLevel(const uint16) override;
void setAmbienceLevel(const uint16) override;
bool canSolve() override;
void doSolve() override;
bool inColorMatchingGame();
protected:
enum {
kMarsPrivatePodStorageOpenFlag,
kMarsPrivatePodTurnLeftFlag,
kMarsPrivatePodTurnRightFlag,
kMarsPrivateRobotTiredOfWaitingFlag,
kMarsPrivatePlatformZoomedInFlag,
kMarsPrivateBombExposedFlag,
kMarsPrivateDraggingBombFlag,
kMarsPrivateInSpaceChaseFlag,
kMarsPrivateGotMapChipFlag,
kMarsPrivateGotOpticalChipFlag,
kMarsPrivateGotShieldChipFlag,
kNumMarsPrivateFlags
};
void init() override;
void start() override;
void setUpAIRules() override;
void arriveAt(const RoomID, const DirectionConstant) override;
void takeItemFromRoom(Item *) override;
void dropItemIntoRoom(Item *, Hotspot *) override;
void activateHotspots() override;
void activateOneHotspot(HotspotInfoTable::Entry &, Hotspot *) override;
void clickInHotspot(const Input &, const Hotspot *) override;
InputBits getInputFilter() override;
TimeValue getViewTime(const RoomID, const DirectionConstant) override;
void getZoomEntry(const HotSpotID, ZoomTable::Entry &) override;
void findSpotEntry(const RoomID, const DirectionConstant, SpotFlags, SpotTable::Entry &) override;
CanOpenDoorReason canOpenDoor(DoorTable::Entry &) override;
void openDoor() override;
void closeDoorOffScreen(const RoomID, const DirectionConstant) override;
void startDoorOpenMovie(const TimeValue, const TimeValue) override;
void startExitMovie(const ExitTable::Entry &) override;
int16 getStaticCompassAngle(const RoomID, const DirectionConstant) override;
void getExitCompassMove(const ExitTable::Entry &, FaderMoveSpec &) override;
void getExtraCompassMove(const ExtraTable::Entry &, FaderMoveSpec &) override;
void turnTo(const DirectionConstant) override;
void startExtraSequence(const ExtraID, const NotificationFlags, const InputBits) override;
void receiveNotification(Notification *, const NotificationFlags) override;
void doorOpened() override;
void startUpFromFinishedTunnelPod();
void setUpReactorEnergyDrain();
Hotspot *getItemScreenSpot(Item *, DisplayElement *) override;
void lockThawed();
void robotTiredOfWaiting();
void setUpReactorLevel1();
void setUpNextReactorLevel();
void makeColorSequence();
void doUndoOneGuess();
void doReactorGuess(int32 guess);
void bombExplodesInGame();
void didntFindBomb();
CanMoveForwardReason canMoveForward(ExitTable::Entry &) override;
void cantMoveThatWay(CanMoveForwardReason) override;
void moveForward() override;
void bumpIntoWall() override;
void turnLeft() override;
void turnRight() override;
void airStageExpired();
void loadAmbientLoops() override;
void checkAirlockDoors();
void pickedUpItem(Item *item) override;
void cantOpenDoor(CanOpenDoorReason) override;
void launchMaze007Robot();
void launchMaze015Robot();
void launchMaze101Robot();
void launchMaze104Robot();
void launchMaze133Robot();
void launchMaze136Robot();
void launchMaze184Robot();
void timerExpired(const uint32) override;
void showRobotAtReactor();
void spotCompleted() override;
void doCanyonChase(void);
void startMarsTimer(TimeValue, TimeScale, MarsTimerCode);
void marsTimerExpired(MarsTimerEvent &);
void throwAwayMarsShuttle();
void startUpFromFinishedSpaceChase();
void startUpFromSpaceChase();
void transportOutFromSpaceChase(bool);
void spaceChaseClick(const Input &, const HotSpotID);
void updateCursor(const Common::Point &, const Hotspot *) override;
void playSpaceAmbient();
Common::Path getSoundSpotsName() override;
Common::Path getNavMovieName() override;
Movie _extraMovie;
NotificationCallBack _extraMovieCallBack;
InventoryItem *_attackingItem;
FuseFunction _bombFuse;
FuseFunction _noAirFuse;
FuseFunction _utilityFuse;
FlagsArray<byte, kNumMarsPrivateFlags> _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;
Sound _musicLoop;
SoundFader _musicFader;
MarsTimerEvent _marsEvent;
Movie _leftShuttleMovie;
Movie _rightShuttleMovie;
Movie _lowerLeftShuttleMovie;
Movie _lowerRightShuttleMovie;
Movie _centerShuttleMovie;
Movie _upperLeftShuttleMovie;
Movie _upperRightShuttleMovie;
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;
};
} // End of namespace Pegasus
#endif