[Scummvm-git-logs] scummvm master -> 03ae234c5e7c2040688e31fd2077dbde6db00f87

mgerhardy noreply at scummvm.org
Thu Jun 2 08:10:10 UTC 2022


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

Summary:
ca293e49aa TWINE: helper macros for seconds
35e0a747a4 TWINE: don't show the behaviour dialog in classic mode
bd99e76dfa TWINE: fixed lba1 classic date
03ae234c5e TWINE: implemented parts of the new game + option from lba1 classic


Commit: ca293e49aab7cc2c42720cca61d82bc2cb177fc4
    https://github.com/scummvm/scummvm/commit/ca293e49aab7cc2c42720cca61d82bc2cb177fc4
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2022-06-02T10:09:25+02:00

Commit Message:
TWINE: helper macros for seconds

Changed paths:
    engines/twine/renderer/redraw.cpp
    engines/twine/renderer/screens.cpp
    engines/twine/scene/gamestate.cpp
    engines/twine/scene/scene.cpp
    engines/twine/script/script_life_v1.cpp
    engines/twine/script/script_move_v1.cpp
    engines/twine/twine.cpp
    engines/twine/twine.h


diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp
index 930a146d3d9..e831150ca69 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -166,7 +166,7 @@ void Redraw::addOverlay(OverlayType type, int16 info0, int16 x, int16 y, int16 i
 			overlay->y = y;
 			overlay->info1 = info1;
 			overlay->posType = posType;
-			overlay->lifeTime = _engine->_lbaTime + lifeTime * 50;
+			overlay->lifeTime = _engine->_lbaTime + TO_SECONDS(lifeTime);
 			break;
 		}
 	}
