[Scummvm-git-logs] scummvm master -> 2d27ebc197ff2392db4f5e55230f6df15cca7ba7

Strangerke noreply at scummvm.org
Wed Oct 9 22:35:06 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:
2d27ebc197 M4: RIDDLE: Implement parser in room 996


Commit: 2d27ebc197ff2392db4f5e55230f6df15cca7ba7
    https://github.com/scummvm/scummvm/commit/2d27ebc197ff2392db4f5e55230f6df15cca7ba7
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2024-10-09T23:34:17+01:00

Commit Message:
M4: RIDDLE: Implement parser in room 996

Changed paths:
    engines/m4/riddle/rooms/section9/room996.cpp
    engines/m4/riddle/rooms/section9/room996.h


diff --git a/engines/m4/riddle/rooms/section9/room996.cpp b/engines/m4/riddle/rooms/section9/room996.cpp
index 4317f5bef58..18d69b61b27 100644
--- a/engines/m4/riddle/rooms/section9/room996.cpp
+++ b/engines/m4/riddle/rooms/section9/room996.cpp
@@ -27,6 +27,11 @@ namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+Room996::Room996() : Room() {
+	for (int i = 0; i < 13; ++i)
+		_flagArray[i] = 0;
+}
+
 void Room996::preload() {
 	_G(player).walker_in_this_scene = false;
 }
@@ -164,21 +169,264 @@ void Room996::parser() {
 		}
 	}
 
