aboutsummaryrefslogtreecommitdiff
path: root/engines/m4/globals.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/m4/globals.h')
-rw-r--r--engines/m4/globals.h221
1 files changed, 221 insertions, 0 deletions
diff --git a/engines/m4/globals.h b/engines/m4/globals.h
new file mode 100644
index 0000000000..a0133db2d6
--- /dev/null
+++ b/engines/m4/globals.h
@@ -0,0 +1,221 @@
+/* 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.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef M4_GLOBALS_H
+#define M4_GLOBALS_H
+
+#include "common/array.h"
+#include "common/rect.h"
+#include "common/scummsys.h"
+
+namespace M4 {
+
+class M4Engine;
+class ScriptInterpreter;
+class ScriptFunction;
+
+// Globals
+enum WoodScriptGlobals {
+ kGlobTime = 0,
+ kGlobTimeDelta = 1,
+ kGlobMinY = 2,
+ kGlobMaxY = 3,
+ kGlobMinScale = 4,
+ kGlobMaxScale = 5,
+ kGlobScaler = 6,
+ kGlobTemp1 = 7,
+ kGlobTemp2 = 8,
+ kGlobTemp3 = 9,
+ kGlobTemp4 = 10,
+ kGlobTemp5 = 11,
+ kGlobTemp6 = 12,
+ kGlobTemp7 = 13,
+ kGlobTemp8 = 14,
+ kGlobTemp9 = 15,
+ kGlobTemp10 = 16,
+ kGlobTemp11 = 17,
+ kGlobTemp12 = 18,
+ kGlobTemp13 = 19,
+ kGlobTemp14 = 20,
+ kGlobTemp15 = 21,
+ kGlobTemp16 = 22,
+ kGlobTemp17 = 23,
+ kGlobTemp18 = 24,
+ kGlobTemp19 = 25,
+ kGlobTemp20 = 26,
+ kGlobTemp21 = 27,
+ kGlobTemp22 = 28,
+ kGlobTemp23 = 29,
+ kGlobTemp24 = 30,
+ kGlobTemp25 = 31,
+ kGlobTemp26 = 32,
+ kGlobTemp27 = 33,
+ kGlobTemp28 = 34,
+ kGlobTemp29 = 35,
+ kGlobTemp30 = 36,
+ kGlobTemp31 = 37,
+ kGlobTemp32 = 38
+};
+
+const uint32 SERIES_FORWARD = 0;
+const uint32 SERIES_PINGPONG = 1;
+const uint32 SERIES_BACKWARD = 2;
+const uint32 SERIES_RANDOM = 4;
+const uint32 SERIES_NO_TOSS = 8;
+const uint32 SERIES_STICK = 16;
+const uint32 SERIES_LOOP_TRIGGER = 32;
+const uint32 SERIES_LOAD_PALETTE = 64;
+const uint32 SERIES_HORZ_FLIP =128;
+
+enum KernelTriggerType {
+ KT_PARSE = 1,
+ KT_DAEMON,
+ KT_PREPARSE
+};
+
+class Kernel {
+private:
+ M4Engine *_vm;
+ ScriptFunction *_globalDaemonFn, *_globalParserFn;
+ ScriptFunction *_sectionInitFn, *_sectionDaemonFn, *_sectionParserFn;
+ ScriptFunction *_roomInitFn, *_roomDaemonFn, *_roomPreParserFn, *_roomParserFn;
+ void pauseEngines();
+ void unpauseEngines();
+public:
+ Kernel(M4Engine *vm);
+
+ // TODO: Move to some palette/fading class
+ int fadeUpDuration, firstFadeColorIndex;
+ int minPalEntry, maxPalEntry;
+
+ bool paused;
+ //machine* myWalker;
+ bool repeatedlyCallDeamon;
+ bool daemonTriggerAvailable;
+ bool betweenRooms;
+ int currentSection, newSection, previousSection;
+ int currentRoom, newRoom, previousRoom;
+
+ int32 trigger;
+ KernelTriggerType triggerMode;
+
+ int32 createTrigger(int32 triggerNum);
+ bool sendTrigger(int32 triggerNum);
+ bool handleTrigger(int32 triggerNum);
+
+ void loadGlobalScriptFunctions();
+ void loadSectionScriptFunctions();
+ void loadRoomScriptFunctions();
+
+ void globalDaemon();
+ void globalParser();
+
+ void sectionInit();
+ void sectionDaemon();
+ void sectionParser();
+
+ void roomInit();
+ void roomDaemon();
+ void roomPreParser();
+ void roomParser();
+
+ void pauseGame(bool value);
+};
+
+#define TOTAL_NUM_VARIABLES 256
+
+class Globals {
+private:
+ struct MessageItem {
+ uint32 id;
+ uint32 offset;
+ uint16 uncompSize;
+ uint16 compSize;
+ };
+
+ M4Engine *_vm;
+ Common::Array<char* > _madsVocab;
+ Common::Array<char* > _madsQuotes;
+ Common::Array<MessageItem* > _madsMessages;
+public:
+ Globals(M4Engine *vm);
+ ~Globals();
+ bool isInterfaceVisible();
+
+ // M4 variables
+ bool invSuppressClickSound;
+
+ void loadMadsVocab();
+ uint32 getVocabSize() { return _madsVocab.size(); }
+ char* getVocab(uint32 index) { return _madsVocab[index]; }
+
+ void loadMadsQuotes();
+ uint32 getQuotesSize() { return _madsQuotes.size(); }
+ char* getQuote(uint32 index) { return _madsQuotes[index]; }
+
+ void loadMadsMessagesInfo();
+ uint32 getMessagesSize() { return _madsMessages.size(); }
+ char* loadMessage(uint32 index);
+};
+
+#define PLAYER_FIELD_LENGTH 40
+
+class Player {
+public:
+ Player(M4Engine *vm);
+ void setCommandsAllowed(bool value);
+
+ // Variables
+ Common::Point position; // Player's current position
+ int facing; // Facing direction
+
+ char verb[PLAYER_FIELD_LENGTH]; // Action strings
+ char noun[PLAYER_FIELD_LENGTH];
+ char prep[PLAYER_FIELD_LENGTH];
+ char object[PLAYER_FIELD_LENGTH];
+ Common::String assetName, shadowName;
+ int walkerType, shadowType;
+ bool needToWalk, readyToWalk, waitingForWalk;
+ bool commandsAllowed;
+ bool commandReady;
+ bool visible;
+ bool beenInRoomBefore;
+ bool walkerInCurrentRoom;
+ int32 walkerTriggerNum;
+ int walkFacing;
+ bool setCommandsAllowedFlag;
+
+ bool said(const char *word1, const char *word2 = NULL, const char *word3 = NULL);
+ bool saidAny(const char *word1, const char *word2, const char *word3,
+ const char *word4, const char *word5, const char *word6, const char *word7,
+ const char *word8, const char *word9, const char *word10);
+
+private:
+ M4Engine *_vm;
+};
+
+} // End of namespace M4
+
+#endif