[Scummvm-git-logs] scummvm master -> ab6b761973a73f2d1ccd6d41f22b9df14a06b7eb

mgerhardy noreply at scummvm.org
Sat Oct 12 19:41:10 UTC 2024


This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
6d4af03f82 TWINE: renamed methods to match the original sources
a85299312c TWINE: removed ScopedEngineFreeze and updated lPLAY_FLA
f0f5c5c3bb TWINE: renamed functions and members to match original sources
db2005c13b TWINE: fixed invalid timer handling for playing fla movies from move script
ab6b761973 TWINE: fixed missing save-/restoreTimer calls for the holomap


Commit: 6d4af03f823bf9993b8d445dfb816deb5886f3c2
    https://github.com/scummvm/scummvm/commit/6d4af03f823bf9993b8d445dfb816deb5886f3c2
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-12T21:40:54+02:00

Commit Message:
TWINE: renamed methods to match the original sources

Changed paths:
    engines/twine/renderer/redraw.cpp
    engines/twine/twine.cpp
    engines/twine/twine.h


diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp
index 57722e7535f..81378dac985 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -879,7 +879,7 @@ void Redraw::redrawEngineActions(bool bgRedraw) { // AffScene
 	_engine->_interface->unsetClip();
 
 	if (bgRedraw) {
-		_engine->freezeTime(false);
+		_engine->saveTimer(false);
 		if (_engine->_scene->_newCube != SCENE_CEILING_GRID_FADE_1 && _engine->_scene->_newCube != SCENE_CEILING_GRID_FADE_2) {
 			_engine->_screens->fadeToBlack(_engine->_screens->_ptrPal);
 		}
@@ -923,7 +923,7 @@ void Redraw::redrawEngineActions(bool bgRedraw) { // AffScene
 
 	if (bgRedraw) {
 		moveNextAreas();
-		_engine->unfreezeTime();
+		_engine->restoreTimer();
 	} else {
 		flipRedrawAreas();
 	}
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index b808c77ea09..84e67930a02 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -80,11 +80,11 @@
 namespace TwinE {
 
 ScopedEngineFreeze::ScopedEngineFreeze(TwinEEngine *engine, bool pause) : _engine(engine) {
-	_engine->freezeTime(pause);
+	_engine->saveTimer(pause);
 }
 
 ScopedEngineFreeze::~ScopedEngineFreeze() {
-	_engine->unfreezeTime();
+	_engine->restoreTimer();
 }
 
 ScopedCursor::ScopedCursor(TwinEEngine *engine) : _engine(engine) {
@@ -707,7 +707,7 @@ int TwinEEngine::getRandomNumber(uint max) {
 	return _rnd.getRandomNumber(max - 1);
 }
 
-void TwinEEngine::freezeTime(bool pause) {
+void TwinEEngine::saveTimer(bool pause) {
 	if (_isTimeFreezed == 0) {
 		_saveFreezedTime = timerRef;
 		debugC(3, kDebugLevels::kDebugTimers, "freezeTime: timer %i", timerRef);
@@ -718,7 +718,7 @@ void TwinEEngine::freezeTime(bool pause) {
 	debugC(3, kDebugLevels::kDebugTimers, "freezeTime: %i", _isTimeFreezed);
 }
 
-void TwinEEngine::unfreezeTime() {
+void TwinEEngine::restoreTimer() {
 	--_isTimeFreezed;
 	debugC(3, kDebugLevels::kDebugTimers, "unfreezeTime: %i", _isTimeFreezed);
 	if (_isTimeFreezed == 0) {
@@ -769,7 +769,7 @@ void TwinEEngine::processBonusList() {
 }
 
 void TwinEEngine::processInventoryAction() {
-	freezeTime(false);
+	saveTimer(false);
 	testRestoreModeSVGA(true) ;
 	_menu->inventory();
 
@@ -843,9 +843,9 @@ void TwinEEngine::processInventoryAction() {
 		break;
 	}
 	case kiBonusList: {
-		unfreezeTime();
+		restoreTimer();
 		_redraw->redrawEngineActions(true);
-		freezeTime(false);
+		saveTimer(false);
 		processBonusList();
 		break;
 	}
@@ -861,7 +861,7 @@ void TwinEEngine::processInventoryAction() {
 		break;
 	}
 
-	unfreezeTime();
+	restoreTimer();
 	_redraw->redrawEngineActions(true);
 }
 
@@ -977,10 +977,10 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 			} else if (_input->isActionActive(TwinEActionType::QuickBehaviourDiscreet, false)) {
 				_actor->_heroBehaviour = HeroBehaviourType::kDiscrete;
 			}
-			freezeTime(false);
+			saveTimer(false);
 			testRestoreModeSVGA(true);
 			_menu->processBehaviourMenu(behaviourMenu);
-			unfreezeTime();
+			restoreTimer();
 			_redraw->redrawEngineActions(true);
 		}
 
@@ -1008,18 +1008,18 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 		// Draw holomap
 		if (_input->toggleActionIfActive(TwinEActionType::OpenHolomap) && _gameState->hasItem(InventoryItems::kiHolomap) && !_gameState->inventoryDisabled()) {
 			testRestoreModeSVGA(true);
-			freezeTime(false);
+			saveTimer(false);
 			_holomap->holoMap();
 			// unfreeze here - the redrawEngineActions is also doing a freeze
 			// see https://bugs.scummvm.org/ticket/14808
-			unfreezeTime();
+			restoreTimer();
 			_screens->_flagFade = true;
 			_redraw->redrawEngineActions(true);
 		}
 
 		// Process Pause
 		if (_input->toggleActionIfActive(TwinEActionType::Pause)) {
-			freezeTime(true);
+			saveTimer(true);
 			const char *PauseString = "Pause";
 			_text->setFontColor(COLOR_WHITE);
 			if (_redraw->_flagMCGA) {
@@ -1037,7 +1037,7 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 					break;
 				}
 			} while (!_input->toggleActionIfActive(TwinEActionType::Pause));
-			unfreezeTime();
+			restoreTimer();
 			_redraw->redrawEngineActions(true);
 		}
 
diff --git a/engines/twine/twine.h b/engines/twine/twine.h
index 073b28267e7..585cf23c645 100644
--- a/engines/twine/twine.h
+++ b/engines/twine/twine.h
@@ -369,8 +369,8 @@ public:
 	void restoreFrontBuffer();
 	void saveFrontBuffer();
 
-	void freezeTime(bool pause);
-	void unfreezeTime();
+	void saveTimer(bool pause);
+	void restoreTimer();
 
 	/**
 	 * Game engine main loop


Commit: a85299312ce887918e50cd1e3a68da1be6e7f9d7
    https://github.com/scummvm/scummvm/commit/a85299312ce887918e50cd1e3a68da1be6e7f9d7
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-12T21:40:54+02:00

Commit Message:
TWINE: removed ScopedEngineFreeze and updated lPLAY_FLA

by using saveTimer and restoreTimer directly again its easier to validate against the original sources

Changed paths:
    engines/twine/holomap_v1.cpp
    engines/twine/movies.cpp
    engines/twine/scene/gamestate.cpp
    engines/twine/scene/scene.cpp
    engines/twine/script/script_life.cpp
    engines/twine/script/script_life_v2.cpp
    engines/twine/twine.cpp
    engines/twine/twine.h


diff --git a/engines/twine/holomap_v1.cpp b/engines/twine/holomap_v1.cpp
index db4b5b1ed0f..d57b9107ba8 100644
--- a/engines/twine/holomap_v1.cpp
+++ b/engines/twine/holomap_v1.cpp
@@ -352,7 +352,7 @@ void HolomapV1::holoTraj(int32 trajectoryIndex) {
 
 	initHoloDatas();
 
-	ScopedEngineFreeze timeFreeze(_engine);
+	_engine->saveTimer(false);
 	const int32 cameraPosX = _engine->width() / 2 + 80;
 	const int32 cameraPosY = _engine->height() / 2;
 	_engine->_renderer->setProjection(cameraPosX, cameraPosY, 128, 1024, 1024);
@@ -439,6 +439,7 @@ void HolomapV1::holoTraj(int32 trajectoryIndex) {
 
 	_engine->_text->initSceneTextBank();
 	_engine->_input->enableKeyMap(mainKeyMapId);
+	_engine->restoreTimer();
 
 	free(holomapImagePtr);
 }
diff --git a/engines/twine/movies.cpp b/engines/twine/movies.cpp
index 7e703b4c365..6ed5b61577c 100644
--- a/engines/twine/movies.cpp
+++ b/engines/twine/movies.cpp
@@ -372,7 +372,6 @@ bool Movies::playMovie(const char *name) { // PlayAnimFla
 		const int index = _engine->_resources->findSmkMovieIndex(name);
 		return playSmkMovie(name, index);
 	}
-	_engine->_sound->stopSamples();
 
 	Common::String fileNamePath = name;
 	const size_t n = fileNamePath.findLastOf(".");
@@ -459,6 +458,8 @@ bool Movies::playMovie(const char *name) { // PlayAnimFla
 	_engine->_screens->fadeToBlack(_paletteOrg);
 
 	_engine->_sound->stopSamples();
+	_engine->_screens->setBlackPal();
+	_engine->_screens->clearScreen();
 	return finished;
 }
 
diff --git a/engines/twine/scene/gamestate.cpp b/engines/twine/scene/gamestate.cpp
index e1ef8d0ecd8..545733c6db9 100644
--- a/engines/twine/scene/gamestate.cpp
+++ b/engines/twine/scene/gamestate.cpp
@@ -329,7 +329,6 @@ void GameState::setGameFlag(uint8 index, int16 value) {
 }
 
 void GameState::doFoundObj(InventoryItems item) {
-	ScopedEngineFreeze freeze(_engine);
 	_engine->_grid->centerOnActor(_engine->_scene->_sceneHero);
 
 	// Hide hero in scene
diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp
index 809553ee973..50f199fa506 100644
--- a/engines/twine/scene/scene.cpp
+++ b/engines/twine/scene/scene.cpp
@@ -807,8 +807,9 @@ void Scene::checkZoneSce(int32 actorIdx) {
 
 						_engine->_grid->_useCellingGrid = zone->num;
 						_engine->_grid->_cellingGridIdx = z;
-						ScopedEngineFreeze freeze(_engine);
+						_engine->saveTimer(false);
 						_engine->_grid->initCellingGrid(_engine->_grid->_useCellingGrid);
+						_engine->restoreTimer();
 					}
 				}
 				break;
@@ -820,11 +821,12 @@ void Scene::checkZoneSce(int32 actorIdx) {
 				break;
 			case ZoneType::kText:
 				if (IS_HERO(actorIdx) && _engine->_movements->shouldExecuteAction()) {
-					ScopedEngineFreeze scopedFreeze(_engine);
+					_engine->saveTimer(false);
 					_engine->testRestoreModeSVGA(true);
 					_engine->_text->setFontCrossColor(zone->infoData.DisplayText.textColor);
 					_talkingActor = actorIdx;
 					_engine->_text->drawTextProgressive((TextId)zone->num);
+					_engine->restoreTimer();
 					_engine->_redraw->redrawEngineActions(true);
 				}
 				break;
diff --git a/engines/twine/script/script_life.cpp b/engines/twine/script/script_life.cpp
index 4023daa365f..9c27f8bd884 100644
--- a/engines/twine/script/script_life.cpp
+++ b/engines/twine/script/script_life.cpp
@@ -21,24 +21,24 @@
 
 #include "twine/script/script_life.h"
 #include "common/memstream.h"
-#include "twine/debugger/debug_state.h"
-#include "twine/scene/actor.h"
-#include "twine/scene/animations.h"
 #include "twine/audio/music.h"
 #include "twine/audio/sound.h"
-#include "twine/scene/collision.h"
-#include "twine/movies.h"
-#include "twine/scene/gamestate.h"
-#include "twine/scene/grid.h"
+#include "twine/debugger/debug_state.h"
 #include "twine/holomap.h"
 #include "twine/input.h"
 #include "twine/menu/interface.h"
-#include "twine/scene/movements.h"
+#include "twine/movies.h"
 #include "twine/renderer/redraw.h"
 #include "twine/renderer/renderer.h"
 #include "twine/renderer/screens.h"
 #include "twine/resources/resources.h"
+#include "twine/scene/actor.h"
+#include "twine/scene/animations.h"
+#include "twine/scene/collision.h"
 #include "twine/scene/extra.h"
+#include "twine/scene/gamestate.h"
+#include "twine/scene/grid.h"
+#include "twine/scene/movements.h"
 #include "twine/scene/scene.h"
 #include "twine/shared.h"
 #include "twine/text.h"
@@ -93,16 +93,16 @@ enum LifeScriptConditions {
 	kcBETA = 33,
 	kcBETA_OBJ = 34,
 	kcCARRY_OBJ_BY = 35,
-	kcANGLE = 36,            /*<! meansure the angle between two actors */
+	kcANGLE = 36, /*<! meansure the angle between two actors */
 	kcDISTANCE_MESSAGE = 37,
 	kcHIT_OBJ_BY = 38,
-	kcREAL_ANGLE = 39,       /*<! meansure the angle between two actors */
+	kcREAL_ANGLE = 39, /*<! meansure the angle between two actors */
 	kcDEMO = 40,
 	kcCOL_DECORS = 41,
 	kcCOL_DECORS_OBJ = 42,
 	kcPROCESSOR = 43,
 	kcOBJECT_DISPLAYED = 44,
-	kcANGLE_OBJ = 45         /*<! meansure the angle between two actors */
+	kcANGLE_OBJ = 45 /*<! meansure the angle between two actors */
 };
 
 enum class ReturnType {
@@ -290,7 +290,7 @@ static ReturnType processLifeConditions(TwinEEngine *engine, LifeScriptContext &
 		int32 flagIdx = ctx.stream.readByte();
 		debugCN(3, kDebugLevels::kDebugScriptsLife, "flag_game(%i", flagIdx);
 		if (!engine->_gameState->inventoryDisabled() ||
-		    (engine->_gameState->inventoryDisabled() && flagIdx >= MaxInventoryItems)) {
+			(engine->_gameState->inventoryDisabled() && flagIdx >= MaxInventoryItems)) {
 			engine->_scene->_currentScriptValue = engine->_gameState->hasGameFlag(flagIdx);
 		} else {
 			if (flagIdx == GAMEFLAG_INVENTORY_DISABLED) {
@@ -538,11 +538,11 @@ static ReturnType processLifeConditions(TwinEEngine *engine, LifeScriptContext &
 
 		if (ABS(otherActor->posObj().y - ctx.actor->posObj().y) < 1500) {
 			int32 angle = engine->_movements->getAngle(ctx.actor->posObj(),
-																				otherActor->posObj());
+													   otherActor->posObj());
 			angle = ClampAngle(ctx.actor->_beta - angle + LBAAngles::ANGLE_90);
 
 			// 320: CONE_VIEW
-			if (angle <= LBAAngles::ANGLE_157_5)  {
+			if (angle <= LBAAngles::ANGLE_157_5) {
 				int32 distance = getDistance2D(ctx.actor->posObj(),
 											   otherActor->posObj());
 
@@ -646,7 +646,6 @@ static int32 processLifeOperators(TwinEEngine *engine, LifeScriptContext &ctx, R
 	return 0;
 }
 
-
 /** Life script command definitions */
 
 /**
@@ -916,7 +915,7 @@ int32 ScriptLife::lMESSAGE(TwinEEngine *engine, LifeScriptContext &ctx) {
 	const TextId textIdx = (TextId)ctx.stream.readSint16LE();
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::MESSAGE(%i)", (int)textIdx);
 
-	ScopedEngineFreeze scopedFreeze(engine);
+	engine->saveTimer(false);
 	engine->testRestoreModeSVGA(true);
 	if (engine->_text->_showDialogueBubble) {
 		engine->_redraw->drawBubble(ctx.actorIdx);
@@ -937,7 +936,7 @@ int32 ScriptLife::lMESSAGE(TwinEEngine *engine, LifeScriptContext &ctx) {
 		}
 	}
 	engine->_redraw->redrawEngineActions(true);
-
+	engine->restoreTimer();
 	return 0;
 }
 
@@ -1194,7 +1193,7 @@ int32 ScriptLife::lMESSAGE_OBJ(TwinEEngine *engine, LifeScriptContext &ctx) {
 	const TextId textIdx = (TextId)ctx.stream.readSint16LE();
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::MESSAGE_OBJ(%i, %i)", (int)otherActorIdx, (int)textIdx);
 
-	ScopedEngineFreeze scopedFreeze(engine);
+	engine->saveTimer(false);
 	engine->testRestoreModeSVGA(true);
 	if (engine->_text->_showDialogueBubble) {
 		engine->_redraw->drawBubble(otherActorIdx);
@@ -1202,6 +1201,7 @@ int32 ScriptLife::lMESSAGE_OBJ(TwinEEngine *engine, LifeScriptContext &ctx) {
 	engine->_text->setFontCrossColor(engine->_scene->getActor(otherActorIdx)->_talkColor);
 	engine->_scene->_talkingActor = otherActorIdx;
 	engine->_text->drawTextProgressive(textIdx);
+	engine->restoreTimer();
 	engine->_redraw->redrawEngineActions(true);
 
 	return 0;
@@ -1226,9 +1226,10 @@ int32 ScriptLife::lFOUND_OBJECT(TwinEEngine *engine, LifeScriptContext &ctx) {
 	const InventoryItems item = (InventoryItems)ctx.stream.readByte();
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::FOUND_OBJECT(%i)", (int)item);
 
-	ScopedEngineFreeze scopedFreeze(engine);
+	engine->saveTimer(false);
 	engine->testRestoreModeSVGA(true);
 	engine->_gameState->doFoundObj(item);
+	engine->restoreTimer();
 	engine->_redraw->redrawEngineActions(true);
 
 	return 0;
@@ -1508,7 +1509,12 @@ int32 ScriptLife::lHIT_OBJ(TwinEEngine *engine, LifeScriptContext &ctx) {
  * @note Opcode @c 0x40
  */
 int32 ScriptLife::lPLAY_FLA(TwinEEngine *engine, LifeScriptContext &ctx) {
-	ScopedEngineFreeze timer(engine);
+	engine->saveTimer(false);
+	if (engine->_screens->_flagPalettePcx)
+		engine->_screens->fadeToBlack(engine->_screens->_palettePcx);
+	else
+		engine->_screens->fadeToBlack(engine->_screens->_ptrPal);
+	engine->_sound->stopSamples();
 	int strIdx = 0;
 	char movie[64];
 	do {
@@ -1524,7 +1530,8 @@ int32 ScriptLife::lPLAY_FLA(TwinEEngine *engine, LifeScriptContext &ctx) {
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::PLAY_FLA(%s)", movie);
 
 	engine->_movie->playMovie(movie);
-	engine->setPalette(engine->_screens->_ptrPal);
+	engine->restoreTimer();
+	engine->_screens->_flagFade = true;
 	engine->_redraw->_firstTime = true;
 
 	return 0;
@@ -1573,7 +1580,7 @@ int32 ScriptLife::lASK_CHOICE(TwinEEngine *engine, LifeScriptContext &ctx) {
 	const TextId choiceIdx = (TextId)ctx.stream.readSint16LE();
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::ASK_CHOICE(%i)", (int)choiceIdx);
 
-	ScopedEngineFreeze scopedFreeze(engine);
+	engine->saveTimer(false);
 	engine->testRestoreModeSVGA(true);
 	if (engine->_text->_showDialogueBubble) {
 		engine->_redraw->drawBubble(ctx.actorIdx);
@@ -1581,6 +1588,7 @@ int32 ScriptLife::lASK_CHOICE(TwinEEngine *engine, LifeScriptContext &ctx) {
 	engine->_text->setFontCrossColor(ctx.actor->_talkColor);
 	engine->_gameState->gameAskChoice(choiceIdx);
 	engine->_gameState->_gameNbChoices = 0;
+	engine->restoreTimer();
 	engine->_redraw->redrawEngineActions(true);
 
 	return 0;
@@ -1594,7 +1602,7 @@ int32 ScriptLife::lBIG_MESSAGE(TwinEEngine *engine, LifeScriptContext &ctx) {
 	const TextId textIdx = (TextId)ctx.stream.readSint16LE();
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::BIG_MESSAGE(%i)", (int)textIdx);
 
-	ScopedEngineFreeze scopedFreeze(engine);
+	engine->saveTimer(false);
 	engine->testRestoreModeSVGA(true);
 	engine->_text->bigWinDial();
 	if (engine->_text->_showDialogueBubble) {
@@ -1605,7 +1613,7 @@ int32 ScriptLife::lBIG_MESSAGE(TwinEEngine *engine, LifeScriptContext &ctx) {
 	engine->_text->drawTextProgressive(textIdx);
 	engine->_text->normalWinDial();
 	engine->_redraw->redrawEngineActions(true);
-
+	engine->restoreTimer();
 	return 0;
 }
 
@@ -1699,9 +1707,9 @@ int32 ScriptLife::lSAY_MESSAGE(TwinEEngine *engine, LifeScriptContext &ctx) {
 
 	engine->_redraw->addOverlay(OverlayType::koText, (int16)textEntry, 0, 0, ctx.actorIdx, OverlayPosType::koFollowActor, 2);
 
-	ScopedEngineFreeze scoped(engine);
+	engine->saveTimer(false);
 	engine->_text->initVoxToPlayTextId(textEntry);
-
+	engine->restoreTimer();
 	return 0;
 }
 
@@ -1716,8 +1724,9 @@ int32 ScriptLife::lSAY_MESSAGE_OBJ(TwinEEngine *engine, LifeScriptContext &ctx)
 
 	engine->_redraw->addOverlay(OverlayType::koText, (int16)textEntry, 0, 0, otherActorIdx, OverlayPosType::koFollowActor, 2);
 
-	ScopedEngineFreeze scoped(engine);
+	engine->saveTimer(false);
 	engine->_text->initVoxToPlayTextId(textEntry);
+	engine->restoreTimer();
 
 	return 0;
 }
@@ -1767,8 +1776,9 @@ int32 ScriptLife::lGRM_OFF(TwinEEngine *engine, LifeScriptContext &ctx) {
  */
 int32 ScriptLife::lFADE_PAL_RED(TwinEEngine *engine, LifeScriptContext &ctx) {
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::FADE_PAL_RED()");
-	ScopedEngineFreeze scoped(engine);
+	engine->saveTimer(false);
 	engine->_screens->fadeToRed(engine->_screens->_ptrPal);
+	engine->restoreTimer();
 	engine->_screens->_flagPalettePcx = false;
 	return 0;
 }
@@ -1779,10 +1789,11 @@ int32 ScriptLife::lFADE_PAL_RED(TwinEEngine *engine, LifeScriptContext &ctx) {
  */
 int32 ScriptLife::lFADE_ALARM_RED(TwinEEngine *engine, LifeScriptContext &ctx) {
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::FADE_ALARM_RED()");
-	ScopedEngineFreeze scoped(engine);
+	engine->saveTimer(false);
 	HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
 	engine->_screens->fadeToRed(engine->_screens->_palettePcx);
 	engine->_screens->_flagPalettePcx = true;
+	engine->restoreTimer();
 	return 0;
 }
 
@@ -1792,9 +1803,10 @@ int32 ScriptLife::lFADE_ALARM_RED(TwinEEngine *engine, LifeScriptContext &ctx) {
  */
 int32 ScriptLife::lFADE_ALARM_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::FADE_ALARM_PAL()");
-	ScopedEngineFreeze scoped(engine);
+	engine->saveTimer(false);
 	HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
 	engine->_screens->fadePalToPal(engine->_screens->_palettePcx, engine->_screens->_ptrPal);
+	engine->restoreTimer();
 	engine->_screens->_flagPalettePcx = false;
 	return 0;
 }
@@ -1805,8 +1817,9 @@ int32 ScriptLife::lFADE_ALARM_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
  */
 int32 ScriptLife::lFADE_RED_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::FADE_RED_PAL()");
-	ScopedEngineFreeze scoped(engine);
+	engine->saveTimer(false);
 	engine->_screens->fadeRedToPal(engine->_screens->_ptrPal);
+	engine->restoreTimer();
 	engine->_screens->_flagPalettePcx = false;
 	return 0;
 }
@@ -1817,9 +1830,10 @@ int32 ScriptLife::lFADE_RED_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
  */
 int32 ScriptLife::lFADE_RED_ALARM(TwinEEngine *engine, LifeScriptContext &ctx) {
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::FADE_RED_ALARM()");
-	ScopedEngineFreeze scoped(engine);
+	engine->saveTimer(false);
 	HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
 	engine->_screens->fadeRedToPal(engine->_screens->_palettePcx);
+	engine->restoreTimer();
 	engine->_screens->_flagPalettePcx = true;
 	return 0;
 }
@@ -1830,9 +1844,10 @@ int32 ScriptLife::lFADE_RED_ALARM(TwinEEngine *engine, LifeScriptContext &ctx) {
  */
 int32 ScriptLife::lFADE_PAL_ALARM(TwinEEngine *engine, LifeScriptContext &ctx) {
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::FADE_PAL_ALARM()");
-	ScopedEngineFreeze scoped(engine);
+	engine->saveTimer(false);
 	HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_ALARMREDPAL);
 	engine->_screens->fadePalToPal(engine->_screens->_ptrPal, engine->_screens->_palettePcx);
+	engine->restoreTimer();
 	engine->_screens->_flagPalettePcx = true;
 	return 0;
 }
@@ -1863,7 +1878,7 @@ int32 ScriptLife::lASK_CHOICE_OBJ(TwinEEngine *engine, LifeScriptContext &ctx) {
 	const TextId choiceIdx = (TextId)ctx.stream.readSint16LE();
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::ASK_CHOICE_OBJ(%i, %i)", (int)otherActorIdx, (int)choiceIdx);
 
-	ScopedEngineFreeze freeze(engine);
+	engine->saveTimer(false);
 	engine->testRestoreModeSVGA(true);
 	if (engine->_text->_showDialogueBubble) {
 		engine->_redraw->drawBubble(otherActorIdx);
@@ -1871,6 +1886,7 @@ int32 ScriptLife::lASK_CHOICE_OBJ(TwinEEngine *engine, LifeScriptContext &ctx) {
 	engine->_text->setFontCrossColor(engine->_scene->getActor(otherActorIdx)->_talkColor);
 	engine->_gameState->gameAskChoice(choiceIdx);
 	engine->_gameState->_gameNbChoices = 0;
+	engine->restoreTimer();
 	engine->_redraw->redrawEngineActions(true);
 
 	return 0;
@@ -1882,7 +1898,7 @@ int32 ScriptLife::lASK_CHOICE_OBJ(TwinEEngine *engine, LifeScriptContext &ctx) {
  */
 int32 ScriptLife::lSET_DARK_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::SET_DARK_PAL()");
-	ScopedEngineFreeze scoped(engine);
+	engine->saveTimer(false);
 	if (!HQR::getPaletteEntry(engine->_screens->_palettePcx, Resources::HQR_RESS_FILE, RESSHQR_DARKPAL)) {
 		error("Failed to get palette entry for dark palette");
 	}
@@ -1890,6 +1906,7 @@ int32 ScriptLife::lSET_DARK_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
 		// set the palette hard if it should not get faded
 		engine->setPalette(engine->_screens->_palettePcx);
 	}
+	engine->restoreTimer();
 	engine->_screens->_flagPalettePcx = true;
 	return 0;
 }
@@ -1914,7 +1931,7 @@ int32 ScriptLife::lSET_NORMAL_PAL(TwinEEngine *engine, LifeScriptContext &ctx) {
  */
 int32 ScriptLife::lMESSAGE_SENDELL(TwinEEngine *engine, LifeScriptContext &ctx) {
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::MESSAGE_SENDELL()");
-	ScopedEngineFreeze scoped(engine);
+	engine->saveTimer(false);
 	engine->testRestoreModeSVGA(true);
 	engine->_screens->fadeToBlack(engine->_screens->_ptrPal);
 	engine->_screens->loadImage(TwineImage(Resources::HQR_RESS_FILE, 25, 26));
@@ -1930,6 +1947,7 @@ int32 ScriptLife::lMESSAGE_SENDELL(TwinEEngine *engine, LifeScriptContext &ctx)
 	engine->_screens->fadeToBlack(engine->_screens->_palettePcx);
 	engine->_screens->clearScreen();
 	engine->setPalette(engine->_screens->_ptrPal);
+	engine->restoreTimer();
 	return 0;
 }
 
diff --git a/engines/twine/script/script_life_v2.cpp b/engines/twine/script/script_life_v2.cpp
index a5dae2ec1a6..37c79f4135a 100644
--- a/engines/twine/script/script_life_v2.cpp
+++ b/engines/twine/script/script_life_v2.cpp
@@ -201,10 +201,11 @@ static const ScriptLifeFunction function_map[] = {
 int32 ScriptLifeV2::lPALETTE(TwinEEngine *engine, LifeScriptContext &ctx) {
 	const int32 palIndex = engine->_screens->mapLba2Palette(ctx.stream.readByte());
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::PALETTE(%i)", palIndex);
-	ScopedEngineFreeze scoped(engine);
+	engine->saveTimer(false);
 	HQR::getPaletteEntry(engine->_screens->_ptrPal, Resources::HQR_RESS_FILE, palIndex);
 	engine->setPalette(engine->_screens->_ptrPal);
 	engine->_screens->_flagPalettePcx = true;
+	engine->restoreTimer();
 	return 0;
 }
 
@@ -549,7 +550,7 @@ int32 ScriptLifeV2::lSET_CAMERA(TwinEEngine *engine, LifeScriptContext &ctx) {
 }
 
 int32 ScriptLifeV2::lPLAY_ACF(TwinEEngine *engine, LifeScriptContext &ctx) {
-	ScopedEngineFreeze timer(engine);
+	engine->saveTimer(false);
 	int strIdx = 0;
 	char movie[64];
 	do {
@@ -567,6 +568,7 @@ int32 ScriptLifeV2::lPLAY_ACF(TwinEEngine *engine, LifeScriptContext &ctx) {
 	engine->_movie->playMovie(movie);
 	// TODO: lba2 is doing more stuff here - reset the cinema mode, init the scene and palette stuff
 	engine->setPalette(engine->_screens->_ptrPal);
+	engine->restoreTimer();
 	engine->_redraw->_firstTime = true;
 
 	return -1;
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index 84e67930a02..f190e9c94c1 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -79,14 +79,6 @@
 #endif
 namespace TwinE {
 
-ScopedEngineFreeze::ScopedEngineFreeze(TwinEEngine *engine, bool pause) : _engine(engine) {
-	_engine->saveTimer(pause);
-}
-
-ScopedEngineFreeze::~ScopedEngineFreeze() {
-	_engine->restoreTimer();
-}
-
 ScopedCursor::ScopedCursor(TwinEEngine *engine) : _engine(engine) {
 	_engine->pushMouseCursorVisible();
 }
@@ -873,12 +865,13 @@ int32 TwinEEngine::toSeconds(int x) const {
 }
 
 void TwinEEngine::processOptionsMenu() {
-	ScopedEngineFreeze scoped(this);
+	saveTimer(false);
 	testRestoreModeSVGA(true) ;
 	_sound->pauseSamples();
 	_menu->inGameOptionsMenu();
 	_scene->playSceneMusic();
 	_sound->resumeSamples();
+	restoreTimer();
 	_redraw->redrawEngineActions(true);
 }
 
@@ -926,17 +919,19 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 	} else {
 		// Process give up menu - Press ESC
 		if (_input->toggleAbortAction() && _scene->_sceneHero->_lifePoint > 0 && _scene->_sceneHero->_body != -1 && !_scene->_sceneHero->_staticFlags.bIsInvisible) {
-			ScopedEngineFreeze scopedFreeze(this);
+			saveTimer(false);
 			testRestoreModeSVGA(true) ;
 			const int giveUp = _menu->quitMenu();
 			if (giveUp == kQuitEngine) {
 				return false;
 			}
 			if (giveUp == 1) {
+				restoreTimer();
 				_redraw->redrawEngineActions(true);
 				_sceneLoopState = SceneLoopState::ReturnToMenu;
 				return false;
 			}
+			restoreTimer();
 			_redraw->redrawEngineActions(true);
 		}
 
diff --git a/engines/twine/twine.h b/engines/twine/twine.h
index 585cf23c645..b54d45e2cfd 100644
--- a/engines/twine/twine.h
+++ b/engines/twine/twine.h
@@ -162,12 +162,6 @@ enum class SceneLoopState {
 	Finished = 1
 };
 
-struct ScopedEngineFreeze {
-	TwinEEngine *_engine;
-	ScopedEngineFreeze(TwinEEngine *engine, bool pause = false);
-	~ScopedEngineFreeze();
-};
-
 struct ScopedCursor {
 	TwinEEngine *_engine;
 	ScopedCursor(TwinEEngine *engine);


Commit: f0f5c5c3bbe226086d49e55f123399c84939ea88
    https://github.com/scummvm/scummvm/commit/f0f5c5c3bbe226086d49e55f123399c84939ea88
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-12T21:40:55+02:00

Commit Message:
TWINE: renamed functions and members to match original sources

Changed paths:
    engines/twine/audio/sound.cpp
    engines/twine/debugger/debug_state.cpp
    engines/twine/debugger/debugtools.cpp
    engines/twine/renderer/redraw.cpp
    engines/twine/renderer/redraw.h
    engines/twine/scene/gamestate.cpp
    engines/twine/scene/grid.cpp
    engines/twine/scene/grid.h
    engines/twine/scene/scene.cpp
    engines/twine/scene/scene.h
    engines/twine/script/script_life.cpp
    engines/twine/twine.cpp
    engines/twine/twine.h


diff --git a/engines/twine/audio/sound.cpp b/engines/twine/audio/sound.cpp
index a8c5bcdf566..128e9288eb8 100644
--- a/engines/twine/audio/sound.cpp
+++ b/engines/twine/audio/sound.cpp
@@ -70,9 +70,9 @@ void Sound::setSamplePosition(int32 channelIdx, int32 x, int32 y, int32 z) {
 	if (channelIdx < 0 || channelIdx >= NUM_CHANNELS) {
 		return;
 	}
-	const int32 camX = _engine->_grid->_newCamera.x * SIZE_BRICK_XZ;
-	const int32 camY = _engine->_grid->_newCamera.y * SIZE_BRICK_Y;
-	const int32 camZ = _engine->_grid->_newCamera.z * SIZE_BRICK_XZ;
+	const int32 camX = _engine->_grid->_startCube.x * SIZE_BRICK_XZ;
+	const int32 camY = _engine->_grid->_startCube.y * SIZE_BRICK_Y;
+	const int32 camZ = _engine->_grid->_startCube.z * SIZE_BRICK_XZ;
 	int32 distance = getDistance3D(camX, camY, camZ, x, y, z);
 	distance = boundRuleThree(0, distance, 10000, 255);
 	byte targetVolume = 0;
diff --git a/engines/twine/debugger/debug_state.cpp b/engines/twine/debugger/debug_state.cpp
index bcac163322e..e425864bc83 100644
--- a/engines/twine/debugger/debug_state.cpp
+++ b/engines/twine/debugger/debug_state.cpp
@@ -134,17 +134,17 @@ void DebugState::changeGridCamera() {
 	Redraw *redraw = _engine->_redraw;
 	Input *input = _engine->_input;
 	if (input->isActionActive(TwinEActionType::DebugGridCameraPressUp)) {
-		grid->_newCamera.z--;
+		grid->_startCube.z--;
 		redraw->_firstTime = true;
 	} else if (input->isActionActive(TwinEActionType::DebugGridCameraPressDown)) {
-		grid->_newCamera.z++;
+		grid->_startCube.z++;
 		redraw->_firstTime = true;
 	}
 	if (input->isActionActive(TwinEActionType::DebugGridCameraPressLeft)) {
-		grid->_newCamera.x--;
+		grid->_startCube.x--;
 		redraw->_firstTime = true;
 	} else if (input->isActionActive(TwinEActionType::DebugGridCameraPressRight)) {
-		grid->_newCamera.x++;
+		grid->_startCube.x++;
 		redraw->_firstTime = true;
 	}
 }
diff --git a/engines/twine/debugger/debugtools.cpp b/engines/twine/debugger/debugtools.cpp
index c51b6ce76b9..1eda11b6190 100644
--- a/engines/twine/debugger/debugtools.cpp
+++ b/engines/twine/debugger/debugtools.cpp
@@ -416,7 +416,7 @@ static void sceneDetailsWindows(TwinEEngine *engine) {
 		ImGui::SameLine();
 		ImGuiEx::Boolean(scene->_flagClimbing);
 
-		ImGuiEx::InputInt("Currently followed actor", &scene->_currentlyFollowedActor);
+		ImGuiEx::InputInt("Currently followed actor", &scene->_numObjFollow);
 
 		ImGui::Checkbox("Enable enhancements", &scene->_enableEnhancements);
 		ImGui::Checkbox("Render grid tiles", &scene->_enableGridTileRendering);
diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp
index 81378dac985..378ffdc9aca 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -313,7 +313,7 @@ int32 Redraw::fillActorDrawingList(DrawListStruct *drawList, bool flagflip) {
 				drawList[drawListPos].num = 1;
 				drawListPos++;
 			}
-			if (_flagMCGA && n == _engine->_scene->_currentlyFollowedActor) {
+			if (_flagMCGA && n == _engine->_scene->_numObjFollow) {
 				_sceneryViewX = projPos.x;
 				_sceneryViewY = projPos.y;
 			}
@@ -872,7 +872,7 @@ void Redraw::renderText() {
 	addRedrawArea(redraw);
 }
 
-void Redraw::redrawEngineActions(bool bgRedraw) { // AffScene
+void Redraw::drawScene(bool bgRedraw) { // AffScene
 	int32 tmp_projPosX = _projPosScreen.x;
 	int32 tmp_projPosY = _projPosScreen.y;
 
diff --git a/engines/twine/renderer/redraw.h b/engines/twine/renderer/redraw.h
index f3d709663e1..d19d3466921 100644
--- a/engines/twine/renderer/redraw.h
+++ b/engines/twine/renderer/redraw.h
@@ -190,7 +190,7 @@ public:
 	 * This is responsible for the entire game screen redraw
 	 * @param bgRedraw true if we want to redraw background grid, false if we want to update certain screen areas
 	 */
-	void redrawEngineActions(bool bgRedraw);
+	void drawScene(bool bgRedraw);
 
 	/** Draw dialogue sprite image */
 	void drawBubble(int32 actorIdx);
diff --git a/engines/twine/scene/gamestate.cpp b/engines/twine/scene/gamestate.cpp
index 545733c6db9..db702a5c4e6 100644
--- a/engines/twine/scene/gamestate.cpp
+++ b/engines/twine/scene/gamestate.cpp
@@ -136,7 +136,7 @@ void GameState::initEngineVars() {
 	setChapter(0);
 
 	_engine->_scene->_sceneTextBank = TextBankId::Options_and_menus;
-	_engine->_scene->_currentlyFollowedActor = OWN_ACTOR_SCENE_INDEX;
+	_engine->_scene->_numObjFollow = OWN_ACTOR_SCENE_INDEX;
 	_engine->_actor->_heroBehaviour = HeroBehaviourType::kNormal;
 	_engine->_actor->_previousHeroAngle = 0;
 	_engine->_actor->_previousHeroBehaviour = HeroBehaviourType::kNormal;
@@ -333,15 +333,15 @@ void GameState::doFoundObj(InventoryItems item) {
 
 	// Hide hero in scene
 	_engine->_scene->_sceneHero->_staticFlags.bIsInvisible = 1;
-	_engine->_redraw->redrawEngineActions(true);
+	_engine->_redraw->drawScene(true);
 	_engine->_scene->_sceneHero->_staticFlags.bIsInvisible = 0;
 
 	_engine->saveFrontBuffer();
 
 	IVec3 itemCamera;
-	itemCamera.x = _engine->_grid->_newCamera.x * SIZE_BRICK_XZ;
-	itemCamera.y = _engine->_grid->_newCamera.y * SIZE_BRICK_Y;
-	itemCamera.z = _engine->_grid->_newCamera.z * SIZE_BRICK_XZ;
+	itemCamera.x = _engine->_grid->_startCube.x * SIZE_BRICK_XZ;
+	itemCamera.y = _engine->_grid->_startCube.y * SIZE_BRICK_Y;
+	itemCamera.z = _engine->_grid->_startCube.z * SIZE_BRICK_XZ;
 
 	BodyData &bodyData = _engine->_scene->_sceneHero->_entityDataPtr->getBody(_engine->_scene->_sceneHero->_body);
 	const IVec3 bodyPos = _engine->_scene->_sceneHero->_posObj - itemCamera;
@@ -509,7 +509,7 @@ void GameState::processGameoverAnimation() {
 	_engine->testRestoreModeSVGA(false);
 	// workaround to fix hero redraw after drowning
 	_engine->_scene->_sceneHero->_staticFlags.bIsInvisible = 1;
-	_engine->_redraw->redrawEngineActions(true);
+	_engine->_redraw->drawScene(true);
 	_engine->_scene->_sceneHero->_staticFlags.bIsInvisible = 0;
 
 	// TODO: inSceneryView
diff --git a/engines/twine/scene/grid.cpp b/engines/twine/scene/grid.cpp
index 8bcc0249b80..897e944e5ac 100644
--- a/engines/twine/scene/grid.cpp
+++ b/engines/twine/scene/grid.cpp
@@ -630,7 +630,7 @@ void Grid::drawColumnGrid(int32 blockIdx, int32 brickBlockIdx, int32 x, int32 y,
 	int32 brickPixelPosX = 0;
 	int32 brickPixelPosY = 0;
 
-	getBrickPos(x - _newCamera.x, y - _newCamera.y, z - _newCamera.z, brickPixelPosX, brickPixelPosY);
+	getBrickPos(x - _startCube.x, y - _startCube.y, z - _startCube.z, brickPixelPosX, brickPixelPosY);
 
 	if (brickPixelPosX < -24) {
 		return;
@@ -670,9 +670,9 @@ void Grid::drawColumnGrid(int32 blockIdx, int32 brickBlockIdx, int32 x, int32 y,
 }
 
 void Grid::redrawGrid() { // AffGrille
-	_worldCube.x = _newCamera.x * SIZE_BRICK_XZ;
-	_worldCube.y = _newCamera.y * SIZE_BRICK_Y;
-	_worldCube.z = _newCamera.z * SIZE_BRICK_XZ;
+	_worldCube.x = _startCube.x * SIZE_BRICK_XZ;
+	_worldCube.y = _startCube.y * SIZE_BRICK_Y;
+	_worldCube.z = _startCube.z * SIZE_BRICK_XZ;
 
 	memset(_brickInfoBuffer, 0, _brickInfoBufferSize);
 
@@ -831,36 +831,36 @@ uint8 Grid::worldCodeBrick(int32 x, int32 y, int32 z) {
 }
 
 void Grid::centerOnActor(const ActorStruct* actor) {
-	_newCamera.x = (actor->_posObj.x + SIZE_BRICK_Y) / SIZE_BRICK_XZ;
-	_newCamera.y = (actor->_posObj.y + SIZE_BRICK_Y) / SIZE_BRICK_Y;
-	_newCamera.z = (actor->_posObj.z + SIZE_BRICK_Y) / SIZE_BRICK_XZ;
+	_startCube.x = (actor->_posObj.x + SIZE_BRICK_Y) / SIZE_BRICK_XZ;
+	_startCube.y = (actor->_posObj.y + SIZE_BRICK_Y) / SIZE_BRICK_Y;
+	_startCube.z = (actor->_posObj.z + SIZE_BRICK_Y) / SIZE_BRICK_XZ;
 	_engine->_redraw->_firstTime = true;
 }
 
 void Grid::centerScreenOnActor() {
-	if (_engine->_disableScreenRecenter) {
+	if (_engine->_cameraZone) {
 		return;
 	}
 	if (_engine->_debugState->_useFreeCamera) {
 		return;
 	}
 
-	ActorStruct *actor = _engine->_scene->getActor(_engine->_scene->_currentlyFollowedActor);
-	const IVec3 projPos = _engine->_renderer->projectPoint(actor->_posObj.x - (_newCamera.x * SIZE_BRICK_XZ),
-	                                   actor->_posObj.y - (_newCamera.y * SIZE_BRICK_Y),
-	                                   actor->_posObj.z - (_newCamera.z * SIZE_BRICK_XZ));
+	ActorStruct *actor = _engine->_scene->getActor(_engine->_scene->_numObjFollow);
+	const IVec3 projPos = _engine->_renderer->projectPoint(actor->_posObj.x - (_startCube.x * SIZE_BRICK_XZ),
+	                                   actor->_posObj.y - (_startCube.y * SIZE_BRICK_Y),
+	                                   actor->_posObj.z - (_startCube.z * SIZE_BRICK_XZ));
 	// TODO: these border values should get scaled for higher resolutions
 	if (projPos.x < 80 || projPos.x >= _engine->width() - 60 || projPos.y < 80 || projPos.y >= _engine->height() - 50) {
-		_newCamera.x = ((actor->_posObj.x + SIZE_BRICK_Y) / SIZE_BRICK_XZ) + (((actor->_posObj.x + SIZE_BRICK_Y) / SIZE_BRICK_XZ) - _newCamera.x) / 2;
-		_newCamera.y = actor->_posObj.y / SIZE_BRICK_Y;
-		_newCamera.z = ((actor->_posObj.z + SIZE_BRICK_Y) / SIZE_BRICK_XZ) + (((actor->_posObj.z + SIZE_BRICK_Y) / SIZE_BRICK_XZ) - _newCamera.z) / 2;
+		_startCube.x = ((actor->_posObj.x + SIZE_BRICK_Y) / SIZE_BRICK_XZ) + (((actor->_posObj.x + SIZE_BRICK_Y) / SIZE_BRICK_XZ) - _startCube.x) / 2;
+		_startCube.y = actor->_posObj.y / SIZE_BRICK_Y;
+		_startCube.z = ((actor->_posObj.z + SIZE_BRICK_Y) / SIZE_BRICK_XZ) + (((actor->_posObj.z + SIZE_BRICK_Y) / SIZE_BRICK_XZ) - _startCube.z) / 2;
 
-		if (_newCamera.x >= SIZE_CUBE_X) {
-			_newCamera.x = SIZE_CUBE_X - 1;
+		if (_startCube.x >= SIZE_CUBE_X) {
+			_startCube.x = SIZE_CUBE_X - 1;
 		}
 
-		if (_newCamera.z >= SIZE_CUBE_Z) {
-			_newCamera.z = SIZE_CUBE_Z - 1;
+		if (_startCube.z >= SIZE_CUBE_Z) {
+			_startCube.z = SIZE_CUBE_Z - 1;
 		}
 
 		_engine->_redraw->_firstTime = true;
diff --git a/engines/twine/scene/grid.h b/engines/twine/scene/grid.h
index 78d94306ef6..7e60f8e4fc8 100644
--- a/engines/twine/scene/grid.h
+++ b/engines/twine/scene/grid.h
@@ -194,7 +194,7 @@ public:
 	const uint8 *getBlockBufferGround(const IVec3 &pos, int32 &ground);
 
 	/** New grid camera x, y and z coordinates */
-	IVec3 _newCamera;
+	IVec3 _startCube; // StartXCube, StartYCube, StartZCube
 
 	/** Current grid camera x, y and z coordinates */
 	IVec3 _worldCube; // WorldXCube WorldYCube
diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp
index 50f199fa506..b8490ebcae4 100644
--- a/engines/twine/scene/scene.cpp
+++ b/engines/twine/scene/scene.cpp
@@ -629,9 +629,9 @@ void Scene::changeCube() {
 	}
 
 	_engine->_gameState->_inventoryNumKeys = 0;
-	_engine->_disableScreenRecenter = false;
+	_engine->_cameraZone = false;
 
-	ActorStruct *followedActor = getActor(_currentlyFollowedActor);
+	ActorStruct *followedActor = getActor(_numObjFollow);
 	_engine->_grid->centerOnActor(followedActor);
 
 	_engine->_gameState->_magicBall = -1;
@@ -784,12 +784,12 @@ void Scene::checkZoneSce(int32 actorIdx) {
 				}
 				break;
 			case ZoneType::kCamera:
-				if (_currentlyFollowedActor == actorIdx && !_engine->_debugState->_useFreeCamera) {
-					_engine->_disableScreenRecenter = true;
-					if (_engine->_grid->_newCamera.x != zone->infoData.CameraView.x || _engine->_grid->_newCamera.y != zone->infoData.CameraView.y || _engine->_grid->_newCamera.z != zone->infoData.CameraView.z) {
-						_engine->_grid->_newCamera.x = zone->infoData.CameraView.x;
-						_engine->_grid->_newCamera.y = zone->infoData.CameraView.y;
-						_engine->_grid->_newCamera.z = zone->infoData.CameraView.z;
+				if (_numObjFollow == actorIdx && !_engine->_debugState->_useFreeCamera) {
+					_engine->_cameraZone = true;
+					if (_engine->_grid->_startCube.x != zone->infoData.CameraView.x || _engine->_grid->_startCube.y != zone->infoData.CameraView.y || _engine->_grid->_startCube.z != zone->infoData.CameraView.z) {
+						_engine->_grid->_startCube.x = zone->infoData.CameraView.x;
+						_engine->_grid->_startCube.y = zone->infoData.CameraView.y;
+						_engine->_grid->_startCube.z = zone->infoData.CameraView.z;
 						_engine->_redraw->_firstTime = true;
 					}
 				}
@@ -798,7 +798,7 @@ void Scene::checkZoneSce(int32 actorIdx) {
 				actor->_zoneSce = zone->num;
 				break;
 			case ZoneType::kGrid:
-				if (_currentlyFollowedActor == actorIdx) {
+				if (_numObjFollow == actorIdx) {
 					tmpCellingGrid = true;
 					if (_engine->_grid->_useCellingGrid != zone->num) {
 						if (zone->num != -1) {
@@ -827,7 +827,7 @@ void Scene::checkZoneSce(int32 actorIdx) {
 					_talkingActor = actorIdx;
 					_engine->_text->drawTextProgressive((TextId)zone->num);
 					_engine->restoreTimer();
-					_engine->_redraw->redrawEngineActions(true);
+					_engine->_redraw->drawScene(true);
 				}
 				break;
 			case ZoneType::kLadder:
@@ -852,7 +852,7 @@ void Scene::checkZoneSce(int32 actorIdx) {
 		}
 	}
 
-	if (!tmpCellingGrid && actorIdx == _currentlyFollowedActor && _engine->_grid->_useCellingGrid != -1) {
+	if (!tmpCellingGrid && actorIdx == _numObjFollow && _engine->_grid->_useCellingGrid != -1) {
 		_engine->_grid->_useCellingGrid = -1;
 		_engine->_grid->_cellingGridIdx = -1;
 		_engine->_grid->copyMapToCube();
diff --git a/engines/twine/scene/scene.h b/engines/twine/scene/scene.h
index 8288b1fe2b6..a13b137b276 100644
--- a/engines/twine/scene/scene.h
+++ b/engines/twine/scene/scene.h
@@ -196,7 +196,7 @@ public:
 	int16 _mecaPenguinIdx = 0;
 
 	/** Current followed actor in scene */
-	int16 _currentlyFollowedActor = OWN_ACTOR_SCENE_INDEX;
+	int16 _numObjFollow = OWN_ACTOR_SCENE_INDEX;
 	/** Current actor in zone - climbing a ladder */
 	bool _flagClimbing = false;
 	bool _enableEnhancements = false;
diff --git a/engines/twine/script/script_life.cpp b/engines/twine/script/script_life.cpp
index 9c27f8bd884..0fdb8377ede 100644
--- a/engines/twine/script/script_life.cpp
+++ b/engines/twine/script/script_life.cpp
@@ -935,7 +935,7 @@ int32 ScriptLife::lMESSAGE(TwinEEngine *engine, LifeScriptContext &ctx) {
 			engine->unlockAchievement("LBA_ACH_008");
 		}
 	}
-	engine->_redraw->redrawEngineActions(true);
+	engine->_redraw->drawScene(true);
 	engine->restoreTimer();
 	return 0;
 }
@@ -997,10 +997,10 @@ int32 ScriptLife::lSET_DIRMODE_OBJ(TwinEEngine *engine, LifeScriptContext &ctx)
 int32 ScriptLife::lCAM_FOLLOW(TwinEEngine *engine, LifeScriptContext &ctx) {
 	const int32 followedActorIdx = ctx.stream.readByte();
 	debugC(3, kDebugLevels::kDebugScriptsLife, "LIFE::CAM_FOLLOW(%i)", (int)followedActorIdx);
-	if (engine->_scene->_currentlyFollowedActor != followedActorIdx) {
+	if (engine->_scene->_numObjFollow != followedActorIdx) {
 		const ActorStruct *followedActor = engine->_scene->getActor(followedActorIdx);
 		engine->_grid->centerOnActor(followedActor);
-		engine->_scene->_currentlyFollowedActor = followedActorIdx;
+		engine->_scene->_numObjFollow = followedActorIdx;
 	}
 
 	return 0;
@@ -1202,7 +1202,7 @@ int32 ScriptLife::lMESSAGE_OBJ(TwinEEngine *engine, LifeScriptContext &ctx) {
 	engine->_scene->_talkingActor = otherActorIdx;
 	engine->_text->drawTextProgressive(textIdx);
 	engine->restoreTimer();
-	engine->_redraw->redrawEngineActions(true);
+	engine->_redraw->drawScene(true);
 
 	return 0;
 }
@@ -1230,7 +1230,7 @@ int32 ScriptLife::lFOUND_OBJECT(TwinEEngine *engine, LifeScriptContext &ctx) {
 	engine->testRestoreModeSVGA(true);
 	engine->_gameState->doFoundObj(item);
 	engine->restoreTimer();
-	engine->_redraw->redrawEngineActions(true);
+	engine->_redraw->drawScene(true);
 
 	return 0;
 }
@@ -1589,7 +1589,7 @@ int32 ScriptLife::lASK_CHOICE(TwinEEngine *engine, LifeScriptContext &ctx) {
 	engine->_gameState->gameAskChoice(choiceIdx);
 	engine->_gameState->_gameNbChoices = 0;
 	engine->restoreTimer();
-	engine->_redraw->redrawEngineActions(true);
+	engine->_redraw->drawScene(true);
 
 	return 0;
 }
@@ -1612,7 +1612,7 @@ int32 ScriptLife::lBIG_MESSAGE(TwinEEngine *engine, LifeScriptContext &ctx) {
 	engine->_scene->_talkingActor = ctx.actorIdx;
 	engine->_text->drawTextProgressive(textIdx);
 	engine->_text->normalWinDial();
-	engine->_redraw->redrawEngineActions(true);
+	engine->_redraw->drawScene(true);
 	engine->restoreTimer();
 	return 0;
 }
@@ -1764,7 +1764,7 @@ int32 ScriptLife::lGRM_OFF(TwinEEngine *engine, LifeScriptContext &ctx) {
 		engine->_grid->_useCellingGrid = -1;
 		engine->_grid->_cellingGridIdx = -1;
 		engine->_grid->copyMapToCube();
-		engine->_redraw->redrawEngineActions(true);
+		engine->_redraw->drawScene(true);
 	}
 
 	return 0;
@@ -1887,7 +1887,7 @@ int32 ScriptLife::lASK_CHOICE_OBJ(TwinEEngine *engine, LifeScriptContext &ctx) {
 	engine->_gameState->gameAskChoice(choiceIdx);
 	engine->_gameState->_gameNbChoices = 0;
 	engine->restoreTimer();
-	engine->_redraw->redrawEngineActions(true);
+	engine->_redraw->drawScene(true);
 
 	return 0;
 }
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index f190e9c94c1..1c37b7e1347 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -668,7 +668,7 @@ void TwinEEngine::testRestoreModeSVGA(bool redraw) {
 	if (_redraw->_flagMCGA) {
 		extInitSvga();
 		if (redraw) {
-			_redraw->redrawEngineActions(redraw);
+			_redraw->drawScene(redraw);
 		}
 	}
 }
@@ -836,7 +836,7 @@ void TwinEEngine::processInventoryAction() {
 	}
 	case kiBonusList: {
 		restoreTimer();
-		_redraw->redrawEngineActions(true);
+		_redraw->drawScene(true);
 		saveTimer(false);
 		processBonusList();
 		break;
@@ -854,7 +854,7 @@ void TwinEEngine::processInventoryAction() {
 	}
 
 	restoreTimer();
-	_redraw->redrawEngineActions(true);
+	_redraw->drawScene(true);
 }
 
 int32 TwinEEngine::toSeconds(int x) const {
@@ -872,7 +872,7 @@ void TwinEEngine::processOptionsMenu() {
 	_scene->playSceneMusic();
 	_sound->resumeSamples();
 	restoreTimer();
-	_redraw->redrawEngineActions(true);
+	_redraw->drawScene(true);
 }
 
 bool TwinEEngine::runGameEngine() { // mainLoopInteration
@@ -927,12 +927,12 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 			}
 			if (giveUp == 1) {
 				restoreTimer();
-				_redraw->redrawEngineActions(true);
+				_redraw->drawScene(true);
 				_sceneLoopState = SceneLoopState::ReturnToMenu;
 				return false;
 			}
 			restoreTimer();
-			_redraw->redrawEngineActions(true);
+			_redraw->drawScene(true);
 		}
 
 		if (_input->toggleActionIfActive(TwinEActionType::OptionsMenu)) {
@@ -976,7 +976,7 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 			testRestoreModeSVGA(true);
 			_menu->processBehaviourMenu(behaviourMenu);
 			restoreTimer();
-			_redraw->redrawEngineActions(true);
+			_redraw->drawScene(true);
 		}
 
 		// use Proto-Pack
@@ -995,8 +995,8 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 		}
 
 		// Recenter Screen
-		if (_input->toggleActionIfActive(TwinEActionType::RecenterScreenOnTwinsen) && !_disableScreenRecenter) {
-			const ActorStruct *currentlyFollowedActor = _scene->getActor(_scene->_currentlyFollowedActor);
+		if (_input->toggleActionIfActive(TwinEActionType::RecenterScreenOnTwinsen) && !_cameraZone) {
+			const ActorStruct *currentlyFollowedActor = _scene->getActor(_scene->_numObjFollow);
 			_grid->centerOnActor(currentlyFollowedActor);
 		}
 
@@ -1009,7 +1009,7 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 			// see https://bugs.scummvm.org/ticket/14808
 			restoreTimer();
 			_screens->_flagFade = true;
-			_redraw->redrawEngineActions(true);
+			_redraw->drawScene(true);
 		}
 
 		// Process Pause
@@ -1033,7 +1033,7 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 				}
 			} while (!_input->toggleActionIfActive(TwinEActionType::Pause));
 			restoreTimer();
-			_redraw->redrawEngineActions(true);
+			_redraw->drawScene(true);
 		}
 
 		if (_input->toggleActionIfActive(TwinEActionType::SceneryZoom)) {
@@ -1053,7 +1053,7 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 	}
 
 	_movements->initRealValue(LBAAngles::ANGLE_0, -LBAAngles::ANGLE_90, LBAAngles::ANGLE_1, &_realFalling);
-	_disableScreenRecenter = false;
+	_cameraZone = false;
 
 	_scene->processEnvironmentSound();
 
@@ -1206,12 +1206,12 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 
 	_grid->centerScreenOnActor();
 
-	_redraw->redrawEngineActions(_redraw->_firstTime);
+	_redraw->drawScene(_redraw->_firstTime);
 
 	// workaround to fix hero redraw after drowning
 	if (_actor->_cropBottomScreen && _redraw->_firstTime) {
 		_scene->_sceneHero->_staticFlags.bIsInvisible = 1;
-		_redraw->redrawEngineActions(true);
+		_redraw->drawScene(true);
 		_scene->_sceneHero->_staticFlags.bIsInvisible = 0;
 	}
 
@@ -1256,11 +1256,11 @@ bool TwinEEngine::delaySkip(uint32 time) {
 	return false;
 }
 
-void TwinEEngine::saveFrontBuffer() {
+void TwinEEngine::saveFrontBuffer() { // CopyScreen(Log, Screen)
 	_screens->copyScreen(_frontVideoBuffer, _workVideoBuffer);
 }
 
-void TwinEEngine::restoreFrontBuffer() {
+void TwinEEngine::restoreFrontBuffer() { // CopyScreen
 	_screens->copyScreen(_workVideoBuffer, _frontVideoBuffer);
 }
 
diff --git a/engines/twine/twine.h b/engines/twine/twine.h
index b54d45e2cfd..46d05e76642 100644
--- a/engines/twine/twine.h
+++ b/engines/twine/twine.h
@@ -325,7 +325,7 @@ public:
 	bool _flagRain = false;
 
 	/** Disable screen recenter */
-	bool _disableScreenRecenter = false;
+	bool _cameraZone = false;
 
 	Graphics::ManagedSurface _imageBuffer;
 	/** Work video buffer */


Commit: db2005c13b8068899adb04ae83d4b25126cf67a3
    https://github.com/scummvm/scummvm/commit/db2005c13b8068899adb04ae83d4b25126cf67a3
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-12T21:40:55+02:00

Commit Message:
TWINE: fixed invalid timer handling for playing fla movies from move script

Changed paths:
    engines/twine/movies.cpp
    engines/twine/script/script_move.cpp


diff --git a/engines/twine/movies.cpp b/engines/twine/movies.cpp
index 6ed5b61577c..547e3b8c5bd 100644
--- a/engines/twine/movies.cpp
+++ b/engines/twine/movies.cpp
@@ -391,6 +391,8 @@ bool Movies::playMovie(const char *name) { // PlayAnimFla
 	if (!_file.open(Common::Path(fileNamePath + FLA_EXT))) {
 		warning("Failed to open fla movie '%s'", fileNamePath.c_str());
 		playGIFMovie(fileNamePath.c_str());
+		_engine->_screens->setBlackPal();
+		_engine->_screens->clearScreen();
 		return true;
 	}
 
diff --git a/engines/twine/script/script_move.cpp b/engines/twine/script/script_move.cpp
index 71fc280afff..e15b0f2b16f 100644
--- a/engines/twine/script/script_move.cpp
+++ b/engines/twine/script/script_move.cpp
@@ -538,9 +538,12 @@ int32 ScriptMove::mPLAY_FLA(TwinEEngine *engine, MoveScriptContext &ctx) {
 	} while (true);
 
 	debugC(3, kDebugLevels::kDebugScriptsMove, "MOVE::PLAY_FLA(%s)", movie);
+	engine->saveTimer(false);
+	engine->_screens->fadeToBlack(engine->_screens->_ptrPal);
 	engine->_movie->playMovie(movie);
-	engine->setPalette(engine->_screens->_ptrPal);
-	engine->_screens->clearScreen();
+	engine->_screens->_flagFade = true;
+	engine->restoreTimer();
+	engine->_redraw->drawScene(true);
 	return 0;
 }
 


Commit: ab6b761973a73f2d1ccd6d41f22b9df14a06b7eb
    https://github.com/scummvm/scummvm/commit/ab6b761973a73f2d1ccd6d41f22b9df14a06b7eb
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2024-10-12T21:40:55+02:00

Commit Message:
TWINE: fixed missing save-/restoreTimer calls for the holomap

Changed paths:
    engines/twine/holomap_v1.cpp


diff --git a/engines/twine/holomap_v1.cpp b/engines/twine/holomap_v1.cpp
index d57b9107ba8..8572f119e2f 100644
--- a/engines/twine/holomap_v1.cpp
+++ b/engines/twine/holomap_v1.cpp
@@ -342,6 +342,8 @@ void HolomapV1::holoTraj(int32 trajectoryIndex) {
 		return;
 	}
 
+	_engine->saveTimer(false);
+
 	if (_engine->_screens->_flagPalettePcx)
 		_engine->_screens->fadeToBlack(_engine->_screens->_palettePcx);
 	else
@@ -352,7 +354,6 @@ void HolomapV1::holoTraj(int32 trajectoryIndex) {
 
 	initHoloDatas();
 
-	_engine->saveTimer(false);
 	const int32 cameraPosX = _engine->width() / 2 + 80;
 	const int32 cameraPosY = _engine->height() / 2;
 	_engine->_renderer->setProjection(cameraPosX, cameraPosY, 128, 1024, 1024);
@@ -538,6 +539,8 @@ void HolomapV1::holoMap() {
 	const int32 betaLightTmp = _engine->_scene->_betaLight;
 	const Graphics::Palette savepalette = _engine->_screens->_palettePcx;
 
+	_engine->saveTimer(false);
+
 	_engine->_screens->fadeToBlack(_engine->_screens->_ptrPal);
 	_engine->_sound->stopSamples();
 	_engine->_interface->unsetClip();
@@ -698,6 +701,7 @@ void HolomapV1::holoMap() {
 
 	_engine->_input->enableKeyMap(mainKeyMapId);
 	_engine->_text->initSceneTextBank();
+	_engine->restoreTimer();
 
 	_engine->_screens->_palettePcx = savepalette;
 




More information about the Scummvm-git-logs mailing list