[Scummvm-git-logs] scummvm master -> 0bb3b4742b58d23fe2eefa98509a25e4d5481cb6

mgerhardy martin.gerhardy at gmail.com
Mon Jan 25 16:47:31 UTC 2021


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:
01e9d6c3e9 TWINE: fixed credits sequence playing while we are in question dialog
140a6f1dfc TWINE: use enum scoped constants
d7ff84d317 TWINE: draw holomap trajectory on scene change
c2e4c33fe7 TWINE: fixed resetting the scene state and projection after showing holomap trajectory
0bb3b4742b TWINE: added new debug commands


Commit: 01e9d6c3e9f1cfd0d80a997da9890af8f664a380
    https://github.com/scummvm/scummvm/commit/01e9d6c3e9f1cfd0d80a997da9890af8f664a380
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-24T16:31:51+01:00

Commit Message:
TWINE: fixed credits sequence playing while we are in question dialog

see https://bugs.scummvm.org/ticket/12084

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


diff --git a/engines/twine/menu/menu.cpp b/engines/twine/menu/menu.cpp
index 9e0f78f9d7..92d8d0ca81 100644
--- a/engines/twine/menu/menu.cpp
+++ b/engines/twine/menu/menu.cpp
@@ -387,7 +387,7 @@ int16 Menu::drawButtons(MenuSettings *menuSettings, bool hover) {
 	return mouseActiveButton;
 }
 
