[Scummvm-git-logs] scummvm master -> 0f96c2383e72cc4937cdd20188bb1294fad9ff23
neuromancer
noreply at scummvm.org
Sun Nov 16 08:35:58 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:
a76113e996 FREESCAPE: avoid visual glitches with better near clip plane values in castle
d5db669057 FREESCAPE: make sure castle can trigger endgame in the zx release
0f96c2383e FREESCAPE: improved endgame in the zx release
Commit: a76113e996882e2ece016e3994657d8f36a868bf
https://github.com/scummvm/scummvm/commit/a76113e996882e2ece016e3994657d8f36a868bf
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2025-11-16T09:35:33+01:00
Commit Message:
FREESCAPE: avoid visual glitches with better near clip plane values in castle
Changed paths:
engines/freescape/games/castle/castle.cpp
diff --git a/engines/freescape/games/castle/castle.cpp b/engines/freescape/games/castle/castle.cpp
index c9057345bad..2f10f506552 100644
--- a/engines/freescape/games/castle/castle.cpp
+++ b/engines/freescape/games/castle/castle.cpp
@@ -341,6 +341,8 @@ void CastleEngine::gotoArea(uint16 areaID, int entranceID) {
_currentArea->show();
_maxFallingDistance = MAX(32, _currentArea->getScale() * 16 - 2);
+ _nearClipPlane = _currentArea->isOutside() ? 2 : 0.5;
+
if (entranceID > 0)
traverseEntrance(entranceID);
Commit: d5db6690576b5247555373f4fc9b235596c16cd4
https://github.com/scummvm/scummvm/commit/d5db6690576b5247555373f4fc9b235596c16cd4
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2025-11-16T09:35:33+01:00
Commit Message:
FREESCAPE: make sure castle can trigger endgame in the zx release
Changed paths:
engines/freescape/language/instruction.cpp
engines/freescape/movement.cpp
diff --git a/engines/freescape/language/instruction.cpp b/engines/freescape/language/instruction.cpp
index acd779c3a1d..bd25e235c5a 100644
--- a/engines/freescape/language/instruction.cpp
+++ b/engines/freescape/language/instruction.cpp
@@ -108,7 +108,8 @@ bool FreescapeEngine::executeObjectConditions(GeometricObject *obj, bool shot, b
_syncSound = false;
_objExecutingCodeSize = collided ? obj->getSize() : Math::Vector3d();
if (collided) {
- clearGameBit(31); // We collided with something that has code
+ if (!isCastle())
+ clearGameBit(31); // We collided with something that has code
debugC(1, kFreescapeDebugCode, "Executing with collision flag: %s", obj->_conditionSource.c_str());
} else if (shot)
debugC(1, kFreescapeDebugCode, "Executing with shot flag: %s", obj->_conditionSource.c_str());
@@ -368,7 +369,7 @@ void FreescapeEngine::executeExecute(FCLInstruction &instruction) {
if (!obj) {
debugC(1, kFreescapeDebugCode, "WARNING: executing instructions from a non-existent object %d", objId);
return;
- }
+ }
assert(obj);
FCLInstructionVector &condition = ((Entrance *)obj)->_condition;
executeCode(condition, true, true, true, true);
diff --git a/engines/freescape/movement.cpp b/engines/freescape/movement.cpp
index d527b33dd60..ed4c5f7a961 100644
--- a/engines/freescape/movement.cpp
+++ b/engines/freescape/movement.cpp
@@ -329,7 +329,8 @@ bool FreescapeEngine::rise() {
if (_currentArea->getAreaID() == previousAreaID) {
_playerHeightNumber--;
changePlayerHeight(_playerHeightNumber);
- setGameBit(31);
+ if (!isCastle())
+ setGameBit(31);
}
} else
result = true;
@@ -438,7 +439,8 @@ void FreescapeEngine::updatePlayerMovementClassic(float deltaTime) {
if (_currentArea->getAreaID() == previousAreaID)
executeMovementConditions();
_gotoExecuted = false;
- clearGameBit(31);
+ if (!isCastle())
+ clearGameBit(31);
}
void FreescapeEngine::updatePlayerMovementSmooth(float deltaTime) {
@@ -486,7 +488,8 @@ void FreescapeEngine::updatePlayerMovementSmooth(float deltaTime) {
executeMovementConditions();
}
_gotoExecuted = false;
- clearGameBit(31);
+ if (!isCastle())
+ clearGameBit(31);
}
void FreescapeEngine::resolveCollisions(Math::Vector3d const position) {
@@ -510,7 +513,7 @@ void FreescapeEngine::resolveCollisions(Math::Vector3d const position) {
if (_flyMode) {
if ((lastPosition - newPosition).length() < 1) { // Something is blocking the player
- if (!executed)
+ if (!executed && !isCastle())
setGameBit(31);
playSound(_soundIndexCollide, false, _movementSoundHandle);
}
@@ -535,7 +538,7 @@ void FreescapeEngine::resolveCollisions(Math::Vector3d const position) {
if (_lastPosition.y() < newPosition.y())
isSteppingUp = true;
- if (!executed)
+ if (!executed && !isCastle())
setGameBit(31);
isCollidingWithWall = true;
@@ -560,7 +563,7 @@ void FreescapeEngine::resolveCollisions(Math::Vector3d const position) {
_endGameDelayTicks = 60 * 5;
if (isEclipse()) // No need for an variable index, since these are special types of sound
playSoundFx(0, true);
- else
+ else
playSound(_soundIndexFall, false, _movementSoundHandle);
if (_hasFallen)
@@ -570,7 +573,7 @@ void FreescapeEngine::resolveCollisions(Math::Vector3d const position) {
if (!_hasFallen && fallen > 0) {
isSteppingDown = true;
// Position in Y was changed, let's re-run effects
- runCollisionConditions(_lastPosition, newPosition);
+ runCollisionConditions(_lastPosition, newPosition);
}
if (isSteppingUp && (newPosition - _lastPosition).length() <= 1) {
Commit: 0f96c2383e72cc4937cdd20188bb1294fad9ff23
https://github.com/scummvm/scummvm/commit/0f96c2383e72cc4937cdd20188bb1294fad9ff23
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2025-11-16T09:35:33+01:00
Commit Message:
FREESCAPE: improved endgame in the zx release
Changed paths:
engines/freescape/games/castle/castle.cpp
engines/freescape/games/castle/zx.cpp
engines/freescape/ui.cpp
diff --git a/engines/freescape/games/castle/castle.cpp b/engines/freescape/games/castle/castle.cpp
index 2f10f506552..62d90440f5d 100644
--- a/engines/freescape/games/castle/castle.cpp
+++ b/engines/freescape/games/castle/castle.cpp
@@ -483,7 +483,8 @@ void CastleEngine::endGame() {
if (isDOS()) {
drawFullscreenEndGameAndWait();
- }
+ } else
+ drawFullscreenGameOverAndWait();
} else {
drawFullscreenGameOverAndWait();
}
@@ -870,11 +871,18 @@ void CastleEngine::drawFullscreenGameOverAndWait() {
playSound(9, false, _soundFxHandle);
}
+ if (isSpectrum() && getGameBit(31)) {
+ insertTemporaryMessage(_messagesList[5], _countdown - 1);
+ }
+
while (!shouldQuit() && cont) {
if (_temporaryMessageDeadlines.empty()) {
insertTemporaryMessage(scoreString, _countdown - 2);
insertTemporaryMessage(spiritsDestroyedString, _countdown - 4);
insertTemporaryMessage(keysCollectedString, _countdown - 6);
+ if (isSpectrum() && getGameBit(31)) {
+ insertTemporaryMessage(_messagesList[5], _countdown - 8);
+ }
}
while (_eventManager->pollEvent(event)) {
@@ -1563,6 +1571,9 @@ void CastleEngine::drawLiftingGate(Graphics::Surface *surface) {
}
void CastleEngine::drawDroppingGate(Graphics::Surface *surface) {
+ if (isSpectrum() && getGameBit(31))
+ return; // No gate dropping when the player escaped
+
if (_droppingGateStartTicks <= 0)
return;
diff --git a/engines/freescape/games/castle/zx.cpp b/engines/freescape/games/castle/zx.cpp
index 2623cf9f901..6eb5354714b 100644
--- a/engines/freescape/games/castle/zx.cpp
+++ b/engines/freescape/games/castle/zx.cpp
@@ -33,7 +33,7 @@ void CastleEngine::initZX() {
_soundIndexCollide = 3;
_soundIndexStartFalling = -1;
_soundIndexFallen = 1;
- _soundIndexFall = 6;
+ _soundIndexFall = 6;
_soundIndexStepUp = 12;
_soundIndexStepDown = 12;
_soundIndexMenu = 3;
@@ -259,7 +259,10 @@ void CastleEngine::drawZXUI(Graphics::Surface *surface) {
_temporaryMessageDeadlines.push_back(deadline);
} else {
if (_gameStateControl != kFreescapeGameStateEnd) {
- drawStringInSurface(_currentArea->_name, 120, 179, front, black, surface);
+ if (getGameBit(31)) { // The final cutscene is playing but it is not ended yet
+ drawStringInSurface(_messagesList[5], 120, 179, front, black, surface); // "You did it!"
+ } else
+ drawStringInSurface(_currentArea->_name, 120, 179, front, black, surface);
}
}
diff --git a/engines/freescape/ui.cpp b/engines/freescape/ui.cpp
index 78621ffc2d2..d4712ff1898 100644
--- a/engines/freescape/ui.cpp
+++ b/engines/freescape/ui.cpp
@@ -41,6 +41,8 @@ void FreescapeEngine::waitInLoop(int maxWait) {
case Common::EVENT_MOUSEMOVE:
if (_hasFallen || _playerWasCrushed || _gameStateControl != kFreescapeGameStatePlaying)
break;
+ if (isCastle() && isSpectrum() && getGameBit(31)) // Game is finished
+ break;
mousePos = event.mouse;
if (_demoMode)
More information about the Scummvm-git-logs
mailing list