1 /* ScummVM - Graphic Adventure Engine 2 * 3 * ScummVM is the legal property of its developers, whose names 4 * are too numerous to list here. Please refer to the COPYRIGHT 5 * file distributed with this source distribution. 6 * 7 * Additional copyright for this file: 8 * Copyright (C) 1995 Presto Studios, Inc. 9 * 10 * This program is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU General Public License 12 * as published by the Free Software Foundation; either version 2 13 * of the License, or (at your option) any later version. 14 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 23 * 24 */ 25 26 #ifndef BURIED_SCENE_COMMON_H 27 #define BURIED_SCENE_COMMON_H 28 29 #include "buried/avi_frames.h" 30 #include "buried/bookdata.h" 31 #include "buried/inndata.h" 32 #include "buried/environ/scene_base.h" 33 34 namespace Buried { 35 36 class BasicDoor : public SceneBase { 37 public: 38 BasicDoor(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 39 int left = -1, int top = -1, int right = -1, int bottom = -1, int timeZone = -1, int environment = -1, 40 int node = -1, int facing = -1, int orientation = -1, int depth = -1, int transitionType = -1, int transitionData = -1, 41 int transitionStartFrame = -1, int transitionLength = -1, int openingSoundID = -1); 42 43 int mouseDown(Window *viewWindow, const Common::Point &pointLocation); 44 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 45 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 46 47 bool _clicked; 48 Common::Rect _clickable; 49 DestinationScene _destData; 50 int _openingSoundID; 51 }; 52 53 class TurnDepthPreChange : public SceneBase { 54 public: 55 TurnDepthPreChange(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 56 int flagOffset = -1, int upDepth = -1, int leftDepth = -1, int rightDepth = -1, int downDepth = -1, int forwardDepth = -1); 57 }; 58 59 class GenericItemAcquire : public SceneBase { 60 public: 61 GenericItemAcquire(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 62 int left = 0, int top = 0, int right = 0, int bottom = 0, int itemID = 0, int clearStillFrame = 0, int itemFlagOffset = 0); 63 int mouseDown(Window *viewWindow, const Common::Point &pointLocation); 64 virtual int droppedItem(Window *viewWindow, int itemID, const Common::Point &pointLocation, int itemFlags); 65 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 66 67 protected: 68 bool _itemPresent; 69 Common::Rect _acquireRegion; 70 int _fullFrameIndex; 71 int _clearFrameIndex; 72 int _itemID; 73 int _itemFlagOffset; 74 }; 75 76 class PlaySoundExitingFromScene : public SceneBase { 77 public: 78 PlaySoundExitingFromScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 79 int soundFileNameID = -1); 80 int postExitRoom(Window *viewWindow, const Location &newLocation); 81 82 private: 83 int _soundFileNameID; 84 }; 85 86 class PlaySoundExitingFromSceneDeux : public SceneBase { 87 public: 88 PlaySoundExitingFromSceneDeux(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 89 int soundFileNameID = -1); 90 int postExitRoom(Window *viewWindow, const Location &newLocation); 91 92 private: 93 int _soundFileNameID; 94 }; 95 96 class PlaySoundEnteringScene : public SceneBase { 97 public: 98 PlaySoundEnteringScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 99 int soundFileNameID = -1, int flagOffset = -1); 100 int postEnterRoom(Window *viewWindow, const Location &priorLocation); 101 102 private: 103 int _soundFileNameID; 104 int _flagOffset; 105 }; 106 107 class ClickChangeScene : public SceneBase { 108 public: 109 ClickChangeScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 110 int left = -1, int top = -1, int right = -1, int bottom = -1, int cursorID = 0, 111 int timeZone = -1, int environment = -1, int node = -1, int facing = -1, int orientation = -1, int depth = -1, 112 int transitionType = -1, int transitionData = -1, int transitionStartFrame = -1, int transitionLength = -1); 113 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 114 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 115 116 private: 117 int _cursorID; 118 Common::Rect _clickRegion; 119 DestinationScene _clickDestination; 120 }; 121 122 class ClickPlayVideoSwitchAI : public SceneBase { 123 public: 124 ClickPlayVideoSwitchAI(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 125 int animID = 0, int cursorID = 0, int flagOffset = 0, int left = 0, int top = 0, int right = 0, int bottom = 0); 126 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 127 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 128 129 private: 130 int _cursorID; 131 int _animID; 132 Common::Rect _clickRegion; 133 int _flagOffset; 134 }; 135 136 class ClickChangeSceneSetFlag : public ClickChangeScene { 137 public: 138 ClickChangeSceneSetFlag(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 139 int left = -1, int top = -1, int right = -1, int bottom = -1, int cursorID = 0, 140 int timeZone = -1, int environment = -1, int node = -1, int facing = -1, int orientation = -1, int depth = -1, 141 int transitionType = -1, int transitionData = -1, int transitionStartFrame = -1, int transitionLength = -1, int flagIndex = -1); 142 }; 143 144 class PlayStingers : public SceneBase { 145 public: 146 PlayStingers(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 147 int stingerVolume = 127, int lastStingerFlagOffset = -1, int effectIDFlagOffset = -1, int firstStingerFileID = -1, int lastStingerFileID = -1); 148 int postEnterRoom(Window *viewWindow, const Location &priorLocation); 149 150 private: 151 int _stingerVolume; 152 int _lastStingerFlagOffset; 153 int _effectIDFlagOffset; 154 int _firstStingerFileID; 155 int _lastStingerFileID; 156 }; 157 158 class ClickPlaySound : public SceneBase { 159 public: 160 ClickPlaySound(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 161 int flagOffset = -1, int soundID = 0, int cursorID = 0, int left = 0, int top = 0, int right = 0, int bottom = 0); 162 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 163 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 164 165 private: 166 int _cursorID; 167 int _soundID; 168 Common::Rect _clickRegion; 169 int _flagOffset; 170 }; 171 172 class ClickZoom : public SceneBase { 173 public: 174 ClickZoom(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 175 int animInID = -1, int stillInID = -1, int animOutID = -1, int stillOutID = -1, 176 int cursorID = 0, int left = 0, int top = 0, int right = 0, int bottom = 0); 177 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 178 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 179 180 private: 181 int _cursorID; 182 Common::Rect _clickRegion; 183 int _animInID; 184 int _stillInID; 185 int _animOutID; 186 int _stillOutID; 187 bool _zoomedIn; 188 LocationStaticData _savedNavData; 189 }; 190 191 class PlaySoundEnteringFromScene : public SceneBase { 192 public: 193 PlaySoundEnteringFromScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 194 int soundFileNameID = -1, int timeZone = -1, int environment = -1, int node = -1, int facing = -1, int orientation = -1, int depth = -1); 195 int postEnterRoom(Window *viewWindow, const Location &priorLocation); 196 197 private: 198 Location _soundLocation; 199 int _soundFileNameID; 200 }; 201 202 class SetFlagOnEntry : public SceneBase { 203 public: 204 SetFlagOnEntry(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 205 int flagOffset = -1, byte flagNewValue = 1); 206 }; 207 208 class InteractiveNewsNetwork : public SceneBase { 209 public: 210 InteractiveNewsNetwork(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 211 int enterTransition = -1, int timeZone = -1, int environment = -1, int node = -1, int facing = -1, int orientation = -1, int depth = -1, 212 int transitionType = -1, int transitionData = -1, int transitionStartFrame = -1, int transitionLength = -1); 213 ~InteractiveNewsNetwork(); 214 int postEnterRoom(Window *viewWindow, const Location &priorLocation); 215 int preExitRoom(Window *viewWindow, const Location &newLocation); 216 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 217 int paint(Window *viewWindow, Graphics::Surface *preBuffer); 218 int movieCallback(Window *viewWindow, VideoWindow *movie, int animationID, int status); 219 int timerCallback(Window *viewWindow); 220 221 private: 222 int _enterTransition; 223 int _currentMovieFrame; 224 DestinationScene _returnDestination; 225 AVIFrames _stillFrames; 226 Common::Array<INNFrame> _frameDatabase; 227 Common::Array<INNMediaElement> _movieDatabase; 228 Common::Array<byte> _hyperLinkHistory; 229 bool _playingMovie; 230 bool _loopingMovie; 231 bool _playingAudio; 232 int _audioChannel; 233 234 void loadFrameDatabase(); 235 void loadMovieDatabase(); 236 }; 237 238 class DisplayMessageWithEvidenceWhenEnteringNode : public SceneBase { 239 public: 240 DisplayMessageWithEvidenceWhenEnteringNode(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 241 int evidenceID = -1, int messageBoxTextID = -1); 242 int postEnterRoom(Window *viewWindow, const Location &priorLocation); 243 244 private: 245 int _messageBoxTextID; 246 byte _evidenceID; 247 }; 248 249 class ClickPlayLoopingVideoClip : public SceneBase { 250 public: 251 ClickPlayLoopingVideoClip(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 252 int cursorID = 0, int animID = -1, int left = 0, int top = 0, int right = 0, int bottom = 0, int flagOffset = -1, int newFlagValue = -1); 253 int preExitRoom(Window *viewWindow, const Location &newLocation); 254 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 255 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 256 257 private: 258 int _cursorID; 259 int _animID; 260 Common::Rect _clickRegion; 261 int _flagOffset; 262 int _flagValue; 263 bool _playing; 264 }; 265 266 class OneShotEntryVideoWarning : public SceneBase { 267 public: 268 OneShotEntryVideoWarning(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 269 int animID = 0, int flagOffset = 0, int warningMessageID = -1); 270 int postEnterRoom(Window *viewWindow, const Location &priorLocation); 271 272 private: 273 int _animID; 274 int _flagOffset; 275 int _warningMessageID; 276 }; 277 278 class DisableForwardMovement : public SceneBase { 279 public: 280 DisableForwardMovement(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 281 int flagOffset = -1, int flagValue = 1); 282 }; 283 284 class CycleEntryVideoWarning : public SceneBase { 285 public: 286 CycleEntryVideoWarning(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 287 int animIDA = 0, int animIDB = 0, int flagOffset = 0, int warningMessageID = -1); 288 int postEnterRoom(Window *viewWindow, const Location &priorLocation); 289 290 private: 291 int _animIDA; 292 int _animIDB; 293 int _flagOffset; 294 int _warningMessageID; 295 }; 296 297 class ClickPlayVideoSwitch : public SceneBase { 298 public: 299 ClickPlayVideoSwitch(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 300 int animID = 0, int cursorID = -1, int flagOffset = 0, int left = 0, int top = 0, int right = 0, int bottom = 0); 301 302 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 303 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 304 305 private: 306 int _cursorID; 307 int _animID; 308 Common::Rect _clickRegion; 309 int _flagOffset; 310 }; 311 312 class ClickPlayVideo : public SceneBase { 313 public: 314 ClickPlayVideo(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 315 int animID = 0, int cursorID = -1, int left = 0, int top = 0, int right = 0, int bottom = 0); 316 317 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 318 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 319 320 private: 321 int _cursorID; 322 int _animID; 323 Common::Rect _clickRegion; 324 }; 325 326 class VideoDeath : public SceneBase { 327 public: 328 VideoDeath(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, int deathID = 0, int messageTextID = -1); 329 int postEnterRoom(Window *viewWindow, const Location &priorLocation); 330 int postExitRoom(Window *viewWindow, const Location &newLocation); 331 332 private: 333 int _deathID; 334 int _messageTextID; 335 }; 336 337 class ClickChangeDepth : public SceneBase { 338 public: 339 ClickChangeDepth(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 340 int newDepth = 0, int cursorID = 0, int left = -1, int top = -1, int right = -1, int bottom = -1); 341 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 342 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 343 344 private: 345 int _newDepth; 346 int _cursorID; 347 Common::Rect _clickableRegion; 348 }; 349 350 class OpenFirstItemAcquire : public SceneBase { 351 public: 352 OpenFirstItemAcquire(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 353 int openLeft = 0, int openTop = 0, int openRight = 0, int openBottom = 0, int getLeft = 0, int getTop = 0, int getRight = 0, 354 int getBottom = 0, int animOpenWith = 0, int animOpenWithout = 0, int itemID = 0, int fullStillFrame = 0, int clearStillFrame = 0, 355 int itemFlagOffset = 0); 356 int mouseDown(Window *viewWindow, const Common::Point &pointLocation); 357 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 358 int droppedItem(Window *viewWindow, int itemID, const Common::Point &pointLocation, int itemFlags); 359 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 360 361 private: 362 bool _itemPresent; 363 bool _open; 364 Common::Rect _openClickRegion; 365 Common::Rect _acquireRegion; 366 int _fullFrameIndex; 367 int _clearFrameIndex; 368 int _itemID; 369 int _itemFlagOffset; 370 int _animOpenWith; 371 int _animOpenWithout; 372 }; 373 374 class BrowseBook : public SceneBase { 375 public: 376 BrowseBook(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 377 int bookResID = 0, int textStartResID = -1, int startingPageID = 0, int timeZone = -1, int environment = -1, 378 int node = -1, int facing = -1, int orientation = -1, int depth = -1, int transitionType = -1, int transitionData = -1, 379 int transitionStartFrame = -1, int transitionLength = -1); 380 int gdiPaint(Window *viewWindow); 381 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 382 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 383 int mouseMove(Window *viewWindow, const Common::Point &pointLocation); 384 385 private: 386 int pageChanged(Window *viewWindow); 387 int textTranslated(Window *viewWindow); 388 389 Common::Array<BookPage> _bookDatabase; 390 int _curPage; 391 Common::Rect _top, _bottom, _left, _right, _putDown; 392 DestinationScene _putDownDestination; 393 int _translatedTextResourceID; 394 int _curLineIndex; 395 }; 396 397 class ClickPlaySoundSynchronous : public SceneBase { 398 public: 399 ClickPlaySoundSynchronous(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, 400 int flagOffset = -1, int soundID = 0, int cursorID = 0, int left = 0, int top = 0, int right = 0, int bottom = 0); 401 int mouseUp(Window *viewWindow, const Common::Point &pointLocation); 402 int specifyCursor(Window *viewWindow, const Common::Point &pointLocation); 403 404 private: 405 int _cursorID; 406 int _soundID; 407 Common::Rect _clickRegion; 408 int _flagOffset; 409 }; 410 411 class TrialRecallScene : public SceneBase { 412 public: 413 TrialRecallScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation); 414 int postEnterRoom(Window *viewWindow, const Location &priorLocation); 415 }; 416 417 } // End of namespace Buried 418 419 #endif 420