[Scummvm-git-logs] scummvm master -> 5b439f2e0483397338c915f8ffd09ceb910dd2c1

Strangerke noreply at scummvm.org
Mon Nov 11 18:17:15 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:
5b439f2e04 M4: RIDDLE: Room 204: partial implementation of daemon (up to 584), fix 2 issues in daemon 555 and 559


Commit: 5b439f2e0483397338c915f8ffd09ceb910dd2c1
    https://github.com/scummvm/scummvm/commit/5b439f2e0483397338c915f8ffd09ceb910dd2c1
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2024-11-11T19:12:57+01:00

Commit Message:
M4: RIDDLE: Room 204: partial implementation of daemon (up to 584), fix 2 issues in daemon 555 and 559

Changed paths:
    engines/m4/riddle/rooms/section2/room204.cpp
    engines/m4/riddle/rooms/section2/room204.h


diff --git a/engines/m4/riddle/rooms/section2/room204.cpp b/engines/m4/riddle/rooms/section2/room204.cpp
index f23ea623130..0bf5a584c39 100644
--- a/engines/m4/riddle/rooms/section2/room204.cpp
+++ b/engines/m4/riddle/rooms/section2/room204.cpp
@@ -551,6 +551,7 @@ void Room204::daemon() {
 	case 555:
 		kernel_timing_trigger(1, 630, nullptr);
 		kernel_timing_trigger(1, 578, nullptr);
+		player_set_commands_allowed(true);
 
 		break;
 
@@ -578,6 +579,8 @@ void Room204::daemon() {
 	case 559:
 		kernel_timing_trigger(60, 630, nullptr);
 		kernel_timing_trigger(1, 578, nullptr);
+		player_set_commands_allowed(true);
+
 		break;
 
 	case 567:
@@ -929,15 +932,390 @@ void Room204::daemon() {
 		break;
 
 	case 574:
+		_fieldC0_trigger = -1;
+		_fieldCC_trigger = -1;
+		_fieldD8 = -1;
+		_fieldC8_trigger = -1;
+		_fieldF4 = -1;
+		ws_get_walker_info(_mcMach, &_field10C_x, &_field110_y, &_field118_scale, &_field11C_depth, &_field114_facing);
+
+		if (_field110_y == 323)
+			_field11C_depth = 3840;
+
+		_meiChenOtherStatesMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, _field10C_x, _field110_y, _field118_scale, _field11C_depth, _fieldDC, triggerMachineByHashCallback, "Mei Chen other states machine");
+		_safariShadow2Mach = series_place_sprite("SAFARI SHADOW 2", 0, _field10C_x, _field110_y, _field118_scale, 3840);
+
+		switch (_fieldD4) {
+		case 3:
+			_meiTrekRtHandOutPos2Series = series_load("MEI TREK RT HAND OUT POS2", -1, nullptr);
+			sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekRtHandOutPos2Series, 1, 1, 576, _meiTrekRtHandOutPos2Series, 1, 1, 0);
+			_fieldD0 = 3;
+			break;
+
+		case 4:
+			_meiTalksPos3Series = series_load("MEI TALKS POS3", -1, nullptr);
+			sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTalksPos3Series, 1, 1, 576, _meiTalksPos3Series, 1, 1, 0);
+			_fieldD0 = 4;
+
+			break;
+
+		case 5:
+			_meiTrekTalkerPos4Series = series_load("MEI TREK TALKER POS4", -1, nullptr);
+			sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekTalkerPos4Series, 1, 1, 576, _meiTrekTalkerPos4Series, 1, 1, 0);
+			_fieldD0 = 5;
+
+			break;
+
+		default:
+			break;
+		}
+
+		if (_field108 == 1)
+			subDaemon_ADB7C();
+
+		if (_field108 == 0)
+			ws_hide_walker(_mcMach);
+
+		break;
+
 	case 576:
