scummvm/engines/fullpipe/fullpipe.h
2014-06-18 09:37:36 +03:00

332 lines
7.7 KiB
C++

/* 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.
*
*/
#ifndef FULLPIPE_FULLPIPE_H
#define FULLPIPE_FULLPIPE_H
#include "common/scummsys.h"
#include "common/events.h"
#include "common/keyboard.h"
#include "common/random.h"
#include "common/savefile.h"
#include "common/system.h"
#include "audio/mixer.h"
#include "graphics/transparent_surface.h"
#include "engines/engine.h"
#include "gui/debugger.h"
#include "fullpipe/console.h"
struct ADGameDescription;
namespace Fullpipe {
enum FullpipeGameFeatures {
};
class BehaviorManager;
class BaseModalObject;
class GameLoader;
class GameVar;
class InputController;
class Inventory2;
struct CursorInfo;
struct EntranceInfo;
class ExCommand;
class Floaters;
class GameProject;
class GameObject;
class GlobalMessageQueueList;
struct MessageHandler;
class MessageQueue;
struct MovTable;
class MGM;
class NGIArchive;
class PictureObject;
struct PreloadItem;
class Scene;
class SoundList;
class StaticANIObject;
class Vars;
int global_messageHandler1(ExCommand *cmd);
int global_messageHandler2(ExCommand *cmd);
int global_messageHandler3(ExCommand *cmd);
int global_messageHandler4(ExCommand *cmd);
void global_messageHandler_handleSound(ExCommand *cmd);
class FullpipeEngine : public ::Engine {
protected:
Common::Error run();
public:
FullpipeEngine(OSystem *syst, const ADGameDescription *gameDesc);
virtual ~FullpipeEngine();
Console *_console;
GUI::Debugger *getDebugger() { return _console; }
void initialize();
void restartGame();
void setMusicAllowed(int val) { _musicAllowed = val; }
// Detection related functions
const ADGameDescription *_gameDescription;
const char *getGameId() const;
Common::Platform getPlatform() const;
Common::RandomSource *_rnd;
Common::KeyCode _keyState;
uint16 _buttonState;
void updateEvents();
Graphics::Surface _backgroundSurface;
Graphics::PixelFormat *_origFormat;
GameLoader *_gameLoader;
GameProject *_gameProject;
bool loadGam(const char *fname, int scene = 0);
GameVar *getGameLoaderGameVar();
InputController *getGameLoaderInputController();
int _gameProjectVersion;
int _pictureScale;
int _scrollSpeed;
bool _updateFlag;
bool _flgCanOpenMap;
bool _gamePaused;
bool _flgGameIsRunning;
bool _inputArFlag;
bool _recordEvents;
bool _mainMenu_debugEnabled;
Common::Rect _sceneRect;
int _sceneWidth;
int _sceneHeight;
Scene *_currentScene;
Scene *_loaderScene;
Scene *_scene2;
Scene *_scene3;
StaticANIObject *_aniMan;
StaticANIObject *_aniMan2;
byte *_globalPalette;
InputController *_inputController;
bool _inputDisabled;
int _currentCheat;
int _currentCheatPos;
void defHandleKeyDown(int key);
SoundList *_currSoundList1[11];
int _currSoundListCount;
bool _soundEnabled;
bool _flgSoundList;
char _sceneTracks[10][260];
int _numSceneTracks;
bool _sceneTrackHasSequence;
int _musicMinDelay;
int _musicMaxDelay;
int _musicLocal;
char _trackName[2600];
int _trackStartDelay;
char _sceneTracksCurrentTrack[260];
bool _sceneTrackIsPlaying;
void stopAllSounds();
void toggleMute();
void playSound(int id, int flag);
void playTrack(GameVar *sceneVar, const char *name, bool delayed);
int getSceneTrack();
void startSceneTrack();
void startSoundStream1(char *trackName);
void stopSoundStream2();
void stopAllSoundStreams();
void stopAllSoundInstances(int id);
void updateSoundVolume();
void setMusicVolume(int vol);
int _sfxVolume;
int _musicVolume;
GlobalMessageQueueList *_globalMessageQueueList;
MessageHandler *_messageHandlers;
int _msgX;
int _msgY;
int _msgObjectId2;
int _msgId;
Common::List<ExCommand *> _exCommandList;
bool _isProcessingMessages;
int _mouseVirtX;
int _mouseVirtY;
Common::Point _mouseScreenPos;
BehaviorManager *_behaviorManager;
MovTable *_movTable;
Floaters *_floaters;
MGM *_mgm;
Common::Array<Common::Point *> _arcadeKeys;
void initMap();
void updateMap(PreloadItem *pre);
void updateMapPiece(int mapId, int update);
void updateScreen();
void freeGameLoader();
void cleanup();
bool _gameContinue;
bool _needRestart;
bool _flgPlayIntro;
int _musicAllowed;
bool _normalSpeed;
void enableSaves() { _isSaveAllowed = true; }
void disableSaves(ExCommand *ex);
void initObjectStates();
void setLevelStates();
void setSwallowedEggsState();
void loadAllScenes();
void initCursors();
void addCursor(CursorInfo *cursorInfo, Scene *inv, int pictureId, int hotspotX, int hotspotY, int itemPictureOffsX, int itemPictureOffsY);
int32 _mapTable[200];
Scene *_inventoryScene;
Inventory2 *_inventory;
int _currSelectedInventoryItemId;
int32 _updateTicks;
int32 _lastInputTicks;
int32 _lastButtonUpTicks;
BaseModalObject *_modalObject;
int (*_updateScreenCallback)();
int (*_updateCursorCallback)();
void drawAlphaRectangle(int x1, int y1, int x2, int y2, int alpha);
void sceneFade(Scene *sc, bool direction);
int _cursorId;
int _minCursorId;
int _maxCursorId;
Common::Array<int> _objectIdCursors;
GameObject *_objectAtCursor;
int _objectIdAtCursor;
void setCursor(int id);
void updateCursorCommon();
int getObjectState(const char *objname);
void setObjectState(const char *name, int state);
int getObjectEnumState(const char *name, const char *state);
bool sceneSwitcher(EntranceInfo *entrance);
Scene *accessScene(int sceneId);
void setSceneMusicParameters(GameVar *var);
int convertScene(int scene);
int getSceneEntrance(int scene);
int getSceneFromTag(int tag);
NGIArchive *_currArchive;
void openMap();
void openHelp();
void openMainMenu();
PictureObject *_arcadeOverlay;
PictureObject *_arcadeOverlayHelper;
int _arcadeOverlayX;
int _arcadeOverlayY;
int _arcadeOverlayMidX;
int _arcadeOverlayMidY;
void initArcadeKeys(const char *varname);
void processArcade(ExCommand *ex);
void winArcade();
void setArcadeOverlay(int picId);
int drawArcadeOverlay(int adjust);
void getAllInventory();
StaticANIObject *_lastLiftButton;
MessageQueue *_liftEnterMQ;
MessageQueue *_liftExitMQ;
StaticANIObject *_lift;
int _liftX;
int _liftY;
int lift_getButtonIdP(int objid);
int lift_getButtonIdH(int objid);
int lift_getButtonIdN(int objid);
void lift_setButton(const char *name, int state);
void lift_init(Scene *sc, int qu1, int qu2);
void lift_setButtonStatics(Scene *sc, int buttonId);
void lift_exitSeq(ExCommand *ex);
void lift_closedoorSeq();
void lift_clickButton();
void lift_walkAndGo();
void lift_goAnimation();
void lift_animateButton(StaticANIObject *button);
void lift_startExitQueue();
void lift_hoverButton(ExCommand *ex);
bool lift_checkButton(const char *varname);
void lift_openLift();
GameVar *_musicGameVar;
Audio::SoundHandle _sceneTrackHandle;
public:
bool _isSaveAllowed;
bool canLoadGameStateCurrently() { return _isSaveAllowed; }
bool canSaveGameStateCurrently() { return _isSaveAllowed; }
};
extern FullpipeEngine *g_fp;
extern Vars *g_vars;
} // End of namespace Fullpipe
#endif /* FULLPIPE_FULLPIPE_H */