+	switch (_flagArray[12]) {
+	case 1:
+		if (_G(kernel).trigger == -1) {
+			hotspot_set_active(_G(currentSceneDef).hotspots, "FORWARD", true);
+			hotspot_set_active(_G(currentSceneDef).hotspots, "BACK", false);
+			terminateMachine(_roomStates_ripTalker);
+			terminateMachine(_roomStates_field18);
+			terminateMachine(_roomStates_ripTalking);
+			terminateMachine(_roomStates_ripTalk);
+			terminateMachine(_roomStates_field24);
+			kernel_timing_trigger(10, 1, nullptr);
+
+		} else if (_G(kernel).trigger == 1 && _G(flags)[V280] != 0) {
+			_roomStates_tt = series_show("996 Peru Pictograph Snake", 256, 16, -1, -1, 0, 100, 0, 0);
+
+			if (_G(flags)[V148])
+				_roomStates_field4 = series_show("996 Peru Pictograph Condor", 256, 16, -1, -1, 0, 100, 0, 0);
+			else
+				_roomStates_field4 = series_show("996 Peru Pictograph Spider", 256, 16, -1, -1, 0, 100, -13, -87);
+
+			if (_G(flags)[V156])
+				_roomStates_pu = series_show("996 Peru Pictos Solved Spider", 256, 16, -1, -1, 0, 100, 0, 0);
+			else
+				_roomStates_field8 = series_show("996 Peru Pictograph Spider", 256, 16, -1, -1, 0, 100, 0, 0);
+
+			if (_G(flags)[V283])
+				_roomStates_untie = series_show("996 Peru Pictograph Monkey", 256, 16, -1, -1, 0, 100, 0, 0);
+			else
+				_roomStates_untie = series_show("996 Peru Pictograph Spider", 256, 16, -1, -1, 0, 100, -21, 71);
+		}
+		break;
+	case 2:
+		if (_G(kernel).trigger == -1) {
+			if (_flagArray[_moveValue] != 0 || _G(flags)[V047] || _G(flags)[V196] || _G(flags)[V201] || _G(flags)[V207] || _G(flags)[V208] || _G(flags)[V209])
+				hotspot_set_active(_G(currentSceneDef).hotspots, "forward", true);
+			else
+				hotspot_set_active(_G(currentSceneDef).hotspots, "forward", false);
+
+			hotspot_set_active(_G(currentSceneDef).hotspots, "back", true);
+			terminateMachine(_roomStates_tt);
+			terminateMachine(_roomStates_field4);
+			terminateMachine(_roomStates_pu);
+			terminateMachine(_roomStates_field8);
+			terminateMachine(_roomStates_untie);
+			terminateMachine(_roomStates_loop1);
+			terminateMachine(_roomStates_loop2);
+			terminateMachine(_roomStates_loop3);
+			terminateMachine(_roomStates_loop4);
+			terminateMachine(_roomStates_loop5);
+			terminateMachine(_roomStates_loop6);
+			terminateMachine(_roomStates_loop7);
+			terminateMachine(_roomStates_ear2);
+			terminateMachine(_roomStates_field4C);
+			kernel_timing_trigger(10, 1, nullptr);
+
+		} else if (_G(kernel).trigger == 1) {
+			if (_G(flags)[V285])
+				_roomStates_ripTalker = series_show("996 TITLE JOURNAL TYPE", 256, 16, -1, -1, 0, 100, 0, 0);
+
+			if (_G(flags)[V286])
+				_roomStates_field18 = series_show("996 sikkamese text alone", 256, 16, -1, -1, 0, 100, 0, 0);
+
+			if (_G(flags)[V287])
+				_roomStates_ripTalking = series_show("996 PERU SCRIPT", 256, 16, -1, -1, 0, 100, 0, 0);
+
+			if (_G(flags)[V288]) {
+				if (player_been_here(615))
+					_roomStates_ripTalk = series_show("996 EASTER ISLAND SCRIPT", 256, 16, -1, -1, 0, 100, 0, 0);
+				else
+					_roomStates_ripTalk = series_show("996 East Isl. w/o #s", 256, 16, -1, -1, 0, 100, 0, 0);
+			}
 
-	warning("STUB - Room996::parser not implemented");
-
+			if (_G(flags)[V289])
+				_roomStates_field24 = series_show("996 KEY TO TOMB SCRIPT", 256, 16, -1, -1, 0, 100, 0, 0);
 
-	if (_flagArray[12] == 2) {
-		if (_G(kernel).trigger >= 1) {
-			
 		}
+		break;
+	case 3:
+		if (_G(kernel).trigger == -1) {
+			if (player_said("forward", nullptr, nullptr)) {
+				digi_play("950_s56", 1, 255, -1, 950);
+				++_moveValue;
+			} else if (player_said("back", nullptr, nullptr)) {
+				digi_play("950_s56", 1, 255, -1, 950);
+				--_moveValue;
+			}
 
-		_G(player).command_ready = false;
-		return;
-	}
+			if (_moveValue == 0) {
+				_flagArray[12] = 2;
+				digi_play("950_s56", 1, 255, -1, 950);
+			} else if (_flagArray[_moveValue] == 0) {
+				if (_G(flags)[V047])
+					_flagArray[12] = 4;
+				else if (_G(flags)[V196] || _G(flags)[V201] || _G(flags)[V207] || _G(flags)[V208] || _G(flags)[V209])
+					_flagArray[12] = 5;
+			}
+
+			if (_flagArray[_moveValue] != 0 || _G(flags)[V047] || _G(flags)[V196] || _G(flags)[V201] || _G(flags)[V207] || _G(flags)[V208] || _G(flags)[V209])
+				hotspot_set_active(_G(currentSceneDef).hotspots, "forward", true);
+			else
+				hotspot_set_active(_G(currentSceneDef).hotspots, "forward", false);
 
+			if (_flagArray[12] == 4) {
+				if (_G(flags)[V196] || _G(flags)[V201] || _G(flags)[V207] || _G(flags)[V208] || _G(flags)[V209])
+					hotspot_set_active(_G(currentSceneDef).hotspots, "forward", true);
+				else
+					hotspot_set_active(_G(currentSceneDef).hotspots, "forward", false);
+			}
 
+			if (_flagArray[12] == 5)
+				hotspot_set_active(_G(currentSceneDef).hotspots, "forward", false);
+
+			terminateMachine(_roomStates_ripTalker);
+			terminateMachine(_roomStates_field18);
+			terminateMachine(_roomStates_ripTalking);
+			terminateMachine(_roomStates_ripTalk);
+			terminateMachine(_roomStates_field24);
+			terminateMachine(_roomStates_loop1);
+			terminateMachine(_roomStates_loop2);
+			terminateMachine(_roomStates_loop3);
+			terminateMachine(_roomStates_loop4);
+			terminateMachine(_roomStates_loop5);
+			terminateMachine(_roomStates_loop6);
+			terminateMachine(_roomStates_loop7);
+			terminateMachine(_roomStates_ear2);
+			terminateMachine(_roomStates_field4C);
+			kernel_timing_trigger(10, 1, nullptr);
+		} else if (_G(kernel).trigger == 1) {
+			switch (_flagArray[_moveValue]) {
+			case 1:
+				_roomStates_loop1 = series_show("996car", 256, 16, -1, -1, 0, 100, 0, 0);
+				break;
+			case 2:
+				_roomStates_loop1 = series_show("996car", 256, 16, -1, -1, 1, 100, 0, 0);
+				break;
+			case 3:
+				_roomStates_loop1 = series_show("996car", 256, 16, -1, -1, 2, 100, 0, 0);
+				break;
+			case 4:
+				_roomStates_loop1 = series_show("996car", 256, 16, -1, -1, 3, 100, 0, 0);
+				break;
+			case 5:
+				_roomStates_loop1 = series_show("996car", 256, 16, -1, -1, 4, 100, 0, 0);
+				break;
+			case 6:
+				_roomStates_loop1 = series_show("996car", 256, 16, -1, -1, 5, 100, 0, 0);
+				break;
+			case 7:
+				_roomStates_loop1 = series_show("996car", 256, 16, -1, -1, 6, 100, 0, 0);
+				break;
+			case 8:
+				_roomStates_loop1 = series_show("996car", 256, 16, -1, -1, 7, 100, 0, 0);
+				break;
+			case 9:
+				_roomStates_loop1 = series_show("996car", 256, 16, -1, -1, 8, 100, 0, 0);
+				break;
+			default:
+				break;
+			}
+		}
+		break;
+	case 4:
+		if (_G(kernel).trigger == -1) {
+			if (_G(flags)[V196] || _G(flags)[V201] || _G(flags)[V207] || _G(flags)[V208] || _G(flags)[V209])
+				hotspot_set_active(_G(currentSceneDef).hotspots, "forward", true);
+			else
+				hotspot_set_active(_G(currentSceneDef).hotspots, "forward", false);
+
+			terminateMachine(_roomStates_ripTalker);
+			terminateMachine(_roomStates_field18);
+			terminateMachine(_roomStates_ripTalking);
+			terminateMachine(_roomStates_ripTalk);
+			terminateMachine(_roomStates_field24);
+			terminateMachine(_roomStates_loop1);
+			terminateMachine(_roomStates_loop3);
+			terminateMachine(_roomStates_loop4);
+			terminateMachine(_roomStates_loop5);
+			terminateMachine(_roomStates_loop6);
+			terminateMachine(_roomStates_loop7);
+			terminateMachine(_roomStates_ear2);
+			terminateMachine(_roomStates_field4C);
+			kernel_timing_trigger(10, 1, nullptr);
+		} else if (_G(kernel).trigger == 1) {
+			_check201Fl = _G(flags)[V201] != 0;
+			_check207Fl = _G(flags)[V207] != 0;
+			_check208Fl = _G(flags)[V208] != 0;
+			_check209Fl = _G(flags)[V209] != 0;
+
+			if (!_check201Fl && !_check207Fl && !_check208Fl && !_check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ136", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (_check201Fl && !_check207Fl && !_check208Fl && !_check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ122", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (!_check201Fl && _check207Fl && !_check208Fl && !_check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ123", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (!_check201Fl && !_check207Fl && !_check208Fl && _check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ124", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (!_check201Fl && !_check207Fl && _check208Fl && !_check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ125", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (_check201Fl && _check207Fl && !_check208Fl && !_check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ126", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (_check201Fl && !_check207Fl && _check208Fl && !_check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ127", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (_check201Fl && !_check207Fl && !_check208Fl && _check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ128", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (!_check201Fl && _check207Fl && !_check208Fl && _check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ129", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (!_check201Fl && _check207Fl && _check208Fl && !_check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ130", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (!_check201Fl && !_check207Fl && _check208Fl && _check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ131", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (_check201Fl && _check207Fl && _check208Fl && !_check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ132", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (_check201Fl && !_check207Fl && _check208Fl && _check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ133", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (_check201Fl && _check207Fl && !_check208Fl && _check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ134", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (!_check201Fl && _check207Fl && _check208Fl && _check209Fl) {
+				_roomStates_loop2 = series_show("PING OBJ135", 256, 16, -1, -1, 0, 100, 206, 67);
+			} else if (_check201Fl && _check207Fl && _check208Fl && _check209Fl) {
+				_roomStates_loop2 = series_show("PING TWELVETREES' MAP", 256, 16, -1, -1, 0, 100, 206, 67);
+			}
+		}
 
+		break;
+	case 5:
+		if (_G(kernel).trigger == -1) {
+			terminateMachine(_roomStates_ripTalker);
+			terminateMachine(_roomStates_field18);
+			terminateMachine(_roomStates_ripTalking);
+			terminateMachine(_roomStates_ripTalk);
+			terminateMachine(_roomStates_field24);
+			terminateMachine(_roomStates_loop2);
+			hotspot_set_active(_G(currentSceneDef).hotspots, "forward", false);
+			kernel_timing_trigger(10, 1, nullptr);
+		} else if (_G(kernel).trigger == 1) {
+			_roomStates_loop3 = series_show("996 EA Glyph title", 256, 16, -1, -1, 0, 100, 0, 0);
+			if (_G(flags)[V201] || _G(flags)[V207] || _G(flags)[V208] || _G(flags)[V209])
+				_roomStates_loop5 = series_show("996 EA Glyph Quarry title", 256, 16, -1, -1, 0, 100, 0, 0);
+
+			if (_G(flags)[V196])
+				_roomStates_loop4 = series_show("996 EA Glyph Fallen head", 256, 16, -1, -1, 0, 100, 0, 0);
+
+			if (_G(flags)[V201])
+				_roomStates_loop7 = series_show("996 EA Glyph Sharks Tooth", 256, 16, -1, -1, 0, 100, 0, 0);
+
+			if (_G(flags)[V207])
+				_roomStates_loop6 = series_show("996 EA Glyph Scallop Shell", 256, 16, -1, -1, 0, 100, 0, 0);
+
+			if (_G(flags)[V208])
+				_roomStates_ear2 = series_show("996 EA Glyph Starfish", 256, 16, -1, -1, 0, 100, 0, 0);
+
+			if (_G(flags)[V209])
+				_roomStates_field4C = series_show("996 EA Glyph SeaHorse", 256, 16, -1, -1, 0, 100, 0, 0);
+		}
+		break;
+	default:
+		break;
+	}
 
 	_G(player).command_ready = false;
 }
diff --git a/engines/m4/riddle/rooms/section9/room996.h b/engines/m4/riddle/rooms/section9/room996.h
index 750e984abad..580fbe03d78 100644
--- a/engines/m4/riddle/rooms/section9/room996.h
+++ b/engines/m4/riddle/rooms/section9/room996.h
@@ -31,7 +31,7 @@ namespace Rooms {
 
 class Room996 : public Room {
 public:
-	Room996() : Room() {}
+	Room996();
 	~Room996() override {}
 
 	void preload() override;
@@ -44,13 +44,31 @@ private:
 	int32 _flag = 0;
 	int32 _flagArray[13];
 	int32 _moveValue = 0;
+	bool _check201Fl = false;
+	bool _check207Fl = false;
+	bool _check208Fl = false;
+	bool _check209Fl = false;
 
+	machine *_roomStates_ear2 = nullptr;
+	machine *_roomStates_field4 = nullptr;
+	machine *_roomStates_field8 = nullptr;
+	machine *_roomStates_field18 = nullptr;
+	machine *_roomStates_field24 = nullptr;
+	machine *_roomStates_field4C = nullptr;
 	machine *_roomStates_loop0 = nullptr;
-	machine * _roomStates_untie = nullptr;
-	machine * _roomStates_pu = nullptr;
-	machine * _roomStates_field8 = nullptr;
-	machine * _roomStates_field4 = nullptr;
-	machine * _roomStates_tt = nullptr;
+	machine *_roomStates_loop1 = nullptr;
+	machine *_roomStates_loop2 = nullptr;
+	machine *_roomStates_loop3 = nullptr;
+	machine *_roomStates_loop4 = nullptr;
+	machine *_roomStates_loop5 = nullptr;
+	machine *_roomStates_loop6 = nullptr;
+	machine *_roomStates_loop7 = nullptr;
+	machine *_roomStates_pu = nullptr;
+	machine *_roomStates_ripTalk = nullptr;
+	machine *_roomStates_ripTalker = nullptr;
+	machine *_roomStates_ripTalking = nullptr;
+	machine *_roomStates_tt = nullptr;
+	machine *_roomStates_untie = nullptr;
 };
 
 } // namespace Rooms




More information about the Scummvm-git-logs mailing list