diff options
Diffstat (limited to 'engines/kyra/kyra_v2.h')
-rw-r--r-- | engines/kyra/kyra_v2.h | 213 |
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 + |