[Scummvm-git-logs] scummvm master -> 30cb2fb3cf62f954e79d36b65674ff2aaad7d566
mgerhardy
martin.gerhardy at gmail.com
Fri Nov 13 16:45:45 UTC 2020
This automated email contains information about 12 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
407205d611 TWINE: named two of the unknown model struct members
99c32851bd TWINE: removed newlines from warning and error messages
2c06f2bba7 TWINE: fixed non-transparent ui while game is running
5366ea735c TWINE: ensure menu background after giving up
0872f41cd8 TWINE: added todo about the missing credits scene
78ff2078ab TWINE: added ui extra options
e729e2eaea TWINE: removing scaling code - use scummvm scaling
fcdab2caf3 TWINE: reduced scope
f68c86eeb3 TWINE: enable debug mode if any of the debug features is toggled
ab22f50b85 TWINE: fixed activating the desired keymap
d6d089a68e TWINE: fixed missing boolean conversions
30cb2fb3cf TWINE: fixed kAggressive mode
Commit: 407205d6110d412e4dea84f91edb8135f261618e
https://github.com/scummvm/scummvm/commit/407205d6110d412e4dea84f91edb8135f261618e
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: named two of the unknown model struct members
Changed paths:
engines/twine/renderer.h
diff --git a/engines/twine/renderer.h b/engines/twine/renderer.h
index d252086775..3806faedc0 100644
--- a/engines/twine/renderer.h
+++ b/engines/twine/renderer.h
@@ -111,8 +111,8 @@ private:
int16 bodyFlag = 0;
int16 unk0 = 0;
int16 unk1 = 0;
- int16 unk2 = 0;
- int16 unk3 = 0;
+ int16 bottomleft = 0;
+ int16 topright = 0;
int16 unk4 = 0;
int16 unk5 = 0;
int16 offsetToData = 0;
Commit: 99c32851bde367f46dd3b182d6e634223865514e
https://github.com/scummvm/scummvm/commit/99c32851bde367f46dd3b182d6e634223865514e
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: removed newlines from warning and error messages
Changed paths:
engines/twine/animations.cpp
engines/twine/movements.cpp
engines/twine/twine.cpp
diff --git a/engines/twine/animations.cpp b/engines/twine/animations.cpp
index d9e45a7500..ce8a189baf 100644
--- a/engines/twine/animations.cpp
+++ b/engines/twine/animations.cpp
@@ -299,7 +299,7 @@ bool Animations::setModelAnimation(int32 animState, const uint8 *animPtr, uint8
applyAnimStep(&edi, eax, keyFrameLength, &keyFramePtr, &lastKeyFramePtr);
break;
default:
- error("Unsupported animation rotation mode %d!\n", animOpcode);
+ error("Unsupported animation rotation mode %d", animOpcode);
}
edi += 30;
diff --git a/engines/twine/movements.cpp b/engines/twine/movements.cpp
index 72f2a10f20..2ddfb1ea8f 100644
--- a/engines/twine/movements.cpp
+++ b/engines/twine/movements.cpp
@@ -474,7 +474,7 @@ void Movements::processActorMovements(int32 actorIdx) {
processRandomAction(actorIdx);
break;
default:
- warning("Unknown Control mode %d\n", actor->controlMode);
+ warning("Unknown control mode %d", actor->controlMode);
break;
}
}
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index c56f295f8a..a71cf75ec4 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -494,7 +494,7 @@ int32 TwinEEngine::runGameEngine() { // mainLoopInteration
case kiHolomap:
_holomap->processHolomap();
_screens->lockPalette = true;
- warning("Use inventory [kiHolomap] not implemented!\n");
+ warning("Use inventory [kiHolomap] not implemented!");
break;
case kiMagicBall:
if (_gameState->usingSabre) {
Commit: 2c06f2bba7599b7012f4e273035b09e40cb62b5a
https://github.com/scummvm/scummvm/commit/2c06f2bba7599b7012f4e273035b09e40cb62b5a
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: fixed non-transparent ui while game is running
the original game has these menus rendered with transparency over the actual scene
Changed paths:
engines/twine/menu.cpp
engines/twine/menu.h
engines/twine/scene.h
diff --git a/engines/twine/menu.cpp b/engines/twine/menu.cpp
index 8151777bca..1e8d67be3b 100644
--- a/engines/twine/menu.cpp
+++ b/engines/twine/menu.cpp
@@ -243,7 +243,7 @@ void Menu::drawBox(int32 left, int32 top, int32 right, int32 bottom) {
_engine->_interface->drawLine(left + 1, bottom, right, bottom, 73); // bottom line
}
-void Menu::drawButtonGfx(int32 width, int32 topheight, int32 buttonId, const char *dialText, bool hover) {
+void Menu::drawButtonGfx(const MenuSettings *menuSettings, int32 width, int32 topheight, int32 buttonId, const char *dialText, bool hover) {
const int32 left = width - kMainMenuButtonSpan / 2;
const int32 right = width + kMainMenuButtonSpan / 2;
@@ -252,7 +252,7 @@ void Menu::drawButtonGfx(int32 width, int32 topheight, int32 buttonId, const cha
const int32 bottom = topheight + 25;
if (hover) {
- if (buttonId <= MenuButtonTypes::kMasterVolume && buttonId >= MenuButtonTypes::kMusicVolume) {
+ if (menuSettings == &volumeMenuState && buttonId <= MenuButtonTypes::kMasterVolume && buttonId >= MenuButtonTypes::kMusicVolume) {
int32 newWidth = 0;
switch (buttonId) {
case MenuButtonTypes::kMusicVolume: {
@@ -328,13 +328,13 @@ void Menu::drawButtons(MenuSettings *menuSettings, bool hover) {
const char *text = menuSettings->getButtonText(_engine->_text, i);
if (hover) {
if (i == buttonNumber) {
- drawButtonGfx(kMainMenuButtonWidth, topHeight, menuItemId, text, hover);
+ drawButtonGfx(menuSettings, kMainMenuButtonWidth, topHeight, menuItemId, text, hover);
}
} else {
if (i == buttonNumber) {
- drawButtonGfx(kMainMenuButtonWidth, topHeight, menuItemId, text, true);
+ drawButtonGfx(menuSettings, kMainMenuButtonWidth, topHeight, menuItemId, text, true);
} else {
- drawButtonGfx(kMainMenuButtonWidth, topHeight, menuItemId, text, false);
+ drawButtonGfx(menuSettings, kMainMenuButtonWidth, topHeight, menuItemId, text, false);
}
}
@@ -350,7 +350,13 @@ int32 Menu::processMenu(MenuSettings *menuSettings) {
_engine->_input->enableKeyMap(uiKeyMapId);
- _engine->_screens->loadMenuImage(false);
+ // if we are running the game already, the buttons are just rendered on top of the scene
+ if (!_engine->_scene->isGameRunning()) {
+ _engine->_screens->loadMenuImage(false);
+ } else {
+ _engine->_screens->copyScreen(_engine->workVideoBuffer, _engine->frontVideoBuffer);
+ _engine->flip();
+ }
do {
_engine->readKeys();
@@ -418,9 +424,9 @@ int32 Menu::processMenu(MenuSettings *menuSettings) {
_engine->cfgfile.SceZoom = !_engine->cfgfile.SceZoom;
}
if (_engine->cfgfile.SceZoom) {
- menuSettings->setActiveButtonTextId(TextId::kNoScenaryZoom);
- } else {
menuSettings->setActiveButtonTextId(TextId::kScenaryZoomOn);
+ } else {
+ menuSettings->setActiveButtonTextId(TextId::kNoScenaryZoom);
}
break;
default:
@@ -582,6 +588,7 @@ int32 Menu::volumeMenu() {
void Menu::inGameOptionsMenu() {
_engine->_text->initTextBank(TextBankId::Options_and_menus);
_engine->_menu->optionsMenuState.setButtonTextId(0, TextId::kReturnGame);
+ _engine->_screens->copyScreen(_engine->frontVideoBuffer, _engine->workVideoBuffer);
_engine->_menu->optionsMenu();
_engine->_text->initTextBank(_engine->_scene->sceneTextBank + 3);
optionsMenuState.setButtonTextId(0, TextId::kReturnMenu);
diff --git a/engines/twine/menu.h b/engines/twine/menu.h
index 623072a034..78569e8fd3 100644
--- a/engines/twine/menu.h
+++ b/engines/twine/menu.h
@@ -152,7 +152,7 @@ private:
* @param dialText
* @param hover flag to know if should draw as a hover button or not
*/
- void drawButtonGfx(int32 width, int32 topheight, int32 buttonId, const char *dialText, bool hover);
+ void drawButtonGfx(const MenuSettings *menuSettings, int32 width, int32 topheight, int32 buttonId, const char *dialText, bool hover);
void plasmaEffectRenderFrame();
/**
* Process the menu button draw
diff --git a/engines/twine/scene.h b/engines/twine/scene.h
index 110fe5d8f0..930de62bff 100644
--- a/engines/twine/scene.h
+++ b/engines/twine/scene.h
@@ -345,6 +345,8 @@ public:
void processEnvironmentSound();
void initSceneVars();
+ bool isGameRunning() const;
+
/**
* Process actor zones
* @param actorIdx Process actor index
@@ -352,6 +354,10 @@ public:
void processActorZones(int32 actorIdx);
};
+inline bool Scene::isGameRunning() const {
+ return currentScene != nullptr;
+}
+
} // namespace TwinE
#endif
Commit: 5366ea735cc3cefef42eeadae1b08462938c2db8
https://github.com/scummvm/scummvm/commit/5366ea735cc3cefef42eeadae1b08462938c2db8
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: ensure menu background after giving up
also the initial values for the advanced menu entries are correct now
Changed paths:
engines/twine/gamestate.cpp
engines/twine/gamestate.h
engines/twine/menu.cpp
engines/twine/scene.cpp
engines/twine/scene.h
diff --git a/engines/twine/gamestate.cpp b/engines/twine/gamestate.cpp
index 14cf4bdb96..c748364a2c 100644
--- a/engines/twine/gamestate.cpp
+++ b/engines/twine/gamestate.cpp
@@ -64,7 +64,7 @@ void GameState::initEngineProjections() {
_engine->_renderer->setLightVector(_engine->_scene->alphaLight, _engine->_scene->betaLight, 0);
}
-void GameState::initSceneVars() {
+void GameState::initGameStateVars() {
_engine->_extra->resetExtras();
for (int32 i = 0; i < OVERLAY_MAX_ENTRIES; i++) {
@@ -116,7 +116,7 @@ void GameState::initEngineVars() {
_engine->_scene->alphaLight = 896;
_engine->_scene->betaLight = 950;
initEngineProjections();
- initSceneVars();
+ initGameStateVars();
initHeroVars();
_engine->_scene->newHeroX = 0x2000;
@@ -485,4 +485,10 @@ void GameState::processGameoverAnimation() {
_engine->lbaTime = tmpLbaTime;
}
+void GameState::giveUp() {
+ _engine->_sound->stopSamples();
+ initGameStateVars();
+ _engine->_scene->stopRunningGame();
+}
+
} // namespace TwinE
diff --git a/engines/twine/gamestate.h b/engines/twine/gamestate.h
index 9371f80777..73431ab4bc 100644
--- a/engines/twine/gamestate.h
+++ b/engines/twine/gamestate.h
@@ -86,7 +86,7 @@ class GameState {
private:
TwinEEngine *_engine;
- void initSceneVars();
+ void initGameStateVars();
void initHeroVars();
public:
@@ -161,6 +161,7 @@ public:
void processFoundItem(int32 item);
+ void giveUp();
bool loadGame(Common::SeekableReadStream *file);
bool saveGame(Common::WriteStream *file);
diff --git a/engines/twine/menu.cpp b/engines/twine/menu.cpp
index 1e8d67be3b..1b0c2cc03d 100644
--- a/engines/twine/menu.cpp
+++ b/engines/twine/menu.cpp
@@ -324,6 +324,45 @@ void Menu::drawButtons(MenuSettings *menuSettings, bool hover) {
}
for (int16 i = 0; i < maxButton; ++i) {
+ if (menuSettings == &advOptionsMenuState) {
+ int16 id = menuSettings->getButtonState(i);
+ switch (id) {
+ case MenuButtonTypes::kAgressiveMode:
+ if (_engine->_actor->autoAgressive) {
+ menuSettings->setButtonTextId(i, TextId::kBehaviourAgressiveAuto);
+ } else {
+ menuSettings->setButtonTextId(i, TextId::kBehaviourAgressiveManual);
+ }
+ break;
+ case MenuButtonTypes::kPolygonDetails:
+ if (_engine->cfgfile.PolygonDetails == 0) {
+ menuSettings->setButtonTextId(i, TextId::kDetailsPolygonsLow);
+ } else if (_engine->cfgfile.PolygonDetails == 1) {
+ menuSettings->setButtonTextId(i, TextId::kDetailsPolygonsMiddle);
+ } else {
+ menuSettings->setButtonTextId(i, TextId::kDetailsPolygonsHigh);
+ }
+ break;
+ case MenuButtonTypes::kShadowSettings:
+ if (_engine->cfgfile.ShadowMode == 0) {
+ menuSettings->setButtonTextId(i, TextId::kShadowsDisabled);
+ } else if (_engine->cfgfile.ShadowMode == 1) {
+ menuSettings->setButtonTextId(i, TextId::kShadowsFigures);
+ } else {
+ menuSettings->setButtonTextId(i, TextId::kDetailsShadowHigh);
+ }
+ break;
+ case MenuButtonTypes::kSceneryZoom:
+ if (_engine->cfgfile.SceZoom) {
+ menuSettings->setButtonTextId(i, TextId::kScenaryZoomOn);
+ } else {
+ menuSettings->setButtonTextId(i, TextId::kNoScenaryZoom);
+ }
+ break;
+ default:
+ break;
+ }
+ }
const int32 menuItemId = menuSettings->getButtonState(i);
const char *text = menuSettings->getButtonText(_engine->_text, i);
if (hover) {
@@ -381,11 +420,6 @@ int32 Menu::processMenu(MenuSettings *menuSettings) {
if (_engine->_input->toggleActionIfActive(TwinEActionType::UILeft) || _engine->_input->toggleActionIfActive(TwinEActionType::UIRight)) {
_engine->_actor->autoAgressive = !_engine->_actor->autoAgressive;
}
- if (_engine->_actor->autoAgressive) {
- menuSettings->setActiveButtonTextId(TextId::kBehaviourAgressiveAuto);
- } else {
- menuSettings->setActiveButtonTextId(TextId::kBehaviourAgressiveManual);
- }
break;
case MenuButtonTypes::kPolygonDetails:
if (_engine->_input->toggleActionIfActive(TwinEActionType::UILeft)) {
@@ -395,13 +429,6 @@ int32 Menu::processMenu(MenuSettings *menuSettings) {
_engine->cfgfile.PolygonDetails++;
_engine->cfgfile.PolygonDetails %= 3;
}
- if (_engine->cfgfile.PolygonDetails == 0) {
- menuSettings->setActiveButtonTextId(TextId::kDetailsPolygonsLow);
- } else if (_engine->cfgfile.PolygonDetails == 1) {
- menuSettings->setActiveButtonTextId(TextId::kDetailsPolygonsMiddle);
- } else {
- menuSettings->setActiveButtonTextId(TextId::kDetailsPolygonsHigh);
- }
break;
case MenuButtonTypes::kShadowSettings:
if (_engine->_input->toggleActionIfActive(TwinEActionType::UILeft)) {
@@ -411,23 +438,11 @@ int32 Menu::processMenu(MenuSettings *menuSettings) {
_engine->cfgfile.ShadowMode++;
_engine->cfgfile.ShadowMode %= 3;
}
- if (_engine->cfgfile.ShadowMode == 0) {
- menuSettings->setActiveButtonTextId(TextId::kShadowsDisabled);
- } else if (_engine->cfgfile.ShadowMode == 1) {
- menuSettings->setActiveButtonTextId(TextId::kShadowsFigures);
- } else {
- menuSettings->setActiveButtonTextId(TextId::kDetailsShadowHigh);
- }
break;
case MenuButtonTypes::kSceneryZoom:
if (_engine->_input->toggleActionIfActive(TwinEActionType::UILeft) || _engine->_input->toggleActionIfActive(TwinEActionType::UIRight)) {
_engine->cfgfile.SceZoom = !_engine->cfgfile.SceZoom;
}
- if (_engine->cfgfile.SceZoom) {
- menuSettings->setActiveButtonTextId(TextId::kScenaryZoomOn);
- } else {
- menuSettings->setActiveButtonTextId(TextId::kNoScenaryZoom);
- }
break;
default:
break;
@@ -692,7 +707,7 @@ int32 Menu::giveupMenu() {
_engine->_sound->resumeSamples();
break;
case TextId::kGiveUp:
- _engine->_sound->stopSamples();
+ _engine->_gameState->giveUp();
return 1;
case TextId::kCreateSaveGame:
_engine->_menuOptions->saveGameMenu();
diff --git a/engines/twine/scene.cpp b/engines/twine/scene.cpp
index a9ae1a4df7..fffd89b7a6 100644
--- a/engines/twine/scene.cpp
+++ b/engines/twine/scene.cpp
@@ -536,4 +536,8 @@ void Scene::processActorZones(int32 actorIdx) {
}
}
+void Scene::stopRunningGame() {
+ currentScene = nullptr;
+}
+
} // namespace TwinE
diff --git a/engines/twine/scene.h b/engines/twine/scene.h
index 930de62bff..0628a5bb86 100644
--- a/engines/twine/scene.h
+++ b/engines/twine/scene.h
@@ -346,6 +346,7 @@ public:
void initSceneVars();
bool isGameRunning() const;
+ void stopRunningGame();
/**
* Process actor zones
Commit: 0872f41cd853d0122ebeb068e66f2b4c8b35b2fc
https://github.com/scummvm/scummvm/commit/0872f41cd853d0122ebeb068e66f2b4c8b35b2fc
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: added todo about the missing credits scene
Changed paths:
engines/twine/menu.cpp
diff --git a/engines/twine/menu.cpp b/engines/twine/menu.cpp
index 1b0c2cc03d..6fcde19efe 100644
--- a/engines/twine/menu.cpp
+++ b/engines/twine/menu.cpp
@@ -651,6 +651,7 @@ bool Menu::init() {
return HQR::getEntry(plasmaEffectPtr, Resources::HQR_RESS_FILE, RESSHQR_PLASMAEFFECT) > 0;
}
+// TODO: if you stay long enough in the main menu without actions, the credits-scene is started
EngineState Menu::run() {
_engine->_text->initTextBank(TextBankId::Options_and_menus);
Commit: 78ff2078ab776471608ee4d1658a27b50a556dc1
https://github.com/scummvm/scummvm/commit/78ff2078ab776471608ee4d1658a27b50a556dc1
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: added ui extra options
Changed paths:
engines/twine/metaengine.cpp
engines/twine/twine.cpp
diff --git a/engines/twine/metaengine.cpp b/engines/twine/metaengine.cpp
index a7bf21fcd6..338954eeaa 100644
--- a/engines/twine/metaengine.cpp
+++ b/engines/twine/metaengine.cpp
@@ -60,8 +60,96 @@ public:
}
Common::Array<Common::Keymap *> initKeymaps(const char *target) const override;
+
+ const ExtraGuiOptions getExtraGuiOptions(const Common::String &target) const override;
+};
+
+static const ExtraGuiOption OptWallCollision = {
+ _s("Enable wall collisions"),
+ _s("Enable the original wall collision damage"),
+ "wallcollision",
+ false
+};
+
+static const ExtraGuiOption OptCrossFade = {
+ _s("Enable cross fade"),
+ _s("Enable cross fading of images and scenes"),
+ "crossfade",
+ false
+};
+
+// this only changes the menu and doesn't change the autosave behaviour - as scummvm is handling this now
+static const ExtraGuiOption OptDisableSaveMenu = {
+ _s("Disable save menu"),
+ _s("The original only had autosaves. This allows you to save whenever you want."),
+ "useautosaving",
+ false
+};
+
+static const ExtraGuiOption OptDebug = {
+ _s("Enable debug mode"),
+ _s("Enable the debug mode"),
+ "debug",
+ false
};
+static const ExtraGuiOption OptUseCD = {
+ _s("Enable audio CD"),
+ _s("Enable the original audio cd track"),
+ "usecd",
+ false
+};
+
+static const ExtraGuiOption OptSound = {
+ _s("Enable sound"),
+ _s("Enable the sound for the game"),
+ "sound",
+ true
+};
+
+static const ExtraGuiOption OptVoices = {
+ _s("Enable voices"),
+ _s("Enable the voices for the game"),
+ "voice",
+ true
+};
+
+static const ExtraGuiOption OptText = {
+ _s("Enable text"),
+ _s("Enable the text for the game"),
+ "displaytext",
+ true
+};
+
+static const ExtraGuiOption OptMovies = {
+ _s("Enable movies"),
+ _s("Enable the cutscenes for the game"),
+ "movie",
+ true
+};
+
+static const ExtraGuiOption OptUSAVersion = {
+ _s("Use the USA version"),
+ _s("Enable the USA specific version flags"),
+ "version",
+ false
+};
+
+const ExtraGuiOptions TwinEMetaEngine::getExtraGuiOptions(const Common::String &target) const {
+ ExtraGuiOptions options;
+ options.push_back(OptWallCollision);
+ options.push_back(OptCrossFade);
+ options.push_back(OptDisableSaveMenu);
+ options.push_back(OptDebug);
+ options.push_back(OptUseCD);
+ options.push_back(OptSound);
+ options.push_back(OptMovies);
+ options.push_back(OptUSAVersion);
+ options.push_back(OptVoices);
+ options.push_back(OptText);
+ return options;
+}
+
Common::KeymapArray TwinEMetaEngine::initKeymaps(const char *target) const {
using namespace Common;
Action *act;
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index a71cf75ec4..5c50352d59 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -305,9 +305,9 @@ void TwinEEngine::initConfigurations() {
const char *lng = Common::getLanguageDescription(_gameLang);
cfgfile.LanguageId = getLanguageTypeIndex(lng);
- cfgfile.Voice = ConfGetOrDefault("Voice", "ON") == "ON";
- cfgfile.FlagDisplayText = ConfGetOrDefault("FlagDisplayText", "ON") == "ON";
- const Common::String midiType = ConfGetOrDefault("MidiType", "auto");
+ cfgfile.Voice = ConfGetIntOrDefault("voice", 1) == 1;
+ cfgfile.FlagDisplayText = ConfGetIntOrDefault("displaytext", 1) == 1;
+ const Common::String midiType = ConfGetOrDefault("miditype", "auto");
if (midiType == "None") {
cfgfile.MidiType = MIDIFILE_NONE;
} else {
@@ -323,21 +323,21 @@ void TwinEEngine::initConfigurations() {
debug("Could not find midi hqr file");
}
}
- cfgfile.Version = ConfGetIntOrDefault("Version", EUROPE_VERSION);
- cfgfile.UseCD = ConfGetIntOrDefault("UseCD", 0);
- cfgfile.Sound = ConfGetIntOrDefault("Sound", 1);
- cfgfile.Movie = ConfGetIntOrDefault("Movie", CONF_MOVIE_FLA);
- cfgfile.Fps = ConfGetIntOrDefault("Fps", DEFAULT_FRAMES_PER_SECOND);
- cfgfile.Debug = ConfGetIntOrDefault("Debug", 0) == 1;
-
- cfgfile.UseAutoSaving = ConfGetIntOrDefault("UseAutoSaving", 0);
- cfgfile.CrossFade = ConfGetIntOrDefault("CrossFade", 0);
- cfgfile.WallCollision = ConfGetIntOrDefault("WallCollision", 0);
-
- _actor->autoAgressive = ConfGetIntOrDefault("CombatAuto", 1) == 1;
- cfgfile.ShadowMode = ConfGetIntOrDefault("Shadow", 2);
- cfgfile.SceZoom = ConfGetIntOrDefault("SceZoom", 0) == 0;
- cfgfile.PolygonDetails = ConfGetIntOrDefault("PolygonDetails", 2);
+ cfgfile.Version = ConfGetIntOrDefault("version", EUROPE_VERSION);
+ cfgfile.UseCD = ConfGetIntOrDefault("usecd", 0) == 1;
+ cfgfile.Sound = ConfGetIntOrDefault("sound", 1) == 1;
+ cfgfile.Movie = ConfGetIntOrDefault("movie", CONF_MOVIE_FLA);
+ cfgfile.Fps = ConfGetIntOrDefault("fps", DEFAULT_FRAMES_PER_SECOND);
+ cfgfile.Debug = ConfGetIntOrDefault("debug", 0) == 1;
+
+ cfgfile.UseAutoSaving = ConfGetIntOrDefault("useautosaving", 0);
+ cfgfile.CrossFade = ConfGetIntOrDefault("crossfade", 0);
+ cfgfile.WallCollision = ConfGetIntOrDefault("wallcollision", 0);
+
+ _actor->autoAgressive = ConfGetIntOrDefault("combatauto", 1) == 1;
+ cfgfile.ShadowMode = ConfGetIntOrDefault("shadow", 2);
+ cfgfile.SceZoom = ConfGetIntOrDefault("scezoom", 0) == 0;
+ cfgfile.PolygonDetails = ConfGetIntOrDefault("polygondetails", 2);
}
void TwinEEngine::initEngine() {
Commit: e729e2eaea3a7c4a8747230da35686cfc321a861
https://github.com/scummvm/scummvm/commit/e729e2eaea3a7c4a8747230da35686cfc321a861
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: removing scaling code - use scummvm scaling
Changed paths:
engines/twine/flamovies.cpp
engines/twine/interface.cpp
engines/twine/menu.cpp
engines/twine/screens.cpp
engines/twine/screens.h
engines/twine/script_life_v1.cpp
engines/twine/twine.h
diff --git a/engines/twine/flamovies.cpp b/engines/twine/flamovies.cpp
index d783d79d32..d8e62122fc 100644
--- a/engines/twine/flamovies.cpp
+++ b/engines/twine/flamovies.cpp
@@ -137,7 +137,7 @@ void FlaMovies::scaleFla2x() {
uint8 *dest = (uint8 *)_engine->workVideoBuffer.getPixels();
if (_engine->cfgfile.Movie == CONF_MOVIE_FLAWIDE) {
- for (i = 0; i < SCREEN_WIDTH / SCALE * 40; i++) {
+ for (i = 0; i < SCREEN_WIDTH * 40; i++) {
*(dest++) = 0x00;
}
}
@@ -148,22 +148,22 @@ void FlaMovies::scaleFla2x() {
*(dest++) = *(source++);
}
if (_engine->cfgfile.Movie == CONF_MOVIE_FLAWIDE) { // include wide bars
- memcpy(dest, dest - SCREEN_WIDTH / SCALE, FLASCREEN_WIDTH * 2);
+ memcpy(dest, dest - SCREEN_WIDTH, FLASCREEN_WIDTH * 2);
dest += FLASCREEN_WIDTH * 2;
} else { // stretch the movie like original game.
if (i % (2)) {
- memcpy(dest, dest - SCREEN_WIDTH / SCALE, FLASCREEN_WIDTH * 2);
+ memcpy(dest, dest - SCREEN_WIDTH, FLASCREEN_WIDTH * 2);
dest += FLASCREEN_WIDTH * 2;
}
if (i % 10) {
- memcpy(dest, dest - SCREEN_WIDTH / SCALE, FLASCREEN_WIDTH * 2);
+ memcpy(dest, dest - SCREEN_WIDTH, FLASCREEN_WIDTH * 2);
dest += FLASCREEN_WIDTH * 2;
}
}
}
if (_engine->cfgfile.Movie == CONF_MOVIE_FLAWIDE) {
- for (i = 0; i < SCREEN_WIDTH / SCALE * 40; i++) {
+ for (i = 0; i < SCREEN_WIDTH * 40; i++) {
*(dest++) = 0x00;
}
}
diff --git a/engines/twine/interface.cpp b/engines/twine/interface.cpp
index 70f79f7bd1..acd502abfa 100644
--- a/engines/twine/interface.cpp
+++ b/engines/twine/interface.cpp
@@ -104,7 +104,7 @@ void Interface::drawLine(int32 startWidth, int32 startHeight, int32 endWidth, in
}
}
- int32 flag2 = DEFAULT_SCREEN_WIDTH;
+ int32 flag2 = SCREEN_WIDTH;
endWidth -= startWidth;
endHeight -= startHeight;
if (endHeight < 0) {
@@ -206,7 +206,7 @@ void Interface::drawTransparentBox(int32 left, int32 top, int32 right, int32 bot
const int32 height = bottom - top;
int32 height2 = height + 1;
const int32 width = right - left + 1;
- const int32 pitch = DEFAULT_SCREEN_WIDTH - width;
+ const int32 pitch = SCREEN_WIDTH - width;
const int32 localMode = colorAdj;
do {
diff --git a/engines/twine/menu.cpp b/engines/twine/menu.cpp
index 6fcde19efe..6008abd6c5 100644
--- a/engines/twine/menu.cpp
+++ b/engines/twine/menu.cpp
@@ -227,11 +227,11 @@ void Menu::processPlasmaEffect(int32 left, int32 top, int32 color) {
for (int32 x = 0; x < PLASMA_WIDTH; x++) {
const uint8 c = MIN(in[y * PLASMA_WIDTH + x] / 2 + color, max_value);
/* 2x2 squares sharing the same pixel color: */
- const int32 target = 2 * (y * DEFAULT_SCREEN_WIDTH + x);
+ const int32 target = 2 * (y * SCREEN_WIDTH + x);
out[target + 0] = c;
out[target + 1] = c;
- out[target + DEFAULT_SCREEN_WIDTH + 0] = c;
- out[target + DEFAULT_SCREEN_WIDTH + 1] = c;
+ out[target + SCREEN_WIDTH + 0] = c;
+ out[target + SCREEN_WIDTH + 1] = c;
}
}
}
diff --git a/engines/twine/screens.cpp b/engines/twine/screens.cpp
index 38615caa07..4f7291e1d5 100644
--- a/engines/twine/screens.cpp
+++ b/engines/twine/screens.cpp
@@ -252,23 +252,8 @@ void Screens::fadeRedPal(const uint32 *pal) {
}
}
-void Screens::copyScreen(const uint8 *source, uint8 *destination) {
- if (SCALE == 1) {
- memcpy(destination, source, SCREEN_WIDTH * SCREEN_HEIGHT);
- } else if (SCALE == 2) {
- for (int32 h = 0; h < SCREEN_HEIGHT / SCALE; h++) {
- for (int32 w = 0; w < SCREEN_WIDTH / SCALE; w++) {
- *destination++ = *source;
- *destination++ = *source++;
- }
- memcpy(destination, destination - SCREEN_WIDTH, SCREEN_WIDTH);
- destination += SCREEN_WIDTH;
- }
- }
-}
-
void Screens::copyScreen(const Graphics::ManagedSurface& source, Graphics::ManagedSurface &destination) {
- copyScreen((const uint8 *)source.getPixels(), (uint8 *)destination.getPixels());
+ destination.blitFrom(source);
}
void Screens::clearScreen() {
diff --git a/engines/twine/screens.h b/engines/twine/screens.h
index fd5a7eb838..3a3e0e4650 100644
--- a/engines/twine/screens.h
+++ b/engines/twine/screens.h
@@ -167,7 +167,6 @@ public:
* @param source screen buffer
* @param destination screen buffer
*/
- void copyScreen(const uint8 *source, uint8 *destination);
void copyScreen(const Graphics::ManagedSurface &source, Graphics::ManagedSurface &destination);
/** Clear front buffer screen */
diff --git a/engines/twine/script_life_v1.cpp b/engines/twine/script_life_v1.cpp
index 7900b3cf9f..ff8f789574 100644
--- a/engines/twine/script_life_v1.cpp
+++ b/engines/twine/script_life_v1.cpp
@@ -1460,8 +1460,8 @@ static int32 lTEXT(TwinEEngine *engine, LifeScriptContext &ctx) {
int32 textBoxRight = textSize;
engine->_text->setFontColor(15);
engine->_text->drawText(0, drawVar1, textStr);
- if (textSize > DEFAULT_SCREEN_WIDTH - 1) {
- textBoxRight = DEFAULT_SCREEN_WIDTH - 1;
+ if (textSize > SCREEN_WIDTH - 1) {
+ textBoxRight = SCREEN_WIDTH - 1;
}
drawVar1 += 40;
diff --git a/engines/twine/twine.h b/engines/twine/twine.h
index fc6cccc78f..24799e1585 100644
--- a/engines/twine/twine.h
+++ b/engines/twine/twine.h
@@ -45,15 +45,9 @@ namespace TwinE {
#define MODIFICATION_VERSION 2
/** Original screen width */
-#define DEFAULT_SCREEN_WIDTH 640
+#define SCREEN_WIDTH 640
/** Original screen height */
-#define DEFAULT_SCREEN_HEIGHT 480
-/** Scale screen to double size */
-#define SCALE 1 // TODO: remove me or support me
-/** Original screen width */
-#define SCREEN_WIDTH DEFAULT_SCREEN_WIDTH *SCALE
-/** Original screen height */
-#define SCREEN_HEIGHT DEFAULT_SCREEN_HEIGHT *SCALE
+#define SCREEN_HEIGHT 480
/** Default frames per second */
#define DEFAULT_FRAMES_PER_SECOND 19
Commit: fcdab2caf36515609f1c9ee97fc52b62f2eb4a40
https://github.com/scummvm/scummvm/commit/fcdab2caf36515609f1c9ee97fc52b62f2eb4a40
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: reduced scope
Changed paths:
engines/twine/flamovies.cpp
diff --git a/engines/twine/flamovies.cpp b/engines/twine/flamovies.cpp
index d8e62122fc..68d7648f0e 100644
--- a/engines/twine/flamovies.cpp
+++ b/engines/twine/flamovies.cpp
@@ -132,18 +132,17 @@ void FlaMovies::drawDeltaFrame(Common::MemoryReadStream &stream, int32 width) {
}
void FlaMovies::scaleFla2x() {
- int32 i, j;
uint8 *source = (uint8 *)flaBuffer;
uint8 *dest = (uint8 *)_engine->workVideoBuffer.getPixels();
if (_engine->cfgfile.Movie == CONF_MOVIE_FLAWIDE) {
- for (i = 0; i < SCREEN_WIDTH * 40; i++) {
+ for (uint32 i = 0; i < SCREEN_WIDTH * 40; i++) {
*(dest++) = 0x00;
}
}
- for (i = 0; i < FLASCREEN_HEIGHT; i++) {
- for (j = 0; j < FLASCREEN_WIDTH; j++) {
+ for (int32 i = 0; i < FLASCREEN_HEIGHT; i++) {
+ for (int32 j = 0; j < FLASCREEN_WIDTH; j++) {
*(dest++) = *(source);
*(dest++) = *(source++);
}
@@ -151,7 +150,7 @@ void FlaMovies::scaleFla2x() {
memcpy(dest, dest - SCREEN_WIDTH, FLASCREEN_WIDTH * 2);
dest += FLASCREEN_WIDTH * 2;
} else { // stretch the movie like original game.
- if (i % (2)) {
+ if (i % 2) {
memcpy(dest, dest - SCREEN_WIDTH, FLASCREEN_WIDTH * 2);
dest += FLASCREEN_WIDTH * 2;
}
@@ -163,7 +162,7 @@ void FlaMovies::scaleFla2x() {
}
if (_engine->cfgfile.Movie == CONF_MOVIE_FLAWIDE) {
- for (i = 0; i < SCREEN_WIDTH * 40; i++) {
+ for (int32 i = 0; i < SCREEN_WIDTH * 40; i++) {
*(dest++) = 0x00;
}
}
@@ -172,7 +171,6 @@ void FlaMovies::scaleFla2x() {
void FlaMovies::processFrame() {
FLASampleStruct sample;
uint32 opcodeBlockSize;
- uint8 opcode;
int32 aux = 0;
file.read(&frameData.videoSize, 1);
@@ -192,7 +190,7 @@ void FlaMovies::processFrame() {
Common::MemoryReadStream stream(outBuf, frameData.frameVar0);
do {
- opcode = stream.readByte();
+ uint8 opcode = stream.readByte();
stream.skip(1);
opcodeBlockSize = stream.readUint16LE();
const int32 pos = stream.pos();
Commit: f68c86eeb308fd16f35ae56983bc7d6cc14c27d2
https://github.com/scummvm/scummvm/commit/f68c86eeb308fd16f35ae56983bc7d6cc14c27d2
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: enable debug mode if any of the debug features is toggled
Changed paths:
engines/twine/console.cpp
engines/twine/debug_grid.cpp
diff --git a/engines/twine/console.cpp b/engines/twine/console.cpp
index 5275032e30..6f738929b2 100644
--- a/engines/twine/console.cpp
+++ b/engines/twine/console.cpp
@@ -44,18 +44,33 @@ TwinEConsole::TwinEConsole(TwinEEngine *engine) : _engine(engine), GUI::Debugger
TwinEConsole::~TwinEConsole() {
}
+#define TOGGLE_DEBUG(var, description) \
+ if ((var)) { \
+ debug("Disabling " description); \
+ (var) = false; \
+ } else { \
+ debug("Enabling " description); \
+ (var) = true; \
+ } \
+ if ((var) && !_engine->cfgfile.Debug) { \
+ doToggleDebug(0, nullptr); \
+ }
+
bool TwinEConsole::doToggleZoneRendering(int argc, const char **argv) {
- _engine->_debugScene->showingZones = !_engine->_debugScene->showingZones;
+ TOGGLE_DEBUG(_engine->_debugScene->showingZones, "zone rendering")
+ if (argc == 1) {
+ // TODO: support typeZones
+ }
return true;
}
bool TwinEConsole::doToggleFreeCamera(int argc, const char **argv) {
- _engine->_debugGrid->useFreeCamera = !_engine->_debugGrid->useFreeCamera;
+ TOGGLE_DEBUG(_engine->_debugGrid->useFreeCamera, "free camera movement")
return true;
}
bool TwinEConsole::doToggleSceneChanges(int argc, const char **argv) {
- _engine->_debugGrid->canChangeScenes = !_engine->_debugGrid->canChangeScenes;
+ TOGGLE_DEBUG(_engine->_debugGrid->canChangeScenes, "scene switching via keybinding")
return true;
}
diff --git a/engines/twine/debug_grid.cpp b/engines/twine/debug_grid.cpp
index 86b7220032..17bcb900d2 100644
--- a/engines/twine/debug_grid.cpp
+++ b/engines/twine/debug_grid.cpp
@@ -38,26 +38,20 @@ void DebugGrid::changeGridCamera() {
if (!useFreeCamera) {
return;
}
- // Press up - more X positions
- if (_engine->_input->toggleActionIfActive(TwinEActionType::DebugGridCameraPressUp)) {
+
+ ScopedKeyMap scopedKeyMap(_engine, mainKeyMapId);
+
+ if (_engine->_input->isActionActive(TwinEActionType::DebugGridCameraPressUp)) {
_engine->_grid->newCameraZ--;
_engine->_redraw->reqBgRedraw = true;
- }
-
- // Press down - less X positions
- else if (_engine->_input->toggleActionIfActive(TwinEActionType::DebugGridCameraPressDown)) {
+ } else if (_engine->_input->isActionActive(TwinEActionType::DebugGridCameraPressDown)) {
_engine->_grid->newCameraZ++;
_engine->_redraw->reqBgRedraw = true;
}
-
- // Press left - less Z positions
- else if (_engine->_input->toggleActionIfActive(TwinEActionType::DebugGridCameraPressLeft)) {
+ if (_engine->_input->isActionActive(TwinEActionType::DebugGridCameraPressLeft)) {
_engine->_grid->newCameraX--;
_engine->_redraw->reqBgRedraw = true;
- }
-
- // Press right - more Z positions
- else if (_engine->_input->toggleActionIfActive(TwinEActionType::DebugGridCameraPressRight)) {
+ } else if (_engine->_input->isActionActive(TwinEActionType::DebugGridCameraPressRight)) {
_engine->_grid->newCameraX++;
_engine->_redraw->reqBgRedraw = true;
}
@@ -67,7 +61,6 @@ void DebugGrid::changeGrid() {
if (!canChangeScenes) {
return;
}
- // Press up - more X positions
if (_engine->_input->toggleActionIfActive(TwinEActionType::NextRoom)) {
_engine->_scene->currentSceneIdx++;
if (_engine->_scene->currentSceneIdx >= LBA1SceneId::SceneIdMax) {
@@ -77,7 +70,6 @@ void DebugGrid::changeGrid() {
_engine->_redraw->reqBgRedraw = true;
}
- // Press down - less X positions
if (_engine->_input->toggleActionIfActive(TwinEActionType::PreviousRoom)) {
_engine->_scene->currentSceneIdx--;
if (_engine->_scene->currentSceneIdx < LBA1SceneId::Citadel_Island_Prison) {
Commit: ab22f50b85ab184f79eb7dd7ac0543fef7aa60bc
https://github.com/scummvm/scummvm/commit/ab22f50b85ab184f79eb7dd7ac0543fef7aa60bc
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: fixed activating the desired keymap
Changed paths:
engines/twine/input.cpp
diff --git a/engines/twine/input.cpp b/engines/twine/input.cpp
index 2374c58805..50fe2569ca 100644
--- a/engines/twine/input.cpp
+++ b/engines/twine/input.cpp
@@ -55,7 +55,7 @@ static const struct KeyProperties {
ScopedKeyMap::ScopedKeyMap(TwinEEngine* engine, const char *id) : _engine(engine) {
_prevKeyMap = _engine->_input->currentKeyMap();
- _engine->_input->enableKeyMap(cutsceneKeyMapId);
+ _engine->_input->enableKeyMap(id);
}
ScopedKeyMap::~ScopedKeyMap() {
Commit: d6d089a68e27f6abd4fa6ca5a7f3a25886a2ce54
https://github.com/scummvm/scummvm/commit/d6d089a68e27f6abd4fa6ca5a7f3a25886a2ce54
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: fixed missing boolean conversions
Changed paths:
engines/twine/twine.cpp
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index 5c50352d59..3c0f840bfa 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -851,14 +851,14 @@ int32 TwinEEngine::runGameEngine() { // mainLoopInteration
_redraw->redrawEngineActions(_redraw->reqBgRedraw);
// workaround to fix hero redraw after drowning
- if (_actor->cropBottomScreen && _redraw->reqBgRedraw == 1) {
+ if (_actor->cropBottomScreen && _redraw->reqBgRedraw) {
_scene->sceneHero->staticFlags.bIsHidden = 1;
_redraw->redrawEngineActions(1);
_scene->sceneHero->staticFlags.bIsHidden = 0;
}
_scene->needChangeScene = -1;
- _redraw->reqBgRedraw = 0;
+ _redraw->reqBgRedraw = false;
return 0;
}
Commit: 30cb2fb3cf62f954e79d36b65674ff2aaad7d566
https://github.com/scummvm/scummvm/commit/30cb2fb3cf62f954e79d36b65674ff2aaad7d566
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2020-11-13T17:45:04+01:00
Commit Message:
TWINE: fixed kAggressive mode
broken in 955d2e71cfa648a83854b0f0c3eefc77724aa24c
Changed paths:
engines/twine/movements.cpp
diff --git a/engines/twine/movements.cpp b/engines/twine/movements.cpp
index 2ddfb1ea8f..a935d1d097 100644
--- a/engines/twine/movements.cpp
+++ b/engines/twine/movements.cpp
@@ -253,7 +253,7 @@ void Movements::processManualAction(int actorIdx) {
heroMoved = true;
actor->angle = getRealAngle(&actor->move);
// TODO: previousLoopActionKey must be handled properly
- if (!previousLoopActionKey || actor->anim == kAnimNone) {
+ if (!previousLoopActionKey || actor->anim == kStanding) {
const int32 aggresiveMode = _engine->getRandomNumber(3);
switch (aggresiveMode) {
More information about the Scummvm-git-logs
mailing list