+		if (_fieldD0 == 3 && _fieldD4 == 3 && _fieldBC_trigger != -1) {
+			kernel_trigger_dispatchx(_fieldBC_trigger);
+			_fieldBC_trigger = -1;
+		}
+
+		if (_fieldD0 == 4 && _fieldD4 == 4 && _fieldBC_trigger != -1) {
+			kernel_trigger_dispatchx(_fieldBC_trigger);
+			_fieldBC_trigger = -1;
+		}
+
+		if (_fieldD0 == 5 && _fieldD4 == 5 && _fieldBC_trigger != -1) {
+			kernel_trigger_dispatchx(_fieldBC_trigger);
+			_fieldBC_trigger = -1;
+		}
+
+		if (_fieldD0 == 6 && _fieldD4 == 6 && _fieldC0_trigger != -1) {
+			kernel_trigger_dispatchx(_fieldC0_trigger);
+			_fieldC0_trigger = -1;
+		}
+
+		if (_fieldD0 == 7 && _fieldD4 == 7 && _fieldCC_trigger != -1) {
+			kernel_trigger_dispatchx(_fieldCC_trigger);
+			_fieldCC_trigger = -1;
+		}
+
+		if (_fieldD8 != 1) {
+			kernel_timing_trigger(1, 577, nullptr);
+			break;
+		}
+
+		if (!_field108) {
+			ws_unhide_walker(_mcMach);
+		} else {
+			switch (_fieldD0) {
+			case 3:
+				_field114_facing = (_fieldDC == 1) ? 10 : 2;
+				break;
+
+			case 4:
+				_field114_facing = (_fieldDC == 1) ? 9 : 3;
+				break;
+
+			case 5:
+				_field114_facing = (_fieldDC == 1) ? 8 : 4;
+				break;
+
+			default:
+				break;
+			}
+
+			ws_walk_load_walker_series(S8_SHADOW_DIRS2, S8_SHADOW_NAMES2, false);
+			ws_walk_load_walker_series(S8_SHADOW_DIRS1, S8_SHADOW_NAMES1, false);
+			_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, _field10C_x, _field110_y, _field114_facing, Walker::player_walker_callback, "mc");
+			kernel_timing_trigger(60, 630, nullptr);
+			if (_fieldC8_trigger != -1) {
+				kernel_trigger_dispatchx(_fieldC8_trigger);
+				_fieldC8_trigger = -1;
+			}
+		}
+
+		terminateMachine(_meiChenOtherStatesMach);
+		_meiChenOtherStatesMach = 0;
+		_fieldDC = 0;
+		terminateMachine(_safariShadow2Mach);
+
+		switch (_fieldD0) {
+		case 3:
+			series_unload(_meiTrekRtHandOutPos2Series);
+			break;
+
+		case 4:
+			series_unload(_meiTalksPos3Series);
+			break;
+
+		case 5:
+			series_unload(_meiTrekTalkerPos4Series);
+			break;
+
+		default:
+			break;
+
+		}
+
+		_field108 = 0;
+
+		break;
+
 	case 577:
+		switch (_fieldD0) {
+		case 3:
+			switch (_fieldD4) {
+			case 3:
+				sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekRtHandOutPos2Series, 1, 1, 576, _meiTrekRtHandOutPos2Series, 1, 1, 0);
+				break;
+
+			case 6:
+				sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekRtHandOutPos2Series, 1, 10, 576, _meiTrekRtHandOutPos2Series, 10, 10, 0);
+				_fieldD0 = 6;
+
+				break;
+
+			case 7:
+				sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiShowsRipHerPassesSeries, 1, 6, 576, _meiShowsRipHerPassesSeries, 6, 6, 0);
+				_fieldD0 = 7;
+
+				break;
+
+			default:
+				break;
+			}
+
+			break;
+		case 4:
+			switch (_fieldD4) {
+			case 4:
+				sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTalksPos3Series, 1, 1, 576, _meiTalksPos3Series, 1, 1, 0);
+				break;
+
+			case 17: {
+				int32 rnd = imath_ranged_rand(1, 4);
+				sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTalksPos3Series, rnd, rnd, 576, _meiTalksPos3Series, rnd, rnd, 0);
+
+				}
+				break;
+
+			default:
+				break;
+			}
+
+			break;
+
+		case 5:
+			switch (_fieldD4) {
+			case 5:
+				sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekTalkerPos4Series, 1, 1, 576, _meiTrekTalkerPos4Series, 1, 1, 0);
+				break;
+
+			case 13: {
+				int32 rnd = imath_ranged_rand(1, 4);
+				sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekTalkerPos4Series, rnd, rnd, 576, _meiTrekTalkerPos4Series, rnd, rnd, 0);
+
+			} break;
+
+			default:
+
+				break;
+			}
+
+			break;
+
+		case 6:
+			switch (_fieldD4) {
+			case 3:
+				sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekRtHandOutPos2Series, 10, 1, 576, _meiTrekRtHandOutPos2Series, 1, 1, 0);
+				_fieldD0 = 3;
+
+				break;
+
+			case 6:
+				sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekRtHandOutPos2Series, 10, 10, 576, _meiTrekRtHandOutPos2Series, 10, 10, 0);
+				break;
+
+			default:
+
+				break;
+			}
+
+			break;
+
+		case 7:
+			switch (_fieldD4) {
+			case 7:
+				sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiShowsRipHerPassesSeries, 6, 6, 576, _meiShowsRipHerPassesSeries, 6, 6, 0);
+
+			// Intentional fallthrough
+			case 3:
+				sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiShowsRipHerPassesSeries, 6, 1, 576, _meiShowsRipHerPassesSeries, 1, 1, 0);
+				_fieldD0 = 3;
+
+				break;
+
+			default:
+				break;
+			}
+
+			break;
+
+		default:
+			break;
+		}
+
+		break;
+
 	case 578:
