[Scummvm-git-logs] scummvm master -> 7b895ac18687765d8f839a1ee14e9fd7c185da6f

dreammaster noreply at scummvm.org
Mon Aug 12 05:07:58 UTC 2024


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

Summary:
fa669a9f93 M4: RIDDLE: Most of room 402 daemon done
7b895ac186 M4: RIDDLE: Remainder of room 402 daemon


Commit: fa669a9f93e46e606b02c053eea97eb24b4ce3a2
    https://github.com/scummvm/scummvm/commit/fa669a9f93e46e606b02c053eea97eb24b4ce3a2
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-11T20:11:15-07:00

Commit Message:
M4: RIDDLE: Most of room 402 daemon done

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


diff --git a/engines/m4/riddle/rooms/section4/room402.cpp b/engines/m4/riddle/rooms/section4/room402.cpp
index 6c6afb7beda..7925184c53b 100644
--- a/engines/m4/riddle/rooms/section4/room402.cpp
+++ b/engines/m4/riddle/rooms/section4/room402.cpp
@@ -792,13 +792,339 @@ void Room402::daemon() {
 		kernel_timing_trigger(30, 205);
 		break;
 
-	// TODO
+	case 205:
+		sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 16, 1, 208,
+			_wolfWantsMoney, 1, 1, 0);
+		sendWSMessage_10000(1, _ripEnterLeave, _ripPaysWolfie, 24, 1, 206,
+			_ripPaysWolfie, 1, 1, 0);
+		break;
+
+	case 206:
+		sendWSMessage_10000(1, _ripEnterLeave, _ripTalkWolf, 7, 1, 207,
+			_ripTalkWolf, 1, 1, 0);
+		break;
+
+	case 207:
+	case 236:
+		terminateMachineAndNull(_ripEnterLeave);
+		terminateMachineAndNull(_safariShadow);
+		ws_unhide_walker();
+		break;
+
+	case 208:
+		sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 43, 1, 209,
+			_wolfClipping, 1, 1, 0);
+		break;
+
+	case 209:
+		kernel_timing_trigger(1, 110);
+		player_set_commands_allowed(true);
+		break;
+
+	case 210:
+		_ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x100, 0,
+			triggerMachineByHashCallbackNegative, "rip talks wolf");
+		player_update_info();
+		_safariShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+			_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x200, 0,
+			triggerMachineByHashCallbackNegative, "rip talks wolf SHADOW");
+
+		sendWSMessage_10000(1, _safariShadow, _shadow3, 1, 1, -1,
+			_shadow3, 1, 1, 0);
+		ws_hide_walker();
+		sendWSMessage_10000(1, _ripEnterLeave, _ripTalkWolf, 1, 7, 211,
+			_ripTalkWolf, 7, 7, 0);
+		sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 1, 8, 213,
+			_wolfClippersDown, 8, 8, 0);
+		break;
+
+	case 211:
+		sendWSMessage_10000(1, _ripEnterLeave, _ripPaysWolfie, 1, 16, -1,
+			_ripPaysWolfie, 16, 16, 0);
+		break;
+
+	case 212:
+		sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 1, 16, 214,
+			_wolfWantsMoney, 16, 16, 0);
+		_flags111 = _G(flags)[V111];
+		break;
+
+	case 213:
+		digi_play("402_s04", 2);
+		sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 8, 43, 212,
+			_wolfClippersDown, 43, 43, 0);
+		break;
+
+	case 214:
+		sendWSMessage_10000(1, _ripEnterLeave, _ripPaysWolfie, 17, 24, 215,
+			_ripPaysWolfie, 24, 24, 0);
+		break;
+
+	case 215:
+		digi_play("950_s23", 2);
+		kernel_timing_trigger(30, 216);
+		break;
+
+	case 216:
+		if (_G(flags)[V111] > 1) {
+			_flags111--;
+			sendWSMessage_10000(1, _ripEnterLeave, _ripPaysWolfie, 24, 17, 214,
+				_ripPaysWolfie, 17, 17, 0);
+		} else {
+			sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 16, 1, -1,
+				_wolfWantsMoney, 1, 1, 0);
+			sendWSMessage_10000(1, _ripEnterLeave, _ripPaysWolfie, 24, 1, 217,
+				_ripPaysWolfie, 1, 1, 0);
+		}
+		break;
+
+	case 217:
+		sendWSMessage_10000(1, _ripEnterLeave, _ripTalkWolf, 7, 1, 218,
+			_ripTalkWolf, 1, 1, 0);
+		break;
+
+	case 218:
+		terminateMachineAndNull(_ripEnterLeave);
+		terminateMachineAndNull(_safariShadow);
+		ws_unhide_walker();
+		_val5 = -1;
+		_val10 = 1001;
+		_val11 = 1110;
+		kernel_timing_trigger(1, 102);
+		break;
+
+	case 221:
+		_ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x100, 0,
+			triggerMachineByHashCallbackNegative, "rip talks wolf");
+		player_update_info();
+		_safariShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+			_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x200, 0,
+			triggerMachineByHashCallbackNegative, "rip talks wolf SHADOW");
+
+		sendWSMessage_10000(1, _safariShadow, _shadow3, 1, 1, -1,
+			_shadow3, 1, 1, 0);
+		ws_hide_walker();
+		sendWSMessage_10000(1, _ripEnterLeave, _ripTalkWolf, 1, 7, -1,
+			_ripTalkWolf, 7, 7, 0);
+		sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 1, 8, 222,
+			_wolfClippersDown, 8, 8, 0);
+		break;
+
+	case 222:
+		digi_play("402_s04", 2);
+		sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 8, 43, 223,
+			_wolfClippersDown, 43, 43, 0);
+		break;
 
 	case 223:
 		sendWSMessage_10000(1, _wolfieMach, _ripPaysWolfie, 1, 24, 224,
 			_ripPaysWolfie, 24, 24, 0);
 		break;
 
