diff options
author | Eugene Sandulenko | 2010-08-17 09:28:20 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2010-08-17 09:28:20 +0000 |
commit | 06960d33e15bc80f9912fa92f11dd82388199bd6 (patch) | |
tree | da4750e75d343227f9e522bbc1c5d983de831e85 /engines/hugo/hugo.h | |
parent | e075f0539568c5d14a61889a0233558376cdb5ce (diff) | |
download | scummvm-rg350-06960d33e15bc80f9912fa92f11dd82388199bd6.tar.gz scummvm-rg350-06960d33e15bc80f9912fa92f11dd82388199bd6.tar.bz2 scummvm-rg350-06960d33e15bc80f9912fa92f11dd82388199bd6.zip |
HUGO: Adding engine to the main tree
svn-id: r52137
Diffstat (limited to 'engines/hugo/hugo.h')
-rwxr-xr-x | engines/hugo/hugo.h | 310 |
1 files changed, 310 insertions, 0 deletions
diff --git a/engines/hugo/hugo.h b/engines/hugo/hugo.h new file mode 100755 index 0000000000..21705b1070 --- /dev/null +++ b/engines/hugo/hugo.h @@ -0,0 +1,310 @@ +/* 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 HUGO_H +#define HUGO_H + +#include "engines/engine.h" +#include "common/file.h" + +// This include is here temporarily while the engine is being refactored. +#include "hugo/game.h" + +#define HUGO_DAT_VER_MAJ 0 // 1 byte +#define HUGO_DAT_VER_MIN 16 // 1 byte +#define DATAALIGNMENT 4 + +namespace Common { +class RandomSource; +} + +namespace Hugo { +enum GameType { + kGameTypeNone = 0, + kGameTypeHugo1, + kGameTypeHugo2, + kGameTypeHugo3 +}; + +enum HugoebugChannels { + kDebugSchedule = 1 << 0, + kDebugEngine = 1 << 1, + kDebugDisplay = 1 << 2, + kDebugMouse = 1 << 3, + kDebugParser = 1 << 4, + kDebugFile = 1 << 5, + kDebugRoute = 1 << 6, + kDebugInventory = 1 << 7 +}; + +enum HugoGameFeatures { + GF_PACKED = (1 << 0) // Database +}; + +struct HugoGameDescription; + +class FileManager; +class Scheduler; +class Screen; +class MouseHandler; +class InventoryHandler; +class Parser; +class Route; +class SoundHandler; +class IntroHandler; + +class HugoEngine : public Engine { +public: + HugoEngine(OSystem *syst, const HugoGameDescription *gd); + ~HugoEngine(); + + byte _numVariant; + byte _gameVariant; + byte _maxInvent; + byte _numBonuses; + byte _soundSilence; + byte _soundTest; + byte _tunesNbr; + uint16 _numScreens; + + object_t *_hero; + byte *_screen_p; + byte _heroImage; + + byte *_palette; + byte *_introX; + byte *_introY; + byte *_screenStates; + char **_textData; + char **_stringtData; + char **_screenNames; + char **_textEngine; + char **_textIntro; + char **_textMouse; + char **_textParser; + char **_textSchedule; + char **_textUtil; + char ***_arrayNouns; + char ***_arrayVerbs; + uint16 **_arrayReqs; + hotspot_t *_hotspots; + int16 *_invent; + uses_t *_uses; + background_t *_catchallList; + background_t **_backgroundObjects; + point_t *_points; + cmd **_cmdList; + uint16 **_screenActs; + object_t *_objects; + act **_actListArr; + int16 *_defltTunes; + uint16 _look; + uint16 _take; + uint16 _drop; + uint16 _numObj; + uint16 _alNewscrIndex; + + Common::RandomSource *_rnd; + + const char *_episode; + const char *_picDir; + + char _initFilename[20]; + char _saveFilename[20]; + + const HugoGameDescription *_gameDescription; + uint32 getFeatures() const; + + GameType getGameType() const; + Common::Platform getPlatform() const; + bool isPacked() const; + + // Temporary, until the engine is fully objectified. + static HugoEngine &get() { + assert(s_Engine != NULL); + return *s_Engine; + } + + FileManager &file() { + return *_fileManager; + } + Scheduler &scheduler() { + return *_scheduler; + } + Screen &screen() { + return *_screen; + } + MouseHandler &mouse() { + return *_mouseHandler; + } + InventoryHandler &inventory() { + return *_inventoryHandler; + } + Parser &parser() { + return *_parser; + } + Route &route() { + return *_route; + } + SoundHandler &sound() { + return *_soundHandler; + } + IntroHandler &intro() { + return *_introHandler; + } + + void initGame(const HugoGameDescription *gd); + void initGamePart(const HugoGameDescription *gd); + bool loadHugoDat(); + + int getMouseX() const { + return _mouseX; + } + int getMouseY() const { + return _mouseY; + } + + void initStatus(); + void readObjectImages(); + void readUIFImages(); + void updateImages(); + void moveObjects(); + void useObject(int16 objId); + bool findObjectSpace(object_t *obj, int16 *destx, int16 *desty); + int16 findObject(uint16 x, uint16 y); + void lookObject(object_t *obj); + void storeBoundary(int x1, int x2, int y); + void clearBoundary(int x1, int x2, int y); + void endGame(); + void readScreenFiles(int screen); + void setNewScreen(int screen); + void initNewScreenDisplay(); + void screenActions(int screen); + void shutdown(); + + overlay_t &getBoundaryOverlay() { + return _boundary; + } + overlay_t &getObjectBoundaryOverlay() { + return _objBound; + } + overlay_t &getBaseBoundaryOverlay() { + return _ovlBase; + } + overlay_t &getFirstOverlay() { + return _overlay; + } + + status_t &getGameStatus() { + return _status; + } + + int getScore() const { + return _score; + } + void setScore(int newScore) { + _score = newScore; + } + void adjustScore(int adjustment) { + _score += adjustment; + } + int getMaxScore() const { + return _maxscore; + } + void setMaxScore(int newScore) { + _maxscore = newScore; + } + byte getIntroSize() { + return _introXSize; + } + +protected: + + // Engine APIs + Common::Error run(); + +private: + int _mouseX; + int _mouseY; + byte _paletteSize; + byte _introXSize; + status_t _status; // Game status structure + + static HugoEngine *s_Engine; + +// The following are bit plane display overlays which mark travel boundaries, +// foreground stationary objects and baselines for those objects (used to +// determine foreground/background wrt moving objects) + +// Vinterstum: These shouldn't be static, but we get weird pathfinding issues (and Valgrind warnings) without. +// Needs more investigation. Alignment issues? + + static overlay_t _boundary; // Boundary overlay file + static overlay_t _overlay; // First overlay file + static overlay_t _ovlBase; // First overlay base file + static overlay_t _objBound; // Boundary file marks object baselines + + GameType _gameType; + Common::Platform _platform; + bool _packedFl; + + FileManager *_fileManager; + Scheduler *_scheduler; + Screen *_screen; + MouseHandler *_mouseHandler; + InventoryHandler *_inventoryHandler; + Parser *_parser; + Route *_route; + SoundHandler *_soundHandler; + IntroHandler *_introHandler; + + int _score; // Holds current score + int _maxscore; // Holds maximum score + + char **loadTextsVariante(Common::File &in, uint16 *arraySize); + char ***loadTextsArray(Common::File &in); + uint16 **loadLongArray(Common::File &in); + char **loadTexts(Common::File &in); + void freeTexts(char **ptr); + + void initPlaylist(bool playlist[MAX_TUNES]); + void initConfig(inst_t action); + void initialize(); + int deltaX(int x1, int x2, int vx, int y); + int deltaY(int x1, int x2, int vy, int y); + void processMaze(); + //int y2comp (const void *a, const void *b); + char *useBG(char *name); + void freeObjects(); + void boundaryCollision(object_t *obj); + void calcMaxScore(); + + void initMachine(); + void runMachine(); +}; + +} // End of namespace Hugo + +#endif // Hugo_H |