[Scummvm-git-logs] scummvm master -> 297df9f04f324b29a09f99bc2e844b0f8060e812

dreammaster noreply at scummvm.org
Sat Aug 17 18:15:19 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:
33f84d5fed M4: RIDDLE: Room 405 pre-parser, conv405a
297df9f04f M4: RIDDLE: Finished room 405 parser


Commit: 33f84d5fed6306fb6f63010840aed6b8d383e8a0
    https://github.com/scummvm/scummvm/commit/33f84d5fed6306fb6f63010840aed6b8d383e8a0
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-17T11:15:13-07:00

Commit Message:
M4: RIDDLE: Room 405 pre-parser, conv405a

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


diff --git a/engines/m4/riddle/rooms/section4/room405.cpp b/engines/m4/riddle/rooms/section4/room405.cpp
index fa9d1d08bf3..ce1b64581e3 100644
--- a/engines/m4/riddle/rooms/section4/room405.cpp
+++ b/engines/m4/riddle/rooms/section4/room405.cpp
@@ -102,13 +102,145 @@ void Room405::daemon() {
 }
 
 void Room405::pre_parser() {
+	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("DOOR") && (lookFlag || useFlag || takeFlag)) {
+		_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 Room405::parser() {
+	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("conv405a")) {
+		if (_G(kernel).trigger == 1)
+			conv405a1();
+		else
+			conv405a();
+	}
+	// TODO
+	else {
+		return;
+	}
+
+	_G(player).command_ready = false;
+}
 
+void Room405::conv405a() {
+	int who = conv_whos_talking();
+	_currentNode = conv_current_node();
+	int entry = conv_current_entry();
+	const char *sound = conv_sound_to_play();
+
+	if (sound) {
+		if (who <= 0) {
+			switch (_currentNode) {
+			case 2:
+				if (entry == 0) {
+					_val8 = 2110;
+					_sound1 = sound;
+				} else {
+					_val8 = 2101;
+					digi_play(sound, 1, 255, 1);
+				}
+				break;
+
+			case 4:
+				if (entry == 1) {
+					_val8 = 2140;
+					_sound1 = sound;
+				} else if (entry == 2) {
+					_val8 = 2120;
+					_sound1 = sound;
+				} else {
+					_val8 = 2101;
+					digi_play(sound, 1, 255, 1);
+				}
+				break;
+
+			case 14:
+				if (entry == 4) {
+					_val8 = 2140;
+					_sound1 = sound;
+				} else {
+					_val8 = 2101;
+					digi_play(sound, 1, 255, 1);
+				}
+				break;
+
+			default:
+				_val8 = 2101;
+				digi_play(sound, 1, 255, 1);
+				break;
+			}
+		} else if (who == 1) {
+			switch (_currentNode) {
+			case 1:
+				if (entry == 3) {
+					_val6 = 2110;
+					_sound2 = sound;
+				} else {
+					_val6 = 1102;
+					digi_play(sound, 1, 255, 1);
+				}
+				break;
+
+			case 8:
+				if (entry == 2) {
+					_val6 = 1220;
+					_sound2 = sound;
+				} else {
+					_val6 = 1102;
+					digi_play(sound, 1, 255, 1);
+				}
+				break;
+
+			case 14:
+				if (entry == 1) {
+					_val6 = 1230;
+					_sound2 = sound;
+				} else if (entry == 5) {
+					_val8 = 2171;
+					_val6 = 1102;
+					digi_play(sound, 1, 255, 1);
+				}
+				break;
+
+			default:
+				break;
+			}
+		}
+	} else {
+		conv_resume();
+	}
 }
 
