aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage/ringworld2/ringworld2_logic.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/tsage/ringworld2/ringworld2_logic.h')
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.h249
1 files changed, 249 insertions, 0 deletions
diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h
new file mode 100644
index 0000000000..3922cdb799
--- /dev/null
+++ b/engines/tsage/ringworld2/ringworld2_logic.h
@@ -0,0 +1,249 @@
+/* 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_LOGIC_H
+#define TSAGE_RINGWORLD2_LOGIC_H
+
+#include "common/scummsys.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+
+namespace TsAGE {
+
+namespace Ringworld2 {
+
+using namespace TsAGE;
+
+#define R2_INVENTORY (*((::TsAGE::Ringworld2::Ringworld2InvObjectList *)g_globals->_inventory))
+
+class SceneFactory {
+public:
+ static Scene *createScene(int sceneNumber);
+};
+
+class SceneExt: public Scene {
+private:
+ static void startStrip();
+ static void endStrip();
+public:
+ int _field372;
+ bool _savedPlayerEnabled;
+ bool _savedUiEnabled;
+ bool _savedCanWalk;
+ int _field37A;
+
+ SceneObject *_focusObject;
+ Visage _cursorVisage;
+
+ Rect _v51C34;
+public:
+ SceneExt();
+
+ virtual Common::String getClassName() { return "SceneExt"; }
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void process(Event &event);
+ virtual void dispatch();
+ virtual void loadScene(int sceneNum);
+ virtual void refreshBackground(int xAmount, int yAmount);
+
+ bool display(CursorType action);
+ void fadeOut();
+ void clearScreen();
+};
+
+class DisplayHotspot : public SceneObject {
+private:
+ Common::Array<int> _actions;
+ bool performAction(int action);
+public:
+ DisplayHotspot(int regionId, ...);
+
+ virtual void doAction(int action) {
+ if (!performAction(action))
+ SceneHotspot::doAction(action);
+ }
+};
+
+class DisplayObject : public SceneObject {
+private:
+ Common::Array<int> _actions;
+ bool performAction(int action);
+public:
+ DisplayObject(int firstAction, ...);
+
+ virtual void doAction(int action) {
+ if (!performAction(action))
+ SceneHotspot::doAction(action);
+ }
+};
+
+class SceneObjectExt : public SceneObject {
+public:
+ int _state;
+
+ virtual void synchronize(Serializer &s) {
+ SceneObject::synchronize(s);
+ s.syncAsSint16LE(_state);
+ }
+ virtual Common::String getClassName() { return "SceneObjectExt"; }
+};
+
+/*--------------------------------------------------------------------------*/
+
+class Ringworld2InvObjectList : public InvObjectList {
+public:
+ InvObject _inv1;
+ InvObject _inv2;
+ InvObject _inv3;
+ InvObject _steppingDisks;
+ InvObject _inv5;
+ InvObject _inv6;
+ InvObject _inv7;
+ InvObject _inv8;
+ InvObject _inv9;
+ InvObject _inv10;
+ InvObject _inv11;
+ InvObject _inv12;
+ InvObject _inv13;
+ InvObject _inv14;
+ InvObject _inv15;
+ InvObject _inv16;
+ InvObject _inv17;
+ InvObject _inv18;
+ InvObject _inv19;
+ InvObject _inv20;
+ InvObject _inv21;
+ InvObject _inv22;
+ InvObject _inv23;
+ InvObject _inv24;
+ InvObject _inv25;
+ InvObject _inv26;
+ InvObject _inv27;
+ InvObject _inv28;
+ InvObject _inv29;
+ InvObject _inv30;
+ InvObject _inv31;
+ InvObject _inv32;
+ InvObject _inv33;
+ InvObject _inv34;
+ InvObject _inv35;
+ InvObject _inv36;
+ InvObject _inv37;
+ InvObject _inv38;
+ InvObject _inv39;
+ InvObject _inv40;
+ InvObject _inv41;
+ InvObject _inv42;
+ InvObject _inv43;
+ InvObject _inv44;
+ InvObject _inv45;
+ InvObject _inv46;
+ InvObject _inv47;
+ InvObject _inv48;
+ InvObject _inv49;
+ InvObject _inv50;
+ InvObject _inv51;
+ InvObject _inv52;
+
+ Ringworld2InvObjectList();
+ void reset();
+ void setObjectScene(int objectNum, int sceneNumber);
+
+ virtual Common::String getClassName() { return "Ringworld2InvObjectList"; }
+};
+
+#define RING2_INVENTORY (*((::TsAGE::Ringworld2::Ringworld2InvObjectList *)g_globals->_inventory))
+
+class Ringworld2Game: public Game {
+public:
+ virtual void start();
+ virtual void restart();
+ virtual void endGame(int resNum, int lineNum);
+
+ virtual Scene *createScene(int sceneNumber);
+ virtual void processEvent(Event &event);
+ virtual void rightClick();
+ virtual bool canSaveGameStateCurrently();
+ virtual bool canLoadGameStateCurrently();
+};
+
+class NamedHotspot : public SceneHotspot {
+public:
+ int _resNum, _lookLineNum, _useLineNum, _talkLineNum;
+ NamedHotspot();
+
+ virtual bool startAction(CursorType action, Event &event);
+ virtual Common::String getClassName() { return "NamedHotspot"; }
+ virtual void synchronize(Serializer &s);
+ virtual void setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum);
+ virtual void setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
+ virtual void setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode = 0);
+};
+
+class NamedHotspotExt : public NamedHotspot {
+public:
+ int _flag;
+ NamedHotspotExt() { _flag = 0; }
+
+ virtual Common::String getClassName() { return "NamedHotspot"; }
+ virtual void synchronize(Serializer &s) {
+ NamedHotspot::synchronize(s);
+ s.syncAsSint16LE(_flag);
+ }
+};
+
+class SceneActor: public SceneObject {
+public:
+ int _resNum;
+ int _lookLineNum, _talkLineNum, _useLineNum;
+ int _effect, _shade;
+
+ virtual Common::String getClassName() { return "SceneActor"; }
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual bool startAction(CursorType action, Event &event);
+
+ void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
+ void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum);
+};
+
+class SceneActorExt: public SceneActor {
+public:
+ int _state;
+
+ SceneActorExt() { _state = 0; }
+ virtual Common::String getClassName() { return "SceneActorExt"; }
+ virtual void synchronize(Serializer &s) {
+ SceneActor::synchronize(s);
+ s.syncAsSint16LE(_state);
+ }
+};
+
+
+} // End of namespace Ringworld2
+
+} // End of namespace TsAGE
+
+#endif