[Scummvm-git-logs] scummvm master -> dc44490f6a69831e03bc9a616dd92c40e967000b

dreammaster noreply at scummvm.org
Thu Sep 5 05:16:09 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:
dc44490f6a M4: RIDDLE: In progress room 501 daemon


Commit: dc44490f6a69831e03bc9a616dd92c40e967000b
    https://github.com/scummvm/scummvm/commit/dc44490f6a69831e03bc9a616dd92c40e967000b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-04T22:16:02-07:00

Commit Message:
M4: RIDDLE: In progress room 501 daemon

Changed paths:
    engines/m4/riddle/rooms/section5/room501.cpp
    engines/m4/riddle/rooms/section5/room501.h


diff --git a/engines/m4/riddle/rooms/section5/room501.cpp b/engines/m4/riddle/rooms/section5/room501.cpp
index c1121eb0fab..39fce153c34 100644
--- a/engines/m4/riddle/rooms/section5/room501.cpp
+++ b/engines/m4/riddle/rooms/section5/room501.cpp
@@ -27,6 +27,11 @@ namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+Room501::Room501() : Room() {
+	Common::fill(_items, _items + 12, 0);
+	Common::fill(_queuedDigi, _queuedDigi + 4, (const char *)nullptr);
+}
+
 void Room501::init() {
 	digi_preload("501_s01");
 	_agentTalkLoop = series_load("AGENT TALK LOOP");
@@ -190,27 +195,27 @@ void Room501::daemon() {
 				break;
 			case 9:
 				_xyzzy5 = 1;
-				sendWSMessage_10000(1, _ripley, _ripSeries2, 90, 1, 502,
-					_ripSeries2, 1, 1, 0);
+				sendWSMessage_10000(1, _ripley, _ripParcelExchange, 90, 1, 502,
+					_ripParcelExchange, 1, 1, 0);
 				_val3 = 10;
 				break;
 			case 10:
 				digi_play("COM084", 1, 255, -1, 997);
 				kernel_timing_trigger(1, 505);
-				sendWSMessage_10000(1, _ripley, _ripSeries2, 1, 1, 502,
-					_ripSeries2, 1, 1, 0);
+				sendWSMessage_10000(1, _ripley, _ripParcelExchange, 1, 1, 502,
+					_ripParcelExchange, 1, 1, 0);
 				_val3 = 3;
 				break;
 			case 11:
 				_xyzzy5 = 1;
-				sendWSMessage_10000(1, _ripley, _ripSeries2, 1, 90, 502,
-					_ripSeries2, 90, 90, 0);
+				sendWSMessage_10000(1, _ripley, _ripParcelExchange, 1, 90, 502,
+					_ripParcelExchange, 90, 90, 0);
 				_val3 = 12;
 				break;
 			case 12:
 				kernel_timing_trigger(1, 505);
-				sendWSMessage_10000(1, _ripley, _ripSeries2, 1, 1, 502,
-					_ripSeries2, 1, 1, 0);
+				sendWSMessage_10000(1, _ripley, _ripParcelExchange, 1, 1, 502,
+					_ripParcelExchange, 1, 1, 0);
 				_val3 = 3;
 				break;
 			case 13:
@@ -433,6 +438,278 @@ void Room501::daemon() {
 		}
 		break;
 
+	case 508:
+		_val8 = 0;
+		_G(kernel).trigger_mode = KT_PARSE;
+		conv_load("conv501a", 10, 10, 747);
+
+		conv_export_value_curr((_G(flags)[V088] >= 3) ? 1 : 0, 0);
+		_hasItems = updateItems();
+		conv_export_pointer_curr(&_G(flags)[V182], 1);
+
+		if (inv_player_has("DRIFTWOOD PUFFIN")) {
+			_xyzzy9 = 2;
+		} else if (_G(flags)[V183] == 1) {
+			_xyzzy9 = 1;
+		} else {
+			_xyzzy9 = 0;
+		}
+
+		_hasLetter = inv_player_has("MENENDEZ'S LETTER");
+		conv_export_pointer_curr(&_hasLetter, 3);
+		conv_export_pointer_curr(&_hasItems, 4);
+		conv_export_pointer_curr(&_G(flags)[V145], 5);
+		conv_export_value_curr(_G(flags)[146] > 0 ? 1 : 0, 6);
+		conv_export_pointer_curr(&_G(flags)[V143], 7);
+		conv_export_pointer_curr(&_G(flags)[V142], 8);
+		conv_export_pointer_curr(&_G(flags)[V147], 9);
+		conv_export_value_curr(_G(flags)[145] == 1 ||
+			_G(flags)[V146] > 0 || _G(flags)[V143] == 1 ? 1 : 0, 10);
+
+		_hasStickAndShellMap = inv_player_has("STICK AND SHELL MAP");
+		_hasWheeledToy = inv_player_has("WHEELED TOY");
+		_hasRebusAmulet = inv_player_has("REBUS AMULET");
+		_hasShrunkenHead = inv_player_has("SHRUNKEN HEAD");
+		_hasSilverButterfly = inv_player_has("SILVER BUTTERFLY");
+		_hasPostageStamp = inv_player_has("POSTAGE STAMP");
+		_hasGermanBanknote = inv_player_has("GERMAN BANKNOTE");
+		_hasWhaleBoneHorn = inv_player_has("WHALE BONE HORN");
+		_hasChisel = inv_player_has("CHISEL");
+		_hasIncenseBurner = inv_player_has("INCENSE BURNER");
+		_hasRomanovEmerald = inv_player_has("ROMANOV EMERALD");
+
+		conv_export_pointer_curr(&_hasCrystalSkull, 11);
+		conv_export_pointer_curr(&_hasStickAndShellMap, 12);
+		conv_export_pointer_curr(&_hasWheeledToy, 13);
+		conv_export_pointer_curr(&_hasRebusAmulet, 14);
+		conv_export_pointer_curr(&_hasShrunkenHead, 15);
+		conv_export_pointer_curr(&_hasSilverButterfly, 16);
+		conv_export_pointer_curr(&_hasPostageStamp, 17);
+		conv_export_pointer_curr(&_hasGermanBanknote, 18);
+		conv_export_pointer_curr(&_hasWhaleBoneHorn, 19);
+		conv_export_pointer_curr(&_hasChisel, 20);
+		conv_export_pointer_curr(&_hasIncenseBurner, 21);
+		conv_export_pointer_curr(&_hasRomanovEmerald, 22);
+		conv_export_pointer_curr(&_G(flags)[V035], 30);
+		conv_play();
+		break;
+
+	case 509:
+		_val3 = 3;
+		_val6 = kernel_trigger_create(510);
+		break;
+
+	case 510:
+		if (_val8 == 1) {
+			kernel_timing_trigger(1, 512);
+		} else {
+			_val3 = 13;
+			_xyzzy4 = kernel_trigger_create(511);
+		}
+		break;
+
+	case 511:
+	case 524:
+		_xyzzy1 = 1;
+		player_set_commands_allowed(true);
+		break;
+
+	case 512:
+		player_set_commands_allowed(false);
+		pal_fade_init(21, 255, 0, 30, 513);
+		break;
+
+	case 513:
+		switch (_convEntry) {
+		case 0:
+			_G(flags)[V129] = 1;
+			break;
+		case 1:
+			_G(flags)[V129] = 2;
+			break;
+		case 2:
+			_G(flags)[V129] = 0;
+			break;
+		case 3:
+			_G(flags)[V129] = 3;
+			break;
+		case 4:
+			_G(flags)[V129] = 5;
+			break;
+		default:
+			break;
+		}
+
+		if (_G(flags)[V161] == 1)
+			_G(flags)[V371] = 1;
+
+		_G(game).setRoom((_convEntry == 5) ? 504 : 495);
+
+		if (_G(flags)[V035] == 1)
+			_G(flags)[V147] = 1;
+		break;
+
+	case 514:
+		_val1 = 1;
+		_val3 = 3;
+		_val6 = kernel_trigger_create(515);
+		kernel_timing_trigger(2, 501);
+		break;
+
+	case 515:
+		_val3 = 4;
+		digi_play("501r01", 1, 255, 516);
+		break;
+
+	case 516:
+		_val3 = 3;
+		_val1 = 2;
+		digi_play("501x01", 1, 255, 517);
+		break;
+
+	case 517:
+		_val4 = checkFlags(true);
+		_val1 = 1;
+
+		if (_val4 > 0) {
+			_ripSeries1 = series_load("TELEGRAM XCHANGE");
+			kernel_timing_trigger(1, 518);
+		} else {
+			kernel_timing_trigger(1, 523);
+		}
+		break;
+
+	case 518:
+		_val3 = 6;
+		_xyzzy2 = kernel_trigger_create(526);
+		break;
+
+	case 522:
+		kernel_timing_trigger(30, 514);
+		break;
+
+	case 523:
+		_val3 = 13;
+		_xyzzy4 = kernel_trigger_create(524);
+		break;
+
+	case 526:
+		Common::fill(_queuedDigi, _queuedDigi + 4, (const char *)nullptr);
+		inv_give_to_player("MESSAGE LOG");
+
+		if (_val4 <= 0) {
+			kernel_timing_trigger(1, 523);
+		} else {
+			if (_digiName) {
+				_queuedDigi[0] = _digiName;
+				_digiName = nullptr;
+			} else if (_G(flags)[V364] == 1) {
+				_queuedDigi[0] = "201R26";
+				_G(flags)[V364] = 0;
+			} else if (_G(flags)[V365] == 1) {
+				_queuedDigi[0] = "201R61";
+				_G(flags)[V365] = 0;
+			} else if (_G(flags)[V373] == 1) {
+				_queuedDigi[0] = "401R36";
+				_G(flags)[V373] = 0;
+			} else if (_G(flags)[V366] == 1) {
+				_queuedDigi[0] = "401R31";
+				_G(flags)[V366] = 0;
+			} else if (_G(flags)[V370] == 1) {
+				_queuedDigi[0] = "501R02B";
+				_queuedDigi[1] = nullptr;
+				_queuedDigi[2] = nullptr;
+				_G(flags)[V370] = 0;
+			} else if (_G(flags)[V372] == 1) {
+				_queuedDigi[0] = "701R39";
+				_queuedDigi[1] = "701R39A";
+				_G(flags)[V372] = 0;
+			} else if (_G(flags)[V367] == 1) {
+				_queuedDigi[0] = "401R37";
+				_G(flags)[V367] = 0;
+				_val2 = 1;
+			} else if (_G(flags)[V368] == 1) {
+				_queuedDigi[0] = "401R38";
+				_G(flags)[V368] = 0;
+				_val2 = 1;
+			} else if (_G(flags)[V369] == 1) {
+				_queuedDigi[0] = "401R39";
+				_G(flags)[V369] = 0;
+				_val2 = 1;
+			}
+
+			kernel_timing_trigger(1, 527);
+		}
+		break;
+
+	case 527:
+		_val3 = 7;
+		_xyzzy2 = kernel_trigger_create(528);
+		break;
+
+	case 528:
+		if (_queuedDigi[0])
+			digi_play(_queuedDigi[0], 1, 255, 529);
+		else
+			kernel_timing_trigger(1, 529);
+		break;
+
+	case 529:
+		if (_queuedDigi[1])
+			digi_play(_queuedDigi[1], 1, 255, 530);
+		else
+			kernel_timing_trigger(1, 530);
+		break;
+
+	case 530:
+		if (_queuedDigi[2])
+			digi_play(_queuedDigi[2], 1, 255, 531);
+		else
+			kernel_timing_trigger(1, 531);
+		break;
+
+	case 531:
+		if (_queuedDigi[3])
+			digi_play(_queuedDigi[3], 1, 255, 532);
+		else
+			kernel_timing_trigger(1, 532);
+		break;
+
+	case 532:
+		if (_val2 == 1) {
+			_val2 = 0;
+			kernel_timing_trigger(1, 534);
+		} else {
+			if (--_val4 > 0) {
+				_val3 = 8;
+				_xyzzy2 = kernel_trigger_create(526);
+			} else {
+				kernel_timing_trigger(1, 533);
+			}
+		}
+		break;
+
+	case 533:
+		_val3 = 3;
+		_val6 = kernel_trigger_create(523);
+		break;
+
+	case 534:
+		_val3 = 3;
+		_val6 = kernel_trigger_create(535);
+		break;
+
+	case 535:
+		_ripParcelExchange = series_load("PARCEL XCHANGE");
+		_val1 = 5;
+		_xyzzy7 = kernel_trigger_create(536);
+		break;
+
+	case 536:
+		_val3 = 9;
+		_xyzzy7 = kernel_trigger_create(537);
+		break;
+
 	// TODO
 	default:
 		break;
@@ -693,6 +970,25 @@ void Room501::conv501a() {
 	conv_resume();
 }
 
+bool Room501::updateItems() {
+	Common::fill(_items, _items + 12, 0);
+	_itemsCount = 0;
+
+	static const char *ITEMS[12] = {
+		"CRYSTAL SKULL", "STICK AND SHELL MAP", "WHEELED TOY",
+		"REBUS AMULET", "SHRUNKEN HEAD", "SILVER BUTTERFLY",
+		"POSTAGE STAMP", "GERMAN BANKNOTE", "WHALE BONE HORN",
+		"CHISEL", "INCENSE BURNER", "ROMANOV EMERALD"
+	};
+
+	for (int i = 0; i < 12; ++i) {
+		if (inv_player_has(ITEMS[i]))
+			_items[_itemsCount++] = i + 1;
+	}
+
+	return _itemsCount > 0;
+}
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/section5/room501.h b/engines/m4/riddle/rooms/section5/room501.h
index 5aeb2d1e448..c9ae78e3bb7 100644
--- a/engines/m4/riddle/rooms/section5/room501.h
+++ b/engines/m4/riddle/rooms/section5/room501.h
@@ -43,7 +43,7 @@ private:
 	bool _flag = false;
 	int _ripTalkLoop = 0;
 	int _ripSeries1 = 0;
-	int _ripSeries2 = 0;
+	int _ripParcelExchange = 0;
 	int _ripMoneyExchange = 0;
 	int _ripSignsPaper = 0;
 	int _val1 = 0;
@@ -63,11 +63,36 @@ private:
 	int _xyzzy6 = 0;
 	int _xyzzy7 = 0;
 	int _xyzzy8 = 0;
+	int _xyzzy9 = 0;
+	int _itemsCount = 0;
+	int _items[12];
+	int32 _hasItems = 0;
+	int32 _hasLetter = 0;
+	int32 _hasCrystalSkull = 0;
+	int32 _hasStickAndShellMap = 0;
+	int32 _hasWheeledToy = 0;
+	int32 _hasRebusAmulet = 0;
+	int32 _hasShrunkenHead = 0;
+	int32 _hasSilverButterfly = 0;
+	int32 _hasPostageStamp = 0;
+	int32 _hasGermanBanknote = 0;
+	int32 _hasWhaleBoneHorn = 0;
+	int32 _hasChisel = 0;
+	int32 _hasIncenseBurner = 0;
+	int32 _hasRomanovEmerald = 0;
+	const char *_queuedDigi[4];
 
 	void conv501a();
 
+	/**
+	 * Sets up the items array with any key items the player
+	 * has in their inventory
+	 * @return	True if the player has at least one item
+	 */
+	bool updateItems();
+
 public:
-	Room501() : Room() {}
+	Room501();
 	~Room501() override {}
 
 	void init() override;




More information about the Scummvm-git-logs mailing list