[Scummvm-git-logs] scummvm master -> 1352d06f2ae921af342bf7c1c6ddf9f3654b7a3e

aquadran noreply at scummvm.org
Wed Sep 3 10:29:47 UTC 2025


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

Summary:
1352d06f2a WINTERMUTE: Re-arrangement code to match original


Commit: 1352d06f2ae921af342bf7c1c6ddf9f3654b7a3e
    https://github.com/scummvm/scummvm/commit/1352d06f2ae921af342bf7c1c6ddf9f3654b7a3e
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-09-03T12:29:42+02:00

Commit Message:
WINTERMUTE: Re-arrangement code to match original

Changed paths:
    engines/wintermute/ad/ad_attach_3dx.cpp
    engines/wintermute/ad/ad_object_3d.cpp
    engines/wintermute/ad/ad_scene.cpp
    engines/wintermute/ad/ad_scene_geometry.cpp
    engines/wintermute/base/base_game.cpp
    engines/wintermute/base/gfx/xanimation.cpp
    engines/wintermute/base/gfx/xmodel.cpp
    engines/wintermute/base/sound/base_sound.cpp


diff --git a/engines/wintermute/ad/ad_attach_3dx.cpp b/engines/wintermute/ad/ad_attach_3dx.cpp
index ef195377357..63075c24af6 100644
--- a/engines/wintermute/ad/ad_attach_3dx.cpp
+++ b/engines/wintermute/ad/ad_attach_3dx.cpp
@@ -83,20 +83,16 @@ bool AdAttach3DX::update() {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdAttach3DX::displayAttachable(DXMatrix *viewMat, bool registerObjects) {
+	BaseRenderer3D *renderer = _gameRef->_renderer3D;
 	DXMatrix finalMat;
 	DXMatrixMultiply(&finalMat, &_worldMatrix, viewMat);
-	_gameRef->_renderer3D->setWorldTransform(finalMat);
+	renderer->setWorldTransform(finalMat);
 
 	if (_xmodel) {
 		_xmodel->render();
 
 		if (registerObjects && _owner && _owner->_registrable) {
-			_gameRef->_renderer->_rectList.add(new BaseActiveRect(_gameRef, _owner, _xmodel,
-			                                                      _xmodel->_boundingRect.left,
-			                                                      _xmodel->_boundingRect.top,
-			                                                      _xmodel->_boundingRect.right - _xmodel->_boundingRect.left,
-			                                                      _xmodel->_boundingRect.bottom - _xmodel->_boundingRect.top,
-			                                                      true));
+			renderer->_rectList.add(new BaseActiveRect(_gameRef, _owner, _xmodel, _xmodel->_boundingRect.left, _xmodel->_boundingRect.top, _xmodel->_boundingRect.right - _xmodel->_boundingRect.left, _xmodel->_boundingRect.bottom - _xmodel->_boundingRect.top, true));
 		}
 	}
 
@@ -105,6 +101,7 @@ bool AdAttach3DX::displayAttachable(DXMatrix *viewMat, bool registerObjects) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdAttach3DX::displayShadowVol(DXMatrix *modelMat, DXVector3 *light, float extrusionDepth, bool update) {
+	BaseRenderer3D *renderer = _gameRef->_renderer3D;
 	DXMatrix finalMat;
 	DXMatrixMultiply(&finalMat, &_worldMatrix, modelMat);
 
@@ -114,7 +111,7 @@ bool AdAttach3DX::displayShadowVol(DXMatrix *modelMat, DXVector3 *light, float e
 			_xmodel->updateShadowVol(getShadowVolume(), &finalMat, light, extrusionDepth);
 		}
 
-		_gameRef->_renderer3D->setWorldTransform(finalMat);
+		renderer->setWorldTransform(finalMat);
 		getShadowVolume()->renderToStencilBuffer();
 	}
 
diff --git a/engines/wintermute/ad/ad_object_3d.cpp b/engines/wintermute/ad/ad_object_3d.cpp
index 37dd8f7999b..b33767c5085 100644
--- a/engines/wintermute/ad/ad_object_3d.cpp
+++ b/engines/wintermute/ad/ad_object_3d.cpp
@@ -126,14 +126,15 @@ bool AdObject3D::update() {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdObject3D::convert3DTo2D(DXMatrix *worldMat, int32 *posX, int32 *posY) {
+	BaseRenderer3D *renderer = _gameRef->_renderer3D;
 	DXMatrix viewMat, projMat;
 	DXVector3 vec2d(0.0f, 0.0f, 0.0f);
-	DXVector3 origin(0.0f, 0.0f, 0.0f);
-	_gameRef->_renderer3D->getViewTransform(&viewMat);
-	_gameRef->_renderer3D->getProjectionTransform(&projMat);
+	renderer->getViewTransform(&viewMat);
+	renderer->getProjectionTransform(&projMat);
 
-	DXViewport viewport = _gameRef->_renderer3D->getViewPort();
+	DXViewport viewport = renderer->getViewPort();
 
+	DXVector3 origin(0.0f, 0.0f, 0.0f);
 	DXVec3Project(&vec2d, &origin, &viewport, &projMat, &viewMat, worldMat);
 
 	*posX = vec2d._x + _gameRef->_offsetX - _gameRef->_renderer3D->_drawOffsetX;
diff --git a/engines/wintermute/ad/ad_scene.cpp b/engines/wintermute/ad/ad_scene.cpp
index 6098314b3f4..3ed2395f9fc 100644
--- a/engines/wintermute/ad/ad_scene.cpp
+++ b/engines/wintermute/ad/ad_scene.cpp
@@ -3582,7 +3582,7 @@ bool AdScene::getRegionsAt(int x, int y, AdRegion **regionList, int numRegions)
 			}
 		}
 	}
-	for (int i = numUsed; i < numRegions; i++) {
+	for (int32 i = numUsed; i < numRegions; i++) {
 		regionList[i] = nullptr;
 	}
 
diff --git a/engines/wintermute/ad/ad_scene_geometry.cpp b/engines/wintermute/ad/ad_scene_geometry.cpp
index d55ec10d1ea..0334df03bf5 100644
--- a/engines/wintermute/ad/ad_scene_geometry.cpp
+++ b/engines/wintermute/ad/ad_scene_geometry.cpp
@@ -118,8 +118,9 @@ void AdSceneGeometry::cleanup() {
 	_waypointGroups.removeAll();
 
 	for (i = 0; i < _cameras.getSize(); i++) {
-		if (_gameRef->_renderer3D->_camera == _cameras[i])
-			_gameRef->_renderer3D->_camera = nullptr;
+		BaseRenderer3D *renderer = _gameRef->_renderer3D;
+		if (renderer->_camera == _cameras[i])
+			renderer->_camera = nullptr;
 		delete _cameras[i];
 	}
 	_cameras.removeAll();
@@ -411,13 +412,14 @@ DXMatrix *AdSceneGeometry::getViewMatrix() {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::storeDrawingParams() {
-	// store values
-	_drawingViewport = _gameRef->_renderer3D->getViewPort();
+    BaseRenderer3D *renderer = _gameRef->_renderer3D;
 
-	_gameRef->_renderer3D->getWorldTransform(&_lastWorldMat);
-	_gameRef->_renderer3D->getViewTransform(&_lastViewMat);
-	_gameRef->_renderer3D->getProjectionTransform(&_lastProjMat);
+	// store values
+	_drawingViewport = renderer->getViewPort();
 
+	renderer->getWorldTransform(&_lastWorldMat);
+	renderer->getViewTransform(&_lastViewMat);
+	renderer->getProjectionTransform(&_lastProjMat);
 
 	AdScene *scene = ((AdGame *)_gameRef)->_scene;
 	if (scene) {
@@ -679,9 +681,11 @@ bool AdSceneGeometry::convert2Dto3DTolerant(int x, int y, DXVector3 *pos) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::convert2Dto3D(int x, int y, DXVector3 *pos) {
+	BaseRenderer3D *renderer = _gameRef->_renderer3D;
+
 	if (!_lastValuesInitialized) {
-		_drawingViewport = _gameRef->_renderer3D->getViewPort();
-		_gameRef->_renderer3D->getProjectionTransform(&_lastProjMat);
+		_drawingViewport = renderer->getViewPort();
+		renderer->getProjectionTransform(&_lastProjMat);
 	}
 
 	float resWidth, resHeight;
@@ -889,14 +893,13 @@ bool AdSceneGeometry::initLoop() {
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::createLights() {
 	// disable all lights
-	int32 maxLights = _gameRef->_renderer3D->getMaxActiveLights();
+	BaseRenderer3D *renderer = _gameRef->_renderer3D;
+	int32 maxLights = renderer->getMaxActiveLights();
 	for (int32 i = 0; i < maxLights; i++) {
-		_gameRef->_renderer3D->lightEnable(i, false);
+		renderer->lightEnable(i, false);
 	}
 
-	int32 lightCount = MIN(_lights.getSize(), maxLights);
-
-	for (int32 i = 0; i < lightCount; i++) {
+	for (int32 i = 0; i < MIN(_lights.getSize(), maxLights); i++) {
 		_lights[i]->setLight(i);
 	}
 
@@ -906,7 +909,8 @@ bool AdSceneGeometry::createLights() {
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLights) {
 	const int maxLightCount = 100;
-	int maxLights = _gameRef->_renderer3D->getMaxActiveLights();
+	BaseRenderer3D *renderer = _gameRef->_renderer3D;
+	int maxLights = renderer->getMaxActiveLights();
 
 	int32 numActiveLights = 0;
 	for (int32 i = 0; i < _lights.getSize(); i++) {
@@ -953,14 +957,14 @@ bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLig
 			qsort_msvc(activeLights.getData(), activeLights.getSize(), sizeof(Light3D *), AdSceneGeometry::compareLights);
 
 			for (int32 i = 0; i < activeLights.getSize(); i++) {
-				activeLights[i]->_isAvailable = static_cast<int32>(i) < maxLights;
+				activeLights[i]->_isAvailable = i < maxLights;
 			}
 		}
 	}
 
 	// light all available lights
 	for (int32 i = 0; i < maxLightCount; i++) {
-		_gameRef->_renderer3D->lightEnable(i, false);
+		renderer->lightEnable(i, false);
 	}
 
 	numActiveLights = 0;
@@ -984,8 +988,8 @@ bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLig
 		}
 
 		if (_lights[i]->_isAvailable) {
+			renderer->lightEnable(i, _lights[i]->_active);
 			if (_lights[i]->_active) {
-				_gameRef->_renderer3D->lightEnable(i, _lights[i]->_active);
 				numActiveLights++;
 			}
 		}
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index 4f26ced5bdb..f74e7c809be 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -1229,6 +1229,54 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		return STATUS_OK;
 	}
 
+	//////////////////////////////////////////////////////////////////////////
+	// PlayMusic / PlayMusicChannel
+	//////////////////////////////////////////////////////////////////////////
+
+	//////////////////////////////////////////////////////////////////////////
+	// StopMusic / StopMusicChannel
+	//////////////////////////////////////////////////////////////////////////
+
+	//////////////////////////////////////////////////////////////////////////
+	// PauseMusic / PauseMusicChannel
+	//////////////////////////////////////////////////////////////////////////
+
+	//////////////////////////////////////////////////////////////////////////
+	// ResumeMusic / ResumeMusicChannel
+	//////////////////////////////////////////////////////////////////////////
+
+	//////////////////////////////////////////////////////////////////////////
+	// GetMusic / GetMusicChannel
+	//////////////////////////////////////////////////////////////////////////
+
+	//////////////////////////////////////////////////////////////////////////
+	// SetMusicPosition / SetMusicChannelPosition
+	//////////////////////////////////////////////////////////////////////////
+
+	//////////////////////////////////////////////////////////////////////////
+	// GetMusicPosition / GetMusicChannelPosition
+	//////////////////////////////////////////////////////////////////////////
+
+	//////////////////////////////////////////////////////////////////////////
+	// IsMusicPlaying / IsMusicChannelPlaying
+	//////////////////////////////////////////////////////////////////////////
+
+	//////////////////////////////////////////////////////////////////////////
+	// SetMusicVolume / SetMusicChannelVolume
+	//////////////////////////////////////////////////////////////////////////
+
+	//////////////////////////////////////////////////////////////////////////
+	// GetMusicVolume / GetMusicChannelVolume
+	//////////////////////////////////////////////////////////////////////////
+
+	//////////////////////////////////////////////////////////////////////////
+	// MusicCrossfade
+	//////////////////////////////////////////////////////////////////////////
+
+	//////////////////////////////////////////////////////////////////////////
+	// GetSoundLength
+	//////////////////////////////////////////////////////////////////////////
+
 	else if (_musicSystem->scCallMethod(script, stack, thisStack, name) == STATUS_OK) {
 		return STATUS_OK;
 	}
@@ -2781,7 +2829,8 @@ ScValue *BaseGame::scGetProperty(const Common::String &name) {
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "MaxActiveLights") {
 		if (_useD3D) {
-			_scValue->setInt(_renderer3D->getMaxActiveLights());
+			BaseRenderer3D *renderer = _gameRef->_renderer3D;
+			_scValue->setInt(renderer->getMaxActiveLights());
 		} else {
 			_scValue->setInt(0);
 		}
diff --git a/engines/wintermute/base/gfx/xanimation.cpp b/engines/wintermute/base/gfx/xanimation.cpp
index 15dc8f7d246..899a36fe143 100644
--- a/engines/wintermute/base/gfx/xanimation.cpp
+++ b/engines/wintermute/base/gfx/xanimation.cpp
@@ -220,23 +220,22 @@ bool Animation::loadAnimationKeyData(XAnimationKeyObject *animationKey) {
 			C3DUtils::decomposeMatrixSimple(&keyData, &transVec, &scaleVec, &qRot);
 
 			BonePositionKey *positionKey = new BonePositionKey;
-			BoneScaleKey *scaleKey = new BoneScaleKey;
-			BoneRotationKey *rotationKey = new BoneRotationKey;
-
 			positionKey->_time = time;
-			scaleKey->_time = time;
-			rotationKey->_time = time;
-
 			positionKey->_pos = transVec;
+			_posKeys.add(positionKey);
+
+			BoneScaleKey *scaleKey = new BoneScaleKey;
+			scaleKey->_time = time;
 			scaleKey->_scale = scaleVec;
+			_scaleKeys.add(scaleKey);
+
+			BoneRotationKey *rotationKey = new BoneRotationKey;
+			rotationKey->_time = time;
 			rotationKey->_rotation = qRot;
 
 			rotationKey->_rotation._x = -rotationKey->_rotation._x;
 			rotationKey->_rotation._y = -rotationKey->_rotation._y;
 			rotationKey->_rotation._z = -rotationKey->_rotation._z;
-
-			_posKeys.add(positionKey);
-			_scaleKeys.add(scaleKey);
 			_rotKeys.add(rotationKey);
 		}
 	} else {
diff --git a/engines/wintermute/base/gfx/xmodel.cpp b/engines/wintermute/base/gfx/xmodel.cpp
index 06423f9c570..4d12508d8d6 100644
--- a/engines/wintermute/base/gfx/xmodel.cpp
+++ b/engines/wintermute/base/gfx/xmodel.cpp
@@ -469,21 +469,23 @@ bool XModel::updateShadowVol(ShadowVolume *shadow, DXMatrix *modelMat, DXVector3
 
 //////////////////////////////////////////////////////////////////////////
 bool XModel::render() {
+	BaseRenderer3D *renderer = _gameRef->_renderer3D;
+
 	if (_rootFrame) {
 		// set culling
 		if (_owner && !_owner->_drawBackfaces) {
-			_gameRef->_renderer3D->enableCulling();
+			renderer->enableCulling();
 		} else {
-			_gameRef->_renderer3D->disableCulling();
+			renderer->disableCulling();
 		}
 
 		// render everything
 		bool res = _rootFrame->render(this);
 
 		// remember matrices for object picking purposes
-		_gameRef->_renderer3D->getWorldTransform(&_lastWorldMat);
-		_gameRef->_renderer3D->getViewTransform(&_lastViewMat);
-		_gameRef->_renderer3D->getProjectionTransform(&_lastProjMat);
+		renderer->getWorldTransform(&_lastWorldMat);
+		renderer->getViewTransform(&_lastViewMat);
+		renderer->getProjectionTransform(&_lastProjMat);
 
 		// remember scene offset
 		Common::Rect32 rc;
@@ -493,9 +495,9 @@ bool XModel::render() {
 
 		// margins
 		int mleft = rc.left;
-		int mright = _gameRef->_renderer->getWidth() - width - rc.left;
+		int mright = renderer->getWidth() - width - rc.left;
 		int mtop = rc.top;
-		int mbottom = _gameRef->_renderer->getHeight() - height - rc.top;
+		int mbottom = renderer->getHeight() - height - rc.top;
 
 		_lastOffsetX = _gameRef->_offsetX + (mleft - mright) / 2;
 		_lastOffsetY = _gameRef->_offsetY + (mtop - mbottom) / 2;
@@ -548,6 +550,7 @@ bool XModel::isTransparentAt(int x, int y) {
 	x += _lastOffsetX;
 	y += _lastOffsetY;
 
+	BaseRenderer3D *renderer = _gameRef->_renderer3D;
 	if (!_gameRef->_renderer3D->_camera)
 		return true;
 
@@ -561,8 +564,8 @@ bool XModel::isTransparentAt(int x, int y) {
 	y -= _drawingViewport._y + modHeight;
 
 	if (customViewport) {
-		x += _gameRef->_renderer3D->_drawOffsetX;
-		y += _gameRef->_renderer3D->_drawOffsetY;
+		x += renderer->_drawOffsetX;
+		y += renderer->_drawOffsetY;
 	}
 
 	DXVector3 pickRayDir;
@@ -607,13 +610,15 @@ void XModel::updateBoundingRect() {
 	_boundingRect.left = _boundingRect.top = INT_MAX_VALUE;
 	_boundingRect.right = _boundingRect.bottom = INT_MIN_VALUE;
 
+	BaseRenderer3D *renderer = _gameRef->_renderer3D;
+
 	DXMatrix viewMat, projMat, worldMat;
 	DXVector3 vec2d(0, 0, 0);
-	_gameRef->_renderer3D->getViewTransform(&viewMat);
-	_gameRef->_renderer3D->getProjectionTransform(&projMat);
-	_gameRef->_renderer3D->getWorldTransform(&worldMat);
+	renderer->getViewTransform(&viewMat);
+	renderer->getProjectionTransform(&projMat);
+	renderer->getWorldTransform(&worldMat);
 
-	_drawingViewport = _gameRef->_renderer3D->getViewPort();
+	_drawingViewport = renderer->getViewPort();
 
 	float x1 = _BBoxStart._x;
 	float x2 = _BBoxEnd._x;
@@ -648,10 +653,10 @@ void XModel::updateBoundingRect() {
 	DXVec3Project(&vec2d, &v222, &_drawingViewport, &projMat, &viewMat, &worldMat);
 	updateRect(&_boundingRect, &vec2d);
 
-	_boundingRect.left -= _gameRef->_renderer3D->_drawOffsetX;
-	_boundingRect.right -= _gameRef->_renderer3D->_drawOffsetX;
-	_boundingRect.bottom -= _gameRef->_renderer3D->_drawOffsetY;
-	_boundingRect.top -= _gameRef->_renderer3D->_drawOffsetY;
+	_boundingRect.left -= renderer->_drawOffsetX;
+	_boundingRect.right -= renderer->_drawOffsetX;
+	_boundingRect.bottom -= renderer->_drawOffsetY;
+	_boundingRect.top -= renderer->_drawOffsetY;
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1101,7 +1106,7 @@ bool XModel::unloadAnimation(const char *animName) {
 	bool found = false;
 	for (int32 i = 0; i < _animationSets.getSize(); i++) {
 		if (scumm_stricmp(animName, _animationSets[i]->_name) == 0) {
-			for (int j = 0; j < X_NUM_ANIMATION_CHANNELS; j++) {
+			for (int32 j = 0; j < X_NUM_ANIMATION_CHANNELS; j++) {
 				if (_channels[j])
 					_channels[j]->unloadAnim(_animationSets[i]);
 			}
diff --git a/engines/wintermute/base/sound/base_sound.cpp b/engines/wintermute/base/sound/base_sound.cpp
index a7bd24e5258..89c65f7ce5e 100644
--- a/engines/wintermute/base/sound/base_sound.cpp
+++ b/engines/wintermute/base/sound/base_sound.cpp
@@ -227,40 +227,45 @@ bool BaseSound::setVolume(int volume) {
 	}
 }
 
-bool BaseSound::setPrivateVolume(int volume) {
+//////////////////////////////////////////////////////////////////////////
+int BaseSound::getVolume() {
 	if (!_sound) {
-		return STATUS_FAILED;
+		return 0;
 	} else {
-		_sound->setPrivateVolume(volume);
-		return STATUS_OK;
+		return _sound->getPrivateVolume();
 	}
 }
 
-int BaseSound::getVolumePercent() {
+//////////////////////////////////////////////////////////////////////////
+bool BaseSound::setLoopStart(uint32 pos) {
 	if (!_sound) {
-		return 0;
+		return STATUS_FAILED;
 	} else {
-		return _sound->getPrivateVolume() * 100 / 255;
+		_sound->setLoopStart(pos);
+		return STATUS_OK;
 	}
 }
 
-int BaseSound::getVolume() {
+//////////////////////////////////////////////////////////////////////////
+bool BaseSound::setPrivateVolume(int volume) {
 	if (!_sound) {
-		return 0;
+		return STATUS_FAILED;
 	} else {
-		return _sound->getPrivateVolume();
+		_sound->setPrivateVolume(volume);
+		return STATUS_OK;
 	}
 }
 
-bool BaseSound::setLoopStart(uint32 pos) {
+//////////////////////////////////////////////////////////////////////////
+int BaseSound::getVolumePercent() {
 	if (!_sound) {
-		return STATUS_FAILED;
+		return 0;
 	} else {
-		_sound->setLoopStart(pos);
-		return STATUS_OK;
+		return _sound->getPrivateVolume() * 100 / 255;
 	}
 }
 
+//////////////////////////////////////////////////////////////////////////
 bool BaseSound::setPan(float pan) {
 	if (_sound) {
 		return _sound->setPan(pan);




More information about the Scummvm-git-logs mailing list