[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