+	case 224:
+		sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 43, 1, 227,
+			_wolfClipping, 1, 1, 0);
+		digi_play("402w08", 1);
+		kernel_timing_trigger(60, 225);
+		break;
+
+	case 225:
+		sendWSMessage_10000(1, _ripEnterLeave, _ripPaysWolfie, 24, 1, 226,
+			_ripPaysWolfie, 1, 1, 0);
+		break;
+
+	case 226:
+		sendWSMessage_10000(1, _ripEnterLeave, _ripTalkWolf, 7, 1, -1,
+			_ripTalkWolf, 1, 1, 0);
+		break;
+
+	case 227:
+		terminateMachineAndNull(_ripEnterLeave);
+		terminateMachineAndNull(_safariShadow);
+		ws_unhide_walker();
+		kernel_timing_trigger(1, 110);
+		player_set_commands_allowed(true);
+		break;
+
+	case 230:
+		_ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x100, 0,
+			triggerMachineByHashCallbackNegative, "trip talks wolf");
+		player_update_info();
+		_safariShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+			_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x200, 0,
+			triggerMachineByHashCallbackNegative, "rip talks wolf SHADOW");
+
+		sendWSMessage_10000(1, _safariShadow, _shadow3, 1, 1, -1,
+			_shadow3, 1, 1, 0);
+		ws_unhide_walker();
+		sendWSMessage_10000(1, _ripEnterLeave, _ripTalkWolf, 1, 7, 232,
+			_ripTalkWolf, 7, 7, 0);
+		break;
+
+	case 232:
+		sendWSMessage_10000(1, _ripEnterLeave, _ripPaysWolfie, 1, 24, 233,
+			_ripPaysWolfie, 24, 24, 0);
+		break;
+
+	case 233:
+		sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 16, 1, 234,
+			_wolfWantsMoney, 1, 1, 0);
+		break;
+
+	case 234:
+		sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 43, 1, 237,
+			_wolfClipping, 1, 1, 0);
+		sendWSMessage_10000(1, _ripEnterLeave, _ripPaysWolfie, 24, 1, 235,
+			_ripPaysWolfie, 1, 1, 0);
+		break;
+
+	case 235:
+		sendWSMessage_10000(1, _ripEnterLeave, _ripTalkWolf, 7, 1, 236,
+			_ripTalkWolf, 1, 1, 0);
+		break;
+
+	case 237:
+		_val12 = 2001;
+		_val13 = 2300;
+		player_set_commands_allowed(true);
+		kernel_timing_trigger(1, 110);
+		break;
+
+	case 300:
+		sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 43, 18, 302,
+			_wolfClippersDown, 18, 18, 0);
+		midi_play("DANZIG1", 1, 255, -1, 949);
+		break;
+
+	case 302:
+		terminateMachineAndNull(_wolfieMach);
+		_wolfWalker = triggerMachineByHash_3000(8, 8, S4_NORMAL_DIRS, S4_SHADOW_DIRS,
+			484, 315, 11, triggerMachineByHashCallback3000, "wolf_walker");
+		sendWSMessage_10000(_wolfWalker, 517, 239, 9, -1, 0);
+
+		digi_play(_soundPtr2, 1);
+		kernel_timing_trigger(80, 303);
+		break;
+
+	case 303:
+		terminateMachineAndNull(_ripEnterLeave);
+		terminateMachineAndNull(_safariShadow);
+		ws_unhide_walker();
+		_G(flags)[V114] = 0;
+		ws_walk(517, 239, nullptr, -1, 9);
+		kernel_timing_trigger(60, 304);
+		break;
+
+	case 304:
+		disable_player_commands_and_fade_init(305);
+		break;
+
+	case 305:
+		_G(flags)[V112] = 1;
+		_G(game).setRoom(408);
+		break;
+
+	case 350:
+		ws_hide_walker();
+		_ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x100, 0,
+			triggerMachineByHashCallbackNegative, "rip leans against wall");
+		sendWSMessage_10000(1, _ripEnterLeave, _ripLeanWall, 1, 23, 351,
+			_ripLeanWall, 23, 23, 0);
+
+		_turtlePopupMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0, 0,
+			triggerMachineByHashCallbackNegative, "TURTLE POPUP");
+		_val14 = 0;
+		digi_preload("950_s27", 950);
+		break;
+
+	case 351:
+		if (_val14 == 1) {
+			digi_play("950_s27", 3, 255, 353, 950);
+			_val5 = 354;
+		} else {
+			digi_play("950_s27", 3, 255, 352, 950);
+			++_val14;
+		}
+		break;
+
+	case 352:
+		kernel_timing_trigger(5, 351);
+		break;
+
+	case 353:
+		sendWSMessage_10000(1, _turtlePopupMach, _turtlePopup, 15, 41, 353,
+			_turtlePopup, 41, 41, 0);
+		digi_play("950_s27", 2, 255, -1, 950);
+		break;
+
+	case 354:
+		sendWSMessage_10000(1, _wolfieMach, _wolfTurnsClipping, 1, 38, 355,
+			_wolfTurnsClipping, 38, 38, 0);
+		break;
+
+	case 355:
+		digi_play("402w10", 1, 255, 356);
+		break;
+
+	case 356:
+		digi_play("402r32", 1, 255, 357);
+		break;
+
+	case 357:
+		digi_play("402w11", 1);
+		terminateMachineAndNull(_wolfieMach);
+		_wolfWalker = triggerMachineByHash_3000(8, 8, S4_NORMAL_DIRS, S4_SHADOW_DIRS,
+			484, 315, 11, triggerMachineByHashCallback3000, "wolf_walker");
+		sendWSMessage_10000(_wolfWalker, 517, 239, 9, -1, 0);
+		kernel_timing_trigger(150, 358);
+		break;
+
+	case 358:
+		disable_player_commands_and_fade_init(359);
+		break;
+
+	case 359:
+		midi_stop();
+		_G(game).setRoom(409);
+		break;
+
+	case 370:
+		digi_play("402w06", 1, 255, 372);
+		break;
+
+	case 372:
+		digi_play("402r07", 1);
+		ws_walk(517, 239, nullptr, -1, 9);
+		kernel_timing_trigger(90, 373);
+		break;
+
+	case 373:
+		disable_player_commands_and_fade_init(374);
+		break;
+
+	case 374:
+		if (_G(flags)[V139] == 1 || _G(flags)[V139] == 3)
+			_G(game).setRoom(408);
+		else
+			_G(game).setRoom(403);
+		break;
+
+	case 10000:
+		switch (imath_ranged_rand(1, 3)) {
+		case 1:
+			digi_play("950_s19", 2);
+			break;
+		case 2:
+			digi_play("950_s20", 2);
+			break;
+		case 3:
+			digi_play("950_s21", 2);
+			break;
+		default:
+			break;
+		}
+		break;
+
 	default:
 		break;
 	}
