[Scummvm-git-logs] scummvm master -> 8a81b01d7e877868a606b44283485603f259810f

aquadran noreply at scummvm.org
Tue Aug 12 12:30: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:
8a81b01d7e WINTERMUTE: Synced with original code on ad_response.


Commit: 8a81b01d7e877868a606b44283485603f259810f
    https://github.com/scummvm/scummvm/commit/8a81b01d7e877868a606b44283485603f259810f
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-08-12T14:30:11+02:00

Commit Message:
WINTERMUTE: Synced with original code on ad_response.

Changed paths:
    engines/wintermute/ad/ad_game.cpp
    engines/wintermute/ad/ad_response.cpp
    engines/wintermute/ad/ad_response.h
    engines/wintermute/ad/ad_response_box.cpp
    engines/wintermute/ad/ad_response_box.h


diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp
index 6aaf1c2f1fb..571195f2d44 100644
--- a/engines/wintermute/ad/ad_game.cpp
+++ b/engines/wintermute/ad/ad_game.cpp
@@ -577,13 +577,9 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		if (_responseBox) {
 			AdResponse *res = new AdResponse(_gameRef);
 			if (res) {
-				res->setID(id);
-
-				char *expandedText = new char[strlen(text) + 1];
-				Common::strlcpy(expandedText, text, strlen(text) + 1);
-				expandStringByStringTable(&expandedText);
-				res->setText(expandedText);
-				delete[] expandedText;
+				res->_iD = id;
+				res->setText(text);
+				expandStringByStringTable(&res->_text);
 
 				if (!val1->isNULL()) {
 					res->setIcon(val1->getString());
@@ -604,7 +600,7 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 					res->_responseType = RESPONSE_ONCE_GAME;
 				}
 
-				_responseBox->addResponse(res);
+				_responseBox->_responses.add(res);
 			}
 		} else {
 			script->runtimeError("Game.AddResponse: response box is not defined");
@@ -646,15 +642,15 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		if (_responseBox) {
 			_responseBox->weedResponses();
 
-			if (_responseBox->getNumResponses() == 0) {
+			if (_responseBox->_responses.getSize() == 0) {
 				stack->pushNULL();
 				return STATUS_OK;
 			}
 
 
-			if (_responseBox->getNumResponses() == 1 && autoSelectLast) {
-				stack->pushInt(_responseBox->getIdForResponseNum(0));
-				_responseBox->handleResponseNum(0);
+			if (_responseBox->_responses.getSize() == 1 && autoSelectLast) {
+				stack->pushInt(_responseBox->_responses[0]->_iD);
+				_responseBox->handleResponse(_responseBox->_responses[0]);
 				_responseBox->clearResponses();
 				return STATUS_OK;
 			}
@@ -679,7 +675,7 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		stack->correctParams(0);
 		if (_responseBox) {
 			_responseBox->weedResponses();
-			stack->pushInt(_responseBox->getNumResponses());
+			stack->pushInt(_responseBox->_responses.getSize());
 		} else {
 			script->runtimeError("Game.GetNumResponses: response box is not defined");
 			stack->pushNULL();
@@ -816,8 +812,8 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 	//////////////////////////////////////////////////////////////////////////
 	else if (strcmp(name, "GetResponsesWindow") == 0 || strcmp(name, "GetResponseWindow") == 0) {
 		stack->correctParams(0);
-		if (_responseBox && _responseBox->getResponseWindow()) {
-			stack->pushNative(_responseBox->getResponseWindow(), true);
+		if (_responseBox && _responseBox->_window) {
+			stack->pushNative(_responseBox->_window, true);
 		} else {
 			stack->pushNULL();
 		}
@@ -1058,10 +1054,10 @@ ScValue *AdGame::scGetProperty(const Common::String &name) {
 	// LastResponse (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "LastResponse") {
-		if (!_responseBox || !_responseBox->getLastResponseText()) {
+		if (!_responseBox || !_responseBox->_lastResponseText) {
 			_scValue->setString("");
 		} else {
-			_scValue->setString(_responseBox->getLastResponseText());
+			_scValue->setString(_responseBox->_lastResponseText);
 		}
 		return _scValue;
 	}
@@ -1070,10 +1066,10 @@ ScValue *AdGame::scGetProperty(const Common::String &name) {
 	// LastResponseOrig (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "LastResponseOrig") {
-		if (!_responseBox || !_responseBox->getLastResponseTextOrig()) {
+		if (!_responseBox || !_responseBox->_lastResponseTextOrig) {
 			_scValue->setString("");
 		} else {
-			_scValue->setString(_responseBox->getLastResponseTextOrig());
+			_scValue->setString(_responseBox->_lastResponseTextOrig);
 		}
 		return _scValue;
 	}
diff --git a/engines/wintermute/ad/ad_response.cpp b/engines/wintermute/ad/ad_response.cpp
index 53c1a6045c1..911af15771f 100644
--- a/engines/wintermute/ad/ad_response.cpp
+++ b/engines/wintermute/ad/ad_response.cpp
@@ -142,36 +142,4 @@ bool AdResponse::persist(BasePersistenceManager *persistMgr) {
 	return STATUS_OK;
 }
 
-void AdResponse::setID(int32 id) {
-	_iD = id;
-}
-
-BaseSprite *AdResponse::getIcon() const {
-	return _icon;
-}
-
-BaseSprite *AdResponse::getIconHover() const {
-	return _iconHover;
-}
-
-BaseSprite *AdResponse::getIconPressed() const {
-	return _iconPressed;
-}
-
-BaseFont *AdResponse::getFont() const {
-	return _font;
-}
-
-int32 AdResponse::getID() const {
-	return _iD;
-}
-
-const char *AdResponse::getText() const {
-	return _text;
-}
-
-const char *AdResponse::getTextOrig() const {
-	return _textOrig;
-}
-
 } // End of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_response.h b/engines/wintermute/ad/ad_response.h
index 546d229ff1b..d4c182371c1 100644
--- a/engines/wintermute/ad/ad_response.h
+++ b/engines/wintermute/ad/ad_response.h
@@ -42,29 +42,16 @@ public:
 	bool setIconHover(const char *filename);
 	bool setIconPressed(const char *filename);
 	void setText(const char *text);
-	void setID(int32 id);
-	BaseSprite *getIcon() const;
-	BaseSprite *getIconHover() const;
-	BaseSprite *getIconPressed() const;
-	BaseFont *getFont() const;
-	int32 getID() const;
-
-	const char *getText() const;
-	const char *getTextOrig() const;
-
-	AdResponse(BaseGame *inGame);
-	~AdResponse() override;
-	TResponseType _responseType;
-private:
+	int32 _iD;
 	BaseSprite *_icon;
 	BaseSprite *_iconHover;
 	BaseSprite *_iconPressed;
 	BaseFont *_font;
-
-	int32 _iD;
-
 	char *_text;
 	char *_textOrig;
+	AdResponse(BaseGame *inGame);
+	~AdResponse() override;
+	TResponseType _responseType;
 };
 
 } // End of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_response_box.cpp b/engines/wintermute/ad/ad_response_box.cpp
index b5239eecf6f..e4cc763a4b2 100644
--- a/engines/wintermute/ad/ad_response_box.cpp
+++ b/engines/wintermute/ad/ad_response_box.cpp
@@ -96,10 +96,6 @@ AdResponseBox::~AdResponseBox() {
 	_waitingScript = nullptr;
 }
 
-int32 AdResponseBox::getNumResponses() const {
-	return _responses.getSize();
-}
-
 //////////////////////////////////////////////////////////////////////////
 void AdResponseBox::clearResponses() {
 	for (int32 i = 0; i < _responses.getSize(); i++) {
@@ -145,16 +141,16 @@ bool AdResponseBox::createButtons() {
 			btn->setSharedImages(true);
 			btn->_sharedCursors = true;
 			// iconic
-			if (_responses[i]->getIcon()) {
-				btn->setImage(_responses[i]->getIcon());
-				if (_responses[i]->getIconHover()) {
-					btn->setImageHover(_responses[i]->getIconHover());
+			if (_responses[i]->_icon) {
+				btn->setImage(_responses[i]->_icon);
+				if (_responses[i]->_iconHover) {
+					btn->setImageHover(_responses[i]->_iconHover);
 				}
-				if (_responses[i]->getIconPressed()) {
-					btn->setImagePress(_responses[i]->getIconPressed());
+				if (_responses[i]->_iconPressed) {
+					btn->setImagePress(_responses[i]->_iconPressed);
 				}
 
-				btn->setCaption(_responses[i]->getText());
+				btn->setCaption(_responses[i]->_text);
 				if (_cursor) {
 					btn->_cursor = _cursor;
 				} else if (_gameRef->_activeCursor) {
@@ -163,7 +159,7 @@ bool AdResponseBox::createButtons() {
 			}
 			// textual
 			else {
-				btn->setText(_responses[i]->getText());
+				btn->setText(_responses[i]->_text);
 				if (_font == nullptr) {
 					btn->setFont(_gameRef->getSystemFont());
 				} else {
@@ -173,8 +169,8 @@ bool AdResponseBox::createButtons() {
 				btn->setFontPress(btn->getFontHover());
 				btn->setTextAlign(_align);
 
-				if (_responses[i]->getFont()) {
-					btn->setFont(_responses[i]->getFont());
+				if (_responses[i]->_font) {
+					btn->setFont(_responses[i]->_font);
 				}
 
 				int width = _responseArea.right - _responseArea.left;
@@ -205,7 +201,7 @@ bool AdResponseBox::createButtons() {
 			_respButtons.add(btn);
 
 			if (_responseArea.bottom - _responseArea.top < btn->getHeight()) {
-				_gameRef->LOG(0, "Warning: Response '%s' is too high to be displayed within response box. Correcting.", _responses[i]->getText());
+				_gameRef->LOG(0, "Warning: Response '%s' is too high to be displayed within response box. Correcting.", _responses[i]->_text);
 				_responseArea.bottom += (btn->getHeight() - (_responseArea.bottom - _responseArea.top));
 			}
 		}
@@ -578,7 +574,7 @@ bool AdResponseBox::listen(BaseScriptHolder *param1, uint32 param2) {
 			_scrollOffset++;
 		} else if (scumm_stricmp(obj->getName(), "response") == 0) {
 			if (_waitingScript) {
-				_waitingScript->_stack->pushInt(_responses[param2]->getID());
+				_waitingScript->_stack->pushInt(_responses[param2]->_iD);
 			}
 			handleResponse(_responses[param2]);
 			_waitingScript = nullptr;
@@ -631,7 +627,7 @@ bool AdResponseBox::weedResponses() {
 	for (int32 i = 0; i < _responses.getSize(); i++) {
 		switch (_responses[i]->_responseType) {
 		case RESPONSE_ONCE:
-			if (adGame->branchResponseUsed(_responses[i]->getID())) {
+			if (adGame->branchResponseUsed(_responses[i]->_iD)) {
 				delete _responses[i];
 				_responses.removeAt(i);
 				i--;
@@ -639,7 +635,7 @@ bool AdResponseBox::weedResponses() {
 			break;
 
 		case RESPONSE_ONCE_GAME:
-			if (adGame->gameResponseUsed(_responses[i]->getID())) {
+			if (adGame->gameResponseUsed(_responses[i]->_iD)) {
 				delete _responses[i];
 				_responses.removeAt(i);
 				i--;
@@ -660,44 +656,19 @@ void AdResponseBox::setLastResponseText(const char *text, const char *textOrig)
 	BaseUtils::setString(&_lastResponseTextOrig, textOrig);
 }
 
-const char *AdResponseBox::getLastResponseText() const {
-	return _lastResponseText;
-}
-
-const char *AdResponseBox::getLastResponseTextOrig() const {
-	return _lastResponseTextOrig;
-}
-
-UIWindow *AdResponseBox::getResponseWindow() {
-	return _window;
-}
-
-void AdResponseBox::addResponse(const AdResponse *response) {
-	_responses.add(response);
-}
-
-int32 AdResponseBox::getIdForResponseNum(int32 num) const {
-	assert(num < _responses.getSize());
-	return _responses[num]->getID();
-}
-
-bool AdResponseBox::handleResponseNum(int32 num) {
-	return handleResponse(_responses[num]);
-}
-
 //////////////////////////////////////////////////////////////////////////
 bool AdResponseBox::handleResponse(const AdResponse *response) {
-	setLastResponseText(response->getText(), response->getTextOrig());
+	setLastResponseText(response->_text, response->_textOrig);
 
 	AdGame *adGame = (AdGame *)_gameRef;
 
 	switch (response->_responseType) {
 	case RESPONSE_ONCE:
-		adGame->addBranchResponse(response->getID());
+		adGame->addBranchResponse(response->_iD);
 		break;
 
 	case RESPONSE_ONCE_GAME:
-		adGame->addGameResponse(response->getID());
+		adGame->addGameResponse(response->_iD);
 		break;
 	default:
 		debugC(kWintermuteDebugGeneral, "AdResponseBox::HandleResponse - Unhandled enum");
diff --git a/engines/wintermute/ad/ad_response_box.h b/engines/wintermute/ad/ad_response_box.h
index d9eebfdbcc7..7597eeefc15 100644
--- a/engines/wintermute/ad/ad_response_box.h
+++ b/engines/wintermute/ad/ad_response_box.h
@@ -43,14 +43,10 @@ public:
 	BaseObject *getPrevAccessObject(BaseObject *CurrObject);
 	bool getObjects(BaseArray<UIObject *> &objects, bool interactiveOnly);
 
-	void addResponse(const AdResponse* response);
 	bool handleResponse(const AdResponse *response);
-	bool handleResponseNum(int32 num);
-	int32 getIdForResponseNum(int32 num) const;
 	void setLastResponseText(const char *text, const char *textOrig);
-	const char *getLastResponseText() const;
-	const char *getLastResponseTextOrig() const;
-
+	char *_lastResponseText;
+	char *_lastResponseTextOrig;
 	DECLARE_PERSISTENT(AdResponseBox, BaseObject)
 	ScScript *_waitingScript;
 	bool listen(BaseScriptHolder *param1, uint32 param2) override;
@@ -62,35 +58,27 @@ public:
 
 	bool weedResponses();
 	bool display() override;
-
+	int32 _spacing;
+	int32 _scrollOffset;
+	BaseFont *_fontHover;
+	BaseFont *_font;
 	bool createButtons();
 	bool invalidateButtons();
 	void clearButtons();
 	void clearResponses();
 	AdResponseBox(BaseGame *inGame);
 	~AdResponseBox() override;
-
-	bool loadFile(const char *filename);
-	bool loadBuffer(char *buffer, bool complete = true);
-	bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
-
-	UIWindow *getResponseWindow();
-	int32 getNumResponses() const;
-private:
-	int32 _spacing;
-	int32 _scrollOffset;
-	BaseFont *_fontHover;
-	BaseFont *_font;
+	BaseArray<const AdResponse *> _responses;
+	BaseArray<UIButton *> _respButtons;
+	UIWindow *_window;
+	UIWindow *_shieldWindow;
 	bool _horizontal;
 	Rect32 _responseArea;
 	int32 _verticalAlign;
 	TTextAlign _align;
-	BaseArray<UIButton *> _respButtons;
-	BaseArray<const AdResponse *> _responses;
-	UIWindow *_shieldWindow;
-	char *_lastResponseText;
-	char *_lastResponseTextOrig;
-	UIWindow *_window;
+	bool loadFile(const char *filename);
+	bool loadBuffer(char *buffer, bool complete = true);
+	bool saveAsText(BaseDynamicBuffer *buffer, int indent) override;
 };
 
 } // End of namespace Wintermute




More information about the Scummvm-git-logs mailing list