[Scummvm-git-logs] scummvm master -> 43a718c2c24a7f341ea8b0dc425c0045dd730457

dreammaster noreply at scummvm.org
Wed Oct 30 05:34:47 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:
43a718c2c2 M4: RIDDLE: In progress room 203 init


Commit: 43a718c2c24a7f341ea8b0dc425c0045dd730457
    https://github.com/scummvm/scummvm/commit/43a718c2c24a7f341ea8b0dc425c0045dd730457
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-10-29T22:34:38-07:00

Commit Message:
M4: RIDDLE: In progress room 203 init

This is the beginning of another one of the biggest rooms

Changed paths:
    engines/m4/riddle/rooms/section2/room203.cpp
    engines/m4/riddle/rooms/section2/room203.h
    engines/m4/riddle/rooms/section2/section2.cpp
    engines/m4/riddle/rooms/section2/section2.h


diff --git a/engines/m4/riddle/rooms/section2/room203.cpp b/engines/m4/riddle/rooms/section2/room203.cpp
index e06efb67116..fd24b98e064 100644
--- a/engines/m4/riddle/rooms/section2/room203.cpp
+++ b/engines/m4/riddle/rooms/section2/room203.cpp
@@ -20,19 +20,336 @@
  */
 
 #include "m4/riddle/rooms/section2/room203.h"
+#include "m4/riddle/rooms/section2/section2.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 {
 