-int32 Menu::processMenu(MenuSettings *menuSettings) {
+int32 Menu::processMenu(MenuSettings *menuSettings, bool showCredits) {
 	int16 currentButton = menuSettings->getActiveButton();
 	bool buttonsNeedRedraw = true;
 	const int32 numEntry = menuSettings->getButtonCount();
@@ -558,7 +558,7 @@ int32 Menu::processMenu(MenuSettings *menuSettings) {
 			}
 			startMillis = loopMillis;
 		}
-		if (loopMillis - startMillis > 15000) {
+		if (showCredits && loopMillis - startMillis > 15000) {
 			_engine->_menuOptions->showCredits();
 			startMillis = _engine->_system->getMillis();
 			_engine->_screens->loadMenuImage(false);
diff --git a/engines/twine/menu/menu.h b/engines/twine/menu/menu.h
index b6bdb35cfa..85e76e214b 100644
--- a/engines/twine/menu/menu.h
+++ b/engines/twine/menu/menu.h
@@ -221,7 +221,7 @@ public:
 	 * @param menuSettings menu settings array with the information to build the menu options
 	 * @return pressed menu button identification
 	 */
-	int32 processMenu(MenuSettings *menuSettings);
+	int32 processMenu(MenuSettings *menuSettings, bool showCredits = true);
 
 	bool init();
 
diff --git a/engines/twine/scene/gamestate.cpp b/engines/twine/scene/gamestate.cpp
index 0780661e47..e8a07e8f73 100644
--- a/engines/twine/scene/gamestate.cpp
+++ b/engines/twine/scene/gamestate.cpp
@@ -430,7 +430,7 @@ void GameState::processGameChoices(int32 choiceIdx) {
 
 	_engine->_text->drawAskQuestion(choiceIdx);
 
-	_engine->_menu->processMenu(&gameChoicesSettings);
+	_engine->_menu->processMenu(&gameChoicesSettings, false);
 	const int16 activeButton = gameChoicesSettings.getActiveButton();
 	choiceAnswer = gameChoices[activeButton];
 


Commit: 140a6f1dfc1ed5cf6f2605e673b58df814bfe735
    https://github.com/scummvm/scummvm/commit/140a6f1dfc1ed5cf6f2605e673b58df814bfe735
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-24T16:40:18+01:00

Commit Message:
TWINE: use enum scoped constants

Changed paths:
    engines/twine/scene/scene.cpp


diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp
index 3f0e24099c..efb1e8ce3e 100644
--- a/engines/twine/scene/scene.cpp
+++ b/engines/twine/scene/scene.cpp
@@ -478,7 +478,7 @@ void Scene::processActorZones(int32 actorIdx) {
 		    (currentY >= zone->bottomLeft.y && currentY <= zone->topRight.y) &&
 		    (currentZ >= zone->bottomLeft.z && currentZ <= zone->topRight.z)) {
 			switch (zone->type) {
-			case kCube:
+			case ZoneType::kCube:
 				if (IS_HERO(actorIdx) && actor->life > 0) {
 					needChangeScene = zone->infoData.ChangeScene.newSceneIdx;
 					_zoneHeroX = actor->x - zone->bottomLeft.x + zone->infoData.ChangeScene.x;
@@ -487,7 +487,7 @@ void Scene::processActorZones(int32 actorIdx) {
 					heroPositionType = ScenePositionType::kZone;
 				}
 				break;
-			case kCamera:
+			case ZoneType::kCamera:
 				if (currentlyFollowedActor == actorIdx && !_engine->_debugGrid->useFreeCamera) {
 					_engine->disableScreenRecenter = true;
 					if (_engine->_grid->newCameraX != zone->infoData.CameraView.x || _engine->_grid->newCameraY != zone->infoData.CameraView.y || _engine->_grid->newCameraZ != zone->infoData.CameraView.z) {
@@ -498,10 +498,10 @@ void Scene::processActorZones(int32 actorIdx) {
 					}
 				}
 				break;
-			case kSceneric:
+			case ZoneType::kSceneric:
 				actor->zone = zone->infoData.Sceneric.zoneIdx;
 				break;
-			case kGrid:
+			case ZoneType::kGrid:
 				if (currentlyFollowedActor == actorIdx) {
 					tmpCellingGrid = 1;
 					if (_engine->_grid->useCellingGrid != zone->infoData.CeillingGrid.newGrid) {
@@ -516,13 +516,13 @@ void Scene::processActorZones(int32 actorIdx) {
 					}
 				}
 				break;
-			case kObject:
+			case ZoneType::kObject:
 				if (IS_HERO(actorIdx) && _engine->_movements->shouldTriggerZoneAction()) {
 					_engine->_animations->initAnim(AnimationTypes::kAction, 1, AnimationTypes::kStanding, 0);
 					processZoneExtraBonus(zone);
 				}
 				break;
-			case kText:
+			case ZoneType::kText:
 				if (IS_HERO(actorIdx) && _engine->_movements->shouldTriggerZoneAction()) {
 					_engine->freezeTime();
 					_engine->_text->setFontCrossColor(zone->infoData.DisplayText.textColor);
@@ -532,7 +532,7 @@ void Scene::processActorZones(int32 actorIdx) {
 					_engine->_redraw->redrawEngineActions(true);
 				}
 				break;
-			case kLadder:
+			case ZoneType::kLadder:
 				if (IS_HERO(actorIdx) && _engine->_actor->heroBehaviour != HeroBehaviourType::kProtoPack && (actor->anim == AnimationTypes::kForward || actor->anim == AnimationTypes::kTopLadder || actor->anim == AnimationTypes::kClimbLadder)) {
 					_engine->_movements->rotateActor(actor->boudingBox.x.bottomLeft, actor->boudingBox.z.bottomLeft, actor->angle + ANGLE_360 + ANGLE_135);
 					_engine->_renderer->destX += _engine->_movements->processActorX;


Commit: d7ff84d317f7b4e05eecf5f75dfcaec2ce1ef5ab
    https://github.com/scummvm/scummvm/commit/d7ff84d317f7b4e05eecf5f75dfcaec2ce1ef5ab
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-24T16:54:30+01:00

Commit Message:
TWINE: draw holomap trajectory on scene change

Changed paths:
    engines/twine/scene/scene.cpp
    engines/twine/scene/scene.h
    engines/twine/script/script_life_v1.cpp


diff --git a/engines/twine/scene/scene.cpp b/engines/twine/scene/scene.cpp
index efb1e8ce3e..60fdedbee2 100644
--- a/engines/twine/scene/scene.cpp
+++ b/engines/twine/scene/scene.cpp
@@ -311,7 +311,10 @@ void Scene::changeScene() {
 
 	initScene(needChangeScene);
 
-	// TODO: treat holomap trajectories
+	if (holomapTrajectory != -1) {
+		_engine->_holomap->drawHolomapTrajectory(holomapTrajectory);
+		holomapTrajectory = -1;
+	}
 
 	if (needChangeScene == LBA1SceneId::Citadel_Island_end_sequence_1 || needChangeScene == LBA1SceneId::Citadel_Island_end_sequence_2) {
 		sceneTextBank = TextBankId::Tippet_Island;
diff --git a/engines/twine/scene/scene.h b/engines/twine/scene/scene.h
index 36fe2388e3..b11d92322c 100644
--- a/engines/twine/scene/scene.h
+++ b/engines/twine/scene/scene.h
@@ -309,6 +309,8 @@ public:
 	int32 currentSceneIdx = LBA1SceneId::Citadel_Island_Prison;
 	int32 previousSceneIdx = LBA1SceneId::Citadel_Island_Prison;
 
+	int32 holomapTrajectory = -1;
+
 	int32 sceneTextBank = TextBankId::None;
 	int32 alphaLight = ANGLE_0;
 	int32 betaLight = ANGLE_0;
diff --git a/engines/twine/script/script_life_v1.cpp b/engines/twine/script/script_life_v1.cpp
index 0b929313a2..a5b8496ad7 100644
--- a/engines/twine/script/script_life_v1.cpp
+++ b/engines/twine/script/script_life_v1.cpp
@@ -1640,7 +1640,7 @@ static int32 lANIM_SET(TwinEEngine *engine, LifeScriptContext &ctx) {
  * @note Opcode @c 0x60
  */
 static int32 lHOLOMAP_TRAJ(TwinEEngine *engine, LifeScriptContext &ctx) {
-	engine->_holomap->drawHolomapTrajectory(ctx.stream.readByte());
+	engine->_scene->holomapTrajectory = ctx.stream.readByte();
 	return 0;
 }
 


Commit: c2e4c33fe764e7b8b8e83c8bd14d8928918177fc
    https://github.com/scummvm/scummvm/commit/c2e4c33fe764e7b8b8e83c8bd14d8928918177fc
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-24T17:07:19+01:00

Commit Message:
TWINE: fixed resetting the scene state and projection after showing holomap trajectory

Changed paths:
    engines/twine/holomap.cpp


diff --git a/engines/twine/holomap.cpp b/engines/twine/holomap.cpp
index dbf8ce6f34..ef3b9262c0 100644
--- a/engines/twine/holomap.cpp
+++ b/engines/twine/holomap.cpp
@@ -333,7 +333,12 @@ void Holomap::drawHolomapTrajectory(int32 trajectoryIndex) {
 		}
 	}
 	_engine->_screens->fadeToBlack(_engine->_screens->paletteRGBA);
-	// TODO: flip()?
+	_engine->_screens->fadeIn(_engine->_screens->paletteRGBA);
+	_engine->setPalette(_engine->_screens->paletteRGBA);
+	_engine->_gameState->initEngineProjections();
+	_engine->_interface->loadClip();
+
+	_engine->_text->initSceneTextBank();
 	free(animPtr);
 	free(modelPtr);
 }


Commit: 0bb3b4742b58d23fe2eefa98509a25e4d5481cb6
    https://github.com/scummvm/scummvm/commit/0bb3b4742b58d23fe2eefa98509a25e4d5481cb6
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-01-25T17:45:36+01:00

Commit Message:
TWINE: added new debug commands

Changed paths:
    engines/twine/debugger/console.cpp
    engines/twine/debugger/console.h
    engines/twine/scene/gamestate.cpp
    engines/twine/scene/gamestate.h


diff --git a/engines/twine/debugger/console.cpp b/engines/twine/debugger/console.cpp
index c18661f8a1..b930ddafad 100644
--- a/engines/twine/debugger/console.cpp
+++ b/engines/twine/debugger/console.cpp
@@ -34,8 +34,11 @@
 namespace TwinE {
 
 TwinEConsole::TwinEConsole(TwinEEngine *engine) : _engine(engine), GUI::Debugger() {
+	registerCmd("give_item", WRAP_METHOD(TwinEConsole, doGiveItem));
 	registerCmd("give_allitems", WRAP_METHOD(TwinEConsole, doGiveAllItems));
 	registerCmd("give_key", WRAP_METHOD(TwinEConsole, doGiveKey));
+	registerCmd("give_gas", WRAP_METHOD(TwinEConsole, doGiveGas));
+	registerCmd("give_kashes", WRAP_METHOD(TwinEConsole, doGiveKashes));
 	registerCmd("play_video", WRAP_METHOD(TwinEConsole, doPlayVideo));
 	registerCmd("change_scene", WRAP_METHOD(TwinEConsole, doChangeScene));
 	registerCmd("magic_points", WRAP_METHOD(TwinEConsole, doAddMagicPoints));
@@ -208,7 +211,25 @@ bool TwinEConsole::doGiveKey(int argc, const char **argv) {
 	if (argc >= 2) {
 		amount = atoi(argv[1]);
 	}
-	_engine->_gameState->inventoryNumKeys += amount;
+	_engine->_gameState->setKeys(_engine->_gameState->inventoryNumKeys + amount);
+	return true;
+}
+
+bool TwinEConsole::doGiveGas(int argc, const char **argv) {
+	int amount = 1;
+	if (argc >= 2) {
+		amount = atoi(argv[1]);
+	}
+	_engine->_gameState->setGas(_engine->_gameState->inventoryNumGas + amount);
+	return true;
+}
+
+bool TwinEConsole::doGiveKashes(int argc, const char **argv) {
+	int amount = 1;
+	if (argc >= 2) {
+		amount = atoi(argv[1]);
+	}
+	_engine->_gameState->setKashes(_engine->_gameState->inventoryNumKashes + amount);
 	return true;
 }
 
@@ -251,7 +272,7 @@ bool TwinEConsole::doSetHeroPosition(int argc, const char **argv) {
 bool TwinEConsole::doPlayVideo(int argc, const char **argv) {
 	if (argc <= 1) {
 		debugPrintf("Expected to get a video filename as first parameter\n");
-		return false;
+		return true;
 	}
 	_engine->queueMovie(argv[1]);
 	return true;
@@ -260,25 +281,78 @@ bool TwinEConsole::doPlayVideo(int argc, const char **argv) {
 bool TwinEConsole::doChangeScene(int argc, const char **argv) {
 	if (argc <= 1) {
 		debugPrintf("Expected to get a scene index as first parameter\n");
-		return false;
+		return true;
 	}
 	byte newSceneIndex = atoi(argv[1]);
 	if (newSceneIndex >= LBA1SceneId::SceneIdMax) {
 		debugPrintf("Scene index out of bounds\n");
-		return false;
+		return true;
 	}
 	_engine->_scene->needChangeScene = atoi(argv[1]);
 	_engine->_scene->changeScene();
 	return true;
 }
 
+static const char *ItemNames[] = {
+	"Holomap",
+	"MagicBall",
+	"UseSabre",
+	"GawleysHorn",
+	"Tunic",
+	"BookOfBu",
+	"SendellsMedallion",
+	"FlaskOfClearWater",
+	"RedCard",
+	"BlueCard",
+	"IDCard",
+	"MrMiesPass",
+	"ProtoPack",
+	"Snowboard",
+	"Pinguin",
+	"GasItem",
+	"PirateFlag",
+	"MagicFlute",
+	"SpaceGuitar",
+	"HairDryer",
+	"AncesteralKey",
+	"BottleOfSyrup",
+	"EmptyBottle",
+	"FerryTicket",
+	"Keypad",
+	"CoffeeCan",
+	"BonusList",
+	"CloverLeaf"
+};
+static_assert(ARRAYSIZE(ItemNames) == InventoryItems::MaxInventoryItems, "Array size doesn't match items");
+
+bool TwinEConsole::doGiveItem(int argc, const char **argv) {
+	if (argc <= 1) {
+		debugPrintf("Expected to get an item as first parameter\n");
+		for (int i = 0; i < ARRAYSIZE(ItemNames); ++i) {
+			debugPrintf(" - %2i: %s\n", i, ItemNames[i]);
+		}
+		return true;
+	}
+	byte itemIdx = atoi(argv[1]);
+	if (itemIdx >= InventoryItems::MaxInventoryItems) {
+		debugPrintf("Item index out of bounds\n");
+		return true;
+	}
+	GameState* state = _engine->_gameState;
+	state->setGameFlag(itemIdx, 1);
+	state->inventoryFlags[itemIdx] = 1;
+	state->setGameFlag(GAMEFLAG_INVENTORY_DISABLED, 0);
+
+	return true;
+}
+
 bool TwinEConsole::doGiveAllItems(int argc, const char **argv) {
 	GameState* state = _engine->_gameState;
 	for (int32 i = 0; i < NUM_INVENTORY_ITEMS; ++i) {
 		state->setGameFlag(i, 1);
 		state->inventoryFlags[i] = 1;
 	}
-	_engine->_gameState->setGameFlag(GAMEFLAG_INVENTORY_DISABLED, 0);
+	state->setGameFlag(GAMEFLAG_INVENTORY_DISABLED, 0);
 	int amount = 1;
 	if (argc >= 2) {
 		amount = atoi(argv[1]);
@@ -288,11 +362,8 @@ bool TwinEConsole::doGiveAllItems(int argc, const char **argv) {
 	state->inventoryNumLeafsBox += amount;
 	state->inventoryNumLeafs += amount;
 	state->inventoryMagicPoints += amount;
-	state->inventoryNumGas += amount;
-
-	if (state->inventoryNumKashes > 999) {
-		state->inventoryNumKashes = 999;
-	}
+	state->setGas(state->inventoryNumGas + amount);
+	state->setKashes(state->inventoryNumKashes + amount);
 
 	if (state->inventoryNumLeafsBox > 10) {
 		state->inventoryNumLeafsBox = 10;
@@ -302,10 +373,6 @@ bool TwinEConsole::doGiveAllItems(int argc, const char **argv) {
 		state->inventoryNumLeafs = state->inventoryNumLeafsBox;
 	}
 
-	if (state->inventoryNumGas > 100) {
-		state->inventoryNumGas = 100;
-	}
-
 	if (state->inventoryMagicPoints > state->magicLevelIdx * 20) {
 		state->inventoryMagicPoints = state->magicLevelIdx * 20;
 	}
diff --git a/engines/twine/debugger/console.h b/engines/twine/debugger/console.h
index 7199d1aeca..1311b9e864 100644
--- a/engines/twine/debugger/console.h
+++ b/engines/twine/debugger/console.h
@@ -39,11 +39,14 @@ private:
 	bool doPrintInventoryFlag(int argc, const char **argv);
 	bool doPrintHolomapFlag(int argc, const char **argv);
 	bool doSetHeroPosition(int argc, const char **argv);
+	bool doGiveItem(int argc, const char **argv);
 	bool doGiveAllItems(int argc, const char **argv);
 	bool doChangeScene(int argc, const char **argv);
 	bool doListMenuText(int argc, const char **argv);
 	bool doToggleDebug(int argc, const char **argv);
 	bool doGiveKey(int argc, const char **argv);
+	bool doGiveGas(int argc, const char **argv);
+	bool doGiveKashes(int argc, const char **argv);
 	bool doToggleZoneRendering(int argc, const char **argv);
 	bool doToggleClipRendering(int argc, const char **argv);
 	bool doToggleFreeCamera(int argc, const char **argv);
diff --git a/engines/twine/scene/gamestate.cpp b/engines/twine/scene/gamestate.cpp
index e8a07e8f73..eeb69010ed 100644
--- a/engines/twine/scene/gamestate.cpp
+++ b/engines/twine/scene/gamestate.cpp
@@ -523,4 +523,19 @@ void GameState::giveUp() {
 	_engine->_scene->stopRunningGame();
 }
 
+int16 GameState::setGas(int16 value) {
+	inventoryNumGas = MIN<int16>(100, value);
+	return inventoryNumGas;
+}
+
+int16 GameState::setKashes(int16 value) {
+	inventoryNumKashes = MIN<int16>(999, value);
+	return inventoryNumKashes;
+}
+
+int16 GameState::setKeys(int16 value) {
+	inventoryNumKeys = value;
+	return inventoryNumKeys;
+}
+
 } // namespace TwinE
diff --git a/engines/twine/scene/gamestate.h b/engines/twine/scene/gamestate.h
index 78ebb5535d..e95362508d 100644
--- a/engines/twine/scene/gamestate.h
+++ b/engines/twine/scene/gamestate.h
@@ -25,6 +25,7 @@
 
 #include "common/savefile.h"
 #include "common/scummsys.h"
+#include "common/util.h"
 #include "twine/holomap.h"
 #include "twine/menu/menu.h"
 #include "twine/scene/actor.h"
@@ -193,6 +194,10 @@ public:
 	/** Store the number of gas */
 	int16 inventoryNumGas = 0;
 
+	int16 setKeys(int16 value);
+	int16 setGas(int16 value);
+	int16 setKashes(int16 value);
+
 	/** Its using FunFrock Sabre */
 	bool usingSabre = false;
 




More information about the Scummvm-git-logs mailing list