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

dreammaster noreply at scummvm.org
Sun Feb 16 05:32:58 UTC 2025


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

Summary:
37451dbec4 M4: RIDDLE: Move save load menu constants into SaveLoadMenuBase
e4e0bd10a8 M4: RIDDLE: Figuring out Riddle saveload constants
edb10775a0 M4: RIDDLE: Further work on save/load menu display


Commit: 37451dbec4db86f777c003ed229db6e0e0c6318b
    https://github.com/scummvm/scummvm/commit/37451dbec4db86f777c003ed229db6e0e0c6318b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2025-02-15T21:32:45-08:00

Commit Message:
M4: RIDDLE: Move save load menu constants into SaveLoadMenuBase

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


diff --git a/engines/m4/burger/gui/game_menu.cpp b/engines/m4/burger/gui/game_menu.cpp
index 82b24207cc1..f0a5cc654e8 100644
--- a/engines/m4/burger/gui/game_menu.cpp
+++ b/engines/m4/burger/gui/game_menu.cpp
@@ -29,6 +29,7 @@
 #include "m4/core/errors.h"
 #include "m4/core/imath.h"
 #include "m4/gui/gui_event.h"
+#include "m4/gui/gui_menu_items.h"
 #include "m4/gui/hotkeys.h"
 #include "m4/graphics/gr_line.h"
 #include "m4/graphics/gr_sprite.h"
@@ -528,7 +529,7 @@ void SaveLoadMenu::show(RGB8 *myPalette, bool saveMenu) {
 	CompactMem();
 
 	// Load in the game menu sprites
-	if (!guiMenu::loadSprites("slmenu", SL_TOTAL_SPRITES)) {
+	if (!guiMenu::loadSprites("slmenu", GUI::SaveLoadMenuBase::SL_TOTAL_SPRITES)) {
 		return;
 	}
 
@@ -539,7 +540,7 @@ void SaveLoadMenu::show(RGB8 *myPalette, bool saveMenu) {
 	_GM(thumbIndex) = 100;
 	_GM(currMenuIsSave) = saveMenu;
 
-	_GM(slMenu) = guiMenu::create(_GM(menuSprites)[SL_DIALOG_BOX], SAVE_LOAD_MENU_X, SAVE_LOAD_MENU_Y,
+	_GM(slMenu) = guiMenu::create(_GM(menuSprites)[GUI::SaveLoadMenuBase::SL_DIALOG_BOX], SAVE_LOAD_MENU_X, SAVE_LOAD_MENU_Y,
 		MENU_DEPTH | SF_GET_ALL | SF_BLOCK_ALL | SF_IMMOVABLE);
 	if (!_GM(slMenu)) {
 		return;
@@ -588,10 +589,12 @@ void SaveLoadMenu::show(RGB8 *myPalette, bool saveMenu) {
 
 	} else {
 		updateThumbnails(0, _GM(slMenu));
-		_GM(saveLoadThumbNail) = _GM(menuSprites)[SL_EMPTY_THUMB];
+		_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
 	}
 
-	menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_THUMBNAIL, SL_THUMBNAIL_X, SL_THUMBNAIL_Y, SL_THUMBNAIL_W, SL_THUMBNAIL_H, false);
+	menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_THUMBNAIL, SL_THUMBNAIL_X, SL_THUMBNAIL_Y,
+		M4::GUI::SaveLoadMenuBase::SL_THUMBNAIL_W,
+		M4::GUI::SaveLoadMenuBase::SL_THUMBNAIL_H, false);
 
 	if (_GM(currMenuIsSave)) {
 		//<return> - if a slot has been selected, saves the game
@@ -808,7 +811,7 @@ void SaveLoadMenu::cb_SaveLoad_Cancel(menuItemButton *, guiMenu *myMenu) {
 
 			// Remove the thumbnail
 			if (_GM(saveLoadThumbNail)) {
-				_GM(saveLoadThumbNail) = _GM(menuSprites)[SL_EMPTY_THUMB];
+				_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
 				guiMenu::itemRefresh(nullptr, SL_TAG_THUMBNAIL, myMenu);
 			}
 		}
@@ -949,7 +952,7 @@ bool SaveLoadMenu::load_Handler(menuItemButton *myItem, int32 eventType, int32 e
 
 				// Remove the thumbnail
 				if (_GM(saveLoadThumbNail)) {
-					_GM(saveLoadThumbNail) = _GM(menuSprites)[SL_EMPTY_THUMB];
+					_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
 					guiMenu::itemRefresh(nullptr, SL_TAG_THUMBNAIL, (guiMenu *)myItem->myMenu);
 				}
 			}
diff --git a/engines/m4/gui/game_menu.cpp b/engines/m4/gui/game_menu.cpp
index 15caeff3b3f..000297ad261 100644
--- a/engines/m4/gui/game_menu.cpp
+++ b/engines/m4/gui/game_menu.cpp
@@ -28,6 +28,88 @@
 namespace M4 {
 namespace GUI {
 
+uint16 SaveLoadMenuBase::SL_THUMBNAIL_W;
+uint16 SaveLoadMenuBase::SL_THUMBNAIL_H;
+uint16 SaveLoadMenuBase::SL_DIALOG_BOX;
+uint16 SaveLoadMenuBase::SL_EMPTY_THUMB;
+uint16 SaveLoadMenuBase::SL_SAVE_BTN_GREY;
+uint16 SaveLoadMenuBase::SL_SAVE_BTN_NORM;
+uint16 SaveLoadMenuBase::SL_SAVE_BTN_OVER;
+uint16 SaveLoadMenuBase::SL_SAVE_BTN_PRESS;
+uint16 SaveLoadMenuBase::SL_LOAD_BTN_GREY;
+uint16 SaveLoadMenuBase::SL_LOAD_BTN_NORM;
+uint16 SaveLoadMenuBase::SL_LOAD_BTN_OVER;
+uint16 SaveLoadMenuBase::SL_LOAD_BTN_PRESS;
+uint16 SaveLoadMenuBase::SL_CANCEL_BTN_NORM;
+uint16 SaveLoadMenuBase::SL_CANCEL_BTN_OVER;
+uint16 SaveLoadMenuBase::SL_CANCEL_BTN_PRESS;
+uint16 SaveLoadMenuBase::SL_UP_BTN_GREY;
+uint16 SaveLoadMenuBase::SL_UP_BTN_NORM;
+uint16 SaveLoadMenuBase::SL_UP_BTN_OVER;
+uint16 SaveLoadMenuBase::SL_UP_BTN_PRESS;
+uint16 SaveLoadMenuBase::SL_DOWN_BTN_GREY;
+uint16 SaveLoadMenuBase::SL_DOWN_BTN_NORM;
+uint16 SaveLoadMenuBase::SL_DOWN_BTN_OVER;
+uint16 SaveLoadMenuBase::SL_DOWN_BTN_PRESS;
+uint16 SaveLoadMenuBase::SL_SAVE_LABEL;
+uint16 SaveLoadMenuBase::SL_LOAD_LABEL;
+uint16 SaveLoadMenuBase::SL_SLIDER_BTN_NORM;
+uint16 SaveLoadMenuBase::SL_SLIDER_BTN_OVER;
+uint16 SaveLoadMenuBase::SL_SLIDER_BTN_PRESS;
+uint16 SaveLoadMenuBase::SL_LINE_NORM;
+uint16 SaveLoadMenuBase::SL_LINE_OVER;
+uint16 SaveLoadMenuBase::SL_LINE_PRESS;
+uint16 SaveLoadMenuBase::SL_SCROLL_BAR;
+uint16 SaveLoadMenuBase::SL_TOTAL_SPRITES;
+
+void SaveLoadMenuBase::init() {
+	SL_DIALOG_BOX = 0;
+
+	if (IS_RIDDLE) {
+		SL_THUMBNAIL_W = 213;
+		SL_THUMBNAIL_H = 160;
+
+		SL_UP_BTN_NORM = 13;
+		SL_SLIDER_BTN_NORM = 21;
+
+	} else {
+		SL_THUMBNAIL_W = 215;
+		SL_THUMBNAIL_H = 162;
+
+		SL_EMPTY_THUMB = 1;
+		SL_SAVE_BTN_GREY = 2;
+		SL_SAVE_BTN_NORM = 3;
+		SL_SAVE_BTN_OVER = 4;
+		SL_SAVE_BTN_PRESS = 5;
+		SL_LOAD_BTN_GREY = 6;
+		SL_LOAD_BTN_NORM = 7;
+		SL_LOAD_BTN_OVER = 8;
+		SL_LOAD_BTN_PRESS = 9;
+		SL_CANCEL_BTN_NORM = 10;
+		SL_CANCEL_BTN_OVER = 11;
+		SL_CANCEL_BTN_PRESS = 12;
+		SL_UP_BTN_GREY = 13;
+		SL_UP_BTN_NORM = 14;
+		SL_UP_BTN_OVER = 15;
+		SL_UP_BTN_PRESS = 16;
+		SL_DOWN_BTN_GREY = 17;
+		SL_DOWN_BTN_NORM = 18;
+		SL_DOWN_BTN_OVER = 19;
+		SL_DOWN_BTN_PRESS = 20;
+		SL_SAVE_LABEL = 21;
+		SL_LOAD_LABEL = 22;
+		SL_SLIDER_BTN_NORM = 23;
+		SL_SLIDER_BTN_OVER = 24;
+		SL_SLIDER_BTN_PRESS = 25;
+		SL_LINE_NORM = 26;
+		SL_LINE_OVER = 27;
+		SL_LINE_PRESS = 28;
+		SL_SCROLL_BAR = 29;
+
+		SL_TOTAL_SPRITES = 30;
+	}
+}
+
 void SaveLoadMenuBase::initializeSlotTables(void) {
 	const SaveStateList saves = g_engine->listSaves();
 
diff --git a/engines/m4/gui/game_menu.h b/engines/m4/gui/game_menu.h
index e33b1251d3c..19995b35d4d 100644
--- a/engines/m4/gui/game_menu.h
+++ b/engines/m4/gui/game_menu.h
@@ -30,6 +30,44 @@ namespace M4 {
 namespace GUI {
 
 class SaveLoadMenuBase {
+public:
+	static void init();
+
+	static uint16 SL_THUMBNAIL_W;
+	static uint16 SL_THUMBNAIL_H;
+
+	static uint16 SL_DIALOG_BOX;
+	static uint16 SL_EMPTY_THUMB;
+	static uint16 SL_SAVE_BTN_GREY;
+	static uint16 SL_SAVE_BTN_NORM;
+	static uint16 SL_SAVE_BTN_OVER;
+	static uint16 SL_SAVE_BTN_PRESS;
+	static uint16 SL_LOAD_BTN_GREY;
+	static uint16 SL_LOAD_BTN_NORM;
+	static uint16 SL_LOAD_BTN_OVER;
+	static uint16 SL_LOAD_BTN_PRESS;
+	static uint16 SL_CANCEL_BTN_NORM;
+	static uint16 SL_CANCEL_BTN_OVER;
+	static uint16 SL_CANCEL_BTN_PRESS;
+	static uint16 SL_UP_BTN_GREY;
+	static uint16 SL_UP_BTN_NORM;
+	static uint16 SL_UP_BTN_OVER;
+	static uint16 SL_UP_BTN_PRESS;
+	static uint16 SL_DOWN_BTN_GREY;
+	static uint16 SL_DOWN_BTN_NORM;
+	static uint16 SL_DOWN_BTN_OVER;
+	static uint16 SL_DOWN_BTN_PRESS;
+	static uint16 SL_SAVE_LABEL;
+	static uint16 SL_LOAD_LABEL;
+	static uint16 SL_SLIDER_BTN_NORM;
+	static uint16 SL_SLIDER_BTN_OVER;
+	static uint16 SL_SLIDER_BTN_PRESS;
+	static uint16 SL_LINE_NORM;
+	static uint16 SL_LINE_OVER;
+	static uint16 SL_LINE_PRESS;
+	static uint16 SL_SCROLL_BAR;
+	static uint16 SL_TOTAL_SPRITES;
+
 protected:
 	static void initializeSlotTables();
 	static Sprite *menu_CreateThumbnail(int32 *spriteSize);
diff --git a/engines/m4/gui/gui_menu_items.cpp b/engines/m4/gui/gui_menu_items.cpp
index ac737f02dca..b4df5c662cb 100644
--- a/engines/m4/gui/gui_menu_items.cpp
+++ b/engines/m4/gui/gui_menu_items.cpp
@@ -767,17 +767,17 @@ void menuItemButton::drawButton(menuItemButton *myItem, guiMenu *myMenu, int32 x
 	case BTN_TYPE_SL_SAVE:
 		switch (myItem->itemFlags) {
 		case BTN_STATE_NORM:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_SAVE_BTN_NORM];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_SAVE_BTN_NORM];
 			break;
 		case BTN_STATE_OVER:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_SAVE_BTN_OVER];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_SAVE_BTN_OVER];
 			break;
 		case BTN_STATE_PRESS:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_SAVE_BTN_PRESS];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_SAVE_BTN_PRESS];
 			break;
 		default:
 		case BTN_STATE_GREY:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_SAVE_BTN_GREY];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_SAVE_BTN_GREY];
 			break;
 		}
 		break;
@@ -785,17 +785,17 @@ void menuItemButton::drawButton(menuItemButton *myItem, guiMenu *myMenu, int32 x
 	case BTN_TYPE_SL_LOAD:
 		switch (myItem->itemFlags) {
 		case BTN_STATE_NORM:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_LOAD_BTN_NORM];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LOAD_BTN_NORM];
 			break;
 		case BTN_STATE_OVER:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_LOAD_BTN_OVER];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LOAD_BTN_OVER];
 			break;
 		case BTN_STATE_PRESS:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_LOAD_BTN_PRESS];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LOAD_BTN_PRESS];
 			break;
 		default:
 		case BTN_STATE_GREY:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_LOAD_BTN_GREY];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LOAD_BTN_GREY];
 			break;
 		}
 		break;
