[Scummvm-git-logs] scummvm master -> 597760ea5c7d1640cddf10f224525d0512fba955

dreammaster noreply at scummvm.org
Tue Jul 30 03:26:07 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:
0bc656e302 M4: RIDDLE: Added room 303 conv303b method
19ef1526b9 M4: RIDDLE: Added room 303 conv303a
597760ea5c M4: RIDDLE: In progress room 303 parser


Commit: 0bc656e3022b1f03d5dfa0b1a3fb6ccedf31644b
    https://github.com/scummvm/scummvm/commit/0bc656e3022b1f03d5dfa0b1a3fb6ccedf31644b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-29T20:25:55-07:00

Commit Message:
M4: RIDDLE: Added room 303 conv303b method

Changed paths:
    engines/m4/graphics/gr_series.cpp
    engines/m4/graphics/gr_series.h
    engines/m4/riddle/rooms/section3/room303.cpp
    engines/m4/riddle/rooms/section3/room303.h


diff --git a/engines/m4/graphics/gr_series.cpp b/engines/m4/graphics/gr_series.cpp
index 23b7a655753..56088990de9 100644
--- a/engines/m4/graphics/gr_series.cpp
+++ b/engines/m4/graphics/gr_series.cpp
@@ -321,5 +321,9 @@ machine *series_plain_play(const char *seriesName, int32 loopCount, uint32 flags
 	return series_play(seriesName, layer, flags, trigger, frameRate, loopCount, s);
 }
 
+void series_stream_check_series(machine *m, int val) {
+	// TODO: series_stream_check_series
+	error("TODO: series_stream_check_series");
+}
 
 } // namespace M4
diff --git a/engines/m4/graphics/gr_series.h b/engines/m4/graphics/gr_series.h
index 48ed2653e5c..9c69839057e 100644
--- a/engines/m4/graphics/gr_series.h
+++ b/engines/m4/graphics/gr_series.h
@@ -115,6 +115,7 @@ machine *series_plain_play(const char *seriesName, int32 loopCount, uint32 flags
 machine *series_stream(const char *seriesName, int32 frameRate, int32 layer, int32 trigger);
 bool series_stream_break_on_frame(machine *m, int32 frameNum, int32 trigger);
 void series_set_frame_rate(machine *m, int32 newFrameRate);
+void series_stream_check_series(machine *m, int val);
 
 } // namespace M4
 
diff --git a/engines/m4/riddle/rooms/section3/room303.cpp b/engines/m4/riddle/rooms/section3/room303.cpp
index 5bd61402499..4dbe2c14360 100644
--- a/engines/m4/riddle/rooms/section3/room303.cpp
+++ b/engines/m4/riddle/rooms/section3/room303.cpp
@@ -81,7 +81,7 @@ void Room303::init() {
 		"candleman shadow5"
 	};
 
-	_val1 = _val2 = 0;
+	_val1 = _lonelyFlag = 0;
 
 	if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
 		_val3 = 0;
