[Scummvm-git-logs] scummvm master -> bad60aab0ad28da2469960680427803074084945
neuromancer
noreply at scummvm.org
Mon Aug 10 14:06:41 UTC 2026
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:
b1a746a732 COLONY: fixed missing face in bed rendering
f5174eb33f COLONY: make sure boxes block doorways
bad60aab0a COLONY: added missing dave easter egg
Commit: b1a746a7328741c09d24dae5145aef2218849c73
https://github.com/scummvm/scummvm/commit/b1a746a7328741c09d24dae5145aef2218849c73
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-08-10T16:06:00+02:00
Commit Message:
COLONY: fixed missing face in bed rendering
Changed paths:
engines/colony/render_objects.cpp
diff --git a/engines/colony/render_objects.cpp b/engines/colony/render_objects.cpp
index afa5e4458e4..b98af7fcef5 100644
--- a/engines/colony/render_objects.cpp
+++ b/engines/colony/render_objects.cpp
@@ -1692,7 +1692,10 @@ bool ColonyEngine::drawStaticObjectPrisms3D(Thing &obj) {
const PrismPartDef *parts = (obj.type == kObjBBed) ? kBBedParts : kBedParts;
for (int i = 0; i < 3; i++) {
_gfx->setDepthRange((2 - i) * 0.002f, 1.0f);
- draw3DPrism(obj, parts[i], false, -1, true, false);
+ // MakeBed/MakeBBed draw the headboard (part 0) with DrawPrism(...,1).
+ // It is a single flat quad, so plain back-face culling would drop it
+ // whenever the bed is approached from its non-clockwise side.
+ draw3DPrism(obj, parts[i], false, -1, true, i == 0);
}
_gfx->setDepthRange(0.0f, 1.0f);
break;
Commit: f5174eb33f3d751b0c053e3b7935689b30de199e
https://github.com/scummvm/scummvm/commit/f5174eb33f3d751b0c053e3b7935689b30de199e
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-08-10T16:06:00+02:00
Commit Message:
COLONY: make sure boxes block doorways
Changed paths:
engines/colony/movement.cpp
diff --git a/engines/colony/movement.cpp b/engines/colony/movement.cpp
index f0c5f85e096..31f1149f83f 100644
--- a/engines/colony/movement.cpp
+++ b/engines/colony/movement.cpp
@@ -158,6 +158,9 @@ struct ObjectFootprint {
int halfY;
};
+// Fills fp with the object's collision box in its own rotated space. Returning
+// false means "no footprint" â the caller then blocks the whole cell, the way
+// CHCKWALL.C did for every object.
bool objectFootprintForType(int type, ObjectFootprint &fp) {
fp.centerX = 0;
fp.centerY = 0;
@@ -236,9 +239,14 @@ bool objectFootprintForType(int type, ObjectFootprint &fp) {
return true;
case kObjBox1:
case kObjBox2:
- fp.halfX = 55;
- fp.halfY = 55;
- return true;
+ // No footprint on purpose: storage crates keep CHCKWALL.C's full-cell
+ // block. The level design seals doorways with them until the forklift
+ // carries them off (the first door on colony floor 1, MAP.2 (11,1)->(12,1),
+ // is blocked by the crate in (12,1) and must report text 75). Any
+ // footprint smaller than the cell lets the player squeeze past, and
+ // several crates are placed at odd angles, so even a full 128x128 box
+ // would leave a rotated corner open.
+ return false;
case kObjForkLift:
fp.halfX = 100;
fp.halfY = 120;
Commit: bad60aab0ad28da2469960680427803074084945
https://github.com/scummvm/scummvm/commit/bad60aab0ad28da2469960680427803074084945
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-08-10T16:06:00+02:00
Commit Message:
COLONY: added missing dave easter egg
Changed paths:
engines/colony/colony.h
engines/colony/interaction.cpp
engines/colony/intro.cpp
engines/colony/render.cpp
engines/colony/render_objects.cpp
engines/colony/sound.cpp
engines/colony/sound.h
diff --git a/engines/colony/colony.h b/engines/colony/colony.h
index 5991129bd6a..0aa6661f8e8 100644
--- a/engines/colony/colony.h
+++ b/engines/colony/colony.h
@@ -277,7 +277,10 @@ enum ObjColor {
kColorSoldierEye = 110,
kColorQueenBody = 111,
kColorQueenEye = 112,
- kColorQueenWingRed = 113
+ kColorQueenWingRed = 113,
+ // The monolith is cBLACK in the DOS table but has its own Mac entry
+ // (c_monolith), so it cannot share the generic kColorBlack mapping.
+ kColorMonolith = 114
};
enum {
@@ -842,6 +845,7 @@ private:
bool loadAnimation(const Common::String &name);
void deleteAnimation();
void takeOff();
+ void fullOfStars();
void gameOver(bool kill);
int countSavedCryos() const;
void playAnimation();
diff --git a/engines/colony/interaction.cpp b/engines/colony/interaction.cpp
index a1ed60d3366..16752c5d8d3 100644
--- a/engines/colony/interaction.cpp
+++ b/engines/colony/interaction.cpp
@@ -186,9 +186,9 @@ void ColonyEngine::interactWithObject(int objNum) {
playAnimation();
break;
case kObjScreen:
- // original game shows "Full of stars" effect/text
- _sound->play(Sound::kStars1);
- inform("I CAN SEE THROUGH IT...", true);
+ // COMMAND.C/IBM_COMM.C: the monolith calls FullOfStars() in all three
+ // forklift states.
+ fullOfStars();
break;
case kObjToilet:
diff --git a/engines/colony/intro.cpp b/engines/colony/intro.cpp
index 10ad089ce5f..e50c9161447 100644
--- a/engines/colony/intro.cpp
+++ b/engines/colony/intro.cpp
@@ -1404,6 +1404,59 @@ void ColonyEngine::takeOff() {
_centerY = savedCenterY;
}
+// Touching the monolith (the SCREEN object) blacks the screen out and runs the
+// star gate. Mac intro.c FullOfStars() plays the digitized "Dave" clip over it;
+// DOS IBM_INTR.C reaches the same effect through Pause(), which is silent and
+// instead leaves the starfield up until the player clicks.
+void ColonyEngine::fullOfStars() {
+ Common::Rect savedScreenR = _screenR;
+ Common::Rect savedClip = _clip;
+ int savedCenterX = _centerX;
+ int savedCenterY = _centerY;
+
+ // Both releases run the effect over the whole screen (Mac rScreen, DOS sR),
+ // not over the 3D viewport.
+ _screenR = Common::Rect(0, 0, _width, _height);
+ _clip = _screenR;
+ _centerX = _width / 2;
+ _centerY = _height / 2;
+
+ debugC(1, kColonyDebugUI, "fullOfStars()");
+
+ const bool isMac = (getPlatform() == Common::kPlatformMacintosh);
+
+ // Pause(): drop queued input so the click that triggered the monolith does
+ // not immediately end the starfield.
+ Common::Event event;
+ while (_system->getEventManager()->pollEvent(event)) {} // ignore events
+
+ _gfx->clear(_gfx->black());
+ _gfx->copyToScreen();
+
+ // DoDaveSound() stops whatever is playing and starts the clip; Pause() on
+ // DOS touches no sound at all, so nothing is cut short there.
+ if (isMac)
+ _sound->play(Sound::kDave);
+
+ // Mac makestars(rScreen, 0) times itself out; DOS makestars(sR, TRUE) keeps
+ // streaking until the player clicks.
+ makeStars(_screenR, isMac ? 0 : 1);
+
+ // EraseRect(&sR) / CloseWindow(). The dashboard and the view come back on
+ // the next frame of the main loop, which is what DOS drewDashBoard=0 forces.
+ _gfx->clear(_gfx->black());
+ _gfx->copyToScreen();
+
+ // No stop() here: KillTSound() waits for the clip to finish before freeing
+ // it, so the tail of "Dave" plays on over the restored view. The mixer does
+ // that for us without blocking.
+
+ _screenR = savedScreenR;
+ _clip = savedClip;
+ _centerX = savedCenterX;
+ _centerY = savedCenterY;
+}
+
void ColonyEngine::gameOver(bool kill) {
Common::Rect savedScreenR = _screenR;
Common::Rect savedClip = _clip;
diff --git a/engines/colony/render.cpp b/engines/colony/render.cpp
index 32cf7e59df8..6f23dda727b 100644
--- a/engines/colony/render.cpp
+++ b/engines/colony/render.cpp
@@ -161,6 +161,7 @@ const DOSColorEntry &lookupDOSColor(int colorIdx, int level) {
case kColorHCore3: return kHCore3;
case kColorHCore4: return kHCore4;
case kColorCCore: return kCCoreEntry;
+ case kColorMonolith: return g_dosColors[kColorBlack]; // SCREEN.C: cBLACK on DOS
case kColorEyeball: return g_dosColors[kColorEye];
case kColorEyeIris:
case kColorMiniEyeIris:
@@ -205,6 +206,7 @@ int mapObjColorToMacColor(int colorIdx, int level) {
case kColorConsole: return 79; // c_console
case kColorTV: return 76; // c_tv
case kColorTVScreen: return 77; // c_tvscreen
+ case kColorMonolith: return 78; // c_monolith (solid black, fg and bg)
case kColorDrawer: return 96; // c_vanity
case kColorDesk: return 58; // c_desk
case kColorDeskTop: return 59; // c_desktop
diff --git a/engines/colony/render_objects.cpp b/engines/colony/render_objects.cpp
index b98af7fcef5..1900f9092d4 100644
--- a/engines/colony/render_objects.cpp
+++ b/engines/colony/render_objects.cpp
@@ -226,9 +226,10 @@ const int kScreenPts[8][3] = {
{-16, 64, 0}, {16, 64, 0}, {16, -64, 0}, {-16, -64, 0},
{-16, 64, 288}, {16, 64, 288}, {16, -64, 288}, {-16, -64, 288}
};
+// SCREEN.H: the monolith, 32x128x288 = 1:4:9, four sides in c_monolith and no caps.
const int kScreenSurf[4][8] = {
- {kColorBlack, 4, 0, 3, 7, 4, 0, 0}, {kColorBlack, 4, 3, 2, 6, 7, 0, 0},
- {kColorBlack, 4, 1, 0, 4, 5, 0, 0}, {kColorBlack, 4, 2, 1, 5, 6, 0, 0}
+ {kColorMonolith, 4, 0, 3, 7, 4, 0, 0}, {kColorMonolith, 4, 3, 2, 6, 7, 0, 0},
+ {kColorMonolith, 4, 1, 0, 4, 5, 0, 0}, {kColorMonolith, 4, 2, 1, 5, 6, 0, 0}
};
const int kTableTopPts[4][3] = {
{-128, 128, 100}, {128, 128, 100}, {128, -128, 100}, {-128, -128, 100}
diff --git a/engines/colony/sound.cpp b/engines/colony/sound.cpp
index d72708bbe05..1c79e25bdb2 100644
--- a/engines/colony/sound.cpp
+++ b/engines/colony/sound.cpp
@@ -372,6 +372,7 @@ bool Sound::playMacSound(int soundID, bool loop) {
case kBath: resID = 11589; break;
case kMars: resID = 23390; break;
case kBeamMe: resID = 5342; break;
+ case kDave: resID = 13651; break; // DAVE (the monolith's "full of stars" clip)
default: break;
}
diff --git a/engines/colony/sound.h b/engines/colony/sound.h
index 78c8fb936ef..e09be141b08 100644
--- a/engines/colony/sound.h
+++ b/engines/colony/sound.h
@@ -79,7 +79,8 @@ public:
kToilet,
kBath,
kMars,
- kBeamMe
+ kBeamMe,
+ kDave
};
private:
More information about the Scummvm-git-logs
mailing list