Initial commit

This commit is contained in:
2026-02-02 04:50:13 +01:00
commit 5b11698731
22592 changed files with 7677434 additions and 0 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,79 @@
/* 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 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/>.
*
*/
#include "buried/buried.h"
#include "buried/graphics.h"
#include "buried/resources.h"
#include "buried/scene_view.h"
#include "buried/environ/scene_base.h"
namespace Buried {
SceneBase::SceneBase(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation) : _vm(vm), _staticData(sceneStaticData) {
_frameCycleCount = _staticData.cycleStartFrame;
((SceneViewWindow *)viewWindow)->changeStillFrameMovie(_vm->getFilePath(_staticData.location.timeZone, _staticData.location.environment, SF_STILLS));
if (_staticData.cycleStartFrame >= 0)
((SceneViewWindow *)viewWindow)->changeCycleFrameMovie(_vm->getFilePath(_staticData.location.timeZone, _staticData.location.environment, SF_CYCLES));
}
int SceneBase::paint(Window *viewWindow, Graphics::Surface *preBuffer) {
const Graphics::Surface *newFrame = nullptr;
if (_frameCycleCount >= 0) {
newFrame = ((SceneViewWindow *)viewWindow)->getCycleFrame(_frameCycleCount);
if (!newFrame)
newFrame = ((SceneViewWindow *)viewWindow)->getStillFrame(_staticData.navFrameIndex);
} else if (_staticData.navFrameIndex >= 0) {
newFrame = ((SceneViewWindow *)viewWindow)->getStillFrame(_staticData.navFrameIndex);
}
if (newFrame)
_vm->_gfx->crossBlit(preBuffer, 0, 0, 432, 189, newFrame, 0, 0);
return SC_REPAINT;
}
int SceneBase::timerCallback(Window *viewWindow) {
// Check if we're cycling
if (_frameCycleCount < 0)
return SC_FALSE;
// Increment and wrap cycle counter
_frameCycleCount++;
if (_frameCycleCount > (_staticData.cycleStartFrame + _staticData.cycleFrameCount - 1))
_frameCycleCount = _staticData.cycleStartFrame;
// Update the view window
viewWindow->invalidateWindow(false);
return SC_TRUE;
}
int SceneBase::specifyCursor(Window *viewWindow, const Common::Point &pointLocation) {
return (int)kCursorArrow;
}
} // End of namespace Buried

View File

