[Scummvm-git-logs] scummvm master -> 1a6458d4941ce98c1ee97d4fa9c4c9ebb6c3f157

Strangerke noreply at scummvm.org
Tue Oct 15 23:47:36 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:
1a6458d494 M4: RIDDLE: Finish implementation of room 804 (parser is complete)


Commit: 1a6458d4941ce98c1ee97d4fa9c4c9ebb6c3f157
    https://github.com/scummvm/scummvm/commit/1a6458d4941ce98c1ee97d4fa9c4c9ebb6c3f157
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2024-10-16T01:47:18+01:00

Commit Message:
M4: RIDDLE: Finish implementation of room 804 (parser is complete)

Changed paths:
    engines/m4/riddle/rooms/section8/room804.cpp
    engines/m4/riddle/rooms/section8/room804.h


diff --git a/engines/m4/riddle/rooms/section8/room804.cpp b/engines/m4/riddle/rooms/section8/room804.cpp
index 4676db68a73..2d5981f1100 100644
--- a/engines/m4/riddle/rooms/section8/room804.cpp
+++ b/engines/m4/riddle/rooms/section8/room804.cpp
@@ -47,9 +47,9 @@ int32 Room804::subCE498(int32 val1) {
 	return -1;
 }
 
-void Room804::subD7916(machine *machine, int32 val1) {
-	int32 num = val1;
-	if (val1 == 0)
+void Room804::subD7916(machine *machine, int32 trigger) {
+	int32 num = trigger;
+	if (trigger == 0)
 		num = -1;
 
 	_G(globals)[GLB_TEMP_4] = kernel_trigger_create(num);
@@ -384,7 +384,7 @@ void Room804::parser() {
 			|| scumm_strnicmp(_G(player).noun, "3rd", 3) == 0 || scumm_strnicmp(_G(player).noun, "4th", 3) == 0
 			|| scumm_strnicmp(_G(player).noun, "5th", 3) == 0 || scumm_strnicmp(_G(player).noun, "6th", 3) == 0
 			|| scumm_strnicmp(_G(player).noun, "7th", 3) == 0) {
-			_field64 = _G(player).noun[0] - 0x30; // Thus a number between 1 and 7
+			_coordArrayId = _G(player).noun[0] - 0x30; // Thus a number between 1 and 7
 			_G(kernel).trigger_mode = KT_DAEMON;
 			kernel_trigger_dispatchx(kernel_trigger_create(15));
 		}
@@ -465,23 +465,268 @@ void Room804::parser() {
 		else if (player_said("fallen soldier") || player_said("fallen horse")) {
 			switch (_G(kernel).trigger) {
 			case -1:
+				player_set_commands_allowed(false);
+				player_update_info(_G(my_walker), &_G(player_info));
+				_savedPlayerInfoFacing = _G(player_info).facing;
+				_rptldSerie = series_load("rptld1a", -1, nullptr);
+				setGlobals3(_rptldSerie, 1, 6);
+				subD7916(_G(my_walker), 10);
+
+				break;
+
 			case 10:
+				if (player_said("fallen soldier"))
+					digi_play("com062", 1, 255, 20, 997);
+				else
+					digi_play("814r18", 1, 255, 20, -1);
+
+				break;
+
 			case 20:
+				setGlobals3(_rptldSerie, 6, 1);
+				subD7916(_G(my_walker), 30);
+				break;
+
 			case 30:
+				player_set_commands_allowed(true);
+				series_unload(_rptldSerie);
+				ws_demand_facing(_G(my_walker), _savedPlayerInfoFacing);
 				break;
 
 			default:
 				break;
-
 			}
 		} // player_said("fallen soldier") || player_said("fallen horse")
 
+		else if (player_said("mural"))
+			digi_play("com064", 1, 255, -1, 997);
+
+		else if (player_said("chariot") || player_said("chariot "))
+			digi_play("com063", 1, 255, -1, 997);
+
+		else if (player_said("horse"))
+			digi_play("com101", 1, 255, -1, 997);
+
+		else if (scumm_strnicmp(_G(player).noun, "mei chen", 8) == 0) {
+			if (_G(kernel).trigger == -1) {
+				player_update_info(_G(my_walker), &_G(player_info));
+				_savedPlayerInfoFacing = _G(player_info).facing;
+				_savedPlayerInfoX = _G(player_info).x;
+				_savedPlayerInfoY = _G(player_info).y;
+				player_update_info(_mcTrekMach, &_G(player_info));
+				if (_G(player_info).x >= _savedPlayerInfoX) {
+					if (_G(player_info).x - _savedPlayerInfoX <= 30)
+						ws_walk(_G(my_walker), _savedPlayerInfoX, _savedPlayerInfoY, nullptr, 10, 5, true);
+					else
+						ws_walk(_G(my_walker), _savedPlayerInfoX, _savedPlayerInfoY, nullptr, 10, 4, true);
+				} else {
+					if (_savedPlayerInfoX - _G(player_info).x <= 30)
+						ws_walk(_G(my_walker), _savedPlayerInfoX, _savedPlayerInfoY, nullptr, 10, 7, true);
+					else
+						ws_walk(_G(my_walker), _savedPlayerInfoX, _savedPlayerInfoY, nullptr, 10, 8, true);
+				}
+
+			} else if (_G(kernel).trigger == 10) {
+				digi_play("COM043", 1, 255, -1, 997);
+			}
+
+		} // if (player_said("horse") && scumm_strnicmp(_G(player).noun, "mei chen", 8) == 0)
+
+		else if (player_said("soldier") || player_said("soldier "))
+		// The original has two separate checks with the same underlying code => merged
+			digi_play("com074", 1, 255, -1, 997);
+
+		else
+			_G(player).command_ready = true;
+
 		break; // caty case 1
 
 	case 2:
+		if (player_said("chariot")) {
+			switch (_currentRoom) {
+			case 834:
+				digi_play("834r15", 1, 255, -1, -1);
+				break;
+
+			case 844:
+				digi_play("814r21", 1, 255, -1, -1);
+				break;
+
+			default:
+				digi_play("804r20", 1, 255, -1, -1);
+				break;
+			}
+		} // if (player_said("chariot"))
+
+		else if (player_said("chariot "))
+			digi_play("814r21", 1, 255, -1, -1);
+
+		else if (player_said("horse") || player_said("fallen horse"))
+			// The original has two separate checks with the same underlying code => merged
+			digi_play("com065", 1, 255, -1, 997);
+
+		else if (player_said("soldier") || player_said("soldier "))
+			// The original has two separate checks with the same underlying code => merged
+			digi_play("com066", 1, 255, -1, 997);
+
+		else if (player_said("lit urn"))
+			digi_play("com067", 1, 255, -1, 997);
+
+		else if (player_said("unlit urn"))
+			digi_play("com068", 1, 255, -1, 997);
+
+		else if (player_said("wooden beam")) {
+			switch (_G(kernel).trigger) {
+			case -1:
+				if (inv_object_in_scene("wooden beam", 844)) {
+					player_set_commands_allowed(false);
+					_ripTrekLowReach = series_load("RIP TREK LOW REACH POS2", -1, nullptr);
+					setGlobals3(_ripTrekLowReach, 1, 16);
+					subD7916(_G(my_walker), 10);
+				} else
+					_G(player).command_ready = true;
+
+				break;
+
+			case 10:
+				inv_give_to_player("WOODEN BEAM");
+				kernel_examine_inventory_object("PING WOODEN BEAM", _G(master_palette), 5, 1, 410, 250, 20, nullptr, -1);
+
+				break;
+
+			case 20:
+				terminateMachine(_unkMach3);
+				setGlobals3(_ripTrekLowReach, 16, 1);
+				subD7916(_G(my_walker), 30);
+				digi_play("844r22", 1, 255, -1, -1);
+
+				break;
+
+			case 30:
+				player_set_commands_allowed(true);
+				series_unload(_ripTrekLowReach);
+				hotspot_set_active(_G(currentSceneDef).hotspots, "wooden beam", false);
+				ws_demand_facing(_G(my_walker), 2);
+
+				break;
+
+			default:
+				break;
+			}
+		} // if (player_said("wooden beam"))
+
+		break; // caty case 2
+
 	case 3:
-	case 4:
+		if (scumm_strnicmp(_G(player).noun, "mei chen", 8) == 0) {
+			switch (_G(kernel).trigger) {
+			case -1:
+				player_set_commands_allowed(false);
+				_ripTakerPos5 = series_load("RIP TALKER POS 5", -1, nullptr);
+				setGlobals1(_ripTakerPos5, 1, 4, 1, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+				sendWSMessage_110000(_G(my_walker), -1);
+				_savedRandom = imath_ranged_rand(1, 4);
+				switch (_savedRandom) {
+				case 1:
+					digi_play("com044", 1, 255, 10, 997);
+					break;
+
+				case 2:
+					digi_play("com045", 1, 255, 10, 997);
+					break;
+
+				case 3:
+					digi_play("com046", 1, 255, 10, 997);
+					break;
+
+				default:
+					digi_play("com047", 1, 255, 10, 997);
+					break;
+				}
+
+				break;
+
+			case 10:
+				player_set_commands_allowed(true);
+				sendWSMessage_150000(_G(my_walker), -1);
+				series_unload(_ripTakerPos5);
+				_savedRandom = imath_ranged_rand(1, 4);
+				switch (_savedRandom) {
+				case 1:
+					digi_play("com048", 1, 255, -1, 997);
+					break;
+
+				case 2:
+					digi_play("com049", 1, 255, -1, 997);
+					break;
+
+				case 3:
+					digi_play("com050", 1, 255, -1, 997);
+					break;
+
+				default:
+					digi_play("com051", 1, 255, -1, 997);
+					break;
+				}
+
+				break;
+
+			default:
+				break;
+			}
+		} // if (scumm_strnicmp(_G(player).noun, "mei chen", 8) == 0)
+
+		else
+			_G(player).command_ready = true;
+
+		break; // caty case 3
+
 	case 5:
+		switch (_G(kernel).trigger) {
+		case -1:
+			if (player_said("west")) {
+				_savedNextRoom = 803;
+				if (_currentRoom == 804 || _currentRoom == 814 || _currentRoom == 844)
+					ws_walk(_G(my_walker), -10, 325, nullptr, 10, 3, true);
+				else if (_currentRoom == 824)
+					ws_walk(_G(my_walker), -10, 328, nullptr, 10, 3, true);
+				else if (_currentRoom == 834)
+					ws_walk(_G(my_walker), -10, 330, nullptr, 10, 3, true);
+			} else {
+				_savedNextRoom = 805;
+				if (_currentRoom == 804 || _currentRoom == 814 || _currentRoom == 844)
+					ws_walk(_G(my_walker), 1925, 325, nullptr, 10, 3, true);
+				else if (_currentRoom == 824)
+					ws_walk(_G(my_walker), 1925, 328, nullptr, 10, 3, true);
+				else if (_currentRoom == 834)
+					ws_walk(_G(my_walker), 1925, 330, nullptr, 10, 3, true);
+			}
+
+			break;
+
+		case 10:
+			player_set_commands_allowed(false);
+			if (_G(flags)[V276] == 0) {
+				setGlobals3(_meiHandsBehindBack, 17, 1);
+				subD7916(_mcTrekMach, -1);
+			}
+			disable_player_commands_and_fade_init(20);
+
+			break;
+
+		case 20:
+			_G(game).new_room = _savedNextRoom;
+			adv_kill_digi_between_rooms(false);
+			digi_preload("950_s29", -1);
+			digi_play_loop("950_s29", 3, 255, -1, -1);
+
+			break;
+		default:
+			break;
+		}
+
+		break; // caty case 5
+
 	default:
 		break;
 	}
@@ -710,23 +955,23 @@ void Room804::daemon() {
 	case 15:
 		switch (_currentRoom) {
 		case 804:
-			ws_walk(_G(my_walker), _dword1948BC[_field64], 321, nullptr, 16, 3, true);
+			ws_walk(_G(my_walker), _dword1948BC[_coordArrayId], 321, nullptr, 16, 3, true);
 			break;
 
 		case 814:
-			ws_walk(_G(my_walker), _dword1948D8[_field64], 321, nullptr, 16, 3, true);
+			ws_walk(_G(my_walker), _dword1948D8[_coordArrayId], 321, nullptr, 16, 3, true);
 			break;
 
 		case 824:
-			ws_walk(_G(my_walker), _dword1948F4[_field64], 321, nullptr, 16, 3, true);
+			ws_walk(_G(my_walker), _dword1948F4[_coordArrayId], 321, nullptr, 16, 3, true);
 			break;
 
 		case 834:
-			ws_walk(_G(my_walker), _dword194910[_field64], 321, nullptr, 16, 3, true);
+			ws_walk(_G(my_walker), _dword194910[_coordArrayId], 321, nullptr, 16, 3, true);
 			break;
 
 		case 844:
-			ws_walk(_G(my_walker), _dword19492C[_field64], 321, nullptr, 16, 3, true);
+			ws_walk(_G(my_walker), _dword19492C[_coordArrayId], 321, nullptr, 16, 3, true);
 			break;
 
 		default:
@@ -737,15 +982,15 @@ void Room804::daemon() {
 	case 16: {
 		player_set_commands_allowed(false);
 		ws_hide_walker(_G(my_walker));
-		int32 retVal = subCE498(_field64);
+		int32 retVal = subCE498(_coordArrayId);
 		if (retVal > 0) {
 			terminateMachine(_machArr[retVal]);
 			_machArr[retVal] = nullptr;
 		}
 
-		getSeriesName(_field64, true);
+		getSeriesName(_coordArrayId, true);
 		_dynSerie1 = series_load(_currentSeriesName.c_str(), -1, nullptr);
-		retVal = subCE52E(_field64);
+		retVal = subCE52E(_coordArrayId);
 		switch (retVal) {
 		case 1:
 			_dynSerie1Mach = series_play(_currentSeriesName.c_str(), 766, 0, 18, 5, 0, 100, 0, 0, 0, 9);
@@ -774,7 +1019,7 @@ void Room804::daemon() {
 		break;
 
 	case 19:
-		if (subCE498(_field64) < 0) {
+		if (subCE498(_coordArrayId) < 0) {
 			kernel_timing_trigger(120, 20, nullptr);
 			digi_play("950_s32", 2, 255, -1, -1);
 		} else {
@@ -785,7 +1030,7 @@ void Room804::daemon() {
 	case 20:
 		terminateMachine(_dynSerie1Mach);
 		series_play(_currentSeriesName.c_str(), 766, 2, 21, 5, 0, 100, 0, 0, 0, -1);
-		switch (subCE52E(_field64)) {
+		switch (subCE52E(_coordArrayId)) {
 		case 1:
 			_G(flags)[V271] = 0;
 			_G(flags)[V272] = 0;
@@ -812,11 +1057,11 @@ void Room804::daemon() {
 		series_unload(_dynSerie1);
 		ws_unhide_walker(_G(my_walker));
 		ws_demand_facing(_G(my_walker), 3);
-		int32 retVal = subCE498(_field64);
+		int32 retVal = subCE498(_coordArrayId);
 		if (retVal < 0) {
 			digi_play("com066", 1, 255, -1, 997);
 		} else {
-			getSeriesName(_field64, false);
+			getSeriesName(_coordArrayId, false);
 			_machArr[retVal] = series_play(_currentSeriesName.c_str(), 768, 16, -1, 0, 0, 100, 0, 0, 0, -1);
 		}
 		}
diff --git a/engines/m4/riddle/rooms/section8/room804.h b/engines/m4/riddle/rooms/section8/room804.h
index c25f8043820..86c8a0adf3f 100644
--- a/engines/m4/riddle/rooms/section8/room804.h
+++ b/engines/m4/riddle/rooms/section8/room804.h
@@ -40,12 +40,12 @@ public:
 
 private:
 	int32 _byte1A19BC = 0;
-	int32 _field64 = 0;
 	int32 _field68 = 0;
 	int32 _field70 = 0;
 	int32 _unkArray[8];
 
 	int32 _case7RandVal = 0;
+	int32 _coordArrayId = 0;
 	int32 _counter1 = 0;
 	int32 _currentRoom = 0;
 	int32 _dynSerie1 = 0;
@@ -56,6 +56,14 @@ private:
 	int32 _meiHandsBehindBack = 0;
 	int32 _ripAttemptsPush = 0;
 	int32 _ripLooksAround = 0;
+	int32 _ripTakerPos5 = 0;
+	int32 _ripTrekLowReach = 0;
+	int32 _rptldSerie = 0;
+	int32 _savedNextRoom = 0;
+	int32 _savedPlayerInfoFacing = 0;
+	int32 _savedPlayerInfoX = 0;
+	int32 _savedPlayerInfoY = 0;
+	int32 _savedRandom = 0;
 	int32 _unkSerie1 = 0;
 	int32 _unkSerie2 = 0;
 	int32 _var1 = 0;
@@ -73,9 +81,10 @@ private:
 	machine *_ripPushMach = nullptr;
 	machine *_unkMach1 = nullptr;
 	machine *_unkMach2 = nullptr;
+	machine *_unkMach3 = nullptr;
 
 	int32 subCE498(int32 val1);
-	void subD7916(machine *machine, int32 val1);
+	void subD7916(machine *machine, int32 trigger);
 	int32 subCE52E(int32 val1);
 	void moveScreen(int32 dx, int32 dy);
 	void getSeriesName(int32 val1, bool true_or_False);




More information about the Scummvm-git-logs mailing list