[Scummvm-git-logs] scummvm master -> 597760ea5c7d1640cddf10f224525d0512fba955
dreammaster
noreply at scummvm.org
Tue Jul 30 03:26:07 UTC 2024
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
0bc656e302 M4: RIDDLE: Added room 303 conv303b method
19ef1526b9 M4: RIDDLE: Added room 303 conv303a
597760ea5c M4: RIDDLE: In progress room 303 parser
Commit: 0bc656e3022b1f03d5dfa0b1a3fb6ccedf31644b
https://github.com/scummvm/scummvm/commit/0bc656e3022b1f03d5dfa0b1a3fb6ccedf31644b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-29T20:25:55-07:00
Commit Message:
M4: RIDDLE: Added room 303 conv303b method
Changed paths:
engines/m4/graphics/gr_series.cpp
engines/m4/graphics/gr_series.h
engines/m4/riddle/rooms/section3/room303.cpp
engines/m4/riddle/rooms/section3/room303.h
diff --git a/engines/m4/graphics/gr_series.cpp b/engines/m4/graphics/gr_series.cpp
index 23b7a655753..56088990de9 100644
--- a/engines/m4/graphics/gr_series.cpp
+++ b/engines/m4/graphics/gr_series.cpp
@@ -321,5 +321,9 @@ machine *series_plain_play(const char *seriesName, int32 loopCount, uint32 flags
return series_play(seriesName, layer, flags, trigger, frameRate, loopCount, s);
}
+void series_stream_check_series(machine *m, int val) {
+ // TODO: series_stream_check_series
+ error("TODO: series_stream_check_series");
+}
} // namespace M4
diff --git a/engines/m4/graphics/gr_series.h b/engines/m4/graphics/gr_series.h
index 48ed2653e5c..9c69839057e 100644
--- a/engines/m4/graphics/gr_series.h
+++ b/engines/m4/graphics/gr_series.h
@@ -115,6 +115,7 @@ machine *series_plain_play(const char *seriesName, int32 loopCount, uint32 flags
machine *series_stream(const char *seriesName, int32 frameRate, int32 layer, int32 trigger);
bool series_stream_break_on_frame(machine *m, int32 frameNum, int32 trigger);
void series_set_frame_rate(machine *m, int32 newFrameRate);
+void series_stream_check_series(machine *m, int val);
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section3/room303.cpp b/engines/m4/riddle/rooms/section3/room303.cpp
index 5bd61402499..4dbe2c14360 100644
--- a/engines/m4/riddle/rooms/section3/room303.cpp
+++ b/engines/m4/riddle/rooms/section3/room303.cpp
@@ -81,7 +81,7 @@ void Room303::init() {
"candleman shadow5"
};
- _val1 = _val2 = 0;
+ _val1 = _lonelyFlag = 0;
if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
_val3 = 0;
@@ -319,6 +319,28 @@ void Room303::init() {
void Room303::daemon() {
}
+void Room303::pre_parser() {
+ if (player_said("open") && player_been_here(301)) {
+ _G(player).need_to_walk = false;
+ _G(player).ready_to_walk = true;
+ _G(player).waiting_for_walk = false;
+ }
+}
+
+void Room303::parser() {
+ bool lookFlag = player_said_any("look", "look at");
+
+ if (player_said("conv303b")) {
+ conv303b();
+
+ // TODO
+ } else {
+ return;
+ }
+
+ _G(player).command_ready = false;
+}
+
void Room303::loadHands() {
_hands1 = series_load("MC NY hands behind back pos4");
_hands2 = series_load("MC NY hand on hip pos4");
@@ -379,6 +401,134 @@ void Room303::playSeries(bool cow) {
series_plain_play("CREATURE FEATURE LONG VIEW", 1, 0, 100, 0xf05, 7, 70);
}
+void Room303::conv303b() {
+ int who = conv_whos_talking();
+ int node = conv_current_node();
+ int entry = conv_current_entry();
+ const char *sound = conv_sound_to_play();
+
+ switch (_G(kernel).trigger) {
+ case 1:
+ if (who <= 0) {
+ _val11 = 4;
+
+ if (node == 1 && entry == 0) {
+ digi_unload("08_01n01");
+ digi_unload("08_02n01");
+ } else if (node == 2 && entry == 2) {
+ _val16 = 0;
+ } else if (node == 1 && entry == 2) {
+ digi_preload("com119");
+ _ripPonders = series_stream("303 rip reacts", 4, 0, 667);
+ series_stream_break_on_frame(_ripPonders, 5, 7);
+ return;
+ }
+
+ } else if (who == 1) {
+ if ((node == 0 && entry == 0) || (node == 0 && entry == 1)) {
+ if (!_lonelyFlag) {
+ midi_play("lonelyme", 140, 1, -1, 949);
+ _lonelyFlag = true;
+ }
+ }
+
+ if (node == 0 && entry == 0) {
+ series_unload(2);
+ series_unload(3);
+ series_unload(4);
+ _ripPonders = series_stream("303pu01", 4, 0x100, 666);
+ series_stream_break_on_frame(_ripPonders, 5, 700);
+ } else if (node == 1 && entry == 2) {
+ // No implementation
+ } else if ((node == 2 && entry == 0) || (node == 2 && entry == 2)) {
+ _val16 = 3;
+ } else {
+ _val16 = 0;
+ }
+ }
+ break;
+
+ case 2:
+ series_stream_check_series(_ripPonders, 20);
+ series_stream_break_on_frame(_ripPonders, 27, 3);
+ return;
+
+ case 3:
+ series_stream_check_series(_ripPonders, 5);
+ return;
+
+ case 4:
+ _val11 = 5;
+ return;
+
+ case 5:
+ digi_play("com119", 1, 255, 6);
+ return;
+
+ case 6:
+ digi_unload("com119");
+ return;
+
+ case 7:
+ _val16 = 0;
+ series_stream_break_on_frame(_ripPonders, 22, 5);
+ return;
+
+ case 666:
+ kernel_timing_trigger(1, 668);
+ break;
+
+ case 667:
+ kernel_timing_trigger(1, 670);
+ break;
+
+ case 668:
+ conv_resume();
+ digi_preload("08_01n01");
+ digi_preload("08_02n01");
+ _ripPonders = series_stream("303 rip ponders", 5, 0, -1);
+ series_stream_break_on_frame(_ripPonders, 5, 2);
+ return;
+
+ case 670:
+ series_load("test1");
+ series_load("test3");
+ series_load("test4");
+ series_load("test5");
+ break;
+
+ case 700:
+ _val16 = 0;
+ break;
+
+ default:
+ if (sound) {
+ if (who <= 0) {
+ if (node != 2 || entry != 1)
+ _val11 = 5;
+ } else if (who == 1) {
+ if (node == 1 && entry == 2) {
+ _val16 = 2;
+ } else if (node == 2 && entry == 1) {
+ _val11 = 6;
+ kernel_timing_trigger(150, 4);
+ } else if ((node == 2 && entry == 0) ||
+ (node == 2 && entry == 2)) {
+ _val16 = 4;
+ } else {
+ _val16 = 1;
+ }
+ }
+
+ digi_play(sound, 1, 255, 1);
+ return;
+ }
+ break;
+ }
+
+ conv_resume();
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section3/room303.h b/engines/m4/riddle/rooms/section3/room303.h
index e882e970da8..83bc489a66a 100644
--- a/engines/m4/riddle/rooms/section3/room303.h
+++ b/engines/m4/riddle/rooms/section3/room303.h
@@ -31,7 +31,7 @@ namespace Rooms {
class Room303 : public Room {
private:
int _val1 = 0;
- int _val2 = 0;
+ bool _lonelyFlag = 0;
int _val3 = 0;
int _val4 = 0;
int _val5 = 0;
@@ -45,6 +45,7 @@ private:
bool _val13 = false;
int _val14 = 0;
int _val15 = 0;
+ int _val16 = 0;
KernelTriggerType _triggerMode1 = KT_DAEMON;
KernelTriggerType _triggerMode2 = KT_DAEMON;
machine *_door = nullptr;
@@ -60,6 +61,7 @@ private:
machine *_shadow5 = nullptr;
machine *_machine1 = nullptr;
machine *_machine2 = nullptr;
+ machine *_ripPonders = nullptr;
int _gestTalk4 = 0;
int _ripBends = 0;
@@ -71,6 +73,7 @@ private:
void setShadow4(bool active);
void setShadow5(bool active);
void playSeries(bool cow = true);
+ void conv303b();
public:
Room303() : Room() {}
@@ -79,6 +82,8 @@ public:
void preload() override;
void init() override;
void daemon() override;
+ void pre_parser() override;
+ void parser() override;
};
} // namespace Rooms
Commit: 19ef1526b960764eb382e713117832c0d48cdfa8
https://github.com/scummvm/scummvm/commit/19ef1526b960764eb382e713117832c0d48cdfa8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-29T20:25:55-07:00
Commit Message:
M4: RIDDLE: Added room 303 conv303a
Changed paths:
engines/m4/riddle/rooms/room.cpp
engines/m4/riddle/rooms/room.h
engines/m4/riddle/rooms/section3/room303.cpp
engines/m4/riddle/rooms/section3/room303.h
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index da2b53c57ca..8b16582c9d6 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -183,6 +183,13 @@ void Room::setGlobals1(int val1, int val2, int val3, int val4, int val5,
_G(globals)[V028] = val21 << 16;
}
+void Room::setGlobals4(int val1, int val2, int val3, int val4) {
+ _G(globals)[GLB_TEMP_1] = val1;
+ _G(globals)[GLB_TEMP_2] = val2;
+ _G(globals)[GLB_TEMP_3] = val3;
+ _G(globals)[GLB_TEMP_4] = val4;
+}
+
void Room::sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
int val4, int trigger, int val9, int val6, int val7, int val8) {
if (!trigger)
@@ -201,6 +208,21 @@ void Room::sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
sendWSMessage(0x10000, 0, nullptr, 0, nullptr, 1);
}
+void Room::sendWSMessage_10000(machine *recv, int val1, int val2, int val3,
+ int trigger, int val4) {
+ int val = ((val2 << 16) - _G(globals)[V002]) *_G(globals)[V006] +
+ _G(globals)[V004];
+
+ _G(globals)[GLB_TEMP_1] = val1 << 16;
+ _G(globals)[GLB_TEMP_2] = val2 << 16;
+ _G(globals)[GLB_TEMP_3] = val;
+ _G(globals)[GLB_TEMP_4] = (val3 > 0) ? val3 : 0xffff0000;
+ _G(globals)[GLB_TEMP_5] = kernel_trigger_create(trigger);
+ _G(globals)[GLB_TEMP_6] = val4 << 16;
+
+ sendWSMessage(0x10000, 0, recv, 0, nullptr, 1);
+}
+
machine *Room::triggerMachineByHash_3000(int val1, int val2, const int16 * normalDirs,
const int16 * shadowDirs, int val3, int val4, int val5,
MessageCB intrMsg, const char *machName) {
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 66c20af3c93..8718c14f606 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -58,9 +58,13 @@ protected:
int val11 = 0, int val12 = 0, int val13 = 0, int val14 = 0, int val15 = 0,
int val16 = 0, int val17 = 0, int val18 = 0, int val19 = 0, int val20 = 0,
int val21 = 0);
+ void setGlobals4(int val1, int val2, int val3, int val4);
void sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
int val4, int trigger, int val9, int val6, int val7, int val8);
+ void sendWSMessage_10000(machine *recv, int val1, int val2, int val3,
+ int trigger, int val4);
+
machine *triggerMachineByHash_3000(int val1, int val2, const int16 *normalDirs,
const int16 *shadowDirs, int val3, int val4, int val5,
MessageCB intrMsg, const char *machName);
diff --git a/engines/m4/riddle/rooms/section3/room303.cpp b/engines/m4/riddle/rooms/section3/room303.cpp
index 4dbe2c14360..0c96c27313d 100644
--- a/engines/m4/riddle/rooms/section3/room303.cpp
+++ b/engines/m4/riddle/rooms/section3/room303.cpp
@@ -332,7 +332,22 @@ void Room303::parser() {
if (player_said("conv303b")) {
conv303b();
-
+ } else if (player_said("conv303a")) {
+ conv303a();
+ } else if (lookFlag && _G(flags)[V000] == 0 && _val13 &&
+ player_said_any("cow", "giant matchstick")) {
+ switch (_G(kernel).trigger) {
+ case 1:
+ setShadow5(false);
+ if (player_said("giant matchstick"))
+ ws_demand_location(610, 256);
+
+ sendWSMessage_10000(_machine1, 706, 256, 5, 2, 1);
+ break;
+
+ default:
+ break;
+ }
// TODO
} else {
return;
@@ -390,6 +405,14 @@ void Room303::setShadow5(bool active) {
}
}
+void Room303::setShadow5Alt(bool active) {
+ if (active) {
+ _shadow5 = series_place_sprite("candleman shadow5", 0, 706, 256, 84, 0xe06);
+ } else {
+ terminateMachineAndNull(_shadow5);
+ }
+}
+
void Room303::escapePressed(void *, void *) {
_G(kernel).trigger_mode = KT_DAEMON;
disable_player_commands_and_fade_init(56);
@@ -401,6 +424,62 @@ void Room303::playSeries(bool cow) {
series_plain_play("CREATURE FEATURE LONG VIEW", 1, 0, 100, 0xf05, 7, 70);
}
+void Room303::conv303a() {
+ int who = conv_whos_talking();
+ int node = conv_current_node();
+ int entry = conv_current_entry();
+ const char *sound = conv_sound_to_play();
+
+ if (_G(kernel).trigger == 1) {
+ if (who <= 0) {
+ _val15 = node != 3 || entry ? 1 : 0;
+
+ } else if (who == 1) {
+ if ((node == 0 && entry != 0) || (node == 0 && entry == 1)) {
+ if (!_lonelyFlag) {
+ midi_play("ppstreet", 140, 1, -1, 949);
+ }
+ }
+
+ if (node != 1 || entry != 1) {
+ if (node != 3 || entry != 1)
+ _val16 = 0;
+ } else {
+ _val16 = 3;
+ }
+ }
+
+ conv_resume();
+
+ } else if (!conv_sound_to_play()) {
+ conv_resume();
+
+ } else {
+ if (who <= 0) {
+ if (node == 3 && !entry)
+ _val16 = 2;
+ if ((node != 3 || entry != 1) && (node != 3 || entry))
+ _val15 = 2;
+ else
+ _val15 = 3;
+
+ } else if (who == 1) {
+ if (node != 1 || entry != 1) {
+ if (node != 5 || entry) {
+ if (node != 3 || entry != 1)
+ _val16 = 1;
+ } else {
+ _val16 = 0;
+ }
+ } else {
+ _val16 = 4;
+ }
+ }
+
+ digi_play(sound, 1, 255, 1);
+ }
+}
+
void Room303::conv303b() {
int who = conv_whos_talking();
int node = conv_current_node();
diff --git a/engines/m4/riddle/rooms/section3/room303.h b/engines/m4/riddle/rooms/section3/room303.h
index 83bc489a66a..bad58a0c80b 100644
--- a/engines/m4/riddle/rooms/section3/room303.h
+++ b/engines/m4/riddle/rooms/section3/room303.h
@@ -72,7 +72,9 @@ private:
void setFengActive(bool flag);
void setShadow4(bool active);
void setShadow5(bool active);
+ void setShadow5Alt(bool active);
void playSeries(bool cow = true);
+ void conv303a();
void conv303b();
public:
Commit: 597760ea5c7d1640cddf10f224525d0512fba955
https://github.com/scummvm/scummvm/commit/597760ea5c7d1640cddf10f224525d0512fba955
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-29T20:25:55-07:00
Commit Message:
M4: RIDDLE: In progress room 303 parser
Changed paths:
engines/m4/riddle/rooms/room.cpp
engines/m4/riddle/rooms/room.h
engines/m4/riddle/rooms/section3/room303.cpp
engines/m4/riddle/rooms/section3/room303.h
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 8b16582c9d6..cbfb8d3e4a2 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -239,10 +239,22 @@ machine *Room::triggerMachineByHash_3000(int val1, int val2, const int16 * norma
#endif
}
+void Room::sendWSMessage_60000(machine *walker) {
+ sendWSMessage(0x60000, 0, walker, 0, nullptr, 1);
+}
+
void Room::sendWSMessage_80000(machine *walker) {
sendWSMessage(0x80000, 0, walker, 0, nullptr, 1);
}
+void Room::sendWSMessage_B0000(machine *walker, int trigger) {
+
+}
+
+void Room::sendWSMessage_B0000(int trigger) {
+ sendWSMessage_B0000(_G(my_walker), trigger);
+}
+
void Room::sendWSMessage_C0000(machine *walker, int trigger) {
if (!trigger)
trigger = -1;
@@ -255,6 +267,22 @@ void Room::sendWSMessage_C0000(int trigger) {
sendWSMessage_C0000(_G(my_walker), trigger);
}
+void Room::sendWSMessage_D0000(machine *walker) {
+ sendWSMessage(0xd0000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_D0000() {
+ sendWSMessage_D0000(_G(my_walker));
+}
+
+void Room::sendWSMessage_E0000(machine *walker) {
+ sendWSMessage(0xe0000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_E0000() {
+ sendWSMessage_E0000(_G(my_walker));
+}
+
void Room::sendWSMessage_110000(machine *walker, int trigger) {
if (!trigger)
trigger = -1;
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 8718c14f606..0aaa622af05 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -68,9 +68,16 @@ protected:
machine *triggerMachineByHash_3000(int val1, int val2, const int16 *normalDirs,
const int16 *shadowDirs, int val3, int val4, int val5,
MessageCB intrMsg, const char *machName);
+ void sendWSMessage_60000(machine *walker);
void sendWSMessage_80000(machine *walker);
+ void sendWSMessage_B0000(machine *walker, int trigger);
+ void sendWSMessage_B0000(int trigger);
void sendWSMessage_C0000(machine *walker, int trigger);
void sendWSMessage_C0000(int trigger);
+ void sendWSMessage_D0000(machine *walker);
+ void sendWSMessage_D0000();
+ void sendWSMessage_E0000(machine *walker);
+ void sendWSMessage_E0000();
void sendWSMessage_110000(machine *walker, int trigger);
void sendWSMessage_110000(int trigger);
void sendWSMessage_140000(machine *walker, int trigger);
diff --git a/engines/m4/riddle/rooms/section3/room303.cpp b/engines/m4/riddle/rooms/section3/room303.cpp
index 0c96c27313d..ff74f45aac7 100644
--- a/engines/m4/riddle/rooms/section3/room303.cpp
+++ b/engines/m4/riddle/rooms/section3/room303.cpp
@@ -337,6 +337,11 @@ void Room303::parser() {
} else if (lookFlag && _G(flags)[V000] == 0 && _val13 &&
player_said_any("cow", "giant matchstick")) {
switch (_G(kernel).trigger) {
+ case -1:
+ _val15 = 5;
+ player_set_commands_allowed(false);
+ break;
+
case 1:
setShadow5(false);
if (player_said("giant matchstick"))
@@ -345,10 +350,296 @@ void Room303::parser() {
sendWSMessage_10000(_machine1, 706, 256, 5, 2, 1);
break;
+ case 2:
+ setShadow5Alt(true);
+ _machine1 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 706, 256, 86, 0xc00, 0,
+ triggerMachineByHashCallbackNegative, "fl state machine");
+
+ _G(kernel).trigger_mode = KT_DAEMON;
+ sendWSMessage_10000(1, _machine1, _clasped1, 1, 16, 400,
+ _clasped4, 1, 6, 0);
+ _val14 = _val15 = 1;
+ setFengActive(false);
+ _val13 = 0;
+
+ kernel_load_variant("303lock2");
+ _G(kernel).trigger_mode = KT_PARSE;
+ kernel_timing_trigger(1, 666);
+ break;
+
default:
break;
}
- // TODO
+ } else if (lookFlag && player_said("torso tomato") &&
+ !_G(flags)[V081] && !_G(flags)[V000] && !_val13) {
+ switch (_G(kernel).trigger) {
+ case 1:
+ setShadow5Alt(false);
+ sendWSMessage_10000(_machine1, 480, 256, 7, 2, 1);
+ break;
+
+ case 2:
+ setShadow5(true);
+ sendWSMessage_60000(_machine1);
+ _machine1 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 480, 256, 86, 0xc00, 1,
+ triggerMachineByHashCallbackNegative, "fl state machine");
+
+ _G(kernel).trigger_mode = KT_DAEMON;
+ sendWSMessage_10000(1, _machine1, _clasped1, 1, 16, 400,
+ _clasped4, 1, 6, 0);
+ _val14 = _val15 = 1;
+ setFengActive(true);
+ _val13 = 1;
+
+ kernel_load_variant("303lock1");
+ _G(kernel).trigger_mode = KT_PARSE;
+ kernel_timing_trigger(1, 666);
+ break;
+
+ default:
+ break;
+ }
+ } else if (lookFlag && player_said("puffball")) {
+ if (_G(flags)[V000] == 1) {
+ digi_play("303r37", 1);
+ } else if (_G(flags)[V080]) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ case 666:
+ player_set_commands_allowed(false);
+ _chinTalk4 = series_load("suit chin in hand pos4");
+ setGlobals4(_chinTalk4, 15, 15, 15);
+ sendWSMessage_C0000(0);
+ digi_play("303r37", 1, 255, 2);
+ break;
+
+ case 2:
+ sendWSMessage_B0000(3);
+ break;
+
+ case 3:
+ series_unload(_chinTalk4);
+ player_set_commands_allowed(true);
+ break;
+
+ default:
+ break;
+ }
+ } else {
+ switch (_G(kernel).trigger) {
+ case -1:
+ case 666:
+ player_set_commands_allowed(false);
+ _chinTalk4 = series_load("rip hand to chin talk pos4");
+ setGlobals4(_chinTalk4, 15, 16, 19);
+ sendWSMessage_C0000(0);
+ digi_play("303F13", 1, 255, 1);
+ _val15 = 2;
+ break;
+
+ case 1:
+ _val15 = 1;
+ kernel_timing_trigger(30, 2);
+ break;
+
+ case 2:
+ sendWSMessage_D0000();
+ digi_play("303r26", 1, 255, 3);
+ break;
+
+ case 3:
+ sendWSMessage_E0000();
+ sendWSMessage(0xe0000, 0, _G(my_walker), 0, nullptr, 1);
+ kernel_timing_trigger(30, 4);
+ break;
+
+ case 4:
+ digi_play("303F14", 1, 255, 5);
+ _val15 = 2;
+ break;
+
+ case 5:
+ _val15 = 1;
+ kernel_timing_trigger(30, 6);
+ break;
+
+ case 6:
+ sendWSMessage_D0000();
+ digi_play("303r27", 1, 255, 7);
+ break;
+
+ case 7:
+ sendWSMessage_B0000(8);
+ break;
+
+ case 8:
+ series_unload(_chinTalk4);
+ player_set_commands_allowed(true);
+ _G(flags)[V080] = 1;
+ break;
+
+ default:
+ break;
+ }
+ }
+ } else if (lookFlag && player_said("copper tank") &&
+ (_G(flags)[V000] == 1 || _val13)) {
+ if (_G(flags)[V000] == 1) {
+ digi_play("303r31", 1);
+ } else {
+ switch (_G(kernel).trigger) {
+ case -1:
+ case 666:
+ player_set_commands_allowed(false);
+ _chinTalk4 = series_load("suit hand in pocket pos2");
+ setGlobals4(_chinTalk4, 19, 19, 19);
+ sendWSMessage_C0000(0);
+ digi_play("303r31", 1, 255, 2);
+ break;
+
+ case 2:
+ sendWSMessage_B0000(3);
+ break;
+
+ case 3:
+ series_unload(_chinTalk4);
+ break;
+
+ default:
+ break;
+ }
+ }
+ } else if (lookFlag && player_said("torso tomato")) {
+ if (_G(flags)[V000] == 1) {
+ digi_play("303r28a", 1);
+ } else if (_G(flags)[V081]) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ case 666:
+ player_set_commands_allowed(false);
+ _chinTalk4 = series_load("suit chin in hand pos4");
+ setGlobals4(_chinTalk4, 15, 15, 15);
+ sendWSMessage_C0000(-2);
+ digi_play("303r28a", 1, 255, 1);
+ break;
+
+ case 1:
+ sendWSMessage_B0000(3);
+ break;
+
+ case 3:
+ series_unload(_chinTalk4);
+ break;
+
+ default:
+ break;
+ }
+ } else {
+ switch (_G(kernel).trigger) {
+ case -1:
+ case 666:
+ player_set_commands_allowed(false);
+ _chinTalk4 = series_load("rip suit talker pos4");
+ setGlobals4(_chinTalk4, 1, 1, 5);
+ sendWSMessage_C0000(-1);
+ digi_play("303F15", 1, 255, 1);
+ _val15 = 2;
+ break;
+
+ case 2:
+ sendWSMessage_D0000();
+ digi_play("303r28", 1, 255, 3);
+ break;
+
+ case 3:
+ sendWSMessage_B0000(4);
+ break;
+
+ case 4:
+ series_unload(_chinTalk4);
+ player_set_commands_allowed(true);
+ _G(flags)[V081] = 1;
+ break;
+
+ default:
+ break;
+ }
+ }
+ } else if (lookFlag && player_said("cow")) {
+ if (_G(flags)[V086] == 2) {
+ _G(flags)[V086] = 1;
+ } else if (_G(flags)[V086] == 3) {
+ _G(flags)[V086] = 0;
+ }
+
+ if (_G(flags)[V000] == 1) {
+ digi_play("303r23", 1);
+ } else if (_G(flags)[V082]) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ case 666:
+ player_set_commands_allowed(false);
+ digi_play("303F09", 1, 255, 1);
+ _val15 = 2;
+ break;
+
+ case 1:
+ _val15 = 1;
+ player_set_commands_allowed(true);
+ break;
+
+ default:
+ break;
+ }
+ } else {
+ switch (_G(kernel).trigger) {
+ case -1:
+ case 666:
+ player_set_commands_allowed(false);
+ _chinTalk4 = series_load("rip hand to chin talk pos4");
+ setGlobals4(_chinTalk4, 15, 16, 19);
+ sendWSMessage_C0000(0);
+ digi_play("303F10", 1, 255, 6);
+ _val15 = 2;
+ break;
+
+ case 1:
+ digi_play("303r24", 1, 255, 3);
+ sendWSMessage_D0000();
+ _val15 = 0;
+ break;
+
+ case 3:
+ kernel_timing_trigger(30, 4);
+ break;
+
+ case 4:
+ sendWSMessage_B0000(7);
+ _val15 = 3;
+ digi_play("303f11", 1, 255, 5);
+ break;
+
+ case 5:
+ _val15 = 1;
+ player_set_commands_allowed(true);
+ _G(flags)[V082] = 1;
+ break;
+
+ case 6:
+ _val15 = 1;
+ kernel_timing_trigger(30, 1);
+ break;
+
+ case 7:
+ series_unload(_chinTalk4);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ // TODO
} else {
return;
}
diff --git a/engines/m4/riddle/rooms/section3/room303.h b/engines/m4/riddle/rooms/section3/room303.h
index bad58a0c80b..cceba51f183 100644
--- a/engines/m4/riddle/rooms/section3/room303.h
+++ b/engines/m4/riddle/rooms/section3/room303.h
@@ -64,6 +64,7 @@ private:
machine *_ripPonders = nullptr;
int _gestTalk4 = 0;
int _ripBends = 0;
+ int _chinTalk4 = 0;
static void escapePressed(void *, void *);
More information about the Scummvm-git-logs
mailing list