aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/scumm_v2.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/scumm/scumm_v2.h')
-rw-r--r--engines/scumm/scumm_v2.h201
1 files changed, 201 insertions, 0 deletions
diff --git a/engines/scumm/scumm_v2.h b/engines/scumm/scumm_v2.h
new file mode 100644
index 0000000000..6b7fff3cb9
--- /dev/null
+++ b/engines/scumm/scumm_v2.h
@@ -0,0 +1,201 @@
+/* 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 SCUMM_SCRIPT_V2_H
+#define SCUMM_SCRIPT_V2_H
+
+#include "scumm/scumm_v3.h"
+
+namespace Scumm {
+
+/**
+ * Engine for version 2 SCUMM games.
+ */
+class ScummEngine_v2 : public ScummEngine_v3old {
+protected:
+ typedef void (ScummEngine_v2::*OpcodeProcV2)();
+ struct OpcodeEntryV2 {
+ OpcodeProcV2 proc;
+ const char *desc;
+ };
+
+ const OpcodeEntryV2 *_opcodesV2;
+
+ struct V2MouseoverBox {
+ Common::Rect rect;
+ byte color;
+ byte hicolor;
+ };
+
+ V2MouseoverBox _mouseOverBoxesV2[7];
+ int8 _mouseOverBoxV2;
+
+ char _sentenceBuf[256];
+
+ int _activeInventory;
+ int _activeObject;
+ int _activeVerb;
+
+public:
+ ScummEngine_v2(OSystem *syst, const DetectorResult &dr);
+
+ virtual void resetScumm();
+
+ void checkV2MouseOver(Common::Point pos);
+ void checkV2Inventory(int x, int y);
+ void redrawV2Inventory();
+
+protected:
+ virtual void setupOpcodes();
+ virtual void executeOpcode(byte i);
+ virtual const char *getOpcodeDesc(byte i);
+
+ virtual void setupScummVars();
+ virtual void resetScummVars();
+ virtual void decodeParseString();
+
+ virtual void processKeyboard(Common::KeyState lastKeyHit);
+
+ virtual void readIndexFile();
+ void readClassicIndexFile(); // V1
+ void readEnhancedIndexFile(); // V2
+ virtual void readGlobalObjects();
+ virtual void loadCharset(int no);
+
+ virtual void runInputScript(int clickArea, int val, int mode);
+ virtual void runInventoryScript(int i);
+
+ virtual int getVar();
+
+ void getResultPosIndirect();
+ virtual void getResultPos();
+ virtual int readVar(uint var);
+ virtual void writeVar(uint var, int value);
+
+ virtual void ifStateCommon(byte type);
+ virtual void ifNotStateCommon(byte type);
+ virtual void setStateCommon(byte type);
+ virtual void clearStateCommon(byte type);
+
+ virtual void resetSentence();
+ void setUserState(byte state);
+
+ virtual void handleMouseOver(bool updateInventory);
+ virtual void checkExecVerbs();
+ void initV2MouseOver();
+ void initNESMouseOver();
+
+ virtual void setBuiltinCursor(int index);
+
+ void runObject(int obj, int entry);
+
+ /* Version 2 script opcodes */
+ void o2_actorFromPos();
+ void o2_actorOps();
+ void o2_add();
+ void o2_addIndirect();
+ void o2_assignVarByte();
+ void o2_assignVarWordIndirect();
+ void o2_beginOverride();
+ void o2_chainScript();
+ void o2_clearState01();
+ void o2_clearState02();
+ void o2_clearState04();
+ void o2_clearState08();
+ void o2_cursorCommand();
+ void o2_cutscene();
+ void o2_delay();
+ void o2_doSentence();
+ void o2_drawObject();
+ void o2_drawSentence();
+ void o2_dummy();
+ void o2_endCutscene();
+ void o2_findObject();
+ void o2_getActorWalkBox();
+ void o2_getActorX();
+ void o2_getActorY();
+ void o2_getBitVar();
+ void o2_getObjPreposition();
+ void o2_ifClassOfIs();
+ void o2_ifNotState01();
+ void o2_ifNotState02();
+ void o2_ifNotState04();
+ void o2_ifNotState08();
+ void o2_ifState01();
+ void o2_ifState02();
+ void o2_ifState04();
+ void o2_ifState08();
+ void o2_isGreater();
+ void o2_isGreaterEqual();
+ void o2_isLess();
+ void o2_isLessEqual();
+ void o2_lights();
+ void o2_loadRoomWithEgo();
+ void o2_setBoxFlags();
+ void o2_panCameraTo();
+ void o2_pickupObject();
+ void o2_putActor();
+ void o2_putActorAtObject();
+ void o2_putActorInRoom();
+ void o2_resourceRoutines();
+ void o2_restart();
+ void o2_roomOps();
+ void o2_getActorElevation();
+ void o2_setActorElevation();
+ void o2_setBitVar();
+ void o2_setCameraAt();
+ void o2_setObjPreposition();
+ void o2_setOwnerOf();
+ void o2_setState01();
+ void o2_setState02();
+ void o2_setState04();
+ void o2_setState08();
+ void o2_startScript();
+ void o2_stopScript();
+ void o2_subtract();
+ void o2_subIndirect();
+ void o2_switchCostumeSet();
+ void o2_verbOps();
+ void o2_waitForActor();
+ void o2_waitForMessage();
+ void o2_waitForSentence();
+ void o2_walkActorTo();
+ void o2_walkActorToObject();
+
+ byte VAR_SENTENCE_VERB;
+ byte VAR_SENTENCE_OBJECT1;
+ byte VAR_SENTENCE_OBJECT2;
+ byte VAR_SENTENCE_PREPOSITION;
+ byte VAR_BACKUP_VERB;
+
+ byte VAR_CLICK_AREA;
+ byte VAR_CLICK_VERB;
+ byte VAR_CLICK_OBJECT;
+};
+
+
+} // End of namespace Scumm
+
+#endif