[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