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

dreammaster noreply at scummvm.org
Sat Sep 14 21:43:53 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:
e8ec52d0fa M4: RIDDLE: Added room 507


Commit: e8ec52d0fa09c3d9566d8dc40cd432e49c94cb59
    https://github.com/scummvm/scummvm/commit/e8ec52d0fa09c3d9566d8dc40cd432e49c94cb59
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-14T14:43:47-07:00

Commit Message:
M4: RIDDLE: Added room 507

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


diff --git a/engines/m4/riddle/rooms/section5/room506.cpp b/engines/m4/riddle/rooms/section5/room506.cpp
index 631167f79b3..c655c7ee5c9 100644
--- a/engines/m4/riddle/rooms/section5/room506.cpp
+++ b/engines/m4/riddle/rooms/section5/room506.cpp
@@ -33,6 +33,11 @@ namespace Rooms {
 Room506::Room506() : Room() {
 }
 
+void Room506::preload() {
+	_G(player).walker_type = 1;
+	_G(player).shadow_type = 1;
+}
+
 void Room506::init() {
 	_flag2 = _flag3 = _flag4 = false;
 
diff --git a/engines/m4/riddle/rooms/section5/room506.h b/engines/m4/riddle/rooms/section5/room506.h
index 5314c94d21b..ece8a339835 100644
--- a/engines/m4/riddle/rooms/section5/room506.h
+++ b/engines/m4/riddle/rooms/section5/room506.h
@@ -51,6 +51,7 @@ public:
 	Room506();
 	~Room506() override {}
 
+	void preload() override;
 	void init() override;
 	void daemon() override;
 	void pre_parser() override;
diff --git a/engines/m4/riddle/rooms/section5/room507.cpp b/engines/m4/riddle/rooms/section5/room507.cpp
index c2c9921ef83..fec7aff6f77 100644
--- a/engines/m4/riddle/rooms/section5/room507.cpp
+++ b/engines/m4/riddle/rooms/section5/room507.cpp
@@ -27,10 +27,188 @@ namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+static const char *BLOCK_NAMES[8] = {
+	nullptr, "507 BLOCK ONE", "507 BLOCK TWO", "507 BLOCK THREE",
+	"507 BLOCK FOUR", "507 BLOCK FIVE", "507 BLOCK SIX",
+	"507 BLOCK SEVEN"
+};
+static const char *BLOCK_DIGI[8] = {
+	nullptr, "507_s03", "507_s03a", "507_s03b", "507_s03c",
+	"507_s03d", "507_s0e", "507_s0f"
+};
+int BLOCK_CORRECT[8] = {
+	-1, 12, 4, 12, 8, 0, 8, 4
+};
+
+Room507::Room507() : Room() {
+	Common::fill(_blockSeries, _blockSeries + 8, 0);
+	Common::fill(_block, _block + 8, (machine *)nullptr);
+	Common::fill(_blockFlag, _blockFlag + 8, false);
+}
+
+void Room507::preload() {
+	_G(player).walker_in_this_scene = false;
+	LoadWSAssets("OTHER SCRIPT");
+}
+
 void Room507::init() {
+	digi_preload("507_s02");
+	digi_preload("507_s03");
+	digi_preload("507_s03a");
+	digi_preload("507_s03b");
+	digi_preload("507_s03c");
+	digi_preload("507_s03d");
+	digi_preload("507_s03e");
+	digi_preload("507_s03f");
+	digi_preload("507_s04");
+
+	for (int i = 1; i <= 7; ++i) {
+		_blockFlag[i] = false;
+		_blockSeries[i] = series_load(BLOCK_NAMES[1]);
+		_block[1] = series_show(BLOCK_NAMES[1], 0x400, 16, -1, -1, _G(flags)[V172 + i]);
+	}
+
+	_doorSeries = series_load("507DOOR2");
+	_door = series_show("507DOOR2", 0x400, 16);
+	digi_play_loop("507_s02", 3, 170);
+
+	if (_G(game).previous_room == 506)
+		digi_unload("506_s01");
+
+	if (!player_been_here(507)) {
+		kernel_timing_trigger(1, 8);
+		player_set_commands_allowed(false);
+	}
 }
 
 void Room507::daemon() {
+	switch (_G(kernel).trigger) {
+	case 1:
+		player_set_commands_allowed(true);
+		break;
+
+	case 3:
+		for (int i = 1; i <= 7; ++i) {
+			if (_G(flags)[V172 + i] != BLOCK_CORRECT[i]) {
+				player_set_commands_allowed(true);
+				return;
+			}
+		}
+
+		kernel_timing_trigger(10, 4);
+		_G(flags)[V156] = 1;
+		break;
+
+	case 4:
+		digi_stop(1);
+		terminateMachineAndNull(_door);
+		_door = series_stream("507 DOOR LOWERS", 8, 0x400, -1);
+		series_stream_break_on_frame(_door, 19, 6);
+		digi_play("507_S04", 2);
+		break;
+
+	case 6:
+		disable_player_commands_and_fade_init(6);
+		break;
+
+	case 7:
+		for (int i = 1; i <= 7; ++i)
+			digi_unload(BLOCK_DIGI[i]);
+		digi_stop(1);
+		digi_play_loop("507_s02", 3, 170);
+		adv_kill_digi_between_rooms(false);
+		break;
+
+	case 8:
+		digi_play("507R01", 1, 255, 1);
+		break;
+
+	default:
+		break;
+	}
+}
+
+void Room507::pre_parser() {
+	_G(player).resetWalk();
+}
+
+void Room507::parser() {
+	bool lookFlag = player_said_any("look", "look at");
+	bool useFlag = player_said("gear");
+
+	if (lookFlag && player_said("DOOR")) {
+		digi_play("507r03", 1);
+	} else if (lookFlag && player_said_any("STONE GLYPH ", "STONE GLYPH  ",
+			"STONE GLYPH   ", "STONE GLYPH    ", "STONE GLYPH     ",
+			"STONE GLYPH      ", "STONE GLYPH       ")) {
+		if (_G(flags)[V172])
+			digi_play("508R04", 1, 255, -1, 508);
+		else
+			digi_play("507R04", 1);
+	} else if (lookFlag && player_said("SPIDER")) {
+		digi_play("507R05", 1);
+	} else if (lookFlag && player_said(" ")) {
+		digi_play("507R02", 1);
+	} else if (useFlag && player_said("STONE GLYPH ")) {
+		useStoneGlyph(1);
+	} else if (useFlag && player_said("STONE GLYPH  ")) {
+		useStoneGlyph(2);
+	} else if (useFlag && player_said("STONE GLYPH   ")) {
+		useStoneGlyph(3);
+	} else if (useFlag && player_said("STONE GLYPH    ")) {
+		useStoneGlyph(4);
+	} else if (useFlag && player_said("STONE GLYPH     ")) {
+		useStoneGlyph(5);
+	} else if (useFlag && player_said("STONE GLYPH      ")) {
+		useStoneGlyph(6);
+	} else if (useFlag && player_said("STONE GLYPH       ")) {
+		useStoneGlyph(7);
+	} else if (player_said("SHOVEL", "DOOR") && inv_player_has("SHOVEL")) {
+		digi_play("507R07", 1);
+	} else if (player_said("WOODEN LADDER", "DOOR") && inv_player_has("WOODEN LADDER")) {
+		digi_play("507R07", 1);
+	} else if (player_said("exit")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+		case 666:
+			disable_player_commands_and_fade_init(2);
+			break;
+		case 2:
+			adv_kill_digi_between_rooms(false);
+			digi_preload("507_s02");
+			digi_play_loop("507_s02", 3, 100);
+			_G(game).setRoom(506);
+			break;
+		default:
+			break;
+		}
+	} else {
+		return;
+	}
+
+	_G(player).command_ready = false;
+}
+
+void Room507::useStoneGlyph(int blockNum) {
+	player_set_commands_allowed(false);
+
+	if (!_blockFlag[blockNum]) {
+		terminateMachineAndNull(_block[blockNum]);
+		_block[blockNum] = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, BLOCK_NAMES[blockNum]);
+		_blockFlag[blockNum] = true;
+		_G(flags)[V172] = 1;
+	}
+
+	_G(kernel).trigger_mode = KT_DAEMON;
+	sendWSMessage_190000(_block[blockNum], 15);
+	sendWSMessage_10000(1, _block[blockNum], _blockSeries[blockNum], _G(flags)[V172 + blockNum] + 1, _G(flags)[V172 + blockNum] + 4, 3,
+		_blockSeries[blockNum], _G(flags)[V172 + blockNum] + 5, _G(flags)[V172 + blockNum] + 5, 0);
+	digi_play("507_s93", 2);
+
+	_G(flags)[V172 + blockNum] += 4;
+	if (_G(flags)[V172 + blockNum] > 16)
+		_G(flags)[V172 + blockNum] = 0;
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section5/room507.h b/engines/m4/riddle/rooms/section5/room507.h
index 8e600b11aec..43040806712 100644
--- a/engines/m4/riddle/rooms/section5/room507.h
+++ b/engines/m4/riddle/rooms/section5/room507.h
@@ -29,12 +29,23 @@ namespace Riddle {
 namespace Rooms {
 
 class Room507 : public Room {
+private:
+	int _blockSeries[8];
+	machine *_block[8];
+	bool _blockFlag[8];
+	int _doorSeries = 0;
+	machine *_door = nullptr;
+
+	void useStoneGlyph(int blockNum);
 public:
-	Room507() : Room() {}
+	Room507();
 	~Room507() override {}
 
+	void preload() override;
 	void init() override;
 	void daemon() override;
+	void pre_parser() override;
+	void parser() override;
 };
 
 } // namespace Rooms




More information about the Scummvm-git-logs mailing list