[Scummvm-git-logs] scummvm master -> 25802536a7958d8a0e5f7c6e2427afde38e509a5

Strangerke noreply at scummvm.org
Mon Feb 10 01:03:54 UTC 2025


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:
25802536a7 M4: RIDDLE: Implementaton of Room860


Commit: 25802536a7958d8a0e5f7c6e2427afde38e509a5
    https://github.com/scummvm/scummvm/commit/25802536a7958d8a0e5f7c6e2427afde38e509a5
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2025-02-10T02:03:43+01:00

Commit Message:
M4: RIDDLE: Implementaton of Room860

Changed paths:
    engines/m4/core/rooms.cpp
    engines/m4/core/rooms.h
    engines/m4/riddle/rooms/section8/room860.cpp
    engines/m4/riddle/rooms/section8/room860.h


diff --git a/engines/m4/core/rooms.cpp b/engines/m4/core/rooms.cpp
index 138c8352815..12c37395bce 100644
--- a/engines/m4/core/rooms.cpp
+++ b/engines/m4/core/rooms.cpp
@@ -469,6 +469,11 @@ void Sections::camera_shift_xy(int32 x, int32 y) {
 	_cameraShift_vert_Amount = -sc->y1 - y + _G(kernel).letter_box_y;
 }
 
+void Sections::set_camera_delta_pan(int32 deltaX, int32 deltaY) {
+	_cameraShiftAmount = -deltaX;
+	_cameraShift_vert_Amount = -deltaY;
+}
+
 void Sections::adv_camera_pan_step(int32 step) {
 	camera_pan_step = step;
 }
diff --git a/engines/m4/core/rooms.h b/engines/m4/core/rooms.h
index f118b046a10..54f292c26a7 100644
--- a/engines/m4/core/rooms.h
+++ b/engines/m4/core/rooms.h
@@ -158,6 +158,7 @@ public:
 
 	void pal_game_task();
 	void camera_shift_xy(int32 x, int32 y);