@@ -805,23 +805,23 @@ void menuItemButton::drawButton(menuItemButton *myItem, guiMenu *myMenu, int32 x
 		case BTN_STATE_OVER:
 			font_set_colors(TEXT_COLOR_OVER_SHADOW, TEXT_COLOR_OVER_FOREGROUND, TEXT_COLOR_OVER_HILITE);
 			// Gr_font_set_color(TEXT_COLOR_OVER);
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_LINE_OVER];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_OVER];
 			break;
 		case BTN_STATE_PRESS:
 			font_set_colors(TEXT_COLOR_PRESS_SHADOW, TEXT_COLOR_PRESS_FOREGROUND, TEXT_COLOR_PRESS_HILITE);
 			// Gr_font_set_color(TEXT_COLOR_PRESS);
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_LINE_PRESS];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_PRESS];
 			break;
 		case BTN_STATE_GREY:
 			font_set_colors(TEXT_COLOR_GREY_SHADOW, TEXT_COLOR_GREY_FOREGROUND, TEXT_COLOR_GREY_HILITE);
 			// Gr_font_set_color(TEXT_COLOR_GREY);
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_LINE_NORM];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_NORM];
 			break;
 		default:
 		case BTN_STATE_NORM:
 			font_set_colors(TEXT_COLOR_NORM_SHADOW, TEXT_COLOR_NORM_FOREGROUND, TEXT_COLOR_NORM_HILITE);
 			// Gr_font_set_color(TEXT_COLOR_NORM);
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_LINE_NORM];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_NORM];
 			break;
 		}
 		break;
@@ -829,17 +829,17 @@ void menuItemButton::drawButton(menuItemButton *myItem, guiMenu *myMenu, int32 x
 	case BTN_TYPE_SL_CANCEL:
 		switch (myItem->itemFlags) {
 		case BTN_STATE_NORM:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_CANCEL_BTN_NORM];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_CANCEL_BTN_NORM];
 			break;
 		case BTN_STATE_OVER:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_CANCEL_BTN_OVER];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_CANCEL_BTN_OVER];
 			break;
 		case BTN_STATE_PRESS:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_CANCEL_BTN_PRESS];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_CANCEL_BTN_PRESS];
 			break;
 		default:
 		case BTN_STATE_GREY:
-			mySprite = _GM(menuSprites)[Burger::GUI::SL_CANCEL_BTN_NORM];
+			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_CANCEL_BTN_NORM];
 			break;
 		}
 		break;
@@ -1257,13 +1257,13 @@ void menuItemMsg::drawMsg(menuItemMsg *myItem, guiMenu *myMenu, int32 x, int32 y
 
 	// Select the sprite
 	switch (myItem->tag) {
-	case Burger::GUI::SL_TAG_SAVE_LABEL:
-		mySprite = _GM(menuSprites)[Burger::GUI::SL_SAVE_LABEL];
+	case SL_TAG_SAVE_LABEL:
+		mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_SAVE_LABEL];
 		break;
-	case Burger::GUI::SL_TAG_LOAD_LABEL:
-		mySprite = _GM(menuSprites)[Burger::GUI::SL_LOAD_LABEL];
+	case SL_TAG_LOAD_LABEL:
+		mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LOAD_LABEL];
 		break;
-	case Burger::GUI::SL_TAG_THUMBNAIL:
+	case SL_TAG_THUMBNAIL:
 		mySprite = _GM(saveLoadThumbNail);
 		break;
 	}
@@ -1278,11 +1278,11 @@ void menuItemMsg::drawMsg(menuItemMsg *myItem, guiMenu *myMenu, int32 x, int32 y
 	if (backgroundBuff) {
 		gr_buffer_rect_copy_2(backgroundBuff, myBuff, 0, 0, x, y, backgroundBuff->w, backgroundBuff->h);
 		myItem->background->release();
-	} else if (myItem->tag == Burger::GUI::SL_TAG_THUMBNAIL && mySprite->w == 160) {
+	} else if (myItem->tag == SL_TAG_THUMBNAIL && mySprite->w == 160) {
 		// Hack for handling smaller ScummVM thumbnails
-		for (int yp = y; yp < (y + Burger::GUI::SL_THUMBNAIL_H); ++yp) {
+		for (int yp = y; yp < (y + SaveLoadMenuBase::SL_THUMBNAIL_H); ++yp) {
 			byte *line = myBuff->data + myBuff->stride * yp + x;
-			Common::fill(line, line + Burger::GUI::SL_THUMBNAIL_W, 0);
+			Common::fill(line, line + SaveLoadMenuBase::SL_THUMBNAIL_W, 0);
 		}
 
 		x += 25;
@@ -1578,6 +1578,85 @@ menuItemHSlider *menuItemHSlider::add(guiMenu *myMenu, int32 tag, int32 x, int32
 
 //-------------------------------    VSLIDER MENU ITEM    ---------------------------------//
 
+menuItemVSlider *menuItemVSlider::add(guiMenu *myMenu, int32 tag, int32 x, int32 y, int32 w, int32 h,
+	int32 initPercent, CALLBACK callback, bool transparent) {
+	menuItemVSlider *newItem;
+	ScreenContext *myScreen;
+	int32 status;
+
+	// Verify params
+	if (!myMenu)
+		return nullptr;
+
+	// Allocate a new one
+	newItem = new menuItemVSlider();
+
+	// Initialize the struct
+	newItem->next = myMenu->itemList;
+	newItem->prev = nullptr;
+	if (myMenu->itemList) {
+		myMenu->itemList->prev = newItem;
+	}
+	myMenu->itemList = newItem;
+
+	newItem->myMenu = myMenu;
+	newItem->tag = tag;
+	newItem->x1 = x;
+	newItem->y1 = y;
+	newItem->x2 = x + w - 1;
+	newItem->y2 = y + h - 1;
+	newItem->callback = callback;
+
+	if (!transparent) {
+		newItem->transparent = false;
+		newItem->background = nullptr;
+	} else {
+		newItem->transparent = true;
+		newItem->background = guiMenu::copyBackground(myMenu, x, y, w, h);
+	}
+
+	newItem->itemFlags = menuItemVSlider::VS_NORM;
+
+	if (IS_RIDDLE) {
+		newItem->thumbW = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->w;
+		newItem->thumbH = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->h;
+
+		newItem->minThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM]->h;
+		newItem->maxThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM]->h +
+			_GM(menuSprites)[SaveLoadMenuBase::SL_SCROLL_BAR]->h
+			- _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->h - 1;
+	} else {
+		newItem->thumbW = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->w;
+		newItem->thumbH = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->h;
+
+		newItem->minThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM]->h + 1;
+		newItem->maxThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM]->h +
+			_GM(menuSprites)[SaveLoadMenuBase::SL_SCROLL_BAR]->h
+			- _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->h - 1;
+	}
+
+	// Calculate the initial thumbY
+	newItem->percent = imath_max(imath_min(initPercent, 100), 0);
+	newItem->thumbY = newItem->minThumbY +
+		((newItem->percent * (newItem->maxThumbY - newItem->minThumbY)) / 100);
+
+	newItem->redraw = (DrawFunction)menuItemVSlider::drawVSlider;
+	newItem->destroy = (DestroyFunction)menuItem::destroyItem;
+	newItem->itemEventHandler = (ItemHandlerFunction)menuItemVSlider::handler;
+
+	// Draw the vslider in now
+	(newItem->redraw)(newItem, myMenu, x, y, 0, 0);
+
+	// See if the screen is currently visible
+	myScreen = vmng_screen_find(myMenu, &status);
+	if (myScreen && (status == SCRN_ACTIVE)) {
+		RestoreScreens(myScreen->x1 + newItem->x1, myScreen->y1 + newItem->y1,
+			myScreen->x1 + newItem->x2, myScreen->y1 + newItem->y2);
+	}
+
+	return newItem;
+}
+
 void menuItemVSlider::drawVSlider(menuItemVSlider *myItem, guiMenu *myMenu, int32 x, int32 y, int32, int32) {
 	Buffer *myBuff = nullptr;
 	Buffer *backgroundBuff = nullptr;
@@ -1614,30 +1693,30 @@ void menuItemVSlider::drawVSlider(menuItemVSlider *myItem, guiMenu *myMenu, int3
 	}
 
 	// Set the different sprite components
-	vbarSprite = _GM(menuSprites)[Burger::GUI::SL_SCROLL_BAR];
-	upSprite = _GM(menuSprites)[Burger::GUI::SL_UP_BTN_NORM];
-	thumbSprite = _GM(menuSprites)[Burger::GUI::SL_SLIDER_BTN_NORM];
-	downSprite = _GM(menuSprites)[Burger::GUI::SL_DOWN_BTN_NORM];
+	vbarSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SCROLL_BAR];
+	upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM];
+	thumbSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM];
+	downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_NORM];
 
 	if ((myItem->itemFlags & VS_STATUS) == VS_GREY) {
-		upSprite = _GM(menuSprites)[Burger::GUI::SL_UP_BTN_GREY];
+		upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_GREY];
 		thumbSprite = nullptr;
