[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