+	void set_camera_delta_pan(int32 deltaX, int32 deltaY);
 	void adv_camera_pan_step(int32 step);
 	bool game_camera_panning() const {
 		return _cameraShiftAmount != 0 || _cameraShift_vert_Amount != 0;
diff --git a/engines/m4/riddle/rooms/section8/room860.cpp b/engines/m4/riddle/rooms/section8/room860.cpp
index d08394db883..243ae55ccb2 100644
--- a/engines/m4/riddle/rooms/section8/room860.cpp
+++ b/engines/m4/riddle/rooms/section8/room860.cpp
@@ -19,18 +19,157 @@
  *
  */
 
+#include "m4/m4.h"
 #include "m4/riddle/rooms/section8/room860.h"
 #include "m4/graphics/gr_series.h"
+#include "m4/gui/gui_vmng_screen.h"
 #include "m4/riddle/vars.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+void Room860::preload() {
+	LoadWSAssets("other script", _G(master_palette));
+
+	_G(player).walker_type = WALKER_ALT;
+	_G(player).shadow_type = SHADOW_ALT;
+	_G(player).walker_in_this_scene = false;
+}
+
 void Room860::init() {
+	interface_hide();
+	player_set_commands_allowed(false);
+	_G(camera_reacts_to_player) = false;
+	MoveScreenDelta(_G(game_buff_ptr), -320, 0);
+	g_engine->adv_camera_pan_step(3);
+	digi_preload("950_s45", 950);
+	digi_play_loop("950_s45", 3, 240, -1, 950);
+	digi_preload("baronstg", 860);
+	digi_preload("809_s04", 809);
+	digi_preload("860r01", 860);
+	digi_preload("860r02", 860);
+	digi_preload("860m01", 860);
+	digi_preload("860m02", 860);
+	digi_preload("860b01", 860);
+
+	_860RipCrossSeries = series_load("860 RIP CROSS", -1, nullptr);
+	_860RipWalkSeries = series_load("860 RIP WALK", -1, nullptr);
+	_860RipTalkSeries = series_load("860 RIP TALK", -1, nullptr);
+	_860MeiTalkSeries = series_load("860 MEI TALK", -1, nullptr);
+	_860DragonHeadsSpewingSeries = series_load("860 DRAGON HEADS SPEWING", -1, nullptr);
+	series_play("860 DRAGON HEADS SPEWING", 1024, 0, -1, 12, -1, 100, 0, 0, 0, -1);
+	_860RipMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 768, false, triggerMachineByHashCallback, "860 rip");
+	sendWSMessage_10000(1, _860RipMach, _860RipCrossSeries, 1, 20, 80, _860RipCrossSeries, 20, 20, 0);
+	_860McMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 768, false, triggerMachineByHashCallback, "860 mc");
+	sendWSMessage_10000(1, _860McMach, _860MeiTalkSeries, 1, 1, -1, _860MeiTalkSeries, 1, 1, 0);
+	}
+
+void Room860::pre_parser() {
+	// Nothing
+}
+
+void Room860::parser() {
+	// Nothing
 }
 
 void Room860::daemon() {
+	switch (_G(kernel).trigger) {
+	case 1:
+		digi_stop(1);
+		series_load("860SHLD", -1, nullptr);
+		series_place_sprite("860SHLD", 0, 0, 0, 100, 512);
+		sendWSMessage_10000(1, _860RipMach, _860RipWalkSeries, 1, 100, 2, _860RipWalkSeries, 1, 1, 0);
+		sendWSMessage_190000(_860RipMach, 3);
+		g_engine->set_camera_delta_pan(-290, 0);
+		series_unload(_860RipCrossSeries);
+
+		break;
+
+	case 2:
+		series_unload(_860RipWalkSeries);
+		sendWSMessage_10000(1, _860McMach, _860MeiTalkSeries, 1, 1, -1, _860MeiTalkSeries, 1, 11, 4);
+		digi_play("860m01", 2, 255, 3, 860);
+
+		break;
+
+	case 3:
+		sendWSMessage_10000(1, _860McMach, _860MeiTalkSeries, 11, 11, -1, _860MeiTalkSeries, 11, 11, 0);
+		sendWSMessage_10000(1, _860RipMach, _860RipTalkSeries, 1, 2, -1, _860RipTalkSeries, 1, 2, 4);
+		digi_play("860r01", 2, 255, 4, 860);
+
+		break;
+
+	case 4:
+		sendWSMessage_10000(1, _860RipMach, _860RipTalkSeries, 1, 6, -1, _860RipTalkSeries, 6, 6, 0);
+		sendWSMessage_10000(1, _860McMach, _860MeiTalkSeries, 12, 26, -1, _860MeiTalkSeries, 26, 26, 0);
+		kernel_timing_trigger(25, 5, nullptr);
+
+		break;
+
+	case 5:
+		digi_play("860m02", 2, 255, -1, 860);
+		kernel_timing_trigger(60, 5, nullptr);
+
+		break;
+
+	case 6:
+		sendWSMessage_10000(1, _860McMach, _860MeiTalkSeries, 26, 26, -1, _860MeiTalkSeries, 26, 26, 0);
+		digi_play("860r02", 2, 255, 7, -1);
+		sendWSMessage_10000(1, _860RipMach, _860RipTalkSeries, 1, 2, -1, _860RipTalkSeries, 1, 2, 4);
+
+		break;
+
+	case 7:
+		sendWSMessage_10000(1, _860McMach, _860MeiTalkSeries, 27, 32, 91, _860MeiTalkSeries, 32, 32, 0);
+		sendWSMessage_10000(1, _860RipMach, _860RipTalkSeries, 6, 6, -1, _860RipTalkSeries, 6, 6, 0);
+
+		break;
+
+	case 80:
+		sendWSMessage_10000(1, _860RipMach, _860RipCrossSeries, 21, 164, 1, _860RipWalkSeries, 1, 1, 0);
+		digi_play_loop("809_s04", 1, 200, -1, 809);
+
+		break;
+
+	case 91:
+		g_engine->set_camera_delta_pan(-30, 0);
+		digi_play("baronstg", 1, 255, -1, 860);
+		kernel_timing_trigger(210, 1000, nullptr);
+
+		break;
+
+	case 92:
+		digi_stop(2);
+		disable_player_commands_and_fade_init(93);
+
+		break;
+
+	case 93:
+		adv_kill_digi_between_rooms(false);
+		digi_stop(1);
+
+		digi_unload("809_s04");
+		digi_unload("860r01");
+		digi_unload("860r02");
+		digi_unload("860m01");
+		digi_unload("860m02");
+		digi_unload("860b01");
+		digi_unload("baronstg");
+
+		digi_play_loop("950_s45", 3, 80, -1, 950);
+
+		_G(game).new_room = 811;
+
+		break;
+
+	case 1000:
+		digi_play("860b01", 2, 255, 92, 860);
+		break;
+
+	default:
+		break;
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section8/room860.h b/engines/m4/riddle/rooms/section8/room860.h
index 495d47848d8..2cc4e3d6e33 100644
--- a/engines/m4/riddle/rooms/section8/room860.h
+++ b/engines/m4/riddle/rooms/section8/room860.h
@@ -33,8 +33,21 @@ public:
 	Room860() : Room() {}
 	~Room860() override {}
 
+	void preload() override;
 	void init() override;
+	void pre_parser() override;
+	void parser() override;
 	void daemon() override;
+
+private:
+	int32 _860DragonHeadsSpewingSeries = 0;
+	int32 _860MeiTalkSeries = 0;
+	int32 _860RipCrossSeries = 0;
+	int32 _860RipTalkSeries = 0;
+	int32 _860RipWalkSeries = 0;
+
+	machine *_860McMach = nullptr;
+	machine *_860RipMach = nullptr;
 };
 
 } // namespace Rooms




More information about the Scummvm-git-logs mailing list