[Scummvm-git-logs] scummvm master -> ae36015c98e5bc1d370a6f56ff50744bb710fce7

bluegr bluegr at gmail.com
Tue Jan 28 15:40:36 UTC 2020


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

Summary:
f2df898569 WINTERMUTE: Refactor methods related to TalkSprites
ae36015c98 WINTERMUTE: Implement FoxTail's actor.GetTalkSprites()


Commit: f2df898569825d4d6f35883886888f949f28b538
    https://github.com/scummvm/scummvm/commit/f2df898569825d4d6f35883886888f949f28b538
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-01-28T17:40:30+02:00

Commit Message:
WINTERMUTE: Refactor methods related to TalkSprites

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 116d3ed..4b7b1d0 100644
--- a/engines/wintermute/ad/ad_talk_holder.cpp
+++ b/engines/wintermute/ad/ad_talk_holder.cpp
@@ -199,17 +199,14 @@ 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 {
-			if (ex) {
-				_talkSpritesEx.add(spr);
-			} else {
-				_talkSprites.add(spr);
-			}
+			sprites.add(spr);
 			stack->pushBool(true);
 		}
 		return STATUS_OK;
@@ -223,48 +220,22 @@ 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;
-
-		if (ex) {
-			for (uint32 i = 0; i < _talkSpritesEx.size(); 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.remove_at(i);
-					break;
+		for (uint32 i = 0; i < sprites.size(); i++) {
+			if (scumm_stricmp(sprites[i]->getFilename(), filename) == 0) {
+				if (_currentSprite == sprites[i]) {
+					_currentSprite = _sprite;
 				}
-			}
-		} else {
-			for (uint32 i = 0; i < _talkSprites.size(); 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.remove_at(i);
-					break;
+				if (_tempSprite2 == sprites[i]) {
+					_tempSprite2 = _sprite;
 				}
+				delete sprites[i];
+				sprites.remove_at(i);
+				break;
 			}
-
 		}
-
 		stack->pushBool(true);
-		if (setCurrent) {
-			_currentSprite = _sprite;
-		}
-		if (setTemp2) {
-			_tempSprite2 = _sprite;
-		}
 
 		return STATUS_OK;
 	}
@@ -277,54 +248,25 @@ bool AdTalkHolder::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisS
 
 		const char *filename = stack->pop()->getString();
 		bool ex = stack->pop()->getBool();
-		bool setCurrent = false;
-		bool setTemp2 = false;
+		BaseArray<BaseSprite *> &sprites = ex ? _talkSpritesEx : _talkSprites;
 
 		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 {
-
-			// delete current
-			if (ex) {
-				for (uint32 i = 0; i < _talkSpritesEx.size(); i++) {
-					if (_talkSpritesEx[i] == _currentSprite) {
-						setCurrent = true;
-					}
-					if (_talkSpritesEx[i] == _tempSprite2) {
-						setTemp2 = true;
-					}
-					delete _talkSpritesEx[i];
+			for (uint32 i = 0; i < sprites.size(); i++) {
+				if (_currentSprite == sprites[i]) {
+					_currentSprite = spr;
 				}
-				_talkSpritesEx.clear();
-			} else {
-				for (uint32 i = 0; i < _talkSprites.size(); i++) {
-					if (_talkSprites[i] == _currentSprite) {
-						setCurrent = true;
-					}
-					if (_talkSprites[i] == _tempSprite2) {
-						setTemp2 = true;
-					}
-					delete _talkSprites[i];
+				if (_tempSprite2 == sprites[i]) {
+					_tempSprite2 = spr;
 				}
-				_talkSprites.clear();
-			}
-
-			// set new
-			if (ex) {
-				_talkSpritesEx.add(spr);
-			} else {
-				_talkSprites.add(spr);
+				delete sprites[i];
 			}
+			sprites.clear();
+			sprites.add(spr);
 			stack->pushBool(true);
-
-			if (setCurrent) {
-				_currentSprite = spr;
-			}
-			if (setTemp2) {
-				_tempSprite2 = spr;
-			}
 		}
 		return STATUS_OK;
 	} else {


Commit: ae36015c98e5bc1d370a6f56ff50744bb710fce7
    https://github.com/scummvm/scummvm/commit/ae36015c98e5bc1d370a6f56ff50744bb710fce7
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-01-28T17:40:30+02:00

Commit Message:
WINTERMUTE: Implement FoxTail's actor.GetTalkSprites()

FoxTail 1.2.527.3377+ is using fenek.GetTalkSprites() at
scenes\003_house\scripts\goto_004.script

This is used once, to store Fenek's TalkSprites array to a temporary
var.
Later state is restored with this.SetTalkSprite(array_talk_sprites[0])

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 4b7b1d0..2717c25 100644
--- a/engines/wintermute/ad/ad_talk_holder.cpp
+++ b/engines/wintermute/ad/ad_talk_holder.cpp
@@ -34,6 +34,7 @@
 #include "engines/wintermute/base/scriptables/script_value.h"
 #include "engines/wintermute/base/scriptables/script.h"
 #include "engines/wintermute/base/scriptables/script_stack.h"
+#include "engines/wintermute/base/scriptables/script_ext_array.h"
 #include "engines/wintermute/platform_osystem.h"
 #include "common/str.h"
 
@@ -236,9 +237,32 @@ bool AdTalkHolder::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisS
 			}
 		}
 		stack->pushBool(true);
+		return STATUS_OK;
+	}
+
+#ifdef ENABLE_FOXTAIL
+	//////////////////////////////////////////////////////////////////////////
+	// [FoxTail] GetTalkSprites
+	// This is used once, to store Fenek's TalkSprites array to a temporary var
+	// Later state is restored with this.SetTalkSprite(array_talk_sprites[0])
+	// Return value should be array
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "GetTalkSprites") == 0) {
+		stack->correctParams(1);
+		bool ex = stack->pop()->getBool();
+		BaseArray<BaseSprite *> &sprites = ex ? _talkSpritesEx : _talkSprites;
 
+		BaseScriptable *arr;
+		stack->pushInt(0);
+		arr = makeSXArray(_gameRef, stack);
+		for (uint32 i = 0; i < sprites.size(); i++) {
+			stack->pushString(sprites[i]->getFilename());
+			((SXArray *)arr)->push(stack->pop());
+		}
+		stack->pushNative(arr, false);
 		return STATUS_OK;
 	}
+#endif
 
 	//////////////////////////////////////////////////////////////////////////
 	// SetTalkSprite




More information about the Scummvm-git-logs mailing list