-		downSprite = _GM(menuSprites)[Burger::GUI::SL_DOWN_BTN_GREY];
+		downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_GREY];
 	} else if ((myItem->itemFlags & VS_STATUS) == VS_OVER) {
 		if ((myItem->itemFlags & VS_COMPONENT) == VS_UP) {
-			upSprite = _GM(menuSprites)[Burger::GUI::SL_UP_BTN_OVER];
+			upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_OVER];
 		} else if ((myItem->itemFlags & VS_COMPONENT) == VS_THUMB) {
-			thumbSprite = _GM(menuSprites)[Burger::GUI::SL_SLIDER_BTN_OVER];
+			thumbSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_OVER];
 		} else if ((myItem->itemFlags & VS_COMPONENT) == VS_DOWN) {
-			downSprite = _GM(menuSprites)[Burger::GUI::SL_DOWN_BTN_OVER];
+			downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_OVER];
 		}
 	} else if ((myItem->itemFlags & VS_STATUS) == VS_PRESS) {
 		if ((myItem->itemFlags & VS_COMPONENT) == VS_UP) {
-			upSprite = _GM(menuSprites)[Burger::GUI::SL_UP_BTN_PRESS];
+			upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_PRESS];
 		} else if ((myItem->itemFlags & VS_COMPONENT) == VS_THUMB) {
-			thumbSprite = _GM(menuSprites)[Burger::GUI::SL_SLIDER_BTN_PRESS];
+			thumbSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_PRESS];
 		} else if ((myItem->itemFlags & VS_COMPONENT) == VS_DOWN) {
-			downSprite = _GM(menuSprites)[Burger::GUI::SL_DOWN_BTN_PRESS];
+			downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_PRESS];
 		}
 	}
 
@@ -1859,75 +1938,6 @@ bool menuItemVSlider::handler(menuItemVSlider *myItem, int32 eventType, int32 ev
 	return handled;
 }
 
-
-menuItemVSlider *menuItemVSlider::add(guiMenu *myMenu, int32 tag, int32 x, int32 y, int32 w, int32 h,
-	int32 initPercent, CALLBACK callback, bool transparent) {
-	menuItemVSlider *newItem;
-	ScreenContext *myScreen;
-	int32 status;
-
-	// Verify params
-	if (!myMenu)
-		return nullptr;
-
-	// Allocate a new one
-	newItem = new menuItemVSlider();
-
-	// Initialize the struct
-	newItem->next = myMenu->itemList;
-	newItem->prev = nullptr;
-	if (myMenu->itemList) {
-		myMenu->itemList->prev = newItem;
-	}
-	myMenu->itemList = newItem;
-
-	newItem->myMenu = myMenu;
-	newItem->tag = tag;
-	newItem->x1 = x;
-	newItem->y1 = y;
-	newItem->x2 = x + w - 1;
-	newItem->y2 = y + h - 1;
-	newItem->callback = callback;
-
-	if (!transparent) {
-		newItem->transparent = false;
-		newItem->background = nullptr;
-	} else {
-		newItem->transparent = true;
-		newItem->background = guiMenu::copyBackground(myMenu, x, y, w, h);
-	}
-
-	newItem->itemFlags = menuItemVSlider::VS_NORM;
-
-	newItem->thumbW = _GM(menuSprites)[Burger::GUI::SL_SLIDER_BTN_NORM]->w;
-	newItem->thumbH = _GM(menuSprites)[Burger::GUI::SL_SLIDER_BTN_NORM]->h;
-
-	newItem->minThumbY = _GM(menuSprites)[Burger::GUI::SL_UP_BTN_NORM]->h + 1;
-	newItem->maxThumbY = _GM(menuSprites)[Burger::GUI::SL_UP_BTN_NORM]->h + _GM(menuSprites)[Burger::GUI::SL_SCROLL_BAR]->h
-		- _GM(menuSprites)[Burger::GUI::SL_SLIDER_BTN_NORM]->h - 1;
-
-	// Calculate the initial thumbY
-	newItem->percent = imath_max(imath_min(initPercent, 100), 0);
-	newItem->thumbY = newItem->minThumbY +
-		((newItem->percent * (newItem->maxThumbY - newItem->minThumbY)) / 100);
-
-	newItem->redraw = (DrawFunction)menuItemVSlider::drawVSlider;
-	newItem->destroy = (DestroyFunction)menuItem::destroyItem;
-	newItem->itemEventHandler = (ItemHandlerFunction)menuItemVSlider::handler;
-
-	// Draw the vslider in now
-	(newItem->redraw)(newItem, myMenu, x, y, 0, 0);
-
-	// See if the screen is currently visible
-	myScreen = vmng_screen_find(myMenu, &status);
-	if (myScreen && (status == SCRN_ACTIVE)) {
-		RestoreScreens(myScreen->x1 + newItem->x1, myScreen->y1 + newItem->y1,
-			myScreen->x1 + newItem->x2, myScreen->y1 + newItem->y2);
-	}
-
-	return newItem;
-}
-
 void menuItemVSlider::disableVSlider(menuItemVSlider *myItem, int32 tag, guiMenu *myMenu) {
 	// Verify params
 	if (!myMenu)
@@ -1983,16 +1993,16 @@ void menuItemTextField::drawTextField(menuItemTextField *myItem, guiMenu *myMenu
 	// Select the sprite
 	switch (myText->itemFlags) {
 	case TF_GREY:
-		mySprite = _GM(menuSprites)[Burger::GUI::SL_LINE_NORM];
+		mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_NORM];
 		break;
 
 	case TF_OVER:
-		mySprite = _GM(menuSprites)[Burger::GUI::SL_LINE_OVER];
+		mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_OVER];
 		break;
 
 	case TF_NORM:
 	default:
-		mySprite = _GM(menuSprites)[Burger::GUI::SL_LINE_OVER];
+		mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_OVER];
 		break;
 	}
 