+const int16 OFFICIAL_NORMAL_DIRS[] = { 200, 201, 202, -1 };
+const char *OFFICIAL_NORMAL_NAMES[] = {
+	"official walk pos11", "official walk pos9", "official walk pos7"
+};
+const int16 OFFICIAL_SHADOW_DIRS[] = { 210, 211, 212, -1 };
+const char *OFFICIAL_SHADOW_NAMES[] = {
+	"203of09s", "203of04s", "203of12s"
+};
+
+
 void Room203::init() {
+	if (_G(game).previous_room != KERNEL_RESTORING_GAME)
+		_val1 = 0;
+
+	hotspot_set_active("SOLDIER'S HELMET", false);
+	setupHelmetHotspot();
+
+	_val2 = _val3 = _val4 = _val5 = 0;
+	_val6 = _val7 = _val8 = _val9 = 0;
+	_val10 = 0;
+	_trigger1 = _trigger2 = _trigger3 = -1;
+	_trigger4 = _trigger5 = -1;
+
+	digi_preload("203_s02");
+	_shadow3 = series_load("safari shadow 3");
+
+	switch (_G(game).previous_room) {
+	case KERNEL_RESTORING_GAME:
+		setupGk();
+		setupOldLady();
+		setupPigeons();
+		setupOfficial();
+		kernel_timing_trigger(1, 130);
+
+		if (_val1) {
+			digi_preload("203_s09");
+			series_load("one frame helmet");
+			series_place_sprite("one frame helmet", 0, 960, -53, 100, 0x700);
+			_peasantSeries = series_load("pesky peasant reach for helmet");
+			_peasantSeriesShadow = series_load("shadow pp reach for helmet");
+
+			_peasant = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 1240, 332, 75, 0x800, 0,
+				triggerMachineByHashCallback, "pesky peasant");
+			_peasantShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 1240, 332, 75, 0x800, 0,
+				triggerMachineByHashCallback, "pesky peasant SHADOW");
+			sendWSMessage_10000(1, _peasant, _peasantSeries, 23, 36, 121,
+				_peasantSeries, 36, 23, 2);
+			sendWSMessage_10000(1, _peasantShadow, _peasantSeriesShadow, 23, 36, -1,
+				_peasantSeriesShadow, 36, 23, 2);
+
+			hotspot_set_active("SOLDIER'S HELMET", false);
+			hotspot_set_active("SOLDIER'S HELMET ", true);
+
+		} else if (_G(flags)[V061]) {
+			hotspot_set_active("PEASANT", false);
+			hotspot_set_active("SOLDIER'S HELMET", false);
+
+		} else {
+			switch (_peasantMode) {
+			case 4050:
+			case 4051:
+				_peasantX = 745;
+				_peasantY = 378;
+				_peasantLayer = 0x800;
+				_peasantScale = 75;
+				break;
+			case 4052:
+				_peasantX = 418;
+				_peasantY = 385;
+				_peasantLayer = 0x800;
+				_peasantScale = 75;
+				break;
+			case 4053:
+				_peasantX = 950;
+				_peasantY = 378;
+				_peasantLayer = 0x800;
+				_peasantScale = 75;
+				break;
+			case 4054:
+				_peasantX = 1100;
+				_peasantY = 375;
+				_peasantLayer = 0x800;
+				_peasantScale = 75;
+				break;
+			default:
+				break;
+			}
+
+			setupPeasant();
+		}
+		break;
+
+	case 202:
+		player_set_commands_allowed(false);
+		MoveScreenDelta(_G(game_buff_ptr), -300, 0);
+		ws_demand_location(547, 316, 1);
+
+		setupGk();
+		setupOldLady();
+		setupPigeons();
+		setupOfficial();
+
+		if (_G(flags)[V061]) {
+			hotspot_set_active("PEASANT", false);
+			hotspot_set_active("SOLDIER'S HELMET", false);
+
+		} else {
+			if (_G(flags)[V072] == 4050) {
+				_peasantMode = 4050;
+				_peasantShould = 4091;
+			} else {
+				_peasantMode = 4051;
+				_peasantShould = 4110;
+			}
+
+			_peasantX = 745;
+			_peasantY = 378;
+			_peasantLayer = 0x800;
+			_peasantScale = 75;
+
+			setupPeasant();
+		}
+
+		kernel_timing_trigger(1, 130);
+		player_set_commands_allowed(true);
+		break;
+
+	case 204:
+		player_set_commands_allowed(false);
+		setupOfficial();
+		setupGk();
+		setupOldLady();
+		setupPigeons();
+
+		hotspot_set_active("PEASANT", false);
+		hotspot_set_active("SOLDIER'S HELMET", false);
+		kernel_timing_trigger(1, 130);
+		ws_demand_location(348, 273, 1);
+		ws_walk(231, 331, nullptr, 303, 4);
+
+	case 207:
+		MoveScreenDelta(_G(game_buff_ptr), -780, 0);
+		player_set_commands_allowed(false);
+		setupGk();
+		setupOldLady();
+		setupPigeons();
+
+		if (_G(flags)[V067]) {
+			ws_demand_location(1100, 290, 9);
+			_G(player).disable_hyperwalk = true;
+
+			_peskyYellsThief = series_load("pesky yells thief");
+			_peasantRocksShadow = series_load("shadow pesky rock loop");
+			_peasantX = 1100;
+			_peasantY = 375;
+			_peasantLayer = 0x800;
+			_peasantScale = 75;
+
+			_peasant = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 1100, 322, 75, 0x800, 0,
+				triggerMachineByHashCallback, "pp");
+			_peasantShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+				_peasantX, _peasantY - 53, _peasantScale, _peasantLayer, 0,
+				triggerMachineByHashCallback, "pp");
+
+			sendWSMessage_10000(1, _peasant, _peskyYellsThief, 21, 17, 354,
+				_peskyYellsThief, 17, 17, 0);
+			sendWSMessage_10000(1, _peasantShadow, _peasantRocksShadow, 1, 1, -1,
+				_peasantRocksShadow, 1, 1, 0);
+
+			digi_preload("203p02");
+			_flag1 = true;
+			_officialMode = 2001;
+			_officialShould = 2010;
+
+			_officialStander = series_load("official stander");
+			_official = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 1436, 362, 85, 0xf00, 0,
+				triggerMachineByHashCallback, "of");
+			sendWSMessage_10000(1, _official, _officialStander, 1, 1, 356,
+				_officialStander, 1, 1, 0);
+
+			_G(camera_reacts_to_player) = false;
+			ws_walk_load_shadow_series(OFFICIAL_SHADOW_DIRS, OFFICIAL_SHADOW_NAMES);
+			ws_walk_load_walker_series(OFFICIAL_NORMAL_DIRS, OFFICIAL_NORMAL_NAMES);
+			_officialTurn9_11 = series_load("official turn 9-11");
+			_officialTurn11_3 = series_load("official turn 11-3");
+			_officialTurn3_7 = series_load("official turn 3-7");
+
+			kernel_timing_trigger(10, 352);
+			kernel_timing_trigger(1, 350);
+
+		} else {
+			ws_demand_location(1055, 295, 7);
+			ws_walk(1045, 345, nullptr, 303, 7);
+			kernel_timing_trigger(1, 300);
+		}
+		break;
+
+	default:
+		// TODO
+		break;
+	}
+
+	digi_play_loop("203_s02", 3, 40);
 }
 
 void Room203::daemon() {
 }
 
