[Scummvm-git-logs] scummvm master -> 77c33d1d90a176707f2f2bf228349d4490b60d69
AndywinXp
noreply at scummvm.org
Wed Jun 25 08:31:56 UTC 2025
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
f424d482b9 LASTEXPRESS: Avoid unnecessary PixelFormat conversions
5f2faa73bd LASTEXPRESS: DEBUGGER: Add Scene hotspot viewer
77c33d1d90 LASTEXPRESS: Tame some tight waiting loops
Commit: f424d482b9ffb3adf17e74f5f4803a75e9c95da2
https://github.com/scummvm/scummvm/commit/f424d482b9ffb3adf17e74f5f4803a75e9c95da2
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-25T10:26:58+02:00
Commit Message:
LASTEXPRESS: Avoid unnecessary PixelFormat conversions
Changed paths:
engines/lastexpress/data/gold_archive.cpp
engines/lastexpress/graphics.cpp
diff --git a/engines/lastexpress/data/gold_archive.cpp b/engines/lastexpress/data/gold_archive.cpp
index 15a1c333276..09535198fdb 100644
--- a/engines/lastexpress/data/gold_archive.cpp
+++ b/engines/lastexpress/data/gold_archive.cpp
@@ -203,7 +203,7 @@ int GoldArchiveManager::loadBG(const char *filename) {
_engine->getGraphicsManager()->_renderBox1.width = seqDataStream->readUint32LE();
_engine->getGraphicsManager()->_renderBox1.height = seqDataStream->readUint32LE();
- dec->setOutputPixelFormat(Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0));
+ dec->setOutputPixelFormat(Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0));
const Graphics::Surface *decodedSurf = dec->decodeFrame(*seqDataStream);
memcpy(bgSurface, decodedSurf->getPixels(), _engine->getGraphicsManager()->_renderBox1.width * _engine->getGraphicsManager()->_renderBox1.height * sizeof(PixMap));
diff --git a/engines/lastexpress/graphics.cpp b/engines/lastexpress/graphics.cpp
index b5fb56cc677..2f99e1204aa 100644
--- a/engines/lastexpress/graphics.cpp
+++ b/engines/lastexpress/graphics.cpp
@@ -27,7 +27,7 @@ namespace LastExpress {
GraphicsManager::GraphicsManager(LastExpressEngine *engine) {
_engine = engine;
- const Graphics::PixelFormat format(2, 5, 5, 5, 0, 10, 5, 0, 0);
+ const Graphics::PixelFormat format(2, 5, 6, 5, 0, 11, 5, 0, 0);
_screenSurface.create(640, 480, format);
_mainSurfaceIsInit = true;
Commit: 5f2faa73bdc8d71b2f6cddb4feb704416437e330
https://github.com/scummvm/scummvm/commit/5f2faa73bdc8d71b2f6cddb4feb704416437e330
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-25T10:27:44+02:00
Commit Message:
LASTEXPRESS: DEBUGGER: Add Scene hotspot viewer
Also rename main gfx buffers
Changed paths:
engines/lastexpress/data/archive.cpp
engines/lastexpress/data/gold_archive.cpp
engines/lastexpress/data/sprites.cpp
engines/lastexpress/debug.cpp
engines/lastexpress/fight/fight.cpp
engines/lastexpress/game/action.cpp
engines/lastexpress/game/credits.cpp
engines/lastexpress/game/logic.cpp
engines/lastexpress/game/logic.h
engines/lastexpress/game/nis.cpp
engines/lastexpress/graphics.cpp
engines/lastexpress/graphics.h
engines/lastexpress/lastexpress.cpp
engines/lastexpress/memory.cpp
engines/lastexpress/menu/menu.cpp
engines/lastexpress/shared.h
diff --git a/engines/lastexpress/data/archive.cpp b/engines/lastexpress/data/archive.cpp
index 6ab6c7715e6..69c484b9b28 100644
--- a/engines/lastexpress/data/archive.cpp
+++ b/engines/lastexpress/data/archive.cpp
@@ -316,7 +316,7 @@ int ArchiveManager::loadBG(const char *filename) {
tbm.width = _engine->getGraphicsManager()->_renderBox1.width;
tbm.height = _engine->getGraphicsManager()->_renderBox1.height;
- PixMap *bgSurface = _engine->getGraphicsManager()->_backgroundBuffer;
+ PixMap *bgSurface = _engine->getGraphicsManager()->_frontBuffer;
if (_engine->getLogicManager()->_doubleClickFlag &&
(_engine->mouseHasLeftClicked() || _engine->mouseHasRightClicked()) &&
@@ -368,14 +368,14 @@ int ArchiveManager::loadBG(const char *filename) {
}
if (_engine->getGraphicsManager()->_renderBox1.x) {
- _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_backgroundBuffer, 0, 0, _engine->getGraphicsManager()->_renderBox1.x, 480);
- _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_backgroundBuffer, 640 - _engine->getGraphicsManager()->_renderBox1.x, 0, _engine->getGraphicsManager()->_renderBox1.x, 480);
+ _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_frontBuffer, 0, 0, _engine->getGraphicsManager()->_renderBox1.x, 480);
+ _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_frontBuffer, 640 - _engine->getGraphicsManager()->_renderBox1.x, 0, _engine->getGraphicsManager()->_renderBox1.x, 480);
}
if (_engine->getGraphicsManager()->_renderBox1.y) {
- _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_backgroundBuffer, _engine->getGraphicsManager()->_renderBox1.x, 0, _engine->getGraphicsManager()->_renderBox1.width, _engine->getGraphicsManager()->_renderBox1.y);
+ _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_frontBuffer, _engine->getGraphicsManager()->_renderBox1.x, 0, _engine->getGraphicsManager()->_renderBox1.width, _engine->getGraphicsManager()->_renderBox1.y);
_engine->getGraphicsManager()->clear(
- _engine->getGraphicsManager()->_backgroundBuffer,
+ _engine->getGraphicsManager()->_frontBuffer,
_engine->getGraphicsManager()->_renderBox1.x,
480 - _engine->getGraphicsManager()->_renderBox1.y,
_engine->getGraphicsManager()->_renderBox1.width,
@@ -389,7 +389,7 @@ int ArchiveManager::loadBG(const char *filename) {
return -1;
} else {
- _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_backgroundBuffer, _engine->getGraphicsManager()->_screenBuffer, 0, 0, 640, 480);
+ _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_frontBuffer, _engine->getGraphicsManager()->_backBuffer, 0, 0, 640, 480);
if (tbm.x != _engine->getGraphicsManager()->_renderBox1.x ||
tbm.y != _engine->getGraphicsManager()->_renderBox1.y ||
@@ -420,9 +420,9 @@ int ArchiveManager::loadBG(const char *filename) {
}
}
} else {
- memset(_engine->getGraphicsManager()->_screenBuffer, 0, (640 * 480 * sizeof(PixMap)));
+ memset(_engine->getGraphicsManager()->_backBuffer, 0, (640 * 480 * sizeof(PixMap)));
- _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_screenBuffer, _engine->getGraphicsManager()->_backgroundBuffer, 0, 0, 640, 480);
+ _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_backBuffer, _engine->getGraphicsManager()->_frontBuffer, 0, 0, 640, 480);
_engine->getGraphicsManager()->_renderBox1.x = 0;
_engine->getGraphicsManager()->_renderBox1.y = 0;
_engine->getGraphicsManager()->_renderBox1.width = 640;
diff --git a/engines/lastexpress/data/gold_archive.cpp b/engines/lastexpress/data/gold_archive.cpp
index 09535198fdb..5c29484dccb 100644
--- a/engines/lastexpress/data/gold_archive.cpp
+++ b/engines/lastexpress/data/gold_archive.cpp
@@ -165,7 +165,7 @@ int GoldArchiveManager::loadBG(const char *filename) {
tbm.width = _engine->getGraphicsManager()->_renderBox1.width;
tbm.height = _engine->getGraphicsManager()->_renderBox1.height;
- PixMap *bgSurface = _engine->getGraphicsManager()->_backgroundBuffer;
+ PixMap *bgSurface = _engine->getGraphicsManager()->_frontBuffer;
if (_engine->getLogicManager()->_doubleClickFlag &&
(_engine->mouseHasLeftClicked() || _engine->mouseHasRightClicked()) &&
@@ -227,14 +227,14 @@ int GoldArchiveManager::loadBG(const char *filename) {
}
if (_engine->getGraphicsManager()->_renderBox1.x) {
- _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_backgroundBuffer, 0, 0, _engine->getGraphicsManager()->_renderBox1.x, 480);
- _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_backgroundBuffer, 640 - _engine->getGraphicsManager()->_renderBox1.x, 0, _engine->getGraphicsManager()->_renderBox1.x, 480);
+ _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_frontBuffer, 0, 0, _engine->getGraphicsManager()->_renderBox1.x, 480);
+ _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_frontBuffer, 640 - _engine->getGraphicsManager()->_renderBox1.x, 0, _engine->getGraphicsManager()->_renderBox1.x, 480);
}
if (_engine->getGraphicsManager()->_renderBox1.y) {
- _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_backgroundBuffer, _engine->getGraphicsManager()->_renderBox1.x, 0, _engine->getGraphicsManager()->_renderBox1.width, _engine->getGraphicsManager()->_renderBox1.y);
+ _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_frontBuffer, _engine->getGraphicsManager()->_renderBox1.x, 0, _engine->getGraphicsManager()->_renderBox1.width, _engine->getGraphicsManager()->_renderBox1.y);
_engine->getGraphicsManager()->clear(
- _engine->getGraphicsManager()->_backgroundBuffer,
+ _engine->getGraphicsManager()->_frontBuffer,
_engine->getGraphicsManager()->_renderBox1.x,
480 - _engine->getGraphicsManager()->_renderBox1.y,
_engine->getGraphicsManager()->_renderBox1.width,
@@ -248,7 +248,7 @@ int GoldArchiveManager::loadBG(const char *filename) {
return -1;
} else {
- _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_backgroundBuffer, _engine->getGraphicsManager()->_screenBuffer, 0, 0, 640, 480);
+ _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_frontBuffer, _engine->getGraphicsManager()->_backBuffer, 0, 0, 640, 480);
if (tbm.x != _engine->getGraphicsManager()->_renderBox1.x ||
tbm.y != _engine->getGraphicsManager()->_renderBox1.y ||
@@ -279,9 +279,9 @@ int GoldArchiveManager::loadBG(const char *filename) {
}
}
} else {
- memset(_engine->getGraphicsManager()->_screenBuffer, 0, (640 * 480 * sizeof(PixMap)));
+ memset(_engine->getGraphicsManager()->_backBuffer, 0, (640 * 480 * sizeof(PixMap)));
- _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_screenBuffer, _engine->getGraphicsManager()->_backgroundBuffer, 0, 0, 640, 480);
+ _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_backBuffer, _engine->getGraphicsManager()->_frontBuffer, 0, 0, 640, 480);
_engine->getGraphicsManager()->_renderBox1.x = 0;
_engine->getGraphicsManager()->_renderBox1.y = 0;
_engine->getGraphicsManager()->_renderBox1.width = 640;
diff --git a/engines/lastexpress/data/sprites.cpp b/engines/lastexpress/data/sprites.cpp
index 3909de96771..79ea14d4015 100644
--- a/engines/lastexpress/data/sprites.cpp
+++ b/engines/lastexpress/data/sprites.cpp
@@ -49,7 +49,7 @@ void SpriteManager::drawCycle() {
if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->copy(
- _engine->getGraphicsManager()->_screenBuffer,
+ _engine->getGraphicsManager()->_backBuffer,
(PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(),
_eraseRect.left,
_eraseRect.top,
diff --git a/engines/lastexpress/debug.cpp b/engines/lastexpress/debug.cpp
index e73845dd33a..4866b2533a0 100644
--- a/engines/lastexpress/debug.cpp
+++ b/engines/lastexpress/debug.cpp
@@ -53,6 +53,7 @@ typedef struct ImGuiState {
float _bottomPanelHeight = 0.0f;
float _rightTopPanelHeight = 0.0f;
int _ticksToAdvance = 0;
+ ImTextureID _textureID = nullptr;
} ImGuiState;
ImGuiState *_state = nullptr;
@@ -171,14 +172,21 @@ void onImGuiRender() {
ImGui::EndTabItem();
}
+ if (ImGui::BeginTabItem("Current Scene")) {
+ _state->_currentTab = 3;
+ ImGui::EndTabItem();
+ }
+
ImGui::EndTabBar();
}
- // Update the character filter...
- _state->_filter.Draw("Filter Characters", 180);
- ImGui::SameLine();
- if (ImGui::Button("Clear")) {
- _state->_filter.Clear();
+ if (_state->_currentTab >= 0 && _state->_currentTab <= 2) {
+ // Update the character filter...
+ _state->_filter.Draw("Filter Characters", 180);
+ ImGui::SameLine();
+ if (ImGui::Button("Clear")) {
+ _state->_filter.Clear();
+ }
}
// Show corresponding view based on selected tab...
@@ -192,6 +200,11 @@ void onImGuiRender() {
case 2: // Pinned Characters
_state->_engine->getLogicManager()->renderCharacterGrid(true, _state->_selectedCharacter);
break;
+ case 3: // Current Scene
+ _state->_engine->getLogicManager()->renderCurrentSceneDebugger();
+ break;
+ default:
+ break;
}
}
ImGui::EndChild();
@@ -427,6 +440,251 @@ void LogicManager::renderCharacterList(int &selectedCharacter) {
ImGui::EndChild();
}
+void LogicManager::renderCurrentSceneDebugger() {
+ if (_state->_textureID)
+ g_system->freeImGuiTexture(_state->_textureID);
+
+ // Let's blit the current background on the ImGui window...
+ Graphics::Surface temp;
+ temp.create(640, 480, Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0));
+ _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_backBuffer, (PixMap *)temp.getPixels(), 0, 0, 640, 480);
+
+ _state->_textureID = g_system->getImGuiTexture(temp);
+
+ ImVec2 imagePos = ImGui::GetCursorScreenPos();
+ ImVec2 imageSize(640, 480);
+
+ ImGui::Image(_state->_textureID, imageSize);
+
+ // Set hovering flag...
+ ImVec2 mousePos = ImGui::GetMousePos();
+ ImVec2 relativeMousePos(mousePos.x - imagePos.x, mousePos.y - imagePos.y);
+
+ bool mouseOverImage = (relativeMousePos.x >= 0 && relativeMousePos.x < 640 &&
+ relativeMousePos.y >= 0 && relativeMousePos.y < 480);
+
+ ImDrawList *drawList = ImGui::GetWindowDrawList();
+
+ Link *hoveredLink = nullptr;
+ int hoveredLinkIndex = -1;
+
+ // Draw all the Link hotspots and collision lines...
+ Node *currentNode = &_trainData[_activeNode];
+ if (currentNode && currentNode->link) {
+ Link *currentLink = currentNode->link;
+ int linkIndex = 0;
+
+ while (currentLink) {
+ // Calculate screen coordinates for this link's bounding box...
+ ImVec2 topLeft(imagePos.x + currentLink->left, imagePos.y + currentLink->top);
+ ImVec2 bottomRight(imagePos.x + currentLink->right, imagePos.y + currentLink->bottom);
+
+ // Check if mouse is hovering over this link...
+ bool isHovered = mouseOverImage &&
+ relativeMousePos.x >= currentLink->left && relativeMousePos.x <= currentLink->right &&
+ relativeMousePos.y >= currentLink->top && relativeMousePos.y <= currentLink->bottom;
+
+ // Store the hovered link with highest priority,
+ // if they have the same priority, the last one in list wins...
+ if (isHovered) {
+ if (hoveredLink == nullptr ||
+ currentLink->location > hoveredLink->location ||
+ currentLink->location == hoveredLink->location) {
+ hoveredLink = currentLink;
+ hoveredLinkIndex = linkIndex;
+ }
+ }
+
+ ImU32 rectColor = IM_COL32(255, 0, 0, 100); // Semi-transparent red
+ ImU32 borderColor = IM_COL32(255, 0, 0, 255); // Solid red border
+
+ // Different colors for different cursor types
+ //switch (currentLink->cursor) {
+ //case 0:
+ // borderColor = IM_COL32(255, 0, 0, 255);
+ // break; // Red
+ //case 1:
+ // borderColor = IM_COL32(0, 255, 0, 255);
+ // break; // Green
+ //case 2:
+ // borderColor = IM_COL32(0, 0, 255, 255);
+ // break; // Blue
+ //case 3:
+ // borderColor = IM_COL32(255, 255, 0, 255);
+ // break; // Yellow
+ //default:
+ // borderColor = IM_COL32(255, 0, 255, 255);
+ // break; // Magenta
+ //}
+
+ // Highlight hovered link...
+ if (isHovered) {
+ rectColor = IM_COL32(255, 255, 255, 150);
+ }
+
+ drawList->AddRectFilled(topLeft, bottomRight, rectColor);
+ drawList->AddRect(topLeft, bottomRight, borderColor, 0.0f, 0, 2.0f);
+
+ // Draw collision lines...
+ Line7 *currentLine = currentLink->lineList;
+ int lineIndex = 0;
+ while (currentLine) {
+ ImU32 lineColor = IM_COL32(0, 255, 255, 255);
+
+ switch (currentLine->lineType) {
+ case 0:
+ lineColor = IM_COL32(0, 255, 255, 255); // Cyan
+ break;
+ case 1:
+ default:
+ lineColor = IM_COL32(255, 128, 0, 255); // Orange
+ break;
+ }
+
+ if (currentLine->slope == 0) {
+ // Horizontal line: y = -intercept / 1000
+ float y = -(float)currentLine->intercept / 1000.0f;
+ if (y >= currentLink->top && y <= currentLink->bottom) {
+ ImVec2 lineStart(imagePos.x + currentLink->left, imagePos.y + y);
+ ImVec2 lineEnd(imagePos.x + currentLink->right, imagePos.y + y);
+ drawList->AddLine(lineStart, lineEnd, lineColor, 2.0f);
+ }
+ } else {
+ // Non-horizontal line
+ float slope = (float)currentLine->slope;
+ float intercept = (float)currentLine->intercept;
+
+ // Calculate line endpoints across the entire screen bounds...
+ Common::Array<ImVec2> intersectionPoints;
+
+ // Left edge (x = currentLink->left)
+ float yLeft = -(slope * currentLink->left + intercept) / 1000.0f;
+ if (yLeft >= currentLink->top && yLeft <= currentLink->bottom) {
+ intersectionPoints.push_back(ImVec2(imagePos.x + currentLink->left, imagePos.y + yLeft));
+ }
+
+ // Right edge (x = currentLink->right)
+ float yRight = -(slope * currentLink->right + intercept) / 1000.0f;
+ if (yRight >= currentLink->top && yRight <= currentLink->bottom) {
+ intersectionPoints.push_back(ImVec2(imagePos.x + currentLink->right, imagePos.y + yRight));
+ }
+
+ // Top edge (y = currentLink->top)
+ float xTop = -(1000.0f * currentLink->top + intercept) / slope;
+ if (xTop >= currentLink->left && xTop <= currentLink->right) {
+ intersectionPoints.push_back(ImVec2(imagePos.x + xTop, imagePos.y + currentLink->top));
+ }
+
+ // Bottom edge (y = currentLink->bottom)
+ float xBottom = -(1000.0f * currentLink->bottom + intercept) / slope;
+ if (xBottom >= currentLink->left && xBottom <= currentLink->right) {
+ intersectionPoints.push_back(ImVec2(imagePos.x + xBottom, imagePos.y + currentLink->bottom));
+ }
+
+ // Draw line if we have at least 2 intersection points...
+ if (intersectionPoints.size() >= 2) {
+ drawList->AddLine(intersectionPoints[0], intersectionPoints[1], lineColor, 2.0f);
+ }
+ }
+
+ currentLine = currentLine->next;
+ lineIndex++;
+ }
+
+ currentLink = currentLink->next;
+ linkIndex++;
+ }
+ }
+
+ // Show tooltip for hovered link...
+ if (hoveredLink && mouseOverImage) {
+ ImGui::BeginTooltip();
+ ImGui::Text("Link %d", hoveredLinkIndex);
+ ImGui::Text("Bounds: (%d,%d) - (%d,%d)", hoveredLink->left, hoveredLink->top, hoveredLink->right, hoveredLink->bottom);
+
+ if (hoveredLink->scene) {
+ ImGui::Text("Leads to scene: %s (%d)", _trainData[hoveredLink->scene].sceneFilename, hoveredLink->scene);
+ } else {
+ ImGui::Text("Leads to scene: None (0)");
+ }
+
+ ImGui::Text("Location: %d", hoveredLink->location);
+
+ const char *actionName;
+ if (_engine->getMenu()->isShowingMenu()) {
+ const char *menuActionNames[] = {
+ "None", "PlayGame", "Credits", "Quit", "Action4",
+ "Action5", "SwitchEggs", "Rewind", "FastForward", "Action9",
+ "GoToParis", "GoToStrasbourg", "GoToMunich", "GoToVienna", "GoToBudapest",
+ "GoToBelgrad", "GoToCostantinople", "VolumeDown", "VolumeUp", "BrightnessDown",
+ "BrightnessUp"
+ };
+
+ actionName = (hoveredLink->action < 21) ? menuActionNames[hoveredLink->action] : "Unknown";
+ } else {
+ const char *gameActionNames[] = {
+ "None", "Inventory", "SendCathMessage", "PlaySound", "PlayMusic",
+ "Knock", "Compartment", "PlaySounds", "PlayAnimation", "SetDoor",
+ "SetModel", "SetItem", "KnockInside", "TakeItem", "DropItem",
+ "LinkOnGlobal", "Rattle", "DummyAction2", "LeanOutWindow", "AlmostFall",
+ "ClimbInWindow", "ClimbLadder", "ClimbDownTrain", "KronosSanctum", "EscapeBaggage",
+ "EnterBaggage", "BombPuzzle", "Conductors", "KronosConcert", "PlayMusic2",
+ "CatchBeetle", "ExitCompartment", "OutsideTrain", "FirebirdPuzzle", "OpenMatchBox",
+ "OpenBed", "DummyAction3", "HintDialog", "MusicEggBox", "PlayMusic3",
+ "Bed", "PlayMusicChapter", "PlayMusicChapterSetupTrain", "SwitchChapter", "EasterEgg"
+ };
+
+ actionName = (hoveredLink->action < 45) ? gameActionNames[hoveredLink->action] : "Unknown";
+ }
+
+ ImGui::Text("Action: %d (%s)", hoveredLink->action, actionName);
+
+ const char *cursorNames[] = {
+ "Normal", "Forward", "Backward", "TurnRight", "TurnLeft",
+ "Up", "Down", "Left", "Right", "Hand",
+ "HandKnock", "Magnifier", "HandPointer", "Sleep", "Talk",
+ "Talk2", "MatchBox", "Telegram", "PassengerList", "Article",
+ "Scarf", "Paper", "Parchemin", "Match", "Whistle",
+ "Key", "Bomb", "Firebird", "Briefcase", "Corpse",
+ "PunchLeft", "PunchRight", "Portrait", "PortraitSelected", "PortraitGreen",
+ "PortraitGreenSelected", "PortraitYellow", "PortraitYellowSelected", "HourGlass", "EggBlue",
+ "EggRed", "EggGreen", "EggPurple", "EggTeal", "EggGold",
+ "EggClock", "Normal2", "Blank"
+ };
+
+ const char *cursorName;
+ if (hoveredLink->cursor == 128) {
+ cursorName = "Process";
+ } else if (hoveredLink->cursor == 255) {
+ cursorName = "KeepValue";
+ } else if (hoveredLink->cursor < 48) {
+ cursorName = cursorNames[hoveredLink->cursor];
+ } else {
+ cursorName = "Unknown";
+ }
+
+ ImGui::Text("Cursor: %d (%s)", hoveredLink->cursor, cursorName);
+ ImGui::Text("Params: %d, %d, %d", hoveredLink->param1, hoveredLink->param2, hoveredLink->param3);
+
+ // Show line information...
+ if (hoveredLink->lineList) {
+ ImGui::Separator();
+ Line7 *line = hoveredLink->lineList;
+ int lineNum = 0;
+
+ while (line) {
+ ImGui::Text("Line %d: slope=%d, intercept=%d, type=%d",
+ lineNum, line->slope, line->intercept, line->lineType);
+
+ line = line->next;
+ lineNum++;
+ }
+ }
+
+ ImGui::EndTooltip();
+ }
+}
+
Common::StringArray LogicManager::getCharacterFunctionNames(int character) {
return _engine->isDemo() ? _demoFuncNames[character] : _funcNames[character];
}
diff --git a/engines/lastexpress/fight/fight.cpp b/engines/lastexpress/fight/fight.cpp
index 08024394dd6..02f1cf468eb 100644
--- a/engines/lastexpress/fight/fight.cpp
+++ b/engines/lastexpress/fight/fight.cpp
@@ -89,7 +89,7 @@ int LastExpressEngine::doFight(int fightId) {
getSoundManager()->_scanAnySoundLoopingSection = true;
if (getGraphicsManager()->acquireSurface()) {
- getGraphicsManager()->copy(getGraphicsManager()->_backgroundBuffer, (PixMap *)getGraphicsManager()->_screenSurface.getPixels(), tbm->x, tbm->y, tbm->width, tbm->height);
+ getGraphicsManager()->copy(getGraphicsManager()->_frontBuffer, (PixMap *)getGraphicsManager()->_screenSurface.getPixels(), tbm->x, tbm->y, tbm->width, tbm->height);
getGraphicsManager()->unlockSurface();
}
diff --git a/engines/lastexpress/game/action.cpp b/engines/lastexpress/game/action.cpp
index 6e417ee6530..aa235200191 100644
--- a/engines/lastexpress/game/action.cpp
+++ b/engines/lastexpress/game/action.cpp
@@ -1722,7 +1722,7 @@ void LogicManager::doAction(Link *link) {
}
break;
- case kActionEasterEggs:
+ case kActionEasterEgg:
if (_engine->isDemo())
break;
diff --git a/engines/lastexpress/game/credits.cpp b/engines/lastexpress/game/credits.cpp
index a184db697fa..026563379b4 100644
--- a/engines/lastexpress/game/credits.cpp
+++ b/engines/lastexpress/game/credits.cpp
@@ -127,7 +127,7 @@ void LastExpressEngine::doCredits() {
// Draw the map to the screen
if (getGraphicsManager()->acquireSurface()) {
- PixMap *screenPtr = getGraphicsManager()->_screenBuffer + 20496;
+ PixMap *screenPtr = getGraphicsManager()->_backBuffer + 20496;
byte *surfacePtr = (byte *)getGraphicsManager()->_screenSurface.getPixels() + 40992;
for (int row = 0; row < currentMap->height; row++) {
@@ -194,7 +194,7 @@ void LastExpressEngine::doCredits() {
if (getGraphicsManager()->acquireSurface()) {
PixMap *surfacePtr = (PixMap *)((byte *)getGraphicsManager()->_screenSurface.getPixels() + 79920);
int rowCounter = 355;
- PixMap *screenPtr = getGraphicsManager()->_screenBuffer + 39960;
+ PixMap *screenPtr = getGraphicsManager()->_backBuffer + 39960;
while (rowCounter > 0) {
memcpy(surfacePtr, screenPtr, 640);
diff --git a/engines/lastexpress/game/logic.cpp b/engines/lastexpress/game/logic.cpp
index 7a2b0745bec..e319178593a 100644
--- a/engines/lastexpress/game/logic.cpp
+++ b/engines/lastexpress/game/logic.cpp
@@ -184,7 +184,7 @@ void LogicManager::killGracePeriod() {
void LogicManager::fadeToBlack() {
_engine->getGraphicsManager()->setMouseDrawable(false);
- _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_backgroundBuffer, 0, 0, 640, 480);
+ _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_frontBuffer, 0, 0, 640, 480);
_engine->getGraphicsManager()->_renderBox1.x = 0;
_engine->getGraphicsManager()->_renderBox1.y = 0;
_engine->getGraphicsManager()->_renderBox1.width = 640;
@@ -201,7 +201,7 @@ void LogicManager::fadeToWhite() {
white = 0x7FFF;
_engine->getGraphicsManager()->modifyPalette(&white, 1);
- backgroundBuffer = _engine->getGraphicsManager()->_backgroundBuffer;
+ backgroundBuffer = _engine->getGraphicsManager()->_frontBuffer;
for (int i = 480; i > 0; i--) {
for (int j = 640; j > 0; j--) {
diff --git a/engines/lastexpress/game/logic.h b/engines/lastexpress/game/logic.h
index 7c81ee9f388..dd17aad2763 100644
--- a/engines/lastexpress/game/logic.h
+++ b/engines/lastexpress/game/logic.h
@@ -214,6 +214,7 @@ public:
void renderCharacterDetails(Character *character, int index);
void renderCharacterGrid(bool onlyPinned, int &selectedCharacter);
void renderCharacterList(int &selectedCharacter);
+ void renderCurrentSceneDebugger();
Common::StringArray getCharacterFunctionNames(int character);
diff --git a/engines/lastexpress/game/nis.cpp b/engines/lastexpress/game/nis.cpp
index 4cf9e7495cb..f518feb43d5 100644
--- a/engines/lastexpress/game/nis.cpp
+++ b/engines/lastexpress/game/nis.cpp
@@ -214,10 +214,10 @@ bool NISManager::initNIS(const char *filename, int32 flags) {
_streamCurrentPosition = 0;
_remainingStreamBytes = 0;
_streamBufferSize = 1530 * PAGE_SIZE;
- _originalBackgroundSurface = _engine->getGraphicsManager()->_backgroundBuffer;
+ _originalBackgroundSurface = _engine->getGraphicsManager()->_frontBuffer;
_totalBackgroundPages = 1530;
_totalStreamPages = 1530;
- _backgroundSurface = _engine->getGraphicsManager()->_backgroundBuffer;
+ _backgroundSurface = _engine->getGraphicsManager()->_frontBuffer;
_archive = _engine->getArchiveManager()->openHPF(filename);
if (!_archive) {
@@ -366,7 +366,7 @@ void NISManager::drawSprite(NisSprite *sprite) {
switch (sprite->compBits) {
case 3:
if (_decompressToBackBuffer) {
- _engine->getGraphicsManager()->bitBltSprite8(&tempSprite, _engine->getGraphicsManager()->_screenBuffer);
+ _engine->getGraphicsManager()->bitBltSprite8(&tempSprite, _engine->getGraphicsManager()->_backBuffer);
} else if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->bitBltSprite8(&tempSprite, (PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels());
_engine->getGraphicsManager()->unlockSurface();
@@ -375,7 +375,7 @@ void NISManager::drawSprite(NisSprite *sprite) {
break;
case 4:
if (_decompressToBackBuffer) {
- _engine->getGraphicsManager()->bitBltSprite16(&tempSprite, _engine->getGraphicsManager()->_screenBuffer);
+ _engine->getGraphicsManager()->bitBltSprite16(&tempSprite, _engine->getGraphicsManager()->_backBuffer);
} else if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->bitBltSprite16(&tempSprite, (PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels());
_engine->getGraphicsManager()->unlockSurface();
@@ -384,7 +384,7 @@ void NISManager::drawSprite(NisSprite *sprite) {
break;
case 5:
if (_decompressToBackBuffer) {
- _engine->getGraphicsManager()->bitBltSprite32(&tempSprite, _engine->getGraphicsManager()->_screenBuffer);
+ _engine->getGraphicsManager()->bitBltSprite32(&tempSprite, _engine->getGraphicsManager()->_backBuffer);
} else if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->bitBltSprite32(&tempSprite, (PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels());
_engine->getGraphicsManager()->unlockSurface();
@@ -393,7 +393,7 @@ void NISManager::drawSprite(NisSprite *sprite) {
break;
case 7:
if (_decompressToBackBuffer) {
- _engine->getGraphicsManager()->bitBltSprite128(&tempSprite, _engine->getGraphicsManager()->_screenBuffer);
+ _engine->getGraphicsManager()->bitBltSprite128(&tempSprite, _engine->getGraphicsManager()->_backBuffer);
} else if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->bitBltSprite128(&tempSprite, (PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels());
_engine->getGraphicsManager()->unlockSurface();
@@ -402,7 +402,7 @@ void NISManager::drawSprite(NisSprite *sprite) {
break;
case 255:
if (_decompressToBackBuffer) {
- _engine->getGraphicsManager()->bitBltSprite255(&tempSprite, _engine->getGraphicsManager()->_screenBuffer);
+ _engine->getGraphicsManager()->bitBltSprite255(&tempSprite, _engine->getGraphicsManager()->_backBuffer);
} else if (_engine->getGraphicsManager()->acquireSurface()) {
_engine->getGraphicsManager()->bitBltSprite255(&tempSprite, (PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels());
_engine->getGraphicsManager()->unlockSurface();
@@ -750,14 +750,14 @@ void NISManager::processNIS(NisEvents *event) {
_backgroundFlag = 0;
if (_decompressToBackBuffer)
- _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_screenBuffer, 0, 0, 640, 480);
+ _engine->getGraphicsManager()->clear(_engine->getGraphicsManager()->_backBuffer, 0, 0, 640, 480);
if (_selectBackgroundType != _backgroundType) {
drawBK(_selectBackgroundType);
} else if (_engine->getGraphicsManager()->acquireSurface()) {
if (_backgroundType == 1) {
_engine->getGraphicsManager()->copy(
- _engine->getGraphicsManager()->_screenBuffer,
+ _engine->getGraphicsManager()->_backBuffer,
(PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(),
_background1->rect.left,
_background1->rect.top,
@@ -766,7 +766,7 @@ void NISManager::processNIS(NisEvents *event) {
);
} else if (_backgroundType == 2) {
_engine->getGraphicsManager()->copy(
- _engine->getGraphicsManager()->_screenBuffer,
+ _engine->getGraphicsManager()->_backBuffer,
(PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(),
_background2->rect.left,
_background2->rect.top,
@@ -821,14 +821,14 @@ void NISManager::processNIS(NisEvents *event) {
if (_decompressToBackBuffer) {
for (int i = 0; i < 3; i++) {
_engine->getSoundManager()->soundThread();
- _engine->getGraphicsManager()->dissolve((2 * x) + (2 * (i & 1)), width, 480, _engine->getGraphicsManager()->_screenBuffer);
+ _engine->getGraphicsManager()->dissolve((2 * x) + (2 * (i & 1)), width, 480, _engine->getGraphicsManager()->_backBuffer);
_engine->getGraphicsManager()->burstBox(x, 0, width, 480);
_engine->getSoundManager()->soundThread();
_engine->handleEvents();
}
if (_engine->getGraphicsManager()->acquireSurface()) {
- _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_screenBuffer, (PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(), x, 0, width, 480);
+ _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_backBuffer, (PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(), x, 0, width, 480);
_engine->getGraphicsManager()->unlockSurface();
}
@@ -858,7 +858,7 @@ void NISManager::processNIS(NisEvents *event) {
if (_engine->getGraphicsManager()->acquireSurface()) {
if (_backgroundType == 1) {
_engine->getGraphicsManager()->copy(
- _engine->getGraphicsManager()->_screenBuffer,
+ _engine->getGraphicsManager()->_backBuffer,
(PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(),
_background1->rect.left,
_background1->rect.top,
@@ -867,7 +867,7 @@ void NISManager::processNIS(NisEvents *event) {
);
} else if (_backgroundType == 2) {
_engine->getGraphicsManager()->copy(
- _engine->getGraphicsManager()->_screenBuffer,
+ _engine->getGraphicsManager()->_backBuffer,
(PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(),
_background2->rect.left,
_background2->rect.top,
@@ -942,7 +942,7 @@ void NISManager::drawBK(int type) {
_firstNISBackgroundDraw = true;
if (!_decompressToBackBuffer && _engine->getGraphicsManager()->acquireSurface()) {
- _engine->getGraphicsManager()->copy((PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(), _engine->getGraphicsManager()->_screenBuffer, 0, 0, 640, 480);
+ _engine->getGraphicsManager()->copy((PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(), _engine->getGraphicsManager()->_backBuffer, 0, 0, 640, 480);
_engine->getGraphicsManager()->unlockSurface();
}
diff --git a/engines/lastexpress/graphics.cpp b/engines/lastexpress/graphics.cpp
index 2f99e1204aa..6e4ca945d38 100644
--- a/engines/lastexpress/graphics.cpp
+++ b/engines/lastexpress/graphics.cpp
@@ -146,7 +146,7 @@ void GraphicsManager::goStepBG(int sceneIndex) {
_engine->getOtisManager()->updateAll();
}
- _engine->getSpriteManager()->drawCycleSimple(_backgroundBuffer);
+ _engine->getSpriteManager()->drawCycleSimple(_frontBuffer);
stepDissolve(chosenTbm);
_engine->getLogicManager()->doPostFunction();
}
@@ -158,7 +158,7 @@ void GraphicsManager::stepDissolve(TBM *tbm) {
int32 curFrameCount = _engine->getSoundFrameCounter();
_engine->getSoundManager()->soundThread();
- dissolve(pos + sizeof(PixMap) * (i & 1), tbm->width, tbm->height, _backgroundBuffer);
+ dissolve(pos + sizeof(PixMap) * (i & 1), tbm->width, tbm->height, _frontBuffer);
burstBox(tbm->x, tbm->y, tbm->width, tbm->height);
int32 frameTimeDiff = _engine->getSoundFrameCounter() - curFrameCount;
@@ -183,7 +183,7 @@ void GraphicsManager::stepDissolve(TBM *tbm) {
}
if (acquireSurface()) {
- copy(_backgroundBuffer, (PixMap *)_screenSurface.getPixels(), tbm->x, tbm->y, tbm->width, tbm->height);
+ copy(_frontBuffer, (PixMap *)_screenSurface.getPixels(), tbm->x, tbm->y, tbm->width, tbm->height);
unlockSurface();
}
@@ -1703,7 +1703,7 @@ void GraphicsManager::dissolve(int32 location, int32 width, int32 height, PixMap
void GraphicsManager::doErase(byte *data) {
byte *screenSurface = (byte *)_screenSurface.getPixels();
byte *endOfSurface = screenSurface + (640 * 480 * sizeof(PixMap));
- byte *previousScreenBuffer = (byte *)_screenBuffer;
+ byte *previousScreenBuffer = (byte *)_backBuffer;
uint16 *eraseMask = (uint16 *)data;
diff --git a/engines/lastexpress/graphics.h b/engines/lastexpress/graphics.h
index f9e76578072..762889dc50d 100644
--- a/engines/lastexpress/graphics.h
+++ b/engines/lastexpress/graphics.h
@@ -130,8 +130,8 @@ public:
protected:
LastExpressEngine *_engine = nullptr;
- PixMap *_backgroundBuffer = nullptr;
- PixMap *_screenBuffer = nullptr;
+ PixMap *_frontBuffer = nullptr;
+ PixMap *_backBuffer = nullptr;
PixMap _mouseBackBuffer[32 * 32];
byte *_backgroundCompBuffer = nullptr;
diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp
index 5ff5f58c77d..237253c52ed 100644
--- a/engines/lastexpress/lastexpress.cpp
+++ b/engines/lastexpress/lastexpress.cpp
@@ -91,8 +91,8 @@ void LastExpressEngine::startUp() {
getMemoryManager()->initMem();
getGraphicsManager()->clear(getGraphicsManager()->_screenSurface, 0, 0, 640, 480);
- getGraphicsManager()->clear(getGraphicsManager()->_screenBuffer, 0, 0, 640, 480);
- getGraphicsManager()->clear(getGraphicsManager()->_backgroundBuffer, 0, 0, 640, 480);
+ getGraphicsManager()->clear(getGraphicsManager()->_backBuffer, 0, 0, 640, 480);
+ getGraphicsManager()->clear(getGraphicsManager()->_frontBuffer, 0, 0, 640, 480);
getVCR()->shuffleGames();
getArchiveManager()->loadMice();
diff --git a/engines/lastexpress/memory.cpp b/engines/lastexpress/memory.cpp
index 968d6c0988c..fa760ac1906 100644
--- a/engines/lastexpress/memory.cpp
+++ b/engines/lastexpress/memory.cpp
@@ -55,7 +55,7 @@ void MemoryManager::initMem() {
_engine->_globalMemoryPool = (byte *)malloc(1800 * PAGE_SIZE);
memset(_engine->_globalMemoryPool, 0, 1800 * PAGE_SIZE);
- _engine->getGraphicsManager()->_screenBuffer = (PixMap *)malloc(640 * 480 * sizeof(PixMap));
+ _engine->getGraphicsManager()->_backBuffer = (PixMap *)malloc(640 * 480 * sizeof(PixMap));
_engine->getLogicManager()->_trainData = (Node *)malloc(2048 * sizeof(Node));
_engine->_cursorsMemoryPool = (byte *)malloc(49 * PAGE_SIZE);
_engine->_characters = new Characters();
@@ -91,7 +91,7 @@ void MemoryManager::initMem() {
_engine->getGraphicsManager()->_cursorsDataHeader = (CursorHeader *)_engine->_cursorsMemoryPool;
_engine->getGraphicsManager()->_iconsBitmapData = (PixMap *)(_engine->_cursorsMemoryPool + sizeof(CursorHeader) * kCursorMAX);
_engine->_soundMemoryPool = _engine->_globalMemoryPool;
- _engine->getGraphicsManager()->_backgroundBuffer = (PixMap *)(_engine->_globalMemoryPool + (270 * PAGE_SIZE));
+ _engine->getGraphicsManager()->_frontBuffer = (PixMap *)(_engine->_globalMemoryPool + (270 * PAGE_SIZE));
_memoryPages[0].memPageSize = 1230 * PAGE_SIZE;
_memoryPages[0].memPagePtr = _engine->_globalMemoryPool + (570 * PAGE_SIZE);
@@ -154,7 +154,7 @@ void MemoryManager::freeMem(void *data) {
void MemoryManager::releaseMemory() {
SAFE_FREE(_engine->_globalMemoryPool);
- SAFE_FREE(_engine->getGraphicsManager()->_screenBuffer);
+ SAFE_FREE(_engine->getGraphicsManager()->_backBuffer);
SAFE_FREE(_engine->getLogicManager()->_trainData);
SAFE_FREE(_engine->_cursorsMemoryPool);
SAFE_DELETE(_engine->_characters);
diff --git a/engines/lastexpress/menu/menu.cpp b/engines/lastexpress/menu/menu.cpp
index bc132dd2737..9ef897fedf5 100644
--- a/engines/lastexpress/menu/menu.cpp
+++ b/engines/lastexpress/menu/menu.cpp
@@ -992,10 +992,10 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(0, 11, false);
setSprite(2, 5, false);
- _engine->getSpriteManager()->drawCycleSimple(_engine->getGraphicsManager()->_backgroundBuffer);
+ _engine->getSpriteManager()->drawCycleSimple(_engine->getGraphicsManager()->_frontBuffer);
if (_engine->getGraphicsManager()->acquireSurface()) {
- _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_backgroundBuffer, (PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(), 0, 0, 640, 480);
+ _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_frontBuffer, (PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(), 0, 0, 640, 480);
_engine->getGraphicsManager()->unlockSurface();
}
@@ -1039,9 +1039,9 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
setSprite(0, 10, false);
setSprite(2, 9, false);
- _engine->getSpriteManager()->drawCycleSimple(_engine->getGraphicsManager()->_backgroundBuffer);
+ _engine->getSpriteManager()->drawCycleSimple(_engine->getGraphicsManager()->_frontBuffer);
if (_engine->getGraphicsManager()->acquireSurface()) {
- _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_backgroundBuffer, (PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(), 0, 0, 640, 480);
+ _engine->getGraphicsManager()->copy(_engine->getGraphicsManager()->_frontBuffer, (PixMap *)_engine->getGraphicsManager()->_screenSurface.getPixels(), 0, 0, 640, 480);
_engine->getGraphicsManager()->unlockSurface();
}
@@ -1088,7 +1088,7 @@ void Menu::setCity(int cityIndex) {
void Menu::switchEggs(int whichEgg) {
_engine->getSpriteManager()->destroySprite(&_startMenuFrames[3], false);
- _engine->getSpriteManager()->drawCycleSimple(_engine->getGraphicsManager()->_backgroundBuffer);
+ _engine->getSpriteManager()->drawCycleSimple(_engine->getGraphicsManager()->_frontBuffer);
if (_menuSeqs[3]) {
_engine->getMemoryManager()->freeMem(_menuSeqs[3]->rawSeqData);
diff --git a/engines/lastexpress/shared.h b/engines/lastexpress/shared.h
index 06d924da5b4..6514e1bb80b 100644
--- a/engines/lastexpress/shared.h
+++ b/engines/lastexpress/shared.h
@@ -1945,7 +1945,7 @@ enum Actions {
kActionPlayMusicChapter,
kActionPlayMusicChapterSetupTrain,
kActionSwitchChapter,
- kActionEasterEggs
+ kActionEasterEgg
};
//////////////////////////////////////////////////////////////////////////
Commit: 77c33d1d90a176707f2f2bf228349d4490b60d69
https://github.com/scummvm/scummvm/commit/77c33d1d90a176707f2f2bf228349d4490b60d69
Author: AndywinXp (andywinxp at gmail.com)
Date: 2025-06-25T10:31:46+02:00
Commit Message:
LASTEXPRESS: Tame some tight waiting loops
Otherwise the OS never gets time to do other stuff
while the engine waits for a sound...
Changed paths:
engines/lastexpress/characters/kronos.cpp
engines/lastexpress/characters/master.cpp
engines/lastexpress/menu/menu.cpp
diff --git a/engines/lastexpress/characters/kronos.cpp b/engines/lastexpress/characters/kronos.cpp
index db229992b47..42019b71445 100644
--- a/engines/lastexpress/characters/kronos.cpp
+++ b/engines/lastexpress/characters/kronos.cpp
@@ -845,8 +845,10 @@ void LogicManager::HAND_Kronos_Concert(HAND_PARAMS) {
playNIS(kEventCathFallingAsleep);
fadeToBlack();
- while (dialogRunning("1919.LNK"))
+ while (dialogRunning("1919.LNK")) {
_engine->getSoundManager()->soundThread();
+ g_system->delayMillis(4);
+ }
playNIS(kEventCathWakingUp);
cleanNIS();
diff --git a/engines/lastexpress/characters/master.cpp b/engines/lastexpress/characters/master.cpp
index d16de500b78..75671f576b5 100644
--- a/engines/lastexpress/characters/master.cpp
+++ b/engines/lastexpress/characters/master.cpp
@@ -403,8 +403,10 @@ void LogicManager::HAND_Master_FirstDream(HAND_PARAMS) {
_activeItem = 0;
fadeToBlack();
- while (dialogRunning("MUS008"))
+ while (dialogRunning("MUS008")) {
_engine->getSoundManager()->soundThread();
+ g_system->delayMillis(4);
+ }
_globals[kProgressField84] = 1;
bumpCath(kCarLocomotive, 75, 255);
@@ -1229,6 +1231,7 @@ void LogicManager::HAND_Master_SecondSleep(HAND_PARAMS) {
while (dialogRunning("MUS008")) {
_engine->getSoundManager()->soundThread();
+ g_system->delayMillis(4);
}
CONS_Master_StartPart2(0, 0, 0, 0);
@@ -2409,8 +2412,10 @@ void LogicManager::HAND_Master_MovingSecondNight(HAND_PARAMS) {
_activeItem = 0;
fadeToBlack();
- while (dialogRunning("MUS008"))
+ while (dialogRunning("MUS008")) {
_engine->getSoundManager()->soundThread();
+ g_system->delayMillis(4);
+ }
if (cathHasItem(kItemBomb)) {
forceJump(kCharacterAlexei, &LogicManager::CONS_Alexei_Dead);
diff --git a/engines/lastexpress/menu/menu.cpp b/engines/lastexpress/menu/menu.cpp
index 9ef897fedf5..2f006b7258a 100644
--- a/engines/lastexpress/menu/menu.cpp
+++ b/engines/lastexpress/menu/menu.cpp
@@ -301,8 +301,10 @@ bool Menu::eggCursorAction(int8 action, int8 flags) {
_engine->getLogicManager()->playDialog(0, "LIB046", -1, 0);
}
- while (_engine->getLogicManager()->dialogRunning("LIB046"))
+ while (_engine->getLogicManager()->dialogRunning("LIB046")) {
_engine->getSoundManager()->soundThread();
+ g_system->delayMillis(4);
+ }
g_system->delayMillis(334);
More information about the Scummvm-git-logs
mailing list