@@ -319,6 +319,28 @@ void Room303::init() {
 void Room303::daemon() {
 }
 
+void Room303::pre_parser() {
+	if (player_said("open") && player_been_here(301)) {
+		_G(player).need_to_walk = false;
+		_G(player).ready_to_walk = true;
+		_G(player).waiting_for_walk = false;
+	}
+}
+
+void Room303::parser() {
+	bool lookFlag = player_said_any("look", "look at");
+
+	if (player_said("conv303b")) {
+		conv303b();
+
+	// TODO
+	} else {
+		return;
+	}
+
+	_G(player).command_ready = false;
+}
+
 void Room303::loadHands() {
 	_hands1 = series_load("MC NY hands behind back pos4");
 	_hands2 = series_load("MC NY hand on hip pos4");
@@ -379,6 +401,134 @@ void Room303::playSeries(bool cow) {
 	series_plain_play("CREATURE FEATURE LONG VIEW", 1, 0, 100, 0xf05, 7, 70);
 }
 
+void Room303::conv303b() {
+	int who = conv_whos_talking();
+	int node = conv_current_node();
+	int entry = conv_current_entry();
+	const char *sound = conv_sound_to_play();
+
+	switch (_G(kernel).trigger) {
+	case 1:
+		if (who <= 0) {
+			_val11 = 4;
+
+			if (node == 1 && entry == 0) {
+				digi_unload("08_01n01");
+				digi_unload("08_02n01");
+			} else if (node == 2 && entry == 2) {
+				_val16 = 0;
+			} else if (node == 1 && entry == 2) {
+				digi_preload("com119");
+				_ripPonders = series_stream("303 rip reacts", 4, 0, 667);
+				series_stream_break_on_frame(_ripPonders, 5, 7);
+				return;
+			}
+
+		} else if (who == 1) {
+			if ((node == 0 && entry == 0) || (node == 0 && entry == 1)) {
+				if (!_lonelyFlag) {
+					midi_play("lonelyme", 140, 1, -1, 949);
+					_lonelyFlag = true;
+				}
+			}
+
+			if (node == 0 && entry == 0) {
+				series_unload(2);
+				series_unload(3);
+				series_unload(4);
+				_ripPonders = series_stream("303pu01", 4, 0x100, 666);
+				series_stream_break_on_frame(_ripPonders, 5, 700);
+			} else if (node == 1 && entry == 2) {
+				// No implementation
+			} else if ((node == 2 && entry == 0) || (node == 2 && entry == 2)) {
+				_val16 = 3;
+			} else {
+				_val16 = 0;
+			}
+		}
+		break;
+
+	case 2:
+		series_stream_check_series(_ripPonders, 20);
+		series_stream_break_on_frame(_ripPonders, 27, 3);
+		return;
+
+	case 3:
+		series_stream_check_series(_ripPonders, 5);
+		return;
+
+	case 4:
+		_val11 = 5;
+		return;
+
+	case 5:
+		digi_play("com119", 1, 255, 6);
+		return;
+
+	case 6:
+		digi_unload("com119");
+		return;
+
+	case 7:
+		_val16 = 0;
+		series_stream_break_on_frame(_ripPonders, 22, 5);
+		return;
+
+	case 666:
+		kernel_timing_trigger(1, 668);
+		break;
+
+	case 667:
+		kernel_timing_trigger(1, 670);
+		break;
+
+	case 668:
+		conv_resume();
+		digi_preload("08_01n01");
+		digi_preload("08_02n01");
+		_ripPonders = series_stream("303 rip ponders", 5, 0, -1);
+		series_stream_break_on_frame(_ripPonders, 5, 2);
+		return;
+
+	case 670:
+		series_load("test1");
+		series_load("test3");
+		series_load("test4");
+		series_load("test5");
+		break;
+
+	case 700:
+		_val16 = 0;
+		break;
+
+	default:
+		if (sound) {
+			if (who <= 0) {
+				if (node != 2 || entry != 1)
+					_val11 = 5;
+			} else if (who == 1) {
+				if (node == 1 && entry == 2) {
+					_val16 = 2;
+				} else if (node == 2 && entry == 1) {
+					_val11 = 6;
+					kernel_timing_trigger(150, 4);
+				} else if ((node == 2 && entry == 0) ||
+						(node == 2 && entry == 2)) {
+					_val16 = 4;
+				} else {
+					_val16 = 1;
+				}
+			}
+
+			digi_play(sound, 1, 255, 1);
+			return;
+		}
+		break;
+	}
+
+	conv_resume();
+}
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/section3/room303.h b/engines/m4/riddle/rooms/section3/room303.h
index e882e970da8..83bc489a66a 100644
--- a/engines/m4/riddle/rooms/section3/room303.h
+++ b/engines/m4/riddle/rooms/section3/room303.h
@@ -31,7 +31,7 @@ namespace Rooms {
 class Room303 : public Room {
 private:
 	int _val1 = 0;
-	int _val2 = 0;
+	bool _lonelyFlag = 0;
 	int _val3 = 0;
 	int _val4 = 0;
 	int _val5 = 0;
@@ -45,6 +45,7 @@ private:
 	bool _val13 = false;
 	int _val14 = 0;
 	int _val15 = 0;
+	int _val16 = 0;
 	KernelTriggerType _triggerMode1 = KT_DAEMON;
 	KernelTriggerType _triggerMode2 = KT_DAEMON;
 	machine *_door = nullptr;
@@ -60,6 +61,7 @@ private:
 	machine *_shadow5 = nullptr;
 	machine *_machine1 = nullptr;
 	machine *_machine2 = nullptr;
+	machine *_ripPonders = nullptr;
 	int _gestTalk4 = 0;
 	int _ripBends = 0;
 
@@ -71,6 +73,7 @@ private:
 	void setShadow4(bool active);
 	void setShadow5(bool active);
 	void playSeries(bool cow = true);
+	void conv303b();
 
 public:
 	Room303() : Room() {}
@@ -79,6 +82,8 @@ public:
 	void preload() override;
 	void init() override;
 	void daemon() override;
+	void pre_parser() override;
+	void parser() override;
 };
 
 } // namespace Rooms


Commit: 19ef1526b960764eb382e713117832c0d48cdfa8
    https://github.com/scummvm/scummvm/commit/19ef1526b960764eb382e713117832c0d48cdfa8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-29T20:25:55-07:00

Commit Message:
M4: RIDDLE: Added room 303 conv303a

Changed paths:
    engines/m4/riddle/rooms/room.cpp
    engines/m4/riddle/rooms/room.h
    engines/m4/riddle/rooms/section3/room303.cpp
    engines/m4/riddle/rooms/section3/room303.h


diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index da2b53c57ca..8b16582c9d6 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -183,6 +183,13 @@ void Room::setGlobals1(int val1, int val2, int val3, int val4, int val5,
 	_G(globals)[V028] = val21 << 16;
 }
 
+void Room::setGlobals4(int val1, int val2, int val3, int val4) {
+	_G(globals)[GLB_TEMP_1] = val1;
+	_G(globals)[GLB_TEMP_2] = val2;
+	_G(globals)[GLB_TEMP_3] = val3;
+	_G(globals)[GLB_TEMP_4] = val4;
+}
+
 void Room::sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
 		int val4, int trigger, int val9, int val6, int val7, int val8) {
 	if (!trigger)
@@ -201,6 +208,21 @@ void Room::sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
 	sendWSMessage(0x10000, 0, nullptr, 0, nullptr, 1);
 }
 
+void Room::sendWSMessage_10000(machine *recv, int val1, int val2, int val3,
+		int trigger, int val4) {
+	int val = ((val2 << 16) - _G(globals)[V002]) *_G(globals)[V006] +
+		_G(globals)[V004];
+
+	_G(globals)[GLB_TEMP_1] = val1 << 16;
+	_G(globals)[GLB_TEMP_2] = val2 << 16;
+	_G(globals)[GLB_TEMP_3] = val;
+	_G(globals)[GLB_TEMP_4] = (val3 > 0) ? val3 : 0xffff0000;
+	_G(globals)[GLB_TEMP_5] = kernel_trigger_create(trigger);
+	_G(globals)[GLB_TEMP_6] = val4 << 16;
+
+	sendWSMessage(0x10000, 0, recv, 0, nullptr, 1);
+}
+
 machine *Room::triggerMachineByHash_3000(int val1, int val2, const int16 * normalDirs,
 		const int16 * shadowDirs, int val3, int val4, int val5,
 		MessageCB intrMsg, const char *machName) {
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 66c20af3c93..8718c14f606 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -58,9 +58,13 @@ protected:
 		int val11 = 0, int val12 = 0, int val13 = 0, int val14 = 0, int val15 = 0,
 		int val16 = 0, int val17 = 0, int val18 = 0, int val19 = 0, int val20 = 0,
 		int val21 = 0);
+	void setGlobals4(int val1, int val2, int val3, int val4);
 
 	void sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
 		int val4, int trigger, int val9, int val6, int val7, int val8);