diff --git a/engines/m4/riddle/rooms/section4/room402.h b/engines/m4/riddle/rooms/section4/room402.h
index c8bd7b4489f..965e240fea5 100644
--- a/engines/m4/riddle/rooms/section4/room402.h
+++ b/engines/m4/riddle/rooms/section4/room402.h
@@ -43,6 +43,7 @@ private:
 	int _val11 = 0;
 	int _val12 = 0;
 	int _val13 = 0;
+	int _val14 = 0;
 	machine *_wolfie = nullptr;
 	machine *_wolfieMach = nullptr;
 	int _shadow3 = 0;
@@ -68,6 +69,8 @@ private:
 	machine *_castleDoor = nullptr;
 	machine *_machine1 = nullptr;
 	int _machine1Series = 0;
+	int _flags111 = 0;
+	machine *_turtlePopupMach = nullptr;
 
 	void conv402a();
 	void conv402a777();


Commit: 7b895ac18687765d8f839a1ee14e9fd7c185da6f
    https://github.com/scummvm/scummvm/commit/7b895ac18687765d8f839a1ee14e9fd7c185da6f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-11T22:07:50-07:00

Commit Message:
M4: RIDDLE: Remainder of room 402 daemon

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


diff --git a/engines/m4/riddle/rooms/section4/room402.cpp b/engines/m4/riddle/rooms/section4/room402.cpp
index 7925184c53b..9b0be2a44db 100644
--- a/engines/m4/riddle/rooms/section4/room402.cpp
+++ b/engines/m4/riddle/rooms/section4/room402.cpp
@@ -418,7 +418,225 @@ void Room402::daemon() {
 	case 103:
 		switch (_val10) {
 		case 1000:
-			// TODO
+			switch (_val11) {
+			case 1100:
+				ws_hide_walker();
+				player_set_commands_allowed(false);
+				player_update_info();
+
+				_ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+					_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x100, 0,
+					triggerMachineByHashCallbackNegative, "rip talks wolf");
+				_safariShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+					_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x100, 0,
+					triggerMachineByHashCallbackNegative, "rip talks wolf SHADOW");
+
+				sendWSMessage_10000(1, _ripEnterLeave, _ripTalker, 1, 1, -1,
+					_ripTalker, 1, 1, 0);
+				sendWSMessage_10000(1, _safariShadow, _shadow3, 1, 1, 102,
+					_shadow3, 1, 1, 0);
+				_val11 = 1101;
+				_val12 = 2000;
+				_val13 = 2100;
+				kernel_timing_trigger(1, 110);
+				break;
+
+			case 1101:
+				_val11 = 1103;
+				kernel_timing_trigger(1, 102);
+				conv_load("conv402a", 10, 10, 101);
+
+				conv_export_value_curr(inv_player_has("POMERANIAN MARKS") ? 1 : 0, 0);
+				conv_export_pointer_curr(&_G(flags)[V111], 1);
+				conv_export_value_curr(_G(flags)[V112], 2);
+				conv_export_value_curr(_G(flags)[V114], 4);
+				conv_export_pointer_curr(&_G(flags)[V115], 5);
+				conv_export_pointer_curr(&_G(flags)[V135], 7);
+				conv_export_pointer_curr(&_G(flags)[V337], 8);
+				conv_export_value_curr(_G(flags)[V110], 9);
+				conv_export_pointer_curr(&_G(flags)[V314], 10);
+				conv_play();
+				break;
+
+			case 1102:
+				frame = imath_ranged_rand(1, 5);
+				sendWSMessage_10000(1, _ripEnterLeave, _ripTalker, frame, frame, 102,
+					_ripTalker, frame, frame, 0);
+				break;
+
+			case 1103:
+				sendWSMessage_10000(1, _ripEnterLeave, _ripTalker, 1, 1, 102,
+					_ripTalker, 1, 1, 0);
+				break;
+
+			case 1104:
+				sendWSMessage_10000(1, _ripEnterLeave, _ripTalker, 1, 1, -1,
+					_ripTalker, 1, 1, 0);
+				break;
+
+			case 1105:
+				terminateMachineAndNull(_ripEnterLeave);
+				terminateMachineAndNull(_safariShadow);
+				ws_unhide_walker();
+
+				if (_soundPtr1) {
+					digi_play(_soundPtr1, 1);
+					_soundPtr1 = nullptr;
+				}
+
+				_G(flags)[V114] = 0;
+				_G(flags)[V112] = 0;
+
+				if (_G(flags)[V115] && !_val8) {
+					_val6 = 1;
+					_val12 = 2000;
+					_val13 = 2230;
+				} else {
+					_val8 = 0;
+					_val12 = 2001;
+					_val13 = 2300;
+				}
+
+				player_set_commands_allowed(true);
+				break;
+
+			case 1120:
+				terminateMachineAndNull(_ripEnterLeave);
+				_ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x100, 0,
+					triggerMachineByHashCallbackNegative, "rip talks wolf");
+				_val11 = 1122;
+				_letter = series_load("RIP SHOWS WOLF THE LETTER");
+				sendWSMessage_10000(1, _ripEnterLeave, _letter, 1, 12, 103,
+					_letter, 12, 12, 0);
+				break;
+
+			case 1122:
+				if (_soundPtr1) {
+					_G(kernel).trigger_mode = KT_PARSE;
+					digi_play(_soundPtr1, 1, 255, 777);
+					_G(kernel).trigger_mode = KT_DAEMON;
+					_soundPtr1 = nullptr;
+				}
+				break;
+
+			case 1123:
+				_val11 = 1124;
+				sendWSMessage_10000(1, _ripEnterLeave, _letter, 12, 1, 103,
+					_ripTalker, 1, 1, 0);
+				break;
+
+			case 1124:
+				terminateMachineAndNull(_ripEnterLeave);
+				series_unload(_letter);
+				player_update_info();
+
+				_ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+					_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x100, 0,
+					triggerMachineByHashCallbackNegative, "rip talks wolf");
+				_val10 = 1000;
+				_val11 = 1103;
+				sendWSMessage_10000(1, _ripEnterLeave, _ripTalker, 1, 1, 102,
+					_ripTalker, 1, 1, 0);
+				conv_resume();
+				break;
+
+			default:
+				break;
+			}
+			break;
+
+		case 1001:
+			switch (_val11) {
+			case 1110:
+				player_update_info();
+				_ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+					_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x100, 0,
+					triggerMachineByHashCallbackNegative, "rip talks wolf");
+
+				player_update_info();
+				_safariShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+					_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x200, 0,
+					triggerMachineByHashCallbackNegative, "rip talks wolf SHADOW");
+				sendWSMessage_10000(1, _safariShadow, _shadow3, 1, 1, -1,
+					_shadow3, 1, 1, 0);
+				ws_hide_walker();
+
+				sendWSMessage_10000(1, _ripEnterLeave, _ripTalker, 1, 1, -1,
+					_ripTalker, 1, 1, 0);
+				player_set_commands_allowed(false);
+				_val12 = 2002;
+				_val13 = 2141;
+				kernel_timing_trigger(1, 110);
+
+				_val11 = 1111;
+				kernel_timing_trigger(1, 102);
+				break;
+
+			case 1111:
+				_val10 = 1001;
+				_val11 = 1115;
+				kernel_timing_trigger(1, 102);
+
+				conv_load("conv402a", 0, 10, 101);
+				conv_export_value_curr(inv_player_has("POMERANIAN MARKS") ? 1 : 0, 0);
+				conv_export_pointer_curr(&_G(flags)[V111], 1);
+				conv_export_value_curr(_G(flags)[V112], 2);
+				conv_export_value_curr(_G(flags)[V114], 4);
+				conv_export_pointer_curr(&_G(flags)[V115], 5);
+				conv_export_pointer_curr(&_G(flags)[V135], 7);
+				conv_export_pointer_curr(&_G(flags)[V337], 8);
+				conv_export_value_curr(_G(flags)[V110], 9);
+				conv_export_pointer_curr(&_G(flags)[V314], 10);
+				conv_play();
+				break;
+
+			case 1112:
+				terminateMachineAndNull(_ripEnterLeave);
+				terminateMachineAndNull(_safariShadow);
+				ws_unhide_walker();
+				_G(flags)[V114] = 0;
+				_G(flags)[V112] = 0;
+
+				if (_currentNode == 19 || _currentNode == 22 || _currentNode == 23) {
+					_val12 = 2002;
+					_val13 = 2190;
+					kernel_timing_trigger(1, 110);
+				} else if (!_G(flags)[V115]) {
+					_val12 = 2001;
+					_val13 = 2300;
+					player_set_commands_allowed(true);
+				} else {
+					_val6 = 1;
+
+					if (_soundPtr2) {
+						_val13 = 2142;
+						_val11 = 1113;
+						digi_play(_soundPtr2, 1, 255, 103);
+						_soundPtr2 = nullptr;
+					}
+				}
+				break;
+
+			case 1113:
+				_val13 = 2150;
+				break;
+
+			case 1114:
+				frame = imath_ranged_rand(1, 5);
+				sendWSMessage_10000(1, _ripEnterLeave, _ripTalker, frame, frame, 102,
+					_ripTalker, frame, frame, 0);
+				break;
+
+			case 1115:
+				sendWSMessage_10000(1, _ripEnterLeave, _ripTalker, 1, 1, 102,
+					_ripTalker, 1, 1, 0);
+				break;
+
+			default:
+				break;
+			}
+			break;
+
 		default:
 			break;
 		}
