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

dreammaster noreply at scummvm.org
Sat Aug 17 20:57:22 UTC 2024


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

Summary:
c6e4e22221 M4: Added room 405 daemon


Commit: c6e4e222218036530a361894082e513968341c8d
    https://github.com/scummvm/scummvm/commit/c6e4e222218036530a361894082e513968341c8d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-17T13:57:17-07:00

Commit Message:
M4: Added room 405 daemon

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


diff --git a/engines/m4/riddle/rooms/section4/room405.cpp b/engines/m4/riddle/rooms/section4/room405.cpp
index a7b8433f2a3..831958fbb8c 100644
--- a/engines/m4/riddle/rooms/section4/room405.cpp
+++ b/engines/m4/riddle/rooms/section4/room405.cpp
@@ -112,6 +112,492 @@ void Room405::init() {
 }
 
 void Room405::daemon() {
+	int frame;
+
+	switch (_G(kernel).trigger) {
+	case 20:
+		digi_preload("405b01a");
+		_baronShakeSit = series_load("BARON SHAKES AND SITS");
+		_baronTalkLoop = series_load("BARON TALK LOOP");
+		_baronLeanForward = series_load("BARON LEAN FORWARD");
+		_baronTurnWalk = series_load("BARON TURNWALK");
+		_ripHandLetter = series_load("RIP HANDS BARON LETTER");
+		_ripTalkGesture = series_load("RIPLEY TALKGESTURE");
+		_ripLeanForward = series_load("RIPLEY LEAN FORWARD");
+		_lowReacher = series_load("RIP TREK MED REACH HAND POS1");
+		_ripHeadTurn = series_load("RIP TREK HEAD TURN POS3");
+
+		digi_preload("13_05n03");
+		digi_preload("13_03n01");
+		digi_preload("13_09p03");
+		setGlobals1(_ripHeadTurn, 6, 9, 9, 9, 0, 9, 6, 6, 6);
+		sendWSMessage_110000(-1);
+		kernel_timing_trigger(50, 21);
+		sendWSMessage_10000(_baron, 284, 324, 1, 22, 1);
+		break;
+
+	case 21:
+		sendWSMessage_120000(-1);
+		break;
+
+	case 22:
+		ws_demand_location(286, 324, 7);
+		ws_hide_walker();
+		sendWSMessage_150000(-1);
+		_baronWalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x600, 0,
+			triggerMachineByHashCallbackNegative, "BARON talks rip");
+		sendWSMessage_10000(1, _baronWalker, _baronShakeSit, 1, 48, 23,
+			_baronShakeSit, 48, 48, 0);
+		digi_play("405b01", 1);
+		break;
+
+	case 23:
+		sendWSMessage_10000(1, _baronWalker, _baronShakeSit, 48, 100, 24,
+			_baronShakeSit, 100, 100, 0);
+		break;
+		digi_play("405b01a", 1, 255, 25);
+		break;
+
+	case 24:
+		_ripTalksBaron = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x600, 0,
+			triggerMachineByHashCallbackNegative, "rip talks baron");
+		_val5 = 1000;
+		_val6 = 1103;
+		kernel_timing_trigger(1, 102);
+		_val7 = 2000;
+		_val8 = 2101;
+		kernel_timing_trigger(1, 110);
+		break;
+
+
+	case 25:
+		digi_play("405b02", 1, 255, 26);
+		break;
+
+	case 26:
+		_val8 = 2102;
+		_val6 = 1102;
+		digi_play("405r01", 1, 255, 27);
+		break;
+
+	case 27:
+		_val6 = 1104;
+		_val8 = 2101;
+		digi_play("405b03", 1, 255, 28);
+		break;
+
+	case 28:
+		_val8 = 2103;
+		kernel_timing_trigger(10, 29);
+		break;
+
+	case 29:
+		terminateMachineAndNull(_baronWalker);
+		sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 1, 15, 30,
+			_ripHandLetter, 15, 15, 0);
+		break;
+
+	case 30:
+		digi_preload("950_s06");
+		sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 16, 29, -1,
+			_ripHandLetter, 29, 29, 0);
+		digi_play("405r02", 1, 255, 31);
+		digi_play("950_s06", 2, 255, -1, 950);
+		break;
+
+	case 31:
+		sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 30, 84, -1,
+			_ripHandLetter, 84, 84, 0);
+		break;
+
+	case 32:
+		digi_play("405b04", 1, 255, 33);
+		break;
+
+	case 33:
+		digi_play("405b03", 1, 255, 34);
+		break;
+
+	case 34:
+		digi_play("405b05", 1, 255, 35);
+		break;
+
+	case 35:
+		digi_play("950_s06", 2, 255, -1, 950);
+		sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 85, 98, 36,
+			_ripHandLetter, 98, 98, 0);
+		break;
+
+	case 36:
+		_baronWalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x600, 0,
+			triggerMachineByHashCallbackNegative, "BARON talks rip");
+		sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, 1, 1, 110,
+			_baronTalkLoop, 1, 1, 0);
+		kernel_timing_trigger(1, 37);
+		break;
+
+	case 37:
+		digi_play("405b05a", 1, 255, 38);
+		_val8 = 2101;
+		kernel_timing_trigger(1, 110);
+		break;
+
+	case 38:
+		_val8 = 2102;
+		sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 15, 1, 39,
+			_ripHandLetter, 1, 1, 0);
+		break;
+
+	case 39:
+		_val5 = 1000;
+		_val6 = 1100;
+		kernel_timing_trigger(1, 102);
+		break;
+
+	case 40:
+		kernel_timing_trigger(1, 60);
+		break;
+
+	case 50:
+	case 69:
+		player_set_commands_allowed(true);
+		break;
+
+	case 61:
+		digi_play("13_15n07", 1, 255, 62);
+		break;
+
+	case 62:
+		sendWSMessage_10000(1, _baronWalker, _baronTurnWalk, 58, 79, 63,
+			_baronTurnWalk, 80, 82, 4);
+		sendWSMessage_1a0000(_baronWalker, 11);
+		break;
+
+	case 63:
+		digi_play("13_20p01", 1, 255, 64);
+		break;
+
+	case 64:
+		sendWSMessage_10000(1, _baronWalker, _baronTurnWalk, 83, 99, 65,
+			_baronTurnWalk, 99, 99, 0);
+		break;
+
+	case 65:
+		ws_unhide_walker(_baron);
+		ws_unhide_walker();
+		setGlobals1(_ripHeadTurn, 6, 9, 9, 9, 0, 9, 6, 6, 6);
+		sendWSMessage_110000(-1);
+		terminateMachineAndNull(_baronWalker);
+		sendWSMessage_10000(_baron, 185, 365, 9, 66, 1);
+		break;
+
+	case 66:
+		sendWSMessage_60000(_baron);
+		digi_play("13_20n01", 1, 255, 67);
+		sendWSMessage_120000(68);
+		break;
+
+	case 67:
+		digi_play("405_s01", 2, 255, 69);
+		break;
+
+	case 68:
+		sendWSMessage_150000(-1);
+		break;
+
+	case 100:
+		kernel_timing_trigger(1, 102);
+		break;
+
+	case 101:
+		_val8 = 2163;
+		break;
+
+	case 102:
+		if (_val2 != -1) {
+			kernel_timing_trigger(1, _val2);
+			_val2 = -1;
+		} else {
+			kernel_timing_trigger(1, 103);
+		}
+		break;
+
+	case 103:
+		if (_val5 == 1000) {
+			switch (_val6) {
+			case 1100:
+				ws_hide_walker();
+				player_set_commands_allowed(false);
+				sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 13, 102,
+					_ripTalkGesture, 13, 13, 0);
+				_val6 = 1101;
+				_val7 = 2000;
+				_val8 = 2100;
+				kernel_timing_trigger(1, 110);
+				break;
+
+			case 1101:
+				_val6 = 1103;
+				kernel_timing_trigger(1, 102);
+
+				conv_load("conv405a", 10, 10, 101);
+				conv_export_pointer_curr(&_G(flags)[V115], 0);
+				conv_export_pointer_curr(&_G(flags)[V314], 1);
+				conv_play();
+				break;
+
+			case 1102:
+				frame = imath_ranged_rand(13, 16);
+				sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, frame, frame, 102,
+					_ripTalkGesture, frame, frame, 0);
+				break;
+
+			case 1103:
+				sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 13, 102,
+					_ripTalkGesture, 13, 13, 0);
+				break;
+
+			case 1104:
+				sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 13, -1,
+					_ripTalkGesture, 13, 13, 0);
+				break;
+
+			case 1220:
+				_G(kernel).call_daemon_every_loop = true;
+				_response = series_stream("RIP DONT I KNOW", 4, 0, 103);
+				series_stream_break_on_frame(_response, 9, 103);
+				_val6 = 1221;
+				break;
+
+			case 1221:
+				if (!_sound2.empty()) {
+					digi_play(_sound2.c_str(), 1);
+					_sound2.clear();
+				}
+
+				_G(kernel).call_daemon_every_loop = false;
+				_val6 = 1222;
+				break;
+
+			case 1222:
+				_val6 = 1103;
+				kernel_timing_trigger(1, 102);
+				conv_resume();
+				break;
+
+			case 1230:
+				sendWSMessage_10000(1, _ripTalksBaron, _ripLeanForward, 1, 16, 103,
+					_ripLeanForward, 16, 16, 0);
+				_val6 = 1232;
+				break;
+
+			case 1232:
+				_val6 = 1233;
+
+				if (!_sound2.empty()) {
+					digi_play(_sound2.c_str(), 1, 255, 103);
+					_sound2.clear();
+				}
+				break;
+
+			case 1233:
+				sendWSMessage_10000(1, _ripTalksBaron, _ripLeanForward, 16, 1, 102,
+					_ripLeanForward, 1, 1, 0);
+				_val6 = 1103;
+				conv_resume();
+				break;
+
+			case 2110:
+				sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 42, 103,
+					_ripTalkGesture, 42, 42, 0);
+				_val6 = 2112;
+
+				if (!_sound2.empty()) {
+					_G(kernel).trigger_mode = KT_PARSE;
+					digi_play(_sound2.c_str(), 1);
+					_G(kernel).trigger_mode = KT_DAEMON;
+					_sound2.clear();
+				}
+				break;
+
+			case 2112:
+				_val6 = 1102;
+				kernel_timing_trigger(1, 102);
+				conv_resume();
+				break;
+
+			default:
+				break;
+			}
+		}
+		break;
+
+	case 110:
+		if (_val7 == 2000) {
+			if (_val4 != -1) {
+				kernel_timing_trigger(1, _val4);
+				_val4 = -1;
+			} else {
+				kernel_timing_trigger(1, 111);
+			}
+		}
+		break;
+
+	case 111:
+		if (_val7 == 2000) {
+			switch (_val8) {
+			case 2100:
+			case 2102:
+				sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, 1, 1, 110,
+					_baronTalkLoop, 1, 1, 0);
+				_val8 = 2102;
+				break;
+
+			case 2101:
+				frame = imath_ranged_rand(4, 9);
+				sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, frame, frame, 110,
+					_baronTalkLoop, frame, frame, 0);
+				break;
+
+			case 2103:
+				sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, 1, 1, -1,
+					_baronTalkLoop, 1, 1, 0);
+
+			case 2110:
+				_G(kernel).call_daemon_every_loop = true;
+				_response = series_stream("Baron sport is life", 5, 0, 111);
+				series_stream_break_on_frame(_response, 3, 111);
+				_val8 = 2111;
+				break;
+
+			case 2111:
+				if (!_sound1.empty()) {
+					digi_play(_sound1.c_str(), 1);
+					_sound1.clear();
+				}
+
+				_G(kernel).call_daemon_every_loop = false;
+				_val8 = 2112;
+				break;
+
+			case 2112:
+			case 2153:
+				_val8 = 2102;
+				kernel_timing_trigger(1, 110);
+				conv_resume();
+				break;
+
+			case 2120:
+				_G(kernel).call_daemon_every_loop = true;
+				_response = series_stream("BARON WORLD WAR", 6, 0, 111);
+				series_stream_break_on_frame(_response, 4, 111);
+				_val8 = 2121;
+				break;
+
+			case 2121:
+				if (!_sound1.empty()) {
+					digi_play(_sound1.c_str(), 1);
+					_sound1.clear();
+				}
+
+				_val8 = 2122;
+				_G(kernel).call_daemon_every_loop = false;
+				break;
+
+			case 2122:
+				kernel_timing_trigger(1, 666);
+				break;
+
+			case 2123:
+				_val8 = 2152;
+				kernel_timing_trigger(1, 110);
+				_val6 = 1103;
+				kernel_timing_trigger(1, 102);
+				break;
+
+			case 2140:
+				sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 1, 11, -1,
+					_baronLeanForward, 12, 18, 1);
+				_val8 = 2142;
+
+				if (!_sound1.empty()) {
+					digi_play(_sound1.c_str(), 1, 255, 111);
+					_sound1.clear();
+				}
+				break;
+
+			case 2142:
+				sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 11, 11, 111,
+					_baronLeanForward, 11, 11, 0);
+				_val8 = 2162;
+				break;
+
+			case 2150:
+				sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 11, 11, -1,
+					_baronLeanForward, 12, 18, 1);
+
+				if (!_sound1.empty()) {
+					digi_play(_sound1.c_str(), 1, 255, 111);
+					_sound1.clear();
+				}
+				break;
+				
+			case 2152:
+				sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 12, 1, 111,
+					_baronLeanForward, 1, 1, 0);
+				_val8 = 2153;
+				break;
+
+			case 2161:
+				frame = imath_ranged_rand(12, 18);
+				sendWSMessage_10000(1, _baronWalker, _baronLeanForward, frame, frame, 110,
+					_baronLeanForward, frame, frame, 0);
+				break;
+
+			case 2162:
+				sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 11, 11, 111,
+					_baronLeanForward, 11, 11, 0);
+				_val8 = 2162;
+				break;
+
+			case 2163:
+				terminateMachineAndNull(_ripTalksBaron);
+				sendWSMessage_10000(1, _baronWalker, _baronTurnWalk, 1, 57, 61,
+					_baronTurnWalk, 77, 79, 4);
+				sendWSMessage_1a0000(_baronWalker, 11);
+				break;
+
+			case 2171:
+				sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 12, 1, 111,
+					_baronLeanForward, 1, 1, 0);
+				_val8 = 2102;
+				break;
+
+			default:
+				break;
+			}
+		}
+		break;
+
+	case 666:
+		_response = series_stream("RIP WAR REACTION", 5, 0, 111);
+		series_stream_break_on_frame(_response, 4, 667);
+		_val8 = 2123;
+		break;
+
+	case 667:
+		series_stream_check_series(_response, 15);
+		series_stream_break_on_frame(_response, 10, 668);
+		break;
+
+	case 668:
+		series_stream_check_series(_response, 5);
+		ws_OverrideCrunchTime(_response);
+		break;
+
+	default:
+		break;
+	}
 }
 
 void Room405::pre_parser() {
diff --git a/engines/m4/riddle/rooms/section4/room405.h b/engines/m4/riddle/rooms/section4/room405.h
index ed1493a5efb..41ec8dd93fd 100644
--- a/engines/m4/riddle/rooms/section4/room405.h
+++ b/engines/m4/riddle/rooms/section4/room405.h
@@ -46,9 +46,20 @@ private:
 	machine *_candles = nullptr;
 	machine *_bankNote = nullptr;
 	machine *_baron = nullptr;
+	machine *_baronWalker = nullptr;
+	machine *_ripTalksBaron = nullptr;
+	machine *_response = nullptr;
 	int _currentNode = 0;
 	Common::String _sound1;
 	Common::String _sound2;
+	int _baronShakeSit = 0;
+	int _baronTalkLoop = 0;
+	int _baronLeanForward = 0;
+	int _baronTurnWalk = 0;
+	int _ripHandLetter = 0;
+	int _ripTalkGesture = 0;
+	int _ripLeanForward = 0;
+	int _ripHeadTurn = 0;
 
 	void conv405a();
 	void conv405a1();




More information about the Scummvm-git-logs mailing list