diff --git a/engines/m4/gui/gui_menu_items.h b/engines/m4/gui/gui_menu_items.h
index 8d2917ca2f4..5c8e5e24eef 100644
--- a/engines/m4/gui/gui_menu_items.h
+++ b/engines/m4/gui/gui_menu_items.h
@@ -33,50 +33,6 @@ namespace M4 {
 namespace Burger {
 namespace GUI {
 
-enum save_load_menu_sprites {
-	SL_DIALOG_BOX,
-	SL_EMPTY_THUMB,
-
-	SL_SAVE_BTN_GREY,
-	SL_SAVE_BTN_NORM,
-	SL_SAVE_BTN_OVER,
-	SL_SAVE_BTN_PRESS,
-
-	SL_LOAD_BTN_GREY,
-	SL_LOAD_BTN_NORM,
-	SL_LOAD_BTN_OVER,
-	SL_LOAD_BTN_PRESS,
-
-	SL_CANCEL_BTN_NORM,
-	SL_CANCEL_BTN_OVER,
-	SL_CANCEL_BTN_PRESS,
-
-	SL_UP_BTN_GREY,
-	SL_UP_BTN_NORM,
-	SL_UP_BTN_OVER,
-	SL_UP_BTN_PRESS,
-
-	SL_DOWN_BTN_GREY,
-	SL_DOWN_BTN_NORM,
-	SL_DOWN_BTN_OVER,
-	SL_DOWN_BTN_PRESS,
-
-	SL_SAVE_LABEL,
-	SL_LOAD_LABEL,
-
-	SL_SLIDER_BTN_NORM,
-	SL_SLIDER_BTN_OVER,
-	SL_SLIDER_BTN_PRESS,
-
-	SL_LINE_NORM,
-	SL_LINE_OVER,
-	SL_LINE_PRESS,
-
-	SL_SCROLL_BAR,
-
-	SL_TOTAL_SPRITES
-};
-
 enum options_menu_sprites {
 	OM_DIALOG_BOX,
 
@@ -98,19 +54,6 @@ enum options_menu_sprites {
 	OM_TOTAL_SPRITES
 };
 
-enum save_load_menu_item_tags {
-	SL_TAG_SAVE = 100,
-	SL_TAG_SAVE_LABEL,
-	SL_TAG_LOAD,
-	SL_TAG_LOAD_LABEL,
-	SL_TAG_CANCEL,
-	SL_TAG_VSLIDER,
-	SL_TAG_THUMBNAIL
-};
-
-constexpr int SL_THUMBNAIL_W = 215;
-constexpr int SL_THUMBNAIL_H = 162;
-
 } // namespace GUI
 } // namespace Burger
 
@@ -135,52 +78,6 @@ enum options_menu_sprites {
 	OM_TOTAL_SPRITES = 14
 };
 
-enum save_load_menu_sprites {
-	SL_DIALOG_BOX,
-
-#ifdef TODO
-	SL_SAVE_BTN_GREY,
-	SL_SAVE_BTN_NORM,
-	SL_SAVE_BTN_OVER,
-	SL_SAVE_BTN_PRESS,
-
-	SL_LOAD_BTN_GREY,
-	SL_LOAD_BTN_NORM,
-	SL_LOAD_BTN_OVER,
-	SL_LOAD_BTN_PRESS,
-
-	SL_CANCEL_BTN_NORM,
-	SL_CANCEL_BTN_OVER,
-	SL_CANCEL_BTN_PRESS,
-
-	SL_UP_BTN_GREY,
-	SL_UP_BTN_NORM,
-	SL_UP_BTN_OVER,
-	SL_UP_BTN_PRESS,
-
-	SL_DOWN_BTN_GREY,
-	SL_DOWN_BTN_NORM,
-	SL_DOWN_BTN_OVER,
-	SL_DOWN_BTN_PRESS,
-
-	SL_SAVE_LABEL,
-	SL_LOAD_LABEL,
-
-	SL_SLIDER_BTN_NORM,
-	SL_SLIDER_BTN_OVER,
-	SL_SLIDER_BTN_PRESS,
-
-	SL_LINE_NORM,
-	SL_LINE_OVER,
-	SL_LINE_PRESS,
-
-	SL_SCROLL_BAR,
-#endif
-	SL_EMPTY_THUMB = 25,
-
-	SL_TOTAL_SPRITES = 26
-};
-
 } // namespace GUI
 } // namespace Riddle
 
