[Scummvm-git-logs] scummvm master -> 8600251b4876a926720fb88007f5f3948fafc19a

Strangerke noreply at scummvm.org
Fri Jul 11 07:51:09 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:
8600251b48 M4: RIDDLE: Partial implementation of showMessageLog()


Commit: 8600251b4876a926720fb88007f5f3948fafc19a
    https://github.com/scummvm/scummvm/commit/8600251b4876a926720fb88007f5f3948fafc19a
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2025-07-11T08:50:53+01:00

Commit Message:
M4: RIDDLE: Partial implementation of showMessageLog()

Changed paths:
    engines/m4/gui/gui_menu_items.cpp
    engines/m4/riddle/gui/interface.cpp
    engines/m4/riddle/riddle.cpp
    engines/m4/riddle/riddle.h


diff --git a/engines/m4/gui/gui_menu_items.cpp b/engines/m4/gui/gui_menu_items.cpp
index e7c7484e1dd..790522b78f6 100644
--- a/engines/m4/gui/gui_menu_items.cpp
+++ b/engines/m4/gui/gui_menu_items.cpp
@@ -99,8 +99,8 @@ bool guiMenu::initialize(RGB8 *myPalette) {
 	// Pause the game
 	game_pause(true);
 
-	// Hide the telegram window
-	// Hide_telegram_dialog(); // Ripley shit again!
+	// Hide the Message Log window
+	// TODO hide_message_log_dialog();
 
 	// Hide the interface
 	if (INTERFACE_VISIBLE) {
diff --git a/engines/m4/riddle/gui/interface.cpp b/engines/m4/riddle/gui/interface.cpp
index 4c4f5b916ab..f914eb6f591 100644
--- a/engines/m4/riddle/gui/interface.cpp
+++ b/engines/m4/riddle/gui/interface.cpp
@@ -43,7 +43,6 @@ Interface::Interface() : M4::Interface() {
 
 bool Interface::init(int arrow, int wait, int look, int grab, int use) {
 	M4::Interface::init(arrow, wait, look, grab, use);
-
 	_sprite = AddWSAssetCELS("INTERFACE STUFF", 22, _G(master_palette));
 	gr_pal_interface(_G(master_palette));
 
diff --git a/engines/m4/riddle/riddle.cpp b/engines/m4/riddle/riddle.cpp
index 8f10c9f2215..c25100ff0d7 100644
--- a/engines/m4/riddle/riddle.cpp
+++ b/engines/m4/riddle/riddle.cpp
@@ -577,9 +577,68 @@ void RiddleEngine::splitItems(const char *item1, const char *item2) {
 	inv_give_to_player(item2);
 }
 
+void messageLogCallback(void *, void *) {
+	warning("TODO messageLogCallback");
+}
+
 void RiddleEngine::showMessageLog(int trigger) {
-	// TODO
-	warning("TODO: showMessageLog");
+	static const char *MESSAGE_TITLES[14] = {
+		"Reminder from Feng Li",
+		"Appeal for Oddities from Feng Li",
+		"2nd Appeal for Oddities from Feng Li",
+		"3rd Appeal for Oddities from Feng Li",
+		"Urgent Warning from Feng Li",
+		"Radiogram from Mei's Aunt & Uncle",
+		"Radiogram from Danzig Chief of Police",
+		"Message about Emerald from Feng Li",
+		"Ultimatum about Emerald from Feng Li",
+		"Refused Delivery",
+		"Radiogram from Prof. Menendez's Assistant",
+		"2nd Radiogram from Prof. Menendez's Assistant",
+		"Radiogram from Mei",
+		"Thank You Note from Feng Li"
+	};
+
+	_messageLogTrigger = kernel_trigger_create(trigger);
+	gr_font_set(_G(font_inter));
+	const int32 fontHeight = gr_font_get_height();
+	int32 ecx = 0;
+	int32 maxWidth = 0;
+	
+	for (int i = 0; i < 14; ++i) {
+		if (_G(flags)[(Flag)(V350 + i)]) {
+			++ecx;
+			const int width = gr_font_string_width(MESSAGE_TITLES[i], 0);
+			if (width > maxWidth)
+				maxWidth = width;
+		}
+	}
+
+	if (ecx == 0)
+		return;
+
+	maxWidth += 16;
+	_messageScreen = TextScrn_Create(601 - maxWidth, 361 - ((ecx + 2) * (fontHeight + 2) + 16), 600, 360, 65, 422, 13, 15);
+	TextScrn_Add_Message(_messageScreen, 8, 8, 0, TS_CENTRE, "MESSAGE LOG");
+
+	int32 edi = fontHeight + 14;
+	
+	int i = 0;
+	for (; i < 14; ++i) {
+		if (_G(flags)[(Flag)(V350 + i)]) {
+			TextScrn_Add_TextItem(_messageScreen, 8, edi, i + 1, TS_GIVEN, MESSAGE_TITLES[i], (M4CALLBACK)messageLogCallback);
+			edi += 1 + fontHeight;
+		}
+	}
+	TextScrn_Add_TextItem(_messageScreen, 8, edi + 4, i + 2, TS_GIVEN, "CLOSE LOG", (M4CALLBACK)messageLogCallback);
+	TextScrn_Activate(_messageScreen);
+}
+
+void RiddleEngine::hide_message_log_dialog() {
+	if (_messageScreen)
+		TextScrn_Destroy(_messageScreen);
+
+	_messageScreen = nullptr;
 }
 
 void RiddleEngine::lookAtInventoryItem() {
diff --git a/engines/m4/riddle/riddle.h b/engines/m4/riddle/riddle.h
index 0a70163fa02..87232b6d53b 100644
--- a/engines/m4/riddle/riddle.h
+++ b/engines/m4/riddle/riddle.h
@@ -50,6 +50,8 @@ private:
 	GUI::MessageLog _messageLog;
 	int _ripAction = 0;
 	int _savedFacing = 0;
+	int32 _messageLogTrigger = 0;
+	TextScrn *_messageScreen = nullptr;
 
 	/**
 	 * Combines the items in the player _verb and _noun,
@@ -65,6 +67,7 @@ private:
 	void splitItems(const char *item1, const char *item2);
 
 	void showMessageLog(int trigger);
+	void hide_message_log_dialog();
 	void lookAtInventoryItem();
 	bool canLoadGameStateCurrently(Common::U32String *msg) override;
 




More information about the Scummvm-git-logs mailing list