+void Room203::setupHelmetHotspot() {
+	for (HotSpotRec *hs = _G(currentSceneDef).hotspots; hs; hs = hs->next) {
+		if (!strcmp(hs->vocab, "SOLDIER'S HELMET")) {
+			hs->active = _G(flags)[V060] ?
+				!inv_player_has("SOLDIER'S HELMET") && hs->lr_x > 1200 :
+				hs->lr_x < 1200;
+			break;
+		}
+	}
+}
+
+void Room203::setupPeasantHotspot(int mode) {
+	for (HotSpotRec *hs = _G(currentSceneDef).hotspots; hs; hs = hs->next) {
+		if (!strcmp(hs->vocab, "PEASANT")) {
+			switch (mode) {
+			case 4050:
+			case 4051:
+				hs->active = hs->lr_x > 450 && hs->lr_x < 800;
+				break;
+			case 4052:
+				hs->active = hs->lr_x < 450;
+				break;
+			case 4053:
+				hs->active = hs->lr_x > 800 && hs->lr_x < 1040;
+				break;
+			case 4054:
+				hs->active = _peasantShould != 4150 && hs->lr_x > 1040;
+				break;
+			default:
+				break;
+			}
+			break;
+		}
+	}
+}
+
+void Room203::setupGk() {
+	_gkFrame = series_load("gk single frame");
+	_gk = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x800, 0,
+		triggerMachineByHashCallback, "gk single frame");
+	_gkMode = _gkShould = 3000;
+	sendWSMessage_10000(1, _gk, _gkFrame, 1, 1, -1, _gkFrame, 1, 1, 0);
+	kernel_trigger_dispatchx(kernel_trigger_create(125));
+}
+
+void Room203::setupOldLady() {
+	_oldLadyFrame = series_load("old lady - two single frames");
+
+	if (_G(flags)[V060]) {
+		hotspot_set_active("SOLDIER'S HELMET", false);
+		_oldLadyNoHelmet = series_load("old lady feeding no helmet");
+		_oldLadyMode = 5569;
+		_oldLadyShould = 5200;
+		_oldLady = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 640, -53, 100, 0x100, 0,
+			triggerMachineByHashCallback, "ol");
+		sendWSMessage_10000(1, _oldLady, _oldLadyNoHelmet, 1, 1, -1,
+			_oldLadyNoHelmet, 1, 1, 0);
+
+	} else {
+		_oldLadyFeedingBirds = series_load("old lady feeding birds");
+		_oldLady = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 640, -53, 100, 0x100, 0,
+			triggerMachineByHashCallback, "ol");
+		_oldLadyMode = 5666;
+		_oldLadyShould = 5100;
+		sendWSMessage_10000(1, _oldLady, _oldLadyFrame, 1, 1, -1,
+			_oldLadyFrame, 1, 1, 0);
+	}
+}
+
+void Room203::setupPigeons() {
+	_pigeonsSeries1 = series_load("pigeon series of flcs 1");
+	_pigeonsSeries3 = series_load("pigeon series of flcs 3");
+	_pigeons1 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 1045, 373, 85, 0, 0,
+		triggerMachineByHashCallback, "pig1");
+	_pigeons3 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 1065, 370, 85, 1, 0,
+		triggerMachineByHashCallback, "pig3");
+
+	kernel_trigger_dispatchx(kernel_trigger_create(392));
+}
+
+void Room203::setupOfficial() {
+	_officialMode = 2001;
+	_officialShould = 2010;
+	_officialStander = series_load("official stander");
+	_official = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 1436, 362, 85, 0xf00, 0,
+		triggerMachineByHashCallback, "of");
+	_officialShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 1436, 362, 85, 0xf00, 0,
+		triggerMachineByHashCallback, "ofSH");
+	sendWSMessage_10000(1, _official, _officialStander, 1, 1, -1,
+		_officialStander, 1, 1, 0);
+	sendWSMessage_10000(1, _officialShadow, _shadow3, 1, 1, -1,
+		_shadow3, 1, 1, 0);
+}
+
+void Room203::setupPeasant() {
+	_peasantRocks = series_load("peasant rocks 5frames");
+	_peasantRocksShadow = series_load("shadow pesky rock loop");
+
+	ws_walk_load_walker_series(S2_PEASANT_NORMAL_DIRS, S2_PEASANT_NORMAL_NAMES);
+	ws_walk_load_shadow_series(S2_PEASANT_SHADOW_DIRS, S2_PEASANT_SHADOW_NAMES);
+
+	setupPeasantHotspot(_peasantMode);
+
+	_peasant = TriggerMachineByHash(1, 1, 0, 0, 0, 0, _peasantX, _peasantY - 53,
+		_peasantScale, _peasantLayer, false, triggerMachineByHashCallback, "pp");
+	sendWSMessage_10000(1, _peasant, _peasantRocks, 1, 5, 120, _peasantRocks, 5, 5, 0);
+
+	_peasantShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0, _peasantX, _peasantY - 53,
+		_peasantScale, _peasantLayer, false, triggerMachineByHashCallback, "pp sh");
+	sendWSMessage_10000(1, _peasant, _peasantRocksShadow, 1, 1, -1,
+		_peasantRocksShadow, 1, 1, 0);
+}
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/section2/room203.h b/engines/m4/riddle/rooms/section2/room203.h
index a510e38f459..df6f75d8f83 100644
--- a/engines/m4/riddle/rooms/section2/room203.h
+++ b/engines/m4/riddle/rooms/section2/room203.h
@@ -29,6 +29,65 @@ namespace Riddle {
 namespace Rooms {
 
 class Room203 : public Room {
+private:
+	int _val1 = 0;
+	int _val2 = 0;
+	int _val3 = 0;
+	int _val4 = 0;
+	int _val5 = 0;
+	int _val6 = 0;
+	int _val7 = 0;
+	int _val8 = 0;
+	int _val9 = 0;
+	int _val10 = 0;
+	int _val11 = 0;
+	int _trigger1 = -1;
+	int _trigger2 = -1;
+	int _trigger3 = -1;
+	int _trigger4 = -1;
+	int _trigger5 = -1;
+	int _shadow3 = 0;
+	machine *_gk = nullptr;
+	int _gkFrame = 0;
+	int _gkMode = 0, _gkShould = 0;
+	machine *_oldLady = nullptr;
+	int _oldLadyFrame = 0;
+	int _oldLadyNoHelmet = 0;
+	int _oldLadyFeedingBirds = 0;
+	int _oldLadyMode = 0, _oldLadyShould = 0;
+	machine *_pigeons1 = nullptr;
+	machine *_pigeons3 = nullptr;
+	int _pigeonsSeries1 = 0;
+	int _pigeonsSeries3 = 0;
+	machine *_official = nullptr;
+	machine *_officialShadow = nullptr;
+	int _officialStander = 0;
+	int _officialMode = 0, _officialShould = 0;
+	int _officialTurn9_11 = 0;
+	int _officialTurn11_3 = 0;
+	int _officialTurn3_7 = 0;
+	machine *_peasant = nullptr;
+	machine *_peasantShadow = nullptr;
+	int _peasantSeries = 0;
+	int _peasantSeriesShadow = 0;
+	int _peasantRocks = 0;
+	int _peasantRocksShadow = 0;
+	int _peskyYellsThief = 0;
+	int _peasantMode = 0, _peasantShould = 0;
+	int _peasantX = 0;
+	int _peasantY = 0;
+	int _peasantScale = 0;
+	int _peasantLayer = 0;
+	bool _flag1 = false;
+
+	void setupHelmetHotspot();
+	void setupPeasantHotspot(int mode);
+	void setupGk();
+	void setupOldLady();
+	void setupPigeons();
+	void setupOfficial();
+	void setupPeasant();
+
 public:
 	Room203() : Room() {}
 	~Room203() override {}
diff --git a/engines/m4/riddle/rooms/section2/section2.cpp b/engines/m4/riddle/rooms/section2/section2.cpp
index b75651f3ec9..8e24aa41619 100644
--- a/engines/m4/riddle/rooms/section2/section2.cpp
+++ b/engines/m4/riddle/rooms/section2/section2.cpp
@@ -48,6 +48,12 @@ const char *S2_MEI_SHADOW_NAMES[] = {
 	"mctsh5"
 };
 
+const int16 S2_PEASANT_NORMAL_DIRS[] = { 240, -1 };
+const char *S2_PEASANT_NORMAL_NAMES[] = { "pesky walk pos3" };
+const int16 S2_PEASANT_SHADOW_DIRS[] = { 250, -1 };
+const char *S2_PEASANT_SHADOW_NAMES[] = { "shadow pesky walk pos3" };
+
+
 Section2::Section2() : Rooms::Section() {
 	add(201, &_room201);
 	add(202, &_room202);
diff --git a/engines/m4/riddle/rooms/section2/section2.h b/engines/m4/riddle/rooms/section2/section2.h
index 896f5236b51..29e56b79578 100644
--- a/engines/m4/riddle/rooms/section2/section2.h
+++ b/engines/m4/riddle/rooms/section2/section2.h
@@ -45,6 +45,11 @@ extern const char *S2_MEI_NORMAL_NAMES[];
 extern const int16 S2_MEI_SHADOW_DIRS[];
 extern const char *S2_MEI_SHADOW_NAMES[];
 
+extern const int16 S2_PEASANT_NORMAL_DIRS[];
+extern const char *S2_PEASANT_NORMAL_NAMES[];
+extern const int16 S2_PEASANT_SHADOW_DIRS[];
+extern const char *S2_PEASANT_SHADOW_NAMES[];
+
 class Section2 : public Section {
 private:
 	Room201 _room201;




More information about the Scummvm-git-logs mailing list