[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