[Scummvm-git-logs] scummvm master -> 274f11b7a03dd1e19a3848fca1dd44dba6b5bb26
dreammaster
noreply at scummvm.org
Sat Oct 26 22:49:14 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:
274f11b7a0 M4: RIDDLE: Finished room 201 daemon
Commit: 274f11b7a03dd1e19a3848fca1dd44dba6b5bb26
https://github.com/scummvm/scummvm/commit/274f11b7a03dd1e19a3848fca1dd44dba6b5bb26
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-10-26T15:49:05-07:00
Commit Message:
M4: RIDDLE: Finished room 201 daemon
Changed paths:
engines/m4/riddle/flags.h
engines/m4/riddle/rooms/section2/room201.cpp
engines/m4/riddle/rooms/section2/room201.h
engines/m4/riddle/rooms/section3/room301.cpp
engines/m4/riddle/rooms/section4/room401.cpp
engines/m4/riddle/rooms/section4/room495.cpp
engines/m4/riddle/rooms/section5/room501.cpp
engines/m4/riddle/rooms/section6/room603.cpp
engines/m4/riddle/rooms/section6/room615.cpp
diff --git a/engines/m4/riddle/flags.h b/engines/m4/riddle/flags.h
index 094f2612424..5f49c16ea31 100644
--- a/engines/m4/riddle/flags.h
+++ b/engines/m4/riddle/flags.h
@@ -162,7 +162,7 @@ enum {
V126 = 126,
V127 = 127,
V128 = 128,
- V129 = 129,
+ kTravelDest = 129,
kCastleCartoon = 130,
V131 = 131,
V132 = 132,
diff --git a/engines/m4/riddle/rooms/section2/room201.cpp b/engines/m4/riddle/rooms/section2/room201.cpp
index e26fa0668af..c3afa4cdf6a 100644
--- a/engines/m4/riddle/rooms/section2/room201.cpp
+++ b/engines/m4/riddle/rooms/section2/room201.cpp
@@ -28,6 +28,11 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+Room201::Room201() : Section2Room() {
+ Common::fill(_items, _items + 12, 0);
+ Common::fill(_itemFlags, _itemFlags + 12, 0);
+}
+
void Room201::init() {
if (keyCheck()) {
_flag1 = true;
@@ -36,9 +41,11 @@ void Room201::init() {
_flag1 = false;
}
- if (_G(game).previous_room != KERNEL_RESTORING_GAME)
- _val1 = _val2 = 0;
- _itemDigi = 0;
+ if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
+ _val1 = 0;
+ _givenYuan = false;
+ }
+ _itemDigi = nullptr;
digi_preload("950_s02");
_nod = series_load("HEAD NOD Y/N");
@@ -131,6 +138,8 @@ void Room201::init() {
}
void Room201::daemon() {
+ int frame;
+
switch (_G(kernel).trigger) {
case 50:
player_set_commands_allowed(true);
@@ -312,6 +321,19 @@ void Room201::daemon() {
kernel_timing_trigger(1, 1999);
break;
+ case 210:
+ _val6 = 3;
+ digi_play("201m01", 1, 255, 215);
+ break;
+
+ case 215:
+ _ctr1 = 0;
+ _val6 = 0;
+ setGlobals1(_ripTalk, 1, 7, 1, 7, 1);
+ sendWSMessage_110000(217);
+ digi_play("201r02", 1, 255, 217);
+ break;
+
case 217:
if (_ctr1 >= 1) {
_ctr1 = 0;
@@ -321,6 +343,12 @@ void Room201::daemon() {
}
break;
+ case 220:
+ series_unload(_ripTalk);
+ _val6 = 3;
+ digi_play("201m02", 1, 255, 230);
+ break;
+
case 230:
_val6 = 0;
kernel_timing_trigger(120, 235);
@@ -336,17 +364,32 @@ void Room201::daemon() {
sendWSMessage_110000(241);
break;
+ case 241:
+ digi_play("201r03", 1, 255, 242);
+ break;
+
case 242:
sendWSMessage_140000(-1);
_conv1 = 0;
_trigger10 = kernel_trigger_create(244);
break;
+ case 244:
+ _conv1 = 10;
+ digi_play("201x01", 1, 255, 245);
+ break;
+
case 245:
_conv1 = 3;
_trigger10 = kernel_trigger_create(260);
break;
+ case 260:
+ _conv1 = 0;
+ _val6 = 4;
+ digi_play("201m03", 1, 255, 270);
+ break;
+
case 270:
_val6 = 0;
_trigger9 = kernel_trigger_create(279);
@@ -357,6 +400,12 @@ void Room201::daemon() {
ws_walk(356, 256, nullptr, 280, 3);
break;
+ case 280:
+ setGlobals1(_series6, 1, 7, 7, 7);
+ sendWSMessage_110000(290);
+ digi_play("201r04", 1, 255, 290);
+ break;
+
case 290:
if (_ctr1 >= 1) {
_ctr1 = 0;
@@ -369,6 +418,11 @@ void Room201::daemon() {
}
break;
+ case 300:
+ _conv1 = 2;
+ digi_play("201x02", 1, 255, 310);
+ break;
+
case 310:
_ripHandChin = series_load("RIP TREK HAND CHIN POS3");
setGlobals1(_ripHandChin, 1, 14, 14, 14);
@@ -435,6 +489,54 @@ void Room201::daemon() {
}
break;
+ case 511:
+ if (_num3 <= 0) {
+ switch (_conv1) {
+ case 0:
+ sendWSMessage_10000(1, _agent, _nod, 1, 1, 510, _nod, 1, 1, 0);
+ break;
+
+ case 1:
+ sendWSMessage_10000(1, _agent, _nod, 1, 7, 510, _nod, 1, 1, 0);
+ _conv1 = 0;
+ break;
+
+ case 2:
+ sendWSMessage_10000(1, _agent, _nod, 7, 29, 510, _nod, 1, 1, 0);
+ _conv1 = 0;
+ break;
+
+ case 3:
+ _guyBow = series_load("GUY BOW");
+ sendWSMessage_10000(1, _agent, _guyBow, 1, 32, 510, _guyBow, 1, 1, 0);
+ _conv1 = 4;
+ break;
+
+ case 4:
+ sendWSMessage_10000(1, _agent, _nod, 1, 1, 510, _nod, 1, 1, 0);
+ series_unload(_guyBow);
+ _conv1 = 0;
+ break;
+
+ case 5:
+ sendWSMessage_10000(1, _agent, _guySeries1, 1, 49, 510, _nod, 1, 1, 0);
+ _conv1 = 0;
+ break;
+
+ case 8:
+ case 9:
+ sendWSMessage_10000(1, _agent, _guySeries1, 1, 49, 510, _nod, 1, 1, 0);
+ _conv1 = 0;
+ break;
+
+ default:
+ break;
+ }
+ } else {
+
+ }
+ break;
+
case 1000:
animateRipley();
kernel_timing_trigger(2, 1003);
@@ -450,17 +552,42 @@ void Room201::daemon() {
_trigger5 = kernel_trigger_create(1005);
break;
+ case 1005:
+ _conv2 = 8;
+ digi_play("201r03", 1, 255, 1010);
+ break;
+
case 1010:
_conv2 = 7;
_conv1 = 0;
_trigger10 = kernel_trigger_create(1030);
break;
+ case 1030:
+ _conv1 = 10;
+ digi_play("201x03", 1, 255, 1035);
+ break;
+
case 1035:
_conv1 = 3;
_trigger10 = kernel_trigger_create(1040);
break;
+ case 1040:
+ checkFlags();
+
+ if (_val1 == 0) {
+ _conv1 = 0;
+ kernel_timing_trigger(15, 1065);
+ } else if (_val1 == 1) {
+ _conv1 = 10;
+ digi_play("201x04", 1, 255, 9160);
+ } else {
+ _conv1 = 10;
+ digi_play("201x05", 1, 255, 9160);
+ }
+ break;
+
case 1065:
_trigger10 = kernel_trigger_create(1070);
break;
@@ -482,6 +609,28 @@ void Room201::daemon() {
_trigger4 = kernel_trigger_create(1080);
break;
+ case 1080:
+ _conv1 = 8;
+ player_set_commands_allowed(true);
+
+ if (_G(flags)[V053] == 1)
+ _G(flags)[V053] = 2;
+
+ _trigger11 = kernel_trigger_create(1200);
+ break;
+
+ case 1200:
+ if (_G(flags)[V053] == 1)
+ _G(flags)[V053] = 2;
+ if (_G(flags)[V056] == 1 && _G(flags)[V066] == 0) {
+ kernel_timing_trigger(10, 3000);
+ } else {
+ kernel_timing_trigger(10, 50);
+ }
+
+ _num2 = 1;
+ break;
+
case 2000:
if (_val5 == 0 && _val6 == 0 && _trigger9 != -1) {
kernel_trigger_dispatchx(_trigger9);
@@ -501,6 +650,144 @@ void Room201::daemon() {
kernel_timing_trigger(1, 2010);
break;
+ case 2010:
+ switch (_val5) {
+ case 0:
+ switch (_val6) {
+ case 0:
+ sendWSMessage_10000(1, _mei2, _meiWalk, 1, 1, 2000, _meiWalk, 1, 1, 0);
+ break;
+
+ case 2:
+ _meiHandHip = series_load("MEI TREK HAND ON HIP POS4");
+ sendWSMessage_10000(1, _mei2, _meiHandHip, 1, 21, 2000, _meiHandHip, 22, 22, 0);
+ _val5 = 2;
+ break;
+
+ case 3:
+ sendWSMessage_10000(1, _mei2, _meiTalker, 1, 1, 2000, _meiTalker, 1, 4, 1);
+ _val5 = 3;
+ break;
+
+ case 4:
+ _meiHeadTurn = series_load("MEI TREK HEAD TRN POS4");
+ sendWSMessage_10000(1, _mei2, _meiHeadTurn, 8, 9, 2000, _meiHeadTurn, 10, 10, 0);
+ _val5 = 4;
+ break;
+
+ case 5:
+ case 6:
+ _meiTalkLoop = series_load("MEI TREK TALK LOOP POS4");
+ sendWSMessage_10000(1, _mei2, _meiTalkLoop, 1, 14, 2000, _meiTalkLoop, 15, 15, 0);
+ _val5 = 5;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 2:
+ switch (_val6) {
+ case 0:
+ sendWSMessage_10000(1, _mei2, _meiHandHip, 21, 1, 2000, _meiWalk, 1, 1, 0);
+ _val6 = 1;
+ break;
+
+ case 1:
+ sendWSMessage_10000(1, _mei2, _meiWalk, 1, 1, 2000, _meiWalk, 1, 1, 0);
+ series_unload(_meiHandHip);
+ _val6 = 0;
+ _val5 = 0;
+ break;
+
+ case 2:
+ sendWSMessage_10000(1, _mei2, _meiHandHip, 22, 22, 2000, _meiHandHip, 22, 22, 0);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 3:
+ switch (_val6) {
+ case 0:
+ sendWSMessage_10000(1, _mei2, _meiTalker, 1, 1, 2000, _meiWalk, 1, 1, 0);
+ _val5 = 0;
+ break;
+
+ case 3:
+ frame = imath_ranged_rand(1, 4);
+ sendWSMessage_10000(1, _mei2, _meiTalker, frame, frame, 2000,
+ _meiTalker, frame, frame, 1);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 4:
+ switch (_val6) {
+ case 0:
+ sendWSMessage_10000(1, _mei2, _meiHeadTurn, 10, 8, 2000, _meiWalk, 1, 1, 0);
+ _val6 = 1;
+ break;
+
+ case 1:
+ sendWSMessage_10000(1, _mei2, _meiWalk, 1, 1, 2000, _meiWalk, 1, 1, 0);
+ _val5 = _val6 = 0;
+ series_unload(_meiHeadTurn);
+ break;
+
+ case 4:
+ sendWSMessage_10000(1, _mei2, _meiHeadTurn, 10, 10, 2000,
+ _meiHeadTurn, 10, 10, 0);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 5:
+ switch (_val6) {
+ case 0:
+ sendWSMessage_10000(1, _mei2, _meiTalkLoop, 15, 1, 2000, _meiWalk, 1, 1, 0);
+ _val6 = 1;
+ break;
+
+ case 1:
+ sendWSMessage_10000(1, _mei2, _meiWalk, 1, 1, 2000, _meiWalk, 1, 1, 0);
+ _val6 = _val5 = 0;
+ series_unload(_meiTalkLoop);
+ break;
+
+ case 5:
+ sendWSMessage_10000(1, _mei2, _meiTalkLoop, 15, 15, 2000, _meiTalkLoop, 15, 15, 0);
+ break;
+
+ case 6:
+ sendWSMessage_10000(1, _mei2, _meiTalkLoop, 15, 29, 2000, _meiTalkLoop, 29, 29, 0);
+ _val6 = 7;
+ break;
+
+ case 7:
+ sendWSMessage_10000(1, _mei2, _meiTalkLoop, 29, 15, 2000, _meiTalkLoop, 15, 15, 0);
+ _val6 = 5;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
case 3000:
player_set_commands_allowed(false);
animateRipley();
@@ -635,11 +922,343 @@ void Room201::daemon() {
}
break;
+ case 4020:
+ switch (_num1) {
+ case 1:
+ switch (_conv2) {
+ case 1:
+ sendWSMessage_10000(1, _ripley, _series6, 1, 1, 4010, _series6, 1, 1, 0);
+ break;
+
+ case 2:
+ case 3:
+ sendWSMessage_10000(1, _ripley, _series6, 1, 5, 4010, _series6, 5, 5, 0);
+ _num1 = 3;
+ break;
+
+ case 4:
+ case 5:
+ sendWSMessage_10000(1, _ripley, _ripHandChin, 1, 12, 4010, _ripHandChin, 12, 12, 0);
+ _num1 = 4;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 3:
+ switch (_conv2) {
+ case 1:
+ sendWSMessage_10000(1, _ripley, _series6, 5, 1, 4010, _series6, 1, 1, 0);
+ _num1 = 1;
+ break;
+
+ case 2:
+ sendWSMessage_10000(1, _ripley, _series6, 6, 9, 4010, _series6, 8, 5, 0);
+ break;
+
+ case 3:
+ sendWSMessage_10000(1, _ripley, _series6, 5, 5, 4010, _series6, 5, 5, 0);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 4:
+ switch (_conv2) {
+ case 1:
+ sendWSMessage_10000(1, _ripley, _ripHandChin, 12, 1, 4010, _ripHandChin, 1, 1, 0);
+ _num1 = 1;
+ break;
+
+ case 4:
+ sendWSMessage_10000(1, _ripley, _ripHandChin, 12, 12, 4010, _ripHandChin, 12, 12, 0);
+ break;
+
+ case 5:
+ sendWSMessage_10000(1, _ripley, _ripHandChin, 11, 7, 4010, _ripHandChin, 7, 7, 0);
+ _num1 = 5;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 5:
+ switch (_conv2) {
+ case 4:
+ sendWSMessage_10000(1, _ripley, _ripHandChin, 7, 12, 4010, _ripHandChin, 12, 12, 0);
+ _num1 = 4;
+ break;
+
+ case 5:
+ sendWSMessage_10000(1, _ripley, _ripHandChin, 7, 7, 4010, _ripHandChin, 7, 7, 0);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 6:
+ switch (_conv2) {
+ case 6:
+ sendWSMessage_10000(1, _ripley, _series7, 1, 1, 4010, _series7, 1, 1, 0);
+ break;
+
+ case 7:
+ sendWSMessage_10000(1, _ripley, _series7, 1, 9, 4010, _series7, 10, 10, 0);
+ _num1 = 7;
+ break;
+
+ case 9:
+ _conv2 = 7;
+ _trigger5 = kernel_trigger_create(6500);
+ kernel_timing_trigger(1, 4010);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 7:
+ switch (_conv2) {
+ case 6:
+ sendWSMessage_10000(1, _ripley, _series7, 9, 1, 4010, _series7, 1, 1, 0);
+ _num1 = 6;
+ break;
+
+ case 7:
+ sendWSMessage_10000(1, _ripley, _series7, 10, 10, 4010, _series7, 10, 10, 0);
+ break;
+
+ case 8:
+ frame = imath_ranged_rand(11, 19);
+ sendWSMessage_10000(1, _ripley, _series7, frame, frame, 4010, _series7, frame, frame, 0);
+ break;
+
+ case 10:
+ _flag3 = true;
+ sendWSMessage_10000(1, _ripley, _guyParcel, 1, 25, 4010, _guyParcel, 25, 25, 0);
+ _conv2 = 11;
+ break;
+
+ case 11:
+ digi_play("COM090", 1);
+ sendWSMessage_10000(1, _ripley, _guyParcel, 26, 68, 4010, _guyParcel, 1, 1, 0);
+ _conv2 = 13;
+ break;
+
+ case 12:
+ player_set_commands_allowed(true);
+ _conv2 = 7;
+ sendWSMessage_10000(1, _ripley, _guyParcel, 1, 1, 4010, _guyParcel, 1, 1, 0);
+ kernel_timing_trigger(1, 6500);
+ break;
+
+ case 13:
+ sendWSMessage_10000(1, _ripley, _guyParcel, 1, 1, 4010, _guyParcel, 1, 1, 0);
+ break;
+
+ case 14:
+ _conv2 = 6;
+ _conv1 = 8;
+ _trigger4 = kernel_trigger_create(6000);
+ kernel_timing_trigger(1, 4010);
+
+ if (_travelDest) {
+ player_set_commands_allowed(false);
+ disable_player_commands_and_fade_init(6700);
+ }
+ break;
+
+ case 15:
+ _flag3 = true;
+ sendWSMessage_10000(1, _ripley, _series5, 1, 35, 4010, _series5, 35, 35, 0);
+ _conv2 = 16;
+ break;
+
+ case 16:
+ sendWSMessage_10000(1, _ripley, _series5, 35, 35, 4010, _series5, 35, 35, 0);
+ break;
+
+ case 17:
+ sendWSMessage_10000(1, _ripley, _series5, 35, 1, 4010, _series5, 1, 1, 0);
+ _conv2 = 7;
+ break;
+
+ case 18:
+ player_set_commands_allowed(false);
+ _flag3 = true;
+ digi_play(conv_sound_to_play(), 1);
+ sendWSMessage_10000(1, _ripley, _guyPassForm, 1, 77, 4010,
+ _guyPassForm, 77, 77, 0);
+ _conv2 = 19;
+ break;
+
+ case 19:
+ sendWSMessage_10000(1, _ripley, _series5, 48, 1, 4010, _series5, 1, 1, 0);
+ _conv2 = 7;
+ _trigger5 = kernel_trigger_create(7100);
+ series_unload(_guyPassForm);
+ break;
+
+ case 20:
+ _flag3 = true;
+ digi_preload("201R63");
+ sendWSMessage_10000(1, _ripley, _series8, 1, 50, 4010, _series8, 50, 50, 0);
+ _conv2 = 21;
+ break;
+
+ case 21:
+ digi_play("201R63", 1);
+ sendWSMessage_10000(1, _ripley, _series8, 51, 69, 4010, _series8, 69, 69, 0);
+ _conv2 = 22;
+ _num1 = 22;
+ break;
+
+ case 24:
+ _flag3 = true;
+ sendWSMessage_10000(1, _ripley, _guyPassForm, 1, 50, 4010, _guyPassForm, 50, 50, 0);
+ _conv2 = 25;
+ break;
+
+ case 25:
+ digi_play("950_S34", 2);
+
+ if (_doc) {
+ _doc = series_place_sprite("201DOC", 0, 0, 0, 100, 0x410);
+ _val4 = 1;
+ }
+
+ sendWSMessage_10000(1, _ripley, _guyPassForm, 51, 57, 4010, _guyPassForm, 57, 57, 0);
+ _conv2 = 26;
+ break;
+
+ case 26:
+ digi_stop(2);
+ sendWSMessage_10000(1, _ripley, _guyPassForm, 58, 77, 4010, _guyPassForm, 77, 77, 0);
+ kernel_timing_trigger(1, 509);
+ _conv2 = 27;
+ break;
+
+ case 27:
+ _G(flags)[V079] = 1;
+ _G(flags)[V365] = 1;
+ sendWSMessage_10000(1, _ripley, _series7, 10, 10, 4010, _series7, 10, 10, 0);
+ _conv2 = 7;
+ break;
+
+ case 28:
+ _flag3 = true;
+ sendWSMessage_10000(1, _ripley, _guyParcel, 68, 1, 4010, _guyParcel, 1, 1, 0);
+ _conv2 = 29;
+ break;
+
+ case 29:
+ kernel_timing_trigger(1, 509);
+ sendWSMessage_10000(1, _ripley, _guyParcel, 1, 1, 4010, _guyParcel, 1, 1, 0);
+ _conv2 = 7;
+ _trigger5 = kernel_trigger_create(9250);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 22:
+ switch (_conv2) {
+ case 7:
+ sendWSMessage_10000(1, _ripley, _series8, 70, 79, 4010, _series7, 10, 10, 0);
+ _num1 = 7;
+ kernel_timing_trigger(1, 509);
+ break;
+
+ case 22:
+ sendWSMessage_10000(1, _ripley, _series8, 69, 69, 4010, _series8, 69, 69, 0);
+ break;
+
+ case 23:
+ sendWSMessage_10000(1, _ripley, _series8, 69, 70, 4010, _series8, 70, 69, 0);
+ _conv2 = 22;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 6000:
+ player_set_commands_allowed(true);
+ _num2 = 1;
+ break;
+
+ case 6500:
+ _G(kernel).trigger_mode = KT_PARSE;
+ conv_load("conv201a", 10, 10, 747);
+ _hasKeyItems = buildKeyItemsArray();
+ conv_export_pointer_curr(&_hasKeyItems, 0);
+ conv_export_value_curr(_G(flags)[V088] >= 3 ? 1 : 0, 1);
+
+ for (int i = 0; i < 12; ++i)
+ conv_export_pointer_curr(&_itemFlags[i], i + 2);
+
+ if (_G(flags)[V056] != 1)
+ conv_export_value_curr(0, 15);
+ else if (_G(flags)[V110] != 1)
+ conv_export_value_curr(1, 15);
+ else
+ conv_export_value_curr(2, 15);
+
+ _travelDest = 0;
+ conv_export_pointer_curr(&_travelDest, 16);
+ conv_export_pointer_curr(&_givenYuan, 17);
+ conv_export_value_curr((_G(flags)[V053] == 1) ? 1 : 0, 19);
+ conv_play();
+ break;
+
+ case 6700:
+ digi_stop(2);
+ digi_stop(3);
+
+ if (_G(flags)[V056] == 1)
+ _G(flags)[V049] = 1;
+
+ _G(flags)[kTravelDest] = _travelDest;
+ _G(game).setRoom(495);
+ break;
+
case 7010:
_conv2 = 17;
_trigger5 = kernel_trigger_create(7020);
break;
+ case 7020:
+ if (!_givenYuan) {
+ inv_give_to_player("CHINESE YUAN");
+ _givenYuan = true;
+ }
+
+ kernel_timing_trigger(1, 509);
+ break;
+
+ case 7100:
+ player_set_commands_allowed(true);
+ inv_give_to_player("US DOLLARS");
+ kernel_timing_trigger(1, 509);
+ break;
+
case 8000:
kernel_timing_trigger(120, 75);
break;
@@ -649,6 +1268,20 @@ void Room201::daemon() {
kernel_timing_trigger(5, 9020);
break;
+ case 9020: {
+ static const char *ITEMS[12] = {
+ "CRYSTAL SKULL", "STICK AND SHELL MAP", "WHEELED TOY",
+ "REBUS AMULET", "SHRUNKEN HEAD", "SILVER BUTTERFLY",
+ "POSTAGE STAMP", "GERMAN BANKNOTE", "WHALE BONE HORN",
+ "CHISEL", "INCENSE BURNER", "ROMANOV EMERALD"
+ };
+ assert((uint)conv_current_entry() <= 12);
+ inv_move_object(ITEMS[conv_current_entry()], 305);
+ player_set_commands_allowed(true);
+ conv_resume();
+ break;
+ }
+
case 9050:
_itemDigi2 = _itemDigi3 = _itemDigi4 = _itemDigi5 = nullptr;
inv_give_to_player("MESSAGE LOG");
@@ -701,10 +1334,62 @@ void Room201::daemon() {
}
break;
+ case 9060:
+ _conv2 = 22;
+ _trigger7 = kernel_trigger_create(9085);
+ break;
+
+ case 9085:
+ if (_itemDigi2)
+ digi_play(_itemDigi2, 1, 255, 9090);
+ else
+ kernel_timing_trigger(1, 9090);
+ break;
+
+ case 9090:
+ if (_itemDigi3)
+ digi_play(_itemDigi3, 1, 255, 9100);
+ else
+ kernel_timing_trigger(1, 9100);
+ break;
+
+ case 9100:
+ if (_itemDigi4)
+ digi_play(_itemDigi4, 1, 255, 9110);
+ else
+ kernel_timing_trigger(1, 9110);
+ break;
+
+ case 9110:
+ if (_itemDigi5)
+ digi_play(_itemDigi5, 1, 255, 9120);
+ else
+ kernel_timing_trigger(1, 9120);
+ break;
+
+ case 9120:
+ if (_flag2) {
+ _flag2 = false;
+ kernel_timing_trigger(1, 9230);
+ } else {
+ if (--_val1 > 0) {
+ _conv2 = 23;
+ _trigger7 = kernel_trigger_create(9050);
+ } else {
+ kernel_timing_trigger(1, 9220);
+ }
+ }
+ break;
+
case 9139:
sendWSMessage_150000(-1);
break;
+ case 9160:
+ _conv2 = 20;
+ _trigger7 = kernel_trigger_create(9050);
+ break;
+
case 9200:
_guyPassForm = series_load("GUY PASS FORM TO RIPLEY");
digi_preload("950_S34");
@@ -861,6 +1546,53 @@ void Room201::animateRipley() {
_G(player_info).x, _G(player_info).y, _G(player_info).scale, 0xf00);
}
+void Room201::checkFlags() {
+ if (_G(flags)[V364] == 1) {
+ _val1++;
+
+ if (_G(flags)[V053] == 1) {
+ _G(flags)[V350] = 1;
+ } else {
+ switch (_G(flags)[V005]) {
+ case 1: _G(flags)[V351] = 1; break;
+ case 2: _G(flags)[V352] = 1; break;
+ case 3: _G(flags)[V353] = 1; break;
+ case 4: _G(flags)[V354] = 1; break;
+ default: break;
+ }
+ }
+ }
+
+ for (int i = V365; i <= V373; ++i) {
+ if (_G(flags)[i] == 1) {
+ _G(flags)[i - 10] = 1;
+ ++_val1;
+ }
+ }
+}
+
+bool Room201::buildKeyItemsArray() {
+ static const char *ITEMS[12] = {
+ "CRYSTAL SKULL", "STICK AND SHELL MAP", "WHEELED TOY",
+ "REBUS AMULET", "SHRUNKEN HEAD", "SILVER BUTTERFLY",
+ "POSTAGE STAMP", "GERMAN BANKNOTE", "WHALE BONE HORN",
+ "CHISEL", "INCENSE BURNER", "ROMANOV EMERALD"
+ };
+
+ // Build up an array of the key items the player has
+ Common::fill(_items, _items + 12, 0);
+ Common::fill(_itemFlags, _itemFlags + 12, 0);
+ _totalItems = 0;
+
+ for (int i = 0; i < 12; ++i) {
+ _itemFlags[i] = inv_player_has(ITEMS[i]) ? 1 : 0;
+ if (_itemFlags[i])
+ _items[_totalItems++] = i + 1;
+ }
+
+ return _totalItems > 0;
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section2/room201.h b/engines/m4/riddle/rooms/section2/room201.h
index 08d089181bf..b300bc3e425 100644
--- a/engines/m4/riddle/rooms/section2/room201.h
+++ b/engines/m4/riddle/rooms/section2/room201.h
@@ -33,8 +33,9 @@ private:
bool _flag1 = false;
bool _flag2 = false;
bool _flag3 = false;
+ int32 _travelDest = 0;
int _val1 = 0;
- int _val2 = 0;
+ int32 _givenYuan = 0;
const char *_itemDigi = nullptr;
const char *_itemDigi2 = nullptr;
const char *_itemDigi3 = nullptr;
@@ -51,6 +52,8 @@ private:
int _guyWriting = 0;
int _guyParcel = 0;
int _guyPassForm = 0;
+ int _guyBow = 0;
+ int _guySeries1 = 0;
int _series1 = -1;
int _series2 = -2;
int _series3 = -1;
@@ -66,9 +69,11 @@ private:
machine *_doc = nullptr;
machine *_shadow3 = nullptr;
machine *_agent = nullptr;
- int _meiHandHip = -1;
- int _meiTalker = -1;
- int _meiWalk = -1;
+ int _meiHandHip = 0;
+ int _meiTalker = 0;
+ int _meiWalk = 0;
+ int _meiHeadTurn = 0;
+ int _meiTalkLoop = 0;
int _ripHandChin = -1;
int _ripTalk = -1;
int _num1 = 0;
@@ -87,13 +92,19 @@ private:
int _trigger11 = -1;
int _trigger12 = -1;
int _ctr1 = 0;
+ int _items[12];
+ int32 _itemFlags[12];
+ int _totalItems = 0;
+ int32 _hasKeyItems = 0;
void setupMei();
void conv201a();
void animateRipley();
+ void checkFlags();
+ bool buildKeyItemsArray();
public:
- Room201() : Section2Room() {}
+ Room201();
~Room201() override {}
void init() override;
diff --git a/engines/m4/riddle/rooms/section3/room301.cpp b/engines/m4/riddle/rooms/section3/room301.cpp
index 5c8492bb798..1436cb862a5 100644
--- a/engines/m4/riddle/rooms/section3/room301.cpp
+++ b/engines/m4/riddle/rooms/section3/room301.cpp
@@ -979,16 +979,16 @@ void Room301::parser() {
if (_travelDest) {
switch (_travelDest) {
case 1:
- _G(flags)[V129] = 0;
+ _G(flags)[kTravelDest] = 0;
break;
case 2:
- _G(flags)[V129] = 2;
+ _G(flags)[kTravelDest] = 2;
break;
case 3:
- _G(flags)[V129] = 3;
+ _G(flags)[kTravelDest] = 3;
break;
case 4:
- _G(flags)[V129] = 4;
+ _G(flags)[kTravelDest] = 4;
break;
default:
break;
diff --git a/engines/m4/riddle/rooms/section4/room401.cpp b/engines/m4/riddle/rooms/section4/room401.cpp
index f541fcd7be9..8f28c10e61f 100644
--- a/engines/m4/riddle/rooms/section4/room401.cpp
+++ b/engines/m4/riddle/rooms/section4/room401.cpp
@@ -789,16 +789,16 @@ void Room401::parser() {
if (_val4) {
switch (_val4) {
case 1:
- _G(flags)[V129] = 1;
+ _G(flags)[kTravelDest] = 1;
break;
case 2:
- _G(flags)[V129] = 0;
+ _G(flags)[kTravelDest] = 0;
break;
case 3:
- _G(flags)[V129] = 4;
+ _G(flags)[kTravelDest] = 4;
break;
case 4:
- _G(flags)[V129] = 3;
+ _G(flags)[kTravelDest] = 3;
break;
default:
break;
diff --git a/engines/m4/riddle/rooms/section4/room495.cpp b/engines/m4/riddle/rooms/section4/room495.cpp
index b3ee7e38e8b..4ea23381f2e 100644
--- a/engines/m4/riddle/rooms/section4/room495.cpp
+++ b/engines/m4/riddle/rooms/section4/room495.cpp
@@ -60,7 +60,7 @@ void Room495::init() {
case 201:
_G(flags)[V092] = 1;
- switch (_G(flags)[V129]) {
+ switch (_G(flags)[kTravelDest]) {
case 1:
play("495 peiping to ny", "495pg03s", 93, 3);
break;
@@ -79,7 +79,7 @@ void Room495::init() {
break;
case 301:
- switch (_G(flags)[V129]) {
+ switch (_G(flags)[kTravelDest]) {
case 0:
play("495 ny to peiping", "495ny03s", 108, 3);
break;
@@ -98,7 +98,7 @@ void Room495::init() {
break;
case 401:
- switch (_G(flags)[V129]) {
+ switch (_G(flags)[kTravelDest]) {
case 0:
play("495 danzig to peiping", "495dg04s", 51, 4);
break;
@@ -117,7 +117,7 @@ void Room495::init() {
break;
case 501:
- switch (_G(flags)[V129]) {
+ switch (_G(flags)[kTravelDest]) {
case 0:
play("495 lima to peiping", "495lm05s", 115, 3);
break;
@@ -140,12 +140,12 @@ void Room495::init() {
case 603:
case 615:
- if (_G(flags)[V129] == 4)
+ if (_G(flags)[kTravelDest] == 4)
play("495 easter isle to lima", "495eis", 16, 12);
break;
case 701:
- switch (_G(flags)[V129]) {
+ switch (_G(flags)[kTravelDest]) {
case 0:
play("495 sikkim to peiping", "495sm02s", 17, 10);
break;
@@ -183,7 +183,7 @@ void Room495::daemon() {
case 501:
interface_show();
- switch (_G(flags)[V129]) {
+ switch (_G(flags)[kTravelDest]) {
case 0:
_G(flags)[V092] = 0;
_G(game).setRoom(201);
diff --git a/engines/m4/riddle/rooms/section5/room501.cpp b/engines/m4/riddle/rooms/section5/room501.cpp
index a4879f030d1..eac2c613679 100644
--- a/engines/m4/riddle/rooms/section5/room501.cpp
+++ b/engines/m4/riddle/rooms/section5/room501.cpp
@@ -522,19 +522,19 @@ void Room501::daemon() {
case 513:
switch (_convEntry) {
case 0:
- _G(flags)[V129] = 1;
+ _G(flags)[kTravelDest] = 1;
break;
case 1:
- _G(flags)[V129] = 2;
+ _G(flags)[kTravelDest] = 2;
break;
case 2:
- _G(flags)[V129] = 0;
+ _G(flags)[kTravelDest] = 0;
break;
case 3:
- _G(flags)[V129] = 3;
+ _G(flags)[kTravelDest] = 3;
break;
case 4:
- _G(flags)[V129] = 5;
+ _G(flags)[kTravelDest] = 5;
break;
default:
break;
diff --git a/engines/m4/riddle/rooms/section6/room603.cpp b/engines/m4/riddle/rooms/section6/room603.cpp
index 448ed07e8fa..71b92be5542 100644
--- a/engines/m4/riddle/rooms/section6/room603.cpp
+++ b/engines/m4/riddle/rooms/section6/room603.cpp
@@ -1492,7 +1492,7 @@ void Room603::parser() {
_G(flags)[GLB_TEMP_5] = 0;
_G(game).setRoom(495);
- _G(flags)[V129] = 4;
+ _G(flags)[kTravelDest] = 4;
} else if (_G(kernel).trigger == 556) {
digi_stop(1);
digi_stop(2);
diff --git a/engines/m4/riddle/rooms/section6/room615.cpp b/engines/m4/riddle/rooms/section6/room615.cpp
index 99c766bc637..6fc706b1939 100644
--- a/engines/m4/riddle/rooms/section6/room615.cpp
+++ b/engines/m4/riddle/rooms/section6/room615.cpp
@@ -493,7 +493,7 @@ void Room615::daemon() {
inv_move_object("SPARK PLUG TOOL", NOWHERE);
_G(flags)[V203] = 9;
_G(flags)[V191] = 0;
- _G(flags)[V129] = 4;
+ _G(flags)[kTravelDest] = 4;
_G(game).setRoom(495);
break;
More information about the Scummvm-git-logs
mailing list