diff --git a/engines/twine/renderer/screens.cpp b/engines/twine/renderer/screens.cpp
index ee1be96f211..5fca7a5497c 100644
--- a/engines/twine/renderer/screens.cpp
+++ b/engines/twine/renderer/screens.cpp
@@ -183,7 +183,7 @@ void Screens::adjustCrossPalette(const uint32 *pal1, const uint32 *pal2) {
 	const uint8 *pal2p = (const uint8 *)pal2;
 	uint8 *paletteOut = (uint8 *)pal;
 	do {
-		FrameMarker frame(_engine, 50);
+		FrameMarker frame(_engine, DEFAULT_HZ);
 		counter = 0;
 
 		uint8 *newR = &paletteOut[counter];
@@ -217,7 +217,7 @@ void Screens::fadeToBlack(const uint32 *pal) {
 	}
 
 	for (int32 i = 100; i >= 0; i -= 3) {
-		FrameMarker frame(_engine, 50);
+		FrameMarker frame(_engine, DEFAULT_HZ);
 		adjustPalette(0, 0, 0, pal, i);
 	}
 
@@ -226,7 +226,7 @@ void Screens::fadeToBlack(const uint32 *pal) {
 
 void Screens::fadeToPal(const uint32 *pal) {
 	for (int32 i = 0; i <= 100; i += 3) {
-		FrameMarker frame(_engine, 50);
+		FrameMarker frame(_engine, DEFAULT_HZ);
 		adjustPalette(0, 0, 0, pal, i);
 	}
 
@@ -276,14 +276,14 @@ void Screens::setBackPal() {
 
 void Screens::fadePalRed(const uint32 *pal) {
 	for (int32 i = 100; i >= 0; i -= 2) {
-		FrameMarker frame(_engine, 50);
+		FrameMarker frame(_engine, DEFAULT_HZ);
 		adjustPalette(0xFF, 0, 0, pal, i);
 	}
 }
 
 void Screens::fadeRedPal(const uint32 *pal) {
 	for (int32 i = 0; i <= 100; i += 2) {
-		FrameMarker frame(_engine, 50);
+		FrameMarker frame(_engine, DEFAULT_HZ);
 		adjustPalette(0xFF, 0, 0, pal, i);
 	}
 }
diff --git a/engines/twine/scene/gamestate.cpp b/engines/twine/scene/gamestate.cpp
index fda6d4ef40b..290bbef9ca6 100644
--- a/engines/twine/scene/gamestate.cpp
+++ b/engines/twine/scene/gamestate.cpp
@@ -503,7 +503,7 @@ void GameState::processGameoverAnimation() {
 	_engine->_interface->setClip(rect);
 
 	Common::Rect dummy;
-	while (!_engine->_input->toggleAbortAction() && (_engine->_lbaTime - startLbaTime) <= 500) {
+	while (!_engine->_input->toggleAbortAction() && (_engine->_lbaTime - startLbaTime) <= TO_SECONDS(10)) {
 		FrameMarker frame(_engine, 66);
 		_engine->readKeys();
 		if (_engine->shouldQuit()) {
diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp
index f3b2417577f..724f84a7eeb 100644
--- a/engines/twine/scene/scene.cpp
+++ b/engines/twine/scene/scene.cpp
@@ -668,7 +668,7 @@ void Scene::processEnvironmentSound() {
 	}
 
 	// compute next ambiance timer
-	_sampleAmbienceTime = _engine->_lbaTime + (_engine->getRandomNumber(_sampleMinDelayRnd) + _sampleMinDelay) * 50;
+	_sampleAmbienceTime = _engine->_lbaTime + TO_SECONDS(_engine->getRandomNumber(_sampleMinDelayRnd) + _sampleMinDelay);
 }
 
 void Scene::processZoneExtraBonus(ZoneStruct *zone) {
diff --git a/engines/twine/script/script_life_v1.cpp b/engines/twine/script/script_life_v1.cpp
index 3fc45938812..0d47e923a7f 100644
--- a/engines/twine/script/script_life_v1.cpp
+++ b/engines/twine/script/script_life_v1.cpp
@@ -952,9 +952,9 @@ static int32 lGIVE_GOLD_PIECES(TwinEEngine *engine, LifeScriptContext &ctx) {
 	for (int16 i = 0; i < OVERLAY_MAX_ENTRIES; i++) {
 		OverlayListStruct *overlay = &engine->_redraw->overlayList[i];
 		if (overlay->info0 != -1 && overlay->type == OverlayType::koNumberRange) {
-			overlay->info0 = engine->_collision->getAverageValue(overlay->info1, overlay->info0, 100, overlay->lifeTime - engine->_lbaTime - 50);
+			overlay->info0 = engine->_collision->getAverageValue(overlay->info1, overlay->info0, 100, overlay->lifeTime - engine->_lbaTime - TO_SECONDS(1));
 			overlay->info1 = engine->_gameState->_inventoryNumKashes;
-			overlay->lifeTime = engine->_lbaTime + 150;
+			overlay->lifeTime = engine->_lbaTime + TO_SECONDS(3);
 			hideRange = true;
 			break;
 		}
diff --git a/engines/twine/script/script_move_v1.cpp b/engines/twine/script/script_move_v1.cpp
index 48798316550..7aaf3a942a4 100644
--- a/engines/twine/script/script_move_v1.cpp
+++ b/engines/twine/script/script_move_v1.cpp
@@ -385,7 +385,7 @@ static int32 mWAIT_NUM_SECOND(TwinEEngine *engine, MoveScriptContext &ctx) {
 	debugC(3, kDebugLevels::kDebugScripts, "MOVE::WAIT_NUM_SECOND(%i, %i)", (int)numSeconds, currentTime);
 
 	if (currentTime == 0) {
-		currentTime = engine->_lbaTime + numSeconds * 50;
+		currentTime = engine->_lbaTime + TO_SECONDS(numSeconds);
 		ctx.stream.rewind(4);
 		ctx.stream.writeSint32LE(currentTime);
 	}
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index d6748c64a39..3fcc5b13514 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -720,7 +720,7 @@ void TwinEEngine::processInventoryAction() {
 			penguin->setBrickShape(ShapeType::kNone);
 			_movements->moveActor(penguin->_angle, penguin->_angle, penguin->_speed, &penguin->_move);
 			_gameState->removeItem(InventoryItems::kiPenguin);
-			penguin->_delayInMillis = _lbaTime + 1500;
+			penguin->_delayInMillis = _lbaTime + TO_SECONDS(30);
 		}
 		break;
 	}
diff --git a/engines/twine/twine.h b/engines/twine/twine.h
index 9d1e96d3f90..0a222629c74 100644
--- a/engines/twine/twine.h
+++ b/engines/twine/twine.h
@@ -48,6 +48,8 @@ namespace TwinE {
 
 /** Default frames per second */
 #define DEFAULT_FRAMES_PER_SECOND 20
+#define DEFAULT_HZ (1000 / DEFAULT_FRAMES_PER_SECOND)
+#define TO_SECONDS(x) (DEFAULT_HZ * (x))
 
 #define ORIGINAL_WIDTH 640
 #define ORIGINAL_HEIGHT 480


Commit: 35e0a747a4e7602214f339a037a3bca229746828
    https://github.com/scummvm/scummvm/commit/35e0a747a4e7602214f339a037a3bca229746828
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2022-06-02T10:09:25+02:00

Commit Message:
TWINE: don't show the behaviour dialog in classic mode

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


diff --git a/engines/twine/renderer/redraw.cpp b/engines/twine/renderer/redraw.cpp
index e831150ca69..154227d3bf3 100644
--- a/engines/twine/renderer/redraw.cpp
+++ b/engines/twine/renderer/redraw.cpp
@@ -642,6 +642,35 @@ void Redraw::renderOverlays() {
 	}
 }
 
+void Redraw::setRenderText(const Common::String &text) {
+	_text = text;
+	if (_text.empty()) {
+		_textDisappearTime = -1;
+	} else {
+		_textDisappearTime = _engine->_lbaTime + TO_SECONDS(1);
+	}
+}
+
+void Redraw::renderText() {
+	if (_textDisappearTime <= _engine->_lbaTime) {
+		return;
+	}
+	if (_text.empty()) {
+		return;
+	}
+	_engine->_text->setFontColor(COLOR_WHITE);
+
+	const int padding = 10;
+	const int x = padding;
+	const int height = _engine->_text->lineHeight;
+	const int y = _engine->height() - height - padding;
+	const int width = _engine->_text->getTextSize(_text.c_str());
+	_engine->_text->drawText(x, y, _text.c_str());
+	_engine->copyBlockPhys(x, y, x + width, y + height);
+	const Common::Rect redraw(x, y, x + width, y + height);
+	addRedrawArea(redraw);
+}
+
 void Redraw::redrawEngineActions(bool bgRedraw) {
 	int32 tmp_projPosX = _projPosScreen.x;
 	int32 tmp_projPosY = _projPosScreen.y;
@@ -683,6 +712,7 @@ void Redraw::redrawEngineActions(bool bgRedraw) {
 	}
 
 	renderOverlays();
+	renderText();
 
 	_engine->_interface->resetClip();
 
diff --git a/engines/twine/renderer/redraw.h b/engines/twine/renderer/redraw.h
index 1a7753f44e2..c5f340c08d9 100644
--- a/engines/twine/renderer/redraw.h
+++ b/engines/twine/renderer/redraw.h
@@ -109,6 +109,10 @@ private:
 
 	IVec3 _projPosScreen;
 
+	// big font shadow text in the lower left corner
+	Common::String _text;
+	int32 _textDisappearTime = -1;
+
 	/**
 	 * Add a certain region to the current redraw list array
 	 * @param redrawArea redraw the region
@@ -130,6 +134,7 @@ private:
 	int32 fillExtraDrawingList(DrawListStruct *drawList, int32 drawListPos);
 	void processDrawList(DrawListStruct *drawList, int32 drawListPos, bool bgRedraw);
 	void renderOverlays();
+	void renderText();
 
 public:
 	Redraw(TwinEEngine *engine);
@@ -149,6 +154,8 @@ public:
 
 	OverlayListStruct overlayList[OVERLAY_MAX_ENTRIES];
 
+	void setRenderText(const Common::String &text);
+
 	// InitIncrustDisp
 	void addOverlay(OverlayType type, int16 info0, int16 x, int16 y, int16 info1, OverlayPosType posType, int16 lifeTime);
 
diff --git a/engines/twine/text.cpp b/engines/twine/text.cpp
index f4b07367964..0eb559045fe 100644
--- a/engines/twine/text.cpp
+++ b/engines/twine/text.cpp
@@ -39,6 +39,7 @@
 #include "twine/resources/resources.h"
 #include "twine/scene/gamestate.h"
 #include "twine/scene/scene.h"
+#include "twine/shared.h"
 #include "twine/twine.h"
 
 namespace TwinE {
@@ -225,7 +226,7 @@ void Text::drawCharacterShadow(int32 x, int32 y, uint8 character, int32 color, C
 	}
 }
 
-void Text::drawText(int32 x, int32 y, const char *dialogue) {
+void Text::drawText(int32 x, int32 y, const char *dialogue, bool shadow) {
 	// if the font is not defined
 	if (_engine->_resources->_fontPtr == nullptr) {
 		return;
@@ -241,7 +242,12 @@ void Text::drawText(int32 x, int32 y, const char *dialogue) {
 			x += _dialCharSpace;
 		} else {
 			const int32 dialTextSize = getCharWidth(currChar);
-			drawCharacter(x, y, currChar); // draw the character on screen
+			if (shadow) {
+				Common::Rect dirtyRect;
+				drawCharacterShadow(x, y, currChar, COLOR_BLACK, dirtyRect);
+			} else {
+				drawCharacter(x, y, currChar); // draw the character on screen
+			}
 			// add the length of the space between 2 characters
 			x += _dialSpaceBetween;
 			// add the length of the current character
diff --git a/engines/twine/text.h b/engines/twine/text.h
index 13a860d6af5..6b114dd2864 100644
--- a/engines/twine/text.h
+++ b/engines/twine/text.h
@@ -172,7 +172,7 @@ public:
 	 * @param y Y coordinate in screen
 	 * @param dialogue ascii text to display
 	 */
-	void drawText(int32 x, int32 y, const char *dialogue);
+	void drawText(int32 x, int32 y, const char *dialogue, bool shadow = false);
 
 	bool drawTextProgressive(TextId index, bool playVox = true, bool loop = true);
 
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index 3fcc5b13514..71fcbd9e002 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -842,9 +842,17 @@ bool TwinEEngine::runGameEngine() { // mainLoopInteration
 			} else if (_input->isActionActive(TwinEActionType::QuickBehaviourDiscreet, false)) {
 				_actor->_heroBehaviour = HeroBehaviourType::kDiscrete;
 			}
-			ScopedEngineFreeze scopedFreeze(this);
-			_menu->processBehaviourMenu();
-			_redraw->redrawEngineActions(true);
+			if (isLba1Classic()) {
+				_text->initTextBank(TextBankId::Options_and_menus);
+				char text[256];
+				_text->getMenuText(_actor->getTextIdForBehaviour(), text, sizeof(text));
+				_redraw->setRenderText(text);
+				_text->initSceneTextBank();
+			} else {
+				ScopedEngineFreeze scopedFreeze(this);
+				_menu->processBehaviourMenu();
+				_redraw->redrawEngineActions(true);
+			}
 		}
 
 		// use Proto-Pack


Commit: bd99e76dfa57e4d59330ebaeb3d140e16135c497
    https://github.com/scummvm/scummvm/commit/bd99e76dfa57e4d59330ebaeb3d140e16135c497
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2022-06-02T10:09:25+02:00

Commit Message:
TWINE: fixed lba1 classic date

Changed paths:
    engines/twine/detection.cpp


diff --git a/engines/twine/detection.cpp b/engines/twine/detection.cpp
index fa6cfebae86..8adc5f461d6 100644
--- a/engines/twine/detection.cpp
+++ b/engines/twine/detection.cpp
@@ -511,8 +511,8 @@ static const ADGameDescription twineGameDescriptions[] = {
 	},
 
 	// Little Big Adventure - GOG Version
-	// LBA.GOG
-	// 11 October 2011 at 17:30
+	// TLBA1C.exe
+	// 1st June 2022 02:18
 	{
 		"lba",
 		"GOG Classic Version",


Commit: 03ae234c5e7c2040688e31fd2077dbde6db00f87
    https://github.com/scummvm/scummvm/commit/03ae234c5e7c2040688e31fd2077dbde6db00f87
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2022-06-02T10:09:25+02:00

Commit Message:
TWINE: implemented parts of the new game + option from lba1 classic

Changed paths:
    engines/twine/menu/menu.cpp
    engines/twine/menu/menu.h
    engines/twine/scene/gamestate.cpp
    engines/twine/scene/gamestate.h
    engines/twine/scene/scene.cpp
    engines/twine/shared.h


diff --git a/engines/twine/menu/menu.cpp b/engines/twine/menu/menu.cpp
index b10d15be28f..30c3e4cac8f 100644
--- a/engines/twine/menu/menu.cpp
+++ b/engines/twine/menu/menu.cpp
@@ -27,6 +27,7 @@
 #include "common/events.h"
 #include "common/keyboard.h"
 #include "common/scummsys.h"
+#include "common/str.h"
 #include "common/system.h"
 #include "common/util.h"
 #include "graphics/cursorman.h"
@@ -97,6 +98,14 @@ static MenuSettings createMainMenu(bool lba1) {
 	return settings;
 }
 
+static MenuSettings createLba1ClassicNewGame() {
+	MenuSettings settings;
+	settings.addButton(TextId::kReturnMenu);
+	settings.addButton(TextId::kNewGame);
+	settings.addButton(TextId::kNewGamePlus);
+	return settings;
+}
+
 static MenuSettings createGiveUpMenu() {
 	MenuSettings settings;
 	settings.setButtonsBoxHeight(240);
@@ -157,9 +166,14 @@ static MenuSettings createVolumeMenu() {
 
 const char *MenuSettings::getButtonText(Text *text, int buttonIndex) {
 	if (_buttonTexts[buttonIndex].empty()) {
-		const TextId textId = getButtonTextId(buttonIndex);
+		TextId textId = getButtonTextId(buttonIndex);
 		char dialText[256] = "";
-		text->getMenuText(textId, dialText, sizeof(dialText));
+		if (textId == TextId::kNewGamePlus) {
+			text->getMenuText(TextId::kNewGame, dialText, sizeof(dialText));
+			Common::strlcat(dialText, "+", sizeof(dialText));
+		} else {
+			text->getMenuText(textId, dialText, sizeof(dialText));
+		}
 		_buttonTexts[buttonIndex] = dialText;
 	}
 	return _buttonTexts[buttonIndex].c_str();
@@ -174,6 +188,7 @@ Menu::Menu(TwinEEngine *engine) {
 	_saveManageMenuState = _priv::createSaveManageMenu();
 	_giveUpMenuState = _priv::createGiveUpMenu();
 	_mainMenuState = _priv::createMainMenu(engine->isLBA1());
+	_newGameMenuState = _priv::createLba1ClassicNewGame();
 	_advOptionsMenuState = _priv::createAdvancedOptionsMenu();
 
 	Common::fill(&_behaviourAnimState[0], &_behaviourAnimState[4], 0);
@@ -740,6 +755,34 @@ int32 Menu::optionsMenu() {
 	return 0;
 }
 
+int32 Menu::newGameClassicMenu() {
+	_engine->restoreFrontBuffer();
+
+	ScopedCursor scoped(_engine);
+	for (;;) {
+		switch (processMenu(&_newGameMenuState)) {
+		case (int32)TextId::kReturnGame:
+		case (int32)TextId::kReturnMenu: {
+			return 0;
+		}
+		case (int32)TextId::kNewGamePlus:
+		case (int32)TextId::kNewGame: {
+			_engine->_gameState->_endGameItems = true;
+			if (_engine->_menuOptions->newGameMenu()) {
+				return 1;
+			}
+			break;
+		}
+		case kQuitEngine:
+			return kQuitEngine;
+		default:
+			break;
+		}
+	}
+
+	return 0;
+}
+
 static const byte cursorArrow[] = {
 	1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
 	1, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3,
@@ -789,6 +832,12 @@ EngineState Menu::run() {
 	switch (processMenu(&_mainMenuState)) {
 	case (int32)TextId::toNewGame:
 	case (int32)TextId::kNewGame: {
+		if (_engine->isLba1Classic()) {
+			if (newGameClassicMenu()) {
+				return EngineState::GameLoop;
+			}
+			break;
+		}
 		if (_engine->_menuOptions->newGameMenu()) {
 			return EngineState::GameLoop;
 		}
diff --git a/engines/twine/menu/menu.h b/engines/twine/menu/menu.h
index 52211c05df8..da31ec3e02f 100644
--- a/engines/twine/menu/menu.h
+++ b/engines/twine/menu/menu.h
@@ -153,6 +153,7 @@ private:
 	MenuSettings _saveManageMenuState;
 	MenuSettings _giveUpMenuState;
 	MenuSettings _mainMenuState;
+	MenuSettings _newGameMenuState;
 	MenuSettings _advOptionsMenuState;
 	MenuSettings _optionsMenuState;
 
@@ -240,6 +241,8 @@ public:
 	/** Process hero behaviour menu */
 	void processBehaviourMenu();
 
+	int32 newGameClassicMenu();
+
 	/** Process in-game inventory menu */
 	void processInventoryMenu();
 };
diff --git a/engines/twine/scene/gamestate.cpp b/engines/twine/scene/gamestate.cpp
index 290bbef9ca6..b1514ad4904 100644
--- a/engines/twine/scene/gamestate.cpp
+++ b/engines/twine/scene/gamestate.cpp
@@ -551,6 +551,27 @@ void GameState::addGas(int16 value) {
 	setGas(_inventoryNumGas + value);
 }
 
+// late game items from lba1 classic new game +
+void GameState::handleLateGameItems() {
+	if (!_endGameItems) {
+		return;
+	}
+	debug("Give end game items");
+	_endGameItems = false;
+	_magicLevelIdx = 4;
+	setMaxMagicPoints();
+	giveItem(InventoryItems::kiUseSabre);
+	giveItem(InventoryItems::kiProtoPack);
+	giveItem(InventoryItems::kiHolomap);
+	giveItem(InventoryItems::kiTunic);
+	giveItem(InventoryItems::kiMagicBall);
+	giveItem(InventoryItems::kSendellsMedallion);
+	giveItem(InventoryItems::kiPenguin);
+	giveItem(InventoryItems::kGasItem);
+	giveItem(InventoryItems::kiCloverLeaf);
+	addGas(10);
+}
+
 int16 GameState::setKashes(int16 value) {
 	_inventoryNumKashes = CLIP<int16>(value, 0, 999);
 	if (_engine->_gameState->_inventoryNumKashes >= 500) {
diff --git a/engines/twine/scene/gamestate.h b/engines/twine/scene/gamestate.h
index 7f22e7b1b5e..b64916f9b6c 100644
--- a/engines/twine/scene/gamestate.h
+++ b/engines/twine/scene/gamestate.h
@@ -119,6 +119,7 @@ public:
 
 	/** Its using FunFrock Sabre */
 	bool _usingSabre = false;
+	bool _endGameItems = false;
 
 	/**
 	 * Inventory used flags
@@ -173,6 +174,8 @@ public:
 	int16 setMaxMagicPoints();
 	int16 setLeafBoxes(int16 val);
 
+	void handleLateGameItems();
+
 	void addGas(int16 value);
 	void addKeys(int16 val);
 	void addKashes(int16 val);
diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp
index 724f84a7eeb..6d6bc68bbcd 100644
--- a/engines/twine/scene/scene.cpp
+++ b/engines/twine/scene/scene.cpp
@@ -601,6 +601,7 @@ void Scene::changeScene() {
 		debug(2, "Scene %i music track id: %i", _currentSceneIdx, _sceneMusic);
 		_engine->_music->playTrackMusic(_sceneMusic);
 	}
+	_engine->_gameState->handleLateGameItems();
 }
 
 ActorStruct *Scene::getActor(int32 actorIdx) {
diff --git a/engines/twine/shared.h b/engines/twine/shared.h
index 96db5668165..126b4bafcaf 100644
--- a/engines/twine/shared.h
+++ b/engines/twine/shared.h
@@ -492,6 +492,7 @@ enum class TextId : int16 {
 	kReturnGame = 15,
 	kSaveSettings = 16,
 	kNewGame = 20,
+	kNewGamePlus = 255,
 	kContinueGame = 21,
 	kQuit = 22,
 	kOptions = 23,




More information about the Scummvm-git-logs mailing list