[Scummvm-git-logs] scummvm master -> 1535ee1e6de697715976bf315ee127ef4951e983

dreammaster noreply at scummvm.org
Sun Sep 1 21:28:45 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:
1535ee1e6d M4: RIDDLE: Added room 493


Commit: 1535ee1e6de697715976bf315ee127ef4951e983
    https://github.com/scummvm/scummvm/commit/1535ee1e6de697715976bf315ee127ef4951e983
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-01T14:28:28-07:00

Commit Message:
M4: RIDDLE: Added room 493

Changed paths:
    engines/m4/riddle/hotkeys.cpp
    engines/m4/riddle/hotkeys.h
    engines/m4/riddle/rooms/room.cpp
    engines/m4/riddle/rooms/room.h
    engines/m4/riddle/rooms/section4/room493.cpp
    engines/m4/riddle/rooms/section4/room493.h
    engines/m4/riddle/vars.h


diff --git a/engines/m4/riddle/hotkeys.cpp b/engines/m4/riddle/hotkeys.cpp
index 2341997bee0..aa308a0b340 100644
--- a/engines/m4/riddle/hotkeys.cpp
+++ b/engines/m4/riddle/hotkeys.cpp
@@ -91,6 +91,9 @@ void Hotkeys::toggle_through_cursors(CursorChange cursChange) {
 void Hotkeys::escape_key_pressed(void *, void *) {
 }
 
+void Hotkeys::show_version(void *, void *) {
+	warning("TODO: show_version");
+}
 
 void Hotkeys::t_cb(void *, void *) {
 //	g_vars->_interface.t_cb();
diff --git a/engines/m4/riddle/hotkeys.h b/engines/m4/riddle/hotkeys.h
index 145021c2c2e..d68d3f27aa9 100644
--- a/engines/m4/riddle/hotkeys.h
+++ b/engines/m4/riddle/hotkeys.h
@@ -42,6 +42,8 @@ public:
 	 */
 	static void escape_key_pressed(void *, void *);
 
+	static void show_version(void *, void *);
+
 	virtual ~Hotkeys() {}
 
 	void add_hot_keys() override;
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 1807f5ed615..be04d1bff52 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -593,6 +593,10 @@ void Room::enableHotspots() {
 		hs->active = true;
 }
 
+bool Room::checkStrings() const {
+	return _G(string1).empty() && _G(string2).empty() && _G(string3).empty();
+}
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index b3ee31a3255..c7ea5905232 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -122,6 +122,8 @@ protected:
 	 */
 	void enableHotspots();
 
+	bool checkStrings() const;
+
 public:
 	Room() : M4::Room() {}
 	~Room() override {}
diff --git a/engines/m4/riddle/rooms/section4/room493.cpp b/engines/m4/riddle/rooms/section4/room493.cpp
index 96266ba25f5..8dfac16e53c 100644
--- a/engines/m4/riddle/rooms/section4/room493.cpp
+++ b/engines/m4/riddle/rooms/section4/room493.cpp
@@ -21,16 +21,189 @@
 
 #include "m4/riddle/rooms/section4/room493.h"
 #include "m4/graphics/gr_series.h"
+#include "m4/gui/gui_sys.h"
+#include "m4/platform/keys.h"
 #include "m4/riddle/vars.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+void Room493::preload() {
+	_G(player).walker_type = 1;
+	_G(player).shadow_type = 1;
+	_G(player).walker_in_this_scene = false;
+}
+
 void Room493::init() {
+	player_set_commands_allowed(false);
+	AddSystemHotkey(KEY_ESCAPE, escape_key_pressed);
+	RemoveSystemHotkey(303);
+	RemoveSystemHotkey(22);
+
+	_panning = 255;
+
+	if (_G(game).previous_room != 494) {
+		digi_preload("lostcity");
+
+		if (_G(game).previous_room != 917) {
+			digi_preload("riptheme", 917);
+			digi_play("riptheme", 3, 255, -1, 917);
+		}
+	}
+
+	_credits = series_stream("game credits", 10, 256, 900);
+	series_stream_break_on_frame(_credits, 10, 30);
+	kernel_timing_trigger(360, 700);
 }
 
 void Room493::daemon() {
+	static int32 FRAMES[13] = {
+		4, 12, 24, 36, 48, 60, 68, 76, 88, 96, 108, 116, 128
+	};
+
+	switch (_G(kernel).trigger) {
+	case 30:
+		series_stream_break_on_frame(_credits, FRAMES[2], 50);
+		setTrigger(40);
+		break;
+
+	case 50:
+		series_stream_break_on_frame(_credits, FRAMES[3], 70);
+		setTrigger(60);
+		break;
+
+	case 70:
+		series_stream_break_on_frame(_credits, FRAMES[4] - 2, 90);
+		setTrigger(80);
+		break;
+
+	case 90:
+		series_stream_break_on_frame(_credits, FRAMES[5] - 2, 100);
+		setTrigger(100);
+		break;
+
+	case 110:
+		series_stream_break_on_frame(_credits, FRAMES[6] - 2, 130);
+		setTrigger(120);
+		break;
+
+	case 130:
+		series_stream_break_on_frame(_credits, FRAMES[7] - 2, 150);
+		setTrigger(140);
+		break;
+
+	case 150:
+		series_stream_break_on_frame(_credits, FRAMES[8] - 2, 170);
+		setTrigger(160);
+		break;
+
+	case 170:
+		series_stream_break_on_frame(_credits, FRAMES[9] - 2, 190);
+		setTrigger(180);
+		break;
+
+	case 190:
+		series_stream_break_on_frame(_credits, FRAMES[10] - 2, 210);
+		setTrigger(200);
+		break;
+
+	case 210:
+		series_stream_break_on_frame(_credits, FRAMES[11] - 2, 230);
+		setTrigger(220);
+		break;
+
+	case 230:
+		series_stream_break_on_frame(_credits, FRAMES[12] - 2, 250);
+		setTrigger(240);
+		break;
+
+	case 250:
+		setTrigger(260);
+		break;
+
+	case 666:
+		AddSystemHotkey(303, Hotkeys::show_version);
+		AddSystemHotkey(22, Hotkeys::show_version);
+		_G(game).setRoom(494);
+		break;
+
+	case 700:
+		if (checkStrings()) {
+			digi_stop(3);
+			kernel_timing_trigger(10, 800);
+		} else {
+			kernel_timing_trigger(65, 700);
+		}
+		break;
+
+	case 800:
+		digi_play("lostcity", 3, 255, 810, 917);
+		break;
+
+	case 810:
+		digi_play_loop("riptheme", 3, 255, -1, 917);
+		break;
+
+	case 900:
+		if (_G(game).previous_room == 494)
+			disable_player_commands_and_fade_init(920);
+		else
+			disable_player_commands_and_fade_init(910);
+		break;
+
+	case 910:
+		_panning -= 4;
+		if (_panning > 0) {
+			digi_change_panning(3, _panning);
+			kernel_timing_trigger(2, 910);
+		} else {
+			AddSystemHotkey(303, Hotkeys::show_version);
+			AddSystemHotkey(22, Hotkeys::show_version);
+			_G(game).setRoom(494);
+		}
+		break;
+
+	case 920:
+		adv_kill_digi_between_rooms(false);
+		AddSystemHotkey(303, Hotkeys::show_version);
+		AddSystemHotkey(22, Hotkeys::show_version);
+		_G(game).setRoom(494);
+		break;
+
+	case 40:
+	case 60:
+	case 80:
+	case 100:
+	case 120:
+	case 140:
+	case 160:
+	case 180:
+	case 200:
+	case 220:
+	case 240:
+	case 260:
+		crunch();
+		break;
+
+	default:
+		break;
+	}
+}
+
+void Room493::escape_key_pressed(void *, void *) {
+	_G(kernel).trigger_mode = KT_DAEMON;
+	disable_player_commands_and_fade_init(910);
+}
+
+void Room493::setTrigger(int trigger) {
+	series_stream_check_series(_credits, 30000);
+	kernel_timing_trigger(900, trigger);
+}
+
+void Room493::crunch() {
+	series_stream_check_series(_credits, 10);
+	ws_OverrideCrunchTime(_credits);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section4/room493.h b/engines/m4/riddle/rooms/section4/room493.h
index a2d882238b3..c457b8ba7a0 100644
--- a/engines/m4/riddle/rooms/section4/room493.h
+++ b/engines/m4/riddle/rooms/section4/room493.h
@@ -29,10 +29,19 @@ namespace Riddle {
 namespace Rooms {
 
 class Room493 : public Room {
+private:
+	machine *_credits = nullptr;
+	int _panning = 0;
+
+	static void escape_key_pressed(void *, void *);
+	void setTrigger(int trigger);
+	void crunch();
+
 public:
 	Room493() : Room() {}
 	~Room493() override {}
 
+	void preload() override;
 	void init() override;
 	void daemon() override;
 };
diff --git a/engines/m4/riddle/vars.h b/engines/m4/riddle/vars.h
index 2f49271be82..5c1aef865ff 100644
--- a/engines/m4/riddle/vars.h
+++ b/engines/m4/riddle/vars.h
@@ -56,6 +56,9 @@ public:
 	int _global301 = 0;
 	int _flag1 = 0;
 	bool _kittyScreaming = false;
+	Common::String _string1;
+	Common::String _string2;
+	Common::String _string3;
 
 public:
 	Vars();




More information about the Scummvm-git-logs mailing list