[Scummvm-git-logs] scummvm master -> c8359ccad1d202bd192f213b162025de0d46fb9d
Strangerke
noreply at scummvm.org
Sat Jan 11 07:57:45 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:
c8359ccad1 M4: RIDDLE: Room 808: implement opCode 0 in daemon
Commit: c8359ccad1d202bd192f213b162025de0d46fb9d
https://github.com/scummvm/scummvm/commit/c8359ccad1d202bd192f213b162025de0d46fb9d
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2025-01-11T08:57:23+01:00
Commit Message:
M4: RIDDLE: Room 808: implement opCode 0 in daemon
Changed paths:
engines/m4/riddle/rooms/section8/room808.cpp
engines/m4/riddle/rooms/section8/room808.h
diff --git a/engines/m4/riddle/rooms/section8/room808.cpp b/engines/m4/riddle/rooms/section8/room808.cpp
index 1e78930c5fa..ec236867d0d 100644
--- a/engines/m4/riddle/rooms/section8/room808.cpp
+++ b/engines/m4/riddle/rooms/section8/room808.cpp
@@ -33,6 +33,11 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+static const char *SAFARI_SHADOWS_2[6] = {
+ "", "safari shadow 1", "safari shadow 2", "safari shadow 3", "safari shadow 4", "safari shadow 5"
+};
+
+
void Room808::preload() {
_G(player).walker_type = WALKER_ALT;
_G(player).shadow_type = SHADOW_ALT;
@@ -272,7 +277,238 @@ void Room808::pre_parser() {
}
void Room808::parser() {
+ _G(player).command_ready = false;
+
+ if (_G(kernel).trigger == 747)
+ return;
+
+ if (inv_player_has(_G(player).noun) && _G(kernel).trigger == -1) {
+ _G(player).command_ready = true;
+ return;
+ }
+
+ int32 opCode = -1;
+ if (player_said_any("look", "look at", "no walk"))
+ opCode = 1;
+ else if (player_said_any("gear", "use"))
+ opCode = 0;
+ else if (player_said("take"))
+ opCode = 2;
+ else if (player_said("talk to"))
+ opCode = 3;
+ else if (player_said_any("walk to", "spleen"))
+ opCode = 4;
+ else if (player_said("go"))
+ opCode = 5;
+ else if (player_said("crank"))
+ opCode = 6;
+ else if (player_said("FARMER'S SHOVEL"))
+ opCode = 7;
+ else if (player_said("wooden post"))
+ opCode = 8;
+ else if (player_said("wooden beam"))
+ opCode = 9;
+ else if (player_said("journal"))
+ opCode = 11;
+ else if (player_said("conv808a"))
+ opCode = 10;
+
+ switch (opCode) {
+ case 0:
+ if (player_said("chain")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ ws_hide_walker(_G(my_walker));
+ terminateMachine(_808ChainMach);
+ series_play("808rp03", 256, 0, 5, 5, 0, 100, 0, 0, 0, 25);
+
+ break;
+
+ case 5:
+ _808RipFallShovelNearSideMach = series_play("808rp03", 256, 16, 10, 5, 0, 100, 0, 0, 26, -1);
+ digi_play("808_s05", 2, 255, -1, -1);
+
+ break;
+
+ case 10:
+ kernel_timing_trigger(60, 20, "gong pause");
+ digi_play("808_s05a", 2, 255, -1, -1);
+
+ break;
+
+ case 20:
+ terminateMachine(_808RipFallShovelNearSideMach);
+ series_play("808rp03", 256, 2, 30, 5, 0, 100, 0, 0, 0, -1);
+
+ break;
+
+ case 30:
+ player_set_commands_allowed(true);
+ digi_play("808r19", 1, 255, -1, -1);
+ ws_unhide_walker(_G(my_walker));
+ ws_demand_facing(_G(my_walker), 10);
+ _808ChainMach = series_plain_play("808chain", 1, 0, 100, 0, 0, -1, true);
+
+ break;
+
+ default:
+ break;
+
+ }
+ } else if (player_said("wheel") && _G(flags[V100])) {
+ switch (_G(kernel).trigger) {
+ case -1: {
+ bool walkCheck = true;
+ if (getWalkPath(_G(my_walker), 185, 156)) {
+ player_update_info(_G(my_walker), &_G(player_info));
+ walkCheck = intr_PathCrossesLine(_G(player_info).x, _G(player_info).y, _G(my_walker)->walkPath, 242, 139, 295, 149);
+ }
+
+ if (walkCheck)
+ ws_turn_to_face(_G(my_walker), 8, 5);
+ else
+ ws_walk(_G(my_walker), 169, 171, nullptr, 10, 2, true);
+
+ }
+
+ break;
+
+ case 5:
+ digi_play("com077", 1, 255, -1, 997);
+ break;
+
+ case 10:
+ player_set_commands_allowed(false);
+ ws_hide_walker(_G(my_walker));
+ terminateMachine(_808PosMach);
+ _808PosMach = series_play("808spn01", 1281, 16, 20, 5, 0, 100, 0, 0, 0, 13);
+
+ break;
+
+ case 20:
+ kernel_timing_trigger(60, 30, nullptr);
+ break;
+
+ case 30:
+ terminateMachine(_808PosMach);
+ series_play("808spn01", 0, 2, 40, 5, 0, 100, 0, 0, 0, 13);
+ digi_play("com078", 1, 255, -1, 997);
+
+ break;
+
+ case 40:
+ player_set_commands_allowed(true);
+ ws_unhide_walker(_G(my_walker));
+ ws_demand_facing(_G(my_walker), 2);
+ _808PosMach = series_show_sprite("808pos1", 0, 32767);
+
+ break;
+
+ default:
+ break;
+ }
+ } else if (player_said_any("wheel", "wheel ", "wheel ", "wheel ")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (_G(flags[V095])) {
+ _dword1A1964_facing = 1;
+ ws_walk(_G(my_walker), 157, 166, nullptr, 5, 1, true);
+ } else {
+ _dword1A1964_facing = 2;
+ ws_walk(_G(my_walker), 169, 171, nullptr, 5, 2, true);
+ }
+
+ break;
+
+ case 5:
+ player_set_commands_allowed(false);
+ setBridgeHotspots(_G(flags[V094]), false);
+ ws_hide_walker(_G(my_walker));
+ terminateMachine(_808PosMach);
+ room808_sub1();
+ _808PosMach = series_stream(_posMachName, 5, 1281, 10);
+ series_stream_break_on_frame(_808PosMach, 7, _posMachFrameNum);
+ player_update_info(_G(my_walker), &_G(player_info));
+ _808RipFallShovelNearSideMach = series_place_sprite(SAFARI_SHADOWS_2[_G(player_info).facing], 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 1282);
+
+ break;
+
+ case 7:
+ digi_play("808_s04", 2, 255, -1, -1);
+ break;
+
+ case 10:
+ player_set_commands_allowed(true);
+ setBridgeHotspots(_G(flags[V094]), true);
+ ws_unhide_walker(_G(my_walker));
+ ws_demand_facing(_G(my_walker), _dword1A1964_facing);
+
+ _808PosMach = series_show(inv_object_in_scene("FARMER'S SHOVEL", 808) ? "808pos2" : "808pos1", 1281, 0, -1, -1, _posMachIndex, 100, 0, 0);
+
+ terminateMachine(_808RipFallShovelNearSideMach);
+
+ break;
+
+ default:
+ break;
+
+ }
+ } else if (player_said("crank") && inv_object_in_scene("crank", 808) && _G(flags[V100])) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ setGlobals3(_ripMedReach1HandPos2Series, 1, 17);
+ sendWSMessage_3840000(_G(my_walker), 10);
+
+ break;
+
+ case 10:
+ kernel_timing_trigger(120, 20, nullptr);
+ break;
+
+ case 20:
+ setGlobals3(_ripMedReach1HandPos2Series, 17, 1);
+ sendWSMessage_3840000(_G(my_walker), 30);
+ digi_play("808r32", 1, 255, -1, -1);
+
+ break;
+
+ case 30:
+ player_set_commands_allowed(true);
+ ws_demand_facing(_G(my_walker), 10);
+
+ break;
+
+ default:
+ break;
+
+ }
+ }
+
+ break;
+
+ case 1:
+ case 2:
+ case 3:
+ break;
+
+ case 4:
+ return;
+
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ default:
+ break;
+ }
+
// TODO Not implemented yet
+ _G(player).command_ready = true;
}
void Room808::daemon() {
@@ -357,7 +593,6 @@ void Room808::daemon() {
_808PosMach = series_show("808pos1", 1281, 0, -1, -1, 0, 100, 0, 0);
}
-
break;
case 8:
@@ -848,6 +1083,10 @@ void Room808::addMcHotspot(int32 val1) {
_G(currentSceneDef).hotspots = hotspot_add(_G(currentSceneDef).hotspots, newHotspot, true);
}
+void Room808::room808_sub1() {
+ // TODO Not implemented yet
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section8/room808.h b/engines/m4/riddle/rooms/section8/room808.h
index 386f82e883f..e5369602228 100644
--- a/engines/m4/riddle/rooms/section8/room808.h
+++ b/engines/m4/riddle/rooms/section8/room808.h
@@ -44,10 +44,12 @@ private:
void addMcHotspot(int32 val1);
bool getWalkPath(machine *machine, int32 walk_x, int32 walk_y);
void setBridgeHotspots(int val1, bool activeFl);
+ void room808_sub1();
int32 _dword1A195C_facing = 0;
int32 _dword1A1958 = 0;
int32 _dword1A1960_rand4 = 0;
+ int32 _dword1A1964_facing = 0;
int32 _807Rp04Series = 0;
int32 _808McupSeries = 0;
@@ -68,8 +70,11 @@ private:
machine *_808PosMach = nullptr;
machine *_808RipFallShovelNearSideMach = nullptr;
machine *_mcTrekMach = nullptr;
-};
+ const char *_posMachName = nullptr;
+ int32 _posMachFrameNum = 0;
+ int32 _posMachIndex = 0;
+};
} // namespace Rooms
} // namespace Riddle
More information about the Scummvm-git-logs
mailing list