[Scummvm-git-logs] scummvm master -> 0cc0f9e8da58e13edce7032bc4f09962d9fd796f

dreammaster noreply at scummvm.org
Sun Sep 1 19:56:09 UTC 2024


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:
59c623b6fc M4: RIDDLE: Added room 410
773da2cd37 M4: RIDDLE: Added room 413
0cc0f9e8da M4: RIDDLE: Added room 456


Commit: 59c623b6fc91dd58b90517cb0c3e0bb2115a41c8
    https://github.com/scummvm/scummvm/commit/59c623b6fc91dd58b90517cb0c3e0bb2115a41c8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-01T12:56:04-07:00

Commit Message:
M4: RIDDLE: Added room 410

Changed paths:
    engines/m4/platform/sound/digi.cpp
    engines/m4/platform/sound/digi.h
    engines/m4/riddle/rooms/section4/room410.cpp
    engines/m4/riddle/rooms/section4/room410.h


diff --git a/engines/m4/platform/sound/digi.cpp b/engines/m4/platform/sound/digi.cpp
index a3052a55cc8..62e387bbbdf 100644
--- a/engines/m4/platform/sound/digi.cpp
+++ b/engines/m4/platform/sound/digi.cpp
@@ -221,6 +221,10 @@ int32 Digi::ticks_to_play(const char *name, int roomNum) {
 	return (int32)floor(size * 0.000090702946 * 60.0);
 }
 
+void Digi::change_panning(int val1, int val2) {
+	warning("TODO: digi_change_panning");
+}
+
 } // namespace Sound
 
 bool digi_preload(const Common::String &name, int roomNum) {
@@ -267,4 +271,8 @@ int32 digi_ticks_to_play(const char *name, int roomNum) {
 	return _G(digi).ticks_to_play(name, roomNum);
 }
 
+void digi_change_panning(int val1, int val2) {
+	_G(digi).change_panning(val1, val2);
+}
+
 } // namespace M4
diff --git a/engines/m4/platform/sound/digi.h b/engines/m4/platform/sound/digi.h
index 32a3540d565..79366308f10 100644
--- a/engines/m4/platform/sound/digi.h
+++ b/engines/m4/platform/sound/digi.h
@@ -104,6 +104,7 @@ public:
 	void set_overall_volume(int vol);
 	int get_overall_volume();
 	int32 ticks_to_play(const char *name, int roomNum = -1);
+	void change_panning(int val1, int val2);
 };
 
 } // namespace Sound
@@ -121,6 +122,7 @@ void digi_change_volume(int channel, int vol);
 void digi_set_overall_volume(int vol);
 int digi_get_overall_volume();
 int32 digi_ticks_to_play(const char *name, int roomNum = -1);
+void digi_change_panning(int val1, int val2);
 
 } // namespace M4
 