+void Room405::conv405a1() {
+	int who = conv_whos_talking();
+
+	if (who <= 0)
+		_val8 = 2102;
+	else if (who == 1)
+		_val6 = 1103;
+
+	conv_resume();
+}
+
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/section4/room405.h b/engines/m4/riddle/rooms/section4/room405.h
index 636059e3668..98a1f7300fd 100644
--- a/engines/m4/riddle/rooms/section4/room405.h
+++ b/engines/m4/riddle/rooms/section4/room405.h
@@ -45,6 +45,12 @@ private:
 	machine *_candles = nullptr;
 	machine *_bankNote = nullptr;
 	machine *_baron = nullptr;
+	int _currentNode = 0;
+	Common::String _sound1;
+	Common::String _sound2;
+
+	void conv405a();
+	void conv405a1();
 
 public:
 	Room405() : Room() {}


Commit: 297df9f04f324b29a09f99bc2e844b0f8060e812
    https://github.com/scummvm/scummvm/commit/297df9f04f324b29a09f99bc2e844b0f8060e812
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-17T11:15:13-07:00

Commit Message:
M4: RIDDLE: Finished room 405 parser

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


diff --git a/engines/m4/riddle/rooms/section4/room405.cpp b/engines/m4/riddle/rooms/section4/room405.cpp
index ce1b64581e3..a7b8433f2a3 100644
--- a/engines/m4/riddle/rooms/section4/room405.cpp
+++ b/engines/m4/riddle/rooms/section4/room405.cpp
@@ -39,6 +39,19 @@ static const char *SHADOW_NAMES[] = {
 	"baron walker shadow pos7"
 };
 
+static const char *const SAID[][2] = {
+	{ "FIREPLACE",  "405r05" },
+	{ "WINDOW",     "405r06" },
+	{ "ZEBRA SKIN", "405r07" },
+	{ "DEER HEAD",  "405r08" },
+	{ "BATTLE AXE", "405r09" },
+	{ "SHIELD",     "405r09" },
+	{ "CHANDELIER", "405r10" },
+	{ "BOOKSHELF",  "405r11" },
+	{ "RUG",        "405r16" },
+	{ "CHAIR",      "405r13" },
+	{ nullptr, nullptr }
+};
 
 void Room405::preload() {
 	_G(player).walker_type = 1;
@@ -131,9 +144,84 @@ void Room405::parser() {
 			conv405a1();
 		else
 			conv405a();
-	}
-	// TODO
-	else {
+	} else if (talkFlag && player_said("baron")) {
+		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) {
+		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(404);
+			break;
+		default:
+			break;
+		}
+	} else if (lookFlag && player_said("DOOR") && lookDoor()) {
+		// No implementation
+	} else if (useFlag && player_said("DOOR") && useDoor()) {
+		// No implementation
+	} else if (takeFlag && player_said("DOOR") && takeDoor()) {
+		// No implementation
+	} else if (lookFlag && _G(walker).ripley_said(SAID)) {
+		// No implementation
+	} else if ((lookFlag && player_said("LIBRARY TABLE")) ||
+			(lookFlag && player_said("JOURNAL "))) {
+		if (_val9) {
+			doAction("405r14");
+		} else {
+			switch (_G(kernel).trigger) {
+			case -1:
+				digi_play("405r14", 1, 255, 1);
+				break;
+			case 1:
+				digi_play("405r14a", 1);
+				_val9 = 1;
+				break;
+			default:
+				break;
+			}
+		}
+	} else if (lookFlag && player_said("GERMAN BAKNOTE") && inv_object_is_here("GERMAN BAKNOTE")) {
+		doAction("405r17");
+	} else if (lookFlag && player_said(" ")) {
+		doAction("405r04");
+	} else if (takeFlag && player_said("ZEBRA SKIN")) {
+		doAction("405r18");
+	} else if (takeFlag && player_said("DEER HEAD")) {
+		doAction("405r19");
+	} else if (takeFlag && player_said("BATTLE AXE")) {
+		doAction("405r20");
+	} else if (takeFlag && player_said("SHIELD")) {
+		doAction("405r20");
+	} else if (takeFlag && player_said("BOOKSHELF")) {
+		doAction("405r21");
+	} else if (takeFlag && player_said("SOFA")) {
+		doAction("405r22");
+	} else if (takeFlag && player_said("CHAIR")) {
+		doAction("405r22");
+	} else if (takeFlag && player_said("JOURNAL ")) {
+		doAction("405r23");
+	} else if (takeFlag && player_said("GERMAN BANKNOTE") && takeBanknote()) {
+		// No implementation
+	} 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 {
 		return;
 	}
 