@@ -0,0 +1,117 @@
/* 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 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 BURIED_SCENE_BASE_H
#define BURIED_SCENE_BASE_H
#include "common/keyboard.h"
#include "common/rect.h"
#include "buried/navdata.h"
namespace Graphics {
struct Surface;
}
namespace Buried {
// Generic result codes
enum {
SC_FALSE = 0, // Everything did not go well, error out
SC_TRUE = 1, // Everything is kosher, continue as normal
SC_END_PROCESSING = 4 // Stop processing here
};
// Post-exit specific result codes
enum {
SC_DEATH = 3 // We died, so do nothing further
};
// Paint-specific return values
enum {
SC_REPAINT = 0,
SC_DO_NOT_REPAINT = 1
};
// Movie status codes
enum {
MOVIE_START = 0,
MOVIE_STOPPED = 1,
MOVIE_PLAYING = 2,
MOVIE_ABORTED_BY_USER = 3,
MOVIE_LOOPING_RESTART = 4
};
// Inventory item related return codes
enum {
SIC_REJECT = 0,
SIC_ACCEPT = 1
};
class BuriedEngine;
class Window;
class VideoWindow;
class SceneBase { // Wow, it's not a window!
public:
SceneBase(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation);
virtual ~SceneBase() {}
virtual void preDestructor() {}
virtual int preEnterRoom(Window *viewWindow, const Location &priorLocation) { return SC_TRUE; }
virtual int postEnterRoom(Window *viewWindow, const Location &priorLocation) { return SC_TRUE; }
virtual int preExitRoom(Window *viewWindow, const Location &priorLocation) { return SC_TRUE; }
virtual int postExitRoom(Window *viewWindow, const Location &priorLocation) { return SC_TRUE; }
virtual int mouseDown(Window *viewWindow, const Common::Point &pointLocation) { return SC_TRUE; }
virtual int mouseUp(Window *viewWindow, const Common::Point &pointLocation) { return SC_TRUE; }
virtual int mouseMove(Window *viewWindow, const Common::Point &pointLocation) { return SC_TRUE; }
virtual int onCharacter(Window *viewWindow, const Common::KeyState &character) { return SC_TRUE; }
virtual int paint(Window *viewWindow, Graphics::Surface *preBuffer);
virtual int gdiPaint(Window *viewWindow) { return SC_REPAINT; }
virtual int movieCallback(Window *viewWindow, VideoWindow *movie, int animationID, int status) { return SC_TRUE; }
virtual int timerCallback(Window *viewWindow);
virtual int draggingItem(Window *viewWindow, int itemID, const Common::Point &pointLocation, int itemFlags) { return 0; }
virtual int droppedItem(Window *viewWindow, int itemID, const Common::Point &pointLocation, int itemFlags) { return SIC_REJECT; }
virtual int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
virtual int locateAttempted(Window *viewWindow, const Common::Point &pointLocation) { return 0; }
LocationStaticData _staticData;
int32 _frameCycleCount;
protected:
BuriedEngine *_vm;
};
} // End of namespace Buried
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,414 @@
/* 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 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 BURIED_SCENE_COMMON_H
#define BURIED_SCENE_COMMON_H
#include "buried/avi_frames.h"
#include "buried/bookdata.h"
#include "buried/inndata.h"
#include "buried/environ/scene_base.h"
namespace Buried {
class BasicDoor : public SceneBase {
public:
BasicDoor(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int left = -1, int top = -1, int right = -1, int bottom = -1, int timeZone = -1, int environment = -1,
int node = -1, int facing = -1, int orientation = -1, int depth = -1, int transitionType = -1, int transitionData = -1,
int transitionStartFrame = -1, int transitionLength = -1, int openingSoundID = -1);
int mouseDown(Window *viewWindow, const Common::Point &pointLocation);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
bool _clicked;
Common::Rect _clickable;
DestinationScene _destData;
int _openingSoundID;
};
class TurnDepthPreChange : public SceneBase {
public:
TurnDepthPreChange(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
byte &flag, int upDepth = -1, int leftDepth = -1, int rightDepth = -1, int downDepth = -1, int forwardDepth = -1);
};
class GenericItemAcquire : public SceneBase {
public:
GenericItemAcquire(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int left, int top, int right, int bottom, int itemID, int clearStillFrame, byte &itemFlag);
int mouseDown(Window *viewWindow, const Common::Point &pointLocation);
virtual int droppedItem(Window *viewWindow, int itemID, const Common::Point &pointLocation, int itemFlags);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
protected:
bool _itemPresent;
Common::Rect _acquireRegion;
int _fullFrameIndex;
int _clearFrameIndex;
int _itemID;
byte &_itemFlag;
};
class PlaySoundExitingFromScene : public SceneBase {
public:
PlaySoundExitingFromScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int soundFileNameID = -1);
int postExitRoom(Window *viewWindow, const Location &newLocation);
private:
int _soundFileNameID;
};
class PlaySoundExitingFromSceneDeux : public SceneBase {
public:
PlaySoundExitingFromSceneDeux(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int soundFileNameID = -1);
int postExitRoom(Window *viewWindow, const Location &newLocation);
private:
int _soundFileNameID;
};
class PlaySoundEnteringScene : public SceneBase {
public:
PlaySoundEnteringScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int soundFileNameID, byte &flag);
int postEnterRoom(Window *viewWindow, const Location &priorLocation);
private:
int _soundFileNameID;
byte &_flag;
};
class ClickChangeScene : public SceneBase {
public:
ClickChangeScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int left = -1, int top = -1, int right = -1, int bottom = -1, int cursorID = 0,
int timeZone = -1, int environment = -1, int node = -1, int facing = -1, int orientation = -1, int depth = -1,
int transitionType = -1, int transitionData = -1, int transitionStartFrame = -1, int transitionLength = -1);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
private:
int _cursorID;
Common::Rect _clickRegion;
DestinationScene _clickDestination;
};
class ClickPlayVideoSwitchAI : public SceneBase {
public:
ClickPlayVideoSwitchAI(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int animID, int cursorID, byte &flag, int left = 0, int top = 0, int right = 0, int bottom = 0);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
private:
int _cursorID;
int _animID;
Common::Rect _clickRegion;
byte &_flag;
};
class ClickChangeSceneSetFlag : public ClickChangeScene {
public:
ClickChangeSceneSetFlag(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int left, int top, int right, int bottom, int cursorID,
int timeZone, int environment, int node, int facing, int orientation, int depth,
int transitionType, int transitionData, int transitionStartFrame, int transitionLength, byte &flag);
};
class PlayStingers : public SceneBase {
public:
PlayStingers(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int stingerVolume, byte &lastStingerFlag, byte &effectIDFlag, int firstStingerFileID, int lastStingerFileID);
int postEnterRoom(Window *viewWindow, const Location &priorLocation);
private:
int _stingerVolume;
byte &_lastStingerFlag;
byte &_effectIDFlag;
int _firstStingerFileID;
int _lastStingerFileID;
};
class ClickPlaySound : public SceneBase {
public:
ClickPlaySound(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
byte &flag, int soundID, int cursorID, int left, int top, int right, int bottom);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
private:
int _cursorID;
int _soundID;
Common::Rect _clickRegion;
byte &_flag;
};
class ClickZoom : public SceneBase {
public:
ClickZoom(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int animInID = -1, int stillInID = -1, int animOutID = -1, int stillOutID = -1,
int cursorID = 0, int left = 0, int top = 0, int right = 0, int bottom = 0);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
private:
int _cursorID;
Common::Rect _clickRegion;
int _animInID;
int _stillInID;
int _animOutID;
int _stillOutID;
bool _zoomedIn;
LocationStaticData _savedNavData;
};
class PlaySoundEnteringFromScene : public SceneBase {
public:
PlaySoundEnteringFromScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int soundFileNameID = -1, int timeZone = -1, int environment = -1, int node = -1, int facing = -1, int orientation = -1, int depth = -1);
int postEnterRoom(Window *viewWindow, const Location &priorLocation);
private:
Location _soundLocation;
int _soundFileNameID;
};
class SetFlagOnEntry : public SceneBase {
public:
SetFlagOnEntry(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
byte &flag, byte flagNewValue);
};
class InteractiveNewsNetwork : public SceneBase {
public:
InteractiveNewsNetwork(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int enterTransition = -1, int timeZone = -1, int environment = -1, int node = -1, int facing = -1, int orientation = -1, int depth = -1,
int transitionType = -1, int transitionData = -1, int transitionStartFrame = -1, int transitionLength = -1);
~InteractiveNewsNetwork();
int postEnterRoom(Window *viewWindow, const Location &priorLocation);
int preExitRoom(Window *viewWindow, const Location &newLocation);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int paint(Window *viewWindow, Graphics::Surface *preBuffer);
int movieCallback(Window *viewWindow, VideoWindow *movie, int animationID, int status);
int timerCallback(Window *viewWindow);
private:
int _enterTransition;
int _currentMovieFrame;
DestinationScene _returnDestination;
AVIFrames _stillFrames;
Common::Array<INNFrame> _frameDatabase;
Common::Array<INNMediaElement> _movieDatabase;
Common::Array<byte> _hyperLinkHistory;
bool _playingMovie;
bool _loopingMovie;
bool _playingAudio;
int _audioChannel;
void loadFrameDatabase();
void loadMovieDatabase();
};
class DisplayMessageWithEvidenceWhenEnteringNode : public SceneBase {
public:
DisplayMessageWithEvidenceWhenEnteringNode(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int evidenceID = -1, int messageBoxTextID = -1);
int postEnterRoom(Window *viewWindow, const Location &priorLocation);
private:
int _messageBoxTextID;
byte _evidenceID;
};
class ClickPlayLoopingVideoClip : public SceneBase {
public:
ClickPlayLoopingVideoClip(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int cursorID, int animID, int left, int top, int right, int bottom, byte &flag, int newFlagValue);
int preExitRoom(Window *viewWindow, const Location &newLocation);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
private:
int _cursorID;
int _animID;
Common::Rect _clickRegion;
byte &_flag;
int _flagValue;
bool _playing;
};
class OneShotEntryVideoWarning : public SceneBase {
public:
OneShotEntryVideoWarning(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int animID, byte &flag, int warningMessageID);
int postEnterRoom(Window *viewWindow, const Location &priorLocation);
private:
int _animID;
byte &_flag;
int _warningMessageID;
};
class DisableForwardMovement : public SceneBase {
public:
DisableForwardMovement(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int flagValue = 1);
};
class CycleEntryVideoWarning : public SceneBase {
public:
CycleEntryVideoWarning(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int animIDA = 0, int animIDB = 0, int warningMessageID = -1);
int postEnterRoom(Window *viewWindow, const Location &priorLocation);
private:
int _animIDA;
int _animIDB;
int _warningMessageID;
};
class ClickPlayVideoSwitch : public SceneBase {
public:
ClickPlayVideoSwitch(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int animID, int cursorID, byte &flag, int left = 0, int top = 0, int right = 0, int bottom = 0);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
private:
int _cursorID;
int _animID;
Common::Rect _clickRegion;
byte &_flag;
};
class ClickPlayVideo : public SceneBase {
public:
ClickPlayVideo(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int animID = 0, int cursorID = -1, int left = 0, int top = 0, int right = 0, int bottom = 0);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
private:
int _cursorID;
int _animID;
Common::Rect _clickRegion;
};
class VideoDeath : public SceneBase {
public:
VideoDeath(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation, int deathID = 0, int messageTextID = -1);
int postEnterRoom(Window *viewWindow, const Location &priorLocation);
int postExitRoom(Window *viewWindow, const Location &newLocation);
private:
int _deathID;
int _messageTextID;
};
class ClickChangeDepth : public SceneBase {
public:
ClickChangeDepth(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int newDepth = 0, int cursorID = 0, int left = -1, int top = -1, int right = -1, int bottom = -1);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
private:
int _newDepth;
int _cursorID;
Common::Rect _clickableRegion;
};
class OpenFirstItemAcquire : public SceneBase {
public:
OpenFirstItemAcquire(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int openLeft = 0, int openTop = 0, int openRight = 0, int openBottom = 0, int getLeft = 0, int getTop = 0, int getRight = 0,
int getBottom = 0, int animOpenWith = 0, int animOpenWithout = 0, int itemID = 0, int fullStillFrame = 0, int clearStillFrame = 0);
int mouseDown(Window *viewWindow, const Common::Point &pointLocation);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int droppedItem(Window *viewWindow, int itemID, const Common::Point &pointLocation, int itemFlags);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
private:
bool _itemPresent;
bool _open;
Common::Rect _openClickRegion;
Common::Rect _acquireRegion;
int _fullFrameIndex;
int _clearFrameIndex;
int _itemID;
int _animOpenWith;
int _animOpenWithout;
};
class BrowseBook : public SceneBase {
public:
BrowseBook(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int bookResID = 0, int textStartResID = -1, int startingPageID = 0, int timeZone = -1, int environment = -1,
int node = -1, int facing = -1, int orientation = -1, int depth = -1, int transitionType = -1, int transitionData = -1,
int transitionStartFrame = -1, int transitionLength = -1);
int gdiPaint(Window *viewWindow);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
int mouseMove(Window *viewWindow, const Common::Point &pointLocation);
private:
int pageChanged(Window *viewWindow);
int textTranslated(Window *viewWindow);
Common::Array<BookPage> _bookDatabase;
int _curPage;
Common::Rect _top, _bottom, _left, _right, _putDown;
DestinationScene _putDownDestination;
int _translatedTextResourceID;
int _curLineIndex;
};
class ClickPlaySoundSynchronous : public SceneBase {
public:
ClickPlaySoundSynchronous(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation,
int soundID = 0, int cursorID = 0, int left = 0, int top = 0, int right = 0, int bottom = 0);
int mouseUp(Window *viewWindow, const Common::Point &pointLocation);
int specifyCursor(Window *viewWindow, const Common::Point &pointLocation);
private:
int _cursorID;
int _soundID;
Common::Rect _clickRegion;
};
class TrialRecallScene : public SceneBase {
public:
TrialRecallScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation);
int postEnterRoom(Window *viewWindow, const Location &priorLocation);
};
} // End of namespace Buried
#endif

View File

@@ -0,0 +1,165 @@
/* 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 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/>.
*
*/
#include "buried/biochip_right.h"
#include "buried/buried.h"
#include "buried/gameui.h"
#include "buried/invdata.h"
#include "buried/inventory_window.h"
#include "buried/message.h"
#include "buried/navarrow.h"
#include "buried/resources.h"
#include "buried/scene_view.h"
#include "buried/sound.h"
#include "buried/environ/scene_base.h"
namespace Buried {
class OldApartmentSuitCap : public SceneBase {
public:
OldApartmentSuitCap(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation)
: SceneBase(vm, viewWindow, sceneStaticData, priorLocation) {}
int postEnterRoom(Window *viewWindow, const Location &priorLocation) override;
};
int OldApartmentSuitCap::postEnterRoom(Window *viewWindow, const Location &priorLocation) {
// Cloak before continuing
((GameUIWindow *)viewWindow->getParent())->_bioChipRightWindow->changeCurrentBioChip(kItemBioChipCloak);
((GameUIWindow *)viewWindow->getParent())->_bioChipRightWindow->sendMessage(new LButtonUpMessage(Common::Point(18, 130), 0));
// Play the second piece of the intro movie
((SceneViewWindow *)viewWindow)->playSynchronousAnimationExtern(_vm->computeFileNameResourceID(_staticData.location.timeZone, _staticData.location.environment, 3));
// Disable cloak before continuing
((SceneViewWindow *)viewWindow)->getGlobalFlags().bcCloakingEnabled = 0;
((GameUIWindow *)viewWindow->getParent())->_navArrowWindow->enableWindow(true);
((GameUIWindow *)viewWindow->getParent())->_sceneViewWindow->enableWindow(true);
((GameUIWindow *)viewWindow->getParent())->_inventoryWindow->enableWindow(true);
Common::String liveText;
if (_vm->getVersion() >= MAKEVERSION(1, 0, 4, 0))
liveText = _vm->getString(IDS_OLD_APT_RECALL_MESSAGE);
else
liveText = "Auto-recall Engaged";
((SceneViewWindow *)viewWindow)->displayLiveText(liveText, false);
// Jump to the future apartment
((SceneViewWindow *)viewWindow)->timeSuitJump(4);
return SC_TRUE;
}
bool SceneViewWindow::checkCustomAICommentDependencies(const Location &commentLocation, const AIComment &commentData) {
switch (commentLocation.timeZone) {
case 1:
return checkCustomCastleAICommentDependencies(commentLocation, commentData);
case 2:
return checkCustomMayanAICommentDependencies(commentLocation, commentData);
case 4:
return commentData.dependencyFlagOffsetB == 1; // Not sure what this one does
case 5:
return checkCustomDaVinciAICommentDependencies(commentLocation, commentData);
case 6:
return checkCustomSpaceStationAICommentDependencies(commentLocation, commentData);
}
return false;
}
bool SceneViewWindow::startEnvironmentAmbient(int oldTimeZone, int oldEnvironment, int timeZone, int environment, bool fade) {
switch (timeZone) {
case 1:
return startCastleAmbient(oldTimeZone, oldEnvironment, environment, fade);
case 2:
return startMayanAmbient(oldTimeZone, oldEnvironment, environment, fade);
case 3:
return startAgent3LairAmbient(oldTimeZone, oldEnvironment, environment, fade);
case 4:
return startFutureApartmentAmbient(oldTimeZone, oldEnvironment, environment, fade);
case 5:
return startDaVinciAmbient(oldTimeZone, oldEnvironment, environment, fade);
case 6:
return startAILabAmbient(oldTimeZone, oldEnvironment, environment, fade);
case 7:
return startAlienAmbient(oldTimeZone, oldEnvironment, environment, fade);
case 10:
return _vm->_sound->setAmbientSound();
}
return false;
}
SceneBase *SceneViewWindow::constructSceneObject(Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation) {
switch (sceneStaticData.location.timeZone) {
case 0: // Miscellaneous scenes
// This seems unused?
warning("Could not create scene object for time zone %d", sceneStaticData.location.timeZone);
break;
case 1: // Castle
return constructCastleSceneObject(viewWindow, sceneStaticData, priorLocation);
case 2: // Mayan
return constructMayanSceneObject(viewWindow, sceneStaticData, priorLocation);
case 3: // Agent 3's Lair
return constructAgent3LairSceneObject(viewWindow, sceneStaticData, priorLocation);
case 4: // Future Apartment
return constructFutureApartmentSceneObject(viewWindow, sceneStaticData, priorLocation);
case 5: // Da Vinci
return constructDaVinciSceneObject(viewWindow, sceneStaticData, priorLocation);
case 6: // AI Lab
return constructAILabSceneObject(viewWindow, sceneStaticData, priorLocation);
case 7: // Alien
return constructAlienSceneObject(viewWindow, sceneStaticData, priorLocation);
case 10: // Old Apartment
return new OldApartmentSuitCap(_vm, viewWindow, sceneStaticData, priorLocation);
default:
error("Unknown time zone %d", sceneStaticData.location.timeZone);
}
return new SceneBase(_vm, viewWindow, sceneStaticData, priorLocation);
}
bool SceneViewWindow::initializeTimeZoneAndEnvironment(Window *viewWindow, int timeZone, int environment) {
switch (timeZone) {
case 1:
return initializeCastleTimeZoneAndEnvironment(viewWindow, environment);
case 2:
return initializeMayanTimeZoneAndEnvironment(viewWindow, environment);
case 3:
return initializeAgent3LairTimeZoneAndEnvironment(viewWindow, environment);
case 4:
// Nothing to do
return true;
case 5:
return initializeDaVinciTimeZoneAndEnvironment(viewWindow, environment);
case 6:
return initializeAILabTimeZoneAndEnvironment(viewWindow, environment);
case 7:
return initializeAlienTimeZoneAndEnvironment(viewWindow, environment);
}
return false;
}
} // End of namespace Buried