[Scummvm-git-logs] scummvm master -> 1777de7e8e437d22696e641d193648ec9094e3e8

dreammaster noreply at scummvm.org
Fri Sep 27 04:56:35 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:
1777de7e8e M4: RIDDLE: In progress room 608 parser


Commit: 1777de7e8e437d22696e641d193648ec9094e3e8
    https://github.com/scummvm/scummvm/commit/1777de7e8e437d22696e641d193648ec9094e3e8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-26T21:56:24-07:00

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

Changed paths:
    engines/m4/riddle/rooms/room.h
    engines/m4/riddle/rooms/section6/room607.cpp
    engines/m4/riddle/rooms/section6/room608.cpp
    engines/m4/riddle/rooms/section6/room608.h


diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 2485c02cdaf..27d6a0adab2 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -32,6 +32,9 @@ namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+#define HAS(ITEM) (player_said(ITEM) && inv_player_has(ITEM))
+#define HERE(ITEM) (player_said(ITEM) && inv_object_is_here(ITEM))
+
 class Room : public M4::Room {
 private:
 	static int _ripSketching;
diff --git a/engines/m4/riddle/rooms/section6/room607.cpp b/engines/m4/riddle/rooms/section6/room607.cpp
index 3baa31ef095..d5868250eb8 100644
--- a/engines/m4/riddle/rooms/section6/room607.cpp
+++ b/engines/m4/riddle/rooms/section6/room607.cpp
@@ -239,7 +239,7 @@ void Room607::parser() {
 			if (!_G(flags)[V198])
 				terminateMachineAndNull(_mud);
 
-				ws_unhide_walker();
+			ws_unhide_walker();
 			player_set_commands_allowed(true);
 			break;
 		case 6:
diff --git a/engines/m4/riddle/rooms/section6/room608.cpp b/engines/m4/riddle/rooms/section6/room608.cpp
index 2b5f8477b83..7ac6ac51d24 100644
--- a/engines/m4/riddle/rooms/section6/room608.cpp
+++ b/engines/m4/riddle/rooms/section6/room608.cpp
@@ -203,11 +203,350 @@ void Room608::daemon() {
 }
 
 void Room608::pre_parser() {
-
+	bool takeFlag = player_said("take");
+	bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
+
+	if (player_said("HORN/PULL CORD", "WATER") && !_G(flags)[GLB_TEMP_3])
+		_G(player).resetWalk();
+	if (player_said("POLE", "DRIFTWOOD STUMP ") && inv_player_has("POLE"))
+		_G(player).resetWalk();
+	if (useFlag && HERE("POLE"))
+		_G(player).resetWalk();
+	if (player_said("DRIFTWOOD STUMP", "LARGE HOLE") && inv_player_has("DRIFTWOOD STUMP"))
+		_G(player).resetWalk();
+	if (takeFlag && HAS("POLE"))
+		_G(player).resetWalk();
 }
 
 void Room608::parser() {
+	bool lookFlag = player_said_any("look", "look at");
+	bool talkFlag = player_said_any("talk", "talk to");
+	bool takeFlag = player_said("take");
+	bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
+
+	if (player_said("conv608a")) {
+		conv608a();
+	} else if (_G(kernel).trigger == 747) {
+		_val3 = 1;
+		_val4 = 2;
+	} else if (talkFlag && player_said("old woman")) {
+		if (_G(flags)[GLB_TEMP_7]) {
+			digi_play(_G(flags)[V203] > 2 ? "608r04" : "608r35", 1);
+		} else {
+			if (_G(flags)[V203] >= 2 || !_G(flags)[V034]) {
+				player_set_commands_allowed(false);
+				_G(flags)[V034] = 1;
+
+				player_update_info();
+				_shadow = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0,
+					_G(player_info).scale, _G(player_info).x, _G(player_info).y);
+				ws_hide_walker();
+				_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+					triggerMachineByHashCallbackNegative, "rip");
+
+				_G(kernel).trigger_mode = KT_DAEMON;
+				sendWSMessage_10000(1, _ripley, _rp09, 1, 23, 300, _rp09, 23, 23, 0);
+				_G(kernel).trigger_mode = KT_PARSE;
+
+				_val5 = 0;
+				_val4 = 0;
+				_val3 = 6;
+				conv_load("conv608a", 10, 10, 747);
+				conv_export_value_curr(_G(flags)[V203] >= 3 ? 1 : 0, 0);
+				conv_play();
+			} else {
+				digi_play("608r35", 1);
+			}
+		}
+	} else if (takeFlag && player_said("DRIFTWOOD STUMP") && takeStump1()) {
+		// No implementation
+	} else if (takeFlag && player_said("DRIFTWOOD PUFFIN") && takePuffin()) {
+		// No implementation
+	} else if (player_said("DRIFTWOOD STUMP", "LARGE HOLE") && stumpHole()) {
+		// No implementation
+	} else if (takeFlag && player_said("DRIFTWOOD STUMP ") && takeStump2()) {
+		// No implementation
+	} else if (takeFlag && player_said("LIGHTER") && takeLighter()) {
+		// No implementation
+	} else if (player_said("HORN/PULL CORD/WATER", "WATER")) {
+		digi_play("608r72", 1);
+	} else if (player_said("DRIFTWOOD STUMP") && player_said_any("STATUE", "STATUE ")) {
+		digi_play("com019", 1);
+	} else if (player_said("HORN/PULL CORD", "WATER") && hornCordWater()) {
+		// No implementation
+	} else if (lookFlag || useFlag) {
+		// TODO
+	}
+	// TODO
+	else {
+		return;
+	}
+
+	_G(player).command_ready = false;
+}
+
+void Room608::conv608a() {
+	const char *sound = conv_sound_to_play();
+	int who = conv_whos_talking();
+	int node = conv_current_node();
+	int entry = conv_current_entry();
+
+	if (_G(kernel).trigger == 1) {
+		if (who <= 0) {
+			_val3 = 6;
+			kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE);
+		} else if (who == 1) {
+			_val4 = 0;
+		}
+
+		conv_resume();
+
+	} else if (sound) {
+		if (who <= 0) {
+			if (node == 4 && entry == 0)
+				midi_play("eastiswo", 255, 0, -1, 949);
+			if ((node == 2 && entry == 1) || (node == 3 && entry == 2))
+				_val3 = 7;
+			else if ((node == 2 && entry == 0) || (node == 3 && entry == 1))
+				_val3 = 12;
+			else
+				_val3 = 5;
+		} else if (who == 1) {
+			if (node == 4)
+				_G(flags)[GLB_TEMP_7] = 1;
+			if (!(node == 5 && entry == 3))
+				_val4 = 1;
+		}
+
+		digi_play(sound, 1, 255, 1);
+	} else {
+		conv_resume();
+	}
+}
+
+bool Room608::takeStump1() {
+	switch (_G(kernel).trigger) {
+	case -1:
+		if (inv_object_in_scene("DRIFTWOOD STUMP", 600)) {
+			player_set_commands_allowed(false);
+			_ripLowReach = series_load("RIP LOW REACH POS1");
+			setGlobals1(_ripLowReach, 1, 10, 10, 10);
+			sendWSMessage_110000(2);
+			return true;
+		}
+		break;
+
+	case 2:
+		hotspot_set_active("DRIFTWOOD STUMP", false);
+		inv_give_to_player("DRIFTWOOD STUMP");
+		kernel_examine_inventory_object("PING DRIFTWOOD STUMP",
+			5, 1, 230, 244, 3);
+		return true;
+
+	case 3:
+		sendWSMessage_140000(5);
+		return true;
 
+	default:
+		break;
+	}
+
+	return false;
+}
+
+bool Room608::takePuffin() {
+	switch (_G(kernel).trigger) {
+	case -1:
+		if (inv_object_is_here("DRIFTWOOD PUFFIN")) {
+			player_set_commands_allowed(false);
+			_ripLowReach2 = series_load("RIP LOW REACH POS2");
+			setGlobals1(_ripLowReach2, 1, 16, 16, 16);
+			sendWSMessage_110000(2);
+			return true;
+		}
+		break;
+
+	case 2:
+		hotspot_set_active("DRIFTWOOD PUFFIN", false);
+		inv_give_to_player("DRIFTWOOD PUFFIN");
+		kernel_examine_inventory_object("PING DRIFTWOOD PUFFIN",
+			5, 1, 142, 239, 3);
+		terminateMachineAndNull(_puffin);
+		return true;
+
+	case 3:
+		sendWSMessage_140000(5);
+		return true;
+
+	case 5:
+		series_unload(_ripLowReach2);
+		break;
+
+	default:
+		break;
+	}
+
+	return false;
+}
+
+bool Room608::stumpHole() {
+	switch (_G(kernel).trigger) {
+	case -1:
+		if (inv_player_has("DRIFTWOOD STUMP")) {
+			ws_walk(474, 309, nullptr, 1, 2);
+			return true;
+		}
+		break;
+
+	case 1:
+		player_set_commands_allowed(false);
+		_ripLowReach = series_load("RIP LOW REACH POS1");
+		setGlobals1(_ripLowReach, 1, 10, 10, 10);
+		sendWSMessage_110000(2);
+		return true;
+
+	case 2:
+		hotspot_set_active("DRIFTWOOD STUMP ", true);
+		inv_move_object("DRIFTWOOD STUMP", 608);
+		_stump = series_show("608ST_UP", 0x400, 16);
+		sendWSMessage_140000(5);
+		digi_play("608_s02", 2);
+		return true;
+
+	case 5:
+		series_unload(_ripLowReach);
+		player_set_commands_allowed(true);
+		return true;
+
+	default:
+		break;
+	}
+
+	return false;
+}
+
+bool Room608::takeStump2() {
+	if (inv_object_is_here("POLE")) {
+		digi_play("608r74", 1);
+		return true;
+	} else {
+		switch (_G(kernel).trigger) {
+		case -1:
+			ws_walk(474, 309, nullptr, 1, 2);
+			return true;
+
+		case 1:
+			player_set_commands_allowed(false);
+			_ripLowReach = series_load("RIP LOW REACH POS1");
+			setGlobals1(_ripLowReach, 1, 10, 10, 10);
+			sendWSMessage_110000(2);
+			return true;
+
+		case 2:
+			hotspot_set_active("DRIFTWOOD STUMP ", false);
+			terminateMachineAndNull(_stump);
+			inv_give_to_player("DRIFTWOOD STUMP");
+			sendWSMessage_140000(5);
+			return true;
+
+		case 5:
+			series_unload(_ripLowReach);
+			player_set_commands_allowed(true);
+			return true;
+
+		default:
+			break;
+		}
+
+		return false;
+	}
+}
+
+bool Room608::takeLighter() {
+	switch (_G(kernel).trigger) {
+	case -1:
+		if (inv_object_is_here("LIGHTER")) {
+			player_set_commands_allowed(false);
+			_ripLowReach = series_load("RIP LOW REACH POS1");
+			return true;
+		}
+		break;
+
+	case 2:
+		hotspot_set_active("LIGHTER", false);
+		inv_give_to_player("LIGHTER");
+		kernel_examine_inventory_object("PING LIGHTER", 5, 1, 455, 250, 3);
+		terminateMachineAndNull(_lighter);
+		return true;
+
+	case 3:
+		sendWSMessage_140000(5);
+		return true;
+
+	case 5:
+		series_unload(_ripLowReach);
+		player_set_commands_allowed(true);
+		return true;
+
+	default:
+		break;
+	}
+
+	return false;
+}
+
+bool Room608::hornCordWater() {
+	if (_G(flags)[V193]) {
+		digi_play("com118", 1);
+		return true;
+	} else {
+		switch (_G(kernel).trigger) {
+		case -1:
+			ws_walk(64, 354, nullptr, 1, 7);
+			return true;
+
+		case 1:
+			player_set_commands_allowed(false);
+			player_update_info();
+			ws_hide_walker();
+			digi_preload("608_s08");
+
+			_shadow5 = series_show("safari shadow 5", _G(player_info).depth, 144, -1, -1, 0,
+				_G(player_info).scale, _G(player_info).x, _G(player_info.y));
+			_ol2 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+				triggerMachineByHashCallbackNegative, "ol");
+			sendWSMessage_10000(1, _ol2, _horn, 1, 16, 2, _horn, 16, 16, 0);
+			return true;
+
+		case 2:
+			sendWSMessage_10000(1, _ol2, _horn, 17, 37, 3, _horn, 37, 37, 0);
+			digi_play("608_s08", 2);
+			return true;
+
+		case 3:
+			inv_give_to_player("HORN/PULL CORD/WATER");
+			inv_move_object("HORN/PULL CORD", NOWHERE);
+			kernel_examine_inventory_object("PING HORN/PULL CORD/WATER",
+				5, 1, 42, 239, 4);
+			return true;
+
+		case 4:
+			digi_unload("608_s08");
+			terminateMachineAndNull(_ol2);
+			series_unload(_horn);
+			terminateMachineAndNull(_shadow5);
+			ws_unhide_walker();
+			_G(flags)[GLB_TEMP_3] = 1;
+			player_set_commands_allowed(true);
+			digi_play("608r65", 1);
+			return true;
+
+		default:
+			break;
+		}
+
+		return false;
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room608.h b/engines/m4/riddle/rooms/section6/room608.h
index 2733ce6725a..e82825022e8 100644
--- a/engines/m4/riddle/rooms/section6/room608.h
+++ b/engines/m4/riddle/rooms/section6/room608.h
@@ -33,6 +33,8 @@ private:
 	int _rp01 = 0;
 	int _rp09 = 0;
 	int _ripHandChin = 0;
+	int _ripLowReach = 0;
+	int _ripLowReach2 = 0;
 	int _ripTalker = 0;
 	int _tt01 = 0;
 	int _tt02 = 0;
@@ -50,8 +52,13 @@ private:
 	int _all5a = 0;
 	int _loop0 = 0;
 	int _loop1 = 0;
+	int _horn = 0;
+	machine *_ripley = nullptr;
+	machine *_shadow = nullptr;
+	machine *_shadow5 = nullptr;
 	machine *_tt = nullptr;
 	machine *_ol = nullptr;
+	machine *_ol2 = nullptr;
 	machine *_stump = nullptr;
 	machine *_lighter = nullptr;
 	machine *_pole = nullptr;
@@ -61,6 +68,16 @@ private:
 	int _val1 = 0;
 	int _val2 = 0;
 	int _val3 = 0;
+	int _val4 = 0;
+	int _val5 = 0;
+
+	void conv608a();
+	bool takeStump1();
+	bool takePuffin();
+	bool stumpHole();
+	bool takeStump2();
+	bool takeLighter();
+	bool hornCordWater();
 
 public:
 	Room608() : Room() {}




More information about the Scummvm-git-logs mailing list