[Scummvm-git-logs] scummvm master -> 06f74eea3fd108ad8ff38a7b3139e23c6f062758

aquadran noreply at scummvm.org
Wed Jul 23 05:57:18 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:
06f74eea3f WINTERMUTE: Restore original code in ad_talk_holder


Commit: 06f74eea3fd108ad8ff38a7b3139e23c6f062758
    https://github.com/scummvm/scummvm/commit/06f74eea3fd108ad8ff38a7b3139e23c6f062758
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-07-23T07:57:13+02:00

Commit Message:
WINTERMUTE: Restore original code in ad_talk_holder

Changed paths:
    engines/wintermute/ad/ad_talk_holder.cpp


diff --git a/engines/wintermute/ad/ad_talk_holder.cpp b/engines/wintermute/ad/ad_talk_holder.cpp
index 400e783c734..4009da3f1eb 100644
--- a/engines/wintermute/ad/ad_talk_holder.cpp
+++ b/engines/wintermute/ad/ad_talk_holder.cpp
@@ -199,14 +199,17 @@ bool AdTalkHolder::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisS
 
 		const char *filename = stack->pop()->getString();
 		bool ex = stack->pop()->getBool();
-		BaseArray<BaseSprite *> &sprites = ex ? _talkSpritesEx : _talkSprites;
 
 		BaseSprite *spr = new BaseSprite(_gameRef, this);
 		if (!spr || DID_FAIL(spr->loadFile(filename))) {
 			stack->pushBool(false);
 			script->runtimeError("AddTalkSprite method failed for file '%s'", filename);
 		} else {
-			sprites.add(spr);
+			if (ex) {
+				_talkSpritesEx.add(spr);
+			} else {
+				_talkSprites.add(spr);
+			}
 			stack->pushBool(true);
 		}
 		return STATUS_OK;
@@ -220,22 +223,48 @@ bool AdTalkHolder::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisS
 
 		const char *filename = stack->pop()->getString();
 		bool ex = stack->pop()->getBool();
-		BaseArray<BaseSprite *> &sprites = ex ? _talkSpritesEx : _talkSprites;
 
-		for (uint32 i = 0; i < sprites.getSize(); i++) {
-			if (scumm_stricmp(sprites[i]->getFilename(), filename) == 0) {
-				if (_currentSprite == sprites[i]) {
-					_currentSprite = _sprite;
+		bool setCurrent = false;
+		bool setTemp2 = false;
+
+		if (ex) {
+			for (uint32 i = 0; i < _talkSpritesEx.getSize(); i++) {
+				if (scumm_stricmp(_talkSpritesEx[i]->getFilename(), filename) == 0) {
+					if (_currentSprite == _talkSpritesEx[i]) {
+						setCurrent = true;
+					}
+					if (_tempSprite2 == _talkSpritesEx[i]) {
+						setTemp2 = true;
+					}
+					delete _talkSpritesEx[i];
+					_talkSpritesEx.removeAt(i);
+					break;
 				}
-				if (_tempSprite2 == sprites[i]) {
-					_tempSprite2 = _sprite;
+			}
+		} else {
+			for (uint32 i = 0; i < _talkSprites.getSize(); i++) {
+				if (scumm_stricmp(_talkSprites[i]->getFilename(), filename) == 0) {
+					if (_currentSprite == _talkSprites[i]) {
+						setCurrent = true;
+					}
+					if (_tempSprite2 == _talkSprites[i]) {
+						setTemp2 = true;
+					}
+					delete _talkSprites[i];
+					_talkSprites.removeAt(i);
+					break;
 				}
-				delete sprites[i];
-				sprites.removeAt(i);
-				break;
 			}
 		}
+
 		stack->pushBool(true);
+		if (setCurrent) {
+			_currentSprite = _sprite;
+		}
+		if (setTemp2) {
+			_tempSprite2 = _sprite;
+		}
+
 		return STATUS_OK;
 	}
 
@@ -271,25 +300,54 @@ bool AdTalkHolder::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisS
 
 		const char *filename = stack->pop()->getString();
 		bool ex = stack->pop()->getBool();
-		BaseArray<BaseSprite *> &sprites = ex ? _talkSpritesEx : _talkSprites;
+		bool setCurrent = false;
+		bool setTemp2 = false;
 
 		BaseSprite *spr = new BaseSprite(_gameRef, this);
 		if (!spr || DID_FAIL(spr->loadFile(filename))) {
 			stack->pushBool(false);
 			script->runtimeError("SetTalkSprite method failed for file '%s'", filename);
 		} else {
-			for (uint32 i = 0; i < sprites.getSize(); i++) {
-				if (_currentSprite == sprites[i]) {
-					_currentSprite = spr;
+
+			// delete current
+			if (ex) {
+				for (uint32 i = 0; i < _talkSpritesEx.getSize(); i++) {
+					if (_talkSpritesEx[i] == _currentSprite) {
+						setCurrent = true;
+					}
+					if (_talkSpritesEx[i] == _tempSprite2) {
+						setTemp2 = true;
+					}
+					delete _talkSpritesEx[i];
 				}
-				if (_tempSprite2 == sprites[i]) {
-					_tempSprite2 = spr;
+				_talkSpritesEx.removeAll();
+			} else {
+				for (uint32 i = 0; i < _talkSprites.getSize(); i++) {
+					if (_talkSprites[i] == _currentSprite) {
+						setCurrent = true;
+					}
+					if (_talkSprites[i] == _tempSprite2) {
+						setTemp2 = true;
+					}
+					delete _talkSprites[i];
 				}
-				delete sprites[i];
+				_talkSprites.removeAll();
+			}
+
+			// set new
+			if (ex) {
+				_talkSpritesEx.add(spr);
+			} else {
+				_talkSprites.add(spr);
 			}
-			sprites.removeAll();
-			sprites.add(spr);
 			stack->pushBool(true);
+
+			if (setCurrent) {
+				_currentSprite = spr;
+			}
+			if (setTemp2) {
+				_tempSprite2 = spr;
+			}
 		}
 		return STATUS_OK;
 	} else {




More information about the Scummvm-git-logs mailing list