+	void sendWSMessage_10000(machine *recv, int val1, int val2, int val3,
+		int trigger, int val4);
+
 	machine *triggerMachineByHash_3000(int val1, int val2, const int16 *normalDirs,
 		const int16 *shadowDirs, int val3, int val4, int val5,
 		MessageCB intrMsg, const char *machName);
diff --git a/engines/m4/riddle/rooms/section3/room303.cpp b/engines/m4/riddle/rooms/section3/room303.cpp
index 4dbe2c14360..0c96c27313d 100644
--- a/engines/m4/riddle/rooms/section3/room303.cpp
+++ b/engines/m4/riddle/rooms/section3/room303.cpp
@@ -332,7 +332,22 @@ void Room303::parser() {
 
 	if (player_said("conv303b")) {
 		conv303b();
-
+	} else if (player_said("conv303a")) {
+		conv303a();
+	} else if (lookFlag && _G(flags)[V000] == 0 && _val13 &&
+			player_said_any("cow", "giant matchstick")) {
+		switch (_G(kernel).trigger) {
+		case 1:
+			setShadow5(false);
+			if (player_said("giant matchstick"))
+				ws_demand_location(610, 256);
+
+			sendWSMessage_10000(_machine1, 706, 256, 5, 2, 1);
+			break;
+
+		default:
+			break;
+		}
 	// TODO
 	} else {
 		return;
@@ -390,6 +405,14 @@ void Room303::setShadow5(bool active) {
 	}
 }
 
+void Room303::setShadow5Alt(bool active) {
+	if (active) {
+		_shadow5 = series_place_sprite("candleman shadow5", 0, 706, 256, 84, 0xe06);
+	} else {
+		terminateMachineAndNull(_shadow5);
+	}
+}
+
 void Room303::escapePressed(void *, void *) {
 	_G(kernel).trigger_mode = KT_DAEMON;
 	disable_player_commands_and_fade_init(56);
@@ -401,6 +424,62 @@ void Room303::playSeries(bool cow) {
 	series_plain_play("CREATURE FEATURE LONG VIEW", 1, 0, 100, 0xf05, 7, 70);
 }
 
+void Room303::conv303a() {
+	int who = conv_whos_talking();
+	int node = conv_current_node();
+	int entry = conv_current_entry();
+	const char *sound = conv_sound_to_play();
+
+	if (_G(kernel).trigger == 1) {
+		if (who <= 0) {
+			_val15 = node != 3 || entry ? 1 : 0;
+
+		} else if (who == 1) {
+			if ((node == 0 && entry != 0) || (node == 0 && entry == 1)) {
+				if (!_lonelyFlag) {
+					midi_play("ppstreet", 140, 1, -1, 949);
+				}
+			}
+
+			if (node != 1 || entry != 1) {
+				if (node != 3 || entry != 1)
+					_val16 = 0;
+			} else {
+				_val16 = 3;
+			}
+		}
+
+		conv_resume();
+
+	} else if (!conv_sound_to_play()) {
+		conv_resume();
+
+	} else {
+		if (who <= 0) {
+			if (node == 3 && !entry)
+				_val16 = 2;
+			if ((node != 3 || entry != 1) && (node != 3 || entry))
+				_val15 = 2;
+			else
+				_val15 = 3;
+
+		} else if (who == 1) {
+			if (node != 1 || entry != 1) {
+				if (node != 5 || entry) {
+					if (node != 3 || entry != 1)
+						_val16 = 1;
+				} else {
+					_val16 = 0;
+				}
+			} else {
+				_val16 = 4;
+			}
+		}
+
+		digi_play(sound, 1, 255, 1);
+	}
+}
+
 void Room303::conv303b() {
 	int who = conv_whos_talking();
 	int node = conv_current_node();
diff --git a/engines/m4/riddle/rooms/section3/room303.h b/engines/m4/riddle/rooms/section3/room303.h
index 83bc489a66a..bad58a0c80b 100644
--- a/engines/m4/riddle/rooms/section3/room303.h
+++ b/engines/m4/riddle/rooms/section3/room303.h
@@ -72,7 +72,9 @@ private:
 	void setFengActive(bool flag);
 	void setShadow4(bool active);
 	void setShadow5(bool active);
+	void setShadow5Alt(bool active);
 	void playSeries(bool cow = true);
+	void conv303a();
 	void conv303b();
 
 public:


Commit: 597760ea5c7d1640cddf10f224525d0512fba955
    https://github.com/scummvm/scummvm/commit/597760ea5c7d1640cddf10f224525d0512fba955
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-29T20:25:55-07:00

Commit Message:
M4: RIDDLE: In progress room 303 parser

Changed paths:
    engines/m4/riddle/rooms/room.cpp
    engines/m4/riddle/rooms/room.h
    engines/m4/riddle/rooms/section3/room303.cpp
    engines/m4/riddle/rooms/section3/room303.h


diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 8b16582c9d6..cbfb8d3e4a2 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -239,10 +239,22 @@ machine *Room::triggerMachineByHash_3000(int val1, int val2, const int16 * norma
 #endif
 }
 
+void Room::sendWSMessage_60000(machine *walker) {
+	sendWSMessage(0x60000, 0, walker, 0, nullptr, 1);
+}
+
 void Room::sendWSMessage_80000(machine *walker) {
 	sendWSMessage(0x80000, 0, walker, 0, nullptr, 1);
 }
 
+void Room::sendWSMessage_B0000(machine *walker, int trigger) {
+
+}
+
+void Room::sendWSMessage_B0000(int trigger) {
+	sendWSMessage_B0000(_G(my_walker), trigger);
+}
+
 void Room::sendWSMessage_C0000(machine *walker, int trigger) {
 	if (!trigger)
 		trigger = -1;
@@ -255,6 +267,22 @@ void Room::sendWSMessage_C0000(int trigger) {
 	sendWSMessage_C0000(_G(my_walker), trigger);
 }
 
+void Room::sendWSMessage_D0000(machine *walker) {
+	sendWSMessage(0xd0000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_D0000() {
+	sendWSMessage_D0000(_G(my_walker));
+}
+
+void Room::sendWSMessage_E0000(machine *walker) {
+	sendWSMessage(0xe0000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_E0000() {
+	sendWSMessage_E0000(_G(my_walker));
+}
+
 void Room::sendWSMessage_110000(machine *walker, int trigger) {
 	if (!trigger)
 		trigger = -1;
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 8718c14f606..0aaa622af05 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -68,9 +68,16 @@ protected:
 	machine *triggerMachineByHash_3000(int val1, int val2, const int16 *normalDirs,
 		const int16 *shadowDirs, int val3, int val4, int val5,
 		MessageCB intrMsg, const char *machName);
+	void sendWSMessage_60000(machine *walker);
 	void sendWSMessage_80000(machine *walker);
+	void sendWSMessage_B0000(machine *walker, int trigger);
+	void sendWSMessage_B0000(int trigger);
 	void sendWSMessage_C0000(machine *walker, int trigger);
 	void sendWSMessage_C0000(int trigger);
+	void sendWSMessage_D0000(machine *walker);
+	void sendWSMessage_D0000();
+	void sendWSMessage_E0000(machine *walker);
+	void sendWSMessage_E0000();
 	void sendWSMessage_110000(machine *walker, int trigger);
 	void sendWSMessage_110000(int trigger);
 	void sendWSMessage_140000(machine *walker, int trigger);
diff --git a/engines/m4/riddle/rooms/section3/room303.cpp b/engines/m4/riddle/rooms/section3/room303.cpp
index 0c96c27313d..ff74f45aac7 100644
--- a/engines/m4/riddle/rooms/section3/room303.cpp
+++ b/engines/m4/riddle/rooms/section3/room303.cpp
@@ -337,6 +337,11 @@ void Room303::parser() {
 	} else if (lookFlag && _G(flags)[V000] == 0 && _val13 &&
 			player_said_any("cow", "giant matchstick")) {
 		switch (_G(kernel).trigger) {
+		case -1:
+			_val15 = 5;
+			player_set_commands_allowed(false);
+			break;
+
 		case 1:
 			setShadow5(false);
 			if (player_said("giant matchstick"))
@@ -345,10 +350,296 @@ void Room303::parser() {
 			sendWSMessage_10000(_machine1, 706, 256, 5, 2, 1);
 			break;
 
+		case 2:
+			setShadow5Alt(true);
+			_machine1 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 706, 256, 86, 0xc00, 0,
+				triggerMachineByHashCallbackNegative, "fl state machine");
+
+			_G(kernel).trigger_mode = KT_DAEMON;
+			sendWSMessage_10000(1, _machine1, _clasped1, 1, 16, 400,
+				_clasped4, 1, 6, 0);
+			_val14 = _val15 = 1;
+			setFengActive(false);
+			_val13 = 0;
+
+			kernel_load_variant("303lock2");
+			_G(kernel).trigger_mode = KT_PARSE;
+			kernel_timing_trigger(1, 666);
+			break;
+
 		default:
 			break;
 		}
-	// TODO
+	} else if (lookFlag && player_said("torso tomato") &&
+			!_G(flags)[V081] && !_G(flags)[V000] && !_val13) {
+		switch (_G(kernel).trigger) {
+		case 1:
+			setShadow5Alt(false);
+			sendWSMessage_10000(_machine1, 480, 256, 7, 2, 1);
+			break;
+
+		case 2:
+			setShadow5(true);
+			sendWSMessage_60000(_machine1);
+			_machine1 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 480, 256, 86, 0xc00, 1,
+				triggerMachineByHashCallbackNegative, "fl state machine");
+
+			_G(kernel).trigger_mode = KT_DAEMON;
+			sendWSMessage_10000(1, _machine1, _clasped1, 1, 16, 400,
+				_clasped4, 1, 6, 0);
+			_val14 = _val15 = 1;
+			setFengActive(true);
+			_val13 = 1;
+
+			kernel_load_variant("303lock1");
+			_G(kernel).trigger_mode = KT_PARSE;
+			kernel_timing_trigger(1, 666);
+			break;
+
+		default:
+			break;
+		}
+	} else if (lookFlag && player_said("puffball")) {
+		if (_G(flags)[V000] == 1) {
+			digi_play("303r37", 1);
+		} else if (_G(flags)[V080]) {
+			switch (_G(kernel).trigger) {
+			case -1:
+			case 666:
+				player_set_commands_allowed(false);
+				_chinTalk4 = series_load("suit chin in hand pos4");
+				setGlobals4(_chinTalk4, 15, 15, 15);
+				sendWSMessage_C0000(0);
+				digi_play("303r37", 1, 255, 2);
+				break;
+
+			case 2:
+				sendWSMessage_B0000(3);
+				break;
+
+			case 3:
+				series_unload(_chinTalk4);
+				player_set_commands_allowed(true);
+				break;
+
+			default:
+				break;
+			}
+		} else {
+			switch (_G(kernel).trigger) {
+			case -1:
+			case 666:
+				player_set_commands_allowed(false);
+				_chinTalk4 = series_load("rip hand to chin talk pos4");
+				setGlobals4(_chinTalk4, 15, 16, 19);
+				sendWSMessage_C0000(0);
+				digi_play("303F13", 1, 255, 1);
+				_val15 = 2;
+				break;
+
+			case 1:
+				_val15 = 1;
+				kernel_timing_trigger(30, 2);
+				break;
+
+			case 2:
+				sendWSMessage_D0000();
+				digi_play("303r26", 1, 255, 3);
+				break;
+
+			case 3:
+				sendWSMessage_E0000();
+				sendWSMessage(0xe0000, 0, _G(my_walker), 0, nullptr, 1);
+				kernel_timing_trigger(30, 4);
+				break;
+
+			case 4:
+				digi_play("303F14", 1, 255, 5);
+				_val15 = 2;
+				break;
+
+			case 5:
+				_val15 = 1;
+				kernel_timing_trigger(30, 6);
+				break;
+
+			case 6:
+				sendWSMessage_D0000();
+				digi_play("303r27", 1, 255, 7);
+				break;
+
+			case 7:
+				sendWSMessage_B0000(8);
+				break;
+
+			case 8:
+				series_unload(_chinTalk4);
+				player_set_commands_allowed(true);
+				_G(flags)[V080] = 1;
+				break;
+
+			default:
+				break;
+			}
+		}
+	} else if (lookFlag && player_said("copper tank") &&
+			(_G(flags)[V000] == 1 || _val13)) {
+		if (_G(flags)[V000] == 1) {
+			digi_play("303r31", 1);
+		} else {
+			switch (_G(kernel).trigger) {
+			case -1:
+			case 666:
+				player_set_commands_allowed(false);
+				_chinTalk4 = series_load("suit hand in pocket pos2");
+				setGlobals4(_chinTalk4, 19, 19, 19);
+				sendWSMessage_C0000(0);
+				digi_play("303r31", 1, 255, 2);
+				break;
+
+			case 2:
+				sendWSMessage_B0000(3);
+				break;
+
+			case 3:
+				series_unload(_chinTalk4);
+				break;
+
+			default:
+				break;
+			}
+		}
+	} else if (lookFlag && player_said("torso tomato")) {
+		if (_G(flags)[V000] == 1) {
+			digi_play("303r28a", 1);
+		} else if (_G(flags)[V081]) {
+			switch (_G(kernel).trigger) {
+			case -1:
+			case 666:
+				player_set_commands_allowed(false);
+				_chinTalk4 = series_load("suit chin in hand pos4");
+				setGlobals4(_chinTalk4, 15, 15, 15);
+				sendWSMessage_C0000(-2);
+				digi_play("303r28a", 1, 255, 1);
+				break;
+
+			case 1:
+				sendWSMessage_B0000(3);
+				break;
+
+			case 3:
+				series_unload(_chinTalk4);
+				break;
+
+			default:
+				break;
+			}
+		} else {
+			switch (_G(kernel).trigger) {
+			case -1:
+			case 666:
+				player_set_commands_allowed(false);
+				_chinTalk4 = series_load("rip suit talker pos4");
+				setGlobals4(_chinTalk4, 1, 1, 5);
+				sendWSMessage_C0000(-1);
+				digi_play("303F15", 1, 255, 1);
+				_val15 = 2;
+				break;
+
+			case 2:
+				sendWSMessage_D0000();
+				digi_play("303r28", 1, 255, 3);
+				break;
+
+			case 3:
+				sendWSMessage_B0000(4);
+				break;
+
+			case 4:
+				series_unload(_chinTalk4);
+				player_set_commands_allowed(true);
+				_G(flags)[V081] = 1;
+				break;
+
+			default:
+				break;
+			}
+		}
+	} else if (lookFlag && player_said("cow")) {
+		if (_G(flags)[V086] == 2) {
+			_G(flags)[V086] = 1;
+		} else if (_G(flags)[V086] == 3) {
+			_G(flags)[V086] = 0;
+		}
+
+		if (_G(flags)[V000] == 1) {
+			digi_play("303r23", 1);
+		} else if (_G(flags)[V082]) {
+			switch (_G(kernel).trigger) {
+			case -1:
+			case 666:
+				player_set_commands_allowed(false);
+				digi_play("303F09", 1, 255, 1);
+				_val15 = 2;
+				break;
+
+			case 1:
+				_val15 = 1;
+				player_set_commands_allowed(true);
+				break;
+
+			default:
+				break;
+			}
+		} else {
+			switch (_G(kernel).trigger) {
+			case -1:
+			case 666:
+				player_set_commands_allowed(false);
+				_chinTalk4 = series_load("rip hand to chin talk pos4");
+				setGlobals4(_chinTalk4, 15, 16, 19);
+				sendWSMessage_C0000(0);
+				digi_play("303F10", 1, 255, 6);
+				_val15 = 2;
+				break;
+
+			case 1:
+				digi_play("303r24", 1, 255, 3);
+				sendWSMessage_D0000();
+				_val15 = 0;
+				break;
+
+			case 3:
+				kernel_timing_trigger(30, 4);
+				break;
+
+			case 4:
+				sendWSMessage_B0000(7);
+				_val15 = 3;
+				digi_play("303f11", 1, 255, 5);
+				break;
+
+			case 5:
+				_val15 = 1;
+				player_set_commands_allowed(true);
+				_G(flags)[V082] = 1;
+				break;
+
+			case 6:
+				_val15 = 1;
+				kernel_timing_trigger(30, 1);
+				break;
+
+			case 7:
+				series_unload(_chinTalk4);
+				break;
+
+			default:
+				break;
+			}
+		}
+
+		// TODO
 	} else {
 		return;
 	}
diff --git a/engines/m4/riddle/rooms/section3/room303.h b/engines/m4/riddle/rooms/section3/room303.h
index bad58a0c80b..cceba51f183 100644
--- a/engines/m4/riddle/rooms/section3/room303.h
+++ b/engines/m4/riddle/rooms/section3/room303.h
@@ -64,6 +64,7 @@ private:
 	machine *_ripPonders = nullptr;
 	int _gestTalk4 = 0;
 	int _ripBends = 0;
+	int _chinTalk4 = 0;
 
 	static void escapePressed(void *, void *);
 




More information about the Scummvm-git-logs mailing list