[Scummvm-git-logs] scummvm master -> 68602a9e0a485124b38d3cb365e51cf4fbbddcbc
mgerhardy
martin.gerhardy at gmail.com
Sun Oct 31 19:03:15 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
68602a9e0a TWINE: little big adventure 2 fixes
Commit: 68602a9e0a485124b38d3cb365e51cf4fbbddcbc
https://github.com/scummvm/scummvm/commit/68602a9e0a485124b38d3cb365e51cf4fbbddcbc
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-10-31T20:03:11+01:00
Commit Message:
TWINE: little big adventure 2 fixes
implemented smk movieinfo handling
main menu shows correct text now
music track handling
Changed paths:
engines/twine/audio/music.cpp
engines/twine/holomap.cpp
engines/twine/menu/menu.cpp
engines/twine/menu/menuoptions.cpp
engines/twine/movies.cpp
engines/twine/movies.h
engines/twine/resources/resources.cpp
engines/twine/resources/resources.h
engines/twine/script/script_life_v1.cpp
engines/twine/script/script_move_v1.cpp
engines/twine/shared.h
engines/twine/twine.cpp
engines/twine/twine.h
diff --git a/engines/twine/audio/music.cpp b/engines/twine/audio/music.cpp
index 7e6373cf5f..d1f03bafa4 100644
--- a/engines/twine/audio/music.cpp
+++ b/engines/twine/audio/music.cpp
@@ -35,8 +35,6 @@
namespace TwinE {
-/** MP3 music folder */
-#define MUSIC_FOLDER "music"
/**
* LBA1 default number of tracks
* <pre>
@@ -62,7 +60,6 @@ namespace TwinE {
* INDEX 01 32:04:62
* </pre>
*/
-#define NUM_CD_TRACKS 10
TwinEMidiPlayer::TwinEMidiPlayer(TwinEEngine* engine) : _engine(engine) {
MidiPlayer::createDriver();
@@ -123,10 +120,58 @@ void Music::musicFadeOut() {
musicVolume(volume);
}
+static const char *musicTracksLba2[] = {
+ ""
+ "",
+ "TADPCM1",
+ "TADPCM2",
+ "TADPCM3",
+ "TADPCM4",
+ "TADPCM5",
+ "JADPCM01",
+ "", // Track6.wav
+ "JADPCM02",
+ "JADPCM03",
+ "JADPCM04",
+ "JADPCM05",
+ "JADPCM06",
+ "JADPCM07",
+ "JADPCM08",
+ "JADPCM09",
+ "JADPCM10",
+ "JADPCM11",
+ "JADPCM12",
+ "JADPCM13",
+ "JADPCM14",
+ "JADPCM15",
+ "JADPCM16",
+ "JADPCM17",
+ "JADPCM18",
+ "LOGADPCM"
+};
+
bool Music::playTrackMusicCd(int32 track) {
if (!_engine->_cfgfile.UseCD) {
return false;
}
+
+ if (_engine->isLBA2()) {
+ const char *basename = musicTracksLba2[track];
+ Audio::SeekableAudioStream *stream = Audio::SeekableAudioStream::openStreamFile(basename);
+ if (stream != nullptr) {
+ const int volume = _engine->_system->getMixer()->getVolumeForSoundType(Audio::Mixer::kMusicSoundType);
+ _engine->_system->getMixer()->playStream(Audio::Mixer::kMusicSoundType, &_midiHandle,
+ Audio::makeLoopingAudioStream(stream, 1), volume);
+ debug(3, "Play audio track %s for track id %i", basename, track);
+ return true;
+ }
+ debug(3, "Failed to find a supported format for audio track: %s", basename);
+ // TODO: are there versions with real audio cd?
+ // us release starting at track 0
+ // other releases at track 6
+ return false;
+ }
+
AudioCDManager *cdrom = g_system->getAudioCDManager();
return cdrom->play(track, 1, 0, 0);
}
@@ -199,7 +244,7 @@ bool Music::playMidiMusic(int32 midiIdx, int32 loop) {
stopMidiMusic();
}
- if (_engine->_gameFlags & TF_DOTEMU_ENHANCED) {
+ if (_engine->isDotEmuEnhanced()) {
const Common::String &trackName = Common::String::format("lba1-%02i", midiIdx);
Audio::SeekableAudioStream *stream = Audio::SeekableAudioStream::openStreamFile(trackName);
if (stream != nullptr) {
diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index 069e986df3..fc3ce3eb1c 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -63,15 +63,15 @@ static const float zDistanceTrajectory = 5300.0f;
Holomap::Holomap(TwinEEngine *engine) : _engine(engine) {}
int32 Holomap::distance(float distance) const {
- const float w = (float)_engine->width() / (float)ORIGINAL_WIDTH;
- const float h = (float)_engine->height() / (float)ORIGINAL_HEIGHT;
+ const float w = (float)_engine->width() / (float)_engine->originalWidth();
+ const float h = (float)_engine->height() / (float)_engine->originalHeight();
const float f = MIN<float>(w, h);
return (int32)(distance / f);
}
int32 Holomap::scale(float val) const {
- const float w = (float)_engine->width() / (float)ORIGINAL_WIDTH;
- const float h = (float)_engine->height() / (float)ORIGINAL_HEIGHT;
+ const float w = (float)_engine->width() / (float)_engine->originalWidth();
+ const float h = (float)_engine->height() / (float)_engine->originalHeight();
const float f = MIN<float>(w, h);
return (int32)(val * f);
}
diff --git a/engines/twine/menu/menu.cpp b/engines/twine/menu/menu.cpp
index 1df4c50c90..efdaa29fde 100644
--- a/engines/twine/menu/menu.cpp
+++ b/engines/twine/menu/menu.cpp
@@ -79,13 +79,22 @@ enum MenuButtonTypesEnum {
namespace _priv {
-static MenuSettings createMainMenu() {
+static MenuSettings createMainMenu(bool lba1) {
MenuSettings settings;
settings.setButtonsBoxHeight(200);
- settings.addButton(TextId::kNewGame);
- settings.addButton(TextId::kContinueGame);
- settings.addButton(TextId::kOptions);
- settings.addButton(TextId::kQuit);
+ if (lba1) {
+ settings.addButton(TextId::kNewGame);
+ settings.addButton(TextId::kContinueGame);
+ settings.addButton(TextId::kOptions);
+ settings.addButton(TextId::kQuit);
+ } else {
+ settings.addButton(TextId::toContinueGame);
+ settings.addButton(TextId::toNewGame);
+ settings.addButton(TextId::toLoadGame);
+ settings.addButton(TextId::toSauver);
+ settings.addButton(TextId::toOptions);
+ settings.addButton(TextId::toQuit);
+ }
return settings;
}
@@ -106,7 +115,7 @@ static MenuSettings createGiveUpSaveMenu() {
return settings;
}
-static MenuSettings createOptionsMenu() {
+static MenuSettings createOptionsMenu(bool lba1) {
MenuSettings settings;
settings.addButton(TextId::kReturnMenu);
settings.addButton(TextId::kVolumeSettings);
@@ -160,12 +169,12 @@ const char *MenuSettings::getButtonText(Text *text, int buttonIndex) {
Menu::Menu(TwinEEngine *engine) {
_engine = engine;
- _optionsMenuState = _priv::createOptionsMenu();
+ _optionsMenuState = _priv::createOptionsMenu(engine->isLBA1());
_giveUpMenuWithSaveState = _priv::createGiveUpSaveMenu();
_volumeMenuState = _priv::createVolumeMenu();
_saveManageMenuState = _priv::createSaveManageMenu();
_giveUpMenuState = _priv::createGiveUpMenu();
- _mainMenuState = _priv::createMainMenu();
+ _mainMenuState = _priv::createMainMenu(engine->isLBA1());
_advOptionsMenuState = _priv::createAdvancedOptionsMenu();
Common::fill(&_behaviourAnimState[0], &_behaviourAnimState[4], 0);
@@ -591,12 +600,14 @@ int32 Menu::processMenu(MenuSettings *menuSettings, bool showCredits) {
startMillis = loopMillis;
}
if (showCredits && loopMillis - startMillis > 11650) {
+ // TODO: lba2 only show the credits only in the main menu and you could force it by pressing shift+c
+ // TODO: lba2 has a cd audio track (2) for the credits
_engine->_menuOptions->showCredits();
- if (_engine->_flaMovies->playFlaMovie(FLA_DRAGON3)) {
+ if (_engine->_movie->playMovie(FLA_DRAGON3)) {
if (!_engine->_screens->loadImageDelay(TwineImage(Resources::HQR_RESS_FILE, 15, 16), 3)) {
if (!_engine->_screens->loadImageDelay(TwineImage(Resources::HQR_RESS_FILE, 17, 18), 3)) {
if (!_engine->_screens->loadImageDelay(TwineImage(Resources::HQR_RESS_FILE, 19, 20), 3)) {
- if (_engine->_flaMovies->playFlaMovie(FLA_BATEAU)) {
+ if (_engine->_movie->playMovie(FLA_BATEAU)) {
if (_engine->_cfgfile.Version == USA_VERSION) {
_engine->_screens->loadImageDelay(_engine->_resources->relentLogo(), 3);
} else {
@@ -766,23 +777,30 @@ EngineState Menu::run() {
FrameMarker frame(_engine);
_engine->_text->initTextBank(TextBankId::Options_and_menus);
- _engine->_music->playTrackMusic(9); // LBA's Theme
+ if (_engine->isLBA1()) {
+ _engine->_music->playTrackMusic(9); // LBA's Theme
+ } else {
+ _engine->_music->playTrackMusic(6); // LBA2's Theme
+ }
_engine->_sound->stopSamples();
ScopedCursor scoped(_engine);
switch (processMenu(&_mainMenuState)) {
+ case (int32)TextId::toNewGame:
case (int32)TextId::kNewGame: {
if (_engine->_menuOptions->newGameMenu()) {
return EngineState::GameLoop;
}
break;
}
+ case (int32)TextId::toContinueGame:
case (int32)TextId::kContinueGame: {
if (_engine->_menuOptions->continueGameMenu()) {
return EngineState::LoadedGame;
}
break;
}
+ case (int32)TextId::toOptions:
case (int32)TextId::kOptions: {
optionsMenu();
break;
@@ -792,6 +810,7 @@ EngineState Menu::run() {
break;
}
case (int32)TextId::kQuit:
+ case (int32)TextId::toQuit:
case kQuitEngine:
debug("quit the game");
return EngineState::QuitGame;
diff --git a/engines/twine/menu/menuoptions.cpp b/engines/twine/menu/menuoptions.cpp
index 31cb62cb5a..a4483e0dec 100644
--- a/engines/twine/menu/menuoptions.cpp
+++ b/engines/twine/menu/menuoptions.cpp
@@ -81,7 +81,7 @@ void MenuOptions::newGame() {
if (!aborted) {
_engine->_music->playMidiMusic(1);
- _engine->_flaMovies->playFlaMovie(FLA_INTROD);
+ _engine->_movie->playMovie(FLA_INTROD);
}
_engine->_text->textClipSmall();
@@ -114,7 +114,7 @@ void MenuOptions::showCredits() {
}
void MenuOptions::showEndSequence() {
- _engine->_flaMovies->playFlaMovie(FLA_THEEND);
+ _engine->_movie->playMovie(FLA_THEEND);
_engine->_screens->clearScreen();
_engine->setPalette(_engine->_screens->_paletteRGBA);
diff --git a/engines/twine/movies.cpp b/engines/twine/movies.cpp
index 98c23ca8d5..2c8d5df998 100644
--- a/engines/twine/movies.cpp
+++ b/engines/twine/movies.cpp
@@ -23,6 +23,8 @@
#include "twine/movies.h"
#include "common/endian.h"
#include "common/file.h"
+#include "common/language.h"
+#include "common/str.h"
#include "common/system.h"
#include "graphics/managed_surface.h"
#include "image/gif.h"
@@ -353,11 +355,14 @@ void Movies::playGIFMovie(const char *flaName) {
}
}
-bool Movies::playFlaMovie(const char *flaName) {
- assert(_engine->isLBA1());
+bool Movies::playMovie(const char *name) {
+ if (_engine->isLBA2()) {
+ const int index = _engine->_resources->findSmkMovieIndex(name);
+ return playSmkMovie(name, index);
+ }
_engine->_sound->stopSamples();
- Common::String fileNamePath = Common::String::format("%s", flaName);
+ Common::String fileNamePath = name;
const size_t n = fileNamePath.findLastOf(".");
if (n != Common::String::npos) {
fileNamePath.erase(n);
@@ -399,7 +404,7 @@ bool Movies::playFlaMovie(const char *flaName) {
if (version != MKTAG('V', '1', '.', '3')) {
int32 currentFrame = 0;
- debug("Play fla: %s", flaName);
+ debug("Play fla: %s", name);
ScopedKeyMap scopedKeyMap(_engine, cutsceneKeyMapId);
@@ -451,20 +456,60 @@ bool Movies::playFlaMovie(const char *flaName) {
return finished;
}
-void Movies::playSmkMovie(int index) {
+class TwineSmackerDecoder : public Video::SmackerDecoder {
+public:
+ void enableLanguage(int track, int volume) {
+ AudioTrack* audio = getAudioTrack(track);
+ if (audio == nullptr) {
+ return;
+ }
+ audio->setMute(false);
+ audio->setVolume(CLIP<int>(volume, 0, Audio::Mixer::kMaxMixerVolume));
+ }
+};
+
+bool Movies::playSmkMovie(const char *name, int index) {
assert(_engine->isLBA2());
- Video::SmackerDecoder decoder;
+ TwineSmackerDecoder decoder;
Common::SeekableReadStream *stream = HQR::makeReadStream(TwineResource(Resources::HQR_VIDEO_FILE, index));
if (stream == nullptr) {
warning("Failed to find smacker video %i", index);
- return;
+ return false;
}
if (!decoder.loadStream(stream)) {
warning("Failed to load smacker video %i", index);
- return;
+ return false;
}
+ const int volume = _engine->_system->getMixer()->getVolumeForSoundType(Audio::Mixer::kMusicSoundType);
+ decoder.setVolume(CLIP<int>(volume, 0, Audio::Mixer::kMaxMixerVolume));
decoder.start();
+ decoder.setAudioTrack(0); // music
+ if (_engine->_cfgfile.Voice) {
+ int additionalAudioTrack = -1;
+ if (!scumm_strnicmp(name, "INTRO", 5)) {
+ switch (_engine->getGameLang()) {
+ default:
+ case Common::Language::EN_ANY:
+ case Common::Language::EN_GRB:
+ case Common::Language::EN_USA:
+ additionalAudioTrack = 3;
+ break;
+ case Common::Language::DE_DEU:
+ additionalAudioTrack = 2;
+ break;
+ case Common::Language::FR_FRA:
+ additionalAudioTrack = 1;
+ break;
+ }
+ }
+ const int speechVolume = _engine->_system->getMixer()->getVolumeForSoundType(Audio::Mixer::kSpeechSoundType);
+ debug(3, "Play additional speech track: %i (of %i tracks)", additionalAudioTrack, decoder.getAudioTrackCount());
+ decoder.enableLanguage(additionalAudioTrack, speechVolume);
+ } else {
+ debug(3, "Disabled smacker speech");
+ }
+
for (;;) {
if (decoder.endOfVideo()) {
break;
@@ -491,6 +536,7 @@ void Movies::playSmkMovie(int index) {
}
decoder.close();
+ return true;
}
} // namespace TwinE
diff --git a/engines/twine/movies.h b/engines/twine/movies.h
index f02198b856..f20e8f1ad9 100644
--- a/engines/twine/movies.h
+++ b/engines/twine/movies.h
@@ -95,17 +95,17 @@ private:
void prepareGIF(int index);
void playGIFMovie(const char *flaName);
+ bool playSmkMovie(const char *name, int index);
+
public:
Movies(TwinEEngine *engine);
/**
* Play FLA movies
- * @param flaName FLA movie name
+ * @param name FLA movie name
* @return @c true if finished. @c false if aborted.
*/
- bool playFlaMovie(const char *flaName);
-
- void playSmkMovie(int index);
+ bool playMovie(const char *name);
};
} // namespace TwinE
diff --git a/engines/twine/resources/resources.cpp b/engines/twine/resources/resources.cpp
index dca05b661c..9530b15804 100644
--- a/engines/twine/resources/resources.cpp
+++ b/engines/twine/resources/resources.cpp
@@ -211,6 +211,13 @@ const Trajectory *Resources::getTrajectory(int index) const {
return _trajectories.getTrajectory(index);
}
+int Resources::findSmkMovieIndex(const char *name) const {
+ Common::String smkName = name;
+ smkName.toLowercase();
+ const Common::Array<int32> &info = getMovieInfo(smkName);
+ return info[0];
+}
+
void Resources::loadMovieInfo() {
uint8 *content = nullptr;
int32 size;
@@ -228,7 +235,7 @@ void Resources::loadMovieInfo() {
Common::StringTokenizer tok(str, "\r\n");
int videoIndex = 0;
while (!tok.empty()) {
- const Common::String &line = tok.nextToken();
+ Common::String line = tok.nextToken();
if (_engine->isLBA1()) {
Common::StringTokenizer lineTok(line);
if (lineTok.empty()) {
@@ -243,8 +250,15 @@ void Resources::loadMovieInfo() {
}
_movieInfo.setVal(name, frames);
} else {
- Common::Array<int32> info(videoIndex);
+ Common::Array<int32> info(1);
+ info[0] = videoIndex;
+ line.toLowercase();
+ if (line.hasSuffix(".smk")) {
+ line = line.substr(0, line.size() - 4);
+ }
_movieInfo.setVal(line, info);
+ debug(4, "movie name %s mapped to hqr index %i", line.c_str(), videoIndex);
+ ++videoIndex;
}
}
}
diff --git a/engines/twine/resources/resources.h b/engines/twine/resources/resources.h
index 1194a8b961..4b07d8f717 100644
--- a/engines/twine/resources/resources.h
+++ b/engines/twine/resources/resources.h
@@ -189,6 +189,8 @@ public:
const TextEntry *getText(TextBankId textBankId, TextId index) const;
+ int findSmkMovieIndex(const char *name) const;
+
// main palette
static constexpr const char *HQR_RESS_FILE = "ress.hqr";
// dialoges
diff --git a/engines/twine/script/script_life_v1.cpp b/engines/twine/script/script_life_v1.cpp
index 1b50c73d42..ac8ea064e8 100644
--- a/engines/twine/script/script_life_v1.cpp
+++ b/engines/twine/script/script_life_v1.cpp
@@ -1199,7 +1199,7 @@ static int32 lPLAY_FLA(TwinEEngine *engine, LifeScriptContext &ctx) {
}
} while (true);
- engine->_flaMovies->playFlaMovie(movie);
+ engine->_movie->playMovie(movie);
engine->setPalette(engine->_screens->_paletteRGBA);
engine->_screens->clearScreen();
diff --git a/engines/twine/script/script_move_v1.cpp b/engines/twine/script/script_move_v1.cpp
index 88b90014d5..37b060e6e7 100644
--- a/engines/twine/script/script_move_v1.cpp
+++ b/engines/twine/script/script_move_v1.cpp
@@ -561,7 +561,7 @@ static int32 mPLAY_FLA(TwinEEngine *engine, MoveScriptContext &ctx) {
}
} while (true);
- engine->_flaMovies->playFlaMovie(movie);
+ engine->_movie->playMovie(movie);
engine->setPalette(engine->_screens->_paletteRGBA);
engine->_screens->clearScreen();
return 0;
diff --git a/engines/twine/shared.h b/engines/twine/shared.h
index fd6e531f85..3b073ec0a0 100644
--- a/engines/twine/shared.h
+++ b/engines/twine/shared.h
@@ -533,7 +533,16 @@ enum class TextId : int16 {
kCustomHighResOptionOn = -2,
kCustomHighResOptionOff = -3,
kCustomWallCollisionOn = -4,
- kCustomWallCollisionOff = -5
+ kCustomWallCollisionOff = -5,
+
+ // ------ lba2
+
+ toContinueGame = 70,
+ toNewGame = 71,
+ toLoadGame = 72,
+ toSauver = 73,
+ toOptions = 74,
+ toQuit = 75
};
enum InventoryItems {
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index fdfe204a23..1dce5bb85b 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -131,6 +131,7 @@ TwinEEngine::TwinEEngine(OSystem *system, Common::Language language, uint32 flag
SearchMan.addSubDirectoryMatching(gameDataDir, "vox");
if (isLBA2()) {
SearchMan.addSubDirectoryMatching(gameDataDir, "video");
+ SearchMan.addSubDirectoryMatching(gameDataDir, "music");
}
if (isDotEmuEnhanced()) {
SearchMan.addSubDirectoryMatching(gameDataDir, "resources/lba_files/hqr");
@@ -162,7 +163,7 @@ TwinEEngine::TwinEEngine(OSystem *system, Common::Language language, uint32 flag
_movements = new Movements(this);
_interface = new Interface(this);
_menu = new Menu(this);
- _flaMovies = new Movies(this);
+ _movie = new Movies(this);
_menuOptions = new MenuOptions(this);
_music = new Music(this);
_redraw = new Redraw(this);
@@ -193,7 +194,7 @@ TwinEEngine::~TwinEEngine() {
delete _movements;
delete _interface;
delete _menu;
- delete _flaMovies;
+ delete _movie;
delete _menuOptions;
delete _music;
delete _redraw;
@@ -244,8 +245,8 @@ Common::Error TwinEEngine::run() {
AchMan.setActiveDomain(getMetaEngine()->getAchievementsInfo(gameTarget));
syncSoundSettings();
- int32 w = ORIGINAL_WIDTH;
- int32 h = ORIGINAL_HEIGHT;
+ int32 w = originalWidth();
+ int32 h = originalHeight();
const bool highRes = ConfMan.getBool("usehighres");
if (highRes) {
w = 1024;
@@ -374,7 +375,8 @@ void TwinEEngine::autoSave() {
void TwinEEngine::allocVideoMemory(int32 w, int32 h) {
const Graphics::PixelFormat format = Graphics::PixelFormat::createFormatCLUT8();
- _imageBuffer.create(ORIGINAL_WIDTH, ORIGINAL_HEIGHT, format); // original lba1 resolution for a lot of images.
+ // original resolution of the game
+ _imageBuffer.create(originalWidth(), originalHeight(), format);
_workVideoBuffer.create(w, h, format);
_frontVideoBuffer.create(w, h, format);
@@ -517,9 +519,9 @@ void TwinEEngine::initEngine() {
if (!abort) {
if (isLBA1()) {
- _flaMovies->playFlaMovie(FLA_DRAGON3);
+ _movie->playMovie(FLA_DRAGON3);
} else {
- _flaMovies->playSmkMovie(16);
+ _movie->playMovie("INTRO");
}
}
_input->enableKeyMap(uiKeyMapId);
@@ -714,7 +716,7 @@ int32 TwinEEngine::runGameEngine() { // mainLoopInteration
readKeys();
if (!_queuedFlaMovie.empty()) {
- _flaMovies->playFlaMovie(_queuedFlaMovie.c_str());
+ _movie->playMovie(_queuedFlaMovie.c_str());
_queuedFlaMovie.clear();
}
@@ -1155,6 +1157,10 @@ void TwinEEngine::drawText(int32 x, int32 y, const Common::String &text, bool ce
center ? Graphics::kTextAlignCenter : Graphics::kTextAlignLeft, 0, true);
}
+Common::Language TwinEEngine::getGameLang() const {
+ return _gameLang;
+}
+
const char *TwinEEngine::getGameId() const {
if (isLBA1()) {
return "lba";
diff --git a/engines/twine/twine.h b/engines/twine/twine.h
index 6efe3c949b..4a3e8f045f 100644
--- a/engines/twine/twine.h
+++ b/engines/twine/twine.h
@@ -248,6 +248,7 @@ public:
bool isDotEmuEnhanced() const { return (_gameFlags & TwinE::TF_DOTEMU_ENHANCED) != 0; }
bool isDemo() const { return (_gameFlags & ADGF_DEMO) != 0; };
const char *getGameId() const;
+ Common::Language getGameLang() const;
bool unlockAchievement(const Common::String &id);
@@ -260,7 +261,7 @@ public:
Movements *_movements;
Interface *_interface;
Menu *_menu;
- Movies *_flaMovies;
+ Movies *_movie;
MenuOptions *_menuOptions;
Music *_music;
Redraw *_redraw;
@@ -299,6 +300,11 @@ public:
int width() const;
int height() const;
+
+ // the resolution the game was meant to be played with
+ int originalWidth() const;
+ int originalHeight() const;
+
Common::Rect rect() const;
Common::Rect centerOnScreen(int32 w, int32 h) const;
Common::Rect centerOnScreenX(int32 w, int32 y, int32 h) const;
@@ -387,6 +393,15 @@ inline Common::Rect TwinEEngine::rect() const {
return Common::Rect(0, 0, _frontVideoBuffer.w - 1, _frontVideoBuffer.h - 1);
}
+inline int TwinEEngine::originalWidth() const {
+ return 640;
+}
+
+inline int TwinEEngine::originalHeight() const {
+ return 480;
+}
+
+
} // namespace TwinE
#endif
More information about the Scummvm-git-logs
mailing list