[Scummvm-git-logs] scummvm master -> 1f6e78cc16a569a66aa72184401458858a80bdf8
neuromancer
noreply at scummvm.org
Sat May 16 06:11:28 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:
2f6d2b32f7 FREESCAPE: better shooting effect for driller amiga/atari
8471b1046f FREESCAPE: added some missing sounds in amiga/atari
1f6e78cc16 FREESCAPE: implement roll in shader render
Commit: 2f6d2b32f74513b027347adf8d2ec7a252791e5c
https://github.com/scummvm/scummvm/commit/2f6d2b32f74513b027347adf8d2ec7a252791e5c
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-05-16T08:11:13+02:00
Commit Message:
FREESCAPE: better shooting effect for driller amiga/atari
Changed paths:
engines/freescape/games/driller/driller.cpp
diff --git a/engines/freescape/games/driller/driller.cpp b/engines/freescape/games/driller/driller.cpp
index 65629226fa4..96245770072 100644
--- a/engines/freescape/games/driller/driller.cpp
+++ b/engines/freescape/games/driller/driller.cpp
@@ -1031,26 +1031,50 @@ void DrillerEngine::drawSensorShoot(Sensor *sensor) {
playSound(_soundIndexHit, true, _soundFxHandle);
}
+ Math::Vector3d sensorPos = sensor->getOrigin();
+
+ if (isAmiga() || isAtariST()) {
+ // Fan 8 lines emanating from the sensor toward points spread around
+ // the camera's view frustum (4 corners + 4 edge midpoints), matching
+ // the 8 lines of the original Amiga routine (BTE922). The targets
+ // have to sit in front of the camera along _cameraFront
+ float fwd = _playerHeight;
+ float spread = _playerHeight;
+ Math::Vector3d basePos = _position + _cameraFront * fwd;
+ Math::Vector3d right = _cameraRight * spread;
+ Math::Vector3d up(0, spread, 0);
+
+ _gfx->renderSensorShoot(1, sensorPos, basePos - right - up, _viewArea); // bottom-left
+ _gfx->renderSensorShoot(1, sensorPos, basePos + right - up, _viewArea); // bottom-right
+ _gfx->renderSensorShoot(1, sensorPos, basePos + right + up, _viewArea); // top-right
+ _gfx->renderSensorShoot(1, sensorPos, basePos - right + up, _viewArea); // top-left
+ _gfx->renderSensorShoot(1, sensorPos, basePos + up, _viewArea); // top-center
+ _gfx->renderSensorShoot(1, sensorPos, basePos - up, _viewArea); // bottom-center
+ _gfx->renderSensorShoot(1, sensorPos, basePos - right, _viewArea); // middle-left
+ _gfx->renderSensorShoot(1, sensorPos, basePos + right, _viewArea); // middle-right
+ return;
+ }
+
Math::Vector3d target;
target = _position;
target.y() = target.y() - _playerHeight;
target.x() = target.x() - 5;
- _gfx->renderSensorShoot(1, sensor->getOrigin(), target, _viewArea);
+ _gfx->renderSensorShoot(1, sensorPos, target, _viewArea);
target = _position;
target.y() = target.y() - _playerHeight;
target.x() = target.x() + 5;
- _gfx->renderSensorShoot(1, sensor->getOrigin(), target, _viewArea);
+ _gfx->renderSensorShoot(1, sensorPos, target, _viewArea);
target = _position;
target.y() = target.y() + _playerHeight;
target.x() = target.x() - 5;
- _gfx->renderSensorShoot(1, sensor->getOrigin(), target, _viewArea);
+ _gfx->renderSensorShoot(1, sensorPos, target, _viewArea);
target = _position;
target.y() = target.y() + _playerHeight;
target.x() = target.x() + 5;
- _gfx->renderSensorShoot(1, sensor->getOrigin(), target, _viewArea);
+ _gfx->renderSensorShoot(1, sensorPos, target, _viewArea);
}
void DrillerEngine::updateTimeVariables() {
Commit: 8471b1046ffbd67df469a8bcd01a0a5bcceba329
https://github.com/scummvm/scummvm/commit/8471b1046ffbd67df469a8bcd01a0a5bcceba329
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-05-16T08:11:13+02:00
Commit Message:
FREESCAPE: added some missing sounds in amiga/atari
Changed paths:
engines/freescape/games/driller/driller.cpp
diff --git a/engines/freescape/games/driller/driller.cpp b/engines/freescape/games/driller/driller.cpp
index 96245770072..4ca5fb81de8 100644
--- a/engines/freescape/games/driller/driller.cpp
+++ b/engines/freescape/games/driller/driller.cpp
@@ -578,6 +578,12 @@ void DrillerEngine::pressedKey(const int keycode) {
debugC(1, kFreescapeDebugMove, "Distance to gas pocket: %f", distanceToPocket);
float success = _useAutomaticDrilling ? 100.0 : 100.0 * (1.0 - distanceToPocket / _currentArea->_gasPocketRadius);
+ // Play the "processing" sound up front (matches BTF660 in the
+ // original Amiga code, where sound 5 starts before the
+ // RIG POSITIONED / NO GAS FOUND messages are displayed and
+ // before subsequent state changes can clobber the channel).
+ if (isDOS() || isAmiga() || isAtariST())
+ playSound(_soundIndexAreaChange, false, _soundFxHandle);
insertTemporaryMessage(_messagesList[3], _countdown - 2);
addDrill(drill, success > 0);
if (success <= 0) {
@@ -603,8 +609,6 @@ void DrillerEngine::pressedKey(const int keycode) {
} else
_drillStatusByArea[_currentArea->getAreaID()] = kDrillerRigOutOfPlace;
executeMovementConditions();
- if (isDOS())
- playSound(_soundIndexAreaChange, false, _soundFxHandle);
} else if (keycode == kActionCollectDrillingRig) {
if (isDOS() && isDemo()) // No support for drilling here yet
return;
@@ -646,7 +650,7 @@ void DrillerEngine::pressedKey(const int keycode) {
assert(scoreToRemove <= uint32(_gameStateVars[k8bitVariableScore]));
_gameStateVars[k8bitVariableScore] -= scoreToRemove;
executeMovementConditions();
- if (isDOS())
+ if (isDOS() || isAmiga() || isAtariST())
playSound(_soundIndexAreaChange, false, _soundFxHandle);
}
}
Commit: 1f6e78cc16a569a66aa72184401458858a80bdf8
https://github.com/scummvm/scummvm/commit/1f6e78cc16a569a66aa72184401458858a80bdf8
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-05-16T08:11:13+02:00
Commit Message:
FREESCAPE: implement roll in shader render
Changed paths:
engines/freescape/gfx_opengl_shaders.cpp
diff --git a/engines/freescape/gfx_opengl_shaders.cpp b/engines/freescape/gfx_opengl_shaders.cpp
index 2ead02a73ea..0effc9fb0ce 100644
--- a/engines/freescape/gfx_opengl_shaders.cpp
+++ b/engines/freescape/gfx_opengl_shaders.cpp
@@ -297,7 +297,21 @@ void OpenGLShaderRenderer::positionCamera(const Math::Vector3d &pos, const Math:
viewMatrix.translate(-pos);
viewMatrix.transpose();
- _modelViewMatrix = viewMatrix * lookMatrix;
+ // Roll around the camera's forward axis. The matrix is stored in the
+ // same transposed convention as lookMatrix (row-major storage that
+ // becomes column-major when handed to GL via getData()), so the entries
+ // are the transpose of the standard glRotatef(rollAngle, 0, 0, 1).
+ float c = cos(Math::deg2rad(rollAngle));
+ float s = sin(Math::deg2rad(rollAngle));
+ Math::Matrix4 rollMatrix;
+ rollMatrix(0, 0) = c;
+ rollMatrix(0, 1) = s;
+ rollMatrix(1, 0) = -s;
+ rollMatrix(1, 1) = c;
+ rollMatrix(2, 2) = 1.0f;
+ rollMatrix(3, 3) = 1.0f;
+
+ _modelViewMatrix = viewMatrix * rollMatrix * lookMatrix;
Math::Matrix4 proj = _projectionMatrix;
Math::Matrix4 model = _modelViewMatrix;
More information about the Scummvm-git-logs
mailing list