[Scummvm-git-logs] scummvm master -> 85d148769eeec77ca63fe963d5132b56904a4bc3
aquadran
noreply at scummvm.org
Thu Jul 16 20:19:31 UTC 2026
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:
85d148769e WINTERMUTE: Implement 'SetVisitedResponseFonts' and 'AddVisitedResponse' method for 'The Last Crown - Midnight Horror' a
Commit: 85d148769eeec77ca63fe963d5132b56904a4bc3
https://github.com/scummvm/scummvm/commit/85d148769eeec77ca63fe963d5132b56904a4bc3
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2026-07-16T22:19:19+02:00
Commit Message:
WINTERMUTE: Implement 'SetVisitedResponseFonts' and 'AddVisitedResponse' method for 'The Last Crown - Midnight Horror' and bump savegame version
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
engines/wintermute/ad/ad_types.h
engines/wintermute/dcgf.h
diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp
index 1486a10ece3..e2a965cdcda 100644
--- a/engines/wintermute/ad/ad_game.cpp
+++ b/engines/wintermute/ad/ad_game.cpp
@@ -54,6 +54,7 @@
#include "engines/wintermute/base/base_sprite.h"
#include "engines/wintermute/base/base_viewport.h"
#include "engines/wintermute/base/base_access_mgr.h"
+#include "engines/wintermute/base/font/base_font_storage.h"
#include "engines/wintermute/base/particles/part_emitter.h"
#include "engines/wintermute/base/save_thumb_helper.h"
#include "engines/wintermute/base/gfx/base_renderer.h"
@@ -558,11 +559,45 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
return STATUS_OK;
}
+ //////////////////////////////////////////////////////////////////////////
+ // SetVisitedResponseFonts
+ //////////////////////////////////////////////////////////////////////////
+ else if (strcmp(name, "SetVisitedResponseFonts") == 0) {
+ stack->correctParams(2);
+ ScValue *val1 = stack->pop();
+ ScValue *val2 = stack->pop();
+
+ if (_responseBox) {
+ if (_responseBox->_fontVisited) {
+ _game->_fontStorage->removeFont(_responseBox->_fontVisited);
+ }
+ _responseBox->_fontVisited = _game->_fontStorage->addFont(val1->getString());
+ if (!_responseBox->_fontVisited) {
+ script->runtimeError("Game.SetVisitedResponseFonts: Failed to add visited font");
+ stack->pushNULL();
+ return STATUS_FAILED;
+ }
+
+ if (_responseBox->_fontVisitedHover) {
+ _game->_fontStorage->removeFont(_responseBox->_fontVisitedHover);
+ }
+ _responseBox->_fontVisitedHover = _game->_fontStorage->addFont(val2->getString());
+ if (!_responseBox->_fontVisitedHover) {
+ script->runtimeError("Game.SetVisitedResponseFonts: Failed to add visited hover font");
+ stack->pushNULL();
+ return STATUS_FAILED;
+ }
+ }
+
+ stack->pushNULL();
+
+ return STATUS_OK;
+ }
//////////////////////////////////////////////////////////////////////////
- // AddResponse/AddResponseOnce/AddResponseOnceGame
+ // AddResponse/AddVisitedResponse/AddResponseOnce/AddResponseOnceGame
//////////////////////////////////////////////////////////////////////////
- else if (strcmp(name, "AddResponse") == 0 || strcmp(name, "AddResponseOnce") == 0 || strcmp(name, "AddResponseOnceGame") == 0) {
+ else if (strcmp(name, "AddResponse") == 0 || strcmp(name, "AddVisitedResponse") == 0 || strcmp(name, "AddResponseOnce") == 0 || strcmp(name, "AddResponseOnceGame") == 0) {
stack->correctParams(6);
int id = stack->pop()->getInt();
const char *text = stack->pop()->getString();
@@ -591,7 +626,9 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
res->setFont(val4->getString());
}
- if (strcmp(name, "AddResponseOnce") == 0) {
+ if (strcmp(name, "AddVisitedResponse") == 0) {
+ res->_responseVisitedType = RESPONSE_VISITED_ONCE;
+ } else if (strcmp(name, "AddResponseOnce") == 0) {
res->_responseType = RESPONSE_ONCE;
} else if (strcmp(name, "AddResponseOnceGame") == 0) {
res->_responseType = RESPONSE_ONCE_GAME;
diff --git a/engines/wintermute/ad/ad_response.cpp b/engines/wintermute/ad/ad_response.cpp
index 505bc83aab5..206f0da96e4 100644
--- a/engines/wintermute/ad/ad_response.cpp
+++ b/engines/wintermute/ad/ad_response.cpp
@@ -44,6 +44,7 @@ AdResponse::AdResponse(BaseGame *inGame) : BaseObject(inGame) {
_font = nullptr;
_id = 0;
_responseType = RESPONSE_ALWAYS;
+ _responseVisitedType = RESPONSE_VISITED_NONE;
}
@@ -131,6 +132,13 @@ bool AdResponse::persist(BasePersistenceManager *persistMgr) {
persistMgr->transferCharPtr(TMEMBER(_textOrig));
persistMgr->transferSint32(TMEMBER_INT(_responseType));
persistMgr->transferPtr(TMEMBER_PTR(_font));
+ if (persistMgr->checkVersion(1, 11, 1)) {
+ persistMgr->transferSint32(TMEMBER_INT(_responseVisitedType));
+ } else {
+ if (!persistMgr->getIsSaving()) {
+ _responseVisitedType = RESPONSE_VISITED_NONE;
+ }
+ }
return STATUS_OK;
}
diff --git a/engines/wintermute/ad/ad_response.h b/engines/wintermute/ad/ad_response.h
index 9df4c0913e4..eb6dff9d4c6 100644
--- a/engines/wintermute/ad/ad_response.h
+++ b/engines/wintermute/ad/ad_response.h
@@ -52,6 +52,7 @@ public:
AdResponse(BaseGame *inGame);
~AdResponse() override;
TResponseType _responseType;
+ TResponseVisitedType _responseVisitedType;
};
} // End of namespace Wintermute
diff --git a/engines/wintermute/ad/ad_response_box.cpp b/engines/wintermute/ad/ad_response_box.cpp
index ffa772afe6a..42cfd8b9791 100644
--- a/engines/wintermute/ad/ad_response_box.cpp
+++ b/engines/wintermute/ad/ad_response_box.cpp
@@ -54,7 +54,7 @@ IMPLEMENT_PERSISTENT(AdResponseBox, false)
//////////////////////////////////////////////////////////////////////////
AdResponseBox::AdResponseBox(BaseGame *inGame) : BaseObject(inGame) {
- _font = _fontHover = nullptr;
+ _font = _fontHover = _fontVisited = _fontVisitedHover = nullptr;
_window = nullptr;
_shieldWindow = new UIWindow(_game);
@@ -86,6 +86,12 @@ AdResponseBox::~AdResponseBox() {
if (_fontHover) {
_game->_fontStorage->removeFont(_fontHover);
}
+ if (_fontVisited) {
+ _game->_fontStorage->removeFont(_fontVisited);
+ }
+ if (_fontVisitedHover) {
+ _game->_fontStorage->removeFont(_fontVisitedHover);
+ }
clearResponses();
clearButtons();
@@ -158,6 +164,10 @@ bool AdResponseBox::createButtons() {
btn->setText(_responses[i]->_text);
btn->_font = (_font == nullptr) ? _game->_systemFont : _font;
btn->_fontHover = (_fontHover == nullptr) ? _game->_systemFont : _fontHover;
+ if (_responses[i]->_responseVisitedType == RESPONSE_VISITED_ONCE) {
+ btn->_font = (_fontVisited == nullptr) ? btn->_font : _fontVisited;
+ btn->_fontHover = (_fontVisitedHover == nullptr) ? btn->_fontHover : _fontVisitedHover;
+ }
btn->_fontPress = btn->_fontHover;
btn->_align = _align;
@@ -612,6 +622,16 @@ bool AdResponseBox::persist(BasePersistenceManager *persistMgr) {
persistMgr->transferSint32(TMEMBER_INT(_verticalAlign));
persistMgr->transferSint32(TMEMBER_INT(_align));
+ if (persistMgr->checkVersion(1, 11, 1)) {
+ persistMgr->transferPtr(TMEMBER_PTR(_fontVisited));
+ persistMgr->transferPtr(TMEMBER_PTR(_fontVisitedHover));
+ } else {
+ if (!persistMgr->getIsSaving()) {
+ _fontVisited = nullptr;
+ _fontVisitedHover = nullptr;
+ }
+ }
+
return STATUS_OK;
}
diff --git a/engines/wintermute/ad/ad_response_box.h b/engines/wintermute/ad/ad_response_box.h
index cb8ed9090fa..d140a19a881 100644
--- a/engines/wintermute/ad/ad_response_box.h
+++ b/engines/wintermute/ad/ad_response_box.h
@@ -62,6 +62,8 @@ public:
int32 _scrollOffset;
BaseFont *_fontHover;
BaseFont *_font;
+ BaseFont *_fontVisitedHover;
+ BaseFont *_fontVisited;
bool createButtons();
bool invalidateButtons();
void clearButtons();
diff --git a/engines/wintermute/ad/ad_types.h b/engines/wintermute/ad/ad_types.h
index 0ae40b34198..2f164bc2f90 100644
--- a/engines/wintermute/ad/ad_types.h
+++ b/engines/wintermute/ad/ad_types.h
@@ -86,6 +86,11 @@ typedef enum {
RESPONSE_ONCE_GAME
} TResponseType;
+typedef enum {
+ RESPONSE_VISITED_NONE,
+ RESPONSE_VISITED_ONCE
+} TResponseVisitedType;
+
typedef enum {
TALK_SKIP_LEFT = 0,
TALK_SKIP_RIGHT = 1,
diff --git a/engines/wintermute/dcgf.h b/engines/wintermute/dcgf.h
index e1d3f7f2b17..161f838ed1f 100644
--- a/engines/wintermute/dcgf.h
+++ b/engines/wintermute/dcgf.h
@@ -31,7 +31,7 @@
//////////////////////////////////////////////////////////////////////////
#define DCGF_VER_MAJOR 1
-#define DCGF_VER_MINOR 10
+#define DCGF_VER_MINOR 11
#define DCGF_VER_BUILD 1
#define DCGF_VER_SUFFIX "ScummVM"
#define DCGF_VER_BETA true
More information about the Scummvm-git-logs
mailing list