aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/kyra_v2.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/kyra_v2.h')
-rw-r--r--engines/kyra/kyra_v2.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/engines/kyra/kyra_v2.h b/engines/kyra/kyra_v2.h
new file mode 100644
index 0000000000..08220123bb
--- /dev/null
+++ b/engines/kyra/kyra_v2.h
@@ -0,0 +1,213 @@
+/* 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 KYRA_KYRA_V2_H
+#define KYRA_KYRA_V2_H
+
+#include "kyra/kyra.h"
+#include "kyra/gui.h"
+#include "kyra/wsamovie.h"
+
+#include "common/list.h"
+#include "common/hashmap.h"
+
+namespace Kyra {
+
+class Screen_v2;
+
+class KyraEngine_v2 : public KyraEngine {
+friend class Debugger_v2;
+public:
+ KyraEngine_v2(OSystem *system, const GameFlags &flags);
+ ~KyraEngine_v2();
+
+ virtual Screen_v2 *screen_v2() const = 0;
+protected:
+ // run
+ virtual void update() = 0;
+ virtual void updateWithText() = 0;
+
+ // MainMenu
+ MainMenu *_menu;
+
+ // Input
+ virtual int checkInput(Button *buttonList, bool mainLoop = false) = 0;
+
+ void updateInput();
+ void removeInputTop();
+
+ int _mouseX, _mouseY;
+
+ struct Event {
+ Common::Event event;
+ bool causedSkip;
+
+ Event() : event(), causedSkip(false) {}
+ Event(Common::Event e) : event(e), causedSkip(false) {}
+ Event(Common::Event e, bool skip) : event(e), causedSkip(skip) {}
+
+ operator Common::Event() const { return event; }
+ };
+ Common::List<Event> _eventList;
+
+ bool skipFlag() const;
+ void resetSkipFlag(bool removeEvent = true);
+
+ // Animator
+ struct AnimObj {
+ uint16 index;
+ uint16 type;
+ uint16 enabled;
+ uint16 needRefresh;
+ uint16 specialRefresh;
+ uint16 animFlags;
+ uint16 flags;
+ int16 xPos1, yPos1;
+ uint8 *shapePtr;
+ uint16 shapeIndex1;
+ uint16 animNum;
+ uint16 shapeIndex3;
+ uint16 shapeIndex2;
+ int16 xPos2, yPos2;
+ int16 xPos3, yPos3;
+ int16 width, height;
+ int16 width2, height2;
+ uint16 palette;
+ AnimObj *nextObject;
+ };
+
+ bool _drawNoShapeFlag;
+ AnimObj *_animList;
+
+ AnimObj *initAnimList(AnimObj *list, AnimObj *entry);
+ AnimObj *addToAnimListSorted(AnimObj *list, AnimObj *entry);
+ AnimObj *deleteAnimListEntry(AnimObj *list, AnimObj *entry);
+
+ virtual void refreshAnimObjects(int force) = 0;
+ void refreshAnimObjectsIfNeed();
+
+ void flagAnimObjsSpecialRefresh();
+ void flagAnimObjsForRefresh();
+
+ virtual void clearAnimObjects() = 0;
+
+ virtual void drawAnimObjects() = 0;
+ virtual void drawSceneAnimObject(AnimObj *obj, int x, int y, int drawLayer) = 0;
+ virtual void drawCharacterAnimObject(AnimObj *obj, int x, int y, int drawLayer) = 0;
+
+ virtual void updateCharacterAnim(int) = 0;
+ virtual void updateSceneAnim(int anim, int newFrame) = 0;
+
+ virtual void addItemToAnimList(int item) = 0;
+ virtual void deleteItemAnimEntry(int item) = 0;
+
+ virtual void setCharacterAnimDim(int w, int h) = 0;
+ virtual void resetCharacterAnimDim() = 0;
+
+ // Scene
+ struct SceneDesc {
+ char filename1[10];
+ char filename2[10];
+
+ uint16 exit1, exit2, exit3, exit4;
+ uint8 flags;
+ uint8 sound;
+ };
+
+ SceneDesc *_sceneList;
+ int _sceneListSize;
+ uint16 _currentScene;
+
+ uint16 _sceneExit1, _sceneExit2, _sceneExit3, _sceneExit4;
+ int _sceneEnterX1, _sceneEnterY1, _sceneEnterX2, _sceneEnterY2,
+ _sceneEnterX3, _sceneEnterY3, _sceneEnterX4, _sceneEnterY4;
+ int _specialExitCount;
+ uint16 _specialExitTable[25];
+ bool checkSpecialSceneExit(int num, int x, int y);
+
+ bool _overwriteSceneFacing;
+
+ virtual void enterNewScene(uint16 newScene, int facing, int unk1, int unk2, int unk3) = 0;
+
+ // Animation
+ virtual void restorePage3() = 0;
+
+ struct SceneAnim {
+ uint16 flags;
+ int16 x, y;
+ int16 x2, y2;
+ int16 width, height;
+ uint16 specialSize;
+ int16 shapeIndex;
+ uint16 wsaFlag;
+ char filename[14];
+ };
+
+ SceneAnim _sceneAnims[16];
+ WSAMovieV2 *_sceneAnimMovie[16];
+
+ void freeSceneAnims();
+
+ bool _specialSceneScriptState[10];
+ bool _specialSceneScriptStateBackup[10];
+ EMCState _sceneSpecialScripts[10];
+ uint32 _sceneSpecialScriptsTimer[10];
+ int _lastProcessedSceneScript;
+ bool _specialSceneScriptRunFlag;
+
+ void updateSpecialSceneScripts();
+ virtual int getFirstSpecialSceneScript() const = 0;
+
+ // Shapes
+ typedef Common::HashMap<int, uint8*> ShapeMap;
+ ShapeMap _gameShapes;
+
+ uint8 *getShapePtr(int index) const;
+ void addShapeToPool(const uint8 *data, int realIndex, int shape);
+ void addShapeToPool(uint8 *shpData, int index);
+ void remShapeFromPool(int idx);
+
+ // pathfinder
+ int _movFacingTable[600];
+ int _pathfinderFlag;
+
+ int findWay(int curX, int curY, int dstX, int dstY, int *moveTable, int moveTableSize);
+
+ bool directLinePassable(int x, int y, int toX, int toY);
+
+ int pathfinderInitPositionTable(int *moveTable);
+ int pathfinderAddToPositionTable(int index, int v1, int v2);
+ int pathfinderInitPositionIndexTable(int tableLen, int x, int y);
+ int pathfinderAddToPositionIndexTable(int index, int v);
+ void pathfinderFinializePath(int *moveTable, int unk1, int x, int y, int moveTableSize);
+
+ int _pathfinderPositionTable[400];
+ int _pathfinderPositionIndexTable[200];
+};
+
+} // end of namespace Kyra
+
+#endif
+