@@ -240,6 +328,100 @@ void Room405::conv405a1() {
 	conv_resume();
 }
 
+bool Room405::lookDoor() {
+	switch (_G(kernel).trigger) {
+	case -1:
+		ws_walk(245, 367, nullptr, 2, 9);
+		return true;
+	case 2:
+		digi_play("405r30", 1);
+		return true;
+		
+	default:
+		break;
+	}
+
+	return false;
+}
+
+bool Room405::useDoor() {
+	switch (_G(kernel).trigger) {
+	case -1:
+		ws_walk(245, 367, nullptr, 2, 9);
+		return true;
+	case 2:
+		digi_play("405r31", 1);
+		return true;
+
+	default:
+		break;
+	}
+
+	return false;
+}
+
+bool Room405::takeDoor() {
+	if (_G(kernel).trigger == 1) {
+		ws_walk(245, 367, nullptr, 2, 9);
+		return true;
+	}
+
+	return false;
+}
+
+bool Room405::takeBanknote() {
+	switch (_G(kernel).trigger) {
+	case -1:
+		if (inv_object_is_here("GERMAN BANKNOTE")) {
+			player_set_commands_allowed(false);
+			_lowReacher = series_load("RIP TREK LOW REACHER POS1");
+			setGlobals1(_lowReacher, 1, 16, 16, 16, 0, 16, 1, 1, 1);
+			sendWSMessage_110000(1);
+			return true;
+		}
+		break;
+
+	case 1:
+		kernel_examine_inventory_object("PING GERMAN BANKNOTE", _G(master_palette),
+			5, 1, 265, 270, 2, "405r24", -1);
+		return true;
+
+	case 2:
+		terminateMachineAndNull(_bankNote);
+		inv_give_to_player("GERMAN BANKNOTE");
+		sendWSMessage_120000(3);
+		return true;
+
+	case 3:
+		hotspot_set_active("GERMAN BANKNOTE", false);
+		sendWSMessage_150000(4);
+		return true;
+
+	case 4:
+		series_unload(_lowReacher);
+		player_set_commands_allowed(true);
+		return true;
+
+	default:
+		break;
+	}
+
+	return false;
+}
+
+void Room405::doAction(const char *name) {
+	switch (_G(kernel).trigger) {
+	case -1:
+		player_set_commands_allowed(false);
+		digi_play(name, 1, 255, 1);
+		break;
+	case 1:
+		player_set_commands_allowed(true);
+		break;
+	default:
+		break;
+	}
+}
 
 } // namespace Rooms
 } // namespace Riddle
diff --git a/engines/m4/riddle/rooms/section4/room405.h b/engines/m4/riddle/rooms/section4/room405.h
index 98a1f7300fd..ed1493a5efb 100644
--- a/engines/m4/riddle/rooms/section4/room405.h
+++ b/engines/m4/riddle/rooms/section4/room405.h
@@ -41,6 +41,7 @@ private:
 	int _val9 = 0;
 	int _candlesBurning = 0;
 	int _safariShadow = 0;
+	int _lowReacher = 0;
 	machine *_door = nullptr;
 	machine *_candles = nullptr;
 	machine *_bankNote = nullptr;
@@ -51,6 +52,11 @@ private:
 
 	void conv405a();
 	void conv405a1();
+	bool lookDoor();
+	bool useDoor();
+	bool takeDoor();
+	bool takeBanknote();
+	void doAction(const char *name);
 
 public:
 	Room405() : Room() {}




More information about the Scummvm-git-logs mailing list