@@ -190,6 +87,16 @@ namespace GUI {
 #define LockMouseSprite mouse_lock_sprite
 #define UnlockMouseSprite mouse_unlock_sprite
 
+enum save_load_menu_item_tags {
+	SL_TAG_SAVE = 100,
+	SL_TAG_SAVE_LABEL,
+	SL_TAG_LOAD,
+	SL_TAG_LOAD_LABEL,
+	SL_TAG_CANCEL,
+	SL_TAG_VSLIDER,
+	SL_TAG_THUMBNAIL
+};
+
 struct menuItem;
 struct guiMenu;
 
diff --git a/engines/m4/riddle/gui/game_menu.cpp b/engines/m4/riddle/gui/game_menu.cpp
index e7424ff1797..17274cbfa14 100644
--- a/engines/m4/riddle/gui/game_menu.cpp
+++ b/engines/m4/riddle/gui/game_menu.cpp
@@ -309,33 +309,24 @@ void OptionsMenu::cbSetMidi(M4::GUI::menuItemHSlider *myItem, M4::GUI::guiMenu *
 #define SAVE_LOAD_MENU_X 42
 #define SAVE_LOAD_MENU_Y 155
 
-#define SL_TAG_SAVE_LABEL	1
-#define SL_TAG_LOAD_LABEL	2
 #define SL_LABEL_X		111
 #define SL_LABEL_Y		2
 #define SL_LABEL_W		110
 #define SL_LABEL_H		17
 
-#define SL_TAG_THUMBNAIL	5
 #define SL_THUMBNAIL_X		333
 #define SL_THUMBNAIL_Y		5
-#define SL_THUMBNAIL_W		213
-#define SL_THUMBNAIL_H		160
 
-#define SL_TAG_SAVE		100
-#define SL_TAG_LOAD		101
 #define SL_SAVELOAD_X	10
 #define SL_SAVELOAD_Y	74
 #define SL_SAVELOAD_W	26
 #define SL_SAVELOAD_H	26
 
-#define SL_TAG_CANCEL	102
 #define SL_CANCEL_X		10
 #define SL_CANCEL_Y		122
 #define SL_CANCEL_W		26
 #define SL_CANCEL_H		26
 
-#define SL_TAG_VSLIDER	103
 #define SL_SLIDER_X		305
 #define SL_SLIDER_Y		21
 #define SL_SLIDER_W		20
@@ -360,7 +351,7 @@ void SaveLoadMenu::show(RGB8 *myPalette, bool saveMenu) {
 	CompactMem();
 
 	// Load in the game menu sprites
-	if (!guiMenu::loadSprites("slmenu", SL_TOTAL_SPRITES)) {
+	if (!guiMenu::loadSprites("slmenu", GUI::SaveLoadMenuBase::SL_TOTAL_SPRITES)) {
 		return;
 	}
 
@@ -371,7 +362,7 @@ void SaveLoadMenu::show(RGB8 *myPalette, bool saveMenu) {
 	_GM(thumbIndex) = 100;
 	_GM(currMenuIsSave) = saveMenu;
 
-	_GM(slMenu) = guiMenu::create(_GM(menuSprites)[SL_DIALOG_BOX], SAVE_LOAD_MENU_X, SAVE_LOAD_MENU_Y,
+	_GM(slMenu) = guiMenu::create(_GM(menuSprites)[GUI::SaveLoadMenuBase::SL_DIALOG_BOX], SAVE_LOAD_MENU_X, SAVE_LOAD_MENU_Y,
 		MENU_DEPTH | SF_GET_ALL | SF_BLOCK_ALL | SF_IMMOVABLE);
 	if (!_GM(slMenu)) {
 		return;
@@ -425,10 +416,11 @@ void SaveLoadMenu::show(RGB8 *myPalette, bool saveMenu) {
 
 	} else {
 		updateThumbnails(0, _GM(slMenu));
-		_GM(saveLoadThumbNail) = _GM(menuSprites)[SL_EMPTY_THUMB];
+		_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
 	}
 
-	menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_THUMBNAIL, SL_THUMBNAIL_X, SL_THUMBNAIL_Y, SL_THUMBNAIL_W, SL_THUMBNAIL_H, false);
+	menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_THUMBNAIL, SL_THUMBNAIL_X, SL_THUMBNAIL_Y,
+		SaveLoadMenuBase::SL_THUMBNAIL_W, SaveLoadMenuBase::SL_THUMBNAIL_H, false);
 
 	if (_GM(currMenuIsSave)) {
 		//<return> - if a slot has been selected, saves the game
@@ -516,7 +508,7 @@ bool SaveLoadMenu::load_Handler(M4::GUI::menuItemButton *myItem, int32 eventType
 
 				// Remove the thumbnail
 				if (_GM(saveLoadThumbNail)) {
-					_GM(saveLoadThumbNail) = _GM(menuSprites)[SL_EMPTY_THUMB];
+					_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
 					guiMenu::itemRefresh(nullptr, SL_TAG_THUMBNAIL, (guiMenu *)myItem->myMenu);
 				}
 			}
@@ -634,7 +626,7 @@ void SaveLoadMenu::cbCancel(M4::GUI::menuItemButton *, M4::GUI::guiMenu *myMenu)
 
 			// Remove the thumbnail
 			if (_GM(saveLoadThumbNail)) {
-				_GM(saveLoadThumbNail) = _GM(menuSprites)[SL_EMPTY_THUMB];
+				_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
 				guiMenu::itemRefresh(nullptr, SL_TAG_THUMBNAIL, myMenu);
 			}
 		}
diff --git a/engines/m4/vars.cpp b/engines/m4/vars.cpp
index ffe71cf1f13..f316478839a 100644
--- a/engines/m4/vars.cpp
+++ b/engines/m4/vars.cpp
@@ -26,6 +26,7 @@
 #include "m4/core/errors.h"
 #include "m4/dbg/debug.h"
 #include "m4/graphics/gr_pal.h"
+#include "m4/gui/game_menu.h"
 #include "m4/gui/gui_buffer.h"
 #include "m4/gui/gui_dialog.h"
 #include "m4/gui/gui_mouse.h"
@@ -69,6 +70,7 @@ Vars::~Vars() {
 bool Vars::init() {
 	param_init();
 	parse_all_flags();
+	GUI::SaveLoadMenuBase::init();
 
 	if (_G(system_shutting_down))
 		return false;


Commit: e4e0bd10a8db1724db182daa565020b1fe53cf56
    https://github.com/scummvm/scummvm/commit/e4e0bd10a8db1724db182daa565020b1fe53cf56
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2025-02-15T21:32:45-08:00

Commit Message:
M4: RIDDLE: Figuring out Riddle saveload constants

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


diff --git a/engines/m4/burger/gui/game_menu.cpp b/engines/m4/burger/gui/game_menu.cpp
index f0a5cc654e8..b68a5f1c222 100644
--- a/engines/m4/burger/gui/game_menu.cpp
+++ b/engines/m4/burger/gui/game_menu.cpp
@@ -589,7 +589,7 @@ void SaveLoadMenu::show(RGB8 *myPalette, bool saveMenu) {
 
 	} else {
 		updateThumbnails(0, _GM(slMenu));
-		_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
+		_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB_25];
 	}
 
 	menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_THUMBNAIL, SL_THUMBNAIL_X, SL_THUMBNAIL_Y,
@@ -811,7 +811,7 @@ void SaveLoadMenu::cb_SaveLoad_Cancel(menuItemButton *, guiMenu *myMenu) {
 
 			// Remove the thumbnail
 			if (_GM(saveLoadThumbNail)) {
-				_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
+				_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB_25];
 				guiMenu::itemRefresh(nullptr, SL_TAG_THUMBNAIL, myMenu);
 			}
 		}
@@ -952,7 +952,7 @@ bool SaveLoadMenu::load_Handler(menuItemButton *myItem, int32 eventType, int32 e
 
 				// Remove the thumbnail
 				if (_GM(saveLoadThumbNail)) {
-					_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
+					_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB_25];
 					guiMenu::itemRefresh(nullptr, SL_TAG_THUMBNAIL, (guiMenu *)myItem->myMenu);
 				}
 			}
diff --git a/engines/m4/gui/game_menu.cpp b/engines/m4/gui/game_menu.cpp
index 000297ad261..5266c094176 100644
--- a/engines/m4/gui/game_menu.cpp
+++ b/engines/m4/gui/game_menu.cpp
@@ -28,39 +28,39 @@
 namespace M4 {
 namespace GUI {
 
-uint16 SaveLoadMenuBase::SL_THUMBNAIL_W;
-uint16 SaveLoadMenuBase::SL_THUMBNAIL_H;
-uint16 SaveLoadMenuBase::SL_DIALOG_BOX;
-uint16 SaveLoadMenuBase::SL_EMPTY_THUMB;
-uint16 SaveLoadMenuBase::SL_SAVE_BTN_GREY;
-uint16 SaveLoadMenuBase::SL_SAVE_BTN_NORM;
-uint16 SaveLoadMenuBase::SL_SAVE_BTN_OVER;
-uint16 SaveLoadMenuBase::SL_SAVE_BTN_PRESS;
-uint16 SaveLoadMenuBase::SL_LOAD_BTN_GREY;
-uint16 SaveLoadMenuBase::SL_LOAD_BTN_NORM;
-uint16 SaveLoadMenuBase::SL_LOAD_BTN_OVER;
-uint16 SaveLoadMenuBase::SL_LOAD_BTN_PRESS;
-uint16 SaveLoadMenuBase::SL_CANCEL_BTN_NORM;
-uint16 SaveLoadMenuBase::SL_CANCEL_BTN_OVER;
-uint16 SaveLoadMenuBase::SL_CANCEL_BTN_PRESS;
-uint16 SaveLoadMenuBase::SL_UP_BTN_GREY;
-uint16 SaveLoadMenuBase::SL_UP_BTN_NORM;
-uint16 SaveLoadMenuBase::SL_UP_BTN_OVER;
-uint16 SaveLoadMenuBase::SL_UP_BTN_PRESS;
-uint16 SaveLoadMenuBase::SL_DOWN_BTN_GREY;
-uint16 SaveLoadMenuBase::SL_DOWN_BTN_NORM;
-uint16 SaveLoadMenuBase::SL_DOWN_BTN_OVER;
-uint16 SaveLoadMenuBase::SL_DOWN_BTN_PRESS;
-uint16 SaveLoadMenuBase::SL_SAVE_LABEL;
-uint16 SaveLoadMenuBase::SL_LOAD_LABEL;
-uint16 SaveLoadMenuBase::SL_SLIDER_BTN_NORM;
-uint16 SaveLoadMenuBase::SL_SLIDER_BTN_OVER;
-uint16 SaveLoadMenuBase::SL_SLIDER_BTN_PRESS;
-uint16 SaveLoadMenuBase::SL_LINE_NORM;
-uint16 SaveLoadMenuBase::SL_LINE_OVER;
-uint16 SaveLoadMenuBase::SL_LINE_PRESS;
-uint16 SaveLoadMenuBase::SL_SCROLL_BAR;
-uint16 SaveLoadMenuBase::SL_TOTAL_SPRITES;
+int16 SaveLoadMenuBase::SL_THUMBNAIL_W;
+int16 SaveLoadMenuBase::SL_THUMBNAIL_H;
+int16 SaveLoadMenuBase::SL_DIALOG_BOX;
+int16 SaveLoadMenuBase::SL_EMPTY_THUMB_25;
+int16 SaveLoadMenuBase::SL_SAVE_BTN_GREY;
+int16 SaveLoadMenuBase::SL_SAVE_BTN_NORM;
+int16 SaveLoadMenuBase::SL_SAVE_BTN_OVER;
+int16 SaveLoadMenuBase::SL_SAVE_BTN_PRESS;
+int16 SaveLoadMenuBase::SL_LOAD_BTN_GREY;
+int16 SaveLoadMenuBase::SL_LOAD_BTN_NORM;
+int16 SaveLoadMenuBase::SL_LOAD_BTN_OVER;
+int16 SaveLoadMenuBase::SL_LOAD_BTN_PRESS;
+int16 SaveLoadMenuBase::SL_CANCEL_BTN_NORM;
+int16 SaveLoadMenuBase::SL_CANCEL_BTN_OVER;
+int16 SaveLoadMenuBase::SL_CANCEL_BTN_PRESS;
+int16 SaveLoadMenuBase::SL_UP_BTN_GREY_19;
+int16 SaveLoadMenuBase::SL_UP_BTN_NORM_13;
+int16 SaveLoadMenuBase::SL_UP_BTN_OVER_15;
+int16 SaveLoadMenuBase::SL_UP_BTN_PRESS_17;
+int16 SaveLoadMenuBase::SL_DOWN_BTN_GREY_20;
+int16 SaveLoadMenuBase::SL_DOWN_BTN_NORM_14;
+int16 SaveLoadMenuBase::SL_DOWN_BTN_OVER_16;
+int16 SaveLoadMenuBase::SL_DOWN_BTN_PRESS_18;
+int16 SaveLoadMenuBase::SL_SAVE_LABEL_11;
+int16 SaveLoadMenuBase::SL_LOAD_LABEL_12;
+int16 SaveLoadMenuBase::SL_SLIDER_BTN_NORM_21;
+int16 SaveLoadMenuBase::SL_SLIDER_BTN_OVER_22;
+int16 SaveLoadMenuBase::SL_SLIDER_BTN_PRESS_23;
+int16 SaveLoadMenuBase::SL_LINE_NORM;
+int16 SaveLoadMenuBase::SL_LINE_OVER;
+int16 SaveLoadMenuBase::SL_LINE_PRESS;
+int16 SaveLoadMenuBase::SL_SCROLL_BAR_24;
+int16 SaveLoadMenuBase::SL_TOTAL_SPRITES;
 
 void SaveLoadMenuBase::init() {
 	SL_DIALOG_BOX = 0;
@@ -69,14 +69,46 @@ void SaveLoadMenuBase::init() {
 		SL_THUMBNAIL_W = 213;
 		SL_THUMBNAIL_H = 160;
 
-		SL_UP_BTN_NORM = 13;
-		SL_SLIDER_BTN_NORM = 21;
+		SL_LINE_NORM = 5;
+		SL_LINE_OVER = 6;
+		SL_LINE_PRESS = 6;
+
+		SL_SAVE_LABEL_11 = 11;
+		SL_LOAD_LABEL_12 = 12;
+		SL_UP_BTN_NORM_13 = 13;
+		SL_DOWN_BTN_NORM_14 = 14;
+		SL_UP_BTN_OVER_15 = 15;
+		SL_DOWN_BTN_OVER_16 = 16;
+		SL_UP_BTN_PRESS_17 = 17;
+		SL_DOWN_BTN_PRESS_18 = 18;
+		SL_UP_BTN_GREY_19 = 19;
+		SL_DOWN_BTN_GREY_20 = 20;
+		SL_SLIDER_BTN_NORM_21 = 21;
+		SL_SLIDER_BTN_OVER_22 = 22;
+		SL_SLIDER_BTN_PRESS_23 = 23;
+		SL_SCROLL_BAR_24 = 24;
+		SL_EMPTY_THUMB_25 = 25;
+
+		SL_TOTAL_SPRITES = 26;
+
+		// Unused
+		SL_SAVE_BTN_GREY = -1;
+		SL_SAVE_BTN_NORM = -1;
+		SL_SAVE_BTN_OVER = -1;
+		SL_SAVE_BTN_PRESS = -1;
+		SL_LOAD_BTN_GREY = -1;
+		SL_LOAD_BTN_NORM = -1;
+		SL_LOAD_BTN_OVER = -1;
+		SL_LOAD_BTN_PRESS = -1;
+		SL_CANCEL_BTN_NORM = -1;
+		SL_CANCEL_BTN_OVER = -1;
+		SL_CANCEL_BTN_PRESS = -1;
 
 	} else {
 		SL_THUMBNAIL_W = 215;
 		SL_THUMBNAIL_H = 162;
 
-		SL_EMPTY_THUMB = 1;
+		SL_EMPTY_THUMB_25 = 1;
 		SL_SAVE_BTN_GREY = 2;
 		SL_SAVE_BTN_NORM = 3;
 		SL_SAVE_BTN_OVER = 4;
@@ -88,23 +120,23 @@ void SaveLoadMenuBase::init() {
 		SL_CANCEL_BTN_NORM = 10;
 		SL_CANCEL_BTN_OVER = 11;
 		SL_CANCEL_BTN_PRESS = 12;
-		SL_UP_BTN_GREY = 13;
-		SL_UP_BTN_NORM = 14;
-		SL_UP_BTN_OVER = 15;
-		SL_UP_BTN_PRESS = 16;
-		SL_DOWN_BTN_GREY = 17;
-		SL_DOWN_BTN_NORM = 18;
-		SL_DOWN_BTN_OVER = 19;
-		SL_DOWN_BTN_PRESS = 20;
-		SL_SAVE_LABEL = 21;
-		SL_LOAD_LABEL = 22;
-		SL_SLIDER_BTN_NORM = 23;
-		SL_SLIDER_BTN_OVER = 24;
-		SL_SLIDER_BTN_PRESS = 25;
+		SL_UP_BTN_GREY_19 = 13;
+		SL_UP_BTN_NORM_13 = 14;
+		SL_UP_BTN_OVER_15 = 15;
+		SL_UP_BTN_PRESS_17 = 16;
+		SL_DOWN_BTN_GREY_20 = 17;
+		SL_DOWN_BTN_NORM_14 = 18;
+		SL_DOWN_BTN_OVER_16 = 19;
+		SL_DOWN_BTN_PRESS_18 = 20;
+		SL_SAVE_LABEL_11 = 21;
+		SL_LOAD_LABEL_12 = 22;
+		SL_SLIDER_BTN_NORM_21 = 23;
+		SL_SLIDER_BTN_OVER_22 = 24;
+		SL_SLIDER_BTN_PRESS_23 = 25;
 		SL_LINE_NORM = 26;
 		SL_LINE_OVER = 27;
 		SL_LINE_PRESS = 28;
-		SL_SCROLL_BAR = 29;
+		SL_SCROLL_BAR_24 = 29;
 
 		SL_TOTAL_SPRITES = 30;
 	}
diff --git a/engines/m4/gui/game_menu.h b/engines/m4/gui/game_menu.h
index 19995b35d4d..3c42b152749 100644
--- a/engines/m4/gui/game_menu.h
+++ b/engines/m4/gui/game_menu.h
@@ -33,40 +33,40 @@ class SaveLoadMenuBase {
 public:
 	static void init();
 
-	static uint16 SL_THUMBNAIL_W;
-	static uint16 SL_THUMBNAIL_H;
+	static int16 SL_THUMBNAIL_W;
+	static int16 SL_THUMBNAIL_H;
 
-	static uint16 SL_DIALOG_BOX;
-	static uint16 SL_EMPTY_THUMB;
-	static uint16 SL_SAVE_BTN_GREY;
-	static uint16 SL_SAVE_BTN_NORM;
-	static uint16 SL_SAVE_BTN_OVER;
-	static uint16 SL_SAVE_BTN_PRESS;
-	static uint16 SL_LOAD_BTN_GREY;
-	static uint16 SL_LOAD_BTN_NORM;
-	static uint16 SL_LOAD_BTN_OVER;
-	static uint16 SL_LOAD_BTN_PRESS;
-	static uint16 SL_CANCEL_BTN_NORM;
-	static uint16 SL_CANCEL_BTN_OVER;
-	static uint16 SL_CANCEL_BTN_PRESS;
-	static uint16 SL_UP_BTN_GREY;
-	static uint16 SL_UP_BTN_NORM;
-	static uint16 SL_UP_BTN_OVER;
-	static uint16 SL_UP_BTN_PRESS;
-	static uint16 SL_DOWN_BTN_GREY;
-	static uint16 SL_DOWN_BTN_NORM;
-	static uint16 SL_DOWN_BTN_OVER;
-	static uint16 SL_DOWN_BTN_PRESS;
-	static uint16 SL_SAVE_LABEL;
-	static uint16 SL_LOAD_LABEL;
-	static uint16 SL_SLIDER_BTN_NORM;
-	static uint16 SL_SLIDER_BTN_OVER;
-	static uint16 SL_SLIDER_BTN_PRESS;
-	static uint16 SL_LINE_NORM;
-	static uint16 SL_LINE_OVER;
-	static uint16 SL_LINE_PRESS;
-	static uint16 SL_SCROLL_BAR;
-	static uint16 SL_TOTAL_SPRITES;
+	static int16 SL_DIALOG_BOX;
+	static int16 SL_EMPTY_THUMB_25;
+	static int16 SL_SAVE_BTN_GREY;
+	static int16 SL_SAVE_BTN_NORM;
+	static int16 SL_SAVE_BTN_OVER;
+	static int16 SL_SAVE_BTN_PRESS;
+	static int16 SL_LOAD_BTN_GREY;
+	static int16 SL_LOAD_BTN_NORM;
+	static int16 SL_LOAD_BTN_OVER;
+	static int16 SL_LOAD_BTN_PRESS;
+	static int16 SL_CANCEL_BTN_NORM;
+	static int16 SL_CANCEL_BTN_OVER;
+	static int16 SL_CANCEL_BTN_PRESS;
+	static int16 SL_UP_BTN_GREY_19;
+	static int16 SL_UP_BTN_NORM_13;
+	static int16 SL_UP_BTN_OVER_15;
+	static int16 SL_UP_BTN_PRESS_17;
+	static int16 SL_DOWN_BTN_GREY_20;
+	static int16 SL_DOWN_BTN_NORM_14;
+	static int16 SL_DOWN_BTN_OVER_16;
+	static int16 SL_DOWN_BTN_PRESS_18;
+	static int16 SL_SAVE_LABEL_11;
+	static int16 SL_LOAD_LABEL_12;
+	static int16 SL_SLIDER_BTN_NORM_21;
+	static int16 SL_SLIDER_BTN_OVER_22;
+	static int16 SL_SLIDER_BTN_PRESS_23;
+	static int16 SL_LINE_NORM;
+	static int16 SL_LINE_OVER;
+	static int16 SL_LINE_PRESS;
+	static int16 SL_SCROLL_BAR_24;
+	static int16 SL_TOTAL_SPRITES;
 
 protected:
 	static void initializeSlotTables();
diff --git a/engines/m4/gui/gui_menu_items.cpp b/engines/m4/gui/gui_menu_items.cpp
index b4df5c662cb..03508a61b0b 100644
--- a/engines/m4/gui/gui_menu_items.cpp
+++ b/engines/m4/gui/gui_menu_items.cpp
@@ -763,65 +763,80 @@ void menuItemButton::drawButton(menuItemButton *myItem, guiMenu *myMenu, int32 x
 		}
 		break;
 
-	/** ORION BURGER BUTTON TYPES **/
-	case BTN_TYPE_SL_SAVE:
+	case BTN_TYPE_SL_TEXT:
 		switch (myItem->itemFlags) {
-		case BTN_STATE_NORM:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_SAVE_BTN_NORM];
-			break;
 		case BTN_STATE_OVER:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_SAVE_BTN_OVER];
+			if (IS_RIDDLE)
+				gr_font_set_color(96);
+			else
+				font_set_colors(TEXT_COLOR_OVER_SHADOW, TEXT_COLOR_OVER_FOREGROUND, TEXT_COLOR_OVER_HILITE);
+
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LINE_OVER];
 			break;
+
 		case BTN_STATE_PRESS:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_SAVE_BTN_PRESS];
+			if (IS_RIDDLE)
+				gr_font_set_color(96);
+			else
+				font_set_colors(TEXT_COLOR_PRESS_SHADOW, TEXT_COLOR_PRESS_FOREGROUND, TEXT_COLOR_PRESS_HILITE);
+
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LINE_PRESS];
 			break;
-		default:
+
 		case BTN_STATE_GREY:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_SAVE_BTN_GREY];
+			if (IS_RIDDLE)
+				gr_font_set_color(202);
+			else
+				font_set_colors(TEXT_COLOR_GREY_SHADOW, TEXT_COLOR_GREY_FOREGROUND, TEXT_COLOR_GREY_HILITE);
+
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LINE_NORM];
+			break;
+
+		default:
+		case BTN_STATE_NORM:
+			if (IS_RIDDLE)
+				gr_font_set_color(96);
+			else
+				font_set_colors(TEXT_COLOR_NORM_SHADOW, TEXT_COLOR_NORM_FOREGROUND, TEXT_COLOR_NORM_HILITE);
+
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LINE_NORM];
 			break;
 		}
 		break;
 
-	case BTN_TYPE_SL_LOAD:
+	/** ORION BURGER BUTTON TYPES **/
+	case BTN_TYPE_SL_SAVE:
 		switch (myItem->itemFlags) {
 		case BTN_STATE_NORM:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LOAD_BTN_NORM];
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SAVE_BTN_NORM];
 			break;
 		case BTN_STATE_OVER:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LOAD_BTN_OVER];
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SAVE_BTN_OVER];
 			break;
 		case BTN_STATE_PRESS:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LOAD_BTN_PRESS];
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SAVE_BTN_PRESS];
 			break;
 		default:
 		case BTN_STATE_GREY:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LOAD_BTN_GREY];
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SAVE_BTN_GREY];
 			break;
 		}
 		break;
 
