[Scummvm-git-logs] scummvm master -> 51c026d1d69301dcd7d163ebb1f5ea68187ebebf

bluegr noreply at scummvm.org
Fri Jul 10 06:49:42 UTC 2026


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

Summary:
6bf4af6652 NANCY: Add sanity check when showing item descriptions in the console
3cfd3bc604 NANCY: NANCY10: Move cursor to the center of a popup, when it opens
51c026d1d6 NANCY: NANCY10: Add handling for initial email and search links


Commit: 6bf4af66525553e3bfe6720255589db03fd90235
    https://github.com/scummvm/scummvm/commit/6bf4af66525553e3bfe6720255589db03fd90235
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-07-10T09:49:30+03:00

Commit Message:
NANCY: Add sanity check when showing item descriptions in the console

Since Nancy10 has some known invalid dependency types, compensate for
that by checking these values, instead of crashing on console commands

Changed paths:
    engines/nancy/console.cpp


diff --git a/engines/nancy/console.cpp b/engines/nancy/console.cpp
index b70cad20c37..ae1dbc25843 100644
--- a/engines/nancy/console.cpp
+++ b/engines/nancy/console.cpp
@@ -502,7 +502,9 @@ void NancyConsole::recursePrintDependencies(const Action::DependencyRecord &reco
 		case DependencyType::kInventory:
 			debugPrintf("kInventory, item %u, %s, %s",
 				dep.label,
-				inventoryData->itemDescriptions[dep.label].name.c_str(),
+				(uint16)dep.label < inventoryData->itemDescriptions.size() ?
+					inventoryData->itemDescriptions[dep.label].name.c_str() :
+					"Invalid",
 				dep.condition == g_nancy->_true ? "true" : "false");
 			break;
 		case DependencyType::kEvent:


Commit: 3cfd3bc604adc806f31028acdb26082fe8fe4eec
    https://github.com/scummvm/scummvm/commit/3cfd3bc604adc806f31028acdb26082fe8fe4eec
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-07-10T09:49:31+03:00

Commit Message:
NANCY: NANCY10: Move cursor to the center of a popup, when it opens

Fix #16931

Changed paths:
    engines/nancy/ui/cellphonepopup.cpp
    engines/nancy/ui/inventorypopup.cpp
    engines/nancy/ui/notebookpopup.cpp


diff --git a/engines/nancy/ui/cellphonepopup.cpp b/engines/nancy/ui/cellphonepopup.cpp
index 36f19132b99..ddce96235e6 100644
--- a/engines/nancy/ui/cellphonepopup.cpp
+++ b/engines/nancy/ui/cellphonepopup.cpp
@@ -257,6 +257,9 @@ void CellPhonePopup::open() {
 	drawScreenContent();
 	setVisible(true);
 
+	g_nancy->_cursor->warpCursor(Common::Point(_screenPosition.left + _screenPosition.width() / 2,
+												_screenPosition.top + _screenPosition.height() / 2));
+
 	NancySceneState.getTaskbar()->clearAllNotifications(kTaskButtonCellphone);
 
 	if (!_uiclData->header.sounds[0].name.empty()) {
diff --git a/engines/nancy/ui/inventorypopup.cpp b/engines/nancy/ui/inventorypopup.cpp
index b5568d8834f..b98c168eb11 100644
--- a/engines/nancy/ui/inventorypopup.cpp
+++ b/engines/nancy/ui/inventorypopup.cpp
@@ -87,14 +87,8 @@ void InventoryPopup::open() {
 
 	setVisible(true);
 
-	// If the player opens the popup while carrying an item, move the cursor
-	// into the toolbox so the whole popup is immediately usable as a drop
-	// zone (e.g. double-clicking the taskbar icon opens the popup and lands
-	// the cursor over it, ready to drop on the next click).
-	if (NancySceneState.getHeldItem() != -1) {
-		g_nancy->_cursor->warpCursor(Common::Point(_screenPosition.left + _screenPosition.width() / 2,
-													_screenPosition.top + _screenPosition.height() / 2));
-	}
+	g_nancy->_cursor->warpCursor(Common::Point(_screenPosition.left + _screenPosition.width() / 2,
+												_screenPosition.top + _screenPosition.height() / 2));
 
 	NancySceneState.getTaskbar()->clearAllNotifications(kTaskButtonInventory);
 
diff --git a/engines/nancy/ui/notebookpopup.cpp b/engines/nancy/ui/notebookpopup.cpp
index 88e588ebeda..0cc4cc10277 100644
--- a/engines/nancy/ui/notebookpopup.cpp
+++ b/engines/nancy/ui/notebookpopup.cpp
@@ -128,6 +128,9 @@ void NotebookPopup::open() {
 
 	setVisible(true);
 
+	g_nancy->_cursor->warpCursor(Common::Point(_screenPosition.left + _screenPosition.width() / 2,
+												_screenPosition.top + _screenPosition.height() / 2));
+
 	NancySceneState.getTaskbar()->clearAllNotifications(kTaskButtonNotebook);
 
 	// JournalData entries may have changed since the last open (added by


Commit: 51c026d1d69301dcd7d163ebb1f5ea68187ebebf
    https://github.com/scummvm/scummvm/commit/51c026d1d69301dcd7d163ebb1f5ea68187ebebf
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-07-10T09:49:32+03:00

Commit Message:
NANCY: NANCY10: Add handling for initial email and search links

Fix #16938, #16939

Changed paths:
    engines/nancy/enginedata.cpp
    engines/nancy/enginedata.h
    engines/nancy/ui/cellphonepopup.cpp


diff --git a/engines/nancy/enginedata.cpp b/engines/nancy/enginedata.cpp
index 61137052c73..b056d2a667c 100644
--- a/engines/nancy/enginedata.cpp
+++ b/engines/nancy/enginedata.cpp
@@ -1038,14 +1038,17 @@ UICL::UICL(Common::SeekableReadStream *chunkStream) : EngineData(chunkStream) {
 	readRect(*chunkStream, browserHeading.srcRect);
 	readRect(*chunkStream, browserHeading.destRect);
 
-	readFilename(*chunkStream, holdMusicSound);
-	readFilename(*chunkStream, answeringMachineSound);
-	holdLink1 = chunkStream->readSint16LE();
-	holdLink2 = chunkStream->readSint16LE();
-	readFilename(*chunkStream, urlSound);
-	urlLink1 = chunkStream->readSint16LE();
-	urlLink2 = chunkStream->readSint16LE();
-	urlLink3 = chunkStream->readSint16LE();
+	// Initial email entry (key + value + flag + event flag), then initial
+	// web-search entry (key + extra + flag + event flag). Both are optional;
+	// an empty key marks an absent entry. CellPhonePopup seeds these on init.
+	readFilename(*chunkStream, initialEmailKey);
+	readFilename(*chunkStream, initialEmailValue);
+	initialEmailFlag = chunkStream->readSint16LE();
+	initialEmailEventFlag = chunkStream->readSint16LE();
+	readFilename(*chunkStream, initialSearchKey);
+	initialSearchExtra = chunkStream->readSint16LE();
+	initialSearchFlag = chunkStream->readSint16LE();
+	initialSearchEventFlag = chunkStream->readSint16LE();
 
 	fontId1 = chunkStream->readUint16LE();
 	fontId2 = chunkStream->readUint16LE();
diff --git a/engines/nancy/enginedata.h b/engines/nancy/enginedata.h
index 2388d5967ae..f46d1e0afd7 100644
--- a/engines/nancy/enginedata.h
+++ b/engines/nancy/enginedata.h
@@ -674,14 +674,17 @@ struct UICL : public EngineData {
 	SrcDestRectPair helpHeading;
 	SrcDestRectPair browserHeading;
 
-	Common::Path holdMusicSound;
-	Common::Path answeringMachineSound;       // chunk+0xCE4 (33B): "SHAMA02"
-	int16 holdLink1 = 0;
-	int16 holdLink2 = 0;
-	Common::Path urlSound;
-	int16 urlLink1 = 0;
-	int16 urlLink2 = 0;
-	int16 urlLink3 = 0;
+	// One initial email entry and one initial web-search entry can be baked
+	// into the UICL chunk itself; the original seeds them at new-game init
+	// (its cellphone reset). An empty key means the game ships that list empty.
+	Common::String initialEmailKey;           // email entry CVTX key
+	Common::String initialEmailValue;         // email entry CVTX body/value
+	int16 initialEmailFlag = 0;
+	int16 initialEmailEventFlag = 0;
+	Common::String initialSearchKey;          // web-search entry CVTX key
+	int16 initialSearchExtra = 0;
+	int16 initialSearchFlag = 0;
+	int16 initialSearchEventFlag = 0;
 
 	uint16 fontId1 = 0;
 	uint16 fontId2 = 0;
diff --git a/engines/nancy/ui/cellphonepopup.cpp b/engines/nancy/ui/cellphonepopup.cpp
index ddce96235e6..8a0d0f6d2b5 100644
--- a/engines/nancy/ui/cellphonepopup.cpp
+++ b/engines/nancy/ui/cellphonepopup.cpp
@@ -117,6 +117,19 @@ void CellPhonePopup::init() {
 		if (!cellData->seeded) {
 			cellData->contacts = _uiclData->contacts;
 			cellData->seeded = true;
+
+			// The UICL chunk can ship one initial email and one initial
+			// web-search entry, populated at new-game start (an empty key
+			// means none). addSearchLink appends into cellData's lists.
+			if (!_uiclData->initialEmailKey.empty()) {
+				addSearchLink(0, _uiclData->initialEmailKey, _uiclData->initialEmailValue,
+					0, _uiclData->initialEmailFlag, _uiclData->initialEmailEventFlag);
+			}
+			if (!_uiclData->initialSearchKey.empty()) {
+				addSearchLink(1, _uiclData->initialSearchKey, Common::String(),
+					_uiclData->initialSearchExtra, _uiclData->initialSearchFlag,
+					_uiclData->initialSearchEventFlag);
+			}
 		}
 		_contacts = cellData->contacts;
 		_noSignal = cellData->noSignal;




More information about the Scummvm-git-logs mailing list