diff --git a/engines/m4/riddle/rooms/section4/room410.cpp b/engines/m4/riddle/rooms/section4/room410.cpp
index dfb04fde6c6..5828dbb227f 100644
--- a/engines/m4/riddle/rooms/section4/room410.cpp
+++ b/engines/m4/riddle/rooms/section4/room410.cpp
@@ -27,10 +27,138 @@ namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+void Room410::preload() {
+	_G(player).walker_type = 0;
+	_G(player).shadow_type = 0;
+	_G(player).walker_in_this_scene = false;
+}
+
 void Room410::init() {
+	digi_preload("410r04");
+	digi_preload("410r05");
+	digi_preload("410r01");
+	digi_preload("410t01");
+	digi_preload("410r02");
+	digi_preload("410t02");
+	digi_preload("410r03");
+	digi_preload("410_s02");
+	_val1 = 140;
+
+	midi_play("danzig1", 0, 1, -1, 949);
+	interface_hide();
+	_pu = series_stream("410PU01", 8, 0x100, -1);
+	series_stream_break_on_frame(_pu, 2, 100);
+	digi_play("410_s02", 3, 140);
 }
 
 void Room410::daemon() {
+	switch (_G(kernel).trigger) {
+	case 20:
+		disable_player_commands_and_fade_init(25);
+		break;
+
+	case 25:
+	case 229:
+		interface_show();
+		_G(game).setRoom(402);
+		break;
+
+	case 100:
+		if (_G(player).been_here_before) {
+			series_stream_break_on_frame(_pu, 56, 300);
+			digi_play("410r05", 1, 255, 103);
+		} else {
+			series_stream_break_on_frame(_pu, 71, 104);
+			digi_play("410r04", 1, 255, 103);
+		}
+		break;
+
+	case 103:
+		midi_play("danzig1", 255, 1, -1, 949);
+		break;
+
+	case 104:
+		series_stream_break_on_frame(_pu, 102, 105);
+		series_stream_check_series(_pu, 5);
+		digi_play("410r01", 1);
+		break;
+
+	case 105:
+		series_stream_break_on_frame(_pu, 116, 110);
+		series_stream_check_series(_pu, 3000);
+		digi_play("410t01", 1, 255, 106);
+		break;
+
+	case 106:
+		series_stream_check_series(_pu, 7);
+		ws_OverrideCrunchTime(_pu);
+		break;
+
+	case 110:
+		series_stream_break_on_frame(_pu, 126, 112);
+		digi_play("410r02", 1);
+		break;
+
+	case 112:
+		series_stream_break_on_frame(_pu, 136, 120);
+		digi_play("410t02", 1);
+		break;
+
+	case 120:
+		terminateMachineAndNull(_pu);
+		_pu = series_stream("410PU02", 7, 0x100, -1);
+		series_stream_break_on_frame(_pu, 8, 125);
+		break;
+
+	case 125:
+		series_stream_break_on_frame(_pu, 19, 127);
+		digi_play("410r03", 1, 255, 225);
+		break;
+
+	case 127:
+		series_stream_check_series(_pu, 3000);
+		break;
+
+	case 225:
+		kernel_timing_trigger(40, 227);
+		break;
+
+	case 227:
+		disable_player_commands_and_fade_init(229);
+		break;
+
+	case 300:
+		series_stream_check_series(_pu, 3000);
+		kernel_timing_trigger(1, 305);
+		disable_player_commands_and_fade_init(-1);
+		break;
+
+	case 305:
+		_val1 -= 4;
+		if (_val1 >= 0) {
+			digi_change_panning(3, _val1);
+			kernel_timing_trigger(2, 305);
+		} else {
+			interface_show();
+			_G(game).setRoom(402);
+		}
+		break;
+
+	default:
+		break;
+	}
+}
+
+void Room410::parser() {
+	if (player_said("exit")) {
+		if (_G(kernel).trigger <= 0) {
+			player_set_commands_allowed(false);
+			disable_player_commands_and_fade_init(1);
+		} else if (_G(kernel).trigger == 1) {
+			digi_stop(3);
+			_G(game).setRoom(303);
+		}
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section4/room410.h b/engines/m4/riddle/rooms/section4/room410.h
index ca4644b843e..d0b418e409b 100644
--- a/engines/m4/riddle/rooms/section4/room410.h
+++ b/engines/m4/riddle/rooms/section4/room410.h
@@ -29,12 +29,18 @@ namespace Riddle {
 namespace Rooms {
 
 class Room410 : public Room {
+private:
+	int _val1 = 0;
+	machine *_pu = nullptr;
+
 public:
 	Room410() : Room() {}
 	~Room410() override {}
 
+	void preload() override;
 	void init() override;
 	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms


Commit: 773da2cd37f28913c461e61435cb92caa9e8e36d
    https://github.com/scummvm/scummvm/commit/773da2cd37f28913c461e61435cb92caa9e8e36d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-01T12:56:04-07:00

Commit Message:
M4: RIDDLE: Added room 413

Changed paths:
    engines/m4/riddle/rooms/section4/room413.cpp
    engines/m4/riddle/rooms/section4/room413.h


diff --git a/engines/m4/riddle/rooms/section4/room413.cpp b/engines/m4/riddle/rooms/section4/room413.cpp
index 92603829032..05df3d8fd1d 100644
--- a/engines/m4/riddle/rooms/section4/room413.cpp
+++ b/engines/m4/riddle/rooms/section4/room413.cpp
@@ -27,10 +27,54 @@ namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+void Room413::preload() {
+	_G(player).walker_in_this_scene = false;
+}
+
 void Room413::init() {
+	_buttonFlag = false;
+	interface_hide();
+	player_set_commands_allowed(false);
+	kernel_timing_trigger(1, 25);
+	_G(kernel).call_daemon_every_loop = true;
 }
 
 void Room413::daemon() {
+	switch (_G(kernel).trigger) {
+	case 25:
+		kernel_timing_trigger(30, 27);
+		break;
+
+	case 27:
+		digi_play(_G(game).previous_room == 301 ? "413r02" : "4013r01", 1, 255, 30);
+		break;
+
+	case 30:
+		kernel_timing_trigger(30, 50);
+		break;
+
+	case 50:
+		disable_player_commands_and_fade_init(75);
+		break;
+
+	case 75:
+		interface_show();
+		restoreAutosave();
+		break;
+
+	default:
+		break;
+	}
+
+	if (_G(MouseState).ButtonState) {
+		if (!_buttonFlag) {
+			_G(MouseState).Event = 0;
+			_G(kernel).call_daemon_every_loop = false;
+			kernel_timing_trigger(1, 50);
+		}
+
+		_buttonFlag = true;
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section4/room413.h b/engines/m4/riddle/rooms/section4/room413.h
index 4404f06be0f..21aa27fc2c3 100644
--- a/engines/m4/riddle/rooms/section4/room413.h
+++ b/engines/m4/riddle/rooms/section4/room413.h
@@ -29,10 +29,14 @@ namespace Riddle {
 namespace Rooms {
 
 class Room413 : public Room {
+private:
+	bool _buttonFlag = false;
+
 public:
 	Room413() : Room() {}
 	~Room413() override {}
 
+	void preload() override;
 	void init() override;
 	void daemon() override;
 };


Commit: 0cc0f9e8da58e13edce7032bc4f09962d9fd796f
    https://github.com/scummvm/scummvm/commit/0cc0f9e8da58e13edce7032bc4f09962d9fd796f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-01T12:56:04-07:00

Commit Message:
M4: RIDDLE: Added room 456

Changed paths:
    engines/m4/riddle/rooms/section4/room456.cpp
    engines/m4/riddle/rooms/section4/room456.h


diff --git a/engines/m4/riddle/rooms/section4/room456.cpp b/engines/m4/riddle/rooms/section4/room456.cpp
index 2eb0bed3cb7..7508e15be00 100644
--- a/engines/m4/riddle/rooms/section4/room456.cpp
+++ b/engines/m4/riddle/rooms/section4/room456.cpp
@@ -27,12 +27,299 @@ namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+void Room456::preload() {
+	LoadWSAssets("OTHER SCRIPT", _G(master_palette));
+	_G(player).walker_in_this_scene = false;
+}
+
 void Room456::init() {
+	_G(player).disable_hyperwalk = true;
+	_trigger = 577;
+	_G(player).walker_in_this_scene = false;
+
+	_seriesLighterChain = series_load("456 Lighter chain");
+	_seriesGrateOpens = series_load("45 GRATE OPENS");
+	_seriesCigarBoxTop = series_load("45 CIGAR BOX TOP");
+
+	_lighter = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0xe00, 0,
+		triggerMachineByHashCallback456, "Lighter");
+	_vent = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0xe00, 0,
+			triggerMachineByHashCallback456, "Vent");
+	_lid = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0xe00, 0,
+		triggerMachineByHashCallback456, "Cigar box lid");
+
+	if (_G(flags)[V335]) {
+		sendWSMessage_10000(1, _vent, _seriesGrateOpens, 15, 15, -1,
+			_seriesGrateOpens, 15, 15, 0);
+		hotspot_set_active("VENT", false);
+	} else {
+		sendWSMessage_10000(1, _vent, _seriesGrateOpens, 1, 1, -1,
+			_seriesGrateOpens, 1, 1, 0);
+		hotspot_set_active("VENT ", false);
+		hotspot_set_active("HOLE", false);
+		hotspot_set_active("HOLE ", false);
+	}
+
+	if (_G(flags)[V336]) {
+		sendWSMessage_10000(1, _lid, _seriesCigarBoxTop, 14, 14, -1,
+			_seriesCigarBoxTop, 14, 14, 0);
+		hotspot_set_active("LID", false);
+	} else {
+		sendWSMessage_10000(1, _lid, _seriesCigarBoxTop, 1, 1, -1,
+			_seriesCigarBoxTop, 1, 1, 0);
+		hotspot_set_active("LID ", false);
+		hotspot_set_active("CIGAR ", false);
+	}
+
+	sendWSMessage_10000(1, _lighter, _seriesLighterChain, 1, 1, -1,
+		_seriesLighterChain, 1, 1, 0);
+
+	if (_G(game).previous_room == KERNEL_RESTORING_GAME) {
+		player_set_commands_allowed(true);
+		digi_preload("456_s03a");
+		digi_preload("456_s03");
+		digi_preload("456_s01");
+
+		if (_G(flags)[V322]) {
+			digi_play("456_s03a", 3);
+			kernel_timing_trigger(_trigger, 700);
+		}
+	} else if (_G(flags)[V322]) {
+		digi_play("456_s03a", 3);
+		kernel_timing_trigger(_trigger, 700);
+	} else {
+		digi_preload("456_s03a");
+		digi_preload("456_s03");
+		digi_preload("456_s01");
+	}
 }
 
 void Room456::daemon() {
+	if (_G(kernel).trigger == 700 && _G(flags)[V322]) {
+		digi_play_loop("456_s03a", 3);
+	}
+}
+
+void Room456::pre_parser() {
+	_G(player).resetWalk();
 }
 
+void Room456::parser() {
+	bool lookFlag = player_said_any("look", "look at");
+	bool takeFlag = player_said("take");
+	bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
+
+	if (lookFlag && player_said_any("RED BUTTON", "BLACK BUTTON", "FAN SWITCH")) {
+		digi_play("456r09", 1);
+	} else if (lookFlag && player_said_any("RED BUTTON ", "BLACK BUTTON ")) {
+		digi_play("456r03", 1);
+	} else if (lookFlag && player_said("ASHTRAY")) {
+		digi_play("456r11", 1);
+	} else if (lookFlag && player_said("SWITCH")) {
+		digi_play("456r26", 1);
+	} else if (lookFlag && player_said("HOLE ")) {
+		digi_play("456r27", 1);
+	} else if (lookFlag && player_said("HOLE")) {
+		digi_play("456r28", 1);
+	} else if (lookFlag && player_said("ACE OF SPADES")) {
+		digi_play("456r26", 1);
+	} else if (lookFlag && player_said("LIGHTER")) {
+		digi_play("456r06", 1);
+	} else if (lookFlag && player_said("CIGAR ")) {
+		digi_play("com098", 1, 255, -1, 997);
+	} else if (lookFlag && player_said_any("VENT", "VENT ")) {
+		digi_play("456r10", 1);
+	} else if (lookFlag && player_said_any("CIGAR BOX", "LID", "LID ")) {
+		digi_play("456r04", 1);
+	} else if (lookFlag && player_said("PICTURE")) {
+		digi_play("456r16", 1);
+	} else if (lookFlag && player_said("CHAIN")) {
+		digi_play("456r07", 1);
+	} else if (lookFlag && player_said(" ")) {
+		digi_play("456r17", 1);
+	} else if (useFlag && player_said("LID")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			sendWSMessage_10000(1, _lid, _seriesCigarBoxTop, 1, 14, 2,
+				_seriesCigarBoxTop, 14, 14, 0);
+			hotspot_set_active("LID", false);
+			_G(flags)[V336] = 1;
+			hotspot_set_active("LID ", true);
+			digi_play("456_s05", 2);
+			break;
+		case 2:
+			player_set_commands_allowed(false);
+			break;
+		default:
+			break;
+		}
+	} else if (useFlag && player_said("LID ")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			sendWSMessage_10000(1, _lid, _seriesCigarBoxTop, 14, 1, 2,
+				_seriesCigarBoxTop, 1, 1, 0);
+			hotspot_set_active("LID", true);
+			_G(flags)[V336] = 0;
+			hotspot_set_active("LID ", false);
+			digi_play("456_s05", 2);
+			break;
+		case 2:
+			player_set_commands_allowed(false);
+			break;
+		default:
+			break;
+		}
+	} else if (useFlag && player_said("VENT")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			sendWSMessage_10000(1, _vent, _seriesGrateOpens, 1, 15, 2,
+				_seriesGrateOpens, 15, 15, 0);
+			hotspot_set_active("VENT", false);
+			_G(flags)[V335] = 1;
+			hotspot_set_active("VENT ", true);
+			hotspot_set_active("HOLE", true);
+			hotspot_set_active("HOLE ", true);
+
+			digi_play("950_s36", 2, 255, -1, 950);
+			break;
+		case 2:
+			player_set_commands_allowed(false);
+			break;
+		default:
+			break;
+		}
+	} else if (useFlag && player_said("VENT ")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			sendWSMessage_10000(1, _vent, _seriesGrateOpens, 15, 1, 2,
+				_seriesGrateOpens, 1, 1, 0);
+			hotspot_set_active("VENT", true);
+			_G(flags)[V335] = 0;
+			hotspot_set_active("VENT ", false);
+			hotspot_set_active("HOLE", false);
+			hotspot_set_active("HOLE ", false);
+
+			digi_play("950_s36", 2, 255, -1, 950);
+			break;
+		case 2:
+			player_set_commands_allowed(false);
+			break;
+		default:
+			break;
+		}
+	} else if (useFlag && player_said("RED BUTTON")) {
+		if (_G(flags)[V322]) {
+			digi_play("456_s01", 2);
+		} else {
+			_G(flags)[V322] = 1;
+			_G(kernel).trigger_mode = KT_DAEMON;
+			digi_play("456_s03", 3, 255, 700);
+			_G(kernel).trigger_mode = KT_PARSE;
+		}
+	} else if (useFlag && player_said("BLACK BUTTON")) {
+		if (_G(flags)[V322]) {
+			digi_stop(3);
+			digi_play("456_s04", 3);
+			_G(flags)[V322] = 0;
+		} else {
+			digi_play("456_s01", 3);
+		}
+	} else if (useFlag && player_said("CHAIN")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			sendWSMessage_10000(1, _lighter, _seriesLighterChain, 1, 4, 2,
+				_seriesLighterChain, 4, 4, 0);
+			digi_play("456_s02", 2);
+			break;
+		case 2:
+			sendWSMessage_10000(1, _lighter, _seriesLighterChain, 4, 1, 3,
+				_seriesLighterChain, 1, 1, 0);
+			break;
+		case 3:
+			digi_play("456r08", 1, 255, 4);
+			break;
+		case 4:
+			player_set_commands_allowed(true);
+			break;
+		default:
+			break;
+		}
+	} else if (takeFlag && player_said("CIGAR ")) {
+		if (_G(flags)[V315]) {
+			digi_play("456r05", 1);
+		} else {
+			switch (_G(kernel).trigger) {
+			case -1:
+				kernel_examine_inventory_object("PING CIGAR", _G(master_palette),
+					5, 1, 210, 210, 2, 0, -1);
+				break;
+			case 2:
+				inv_give_to_player("CIGAR");
+				_G(flags)[V315] = 1;
+				player_set_commands_allowed(true);
+				break;
+			}
+		}
+	} else if (takeFlag && player_said("ASHTRAY")) {
+		digi_play("456r12", 1);
+	} else if (takeFlag && player_said("LIGHTER")) {
+		digi_play("456r14", 1);
+	} else if (takeFlag && player_said("CIGAR BOX")) {
+		digi_play("r56r15", 1);
+	} else if (useFlag && player_said("RED BUTTON ")) {
+		digi_play("456_s01", 2);
+	} else if (useFlag && player_said("BLACK BUTTON ")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			digi_play("456_s01", 2);
+			player_set_commands_allowed(false);
+			disable_player_commands_and_fade_init(2);
+			break;
+		case 2:
+			_G(game).setRoom(406);
+
+			if (_G(flags)[V322]) {
+				adv_kill_digi_between_rooms(false);
+				digi_play_loop("456_s03a", 3);
+			}
+			break;
+		default:
+			break;
+		}
+	} else if (player_said("BILLIARD BALL", "HOLE")) {
+		digi_play("456r13", 1);
+	} else if (player_said("BILLIARD BALL", "HOLE ")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			_G(flags)[V321] = 1;
+			_G(flags)[V312] = 1;
+			inv_move_object("BILLIARD BALL", 456);
+			digi_play("456_s06", 1, 255, 1);
+			break;
+		case 1:
+			digi_play("456_s07", 1, 255, 2);
+			break;
+		default:
+			break;
+		}
+	} else {
+		return;
+	}
+
+	_G(player).command_ready = false;
+}
+
+void Room456::triggerMachineByHashCallback456(frac16 myMessage, machine *) {
+	kernel_trigger_dispatchx(myMessage);
+}
+
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/section4/room456.h b/engines/m4/riddle/rooms/section4/room456.h
index a2435abcdf1..db3bf6dd4bf 100644
--- a/engines/m4/riddle/rooms/section4/room456.h
+++ b/engines/m4/riddle/rooms/section4/room456.h
@@ -29,12 +29,26 @@ namespace Riddle {
 namespace Rooms {
 
 class Room456 : public Room {
+private:
+	machine *_lighter = nullptr;
+	machine *_lid = nullptr;
+	machine *_vent = nullptr;
+	int _seriesLighterChain = 0;
+	int _seriesGrateOpens = 0;
+	int _seriesCigarBoxTop = 0;
+	int _trigger = 0;
+
+	static void triggerMachineByHashCallback456(frac16 myMessage, machine *);
+
 public:
 	Room456() : Room() {}
 	~Room456() override {}
 
+	void preload() override;
 	void init() override;
 	void daemon() override;
+	void pre_parser() override;
+	void parser() override;
 };
 
 } // namespace Rooms




More information about the Scummvm-git-logs mailing list