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

dreammaster noreply at scummvm.org
Wed Feb 12 05:12:24 UTC 2025


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:
89aadb9287 M4: RIDDLE: Beginnings of game menu dialog
d4e8311475 M4: RIDDLE: Implement proper greyscale fading


Commit: 89aadb9287d2d389bc5929f41d0b72943a8c963d
    https://github.com/scummvm/scummvm/commit/89aadb9287d2d389bc5929f41d0b72943a8c963d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2025-02-11T19:15:17-08:00

Commit Message:
M4: RIDDLE: Beginnings of game menu dialog

Changed paths:
    engines/m4/burger/gui/game_menu.cpp
    engines/m4/burger/gui/game_menu.h
    engines/m4/gui/gui_menu.h
    engines/m4/riddle/gui/game_menu.cpp
    engines/m4/riddle/gui/game_menu.h


diff --git a/engines/m4/burger/gui/game_menu.cpp b/engines/m4/burger/gui/game_menu.cpp
index 8c782770187..885bf324836 100644
--- a/engines/m4/burger/gui/game_menu.cpp
+++ b/engines/m4/burger/gui/game_menu.cpp
@@ -1979,6 +1979,42 @@ menuItem *menu_TextFieldAdd(guiMenu *myMenu, int32 tag, int32 x, int32 y, int32
 
 //-------------------------------------   GAME MENU   -------------------------------------//
 
+
+#define GAME_MENU_X		190
+#define GAME_MENU_Y		100
+#define GAME_MENU_W		260
+#define GAME_MENU_H		198
+
+#define GM_MAIN_X			 45
+#define GM_MAIN_Y			 53
+#define GM_MAIN_W			 24
+#define GM_MAIN_H			 24
+
+#define GM_OPTIONS_X		 45
+#define GM_OPTIONS_Y		 94
+#define GM_OPTIONS_W		 24
+#define GM_OPTIONS_H		 24
+
+#define GM_RESUME_X		 45
+#define GM_RESUME_Y		135
+#define GM_RESUME_W		 24
+#define GM_RESUME_H		 24
+
+#define GM_QUIT_X			141
+#define GM_QUIT_Y			135
+#define GM_QUIT_W			 24
+#define GM_QUIT_H		    24
+
+#define GM_SAVE_X			141
+#define GM_SAVE_Y			 53
+#define GM_SAVE_W			 24
+#define GM_SAVE_H		    24
+
+#define GM_LOAD_X			141
+#define GM_LOAD_Y			 94
+#define GM_LOAD_W			 24
+#define GM_LOAD_H			 24
+
 static void DestroyGameMenu();
 
 void cb_Game_Quit(void *, void *) {
diff --git a/engines/m4/burger/gui/game_menu.h b/engines/m4/burger/gui/game_menu.h
index 5b36c0befda..a4fb0e96bc7 100644
--- a/engines/m4/burger/gui/game_menu.h
+++ b/engines/m4/burger/gui/game_menu.h
@@ -120,10 +120,6 @@ void CreateGameMenuFromMain(RGB8 *myPalette);
 //
 //		Game menu enums and defines
 //
-#define GAME_MENU_X		190
-#define GAME_MENU_Y		100
-#define GAME_MENU_W		260
-#define GAME_MENU_H		198
 
 enum game_menu_button_tags {
 	GM_TAG_QUIT = 1,
@@ -134,36 +130,6 @@ enum game_menu_button_tags {
 	GM_TAG_MAIN = 6
 };
 
-#define GM_MAIN_X			 45
-#define GM_MAIN_Y			 53
-#define GM_MAIN_W			 24
-#define GM_MAIN_H			 24
-
-#define GM_OPTIONS_X		 45
-#define GM_OPTIONS_Y		 94
-#define GM_OPTIONS_W		 24
-#define GM_OPTIONS_H		 24
-
-#define GM_RESUME_X		 45
-#define GM_RESUME_Y		135
-#define GM_RESUME_W		 24
-#define GM_RESUME_H		 24
-
-#define GM_QUIT_X			141
-#define GM_QUIT_Y			135
-#define GM_QUIT_W			 24
-#define GM_QUIT_H		    24
-
-#define GM_SAVE_X			141
-#define GM_SAVE_Y			 53
-#define GM_SAVE_W			 24
-#define GM_SAVE_H		    24
-
-#define GM_LOAD_X			141
-#define GM_LOAD_Y			 94
-#define GM_LOAD_W			 24
-#define GM_LOAD_H			 24
-
 //======================================
 //
 //		Save/Load menu enums and defines
diff --git a/engines/m4/gui/gui_menu.h b/engines/m4/gui/gui_menu.h
index 261d22a74dc..d17c5b11367 100644
--- a/engines/m4/gui/gui_menu.h
+++ b/engines/m4/gui/gui_menu.h
@@ -31,7 +31,7 @@
 namespace M4 {
 namespace GUI {
 
-#define _GM(X) _G(menu).X
+#define _GM(X) ::M4::g_vars->_menu.X
 #define LockMouseSprite mouse_lock_sprite
 #define UnlockMouseSprite mouse_unlock_sprite
 
diff --git a/engines/m4/riddle/gui/game_menu.cpp b/engines/m4/riddle/gui/game_menu.cpp
index 40bdfe7080e..bd87054d0f8 100644
--- a/engines/m4/riddle/gui/game_menu.cpp
+++ b/engines/m4/riddle/gui/game_menu.cpp
@@ -39,22 +39,30 @@
 #include "m4/platform/keys.h"
 #include "m4/m4.h"
 
+#include "m4/burger/gui/game_menu.h"
+
 namespace M4 {
 namespace Riddle {
 namespace GUI {
 
-static void CreateGameMenuMain(RGB8 *myPalette);
+/*-------------------- GAME MENU --------------------*/
 
-void CreateGameMenu(RGB8 *myPalette) {
-	if ((!player_commands_allowed()) || (!INTERFACE_VISIBLE) ||
-		_G(pal_fade_in_progress) || _G(menuSystemInitialized)) {
-		return;
-	}
+#define GAME_MENU_X		212
+#define GAME_MENU_Y		160
 
-	CreateGameMenuMain(myPalette);
-}
+#define GM_TAG_QUIT     1
+#define GM_QUIT_X		13
+#define GM_QUIT_Y		31
+#define GM_QUIT_W		26
+#define GM_QUIT_H		26
 
-void CreateGameMenuMain(RGB8 *myPalette) {
+#define GM_TAG_MAIN     2
+#define GM_MAIN_X		108
+#define GM_MAIN_Y		31
+#define GM_MAIN_W		26
+#define GM_MAIN_H		26
+
+void GameMenu::show(RGB8 *myPalette) {
 	if (!_G(menuSystemInitialized)) {
 		menu_Initialize(myPalette);
 	}
@@ -68,15 +76,18 @@ void CreateGameMenuMain(RGB8 *myPalette) {
 		return;
 	}
 
-	_GM(gameMenu) = menu_Create(_GM(menuSprites)[GM_DIALOG_BOX], GAME_MENU_X, GAME_MENU_Y, MENU_DEPTH | SF_GET_ALL | SF_BLOCK_ALL | SF_IMMOVABLE);
-	if (!_GM(gameMenu)) {
-		return;
-	}
-#if 0
-	menu_ButtonAdd(_GM(gameMenu), GM_TAG_MAIN, GM_MAIN_X, GM_MAIN_Y, GM_MAIN_W, GM_MAIN_H, cb_Game_Main);
+	_GM(gameMenu) = menu_Create(_GM(menuSprites)[GM_DIALOG_BOX],
+		GAME_MENU_X, GAME_MENU_Y, MENU_DEPTH | SF_GET_ALL | SF_BLOCK_ALL | SF_IMMOVABLE);
+	assert(_GM(gameMenu));
+
+	Burger::GUI::menu_ButtonAdd(_GM(gameMenu), GM_TAG_QUIT,
+		GM_QUIT_X, GM_QUIT_Y, GM_QUIT_W, GM_QUIT_H, cbQuitGame);
+	Burger::GUI::menu_ButtonAdd(_GM(gameMenu), GM_TAG_MAIN,
+		GM_MAIN_X, GM_MAIN_Y, GM_MAIN_W, GM_MAIN_H, cbMainMenu);
+
+	#if 0
 	menu_ButtonAdd(_GM(gameMenu), GM_TAG_OPTIONS, GM_OPTIONS_X, GM_OPTIONS_Y, GM_OPTIONS_W, GM_OPTIONS_H, cb_Game_Options);
 	menu_ButtonAdd(_GM(gameMenu), GM_TAG_RESUME, GM_RESUME_X, GM_RESUME_Y, GM_RESUME_W, GM_RESUME_H, cb_Game_Resume);
-	menu_ButtonAdd(_GM(gameMenu), GM_TAG_QUIT, GM_QUIT_X, GM_QUIT_Y, GM_QUIT_W, GM_QUIT_H, cb_Game_Quit);
 
 	if (!_GM(gameMenuFromMain)) {
 		menu_ButtonAdd(_GM(gameMenu), GM_TAG_SAVE, GM_SAVE_X, GM_SAVE_Y, GM_SAVE_W, GM_SAVE_H, cb_Game_Save);
@@ -90,13 +101,80 @@ void CreateGameMenuMain(RGB8 *myPalette) {
 	} else {
 		menu_ButtonAdd(_GM(gameMenu), GM_TAG_LOAD, GM_LOAD_X, GM_LOAD_Y, GM_LOAD_W, GM_LOAD_H, cb_Game_Load, BTN_TYPE_GM_GENERIC, true);
 	}
-
+#endif
 	// Configure the game so pressing <esc> will cause the menu to disappear and the game to resume
-	menu_Configure(_GM(gameMenu), cb_Game_Resume, cb_Game_Resume);
+	menu_Configure(_GM(gameMenu), cbResume, cbResume);
 
 	vmng_screen_show((void *)_GM(gameMenu));
 	LockMouseSprite(0);
-#endif
+}
+
+void GameMenu::DestroyGameMenu() {
+	if (!_GM(gameMenu)) {
+		return;
+	}
+
+	// Remove the screen from the gui
+	vmng_screen_dispose(_GM(gameMenu));
+
+	// Destroy the menu resources
+	menu_Destroy(_GM(gameMenu));
+
+	// Unload the menu sprites
+	menu_UnloadSprites();
+}
+
+void GameMenu::cbQuitGame(void *, void *) {
+	// Destroy the game menu
+	DestroyGameMenu();
+
+	// Shutdown the menu system
+	menu_Shutdown(false);
+
+	// Set the global that will cause the entire game to exit to dos
+	_G(kernel).going = false;
+}
+
+void GameMenu::cbMainMenu(void *, void *) {
+	// Destroy the game menu
+	DestroyGameMenu();
+
+	if (!_GM(gameMenuFromMain)) {
+		// Save the game so we can resume from here if possible
+		if (_GM(interfaceWasVisible) && player_commands_allowed()) {
+			other_save_game_for_resurrection();
+		}
+
+		// Make sure the interface does not reappear
+		_GM(interfaceWasVisible) = false;
+
+		// Shutdown the menu system
+		menu_Shutdown(false);
+	} else {
+		menu_Shutdown(true);
+	}
+
+	// Go to the main menu
+	_G(game).setRoom(494);
+}
+
+void GameMenu::cbResume(void *, void *) {
+	// Destroy the game menu
+	DestroyGameMenu();
+
+	// Shutdown the menu system
+	menu_Shutdown(true);
+}
+
+/*-------------------- ACCESS METHODS --------------------*/
+
+void CreateGameMenu(RGB8 *myPalette) {
+	if ((!player_commands_allowed()) || (!INTERFACE_VISIBLE) ||
+		_G(pal_fade_in_progress) || _G(menuSystemInitialized)) {
+		return;
+	}
+
+	GameMenu::show(myPalette);
 }
 
 } // namespace GUI
diff --git a/engines/m4/riddle/gui/game_menu.h b/engines/m4/riddle/gui/game_menu.h
index 7b26136cbea..4170cd9b862 100644
--- a/engines/m4/riddle/gui/game_menu.h
+++ b/engines/m4/riddle/gui/game_menu.h
@@ -29,8 +29,16 @@ namespace M4 {
 namespace Riddle {
 namespace GUI {
 
-#define GAME_MENU_X 190
-#define GAME_MENU_Y 100
+class GameMenu {
+private:
+	static void DestroyGameMenu();
+	static void cbQuitGame(void *, void *);
+	static void cbMainMenu(void *, void *);
+	static void cbResume(void *, void *);
+
+public:
+	static void show(RGB8 *myPalette);
+};
 
 extern void CreateGameMenu(RGB8 *myPalette);
 


Commit: d4e8311475feea39cf79af1ef78ad1c07ac32c86
    https://github.com/scummvm/scummvm/commit/d4e8311475feea39cf79af1ef78ad1c07ac32c86
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2025-02-11T21:12:08-08:00

Commit Message:
M4: RIDDLE: Implement proper greyscale fading

Changed paths:
    engines/m4/graphics/krn_pal.cpp


diff --git a/engines/m4/graphics/krn_pal.cpp b/engines/m4/graphics/krn_pal.cpp
index 207ac5c4f84..7fb513c17ea 100644
--- a/engines/m4/graphics/krn_pal.cpp
+++ b/engines/m4/graphics/krn_pal.cpp
@@ -109,8 +109,9 @@ static void grey_fade(RGB8 *pal, int32 to_from_flag, int32 from, int32 to, int32
 static void create_luminance_map(RGB8 *pal) {
 	for (int i = GREY_START; i <= FREE_END; i++) {
 		Byte luminance = (Byte)((pal[i].r + pal[i].g + pal[i].b) / 3);
-		_GP(fadeToMe)[i].g = (Byte)imath_min(255, luminance);		 // New green screen!
-		_GP(fadeToMe)[i].r = _GP(fadeToMe)[i].b = 0;
+		_GP(fadeToMe)[i].g = luminance;
+		// Orion Burger uses green shading, Riddle uses grey shading
+		_GP(fadeToMe)[i].r = _GP(fadeToMe)[i].b = IS_RIDDLE ? luminance : 0;
 	}
 }
 
@@ -162,7 +163,7 @@ void krn_fade_to_grey(RGB8 *pal, int32 steps, int32 delay) {
 	memcpy(_GP(picPal), pal, sizeof(RGB8) * 256);
 	create_luminance_map(pal);
 
-	grey_fade(pal, TO_GREY, 21, 255, steps, delay);
+	grey_fade(pal, TO_GREY, GREY_START, GREY_END, steps, delay);
 
 	// Make translation table to translate colors using entries 59-255 into 21-58 range
 
@@ -170,11 +171,6 @@ void krn_fade_to_grey(RGB8 *pal, int32 steps, int32 delay) {
 		bestMatch = 65;
 		minDist = 255;
 
-		if (!(i & 0x3ff)) {
-			_G(digi).task();
-			_G(midi).task();
-		}
-
 		for (j = 59; j <= 255; j++) {
 			if (imath_abs((_GP(fadeToMe)[j].r >> 2) - i) < minDist) {
 				minDist = imath_abs((_GP(fadeToMe)[j].r >> 2) - i);
@@ -212,11 +208,11 @@ void krn_fade_to_grey(RGB8 *pal, int32 steps, int32 delay) {
 
 	// Make new trickPal with grey-scale ramp entries and load it into VGA registers
 	memcpy(_GP(trick), _GP(fadeToMe), sizeof(RGB8) * 256);	// trick pal is the greyed version plus the grey ramp overlayed on top
-	int8 grey_step = 256 / NUM_GREYS;
-	int8 grey_ramp = 0;
+	byte grey_step = 256 / NUM_GREYS;
+	byte grey_ramp = 0;
 	for (i = GREY_START; i <= GREY_END; i++) {
-		_GP(trick)[i].g = (Byte)(grey_ramp);		  // New green screen
-		_GP(trick)[i].r = _GP(trick)[i].b = 0;
+		_GP(trick)[i].g = grey_ramp;
+		_GP(trick)[i].r = _GP(trick)[i].b = IS_RIDDLE ? grey_ramp : 0;
 		grey_ramp += grey_step;
 	}
 




More information about the Scummvm-git-logs mailing list