Initial commit
This commit is contained in:
238
engines/teenagent/teenagent.h
Normal file
238
engines/teenagent/teenagent.h
Normal file
@@ -0,0 +1,238 @@
|
||||
/* 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef TEENAGENT_TEENAGENT_H
|
||||
#define TEENAGENT_TEENAGENT_H
|
||||
|
||||
#include "engines/engine.h"
|
||||
|
||||
#include "audio/mixer.h"
|
||||
|
||||
#include "common/random.h"
|
||||
#include "common/array.h"
|
||||
|
||||
#include "gui/debugger.h"
|
||||
|
||||
#include "teenagent/console.h"
|
||||
#include "teenagent/dialog.h"
|
||||
|
||||
struct ADGameDescription;
|
||||
|
||||
namespace Audio {
|
||||
class AudioStream;
|
||||
}
|
||||
|
||||
namespace Common {
|
||||
struct Point;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the namespace of the TeenAgent engine.
|
||||
*
|
||||
* Status of this engine: Complete
|
||||
*
|
||||
* Games using this engine:
|
||||
* - Teen Agent
|
||||
*/
|
||||
namespace TeenAgent {
|
||||
|
||||
struct Object;
|
||||
struct UseHotspot;
|
||||
class Scene;
|
||||
class MusicPlayer;
|
||||
class Resources;
|
||||
class Inventory;
|
||||
class Pack;
|
||||
|
||||
#define TEENAGENT_DAT_VERSION 6
|
||||
#define TEENAGENT_SAVEGAME_VERSION 1
|
||||
|
||||
// Engine Debug Flags
|
||||
enum {
|
||||
kDebugActor = 1,
|
||||
kDebugAnimation,
|
||||
kDebugCallbacks,
|
||||
kDebugDialog,
|
||||
kDebugFont,
|
||||
kDebugInventory,
|
||||
kDebugMusic,
|
||||
kDebugObject,
|
||||
kDebugPack,
|
||||
kDebugScene,
|
||||
kDebugSurface,
|
||||
};
|
||||
|
||||
enum TEENAGENTActions {
|
||||
kActionSkipIntro,
|
||||
kActionSkipDialog,
|
||||
kActionCloseInventory,
|
||||
kActionToggleInventory,
|
||||
kActionFastMode,
|
||||
};
|
||||
|
||||
const uint16 kScreenWidth = 320;
|
||||
const uint16 kScreenHeight = 200;
|
||||
|
||||
class TeenAgentEngine : public Engine {
|
||||
public:
|
||||
TeenAgentEngine(OSystem *system, const ADGameDescription *gd);
|
||||
~TeenAgentEngine();
|
||||
|
||||
Common::Error run() override;
|
||||
Common::String getSaveStateName(int slot) const override;
|
||||
Common::Error loadGameState(int slot) override;
|
||||
Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave = false) override;
|
||||
bool canLoadGameStateCurrently(Common::U32String *msg = nullptr) override { return true; }
|
||||
bool canSaveGameStateCurrently(Common::U32String *msg = nullptr) override { return !_sceneBusy; }
|
||||
bool hasFeature(EngineFeature f) const override;
|
||||
|
||||
void init();
|
||||
|
||||
enum Action { kActionNone, kActionExamine, kActionUse };
|
||||
|
||||
void examine(const Common::Point &point, Object *object);
|
||||
void use(Object *object);
|
||||
inline void cancel() { _action = kActionNone; }
|
||||
|
||||
bool processCallback(uint16 addr);
|
||||
inline Scene *getScene() { return scene; }
|
||||
|
||||
bool showLogo();
|
||||
bool showCDLogo();
|
||||
bool showMetropolis();
|
||||
int skipEvents() const;
|
||||
|
||||
Common::String parseMessage(uint32 addr);
|
||||
|
||||
//event driven:
|
||||
void displayMessage(uint32 addr, CharacterID characterID = kMark, uint16 x = 0, uint16 y = 0);
|
||||
void displayMessage(const Common::String &str, uint16 voiceIndex, CharacterID characterID = kMark, uint16 x = 0, uint16 y = 0);
|
||||
void displayAsyncMessage(uint32 addr, uint16 x, uint16 y, uint16 firstFrame, uint16 lastFrame, CharacterID characterID = kMark);
|
||||
void displayAsyncMessageInSlot(uint32 addr, byte slot, uint16 firstFrame, uint16 lastFrame, byte color = textColorMark);
|
||||
void displayCredits(uint32 addr, uint16 timer = 0);
|
||||
void displayCutsceneMessage(uint32 addr, uint16 x, uint16 y);
|
||||
void moveTo(const Common::Point &dst, byte o, bool warp = false);
|
||||
void moveTo(uint16 x, uint16 y, byte o, bool warp = false);
|
||||
void moveTo(Object *obj);
|
||||
void moveRel(int16 x, int16 y, byte o, bool warp = false);
|
||||
void playActorAnimation(uint16 id, bool async = false, bool ignore = false);
|
||||
void playAnimation(uint16 id, byte slot, bool async = false, bool ignore = false, bool loop = false);
|
||||
void loadScene(byte id, const Common::Point &pos, byte o = 0);
|
||||
void loadScene(byte id, uint16 x, uint16 y, byte o = 0);
|
||||
void enableOn(bool enable = true);
|
||||
void setOns(byte id, byte value, byte sceneId = 0);
|
||||
void setLan(byte id, byte value, byte sceneId = 0);
|
||||
void setFlag(uint16 addr, byte value);
|
||||
byte getFlag(uint16 addr);
|
||||
void reloadLan();
|
||||
void rejectMessage();
|
||||
void bookColorMessage();
|
||||
|
||||
void playMusic(byte id); //schedules play
|
||||
void playSound(byte id, byte skipFrames);
|
||||
void playSoundNow(Pack *pack, uint32 id);
|
||||
void playVoiceNow(Pack *pack, uint32 id);
|
||||
void stopVoice();
|
||||
void enableObject(byte id, byte sceneId = 0);
|
||||
void disableObject(byte id, byte sceneId = 0);
|
||||
void hideActor();
|
||||
void showActor();
|
||||
void waitAnimation();
|
||||
void waitLanAnimationFrame(byte slot, uint16 frame);
|
||||
void setTimerCallback(uint16 addr, uint16 frames);
|
||||
void shakeScreen();
|
||||
void displayCredits();
|
||||
void fadeIn();
|
||||
void fadeOut();
|
||||
void wait(uint16 frames);
|
||||
|
||||
Common::RandomSource _rnd;
|
||||
|
||||
Resources *res;
|
||||
Scene *scene;
|
||||
Inventory *inventory;
|
||||
MusicPlayer *music;
|
||||
Dialog *dialog;
|
||||
|
||||
void setMusic(byte id);
|
||||
|
||||
void sayText(const Common::String &text, bool isSubtitle = false);
|
||||
void stopTextToSpeech();
|
||||
void setTTSVoice(CharacterID characterID) const;
|
||||
#ifdef USE_TTS
|
||||
Common::U32String convertText(const Common::String &text) const;
|
||||
#endif
|
||||
|
||||
Common::String _previousSaid;
|
||||
uint16 _previousVoiceId;
|
||||
|
||||
private:
|
||||
void processObject();
|
||||
bool trySelectedObject();
|
||||
|
||||
bool _sceneBusy;
|
||||
Action _action;
|
||||
Object *_dstObject;
|
||||
|
||||
Audio::AudioStream *_musicStream;
|
||||
Audio::SoundHandle _musicHandle, _soundHandle, _voiceHandle;
|
||||
const ADGameDescription *_gameDescription;
|
||||
|
||||
uint _markDelay, _gameDelay;
|
||||
|
||||
Common::Array<Common::Array<UseHotspot> > _useHotspots;
|
||||
|
||||
void fnIntro();
|
||||
void fnPoleClimbFail();
|
||||
void fnGotAnchor();
|
||||
void fnGetOutOfLake();
|
||||
void fnGuardDrinking();
|
||||
void fnEgoDefaultPosition();
|
||||
void fnEnterCave();
|
||||
void fnEgoScaredBySpider();
|
||||
void fnMoveToLadderAndLeaveCellar();
|
||||
void fnLeaveCellar();
|
||||
void fnPutRockInHole();
|
||||
void fnEgoBottomRightTurn();
|
||||
bool fnCheckingDrawers();
|
||||
void fnDrawerOpenMessage();
|
||||
bool fnRobotSafeAlreadyUnlockedCheck();
|
||||
void fnRobotSafeUnlockCheck();
|
||||
bool fnMansionIntrusionAttempt();
|
||||
void fnSecondMansionIntrusion();
|
||||
void fnThirdMansionIntrusion();
|
||||
void fnFourthMansionIntrusion();
|
||||
void fnFifthMansionIntrusion();
|
||||
void fnSixthMansionIntrusion();
|
||||
void fnTooDark();
|
||||
bool fnIsCookGone();
|
||||
void fnEgoSuspiciousPosition();
|
||||
void fnGivingFlowerToOldLady();
|
||||
void fnGiveAnotherFlowerToOldLady();
|
||||
void fnGivingFlowerToAnne();
|
||||
void fnGiveAnotherFlowerToAnne();
|
||||
};
|
||||
|
||||
extern TeenAgentEngine *g_engine;
|
||||
|
||||
} // End of namespace TeenAgent
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user