-	case BTN_TYPE_SL_TEXT:
+	case BTN_TYPE_SL_LOAD:
 		switch (myItem->itemFlags) {
+		case BTN_STATE_NORM:
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LOAD_BTN_NORM];
+			break;
 		case BTN_STATE_OVER:
-			font_set_colors(TEXT_COLOR_OVER_SHADOW, TEXT_COLOR_OVER_FOREGROUND, TEXT_COLOR_OVER_HILITE);
-			// Gr_font_set_color(TEXT_COLOR_OVER);
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_OVER];
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LOAD_BTN_OVER];
 			break;
 		case BTN_STATE_PRESS:
-			font_set_colors(TEXT_COLOR_PRESS_SHADOW, TEXT_COLOR_PRESS_FOREGROUND, TEXT_COLOR_PRESS_HILITE);
-			// Gr_font_set_color(TEXT_COLOR_PRESS);
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_PRESS];
-			break;
-		case BTN_STATE_GREY:
-			font_set_colors(TEXT_COLOR_GREY_SHADOW, TEXT_COLOR_GREY_FOREGROUND, TEXT_COLOR_GREY_HILITE);
-			// Gr_font_set_color(TEXT_COLOR_GREY);
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_NORM];
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LOAD_BTN_PRESS];
 			break;
 		default:
-		case BTN_STATE_NORM:
-			font_set_colors(TEXT_COLOR_NORM_SHADOW, TEXT_COLOR_NORM_FOREGROUND, TEXT_COLOR_NORM_HILITE);
-			// Gr_font_set_color(TEXT_COLOR_NORM);
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_NORM];
+		case BTN_STATE_GREY:
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LOAD_BTN_GREY];
 			break;
 		}
 		break;