+		_field128 = 1;
+		_field124 = 1;
+		_field12C_triggerNum = -1;
+		_field130 = 0;
+
+		_acolyteGuardingEntranceMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 2048, 0, triggerMachineByHashCallback, "Acolyte Guarding Entrance");
+		_acolyteSaysHaltSeries = series_load("ACOLYTE SAYS HALT", -1, nullptr);
+
+		sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 1, 1, 579, _acolyteSaysHaltSeries, 1, 1, 0);
+
+		_field128 = 1;
+
+		break;
+
 	case 579:
+		if (_field124 == 1 && _field128 == 1 && _field12C_triggerNum != -1) {
+			kernel_trigger_dispatchx(_field12C_triggerNum);
+			_field12C_triggerNum = -1;
+		}
+
+		if (_field130 == 1) {
+			terminateMachine(_acolyteGuardingEntranceMach);
+			_acolyteGuardingEntranceMach = nullptr;
+			series_unload(_acolyteSaysHaltSeries);
+		}
+
+		kernel_timing_trigger(1, 580, nullptr);
+
+		break;
+
 	case 580:
+		switch (_field128) {
+		case 1:
+			switch (_field124) {
+			case 1:
+				sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 1, 1, -1, _acolyteSaysHaltSeries, 1, 1, 0);
+				kernel_timing_trigger(60, 579, nullptr);
+
+				break;
+
+			case 2:
+				sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 1, 16, 579, _acolyteSaysHaltSeries, 16, 16, 0);
+				_field128 = 2;
+
+				break;
+
+			case 3:
+				ws_hide_walker(_G(my_walker));
+				_acolyteGrabsMalletSeries = series_load("ACOLYTE GRABS MALLET", -1, nullptr);
+				sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteGrabsMalletSeries, 1, 6, 579, _acolyteGrabsMalletSeries, 6, 6, 0);
+				_field128 = 3;
+				_field124 = 4;
+
+				break;
+			default:
+				break;
+			}
+
+			break;
+
+		case 2:
+			switch (_field124) {
+			case 1:
+				sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 16, 1, 579, _acolyteSaysHaltSeries, 1, 1, 0);
+				_field128 = 1;
+
+				break;
+
+			case 2:
+				sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 16, 16, 579, _acolyteSaysHaltSeries, 16, 16, 0);
+				break;
+
+			default:
+				break;
+			}
+
+		case 3:
+			switch (_field124) {
+			case 1:
+				ws_unhide_walker(_G(my_walker));
+				sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 1, 1, 579, _acolyteSaysHaltSeries, 1, 1, 0);
+				_field128 = 1;
+				hotspot_set_active(_G(currentSceneDef).hotspots, "MALLET", true);
+				_malletSpriteMach = series_place_sprite("MALLET SPRITE", 0, 0, 0, 100, 2304);
+				inv_move_object("MALLET", 204);
+				series_unload(_acolyteGrabsMalletSeries);
+
+				break;
+
+			case 3:
+				sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteGrabsMalletSeries, 6, 6, 579, _acolyteGrabsMalletSeries, 6, 6, 0);
+
+				break;
+
+			case 4:
+				sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteGrabsMalletSeries, 7, 43, 579, _acolyteGrabsMalletSeries, 43, 43, 0);
+				digi_play("204_s01", 1, 255, -1, -1);
+				_field124 = 1;
+
+				break;
+
+			default:
+				break;
+			}
+
+			break;
+
+		default:
+			break;
+		}
+
+		break;
+
 	case 581:
+		if (_fieldE0 != _fieldE4_walkerDestX) {
+			_fieldD4 = 3;
+			_fieldBC_trigger = kernel_trigger_create(582);
+		}
+
+		break;
+
 	case 582:
+		_fieldD8 = 1;
+		kernel_timing_trigger(1, 583, nullptr);
+
+		break;
+
 	case 583:
+		addMovingMeiHotspot();
+		DisposePath(_mcMach->walkPath);
+		_mcMach->walkPath = CreateCustomPath(_fieldE4_walkerDestX, 323, -1);
+		ws_custom_walk(_mcMach, 2, 584, true);
+		kernel_timing_trigger(1, 630, nullptr);
+
+		break;
+
 	case 584:
+		_fieldE0 = _fieldE4_walkerDestX;
+		kernel_timing_trigger(1, 578);
+		player_set_commands_allowed(true);
+
+		break;
+
 	case 588:
 	case 590:
 	case 592:
@@ -1024,6 +1402,11 @@ void Room204::daemon() {
 	case 703:
 	case 708:
 	case 709:
+		kernel_timing_trigger(1, 578, nullptr);
+		player_set_commands_allowed(true);
+
+		break;
+
 	case 710:
 	case 711:
 	case 712:
@@ -1092,6 +1475,10 @@ void Room204::addLookMalletHotspot() {
 	_G(currentSceneDef).hotspots = hotspot_add(_G(currentSceneDef).hotspots, spot, true);
 }
 
+void Room204::subDaemon_ADB7C() {
+	warning("STUB - subDaemon_ADB7C");
+}
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/section2/room204.h b/engines/m4/riddle/rooms/section2/room204.h
index 1a88a266266..e32d7582608 100644
--- a/engines/m4/riddle/rooms/section2/room204.h
+++ b/engines/m4/riddle/rooms/section2/room204.h
@@ -45,6 +45,8 @@ private:
 	void deleteMalletHotspot();
 	void addLookMalletHotspot();
 
+	void subDaemon_ADB7C();
+
 	int32 _field4 = 0;
 	int32 _field10 = 0;
 	int32 _field14 = 0;
@@ -60,7 +62,9 @@ private:
 	int32 _fieldBC_trigger = 0;
 	int32 _fieldC0_trigger = 0;
 	int32 _fieldC4 = 0;
+	int32 _fieldC8_trigger = 0;
 	int32 _fieldCC_trigger = 0;
+	int32 _fieldD0 = 0;
 	int32 _fieldD4 = 0;
 	int32 _fieldD8 = 0;
 	int32 _fieldDC = 0;
@@ -68,31 +72,49 @@ private:
 	int32 _fieldE4_walkerDestX = 0;
 	int32 _fieldEC = 0;
 	int32 _fieldF0 = 0;
+	int32 _fieldF4 = 0;
 	int32 _fieldFC_infoX = 0;
 	int32 _field100_infoY = 0;
 	int32 _field104 = 0;
 	int32 _field108 = 0;
+	int32 _field10C_x = 0;
+	int32 _field110_y = 0;
+	int32 _field114_facing = 0;
+	int32 _field118_scale = 0;
+	int32 _field11C_depth = 0;
+	int32 _field124 = 0;
+	int32 _field128 = 0;
+	int32 _field12C_triggerNum = 0;
+	int32 _field130 = 0;
 	int32 _field180 = 0;
 	int32 _field184 = 0;
 	int32 _field188 = 0;
 
+	int32 _acolyteGrabsMalletSeries = 0;
+	int32 _acolyteSaysHaltSeries;
 	int32 _field90_series = 0;
 	int32 _ripTrekHandTalkPos3Series = 0;
 	int32 _courtyardGongSeries = 0;
 	int32 _malletSpriteSeries = 0;
 	int32 _meiShowsRipHerPassesSeries = 0;
+	int32 _meiTalksPos3Series = 0;
+	int32 _meiTrekRtHandOutPos2Series = 0;
+	int32 _meiTrekTalkerPos4Series = 0;
 	int32 _ripDropsSeries = 0;
 	int32 _ripTrekHeadTurnPos5Series = 0;
 	int32 _ripTrekLHandTalkPos4Series = 0;
 	int32 _ripTrekLowReachPos2Series = 0;
 	int32 _ripTrekTalkerPos3Series = 0;
 
+	machine *_acolyteGuardingEntranceMach = nullptr;
 	machine *_courtyardGongMach = nullptr;
 	machine *_mcMach = nullptr;
 	machine *_malletSpriteMach = nullptr;
 	machine *_ripDeltaMachineStateMach = nullptr;
 	machine *_safariShadow3Mach = nullptr;
 	machine *_silverButterflyCoinMach = nullptr;
+	machine * _meiChenOtherStatesMach = nullptr;
+	machine * _safariShadow2Mach = nullptr;
 };
 
 } // namespace Rooms




More information about the Scummvm-git-logs mailing list