[Scummvm-git-logs] scummvm master -> c1a9117d8e720050a29b95064569530a847f9c1f
Strangerke
noreply at scummvm.org
Thu Oct 10 21:19:09 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:
c1a9117d8e M4: RIDDLE: Implement parser in room 801
Commit: c1a9117d8e720050a29b95064569530a847f9c1f
https://github.com/scummvm/scummvm/commit/c1a9117d8e720050a29b95064569530a847f9c1f
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2024-10-10T22:19:02+01:00
Commit Message:
M4: RIDDLE: Implement parser in room 801
Changed paths:
engines/m4/riddle/rooms/section8/room801.cpp
engines/m4/riddle/rooms/section8/room801.h
diff --git a/engines/m4/riddle/rooms/section8/room801.cpp b/engines/m4/riddle/rooms/section8/room801.cpp
index 4d3cfc39e61..18ff0efaa04 100644
--- a/engines/m4/riddle/rooms/section8/room801.cpp
+++ b/engines/m4/riddle/rooms/section8/room801.cpp
@@ -199,25 +199,500 @@ void Room801::parser() {
if (player_said("conv801a", nullptr, nullptr)) {
room801_conv801a();
- _G(player).command_ready = false;
- return;
}
- if (_G(kernel).trigger == 747) {
+ else if (_G(kernel).trigger == 747) {
_roomStates_ripTalker = 4;
_roomStates_pu = 8;
_roomStates_field18 = 5;
conv_shutdown();
player_set_commands_allowed(true);
- _G(player).command_ready = false;
- return;
}
- if (lookFl && _G(walker).ripley_said(SAID)) {
- _G(player).command_ready = false;
- return;
+ else if (lookFl && _G(walker).ripley_said(SAID)) {
+ ; // Yep, nothing
+ }
+
+ else if (lookFl && player_said("house")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ setGlobals1(_roomStates_val1, 1, 16, 16, 16, 0, 16, 1, 1, 1, 0, 1, 1, 1, 1, 0, 16, 16, 16, 16, 0);
+ sendWSMessage_110000(_G(my_walker), 4);
+ digi_play("801R12", 1, 255, 1, -1);
+ break;
+ case 1:
+ sendWSMessage_140000(_G(my_walker), 2);
+ break;
+ case 2: player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ }
+
+ else if (lookFl && player_said("mount li")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (_G(flags)[V250]) {
+ digi_play("801R13A", 1, 255, 0);
+ } else {
+ player_set_commands_allowed(false);
+ setGlobals1(_roomStates_ear2, 1, 11, 11, 11, 0, 11, 1, 1, 1, 0, 1, 1, 1, 1, 0, 11, 11, 11, 11, 0);
+ sendWSMessage_110000(_G(my_walker), 4);
+ digi_play("801R13", 1, 255, 1, -1);
+ _G(flags)[V250] = 1;
+ }
+ break;
+ case 1:
+ sendWSMessage_140000(_G(my_walker), 2);
+ break;
+ case 2:
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ }
+
+ else if (lookFl && player_said("farmer's shovel") && !inv_player_has("farmer's shovel")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ setGlobals1(_roomStates_val2, 1, 4, 4, 4, 0, 4, 1, 1, 1, 0, 1, 1, 1, 1, 0, 3, 3, 3, 3, 0);
+ sendWSMessage_110000(_G(my_walker), 1);
+ break;
+ case 1:
+ if (_G(flags)[V253]) {
+ digi_play("801R15A", 1, 255, 2, -1);
+ } else {
+ digi_play("801R15", 1, 255, 2, -1);
+ }
+ break;
+ case 2:
+ sendWSMessage_140000(_G(my_walker), 3);
+ break;
+ case 3:
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ }
+
+ else if (lookFl && player_said("garden")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ setGlobals1(_roomStates_val3, 1, 3, 3, 3, 0, 3, 1, 1, 1, 0, 1, 1, 1, 1, 0, 3, 3, 3, 3, 0);
+ sendWSMessage_110000(_G(my_walker), 1);
+ digi_play("801R16", 1, 255, 2, -1);
+ break;
+ case 2:
+ sendWSMessage_140000(_G(my_walker), 3);
+ break;
+ case 3:
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ }
+
+ else if (lookFl && player_said("pottery")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ break;
+ case 1:
+ if (_var1 == 0)
+ ++_var1;
+ else
+ sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop2, 3, 42, 2, _roomStates_loop2, 42, 42, 0);
+ break;
+ case 2:
+ digi_play("801r20", 1, 255, 3, -1);
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 31, 40, 3, _roomStates_field78, 40, 40, 0);
+ break;
+ case 3:
+ if (_var1 == 0)
+ ++_var1;
+ else {
+ _var1 = 0;
+ sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop2, 42, 26, 4, _roomStates_loop2, 26, 26, 0);
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 37, 40, 4, _roomStates_field78, 37, 40, 1);
+ digi_play("801m10", 1, 255, 4, -1);
+ }
+ break;
+ case 4:
+ if (_var1 == 2)
+ ++_var1;
+ else {
+ _var1 = 0;
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 40, 40, 5, _roomStates_field78, 40, 40, 0);
+ sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop1, 26, 42, 5, _roomStates_loop1, 42, 42, 0);
+ }
+ break;
+ case 5:
+ if (_var1 == 1)
+ ++_var1;
+ else {
+ _var1 = 0;
+ digi_play("801r21", 1, 255, 6, -1);
+ }
+ break;
+ case 6:
+ sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop1, 42, 26, 7, _roomStates_loop1, 26, 26, 0);
+ break;
+ case 7:
+ sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop1, 26, 1, 8, _roomStates_loop1, 1, 1, 0);
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 37, 40, 9, _roomStates_field78, 37, 40, 1);
+ digi_play("801m11", 1, 255, 9, -1);
+ break;
+ case 8:
+ terminateMachine(_roomStates_field8Ah);
+ _roomStates_field8Ah = nullptr;
+ ws_unhide_walker(_G(my_walker));
+ break;
+ case 9:
+ if (_var1 == 1)
+ ++_var1;
+ else {
+ _var1 = 0;
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 40, 31, 10, _roomStates_field78, 31, 31, 0);
+ }
+ break;
+ case 10:
+ _G(flags)[V252] = 1;
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ }
+
+ else if (lookFl && player_said("mei chen")) {
+ digi_play("COM043", 1, 255, -1, 997);
+ }
+
+ else if (lookFl && player_said("farm")) {
+ ; // I bet there was something at some point, but it's really empty now
+ }
+
+ else if (gearFl && player_said("MATCH")) {
+ digi_play("801R09", 1, 255, -1, -1);
+ }
+
+ else if (player_said("US DOLLARS", "FARMER")) {
+ if (_G(flags)[V273]) {
+ digi_play("801r43b", 1, 255, -1, -1);
+ } else {
+ digi_play("801r43c", 1, 255, -1, -1);
+ _G(flags)[V273] = 1;
+ }
+ }
+
+ else if (player_said("CHINESE YUAN", "FARMER")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ setGlobals1(_roomStates_loop6, 1, 1, 1, 1, 0, 1, 7, 5, 7, 1, 7, 1, 1, 1, 0, 7, 7, 7, 7, 0);
+ sendWSMessage_110000(_G(my_walker), 1);
+ break;
+ case 1:
+ digi_play("801r27", 1, 255, 3, -1);
+ kernel_timing_trigger(430, 2, nullptr);
+ break;
+ case 2:
+ sendWSMessage_120000(_G(my_walker), 0);
+ break;
+ case 3:
+ sendWSMessage_130000(_G(my_walker), 0);
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 42, 55, 0, _roomStates_field78, 53, 55, 1);
+ digi_play("801m12", 1, 255, 4, -1);
+ break;
+ case 4:
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 55, 55, 0, _roomStates_field78, 55, 55, 0);
+ digi_play("801f06", 1, 255, 5, -1);
+ sendWSMessage_10000(1, _roomStates_field96h, _roomStates_field74, 1, 1, 0, _roomStates_field74, 1, 3, 4);
+ break;
+ case 5:
+ sendWSMessage_10000(1, _roomStates_field96h, _roomStates_field74, 1, 1, 0, _roomStates_field74, 1, 1, 0);
+ sendWSMessage_150000(_G(my_walker), 0);
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 31, 40, 6, _roomStates_field78, 40, 40, 0);
+ break;
+ case 6:
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 40, 41, 0, _roomStates_field78, 39, 41, 4);
+ digi_play("801m13", 1, 255, 7, -1);
+ break;
+ case 7:
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 41, 31, 0, _roomStates_field78, 31, 31, 0);
+ setGlobals1(_roomStates_loop7, 1, 16, 16, 16, 0, 16, 1, 1, 1, 0, 1, 1, 1, 1, 1, 16, 16, 16, 16, 0);
+ sendWSMessage_110000(_G(my_walker), 9);
+ kernel_timing_trigger(50, 8, nullptr);
+ inv_move_object("CHINESE YUAN", 801);
+ digi_play("801r28", 1, 255, 9, -1);
+ break;
+ case 8:
+ sendWSMessage_10000(1, _roomStates_field96h, _roomStates_field6C, 71, 110, 10, _roomStates_field74, 110, 110, 0);
+ break;
+ case 9:
+ sendWSMessage_120000(_G(my_walker), 0);
+ break;
+ case 10:
+ sendWSMessage_10000(1, _roomStates_field96h, _roomStates_field74, 1, 1, 0, _roomStates_field74, 1, 1, 0);
+ sendWSMessage_150000(_G(my_walker), 12);
+ break;
+ case 12:
+ player_update_info(_G(my_walker), &_G(player_info));
+ ws_walk(_G(my_walker), 8, 6, nullptr, 13, 5, true);
+ break;
+ case 13:
+ hotspot_set_active(_G(currentSceneDef).hotspots, "farmer's shovel", false);
+ setGlobals1(_roomStates_loop7, 1, 16, 16, 16, 0, 16, 1, 1, 1, 0, 1, 1, 1, 1, 1, 16, 16, 16, 16, 0);
+ sendWSMessage_110000(_G(my_walker), 16);
+ break;
+ case 16:
+ kernel_examine_inventory_object("PING FARMER'S SHOVEL", _G(master_palette), 5, 1, 110, 250, 17, nullptr, -1);
+ terminateMachine(_roomStates_field86h);
+ inv_give_to_player("farmer's shovel");
+ break;
+ case 17:
+ sendWSMessage_140000(_G(my_walker), 18);
+ break;
+ case 18:
+ series_unload(_roomStates_field80);
+ player_set_commands_allowed(true);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ else if (gearFl && player_said("root cellar ")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (_roomStates_tt == 0) {
+ player_set_commands_allowed(false);
+ ws_hide_walker();
+ terminateMachine(_roomStates_fieldA6h);
+ _roomStates_field18 = series_load("RIP OPENS CELLAR", -1, nullptr);
+ _roomStates_field8Ah = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 256, 0, triggerMachineByHashCallbackNegative, "rip opens cellar");
+ sendWSMessage_10000(1, _roomStates_field8Ah, 1, _roomStates_field18, 28, 10, _roomStates_field18, 28, 28, 0);
+ }
+ break;
+ case 1:
+ _roomStates_tt = 1;
+ terminateMachine(_roomStates_field8Ah);
+ series_unload(_roomStates_field18);
+ _roomStates_fieldAAh = series_place_sprite("CELLAR DOOR OPEN", 0, 0, -53, 100, 1024);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", true);
+ ws_unhide_walker(_G(my_walker));
+ player_set_commands_allowed(true);
+ break;
+
+ case 10:
+ sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_field18, 29, 45, 11, _roomStates_field18, 45, 45, 0);
+ digi_play("801_s03", 2, 255, -1, -1);
+ break;
+
+ case 11:
+ sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_field18, 46, 56, 1, _roomStates_field18, 56, 56, 0);
+ digi_stop(1);
+ break;
+ default:
+ break;
+ }
+ }
+
+ else if (gearFl && player_said("root cellar ")) {
+ // Not the same as the previous one : there's one space instead of two at the end
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (_roomStates_tt != 0) {
+ player_set_commands_allowed(false);
+ ws_hide_walker(_G(my_walker));
+ terminateMachine(_roomStates_fieldAAh);
+ _roomStates_ripTalking = series_load("RIP CLOSES CELLAR", -1, nullptr);
+ _roomStates_field8Ah = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 256, 0, triggerMachineByHashCallbackNegative, "rip closes cellar");
+ sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_ripTalking, 1, 19, 10, _roomStates_ripTalking, 34, 34, 0);
+ }
+ break;
+ case 1:
+ _roomStates_tt = 0;
+ terminateMachine(_roomStates_field8Ah);
+ ws_unhide_walker(_G(my_walker));
+ digi_stop(1);
+ series_unload(_roomStates_ripTalking);
+ _roomStates_fieldA6h = series_place_sprite("CELLAR DOOR CLOSED", 0, 0, -53, 100, 1280);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", false);
+ player_set_commands_allowed(true);
+ break;
+ case 10:
+ sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_ripTalking, 20, 34, 1, _roomStates_ripTalking, 34, 34, 0);
+ digi_play("801_s04", 2, 255, -1, -1);
+ break;
+ default:
+ break;
+ }
}
+ else if ((gearFl || takeFl) && player_said("mei chen")) {
+ digi_play("com013", 1, 255, -1, 997);
+ }
+
+ else if (talkFl && player_said("farmer")) {
+ if (_G(flags)[V252] || _G(flags)[V253] || _G(flags)[V255]) {
+ ws_hide_walker(_G(my_walker));
+ player_set_commands_allowed(false);
+ _roomStates_field8Ah = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 167, 303, 49, 1280, 1, triggerMachineByHashCallbackNegative, "rip talking to farmer");
+ sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop6, 1, 1, -1, _roomStates_loop6, 1, 1, 0);
+ _roomStates_field8Eh = series_show("SAFARI SHADOW 5", 1280, 144, -1, -1, 0, 48, 167, 303);
+ _roomStates_pu2 = 1;
+ _roomStates_ripTalker = 1;
+ _roomStates_untie2 = 1;
+ _roomStates_pu = 1;
+ _roomStates_ripTalker2 = 1;
+ _roomStates_field18 = 1;
+ _G(kernel).trigger_mode = KT_DAEMON;
+
+ kernel_timing_trigger(1, 300, nullptr);
+ kernel_timing_trigger(1, 200, nullptr);
+ kernel_timing_trigger(1, 400, nullptr);
+
+ _G(kernel).trigger_mode = KT_PARSE;
+ conv_load("conv801a", 10, 10, 747);
+ conv_set_shading(65);
+ conv_export_value(conv_get_handle(), _G(flags)[V252], 0);
+ conv_export_value(conv_get_handle(), _G(flags)[V255], 1);
+ conv_export_value(conv_get_handle(), _G(flags)[V253], 2);
+
+ conv_play(conv_get_handle());
+ } else {
+ digi_play("801r06", 1, 255, -1, -1);
+ }
+ }
+
+ else if (talkFl && player_said("mei chen")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ setGlobals1(_roomStates_loop6, 1, 4, 5, 7, 1, 4, 4, 4, 4, 1, 4, 1, 1, 1, 0, 4, 1, 1, 1, 0);
+ sendWSMessage_110000(_G(my_walker), 1);
+ break;
+ case 1:
+ switch (imath_ranged_rand(1, 4)) {
+ case 1:
+ digi_play("com034", 1, 255, 2, 997);
+ break;
+ case 2:
+ digi_play("com035", 1, 255, 2, 997);
+ break;
+ case 3:
+ digi_play("com036", 1, 255, 2, 997);
+ break;
+ case 4:
+ digi_play("com037", 1, 255, 2, 997);
+ break;
+ default:
+ break;
+ }
+ break;
+ case 2:
+ sendWSMessage_120000(_G(my_walker), 4);
+ break;
+ case 4:
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 31, 40, 5, _roomStates_field78, 40, 40, 0);
+ break;
+ case 5:
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 40, 41, 0, _roomStates_field78, 40, 41, 4);
+ switch (imath_ranged_rand(1, 3)) {
+ case 1:
+ digi_play("com039", 1, 255, 6, 997);
+ break;
+ case 2:
+ digi_play("com040", 1, 255, 6, 997);
+ break;
+ case 3:
+ digi_play("com041", 1, 255, 6, 997);
+ break;
+ default:
+ break;
+ }
+ break;
+ case 6:
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 41, 31, 7, _roomStates_field78, 31, 31, 0);
+ sendWSMessage_130000(_G(my_walker), 0);
+ break;
+ case 7:
+ sendWSMessage_150000(_G(my_walker), 0);
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ }
+
+ else if (gearFl && player_said("farmer")) {
+ digi_play("com017", 1, 255, -1, 997);
+ }
+
+ else if (takeFl && player_said("pottery")) {
+ if (_G(flags)[V251]) {
+ digi_play("801r25", 1, 255, -1, -1);
+ } else {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ digi_play("801r25", 1, 255, 1, -1);
+ break;
+ case 1:
+ digi_play("801r25a", 1, 255, 2, -1);
+ break;
+ case 2:
+ player_set_commands_allowed(true);
+ _G(flags)[V251] = 1;
+ default:
+ break;
+ }
+ }
+ }
+
+ else if (goFl && player_said("root cellar")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ ws_hide_walker(_G(my_walker));
+ _roomStates_field8Ah = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 256, 0, triggerMachineByHashCallbackNegative, "rip enters cellar");
+ sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop2, 1, 14, 5, _roomStates_loop2, 15, 19, 0);
+ break;
+ case 5:
+ disable_player_commands_and_fade_init(6);
+ break;
+ case 6:
+ terminateMachine(_roomStates_field8Ah);
+ ws_unhide_walker(_G(my_walker));
+ adv_kill_digi_between_rooms(false);
+ digi_play_loop("801_s02", 3, 35, -1, -1);
+ _G(game).new_room = 802;
+ break;
+ default:
+ break;
+ }
+ }
+
+ else if (takeFl && player_said("farmer's shovel") && !inv_player_has("farmer's shovel")) {
+ digi_play("801r26", 1, 255, -1, -1);
+ }
+
+ else if (player_said("journal") && !takeFl && !lookFl && !gearFl) {
+ digi_play("com042", 1, 255, -1, 997);
+ } else
+ return;
_G(player).command_ready = false;
}
diff --git a/engines/m4/riddle/rooms/section8/room801.h b/engines/m4/riddle/rooms/section8/room801.h
index 3999bc1989e..c7ccf2a0acb 100644
--- a/engines/m4/riddle/rooms/section8/room801.h
+++ b/engines/m4/riddle/rooms/section8/room801.h
@@ -62,19 +62,26 @@ private:
int32 _roomStates_loop6 = 0;
int32 _roomStates_loop7 = 0;
int32 _roomStates_pu = 0;
+ int32 _roomStates_pu2 = 0;
int32 _roomStates_ripTalk = 0;
int32 _roomStates_ripTalker = 0;
+ int32 _roomStates_ripTalker2 = 0;
+ int32 _roomStates_ripTalking = 0;
int32 _roomStates_tt = 0;
+ int32 _roomStates_untie2 = 0;
int32 _roomStates_val1 = 0;
int32 _roomStates_val2 = 0;
int32 _roomStates_val3 = 0;
+ int32 _var1 = 0;
machine *_roomStates_field86h = nullptr;
+ machine *_roomStates_field8Ah = nullptr;
+ machine *_roomStates_field8Eh = nullptr;
machine *_roomStates_field96h = nullptr;
machine *_roomStates_field9Ah = nullptr;
- machine *_roomStates_fieldA6h = nullptr;
machine *_roomStates_field9Eh = nullptr;
machine *_roomStates_fieldA2h = nullptr;
+ machine *_roomStates_fieldA6h = nullptr;
machine *_roomStates_fieldAAh = nullptr;
};
More information about the Scummvm-git-logs
mailing list