[Scummvm-git-logs] scummvm master -> 6bf5686ab96c75975d7cb68df319294949a3ee35

dreammaster noreply at scummvm.org
Sat Aug 17 03:57:05 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:
03b73e8947 M4: RIDDLE: Added room 404 pre-parser
6bf5686ab9 M4: RIDDLE: Added room 404 parser


Commit: 03b73e8947453571150e3895be2c071db27b7232
    https://github.com/scummvm/scummvm/commit/03b73e8947453571150e3895be2c071db27b7232
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-16T20:18:22-07:00

Commit Message:
M4: RIDDLE: Added room 404 pre-parser

Changed paths:
    engines/m4/riddle/rooms/section4/room404.cpp


diff --git a/engines/m4/riddle/rooms/section4/room404.cpp b/engines/m4/riddle/rooms/section4/room404.cpp
index 4b41f946e78..035ab3569b1 100644
--- a/engines/m4/riddle/rooms/section4/room404.cpp
+++ b/engines/m4/riddle/rooms/section4/room404.cpp
@@ -123,7 +123,24 @@ void Room404::daemon() {
 }
 
 void Room404::pre_parser() {
-	// TODO
+	bool takeFlag = player_said("take");
+	bool lookFlag = player_said_any("look", "look at");
+	bool useFlag = player_said_any("push", "pull", "gear",
+		"open", "close");
+
+	if ((player_said("SITTING ROOM") && (lookFlag || useFlag || takeFlag)) ||
+			(lookFlag && player_said(" "))) {
+		_G(player).need_to_walk = false;
+		_G(player).ready_to_walk = true;
+		_G(player).waiting_for_walk = false;
+	}
+
+	if (player_said("journal") && !takeFlag && !lookFlag &&
+			_G(kernel).trigger == -1) {
+		_G(player).need_to_walk = false;
+		_G(player).ready_to_walk = true;
+		_G(player).waiting_for_walk = false;
+	}
 }
 
 void Room404::parser() {


Commit: 6bf5686ab96c75975d7cb68df319294949a3ee35
    https://github.com/scummvm/scummvm/commit/6bf5686ab96c75975d7cb68df319294949a3ee35
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-16T20:56:57-07:00

Commit Message:
M4: RIDDLE: Added room 404 parser

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


diff --git a/engines/m4/riddle/rooms/section4/room404.cpp b/engines/m4/riddle/rooms/section4/room404.cpp
index 035ab3569b1..1ecb11b633e 100644
--- a/engines/m4/riddle/rooms/section4/room404.cpp
+++ b/engines/m4/riddle/rooms/section4/room404.cpp
@@ -39,6 +39,16 @@ static const char *SHADOW_NAMES[] = {
 	"wolf walker shadow pos3"
 };
 
+static const char *const SAID[][2] = {
+	{ "DOOR",           "404r10" },
+	{ "BUTLER",         "404r30" },
+	{ "HUGE DOOR",      "404r11" },
+	{ "LARGE PAINTING", "404r13" },
+	{ "PAINTING",       "404r14" },
+	{ "RUG",            "404r12" },
+	{ nullptr, nullptr }
+};
+
 void Room404::preload() {
 	_G(player).walker_type = 1;
 	_G(player).shadow_type = 1;
@@ -144,7 +154,176 @@ void Room404::pre_parser() {
 }
 
 void Room404::parser() {
-	// TODO
+	bool lookFlag = player_said_any("look", "look at");
+	bool talkFlag = player_said_any("talk", "talk to");
+	bool takeFlag = player_said("take");
+	bool enterFlag = player_said("enter");
+	bool useFlag = player_said_any("push", "pull", "gear",
+		"open", "close");
+
+	if (player_said("conv404a")) {
+		if (_G(kernel).trigger == 1) {
+			_val6 = 1103;
+			_val8 = 2102;
+			conv_resume();
+		} else {
+			conv404a();
+		}
+	} else if (player_said("-", " ")) {
+		// No implementation
+	} else if (talkFlag && player_said("butler")) {
+		player_set_commands_allowed(false);
+		_val4 = -1;
+		_val5 = 1000;
+		_val6 = 1100;
+		_G(kernel).trigger_mode = KT_DAEMON;
+		kernel_timing_trigger(1, 102);
+		_G(kernel).trigger_mode = KT_PARSE;
+	} else if (enterFlag && player_said("BILLIARDS ROOM")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			disable_player_commands_and_fade_init(1);
+			break;
+		case 1:
+			midi_stop();
+			digi_stop(3);
+			_G(game).setRoom(406);
+			break;
+		default:
+			break;
+		}
+	} else if (player_said("WALK TO", "OUTSIDE CASTLE")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			player_update_info();
+			ws_walk(_G(player_info).x, _G(player_info).y + 50, nullptr, -1, 5);
+			disable_player_commands_and_fade_init(1);
+			break;
+		case 1:
+			midi_stop();
+			digi_stop(3);
+			_G(game).setRoom(402);
+			break;
+		default:
+			break;
+		}
+	} else if (player_said("WALK TO", "OUTSIDE CASTLE")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			ws_walk(58, 347, nullptr, -1, 9);
+			disable_player_commands_and_fade_init(1);
+			break;
+		case 1:
+			midi_stop();
+			digi_stop(3);
+			_G(game).setRoom(402);
+			break;
+		default:
+			break;
+		}
+	} else if (enterFlag && player_said("SITTING ROOM")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			ws_walk(58, 347, nullptr, -1, 9);
+			disable_player_commands_and_fade_init(1);
+			break;
+		case 1:
+			midi_stop();
+			digi_stop(3);
+			_G(game).setRoom(405);
+			break;
+		default:
+			break;
+		}
+	} else if (player_said("GO", "STAIRS")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+
+			if (!_G(flags)[V126]) {
+				_G(flags)[V126] = 1;
+				digi_play("404u05", 1, 255, 2);
+				_val7 = 2000;
+				_val8 = 2102;
+				_G(kernel).trigger = KT_DAEMON;
+				kernel_timing_trigger(1, 110);
+				_G(kernel).trigger_mode = KT_PARSE;
+			} else {
+				digi_play("404r15", 1, 255, 2);
+			}
+			break;
+		case 2:
+			_val8 = 2103;
+			player_set_commands_allowed(true);
+			break;
+		default:
+			break;
+		}
+	} else if (lookFlag && player_said("BILLIARDS ROOM")) {
+		digi_play(player_been_here(405) ? "404r08a" : "404r08", 1);
+	} else if (player_said("SITTING ROOM") && (useFlag || takeFlag) &&
+			_G(kernel).trigger >= -1) {
+		ws_walk(115, 350, nullptr, 2, 9);
+	} else if (lookFlag && player_said("SITTING ROOM")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			ws_walk(115, 350, nullptr, 2, 9);
+			break;
+		default:
+			digi_play("404r09", 1);
+			break;
+		}
+	} else if (lookFlag && _G(walker).ripley_said(SAID)) {
+		// No implementation
+	} else if (lookFlag && player_said(" ")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			digi_play("404r07", 1, 255, 2);
+			break;
+		case 2:
+			player_set_commands_allowed(true);
+			break;
+		default:
+			break;
+		}
+	} else if (player_said("journal") && !takeFlag && !lookFlag &&
+			!inv_player_has(_G(player).noun)) {
+		if (_G(flags)[kCastleCartoon]) {
+			digi_play("com016", 1);
+		} else if (_G(kernel).trigger == 6) {
+			_G(flags)[kCastleCartoon] = 1;
+			sendWSMessage_multi("com015");
+		} else {
+			sendWSMessage_multi("");
+		}
+	} else {
+		return;
+	}
+
+	_G(player).command_ready = false;
+}
+
+void Room404::conv404a() {
+	int who = conv_whos_talking();
+	_currentNode = conv_current_node();
+	const char *sound = conv_sound_to_play();
+
+	if (sound) {
+		if (who <= 0)
+			_val8 = 2101;
+		else if (who == 1)
+			_val6 = 1102;
+
+		digi_play(sound, 1, 255, 1);
+
+	} else {
+		conv_resume();
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section4/room404.h b/engines/m4/riddle/rooms/section4/room404.h
index a8d9e3e0eeb..0a938d7d890 100644
--- a/engines/m4/riddle/rooms/section4/room404.h
+++ b/engines/m4/riddle/rooms/section4/room404.h
@@ -45,6 +45,9 @@ private:
 	machine *_door = nullptr;
 	machine *_butlerTalks = nullptr;
 	machine *_machine1 = nullptr;
+	int _currentNode = 0;
+
+	void conv404a();
 
 public:
 	Room404() : Room() {}




More information about the Scummvm-git-logs mailing list