@@ -464,6 +682,12 @@ void Room402::daemon() {
 		switch (_val12) {
 		case 2000:
 			switch (_val13) {
+			case 2100:
+				sendWSMessage_10000(1, _wolfieMach, _wolfClipping, 8, 8, 110,
+					_wolfClipping, 8, 8, 0);
+				_val13 = 2104;
+				break;
+
 			case 2101:
 				frame = imath_ranged_rand(8, 10);
 				sendWSMessage_10000(1, _wolfieMach, _wolfClipping, frame, frame, 110,
@@ -516,6 +740,37 @@ void Room402::daemon() {
 				break;
 
 			case 2231:
+				digi_play("402_s04", 2);
+				sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 8, 43, 111,
+					_wolfClippersDown, 43, 43, 0);
+				_val13 = 2232;
+				break;
+
+			case 2232:
+				if (_soundPtr2) {
+					digi_play(_soundPtr2, 1);
+					_soundPtr2 = nullptr;
+				}
+
+				_val13 = 2233;
+				sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 1, 16, 111,
+					_wolfWantsMoney, 16, 16, 0);
+				break;
+
+			case 2233:
+				if (_G(flags)[V111] > 0) {
+					_val13 = 2234;
+					series_stream("Rip popup", 7, 0, 111);
+				} else {
+					player_set_commands_allowed(true);
+				}
+				break;
+
+			case 2234:
+				player_set_commands_allowed(true);
+				break;
+
+			case 2240:
 				_ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x100, 0,
 					triggerMachineByHashCallbackNegative, "rip talks wolf");
 				player_update_info();
@@ -532,6 +787,12 @@ void Room402::daemon() {
 				_val13 = 2242;
 				break;
 
+			case 2242:
+				sendWSMessage_10000(1, _ripEnterLeave, _ripPaysWolfie, 1, 16, 214,
+					_ripPaysWolfie, 16, 16, 0);
+				_flags111 = _G(flags)[V111];
+				break;
+
 			case 2250:
 				sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 16, 1, 111,
 					_wolfWantsMoney, 1, 1, 0);
diff --git a/engines/m4/riddle/rooms/section4/room402.h b/engines/m4/riddle/rooms/section4/room402.h
index 965e240fea5..a1ece6070c1 100644
--- a/engines/m4/riddle/rooms/section4/room402.h
+++ b/engines/m4/riddle/rooms/section4/room402.h
@@ -71,6 +71,7 @@ private:
 	int _machine1Series = 0;
 	int _flags111 = 0;
 	machine *_turtlePopupMach = nullptr;
+	int _letter = 0;
 
 	void conv402a();
 	void conv402a777();




More information about the Scummvm-git-logs mailing list