@@ -829,17 +844,17 @@ void menuItemButton::drawButton(menuItemButton *myItem, guiMenu *myMenu, int32 x
 	case BTN_TYPE_SL_CANCEL:
 		switch (myItem->itemFlags) {
 		case BTN_STATE_NORM:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_CANCEL_BTN_NORM];
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_CANCEL_BTN_NORM];
 			break;
 		case BTN_STATE_OVER:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_CANCEL_BTN_OVER];
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_CANCEL_BTN_OVER];
 			break;
 		case BTN_STATE_PRESS:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_CANCEL_BTN_PRESS];
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_CANCEL_BTN_PRESS];
 			break;
 		default:
 		case BTN_STATE_GREY:
-			mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_CANCEL_BTN_NORM];
+			mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_CANCEL_BTN_NORM];
 			break;
 		}
 		break;
@@ -1258,10 +1273,10 @@ void menuItemMsg::drawMsg(menuItemMsg *myItem, guiMenu *myMenu, int32 x, int32 y
 	// Select the sprite
 	switch (myItem->tag) {
 	case SL_TAG_SAVE_LABEL:
-		mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_SAVE_LABEL];
+		mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SAVE_LABEL_11];
 		break;
 	case SL_TAG_LOAD_LABEL:
-		mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LOAD_LABEL];
+		mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LOAD_LABEL_12];
 		break;
 	case SL_TAG_THUMBNAIL:
 		mySprite = _GM(saveLoadThumbNail);
@@ -1618,21 +1633,21 @@ menuItemVSlider *menuItemVSlider::add(guiMenu *myMenu, int32 tag, int32 x, int32
 	newItem->itemFlags = menuItemVSlider::VS_NORM;
 
 	if (IS_RIDDLE) {
-		newItem->thumbW = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->w;
-		newItem->thumbH = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->h;
+		newItem->thumbW = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM_21]->w;
+		newItem->thumbH = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM_21]->h;
 
-		newItem->minThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM]->h;
-		newItem->maxThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM]->h +
-			_GM(menuSprites)[SaveLoadMenuBase::SL_SCROLL_BAR]->h
-			- _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->h - 1;
+		newItem->minThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM_13]->h;
+		newItem->maxThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM_13]->h +
+			_GM(menuSprites)[SaveLoadMenuBase::SL_SCROLL_BAR_24]->h
+			- _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM_21]->h - 1;
 	} else {
-		newItem->thumbW = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->w;
-		newItem->thumbH = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->h;
+		newItem->thumbW = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM_21]->w;
+		newItem->thumbH = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM_21]->h;
 
-		newItem->minThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM]->h + 1;
-		newItem->maxThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM]->h +
-			_GM(menuSprites)[SaveLoadMenuBase::SL_SCROLL_BAR]->h
-			- _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM]->h - 1;
+		newItem->minThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM_13]->h + 1;
+		newItem->maxThumbY = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM_13]->h +
+			_GM(menuSprites)[SaveLoadMenuBase::SL_SCROLL_BAR_24]->h
+			- _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM_21]->h - 1;
 	}
 
 	// Calculate the initial thumbY
@@ -1693,30 +1708,30 @@ void menuItemVSlider::drawVSlider(menuItemVSlider *myItem, guiMenu *myMenu, int3
 	}
 
 	// Set the different sprite components
-	vbarSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SCROLL_BAR];
-	upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM];
-	thumbSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM];
-	downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_NORM];
+	vbarSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SCROLL_BAR_24];
+	upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_NORM_13];
+	thumbSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_NORM_21];
+	downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_NORM_14];
 
 	if ((myItem->itemFlags & VS_STATUS) == VS_GREY) {
-		upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_GREY];
+		upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_GREY_19];
 		thumbSprite = nullptr;
-		downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_GREY];
+		downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_GREY_20];
 	} else if ((myItem->itemFlags & VS_STATUS) == VS_OVER) {
 		if ((myItem->itemFlags & VS_COMPONENT) == VS_UP) {
-			upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_OVER];
+			upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_OVER_15];
 		} else if ((myItem->itemFlags & VS_COMPONENT) == VS_THUMB) {
-			thumbSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_OVER];
+			thumbSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_OVER_22];
 		} else if ((myItem->itemFlags & VS_COMPONENT) == VS_DOWN) {
-			downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_OVER];
+			downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_OVER_16];
 		}
 	} else if ((myItem->itemFlags & VS_STATUS) == VS_PRESS) {
 		if ((myItem->itemFlags & VS_COMPONENT) == VS_UP) {
-			upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_PRESS];
+			upSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_UP_BTN_PRESS_17];
 		} else if ((myItem->itemFlags & VS_COMPONENT) == VS_THUMB) {
-			thumbSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_PRESS];
+			thumbSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SLIDER_BTN_PRESS_23];
 		} else if ((myItem->itemFlags & VS_COMPONENT) == VS_DOWN) {
-			downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_PRESS];
+			downSprite = _GM(menuSprites)[SaveLoadMenuBase::SL_DOWN_BTN_PRESS_18];
 		}
 	}
 
@@ -1993,16 +2008,16 @@ void menuItemTextField::drawTextField(menuItemTextField *myItem, guiMenu *myMenu
 	// Select the sprite
 	switch (myText->itemFlags) {
 	case TF_GREY:
-		mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_NORM];
+		mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LINE_NORM];
 		break;
 
 	case TF_OVER:
-		mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_OVER];
+		mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LINE_OVER];
 		break;
 
 	case TF_NORM:
 	default:
-		mySprite = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_LINE_OVER];
+		mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LINE_OVER];
 		break;
 	}
 
diff --git a/engines/m4/riddle/gui/game_menu.cpp b/engines/m4/riddle/gui/game_menu.cpp
index 17274cbfa14..84e88c825a3 100644
--- a/engines/m4/riddle/gui/game_menu.cpp
+++ b/engines/m4/riddle/gui/game_menu.cpp
@@ -362,7 +362,8 @@ void SaveLoadMenu::show(RGB8 *myPalette, bool saveMenu) {
 	_GM(thumbIndex) = 100;
 	_GM(currMenuIsSave) = saveMenu;
 
-	_GM(slMenu) = guiMenu::create(_GM(menuSprites)[GUI::SaveLoadMenuBase::SL_DIALOG_BOX], SAVE_LOAD_MENU_X, SAVE_LOAD_MENU_Y,
+	_GM(slMenu) = guiMenu::create(_GM(menuSprites)[GUI::SaveLoadMenuBase::SL_DIALOG_BOX],
+		SAVE_LOAD_MENU_X, SAVE_LOAD_MENU_Y,
 		MENU_DEPTH | SF_GET_ALL | SF_BLOCK_ALL | SF_IMMOVABLE);
 	if (!_GM(slMenu)) {
 		return;
@@ -373,17 +374,17 @@ void SaveLoadMenu::show(RGB8 *myPalette, bool saveMenu) {
 			SL_LABEL_W, SL_LABEL_H);
 		menuItemButton::add(_GM(slMenu), SL_TAG_SAVE, SL_SAVELOAD_X, SL_SAVELOAD_Y,
 			SL_SAVELOAD_W, SL_SAVELOAD_H, (CALLBACK)cbSave,
-			menuItemButton::BTN_TYPE_SL_SAVE, true);
+			menuItemButton::BTN_TYPE_GM_GENERIC, true);
 	} else {
 		menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_LOAD_LABEL, SL_LABEL_X, SL_LABEL_Y,
 			SL_LABEL_W, SL_LABEL_H);
 		menuItemButton::add(_GM(slMenu), SL_TAG_LOAD, SL_SAVELOAD_X, SL_SAVELOAD_Y,
 			SL_SAVELOAD_W, SL_SAVELOAD_H, (CALLBACK)cbSave,
-			menuItemButton::BTN_TYPE_SL_SAVE, true);
+			menuItemButton::BTN_TYPE_GM_GENERIC, true);
 	}
 
 	menuItemButton::add(_GM(slMenu), SL_TAG_CANCEL, SL_CANCEL_X, SL_CANCEL_Y, SL_CANCEL_W, SL_CANCEL_H,
-		(CALLBACK)cbCancel, menuItemButton::BTN_TYPE_SL_CANCEL);
+		(CALLBACK)cbCancel, menuItemButton::BTN_TYPE_GM_GENERIC);
 
 	menuItemVSlider::add(_GM(slMenu), SL_TAG_VSLIDER, SL_SLIDER_X, SL_SLIDER_Y, SL_SLIDER_W, SL_SLIDER_H,
 		0, (CALLBACK)cbVSlider);
@@ -416,7 +417,7 @@ void SaveLoadMenu::show(RGB8 *myPalette, bool saveMenu) {
 
 	} else {
 		updateThumbnails(0, _GM(slMenu));
-		_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
+		_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB_25];
 	}
 
 	menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_THUMBNAIL, SL_THUMBNAIL_X, SL_THUMBNAIL_Y,
@@ -508,7 +509,7 @@ bool SaveLoadMenu::load_Handler(M4::GUI::menuItemButton *myItem, int32 eventType
 
 				// Remove the thumbnail
 				if (_GM(saveLoadThumbNail)) {
-					_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
+					_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB_25];
 					guiMenu::itemRefresh(nullptr, SL_TAG_THUMBNAIL, (guiMenu *)myItem->myMenu);
 				}
 			}
@@ -626,7 +627,7 @@ void SaveLoadMenu::cbCancel(M4::GUI::menuItemButton *, M4::GUI::guiMenu *myMenu)
 
 			// Remove the thumbnail
 			if (_GM(saveLoadThumbNail)) {
-				_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB];
+				_GM(saveLoadThumbNail) = _GM(menuSprites)[GUI::SaveLoadMenuBase::SL_EMPTY_THUMB_25];
 				guiMenu::itemRefresh(nullptr, SL_TAG_THUMBNAIL, myMenu);
 			}
 		}


Commit: edb10775a08f3e5918d9b6dba83219f3b1ea0131
    https://github.com/scummvm/scummvm/commit/edb10775a08f3e5918d9b6dba83219f3b1ea0131
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2025-02-15T21:32:45-08:00

Commit Message:
M4: RIDDLE: Further work on save/load menu display

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


