[Scummvm-git-logs] scummvm master -> a3e64f2d64df35f0ca6ca113924da85d4cf22eef

neuromancer noreply at scummvm.org
Mon Jul 13 12:24:29 UTC 2026


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

Summary:
921b8f33b3 COLONY: allow to use ESC to break free from animations
56a5e10bc8 COLONY: adjusted bar position for mac color
4f6d2fbfcb COLONY: more adjusts for the bar position in mac color
a3e64f2d64 COLONY: added missing effect in mac


Commit: 921b8f33b362a1a2468ad8bec9fcedcc87b3df43
    https://github.com/scummvm/scummvm/commit/921b8f33b362a1a2468ad8bec9fcedcc87b3df43
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-07-13T14:21:48+02:00

Commit Message:
COLONY: allow to use ESC to break free from animations

Changed paths:
    engines/colony/animation.cpp


diff --git a/engines/colony/animation.cpp b/engines/colony/animation.cpp
index 98fdba9fb25..4636d660682 100644
--- a/engines/colony/animation.cpp
+++ b/engines/colony/animation.cpp
@@ -605,9 +605,11 @@ void ColonyEngine::playAnimation() {
 				debugC(5, kColonyDebugAnimation, "Animation Mouse: %d, %d", logical.x, logical.y);
 			} else if (event.type == Common::EVENT_CUSTOM_ENGINE_ACTION_START) {
 				if (event.customType == kActionEscape) {
-					openMainMenuDialog();
-					_gfx->computeScreenViewport();
-					needsDraw = true;
+					// Exit the animation like right-click/Return. Opening the
+					// main menu here instead would be a dead end: save/load
+					// are disabled while _animationRunning is set.
+					debugC(1, kColonyDebugAnimation, "Animation: ESC exit");
+					_animationRunning = false;
 				}
 			} else if (event.type == Common::EVENT_KEYDOWN) {
 				if (event.kbd.keycode == Common::KEYCODE_RETURN) {


Commit: 56a5e10bc8204c5066d2fd9539d7c60b498fa39f
    https://github.com/scummvm/scummvm/commit/56a5e10bc8204c5066d2fd9539d7c60b498fa39f
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-07-13T14:21:48+02:00

Commit Message:
COLONY: adjusted bar position for mac color

Changed paths:
    engines/colony/ui.cpp


diff --git a/engines/colony/ui.cpp b/engines/colony/ui.cpp
index 5b0cf0516d2..00eff139f11 100644
--- a/engines/colony/ui.cpp
+++ b/engines/colony/ui.cpp
@@ -627,19 +627,38 @@ void ColonyEngine::drawDashboardMac() {
 		if (_armor > 0 && _pictPower) {
 			// power.c draws the bars with QuickDraw MoveTo/LineTo after shifting
 			// the PICT rect. GL line rasterization does not cover the same pixels,
-			// so draw the observed 18x2 bar strips explicitly.
-			const int infoLeft = _powerRect.left - 1;
-			const int bot = _powerRect.bottom - 27; // power.c: bot = info.bottom - 27
-
-			for (int i = 0; i < 3; i++) {
-				// Reference B&W frame: columns start at x 10, 33, 56; bars are
-				// inset by 2 pixels on each side: x 12..29, 35..52, 58..75.
-				const int lft = 3 + infoLeft + i * 23;
-				for (int j = 0; j < ePower[i] && j < 20; j++) {
-					const int ln = bot - 3 * j;
-					if (ln <= _powerRect.top)
-						break;
-					_gfx->fillRect(Common::Rect(lft + 1, ln - 1, lft + 19, ln + 1), colBlue);
+			// so draw the observed bar strips explicitly.
+			if (macColor) {
+				// Color power.c DrawInfo(): lft = 3 + info.left + i*23 with the
+				// shifted info rect's local origin at engine x = _powerRect.left + 3;
+				// strips are MoveTo(lft+1)..LineTo(lft+16) = 16px wide.
+				const int infoLeft = _powerRect.left + 3;
+				const int bot = _powerRect.bottom - 27; // power.c: bot = info.bottom - 27
+
+				for (int i = 0; i < 3; i++) {
+					const int lft = 3 + infoLeft + i * 23;
+					for (int j = 0; j < ePower[i] && j < 20; j++) {
+						const int ln = bot - 3 * j;
+						if (ln <= _powerRect.top)
+							break;
+						_gfx->fillRect(Common::Rect(lft + 1, ln - 1, lft + 17, ln + 1), colBlue);
+					}
+				}
+			} else {
+				// The B&W art uses other sizes than the color source. Reference B&W
+				// frame: columns start at x 10, 33, 56; bars are inset by 2 pixels
+				// on each side: x 12..29, 35..52, 58..75 (18px wide).
+				const int infoLeft = _powerRect.left - 1;
+				const int bot = _powerRect.bottom - 27; // power.c: bot = info.bottom - 27
+
+				for (int i = 0; i < 3; i++) {
+					const int lft = 3 + infoLeft + i * 23;
+					for (int j = 0; j < ePower[i] && j < 20; j++) {
+						const int ln = bot - 3 * j;
+						if (ln <= _powerRect.top)
+							break;
+						_gfx->fillRect(Common::Rect(lft + 1, ln - 1, lft + 19, ln + 1), colBlue);
+					}
 				}
 			}
 		}


Commit: 4f6d2fbfcb35e6a0dca34b8f73e71101bb4f8106
    https://github.com/scummvm/scummvm/commit/4f6d2fbfcb35e6a0dca34b8f73e71101bb4f8106
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-07-13T14:21:48+02:00

Commit Message:
COLONY: more adjusts for the bar position in mac color

Changed paths:
    engines/colony/ui.cpp


diff --git a/engines/colony/ui.cpp b/engines/colony/ui.cpp
index 00eff139f11..4f41a4b0752 100644
--- a/engines/colony/ui.cpp
+++ b/engines/colony/ui.cpp
@@ -599,10 +599,16 @@ void ColonyEngine::drawDashboardMac() {
 		}
 
 		// power.c: SetRect(&info, -2, -2, xSize-2, ySize-2); DrawPicture(inf, &info)
+		// — art pixel (2,2) sits at the window origin, so color blits at -2.
+		// The B&W path keeps its screenshot-calibrated +1 offset.
 		// In the original B&W game, GetPicture(-32752) returns null when !armor,
 		// so DrawPicture is a no-op — the window just shows white fill.
-		if (_pictPower)
-			drawPictAt(_pictPower, _powerRect.left + 1, _powerRect.top + 1);
+		if (_pictPower) {
+			if (macColor)
+				drawPictAt(_pictPower, _powerRect.left - 2, _powerRect.top - 2);
+			else
+				drawPictAt(_pictPower, _powerRect.left + 1, _powerRect.top + 1);
+		}
 
 		if (!macColor) {
 			// Match the B&W Window Manager shadow as pixels. The shadow is
@@ -630,10 +636,10 @@ void ColonyEngine::drawDashboardMac() {
 			// so draw the observed bar strips explicitly.
 			if (macColor) {
 				// Color power.c DrawInfo(): lft = 3 + info.left + i*23 with the
-				// shifted info rect's local origin at engine x = _powerRect.left + 3;
-				// strips are MoveTo(lft+1)..LineTo(lft+16) = 16px wide.
-				const int infoLeft = _powerRect.left + 3;
-				const int bot = _powerRect.bottom - 27; // power.c: bot = info.bottom - 27
+				// shifted info rect's local origin at engine x = _powerRect.left
+				// (PICT blitted at -2); strips MoveTo(lft+1)..LineTo(lft+16) = 16px.
+				const int infoLeft = _powerRect.left;
+				const int bot = _powerRect.bottom - 30; // power.c: bot = info.bottom - 27
 
 				for (int i = 0; i < 3; i++) {
 					const int lft = 3 + infoLeft + i * 23;


Commit: a3e64f2d64df35f0ca6ca113924da85d4cf22eef
    https://github.com/scummvm/scummvm/commit/a3e64f2d64df35f0ca6ca113924da85d4cf22eef
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-07-13T14:21:48+02:00

Commit Message:
COLONY: added missing effect in mac

Changed paths:
    engines/colony/interaction.cpp


diff --git a/engines/colony/interaction.cpp b/engines/colony/interaction.cpp
index bd6ad01bd42..a1ed60d3366 100644
--- a/engines/colony/interaction.cpp
+++ b/engines/colony/interaction.cpp
@@ -484,7 +484,39 @@ void ColonyEngine::destroyRobot(int num) {
 					_robotArray[gx][gy] = 0;
 				}
 			}
-			_sound->play(Sound::kExplode);
+			// Mac shoot.c: InvertRect(&Clip) strobe while the explosion sound
+			// plays (16 inversions with sound off). DOS SHOOT.C has no flash.
+			if (isMacRenderMode()) {
+				auto invertViewport = [this]() {
+					_gfx->setXorMode(true);
+					_gfx->fillRect(_screenR, 0xFFFFFF);
+					_gfx->setXorMode(false);
+					_gfx->copyToScreen();
+					_system->updateScreen();
+				};
+				const uint32 kFlipMs = 40;
+				int flips = 0;
+				if (!_soundOn) {
+					for (; flips < 16 && !shouldQuit(); flips++) {
+						invertViewport();
+						_system->delayMillis(kFlipMs);
+					}
+				} else {
+					_sound->play(Sound::kExplode);
+					const uint32 start = _system->getMillis();
+					while (!shouldQuit() && _sound->isPlaying() &&
+							_system->getMillis() - start < 1200) {
+						invertViewport();
+						_system->delayMillis(kFlipMs);
+						flips++;
+					}
+					_sound->stop();
+				}
+				if (flips & 1)
+					invertViewport();
+			} else {
+				_sound->play(Sound::kExplode);
+			}
 			copyOverflowObjectToSlot(num);
 			debugC(1, kColonyDebugCombat, "Robot %d destroyed!", num);
 		} else {




More information about the Scummvm-git-logs mailing list