aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/kyra_v1.h
diff options
context:
space:
mode:
authorJohannes Schickel2008-05-11 23:16:50 +0000
committerJohannes Schickel2008-05-11 23:16:50 +0000
commitbb035967442df0f9cb7de3e3da3d73ce2f4ce5d2 (patch)
treea27c1f8806b2b17ed04041677e4d167fd5beb22a /engines/kyra/kyra_v1.h
parentea301f9c7bbf02e0fc67fbc1447aac5a489db70b (diff)
downloadscummvm-rg350-bb035967442df0f9cb7de3e3da3d73ce2f4ce5d2.tar.gz
scummvm-rg350-bb035967442df0f9cb7de3e3da3d73ce2f4ce5d2.tar.bz2
scummvm-rg350-bb035967442df0f9cb7de3e3da3d73ce2f4ce5d2.zip
- Renamed KyraEngine to KyraEngine_v1
- kyra.* -> kyra_v1.* - scene.cpp -> scene_v1.cpp svn-id: r32044
Diffstat (limited to 'engines/kyra/kyra_v1.h')
-rw-r--r--engines/kyra/kyra_v1.h272
1 files changed, 272 insertions, 0 deletions
diff --git a/engines/kyra/kyra_v1.h b/engines/kyra/kyra_v1.h
new file mode 100644
index 0000000000..076c6bbd54
--- /dev/null
+++ b/engines/kyra/kyra_v1.h
@@ -0,0 +1,272 @@
+/* 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_V1_H
+#define KYRA_KYRA_V1_H
+
+#include "engines/engine.h"
+
+#include "common/array.h"
+#include "common/events.h"
+
+#include "kyra/script.h"
+
+namespace Common {
+class InSaveFile;
+class OutSaveFile;
+} // end of namespace Common
+
+class KyraMetaEngine;
+
+namespace Kyra {
+
+struct GameFlags {
+ Common::Language lang;
+ Common::Platform platform;
+
+ bool isDemo : 1;
+ bool useAltShapeHeader : 1; // alternative shape header (uses 2 bytes more, those are unused though)
+ bool isTalkie : 1;
+ bool useHiResOverlay : 1;
+ bool useDigSound : 1;
+
+ byte gameID;
+};
+
+enum {
+ GI_KYRA1 = 0,
+ GI_KYRA2 = 1,
+ GI_KYRA3 = 2
+};
+
+struct AudioDataStruct {
+ const char * const *_fileList;
+ const int _fileListLen;
+ const void * const _cdaTracks;
+ const int _cdaNumTracks;
+};
+
+// TODO: this is just the start of makeing the debug output of the kyra engine a bit more useable
+// in the future we maybe merge some flags and/or create new ones
+enum kDebugLevels {
+ kDebugLevelScriptFuncs = 1 << 0, // prints debug output of o#_* functions
+ kDebugLevelScript = 1 << 1, // prints debug output of "EMCInterpreter" functions
+ kDebugLevelSprites = 1 << 2, // prints debug output of "Sprites" functions
+ kDebugLevelScreen = 1 << 3, // prints debug output of "Screen" functions
+ kDebugLevelSound = 1 << 4, // prints debug output of "Sound" functions
+ kDebugLevelAnimator = 1 << 5, // prints debug output of "ScreenAnimator" functions
+ kDebugLevelMain = 1 << 6, // prints debug output of common "KyraEngine(_v#)" functions && "TextDisplayer" functions
+ kDebugLevelGUI = 1 << 7, // prints debug output of "KyraEngine*" gui functions
+ kDebugLevelSequence = 1 << 8, // prints debug output of "SeqPlayer" functions
+ kDebugLevelMovie = 1 << 9, // prints debug output of movie specific funtions
+ kDebugLevelTimer = 1 << 10 // prints debug output of "TimerManager" functions
+};
+
+enum kMusicDataID {
+ kMusicIntro = 0,
+ kMusicIngame,
+ kMusicFinale
+};
+
+class Screen;
+class Resource;
+class Sound;
+class Movie;
+class TextDisplayer;
+class StaticResource;
+class TimerManager;
+class Debugger;
+
+class KyraEngine_v1 : public Engine {
+friend class Debugger;
+friend class ::KyraMetaEngine;
+friend class GUI;
+public:
+ KyraEngine_v1(OSystem *system, const GameFlags &flags);
+ virtual ~KyraEngine_v1();
+
+ ::GUI::Debugger *getDebugger();
+
+ bool quit() const { return _quitFlag; }
+
+ uint8 game() const { return _flags.gameID; }
+ const GameFlags &gameFlags() const { return _flags; }
+
+ // access to Kyra specific functionallity
+ Resource *resource() { return _res; }
+ virtual Screen *screen() = 0;
+ virtual TextDisplayer *text() { return _text; }
+ Sound *sound() { return _sound; }
+ StaticResource *staticres() { return _staticres; }
+ TimerManager *timer() { return _timer; }
+
+ uint32 tickLength() const { return _tickLength; }
+
+ Common::RandomSource _rnd;
+
+ // input
+ void setMousePos(int x, int y);
+ Common::Point getMousePos() const;
+
+ // config specific
+ bool speechEnabled();
+ bool textEnabled();
+
+ enum kVolumeEntry {
+ kVolumeMusic = 0,
+ kVolumeSfx = 1,
+ kVolumeSpeech = 2
+ };
+
+ // volume reaches from 2 to 97
+ void setVolume(kVolumeEntry vol, uint8 value);
+ uint8 getVolume(kVolumeEntry vol);
+
+ // quit handling
+ virtual void quitGame();
+
+ // game flag handling
+ int setGameFlag(int flag);
+ int queryGameFlag(int flag) const;
+ int resetGameFlag(int flag);
+
+ // sound
+ virtual void snd_playTheme(int file, int track);
+ virtual void snd_playSoundEffect(int id, int volume=0xFF);
+ virtual void snd_playWanderScoreViaMap(int command, int restart);
+ virtual void snd_playVoiceFile(int id) = 0;
+ virtual bool snd_voiceIsPlaying();
+ virtual void snd_stopVoice();
+
+ // delay functionallity
+ virtual void delayUntil(uint32 timestamp, bool updateGameTimers = false, bool update = false, bool isMainLoop = false);
+ virtual void delay(uint32 millis, bool update = false, bool isMainLoop = false);
+ virtual void delayWithTicks(int ticks);
+
+protected:
+ virtual int go() = 0;
+ virtual int init();
+
+ // quit Handling
+ bool _quitFlag;
+
+ // intern
+ Resource *_res;
+ Sound *_sound;
+ TextDisplayer *_text;
+ StaticResource *_staticres;
+ TimerManager *_timer;
+ EMCInterpreter *_emc;
+ Debugger *_debugger;
+
+ // config specific
+ virtual void registerDefaultSettings();
+ virtual void readSettings();
+ virtual void writeSettings();
+
+ uint8 _configWalkspeed;
+
+ int _configMusic;
+ bool _configSounds;
+ uint8 _configVoice;
+
+ // game speed
+ virtual bool skipFlag() const = 0;
+ virtual void resetSkipFlag(bool removeEvent = true) = 0;
+
+ uint16 _tickLength;
+ uint16 _gameSpeed;
+
+ // timer
+ virtual void setupTimers() = 0;
+
+ virtual void setWalkspeed(uint8 speed) = 0;
+
+ // detection
+ GameFlags _flags;
+ int _lang;
+
+ // opcode
+ virtual void setupOpcodeTable() = 0;
+ Common::Array<const Opcode*> _opcodes;
+
+ // game flags
+ uint8 _flagsTable[100]; // TODO: check this value
+
+ // sound
+ Common::String _speechFile;
+
+ int _curMusicTheme;
+ int _curSfxFile;
+ int16 _lastMusicCommand;
+
+ const int8 *_trackMap;
+ int _trackMapSize;
+
+ // pathfinder
+ virtual int findWay(int x, int y, int toX, int toY, int *moveTable, int moveTableSize);
+ int findSubPath(int x, int y, int toX, int toY, int *moveTable, int start, int end);
+ int getFacingFromPointToPoint(int x, int y, int toX, int toY);
+ int getOppositeFacingDirection(int dir);
+ void changePosTowardsFacing(int &x, int &y, int facing);
+ int getMoveTableSize(int *moveTable);
+ virtual bool lineIsPassable(int x, int y) = 0;
+
+ static const int8 _addXPosTable[];
+ static const int8 _addYPosTable[];
+
+ // save/load
+ int _gameToLoad;
+
+ const char *getSavegameFilename(int num);
+ bool saveFileLoadable(int slot);
+
+ struct SaveHeader {
+ Common::String description;
+ uint32 version;
+ byte gameID;
+ uint32 flags;
+
+ bool originalSave; // savegame from original interpreter
+ bool oldHeader; // old scummvm save header
+ };
+
+ enum kReadSaveHeaderError {
+ kRSHENoError = 0,
+ kRSHEInvalidType = 1,
+ kRSHEInvalidVersion = 2,
+ kRSHEIoError = 3
+ };
+
+ static kReadSaveHeaderError readSaveHeader(Common::InSaveFile *file, SaveHeader &header);
+
+ Common::InSaveFile *openSaveForReading(const char *filename, SaveHeader &header);
+ Common::OutSaveFile *openSaveForWriting(const char *filename, const char *saveName) const;
+};
+
+} // End of namespace Kyra
+
+#endif
+