25#include "common/platform.h"
26#include "common/random.h"
27#include "common/rect.h"
28#include "engines/advancedDetector.h"
29#include "engines/engine.h"
31#include "engines/metaengine.h"
32#include "graphics/managed_surface.h"
33#include "graphics/screen.h"
34#include "graphics/surface.h"
35#include "twine/detection.h"
36#include "twine/input.h"
37#include "twine/scene/actor.h"
38#include "twine/script/script_life.h"
39#include "twine/script/script_move.h"
40#include "twine/shared.h"
45#define EUROPE_VERSION 0
49#define MODIFICATION_VERSION 2
52#define DEFAULT_FRAMES_PER_SECOND 20
53#define DEFAULT_HZ (1000 / DEFAULT_FRAMES_PER_SECOND)
55#define ORIGINAL_WIDTH 640
56#define ORIGINAL_HEIGHT 480
58static const struct TwinELanguage {
63 {
"English",
"EN_", 1},
66 {
"Spanish",
"SP_", 1},
67 {
"Italian",
"IT_", 1},
68 {
"Portuguese",
"", 1}};
80 CONF_MOVIE_FLAWIDE = 2,
114 int32 PolygonDetails = 2;
152enum class EngineState {
159enum class SceneLoopState {
194int32 boundRuleThree(int32 val1, int32 val2, int32 nbstep, int32 step);
205int32 ruleThree32(int32 value, int32 start, int32 end, int32 t);
209 int32 _isTimeFreezed = 0;
210 int32 _saveFreezedTime = 0;
211 int32 _mouseCursorState = 0;
214 TwineGameType _gameType;
215 EngineState _state = EngineState::Menu;
221 void processBookOfBu();
222 void processBonusList();
223 void processInventoryAction();
224 void processOptionsMenu();
226 void initConfigurations();
230 void processActorSamplePosition(int32 actorIdx);
232 void allocVideoMemory(int32 w, int32 h);
238 bool runGameEngine();
252 int32 toSeconds(
int x)
const;
253 void wipeSaveSlot(
int slot);
257 void pushMouseCursorVisible();
258 void popMouseCursorVisible();
260 bool isCDROM()
const {
return true; }
261 bool isLBA1()
const {
return _gameType == TwineGameType::GType_LBA; }
262 bool isLBA2()
const {
return _gameType == TwineGameType::GType_LBA2; }
263 bool isLBASlideShow()
const {
return _gameType == TwineGameType::GType_LBASHOW; }
264 bool isPreview()
const {
return (_gameFlags & TwinE::TF_PREVIEW) != 0; }
265 bool isMod()
const {
return (_gameFlags & TwinE::TF_MOD) != 0; }
266 bool isDotEmuEnhanced()
const {
return (_gameFlags & TwinE::TF_DOTEMU_ENHANCED) != 0; }
267 bool isLba1Classic()
const {
return (_gameFlags & TwinE::TF_LBA1_CLASSIC) != 0; }
268 bool isDemo()
const {
return (_gameFlags &
ADGF_DEMO) != 0; };
269 bool isAndroid()
const {
return _platform == Common::Platform::kPlatformAndroid; };
270 const char *getGameId()
const;
273 inline int numHoloPos()
const {
274 const int maxLocations = isLBA1() ? MAX_HOLO_POS : MAX_HOLO_POS_2;
278 inline int getMaxLife()
const {
279 return isLBA1() ? 50 : 255;
285 Animations *_animations;
286 Collision *_collision;
288 GameState *_gameState;
290 Movements *_movements;
291 Interface *_interface;
294 MenuOptions *_menuOptions;
298 Resources *_resources;
309 DebugState *_debugState;
311 ScriptLife *_scriptLife;
312 ScriptMove *_scriptMove;
318 int32 _frameCounter = 0;
319 SceneLoopState _sceneLoopState = SceneLoopState::ReturnToMenu;
322 int32 _loopInventoryItem = 0;
323 int32 _stepFalling = 0;
324 uint32 _gameFlags = 0u;
326 bool _flagRain =
false;
341 int originalWidth()
const;
342 int originalHeight()
const;
346 Common::Rect centerOnScreenX(int32 w, int32 y, int32 h)
const;
350 void testRestoreModeSVGA(
bool redraw);
352 void queueMovie(
const char *filename);
355 void adjustScreenMax(
Common::Rect &rect, int16 x, int16 y);
364 void restoreFrontBuffer();
365 void saveFrontBuffer();
367 void saveTimer(
bool pause);
396 void setPalette(uint startColor, uint numColors,
const byte *palette);
421inline int TwinEEngine::width()
const {
425inline int TwinEEngine::height()
const {
433inline int TwinEEngine::originalWidth()
const {
437inline int TwinEEngine::originalHeight()
const {
EngineFeature
Definition: engine.h:282
Definition: managed_surface.h:51
int16 & w
Definition: managed_surface.h:134
int16 & h
Definition: managed_surface.h:135
Simple class for handling a palette data.
Definition: palette.h:61
Definition: animations.h:34
Definition: collision.h:34
Definition: debug_state.h:35
Definition: gamestate.h:42
Definition: interface.h:36
Definition: movements.h:34
Definition: renderer.h:100
Definition: resources.h:130
Definition: script_life_v1.h:31
Definition: script_move_v1.h:31
Graphics::ManagedSurface _workVideoBuffer
Definition: twine.h:333
int getRandomNumber(uint max=0x7FFF)
ConfigFile _cfgfile
Definition: twine.h:316
bool _cameraZone
Definition: twine.h:329
void drawText(int32 x, int32 y, const Common::String &text, bool center=false, bool bigFont=false, int width=100)
bool canLoadGameStateCurrently(Common::U32String *msg=nullptr) override
Definition: twine.h:246
Common::Error loadGameStream(Common::SeekableReadStream *stream) override
TwineScreen _frontVideoBuffer
Definition: twine.h:335
void setPalette(const Graphics::Palette &palette, uint startColor=0u)
Common::Error run() override
bool delaySkip(uint32 time)
Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave=false) override
void copyBlockPhys(int32 left, int32 top, int32 right, int32 bottom)
void setPalette(uint startColor, uint numColors, const byte *palette)
Set the Palette object.
bool canSaveGameStateCurrently(Common::U32String *msg=nullptr) override
bool hasFeature(EngineFeature f) const override
Language
Definition: language.h:45
@ ADGF_DEMO
Add "-demo" to gameid.
Definition: advancedDetector.h:157
int32 Fps
Definition: twine.h:102
bool FlagDisplayText
Definition: twine.h:92
int32 Movie
Definition: twine.h:100
bool UseAutoSaving
Definition: twine.h:108
MidiFileType MidiType
Definition: twine.h:94
bool WallCollision
Definition: twine.h:106
int32 _languageId
Definition: twine.h:90
bool SceZoom
Definition: twine.h:116
int32 Version
Definition: twine.h:96
int32 ShadowMode
Definition: twine.h:113