[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