diff --git a/engines/m4/gui/game_menu.cpp b/engines/m4/gui/game_menu.cpp
index 5266c094176..8810b4ae26b 100644
--- a/engines/m4/gui/game_menu.cpp
+++ b/engines/m4/gui/game_menu.cpp
@@ -51,8 +51,8 @@ int16 SaveLoadMenuBase::SL_DOWN_BTN_GREY_20;
 int16 SaveLoadMenuBase::SL_DOWN_BTN_NORM_14;
 int16 SaveLoadMenuBase::SL_DOWN_BTN_OVER_16;
 int16 SaveLoadMenuBase::SL_DOWN_BTN_PRESS_18;
-int16 SaveLoadMenuBase::SL_SAVE_LABEL_11;
-int16 SaveLoadMenuBase::SL_LOAD_LABEL_12;
+int16 SaveLoadMenuBase::SL_SAVE_LABEL_7;
+int16 SaveLoadMenuBase::SL_LOAD_LABEL_9;
 int16 SaveLoadMenuBase::SL_SLIDER_BTN_NORM_21;
 int16 SaveLoadMenuBase::SL_SLIDER_BTN_OVER_22;
 int16 SaveLoadMenuBase::SL_SLIDER_BTN_PRESS_23;
@@ -73,8 +73,8 @@ void SaveLoadMenuBase::init() {
 		SL_LINE_OVER = 6;
 		SL_LINE_PRESS = 6;
 
-		SL_SAVE_LABEL_11 = 11;
-		SL_LOAD_LABEL_12 = 12;
+		SL_SAVE_LABEL_7 = 7;
+		SL_LOAD_LABEL_9 = 9;
 		SL_UP_BTN_NORM_13 = 13;
 		SL_DOWN_BTN_NORM_14 = 14;
 		SL_UP_BTN_OVER_15 = 15;
@@ -128,8 +128,8 @@ void SaveLoadMenuBase::init() {
 		SL_DOWN_BTN_NORM_14 = 18;
 		SL_DOWN_BTN_OVER_16 = 19;
 		SL_DOWN_BTN_PRESS_18 = 20;
-		SL_SAVE_LABEL_11 = 21;
-		SL_LOAD_LABEL_12 = 22;
+		SL_SAVE_LABEL_7 = 21;
+		SL_LOAD_LABEL_9 = 22;
 		SL_SLIDER_BTN_NORM_21 = 23;
 		SL_SLIDER_BTN_OVER_22 = 24;
 		SL_SLIDER_BTN_PRESS_23 = 25;
diff --git a/engines/m4/gui/game_menu.h b/engines/m4/gui/game_menu.h
index 3c42b152749..4389c36c5fb 100644
--- a/engines/m4/gui/game_menu.h
+++ b/engines/m4/gui/game_menu.h
@@ -57,8 +57,8 @@ public:
 	static int16 SL_DOWN_BTN_NORM_14;
 	static int16 SL_DOWN_BTN_OVER_16;
 	static int16 SL_DOWN_BTN_PRESS_18;
-	static int16 SL_SAVE_LABEL_11;
-	static int16 SL_LOAD_LABEL_12;
+	static int16 SL_SAVE_LABEL_7;
+	static int16 SL_LOAD_LABEL_9;
 	static int16 SL_SLIDER_BTN_NORM_21;
 	static int16 SL_SLIDER_BTN_OVER_22;
 	static int16 SL_SLIDER_BTN_PRESS_23;
@@ -68,6 +68,11 @@ public:
 	static int16 SL_SCROLL_BAR_24;
 	static int16 SL_TOTAL_SPRITES;
 
+	static constexpr int16 SL_SAVE_TITLE = 11;
+	static constexpr int16 SL_LOAD_TITLE = 12;
+	static constexpr int16 SL_SAVE_LABEL_GREY = 8;
+	static constexpr int16 SL_LOAD_LABEL_GREY = 10;
+
 protected:
 	static void initializeSlotTables();
 	static Sprite *menu_CreateThumbnail(int32 *spriteSize);
diff --git a/engines/m4/gui/gui_menu_items.cpp b/engines/m4/gui/gui_menu_items.cpp
index 03508a61b0b..a164b6fc1a1 100644
--- a/engines/m4/gui/gui_menu_items.cpp
+++ b/engines/m4/gui/gui_menu_items.cpp
@@ -1272,11 +1272,19 @@ void menuItemMsg::drawMsg(menuItemMsg *myItem, guiMenu *myMenu, int32 x, int32 y
 
 	// Select the sprite
 	switch (myItem->tag) {
+	case SL_TAG_SAVE_TITLE_LABEL:
+		mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SAVE_TITLE];
+		break;
+	case SL_TAG_LOAD_TITLE_LABEL:
+		mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LOAD_TITLE];
+		break;
 	case SL_TAG_SAVE_LABEL:
-		mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_SAVE_LABEL_11];
+		mySprite = _GM(menuSprites)[myItem->itemFlags ?
+			SaveLoadMenuBase::SL_SAVE_LABEL_GREY : SaveLoadMenuBase::SL_SAVE_LABEL_7];
 		break;
 	case SL_TAG_LOAD_LABEL:
-		mySprite = _GM(menuSprites)[SaveLoadMenuBase::SL_LOAD_LABEL_12];
+		mySprite = _GM(menuSprites)[myItem->itemFlags ?
+			SaveLoadMenuBase::SL_LOAD_LABEL_GREY : SaveLoadMenuBase::SL_LOAD_LABEL_9];
 		break;
 	case SL_TAG_THUMBNAIL:
 		mySprite = _GM(saveLoadThumbNail);
diff --git a/engines/m4/gui/gui_menu_items.h b/engines/m4/gui/gui_menu_items.h
index 5c8e5e24eef..48366e8d91d 100644
--- a/engines/m4/gui/gui_menu_items.h
+++ b/engines/m4/gui/gui_menu_items.h
@@ -93,6 +93,8 @@ enum save_load_menu_item_tags {
 	SL_TAG_LOAD,
 	SL_TAG_LOAD_LABEL,
 	SL_TAG_CANCEL,
+	SL_TAG_SAVE_TITLE_LABEL,
+	SL_TAG_LOAD_TITLE_LABEL,
 	SL_TAG_VSLIDER,
 	SL_TAG_THUMBNAIL
 };
diff --git a/engines/m4/riddle/gui/game_menu.cpp b/engines/m4/riddle/gui/game_menu.cpp
index 84e88c825a3..fe582d579ae 100644
--- a/engines/m4/riddle/gui/game_menu.cpp
+++ b/engines/m4/riddle/gui/game_menu.cpp
@@ -309,10 +309,10 @@ void OptionsMenu::cbSetMidi(M4::GUI::menuItemHSlider *myItem, M4::GUI::guiMenu *
 #define SAVE_LOAD_MENU_X 42
 #define SAVE_LOAD_MENU_Y 155
 
-#define SL_LABEL_X		111
-#define SL_LABEL_Y		2
-#define SL_LABEL_W		110
-#define SL_LABEL_H		17
+#define SL_TITLE_X		111
+#define SL_TITLE_Y		2
+#define SL_TITLE_W		110
+#define SL_TITLE_H		17
 
 #define SL_THUMBNAIL_X		333
 #define SL_THUMBNAIL_Y		5
@@ -322,6 +322,11 @@ void OptionsMenu::cbSetMidi(M4::GUI::menuItemHSlider *myItem, M4::GUI::guiMenu *
 #define SL_SAVELOAD_W	26
 #define SL_SAVELOAD_H	26
 
+#define SL_SAVELOAD_LABEL_X		8
+#define SL_SAVELOAD_LABEL_Y		103
+#define SL_SAVELOAD_LABEL_W		30
+#define SL_SAVELOAD_LABEL_H		14
+
 #define SL_CANCEL_X		10
 #define SL_CANCEL_Y		122
 #define SL_CANCEL_W		26
@@ -370,17 +375,27 @@ void SaveLoadMenu::show(RGB8 *myPalette, bool saveMenu) {
 	}
 
 	if (_GM(currMenuIsSave)) {
-		menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_SAVE_LABEL, SL_LABEL_X, SL_LABEL_Y,
-			SL_LABEL_W, SL_LABEL_H);
-		menuItemButton::add(_GM(slMenu), SL_TAG_SAVE, SL_SAVELOAD_X, SL_SAVELOAD_Y,
+		menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_SAVE_TITLE_LABEL,
+			SL_TITLE_X, SL_TITLE_Y, SL_TITLE_W, SL_TITLE_H);
+
+		menuItemButton::add(_GM(slMenu), SL_TAG_SAVE,
+			SL_SAVELOAD_X, SL_SAVELOAD_Y,
 			SL_SAVELOAD_W, SL_SAVELOAD_H, (CALLBACK)cbSave,
 			menuItemButton::BTN_TYPE_GM_GENERIC, true);
+		menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_SAVE_LABEL,
+			SL_SAVELOAD_LABEL_X, SL_SAVELOAD_LABEL_Y,
+			SL_SAVELOAD_LABEL_W, SL_SAVELOAD_LABEL_H);
 	} else {
-		menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_LOAD_LABEL, SL_LABEL_X, SL_LABEL_Y,
-			SL_LABEL_W, SL_LABEL_H);
-		menuItemButton::add(_GM(slMenu), SL_TAG_LOAD, SL_SAVELOAD_X, SL_SAVELOAD_Y,
+		menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_LOAD_TITLE_LABEL,
+			SL_TITLE_X, SL_TITLE_Y, SL_TITLE_W, SL_TITLE_H);
+
+		menuItemButton::add(_GM(slMenu), SL_TAG_LOAD,
+			SL_SAVELOAD_X, SL_SAVELOAD_Y,
 			SL_SAVELOAD_W, SL_SAVELOAD_H, (CALLBACK)cbSave,
 			menuItemButton::BTN_TYPE_GM_GENERIC, true);
+		menuItemMsg::msgAdd(_GM(slMenu), SL_TAG_LOAD_LABEL,
+			SL_SAVELOAD_LABEL_X, SL_SAVELOAD_LABEL_Y,
+			SL_SAVELOAD_LABEL_W, SL_SAVELOAD_LABEL_H);
 	}
 
 	menuItemButton::add(_GM(slMenu), SL_TAG_CANCEL, SL_CANCEL_X, SL_CANCEL_Y, SL_CANCEL_W, SL_CANCEL_H,




More information about the Scummvm-git-logs mailing list