scummvm/engines/tsage/ringworld2/ringworld2_scenes0.h

926 lines
23 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.
*
* 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 TSAGE_RINGWORLD2_SCENES0_H
#define TSAGE_RINGWORLD2_SCENES0_H
#include "common/scummsys.h"
#include "tsage/converse.h"
#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
#include "tsage/globals.h"
#include "tsage/sound.h"
#include "tsage/ringworld2/ringworld2_logic.h"
#include "tsage/ringworld2/ringworld2_speakers.h"
namespace TsAGE {
namespace Ringworld2 {
using namespace TsAGE;
class Scene50: public SceneExt {
class Action1: public Action {
public:
void signal();
};
public:
Action1 _action1;
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void process(Event &event);
};
class Scene100: public SceneExt {
/* Objects */
class Door: public SceneActorExt {
public:
bool startAction(CursorType action, Event &event);
};
class Table: public SceneActor {
public:
bool startAction(CursorType action, Event &event);
};
class StasisNegator: public SceneActor {
public:
bool startAction(CursorType action, Event &event);
};
class DoorDisplay: public SceneActorExt {
public:
bool startAction(CursorType action, Event &event);
};
class SteppingDisks: public SceneActor {
public:
bool startAction(CursorType action, Event &event);
};
/* Items */
class Terminal: public NamedHotspot{
public:
bool startAction(CursorType action, Event &event);
};
public:
NamedHotspot _background, _duct, _bed, _desk;
Terminal _terminal;
SceneActor _bedLights1, _bedLights2, _object3, _object4, _object5;
SceneActor _wardrobe;
Door _door;
Table _table;
StasisNegator _stasisNegator;
DoorDisplay _doorDisplay;
SteppingDisks _steppingDisks;
SequenceManager _sequenceManager1, _sequenceManager2;
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void remove();
virtual void signal();
virtual void dispatch();
};
class Scene125: public SceneExt {
/* Objects */
class Food: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Icon: public SceneActor {
public:
int _lookLineNum, _field98;
bool _pressed;
SceneObject _object1, _object2;
SceneText _sceneText1, _sceneText2;
Icon();
virtual Common::String getClassName() { return "Scene125_Icon"; }
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void synchronize(Serializer &s);
virtual void process(Event &event);
void setIcon(int id);
void showIcon();
void hideIcon();
};
/* Items */
class DiskSlot: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
public:
ScenePalette _palette;
ASoundExt _sound1;
NamedHotspot _background, _item2, _item3;
DiskSlot _diskSlot;
SceneActor _object1, _object2, _object3, _object4, _food, _foodDispenser, _infoDisk;
Icon _icon1, _icon2, _icon3, _icon4, _icon5, _icon6;
SequenceManager _sequenceManager;
SceneText _sceneText;
int _consoleMode, _iconFontNumber, _logIndex, _databaseIndex, _infodiskIndex;
int _soundCount, _soundIndex;
int _soundIndexes[10];
Scene125();
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void synchronize(Serializer &s);
virtual void signal();
virtual void process(Event &event);
virtual void dispatch();
void consoleAction(int id);
void setDetails(int resNum, int lineNum);
void stop();
Common::String parseMessage(const Common::String &msg);
};
class Scene150: public Scene100 {
public:
SceneActor _emptyRoomTable;
public:
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void remove();
virtual void signal();
};
class Scene160: public SceneExt {
class Action1: public Action {
public:
void signal();
};
public:
ASound _sound1;
Action1 _action1;
int _frameNumber, _yChange;
SceneObject _object1, _object2, _object3;
int _lineNum;
SynchronizedList<SceneText *> _creditsList;
public:
Scene160();
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void synchronize(Serializer &s);
virtual void remove();
virtual void process(Event &event);
};
class Scene175: public Scene150 {
};
class Scene180: public SceneExt {
class Action1: public Action {
public:
void signal();
};
private:
void setSceneDelay(int v);
public:
SpeakerWebbster _webbsterSpeaker;
SpeakerDutyOfficer _dutyOfficerSpeaker;
SpeakerTeal _tealSpeaker;
SpeakerGameText _gameTextSpeaker;
SceneActor _object1, _object2, _object3, _object4, _object5;
ScenePalette _palette;
SceneText _textList[20];
AnimationPlayerExt _animationPlayer;
SequenceManager _sequenceManager;
Action1 _action1;
ASoundExt _sound1;
int _frameNumber;
int _field412, _field480;
int _field482, _frameInc;
int _fontNumber, _fontHeight;
int _scene180Mode;
public:
Scene180();
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void synchronize(Serializer &s);
virtual void remove();
virtual void signal();
virtual void process(Event &event);
virtual void dispatch();
virtual void restore();
};
class Scene200: public SceneExt {
/* Objects */
class NorthDoor: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class EastDoor: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class WestDoor: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
/* Scene Exits */
class EastExit: public SceneExit {
public:
virtual void changeScene();
};
class WestExit: public SceneExit {
public:
virtual void changeScene();
};
public:
NamedHotspot _background, _compartment, _westDoorDisplay, _eastDoorDisplay;
NorthDoor _northDoor;
EastDoor _eastDoor;
WestDoor _westDoor;
EastExit _eastExit;
WestExit _westExit;
SequenceManager _sequenceManager;
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void signal();
};
class Scene205: public SceneExt {
/* Actions */
class Action1: public Action {
private:
void textLoop();
public:
virtual void signal();
};
/* Objects */
class Object: public SceneObject {
public:
int _x100, _y100;
public:
// TODO: Check if this derives from DataManager? and flesh out
};
private:
void setup();
void processList(Object **ObjList, int count, const Common::Rect &bounds,
int xMultiply, int yMultiply, int xCenter, int yCenter);
void handleText();
public:
AnimationPlayer _animationPlayer;
int _fontHeight;
SceneText _textList[15];
Object *_objList1[3];
Object *_objList2[3];
Object *_objList3[4];
ASound _sound1;
Action1 _action1;
int _yp;
int _textIndex, _lineNum;
Common::String _message;
public:
Scene205();
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void synchronize(Serializer &s);
virtual void remove();
virtual void process(Event &event);
virtual void dispatch();
};
class Scene250: public SceneExt {
class Button: public SceneActor {
public:
int _floorNumber;
Button();
void setFloor(int floorNumber);
virtual void synchronize(Serializer &s);
virtual bool startAction(CursorType action, Event &event);
};
public:
int _currButtonY, _destButtonY, _elevatorSpeed;
bool _skippingFl, _skippableFl;
NamedHotspot _background, _item2, _item3, _item4;
Button _button1, _currentFloor;
Button _floor1, _floor2, _floor3, _floor4, _floor5;
Button _floor6, _floor7, _floor8, _floor9;
ASoundExt _sound1;
SequenceManager _sequenceManager1;
public:
Scene250();
void changeFloor(int floorNumber);
virtual void synchronize(Serializer &s);
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void signal();
virtual void process(Event &event);
virtual void dispatch();
};
class Scene300: public SceneExt {
/* Actions */
class Action1: public Action {
public:
virtual void signal();
};
class Action2: public Action {
public:
virtual void signal();
};
class Action3: public Action {
public:
virtual void signal();
};
class Action4: public Action {
public:
virtual void signal();
};
/* Items */
class QuinnWorkstation: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
class MirandaWorkstation: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
class SeekerWorkstation: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
/* Objects */
class Miranda: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Seeker: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Quinn: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Doorway: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
public:
SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3, _sequenceManager4;
ASoundExt _sound1;
SpeakerMiranda300 _mirandaSpeaker;
SpeakerSeeker300 _seekerSpeaker;
SpeakerSeekerL _seekerLSpeaker;
SpeakerQuinn300 _quinnSpeaker;
SpeakerQuinnL _quinnLSpeaker;
SpeakerTeal300 _tealSpeaker;
SpeakerSoldier300 _soldierSpeaker;
NamedHotspot _background, _hull, _statusDisplays, _damageControl, _manualOverrides;
NamedHotspot _scanners1, _scanners2, _indirectLighting1, _indirectLighting2, _lighting;
QuinnWorkstation _quinnWorkstation1, _quinnWorkstation2;
SeekerWorkstation _seekerWorkstation;
MirandaWorkstation _mirandaWorkstation1, _mirandaWorkstation2;
SceneActor _object1, _object2, _object3, _object4, _protocolDisplay;
SceneActor _object6, _object7, _object8, _object9;
SceneActor _teal, _soldier, _object12;
Doorway _doorway;
Miranda _miranda;
Seeker _seeker;
Quinn _quinn;
Action1 _action1;
Action2 _action2;
Action3 _action3;
Action4 _action4;
PaletteRotation *_rotation;
int _stripId;
Scene300();
void signal309();
virtual void synchronize(Serializer &s);
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void remove();
virtual void signal();
};
class Scene325: public SceneExt {
class Icon: public SceneActor {
public:
int _lookLineNum, _field98;
bool _pressed;
SceneObject _object1, _object2;
SceneText _sceneText1, _sceneText2;
Icon();
virtual Common::String getClassName() { return "Scene325_Icon"; }
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void synchronize(Serializer &s);
virtual void process(Event &event);
void setIcon(int id);
void showIcon();
void hideIcon();
};
private:
void removeText();
void consoleAction(int id);
void setMessage(int resNum, int lineNum);
Common::String parseMessage(const Common::String &msg);
public:
int _field412, _iconFontNumber, _field416, _field418;
int _field41A, _field41C, _field41E, _scannerLocation;
int _soundCount, _soundIndex;
int _soundQueue[10];
SpeakerQuinn _quinnSpeaker;
ScenePalette _palette;
SceneHotspot _background, _item2;
SceneObject _object1, _object2, _object3, _object4, _object5;
SceneObject _object6, _object7, _object8, _object9, _object10;
SceneObject _object11, _object12, _scannerTab;
SceneObject _objList[4];
Icon _icon1, _icon2, _icon3, _icon4, _icon5, _icon6;
ASoundExt _sound1;
SequenceManager _sequenceManager1;
SceneText _text1;
public:
Scene325();
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void synchronize(Serializer &s);
virtual void remove();
virtual void signal();
virtual void process(Event &event);
virtual void dispatch();
};
class Scene400: public SceneExt {
/* Items */
class Terminal: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
/* Objects */
class Door: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Reader: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class SensorProbe: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class AttractorUnit: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
public:
NamedHotspot _background, _equipment1, _equipment2, _equipment3;
NamedHotspot _equipment4, _equipment5, _equipment6;
NamedHotspot _desk, _desk2, _console;
NamedHotspot _duct, _shelves, _cabinet, _doorDisplay, _lights;
NamedHotspot _equalizer, _transducer, _optimizer, _soundModule, _tester;
NamedHotspot _helmet, _nullifier;
Terminal _terminal;
SceneActor _consoleDisplay, _testerDisplay;
Door _door;
Reader _reader;
SensorProbe _sensorProbe;
AttractorUnit _attractorUnit;
SequenceManager _sequenceManager1;
ASoundExt _sound1;
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void remove();
virtual void signal();
virtual void dispatch();
};
class Scene500: public SceneExt {
/* Dialogs */
class PanelDialog: public SceneAreaObject {
class Button: public SceneActor {
private:
int _buttonId;
bool _buttonDown;
void doButtonPress();
public:
Button();
virtual Common::String getClassName() { return "Scene500_Button"; }
virtual void process(Event &event);
virtual bool startAction(CursorType action, Event &event);
virtual void synchronize(Serializer &s);
void setupButton(int buttonId);
};
public:
Button _button1, _button2, _button3;
virtual Common::String getClassName() { return "Scene500_PanelWindow"; }
virtual void remove();
void setDetails(int visage, int strip, int frameNumber, const Common::Point &pt);
};
/* Items */
class ControlPanel: public SceneHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
/* Objects */
class Seeker: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Suit: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Doorway: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class OxygenTanks: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class AirLock: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Object8: public SceneActor {
// This classes uses a custom draw method
};
class Aerosol: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class SonicStunner: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Locker1: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Locker2: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
public:
int _stripNumber;
byte _buffer[2710];
SpeakerSeeker500 _seekerSpeaker;
SpeakerQuinn500 _quinnSpeaker;
SceneHotspot _background, _item2;
ControlPanel _controlPanel;
SceneActor _object1;
Seeker _seeker;
Suit _suit;
Doorway _doorway;
OxygenTanks _tanks1, _tanks2;
AirLock _airLock;
Object8 _object8;
Aerosol _aerosol;
SonicStunner _sonicStunner;
Locker1 _locker1;
Locker2 _locker2;
PanelDialog _panelDialog;
ASoundExt _sound1;
SequenceManager _sequenceManager1, _sequenceManager2;
public:
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void synchronize(Serializer &s);
virtual void signal();
};
class Scene525: public SceneExt {
public:
SceneActor _actor1;
SequenceManager _sequenceManager;
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void signal();
};
class Scene600 : public SceneExt {
class CompartmentHotspot : public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Item4 : public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Smoke : public SceneActor {
public:
virtual void signal();
virtual bool startAction(CursorType action, Event &event);
virtual GfxSurface getFrame();
};
class Doorway : public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Laser : public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Aerosol : public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Scanner : public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
public:
int _field412;
CompartmentHotspot _background;
CompartmentHotspot _item2;
CompartmentHotspot _item3;
Item4 _item4;
CompartmentHotspot _item5;
BackgroundSceneObject _object1;
SceneActor _actor1;
SceneActor _computer;
SceneActor _stasisField;
Smoke _smoke;
Doorway _doorway;
Laser _laser;
Aerosol _aerosol;
Scanner _scanner;
ASoundExt _aSound1;
SequenceManager _sequenceManager1;
SequenceManager _sequenceManager2;
byte _pixelMap[256];
Scene600();
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void remove();
virtual void signal();
virtual void process(Event &event);
virtual void dispatch();
virtual void synchronize(Serializer &s);
};
class Scene700: public SceneExt {
class Item11 : public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
class HandGrip : public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Actor2 : public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Actor3 : public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Actor4 : public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Cable : public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Actor6 : public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
public:
NamedHotspot _item1;
NamedHotspot _item2;
NamedHotspot _item3;
NamedHotspot _item4;
NamedHotspot _item5;
NamedHotspot _item6;
NamedHotspot _item7;
NamedHotspot _item8;
NamedHotspot _item9;
NamedHotspot _item10;
Item11 _item11;
HandGrip _handGrip;
SceneActor _actor1;
Actor2 _actor2;
Actor3 _actor3;
Actor4 _actor4;
Cable _cable;
Actor6 _actor6;
Actor6 _actor7;
Actor6 _actor8;
Actor6 _actor9;
SequenceManager _sequenceManager;
PaletteRotation *_rotation;
int _field100E;
Scene700();
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void remove();
virtual void signal();
virtual void synchronize(Serializer &s);
};
class Scene800: public SceneExt {
/* Items */
class Button: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
class CableJunction: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
class DeviceSlot: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
/* Objects */
class Door: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Tray: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class ComScanner: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Cabinet: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
public:
NamedHotspot _background, _autoDoc, _diskSlot, _couch;
NamedHotspot _medicalDatabase, _dataConduits;
Button _button;
CableJunction _cableJunction;
DeviceSlot _deviceSlot;
SceneActor _autodocCover, _opticalFibre, _reader;
Door _door;
Tray _tray;
ComScanner _comScanner;
Cabinet _cabinet;
SequenceManager _sequenceManager1;
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void signal();
};
class Scene825: public SceneExt {
/* Objects */
class Button: public SceneObject {
public:
int _buttonId, _v2;
bool _buttonDown;
SceneText _sceneText;
public:
Button();
void setButton(int buttonId);
void setText(int textId);
virtual void synchronize(Serializer &s);
virtual void process(Event &event);
virtual bool startAction(CursorType action, Event &event);
};
public:
NamedHotspot _background, _item2;
SceneActor _object1, _object2, _object3, _object4, _object5;
Button _button1, _button2, _button3, _button4, _button5, _button6;
ASoundExt _sound1, _sound2, _sound3, _sound4;
SequenceManager _sequenceManager1;
SceneText _sceneText;
int _menuId, _frame1, _frame2;
const char *_autodocItems[11];
public:
Scene825();
virtual void synchronize(Serializer &s);
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void remove();
virtual void signal();
virtual void process(Event &event);
virtual void dispatch();
void doButtonPress(int buttonId);
};
class Scene850: public SceneExt {
/* Items */
class Indicator: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
/* Objects */
class LiftDoor: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class SickBayDoor: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Clamp: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Panel: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
public:
NamedHotspot _background, _eastDoor, _compartment, _sickBayIndicator;
NamedHotspot _liftControls;
Indicator _indicator;
SceneActor _object1, _fibre;
LiftDoor _liftDoor;
SickBayDoor _sickBayDoor;
Clamp _clamp;
Panel _panel;
SequenceManager _sequenceManager1;
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void signal();
};
class Scene900 : public SceneExt {
class Button : public SceneActor {
public:
int _buttonId;
Button();
void initButton(int buttonId);
virtual void synchronize(Serializer &s);
virtual bool startAction(CursorType action, Event &event);
};
public:
int _field412;
Common::Point _magnetChangeAmount;
NamedHotspot _item1;
SceneActor _actor1;
SceneActor _actor2;
SceneActor _electromagnet;
Button _button1;
Button _button2;
Button _button3;
Button _button4;
Button _button5;
Button _button6;
Button _button7;
ASoundExt _aSound1;
SequenceManager _sequenceManager1;
Scene900();
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void remove();
virtual void signal();
virtual void dispatch();
virtual void synchronize(Serializer &s);
};
} // End of namespace Ringworld2
} // End of namespace TsAGE
#endif