[Scummvm-git-logs] scummvm master -> 4123a7ef712a68d991b51de24ce66f6263e814cf
dreammaster
noreply at scummvm.org
Tue Jun 23 07:06:08 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:
512b2c929c MADS: FOREST: Implementing game dialogs
b33af842da MADS: FOREST: Clicking on door icon opens game menu
4123a7ef71 MADS: FOREST: Fix ADPCM type for digital playback
Commit: 512b2c929cbbb7af22748a85cb123c69dd52ead8
https://github.com/scummvm/scummvm/commit/512b2c929cbbb7af22748a85cb123c69dd52ead8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-23T16:26:33+10:00
Commit Message:
MADS: FOREST: Implementing game dialogs
Changed paths:
engines/mads/detection_tables.h
engines/mads/madsv2/core/game.cpp
engines/mads/madsv2/forest/mads/quotes.h
engines/mads/madsv2/forest/menus.cpp
engines/mads/madsv2/forest/midi.cpp
engines/mads/madsv2/forest/midi.h
diff --git a/engines/mads/detection_tables.h b/engines/mads/detection_tables.h
index fb4e4d042eb..d81ce0cd201 100644
--- a/engines/mads/detection_tables.h
+++ b/engines/mads/detection_tables.h
@@ -262,7 +262,7 @@ static const MADSGameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_UNSTABLE,
- GUIO1(GAMEOPTION_EASY_MOUSE)
+ GUIO1(GAMEOPTION_ORIGINAL_SAVELOAD)
},
GType_Forest,
0
diff --git a/engines/mads/madsv2/core/game.cpp b/engines/mads/madsv2/core/game.cpp
index 610549274bb..97819ba08b4 100644
--- a/engines/mads/madsv2/core/game.cpp
+++ b/engines/mads/madsv2/core/game.cpp
@@ -1036,7 +1036,7 @@ int game_parse_keystroke(int mykey) {
break;
case f4_key:
- // kernel.activate_menu = GAME_SCORE_MENU;
+ kernel.activate_menu = GAME_OPTIONS_MENU;
break;
case f5_key:
diff --git a/engines/mads/madsv2/forest/mads/quotes.h b/engines/mads/madsv2/forest/mads/quotes.h
index 65cadc2ddbf..483cb3d2a0c 100644
--- a/engines/mads/madsv2/forest/mads/quotes.h
+++ b/engines/mads/madsv2/forest/mads/quotes.h
@@ -28,7 +28,33 @@ namespace MADS {
namespace MADSV2 {
namespace Forest {
-//enum {};
+enum {
+ quote_menu_done = 1,
+ quote_menu_cancel = 2,
+ quote_menu_save = 3,
+ quote_menu_restore = 4,
+ quote_menu_clear = 5,
+ quote_menu_ok = 8,
+ quote_menu_empty = 9,
+ quote_menu_unnamed = 10,
+ quote_main_save = 12,
+ quote_main_restore = 13,
+ quote_main_resume = 17,
+ quote_main_exit = 18,
+ quote_options_music = 20,
+ quote_options_fade = 23,
+ quote_options_music_on = 26,
+ quote_options_music_off = 27,
+ quote_options_fade_1 = 32,
+ quote_options_fade_2 = 33,
+ quote_options_fade_3 = 34,
+ quote_save_title = 47,
+ quote_restore_title = 48,
+ quote_alert_save_ok = 52,
+ quote_alert_restore_ok = 53,
+ quote_alert_save_fail = 54,
+ quote_alert_restore_fail = 55
+};
} // namespace Forest
} // namespace MADSV2
diff --git a/engines/mads/madsv2/forest/menus.cpp b/engines/mads/madsv2/forest/menus.cpp
index ee9fe1c8bb5..164fc80318d 100644
--- a/engines/mads/madsv2/forest/menus.cpp
+++ b/engines/mads/madsv2/forest/menus.cpp
@@ -27,31 +27,17 @@
#include "mads/madsv2/core/keys.h"
#include "mads/madsv2/core/matte.h"
#include "mads/madsv2/core/mem.h"
-#include "mads/madsv2/core/speech.h"
#include "mads/madsv2/core/quote.h"
#include "mads/madsv2/core/text.h"
-#include "mads/madsv2/forest/menus.h"
#include "mads/madsv2/forest/global.h"
+#include "mads/madsv2/forest/mads/quotes.h"
+#include "mads/madsv2/forest/menus.h"
+#include "mads/madsv2/forest/midi.h"
namespace MADS {
namespace MADSV2 {
namespace Forest {
-#define SAVE_MENU_PIXEL_WIDTH 200
-#define MAX_SAVES_ON_SCREEN 10
-
-#define SPACE_BETWEEN -1
-
-#define MAIN_MENU_ITEM_WIDTH 140
-#define MAIN_MENU_FORCE_WIDTH 160
-
-#define DIFFICULTY_MENU_FORCE_WIDTH 140
-
-#define OPTIONS_MENU_ITEM_WIDTH 160
-#define OPTIONS_MENU_FORCE_WIDTH 170
-#define OPTIONS_MENU_OFF_CENTER 10
-
-
#define SAVE_SUCCESSFUL 1
#define RESTORE_SUCCESSFUL 2
#define SAVE_FAILED 3
@@ -91,6 +77,9 @@ static int global_restore(int id) {
}
void global_menu_system_init() {
+ menu_quotes = quote_load(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 17, 18, 14, 16, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0);
}
void global_menu_system_shutdown() {
@@ -111,91 +100,64 @@ void global_emergency_save() {
}
static void global_alert(int status) {
-}
+ int quote_id;
+ switch (status) {
+ case SAVE_SUCCESSFUL: quote_id = quote_alert_save_ok; break;
+ case RESTORE_SUCCESSFUL: quote_id = quote_alert_restore_ok; break;
+ case SAVE_FAILED: quote_id = quote_alert_save_fail; break;
+ case RESTORE_FAILED: quote_id = quote_alert_restore_fail; break;
+ default: return;
+ }
+
+ popup_dialog_create(game_menu_popup, 0x1000, 20);
+ popup_message(menu_quote(quote_id), 0x8000, -1);
+
+ if (status == SAVE_SUCCESSFUL) {
+ mads_strlwr(save_game_buf);
+ popup_message(save_game_buf, 0x8000, -1);
+ }
-static void global_menu_score() {
+ popup_button(menu_quote(quote_menu_ok), 0x8000);
+ popup_execute();
+ popup_dialog_destroy();
}
static void global_menu_save_restore(int save) {
-#if 0
int status = -1;
- int selection;
- char *save_game_name;
PopupItem *save_list;
PopupItem *go_button;
- PopupItem *clear_button;
PopupItem *cancel_button;
PopupItem *result;
- popup_dialog_create(game_menu_popup, GAME_DIALOG_HEAP, 20);
+ popup_dialog_create(game_menu_popup, 0x1000, 20);
- if (save) {
- popup_message(menu_quote(quote_save_title), POPUP_CENTER, POPUP_FILL);
- } else {
- popup_message(menu_quote(quote_restore_title), POPUP_CENTER, POPUP_FILL);
- }
+ popup_message(menu_quote(save ? quote_save_title : quote_restore_title), 0x8000, -1);
popup_blank(4);
save_list = popup_savelist(game_save_directory, menu_quote(quote_menu_empty),
- GAME_MAX_SAVE_SLOTS,
- GAME_MAX_SAVE_LENGTH + 1,
- GAME_MAX_SAVE_LENGTH,
- SAVE_MENU_PIXEL_WIDTH,
- MAX_SAVES_ON_SCREEN,
- save, game.last_save);
+ 99, 64, 63, 200, 10, save, game.last_save);
if (save) {
- go_button = popup_button(menu_quote(quote_menu_save), POPUP_BUTTON_LEFT);
- clear_button = popup_button(menu_quote(quote_menu_clear), POPUP_CENTER);
- game_menu_popup->clear_item = clear_button;
+ go_button = popup_button(menu_quote(quote_menu_save), 0x400);
+ game_menu_popup->clear_item = popup_button(menu_quote(quote_menu_clear), 0x8000);
} else {
- go_button = popup_button(menu_quote(quote_menu_restore), POPUP_BUTTON_LEFT);
+ go_button = popup_button(menu_quote(quote_menu_restore), 0x400);
}
cancel_button = popup_cancel_button(menu_quote(quote_menu_cancel));
result = popup_execute();
if (result == cancel_button) {
- switch (game_menu_popup->key) {
- case alt_x_key:
- case ctrl_x_key:
- case alt_q_key:
- case ctrl_q_key:
+ int key = game_menu_popup->key;
+ if (key == 301 || key == 17 || key == 24 || key == 272) {
game.going = false;
kernel.activate_menu = GAME_NO_MENU;
- break;
-
- case f1_key:
- kernel.activate_menu = GAME_MAIN_MENU;
- break;
-
- case f2_key:
- if (save) {
- kernel.activate_menu = GAME_MAIN_MENU;
- } else {
- kernel.activate_menu = GAME_SAVE_MENU;
- }
- break;
-
- case f3_key:
- if (!save) {
- kernel.activate_menu = GAME_MAIN_MENU;
- } else {
- kernel.activate_menu = GAME_RESTORE_MENU;
- }
- break;
-
- case f4_key:
- kernel.activate_menu = GAME_SCORE_MENU;
- break;
-
- case f5_key:
- kernel.activate_menu = GAME_OPTIONS_MENU;
- break;
-
- default:
+ } else if (key == 316) {
+ kernel.activate_menu = (section_id != 9 && !save) ? GAME_SAVE_MENU : GAME_MAIN_MENU;
+ } else if (key == 317) {
+ kernel.activate_menu = save ? GAME_RESTORE_MENU : GAME_MAIN_MENU;
+ } else {
kernel.activate_menu = GAME_MAIN_MENU;
- break;
}
} else {
kernel.activate_menu = GAME_NO_MENU;
@@ -204,300 +166,112 @@ static void global_menu_save_restore(int save) {
popup_dialog_destroy();
if (result == go_button) {
- selection = save_list->list->picked_element;
+ int selection = save_list->list->picked_element;
game.last_save = selection;
+
if (save) {
- save_game_name = game_save_directory + ((GAME_MAX_SAVE_LENGTH + 1) * selection);
- if (!strlen(save_game_name)) {
- Common::strcpy_s(save_game_name, GAME_MAX_SAVE_LENGTH, menu_quote(quote_menu_unnamed));
- }
+ char *save_game_name = game_save_directory + selection * 64;
+ if (!strlen(save_game_name))
+ Common::strcpy_s(save_game_name, 64, menu_quote(quote_menu_unnamed));
status = global_save(selection, save_game_name);
-
} else {
status = global_restore(selection);
}
-
- if (status > 0)
- // Dummy name to signal save/load went ok
- Common::strcpy_s(save_game_buf, "OK");
}
- if (status >= 0) {
+ if (status >= 0)
global_alert(status);
- }
-#endif
}
static void global_menu_options() {
-#if 0
- int initial_1, initial_2, initial_3;
- int initial_4, initial_5, initial_6;
- int former_music;
- int former_sound;
PopupItem *music_item;
- PopupItem *sound_item;
- PopupItem *interface_item;
PopupItem *fade_item;
- PopupItem *panning_item;
- PopupItem *speech_item;
PopupItem *done_button;
PopupItem *cancel_button;
PopupItem *result;
global_unload_config_parameters();
+ box_param.menu_text_y_offset = 3;
+ box_param.menu_text_x_bonus = 0;
- popup_dialog_create(game_menu_popup, GAME_DIALOG_HEAP, 20);
+ popup_dialog_create(game_menu_popup, 0x1000, 20);
- popup_sprite(box_param.logo, 1, POPUP_CENTER, POPUP_FILL);
+ popup_blank(1);
popup_blank(2);
- former_music = config_file.music_flag;
- former_sound = config_file.sound_flag;
-
- initial_1 = config_file.music_flag ? 0 : 1;
- initial_2 = config_file.sound_flag ? 0 : 1;
- initial_6 = config_file.speech_flag ? 0 : 1;
- initial_3 = config_file.interface_hotspots;
- initial_4 = config_file.screen_fade;
- initial_5 = config_file.panning_speed;
-
- music_item = popup_menu(menu_quote(quote_options_item1),
- POPUP_CENTER, POPUP_FILL, OPTIONS_MENU_ITEM_WIDTH,
- OPTIONS_MENU_OFF_CENTER,
- 2, 40, initial_1);
- popup_menu_option(music_item, menu_quote(quote_options_item1a));
- popup_menu_option(music_item, menu_quote(quote_options_item1b));
-
- popup_blank(SPACE_BETWEEN);
-
-
- sound_item = popup_menu(menu_quote(quote_options_item2),
- POPUP_CENTER, POPUP_FILL, OPTIONS_MENU_ITEM_WIDTH,
- OPTIONS_MENU_OFF_CENTER,
- 2, 40, initial_2);
- popup_menu_option(sound_item, menu_quote(quote_options_item2a));
- popup_menu_option(sound_item, menu_quote(quote_options_item2b));
-
- popup_blank(SPACE_BETWEEN);
-
+ int initial_music = config_file.music_flag ? 0 : 1;
+ int former_screen_fade = config_file.screen_fade;
- speech_item = popup_menu(menu_quote(quote_options_item6),
- POPUP_CENTER, POPUP_FILL, OPTIONS_MENU_ITEM_WIDTH,
- OPTIONS_MENU_OFF_CENTER,
- 2, 40, initial_6);
- popup_menu_option(speech_item, menu_quote(quote_options_item6a));
- popup_menu_option(speech_item, menu_quote(quote_options_item6b));
+ music_item = popup_menu(menu_quote(quote_options_music), 0x8000, -1, 160, 10, 2, 40, initial_music);
+ popup_menu_option(music_item, menu_quote(quote_options_music_on));
+ popup_menu_option(music_item, menu_quote(quote_options_music_off));
- popup_blank(SPACE_BETWEEN);
+ popup_blank(1);
+ fade_item = popup_menu(menu_quote(quote_options_fade), 0x8000, -1, 160, 10, 3, 40, former_screen_fade);
+ popup_menu_option(fade_item, menu_quote(quote_options_fade_1));
+ popup_menu_option(fade_item, menu_quote(quote_options_fade_2));
+ popup_menu_option(fade_item, menu_quote(quote_options_fade_3));
- interface_item = popup_menu(menu_quote(quote_options_item3),
- POPUP_CENTER, POPUP_FILL, OPTIONS_MENU_ITEM_WIDTH,
- OPTIONS_MENU_OFF_CENTER,
- 2, 40, initial_3);
- popup_menu_option(interface_item, menu_quote(quote_options_item3a));
- popup_menu_option(interface_item, menu_quote(quote_options_item3b));
-
- popup_blank(SPACE_BETWEEN);
-
-
- fade_item = popup_menu(menu_quote(quote_options_item4),
- POPUP_CENTER, POPUP_FILL, OPTIONS_MENU_ITEM_WIDTH,
- OPTIONS_MENU_OFF_CENTER,
- 3, 40, initial_4);
- popup_menu_option(fade_item, menu_quote(quote_options_item4a));
- popup_menu_option(fade_item, menu_quote(quote_options_item4b));
- popup_menu_option(fade_item, menu_quote(quote_options_item4c));
-
- popup_blank(SPACE_BETWEEN);
-
-
- panning_item = popup_menu(menu_quote(quote_options_item5),
- POPUP_CENTER, POPUP_FILL, OPTIONS_MENU_ITEM_WIDTH,
- OPTIONS_MENU_OFF_CENTER,
- 3, 40, initial_5);
- popup_menu_option(panning_item, menu_quote(quote_options_item5a));
- popup_menu_option(panning_item, menu_quote(quote_options_item5b));
- popup_menu_option(panning_item, menu_quote(quote_options_item5c));
-
-
-
- done_button = popup_button(menu_quote(quote_menu_done), POPUP_LEFT);
+ done_button = popup_button(menu_quote(quote_menu_done), 5);
cancel_button = popup_cancel_button(menu_quote(quote_menu_cancel));
- popup_width_force(OPTIONS_MENU_FORCE_WIDTH);
+ popup_width_force(170);
result = popup_execute();
kernel.activate_menu = GAME_MAIN_MENU;
if (result == cancel_button) {
- switch (game_menu_popup->key) {
- case alt_x_key:
- case ctrl_x_key:
- case alt_q_key:
- case ctrl_q_key:
+ int key = game_menu_popup->key;
+ if (key == 17 || key == 24 || key == 272 || key == 301) {
game.going = false;
kernel.activate_menu = GAME_NO_MENU;
- break;
-
- case f1_key:
- kernel.activate_menu = GAME_MAIN_MENU;
- break;
-
- case f2_key:
+ } else if (key == 316) {
kernel.activate_menu = GAME_SAVE_MENU;
- break;
-
- case f3_key:
+ } else if (key == 317) {
kernel.activate_menu = GAME_RESTORE_MENU;
- break;
-
- case f4_key:
- kernel.activate_menu = GAME_SCORE_MENU;
- break;
-
- case f5_key:
- kernel.activate_menu = GAME_MAIN_MENU;
- break;
-
- default:
- kernel.activate_menu = GAME_MAIN_MENU;
- break;
+ } else if (key == 320) {
+ kernel.activate_menu = 8;
}
}
if (result == done_button) {
- config_file.music_flag = !music_item->list->picked_element;
- config_file.sound_flag = !sound_item->list->picked_element;
- config_file.speech_flag = !speech_item->list->picked_element;
- config_file.interface_hotspots = interface_item->list->picked_element;
- config_file.screen_fade = fade_item->list->picked_element;
- config_file.panning_speed = panning_item->list->picked_element;
-
- global_write_config_file();
+ config_file.music_flag = (music_item->list->picked_element == 0) ? 1 : 0;
+ config_file.screen_fade = fade_item->list->picked_element;
+ write_config_file();
global_load_config_parameters();
-
kernel.activate_menu = GAME_NO_MENU;
}
- if ((former_music != config_file.music_flag) ||
- (former_sound != config_file.sound_flag)) {
- game_exec_function(section_music_reset_pointer);
- }
-
- if (!config_file.speech_flag) {
- if (speech_system_active)
- speech_all_off();
- }
-
popup_dialog_destroy();
-#endif
-}
-
-static void global_menu_difficulty() {
-#if 0
- PopupItem *easy_item;
- PopupItem *result;
-
- popup_dialog_create(game_menu_popup, GAME_DIALOG_HEAP, 20);
-
- popup_message(menu_quote(quote_difficulty_title), POPUP_CENTER, POPUP_FILL);
- popup_blank(6);
-
- easy_item = popup_menu(menu_quote(quote_difficulty_item1),
- POPUP_CENTER, POPUP_FILL, MAIN_MENU_ITEM_WIDTH, 0,
- 0, 0, 0);
-
- popup_blank(SPACE_BETWEEN);
-
- (void)popup_menu(menu_quote(quote_difficulty_item2),
- POPUP_CENTER, POPUP_FILL, MAIN_MENU_ITEM_WIDTH, 0,
- 0, 0, 0);
-
-
- popup_width_force(DIFFICULTY_MENU_FORCE_WIDTH);
-
- game_menu_popup->cancel_item = NULL;
-
- result = popup_execute();
-
- kernel.activate_menu = GAME_NO_MENU;
-
- if (result == easy_item) {
- game.difficulty = EASY_MODE;
- } else {
- game.difficulty = HARD_MODE;
- }
-
- if (result == NULL) {
- game.going = false;
- }
-
- switch (game_menu_popup->key) {
- case alt_x_key:
- case ctrl_x_key:
- case alt_q_key:
- case ctrl_q_key:
- case esc_key:
- game.going = false;
- break;
- }
-
- popup_dialog_destroy();
-#endif
}
static void global_menu_main() {
-#if 0
PopupItem *save_item;
PopupItem *restore_item;
- PopupItem *score_item;
- PopupItem *options_item;
PopupItem *resume_item;
- PopupItem *quit_item;
+ PopupItem *exit_item;
PopupItem *result;
+ Buffer scr_live = { video_y, video_x, mcga_video };
- popup_dialog_create(game_menu_popup, GAME_DIALOG_HEAP, 20);
-
- popup_sprite(box_param.logo, 1, POPUP_CENTER, POPUP_FILL);
- popup_blank(6);
-
- save_item = popup_menu(menu_quote(quote_main_item1),
- POPUP_CENTER, POPUP_FILL, MAIN_MENU_ITEM_WIDTH, 0,
- 0, 0, 0);
-
- popup_blank(SPACE_BETWEEN);
-
- restore_item = popup_menu(menu_quote(quote_main_item2),
- POPUP_CENTER, POPUP_FILL, MAIN_MENU_ITEM_WIDTH, 0,
- 0, 0, 0);
-
- popup_blank(SPACE_BETWEEN);
-
- score_item = popup_menu(menu_quote(quote_main_item6),
- POPUP_CENTER, POPUP_FILL, MAIN_MENU_ITEM_WIDTH, 0,
- 0, 0, 0);
-
- popup_blank(SPACE_BETWEEN);
-
- options_item = popup_menu(menu_quote(quote_main_item3),
- POPUP_CENTER, POPUP_FILL, MAIN_MENU_ITEM_WIDTH, 0,
- 0, 0, 0);
-
- popup_blank(SPACE_BETWEEN);
+ box_param.menu_text_y_offset = 3;
+ box_param.menu_text_x_bonus = 0;
- resume_item = popup_menu(menu_quote(quote_main_item4),
- POPUP_CENTER, POPUP_FILL, MAIN_MENU_ITEM_WIDTH, 0,
- 0, 0, 0);
+ popup_dialog_create(game_menu_popup, 0x1000, 20);
- popup_blank(SPACE_BETWEEN);
+ popup_blank(1);
+ popup_blank(2);
- quit_item = popup_menu(menu_quote(quote_main_item5),
- POPUP_CENTER, POPUP_FILL, MAIN_MENU_ITEM_WIDTH, 0,
- 0, 0, 0);
+ save_item = popup_menu(menu_quote(quote_main_save), 0x8000, -1, 140, 0, 0, 0, 0);
+ popup_blank(1);
+ restore_item = popup_menu(menu_quote(quote_main_restore), 0x8000, -1, 140, 0, 0, 0, 0);
+ popup_blank(1);
+ resume_item = popup_menu(menu_quote(quote_main_resume), 0x8000, -1, 140, 0, 0, 0, 0);
+ popup_blank(1);
+ exit_item = popup_menu(menu_quote(quote_main_exit), 0x8000, -1, 140, 0, 0, 0, 0);
- popup_width_force(MAIN_MENU_FORCE_WIDTH);
+ popup_width_force(160);
game_menu_popup->cancel_item = resume_item;
result = popup_execute();
@@ -506,49 +280,37 @@ static void global_menu_main() {
kernel.activate_menu = GAME_SAVE_MENU;
} else if (result == restore_item) {
kernel.activate_menu = GAME_RESTORE_MENU;
- } else if (result == options_item) {
- kernel.activate_menu = GAME_OPTIONS_MENU;
- } else if (result == score_item) {
- kernel.activate_menu = GAME_SCORE_MENU;
} else {
kernel.activate_menu = GAME_NO_MENU;
}
- if (result == quit_item)
- game.going = false;
+ if (result == exit_item) {
+ g_engine->saveAutosaveIfEnabled();
+ new_room = 904;
+ }
- switch (game_menu_popup->key) {
- case alt_q_key:
- case alt_x_key:
- case ctrl_q_key:
+ int key = game_menu_popup->key;
+ if (key == 301 || key == 17 || key == 24 || key == 272) {
game.going = false;
kernel.activate_menu = GAME_NO_MENU;
- break;
-
- case f5_key:
- kernel.activate_menu = GAME_SAVE_MENU;
- break;
-
- case f7_key:
+ } else if (key == 27 || key == 315) {
+ if (section_id != 9)
+ kernel.activate_menu = GAME_NO_MENU;
+ } else if (key == 316) {
+ if (section_id != 9)
+ kernel.activate_menu = GAME_SAVE_MENU;
+ } else if (key == 317) {
kernel.activate_menu = GAME_RESTORE_MENU;
- break;
-
- case f8_key:
- kernel.activate_menu = GAME_SCORE_MENU;
- break;
-
- case f10_key:
- kernel.activate_menu = GAME_OPTIONS_MENU;
- break;
-
- default:
- break;
}
-#endif
+
+ popup_dialog_destroy();
+ sprite_draw(series_list[6], 2, &scr_inter, 1, 264);
+ buffer_rect_copy_2(scr_inter, scr_live, 168, 0, 168, 156, 152, 44);
}
void global_game_menu() {
bool loaded = false;
+ bool music = true;
if (box_param.series == NULL) {
Common::strcpy_s(box_param.name, "*BOX");
@@ -584,13 +346,8 @@ void global_game_menu() {
}
break;
case GAME_OPTIONS_MENU:
- global_menu_options();
- break;
- case GAME_DIFFICULTY_MENU:
- global_menu_difficulty();
- break;
- case GAME_SCORE_MENU:
- global_menu_score();
+ if (section_id != 9)
+ global_menu_options();
break;
default:
kernel.activate_menu = GAME_NO_MENU;
@@ -607,7 +364,12 @@ void global_game_menu() {
}
done:
- ;
+ if (!music) {
+ config_file.music_flag = true;
+ midi_stop();
+ config_file.music_flag = false;
+ midi_playing = false;
+ }
}
} // namespace Forest
diff --git a/engines/mads/madsv2/forest/midi.cpp b/engines/mads/madsv2/forest/midi.cpp
index 2691ca8d5c7..27a15184c8f 100644
--- a/engines/mads/madsv2/forest/midi.cpp
+++ b/engines/mads/madsv2/forest/midi.cpp
@@ -29,6 +29,8 @@ namespace MADS {
namespace MADSV2 {
namespace Forest {
+bool midi_playing;
+
void MidiPlayer::send(uint32 b) {
//_driver->send(b);
Audio::MidiPlayer::send(b);
@@ -65,10 +67,12 @@ void MidiPlayer::play(const char *name) {
void midi_play(const char *name) {
g_engine->_midiPlayer.play(name);
+ midi_playing = true;
}
void midi_stop() {
g_engine->_midiPlayer.stop();
+ midi_playing = false;
}
} // namespace Forest
diff --git a/engines/mads/madsv2/forest/midi.h b/engines/mads/madsv2/forest/midi.h
index 82a5e5d8b40..a85b3a07544 100644
--- a/engines/mads/madsv2/forest/midi.h
+++ b/engines/mads/madsv2/forest/midi.h
@@ -28,6 +28,8 @@ namespace MADS {
namespace MADSV2 {
namespace Forest {
+extern bool midi_playing;
+
class MidiPlayer : public Audio::MidiPlayer {
private:
// MidiDriver_BASE interface implementation
Commit: b33af842da58c1ac5893f05b8ffada0fca50b523
https://github.com/scummvm/scummvm/commit/b33af842da58c1ac5893f05b8ffada0fca50b523
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-23T16:46:49+10:00
Commit Message:
MADS: FOREST: Clicking on door icon opens game menu
Changed paths:
engines/mads/madsv2/forest/extra.cpp
engines/mads/madsv2/forest/extra.h
diff --git a/engines/mads/madsv2/forest/extra.cpp b/engines/mads/madsv2/forest/extra.cpp
index 25d8a625a6f..c8b475d1123 100644
--- a/engines/mads/madsv2/forest/extra.cpp
+++ b/engines/mads/madsv2/forest/extra.cpp
@@ -20,6 +20,7 @@
*/
#include "common/textconsole.h"
+#include "mads/madsv2/core/game.h"
#include "mads/madsv2/core/global.h"
#include "mads/madsv2/core/inter.h"
#include "mads/madsv2/core/kernel.h"
@@ -44,24 +45,19 @@ void display_interface() {
error("TODO: display_interface");
}
-void fly_on_screen(int flying_object) {
- error("TODO: fly_on_screen");
-}
-
-void fly_off_screen(int flying_object) {
- error("TODO: fly_off_screen");
-}
-
void display_inventory(void) {
error("TODO: display_inventory");
}
void solve_me_selected(void) {
- error("TODO: solve_me_selected");
+ global[walker_converse_state] = -1;
+ open_journal(3);
+ game_exec_function(room_parser_code_pointer);
}
void door_selected(void) {
- error("TODO: door_selected");
+ open_journal(4);
+ kernel.activate_menu = GAME_MAIN_MENU;
}
void extra_spinning_object(void) {
diff --git a/engines/mads/madsv2/forest/extra.h b/engines/mads/madsv2/forest/extra.h
index 2fa56c6d0ad..e36477d7a23 100644
--- a/engines/mads/madsv2/forest/extra.h
+++ b/engines/mads/madsv2/forest/extra.h
@@ -59,9 +59,6 @@ extern int int_sprite[6];
extern void init_extra();
-extern void fly_on_screen(int flying_object);
-extern void fly_off_screen(int flying_object);
-
extern void display_interface();
extern void display_inventory(void);
extern void solve_me_selected(void);
Commit: 4123a7ef712a68d991b51de24ce66f6263e814cf
https://github.com/scummvm/scummvm/commit/4123a7ef712a68d991b51de24ce66f6263e814cf
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-23T17:05:58+10:00
Commit Message:
MADS: FOREST: Fix ADPCM type for digital playback
Changed paths:
engines/mads/madsv2/forest/digi.cpp
diff --git a/engines/mads/madsv2/forest/digi.cpp b/engines/mads/madsv2/forest/digi.cpp
index 970d2e14ba5..caba27355f2 100644
--- a/engines/mads/madsv2/forest/digi.cpp
+++ b/engines/mads/madsv2/forest/digi.cpp
@@ -61,7 +61,7 @@ void DigiPlayer::play(const char *name, int slot) {
src->seek(0x20);
Audio::AudioStream *audioStream = Audio::makeADPCMStream(src, DisposeAfterUse::YES,
- src->size() - 0x20, Audio::kADPCMDVI, 11025, 1);
+ src->size() - 0x20, Audio::kADPCMApple, 11025, 1);
_mixer->playStream(Audio::Mixer::kSFXSoundType, &c._soundHandle, audioStream);
c._isPlaying = true;
}
More information about the Scummvm-git-logs
mailing list