diff options
author | Matthew Hoops | 2011-09-20 11:49:20 -0400 |
---|---|---|
committer | Matthew Hoops | 2011-09-20 11:49:20 -0400 |
commit | fec7a123fd34bd167528b49ddb46a3123f31c416 (patch) | |
tree | 6c9a3fe424949ada4ded89509533405da18eb93b /engines/pegasus | |
parent | 635c8aa370e78cfc74dc66dd7efad5924ba348d2 (diff) | |
download | scummvm-rg350-fec7a123fd34bd167528b49ddb46a3123f31c416.tar.gz scummvm-rg350-fec7a123fd34bd167528b49ddb46a3123f31c416.tar.bz2 scummvm-rg350-fec7a123fd34bd167528b49ddb46a3123f31c416.zip |
PEGASUS: Begin hooking the new code in as the main code
The first notification has been received!
Diffstat (limited to 'engines/pegasus')
-rwxr-xr-x | engines/pegasus/constants.h | 256 | ||||
-rw-r--r-- | engines/pegasus/pegasus.cpp | 37 | ||||
-rw-r--r-- | engines/pegasus/pegasus.h | 13 |
3 files changed, 303 insertions, 3 deletions
diff --git a/engines/pegasus/constants.h b/engines/pegasus/constants.h index b9b8540663..89fdeefad2 100755 --- a/engines/pegasus/constants.h +++ b/engines/pegasus/constants.h @@ -27,6 +27,7 @@ #define PEGASUS_CONSTANTS_H #include "common/endian.h" +#include "common/rect.h" #include "pegasus/types.h" @@ -264,6 +265,261 @@ const uint32 kPegasusPrimeVersion = 0x00009019; const char kNormalSave = 0; const char kContinueSave = 1; +// Display IDs. + +const tDisplayElementID kNavMovieID = 1; +const tDisplayElementID kTurnPushID = 2; + +const tDisplayElementID kMaxGameShellDisplayID = kTurnPushID; + +// Display ordering. + +const tDisplayOrder kNavLayer = 10000; +const tDisplayOrder kNavMovieOrder = kNavLayer; +const tDisplayOrder kTurnPushOrder = kNavMovieOrder + 1; + +///////////////////////////////////////////// +// +// Display IDs. + +const tDisplayElementID kScreenDimmerID = kMaxGameShellDisplayID + 1; +const tDisplayElementID kInterface1ID = kScreenDimmerID + 1; +const tDisplayElementID kInterface2ID = kInterface1ID + 1; +const tDisplayElementID kInterface3ID = kInterface2ID + 1; +const tDisplayElementID kInterface4ID = kInterface3ID + 1; +const tDisplayElementID kDateID = kInterface4ID + 1; +const tDisplayElementID kCompassID = kDateID + 1; +const tDisplayElementID kInventoryPushID = kCompassID + 1; +const tDisplayElementID kInventoryLidID = kInventoryPushID + 1; +const tDisplayElementID kBiochipPushID = kInventoryLidID + 1; +const tDisplayElementID kBiochipLidID = kBiochipPushID + 1; +const tDisplayElementID kEnergyBarID = kBiochipLidID + 1; +const tDisplayElementID kWarningLightID = kEnergyBarID + 1; +const tDisplayElementID kAILeftAreaID = kWarningLightID + 1; +const tDisplayElementID kAIMiddleAreaID = kAILeftAreaID + 1; +const tDisplayElementID kAIRightAreaID = kAIMiddleAreaID + 1; +const tDisplayElementID kAIMovieID = kAIRightAreaID + 1; +const tDisplayElementID kInventoryDropHighlightID = kAIMovieID + 1; +const tDisplayElementID kBiochipDropHighlightID = kInventoryDropHighlightID + 1; + +const tDisplayElementID kDraggingSpriteID = 1000; + +const tDisplayElementID kCroppedMovieID = 2000; + +const tDisplayElementID kNeighborhoodDisplayID = 3000; + +const tDisplayElementID kItemPictureBaseID = 5000; + +const tCoordType kNavAreaLeft = 64; +const tCoordType kNavAreaTop = 64; + +const tCoordType kBackground1Left = 0; +const tCoordType kBackground1Top = 64; + +const tCoordType kBackground2Left = 0; +const tCoordType kBackground2Top = 0; + +const tCoordType kBackground3Left = 576; +const tCoordType kBackground3Top = 64; + +const tCoordType kBackground4Left = 0; +const tCoordType kBackground4Top = 320; + +const tCoordType kOverviewControllerLeft = 540; +const tCoordType kOverviewControllerTop = 348; + +const tCoordType kSwapLeft = 194; +const tCoordType kSwapTop = 116; + +const tCoordType kSwapHiliteLeft = 200; +const tCoordType kSwapHiliteTop = 206; + +const tCoordType kDateLeft = 136; +const tCoordType kDateTop = 44; + +const tCoordType kCompassLeft = 222; +const tCoordType kCompassTop = 42; +const tCoordType kCompassWidth = 92; + +const tCoordType kInventoryPushLeft = 74; +const tCoordType kInventoryPushTop = 92; + +const tCoordType kInventoryLidLeft = 74; +const tCoordType kInventoryLidTop = 316; + +const tCoordType kBiochipPushLeft = 362; +const tCoordType kBiochipPushTop = 192; + +const tCoordType kBiochipLidLeft = 362; +const tCoordType kBiochipLidTop = 316; + +// TODO: Remove global variable needs +//const Common::Rect kInventoryHiliteBounds(334, 76, 430, 172); +//const Common::Rect kBiochipHiliteBounds (334, 364, 430, 460); + +const tCoordType kInventoryDropLeft = 0; +const tCoordType kInventoryDropTop = 320; +const tCoordType kInventoryDropRight = 232; +const tCoordType kInventoryDropBottom = 480; + +const tCoordType kBiochipDropLeft = 302; +const tCoordType kBiochipDropTop = 320; +const tCoordType kBiochipDropRight = 640; +const tCoordType kBiochipDropBottom = 480; + +const tCoordType kFinalMessageLeft = kInventoryPushLeft + 1; +const tCoordType kFinalMessageTop = kInventoryPushTop + 24; + +///////////////////////////////////////////// +// +// Notifications. + +const tNotificationID kJMPDCShellNotificationID = kLastNeighborhoodNotificationID + 1; +const tNotificationID kInterfaceNotificationID = kJMPDCShellNotificationID + 1; +const tNotificationID kAINotificationID = kInterfaceNotificationID + 1; +const tNotificationID kNoradNotificationID = kAINotificationID + 1; +const tNotificationID kNoradECRNotificationID = kNoradNotificationID + 1; +const tNotificationID kNoradFillingStationNotificationID = kNoradECRNotificationID + 1; +const tNotificationID kNoradPressureNotificationID = kNoradFillingStationNotificationID + 1; +const tNotificationID kNoradUtilityNotificationID = kNoradPressureNotificationID + 1; +const tNotificationID kNoradElevatorNotificationID = kNoradUtilityNotificationID + 1; +const tNotificationID kNoradSubPlatformNotificationID = kNoradElevatorNotificationID + 1; +const tNotificationID kSubControlNotificationID = kNoradSubPlatformNotificationID + 1; +const tNotificationID kNoradGreenBallNotificationID = kSubControlNotificationID + 1; +const tNotificationID kNoradGlobeNotificationID = kNoradGreenBallNotificationID + 1; +const tNotificationID kCaldoriaVidPhoneNotificationID = kNoradGlobeNotificationID + 1; +const tNotificationID kCaldoriaMessagesNotificationID = kCaldoriaVidPhoneNotificationID + 1; +const tNotificationID kCaldoriaBombTimerNotificationID = kCaldoriaMessagesNotificationID + 1; + +// Sent to the shell by fShellNotification. +const tNotificationFlags kGameStartingFlag = 1; +const tNotificationFlags kNeedNewJumpFlag = kGameStartingFlag << 1; +const tNotificationFlags kPlayerDiedFlag = kNeedNewJumpFlag << 1; + +const tNotificationFlags kJMPShellNotificationFlags = kGameStartingFlag | + kNeedNewJumpFlag | + kPlayerDiedFlag; + +// Sent to the interface. +const tNotificationFlags kInventoryLidOpenFlag = 1; +const tNotificationFlags kInventoryLidClosedFlag = kInventoryLidOpenFlag << 1; +const tNotificationFlags kInventoryDrawerUpFlag = kInventoryLidClosedFlag << 1; +const tNotificationFlags kInventoryDrawerDownFlag = kInventoryDrawerUpFlag << 1; +const tNotificationFlags kBiochipLidOpenFlag = kInventoryDrawerDownFlag << 1; +const tNotificationFlags kBiochipLidClosedFlag = kBiochipLidOpenFlag << 1; +const tNotificationFlags kBiochipDrawerUpFlag = kBiochipLidClosedFlag << 1; +const tNotificationFlags kBiochipDrawerDownFlag = kBiochipDrawerUpFlag << 1; + +const tNotificationFlags kInterfaceNotificationFlags = kInventoryLidOpenFlag | + kInventoryLidClosedFlag | + kInventoryDrawerUpFlag | + kInventoryDrawerDownFlag | + kBiochipLidOpenFlag | + kBiochipLidClosedFlag | + kBiochipDrawerUpFlag | + kBiochipDrawerDownFlag; + +// Hot spots. + +// Neighborhood hot spots. + +const tHotSpotID kFirstNeighborhoodSpotID = 5000; + +// kShellSpotFlag is a flag which marks all hot spots which belong to the shell, like +// the current item and current biochip spots. +const tHotSpotFlags kShellSpotFlag = 1; +// kNeighborhoodSpotFlag is a flag which marks all hot spots which belong to a +// neighborhood, like buttons on walls and so on. +const tHotSpotFlags kNeighborhoodSpotFlag = kShellSpotFlag << 1; +// kZoomInSpotFlag is a flag which marks all hot spots which indicate a zoom. +const tHotSpotFlags kZoomInSpotFlag = kNeighborhoodSpotFlag << 1; +// kZoomOutSpotFlag is a flag which marks all hot spots which indicate a zoom. +const tHotSpotFlags kZoomOutSpotFlag = kZoomInSpotFlag << 1; + +const tHotSpotFlags kClickSpotFlag = kZoomOutSpotFlag << 1; +const tHotSpotFlags kPlayExtraSpotFlag = kClickSpotFlag << 1; +const tHotSpotFlags kPickUpItemSpotFlag = kPlayExtraSpotFlag << 1; +const tHotSpotFlags kDropItemSpotFlag = kPickUpItemSpotFlag << 1; +const tHotSpotFlags kOpenDoorSpotFlag = kDropItemSpotFlag << 1; + +const tHotSpotFlags kZoomSpotFlags = kZoomInSpotFlag | kZoomOutSpotFlag; + +const tHotSpotFlags kHighestGameShellSpotFlag = kOpenDoorSpotFlag; + +///////////////////////////////////////////// +// +// Hot spots. + +// Shell hot spots. +// The shell reserves all hot spot IDs from 0 to 999 + +const tHotSpotID kCurrentItemSpotID = 0; +const tHotSpotID kCurrentBiochipSpotID = kCurrentItemSpotID + 1; + +const tHotSpotID kInventoryDropSpotID = kCurrentBiochipSpotID + 1; +const tHotSpotID kBiochipDropSpotID = kInventoryDropSpotID + 1; + +const tHotSpotID kInfoReturnSpotID = kBiochipDropSpotID + 1; + +const tHotSpotID kAIHint1SpotID = kInfoReturnSpotID + 1; +const tHotSpotID kAIHint2SpotID = kAIHint1SpotID + 1; +const tHotSpotID kAIHint3SpotID = kAIHint2SpotID + 1; +const tHotSpotID kAISolveSpotID = kAIHint3SpotID + 1; +const tHotSpotID kAIBriefingSpotID = kAISolveSpotID + 1; +const tHotSpotID kAIScanSpotID = kAIBriefingSpotID + 1; + +const tHotSpotID kPegasusRecallSpotID = kAIScanSpotID + 1; + +const tHotSpotID kAriesSpotID = kPegasusRecallSpotID + 1; +const tHotSpotID kMercurySpotID = kAriesSpotID + 1; +const tHotSpotID kPoseidonSpotID = kMercurySpotID + 1; + +const tHotSpotID kAirMaskToggleSpotID = kPoseidonSpotID + 1; + +const tHotSpotID kShuttleEnergySpotID = kAirMaskToggleSpotID + 1; +const tHotSpotID kShuttleGravitonSpotID = kShuttleEnergySpotID + 1; +const tHotSpotID kShuttleTractorSpotID = kShuttleGravitonSpotID + 1; +const tHotSpotID kShuttleViewSpotID = kShuttleTractorSpotID + 1; +const tHotSpotID kShuttleTransportSpotID = kShuttleViewSpotID + 1; + +// Most of these are obsolete: + +// kInventoryDropSpotFlag is a flag which marks hot spots which are valid drop spots +// for inventory items. +// const tHotSpotFlags kInventoryDropSpotFlag = kHighestGameShellSpotFlag << 1; + +// kBiochipDropSpotFlag is a flag which marks hot spots which are valid drop spots +// for biochips. +// const tHotSpotFlags kBiochipDropSpotFlag = kInventoryDropSpotFlag << 1; + +// kInventorySpotFlag is a flag which marks hot spots which indicate inventory items +// in the environment. +// const tHotSpotFlags kInventorySpotFlag = kBiochipDropSpotFlag << 1; + +// kBiochipSpotFlag is a flag which marks hot spots which indicate biochips +// in the environment. +const tHotSpotFlags kPickUpBiochipSpotFlag = kHighestGameShellSpotFlag << 1; +const tHotSpotFlags kDropBiochipSpotFlag = kPickUpBiochipSpotFlag << 1; + +const tHotSpotFlags kInfoReturnSpotFlag = kDropBiochipSpotFlag << 1; + +// Biochip and inventory hot spot flags... + +const tHotSpotFlags kAIBiochipSpotFlag = kInfoReturnSpotFlag << 1; +const tHotSpotFlags kPegasusBiochipSpotFlag = kAIBiochipSpotFlag << 1; +const tHotSpotFlags kOpticalBiochipSpotFlag = kPegasusBiochipSpotFlag << 1; +const tHotSpotFlags kAirMaskSpotFlag = kOpticalBiochipSpotFlag << 1; + +const tHotSpotFlags kJMPClickingSpotFlags = kClickSpotFlag | + kPlayExtraSpotFlag | + kOpenDoorSpotFlag | + kInfoReturnSpotFlag | + kAIBiochipSpotFlag | + kPegasusBiochipSpotFlag | + kOpticalBiochipSpotFlag | + kAirMaskSpotFlag; + + } // End of namespace Pegasus #endif diff --git a/engines/pegasus/pegasus.cpp b/engines/pegasus/pegasus.cpp index 3a9c7d1a5f..bc162972c8 100644 --- a/engines/pegasus/pegasus.cpp +++ b/engines/pegasus/pegasus.cpp @@ -44,6 +44,7 @@ //#define RUN_SUB_MOVIE // :D :D :D :D :D :D //#define RUN_INTERFACE_TEST +//#define RUN_OLD_CODE #ifdef RUN_INTERFACE_TEST #include "pegasus/sound.h" @@ -51,7 +52,8 @@ namespace Pegasus { -PegasusEngine::PegasusEngine(OSystem *syst, const PegasusGameDescription *gamedesc) : Engine(syst), InputHandler(0), _gameDescription(gamedesc) { +PegasusEngine::PegasusEngine(OSystem *syst, const PegasusGameDescription *gamedesc) : Engine(syst), InputHandler(0), _gameDescription(gamedesc), + _shellNotification(kJMPDCShellNotificationID, this), _returnHotspot(kInfoReturnSpotID) { _continuePoint = 0; _saveAllowed = _loadAllowed = true; } @@ -147,7 +149,7 @@ Common::Error PegasusEngine::run() { _system->delayMillis(10); } -#else +#elif defined(RUN_OLD_CODE) while (!shouldQuit()) { switch (_gameMode) { case kIntroMode: @@ -170,6 +172,30 @@ Common::Error PegasusEngine::run() { break; } } +#else + // Set up input + InputHandler::setInputHandler(this); + allowInput(true); + + // Set up inventories + _items.setWeightLimit(0); + _items.setOwnerID(kPlayerID); + _biochips.setWeightLimit(8); + _biochips.setOwnerID(kPlayerID); + + _shellNotification.notifyMe(this, kJMPShellNotificationFlags, kJMPShellNotificationFlags); + _shellNotification.setNotificationFlags(kGameStartingFlag, kGameStartingFlag); + + _returnHotspot.setArea(Common::Rect(kNavAreaLeft, kNavAreaTop, 512 + kNavAreaLeft, 256 + kNavAreaTop)); + _returnHotspot.setHotspotFlags(kInfoReturnSpotFlag); + g_allHotspots.push_back(&_returnHotspot); + + while (!shouldQuit()) { + checkNotifications(); + InputHandler::pollForInput(); + giveIdleTime(); + _gfx->updateDisplay(); + } #endif return Common::kNoError; @@ -488,4 +514,11 @@ Common::Error PegasusEngine::saveGameState(int slot, const Common::String &desc) return valid ? Common::kNoError : Common::kUnknownError; } +void PegasusEngine::receiveNotification(Notification *notification, const tNotificationFlags flags) { + if (&_shellNotification == notification) { + if (flags == kGameStartingFlag) + error("Notification test complete"); + } +} + } // End of namespace Pegasus diff --git a/engines/pegasus/pegasus.h b/engines/pegasus/pegasus.h index 8d49050ab6..a9984ea66d 100644 --- a/engines/pegasus/pegasus.h +++ b/engines/pegasus/pegasus.h @@ -33,8 +33,11 @@ #include "engines/engine.h" #include "pegasus/graphics.h" +#include "pegasus/hotspot.h" #include "pegasus/input.h" +#include "pegasus/notification.h" #include "pegasus/video.h" +#include "pegasus/items/inventory.h" #include "pegasus/neighborhood/neighborhood.h" namespace Video { @@ -66,7 +69,7 @@ enum GameMode { kQuitMode }; -class PegasusEngine : public ::Engine, public InputHandler { +class PegasusEngine : public ::Engine, public InputHandler, public NotificationManager { friend class InputHandler; public: @@ -101,6 +104,9 @@ protected: Cursor *_cursor; + Notification _shellNotification; + virtual void receiveNotification(Notification *notification, const tNotificationFlags flags); + private: // Intro void runIntro(); @@ -152,6 +158,8 @@ private: // Items void createItems(); void createItem(tItemID itemID, tNeighborhoodID neighborhoodID, tRoomID roomID, tDirectionConstant direction); + Inventory _items; + Inventory _biochips; // TimeBases Common::List<TimeBase *> _timeBases; @@ -163,6 +171,9 @@ private: void loadFromContinuePoint(); Common::ReadStream *_continuePoint; bool _saveAllowed, _loadAllowed; // It's so nice that this was in the original code already :P + + // Misc. + Hotspot _returnHotspot; }; } // End of namespace Pegasus |