[Scummvm-git-logs] scummvm master -> 4cfe99c713cdd888a19a1ecdd763778eaaaac593
dreammaster
noreply at scummvm.org
Sat Jul 27 05:55:24 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:
4cfe99c713 M4: RIDDLE: More room 301 daemon
Commit: 4cfe99c713cdd888a19a1ecdd763778eaaaac593
https://github.com/scummvm/scummvm/commit/4cfe99c713cdd888a19a1ecdd763778eaaaac593
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-26T22:55:16-07:00
Commit Message:
M4: RIDDLE: More room 301 daemon
Changed paths:
engines/m4/riddle/rooms/room.cpp
engines/m4/riddle/rooms/room.h
engines/m4/riddle/rooms/section3/room301.cpp
engines/m4/riddle/rooms/section3/room301.h
engines/m4/wscript/ws_machine.cpp
engines/m4/wscript/ws_machine.h
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index a41696f1bb8..fe4cacc2772 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -173,6 +173,10 @@ void Room::sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
sendWSMessage(0x10000, 0, nullptr, 0, nullptr, 1);
}
+void Room::sendWSMessage_80000(machine *walker) {
+ sendWSMessage(0x80000, 0, walker, 0, nullptr, 1);
+}
+
void Room::sendWSMessage_C0000(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 00c589745d5..72d8be29bbd 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -60,6 +60,7 @@ protected:
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_80000(machine *walker);
void sendWSMessage_C0000(machine *walker, int trigger);
void sendWSMessage_C0000(int trigger);
void sendWSMessage_110000(machine *walker, int trigger);
diff --git a/engines/m4/riddle/rooms/section3/room301.cpp b/engines/m4/riddle/rooms/section3/room301.cpp
index 299dcbd2972..074e5c13d68 100644
--- a/engines/m4/riddle/rooms/section3/room301.cpp
+++ b/engines/m4/riddle/rooms/section3/room301.cpp
@@ -44,8 +44,8 @@ void Room301::init() {
_soundName = nullptr;
_nextSound = nullptr;
_val5 = -1;
- _val6 = 2;
- _val7 = 2;
+ _val6 = KT_DAEMON;
+ _val7 = KT_DAEMON;
_val8 = 0;
_val9 = 0;
_val10 = 0;
@@ -96,10 +96,321 @@ void Room301::init() {
}
void Room301::daemon() {
- int frame;
+ int frame, val;
switch (_G(kernel).trigger) {
- // TODO: More cases
+ case 1:
+ player_set_commands_allowed(true);
+ break;
+
+ case 9:
+ _machine1 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+ triggerMachineByHashCallbackNegative, "guy behind desk");
+ _val13 = _val14 = 0;
+ sendWSMessage_10000(1, _machine1, _agentStander, 1,
+ 1, 10, _agentStander, 1, 1, 0);
+
+ case 10:
+ if (!_val13 && _val14 && _val5 != -1) {
+ kernel_trigger_dispatchx(_val5);
+ _val5 = -1;
+
+ if (_val9) {
+ ws_unhide_walker();
+ _val9 = 0;
+ }
+ if (_val11) {
+ conv_resume();
+ _val11 = 0;
+ }
+ if (_val10) {
+ sendWSMessage_80000(_machine4);
+ sendWSMessage_10000(11, _machine4, _ripTrekTravel, 10,
+ 10, 20, _ripTrekTravel, 10, 10, 0);
+ }
+ }
+
+ kernel_timing_trigger(1, 11);
+ break;
+
+ case 11:
+ switch (_val13) {
+ case 0:
+ switch (_val14) {
+ case 0:
+ val = imath_ranged_rand(1, 3);
+ ++_val8;
+ if (imath_ranged_rand(10, 40) <= _val8)
+ _val8 = 0;
+ else
+ val = 1;
+
+ switch (val) {
+ case 1:
+ sendWSMessage_10000(1, _machine1, _agentStander, 1, 1, 10,
+ _agentStander, 1, 1, 0);
+ break;
+ case 2:
+ sendWSMessage_10000(1, _machine1, _agentStander, 1, 7, 10,
+ _agentStander, 7, 7, 0);
+ _val13 = _val14 = 3;
+ break;
+ case 3:
+ sendWSMessage_10000(1, _machine1, _agentTalk, 1, 6, 10,
+ _agentTalk, 6, 6, 0);
+ _val13 = _val14 = 7;
+ _val8 = 0;
+
+ digi_play((imath_ranged_rand(1, 2) == 1) ? "950_s06" : "950_s07",
+ 2, 200);
+ break;
+ default:
+ break;
+ }
+ break;
+
+ case 1:
+ case 2:
+ sendWSMessage_10000(1, _machine1, _agentCheckingList,
+ 1, 26, 10, _agentCheckingList, 27, 27, 0);
+ break;
+
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ sendWSMessage_10000(1, _machine1, _agentStander, 1, 7, 10,
+ _agentStander, 7, 7, 0);
+ _val13 = 3;
+ _val8 = 0;
+ break;
+
+ case 7:
+ case 8:
+ case 9:
+ sendWSMessage_10000(1, _machine1, _agentTalk, 1, 6, 10,
+ _agentTalk, 6, 6, 0);
+ _val13 = 7;
+ _val8 = 0;
+ break;
+
+ case 10:
+ sendWSMessage_10000(1, _machine1, _agentSalutes, 1, 28, 10,
+ _agentStander, 1, 1, 0);
+ _val13 = _val14 = 0;
+ _val8 = 0;
+ break;
+
+ case 12:
+ terminateMachineAndNull(_machine4);
+ _val11 = 1;
+ sendWSMessage_10000(1, _machine1, _agentTakesMoney, 1, 52, 13,
+ _agentStander, 1, 1, 0);
+ _val13 = _val14 = 0;
+ _val8 = 0;
+ _val15 = 0;
+ break;
+
+ case 13:
+ terminateMachineAndNull(_machine4);
+ sendWSMessage_10000(1, _machine1, _agentSlidesPaper, 1, 49, 14,
+ _agentStander, 1, 1, 0);
+ break;
+
+ case 15:
+ terminateMachineAndNull(_machine4);
+ sendWSMessage_10000(1, _machine1, _agentSlidesPaper, 1, 49, 25,
+ _agentStander, 1, 1, 0);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 3:
+ // TODO
+ break;
+
+ case 4:
+ switch (_val14) {
+ case 4:
+ sendWSMessage_10000(1, _machine1, _agentStander, 12,
+ 12, 10, _agentStander, 12, 12, 0);
+ break;
+ case 5:
+ if (_soundName) {
+ _G(kernel).trigger_mode = _val7;
+ digi_play(_soundName, 1, 255, _val16);
+ _soundName = nullptr;
+ _val7 = KT_DAEMON;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ }
+
+ _G(kernel).trigger_mode = _val6;
+ frame = imath_ranged_rand(12, 17);
+ sendWSMessage_10000(1, _machine1, _agentStander, frame, frame,
+ 10, _agentStander, frame, frame, 1);
+ sendWSMessage_190000(_machine1, 13);
+ sendWSMessage_1a0000(_machine1, 13);
+ _G(kernel).trigger_mode = KT_DAEMON;
+ _val6 = KT_DAEMON;
+ break;
+ case 6:
+ if (_soundName) {
+ _G(kernel).trigger_mode = _val7;
+ digi_play(_soundName, 1, 255, _val16);
+ _soundName = nullptr;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ }
+
+ frame = imath_ranged_rand(18, 21);
+ sendWSMessage_10000(1, _machine1, _agentStander, frame, frame,
+ 10, _agentStander, frame, frame, 1);
+ sendWSMessage_190000(_machine1, 13);
+ sendWSMessage_1a0000(_machine1, 13);
+ break;
+ default:
+ sendWSMessage(1, _machine1, _agentStander, 12,
+ 8, 10, _agentStander, 7, 7, 0);
+ _val13 = 3;
+ _val8 = 0;
+ break;
+ }
+ break;
+
+ case 7:
+ switch (_val14) {
+ case 7:
+ val = imath_ranged_rand(1, 2);
+ if (imath_ranged_rand(10, 40) <= _val8)
+ _val8 = 0;
+ else
+ val = 1;
+
+ if (val == 1) {
+ sendWSMessage_10000(1, _machine1, _agentTalk, 6, 6, 10,
+ _agentTalk, 6, 6, 0);
+ } else if (val == 2) {
+ sendWSMessage_10000(1, _machine1, _agentTalk, 6, 1, 10,
+ _agentStander, 1, 1, 0);
+ _val13 = _val14 = 0;
+ _val8 = 0;
+
+ digi_play((imath_ranged_rand(1, 2) == 1) ? "950_s06" : "950_s07",
+ 2, 200);
+ }
+ break;
+
+ case 8:
+ case 9:
+ sendWSMessage_10000(1, _machine1, _agentTalk, 6, 15, 10,
+ _agentTalk, 15, 15, 0);
+ break;
+
+ default:
+ sendWSMessage_10000(1, _machine1, _agentTalk, 6, 1, 10,
+ _agentStander, 1, 1, 0);
+ _val13 = 0;
+ break;
+ }
+ break;
+
+ case 8:
+ switch (_val14) {
+ case 8:
+ sendWSMessage_10000(1, _machine1, _agentTalk, 15, 15, 10,
+ _agentTalk, 15, 15, 0);
+ break;
+ case 9:
+ if (_soundName) {
+ digi_play(_soundName, 1, 255, _val16);
+ _soundName = nullptr;
+ }
+
+ sendWSMessage_10000(1, _machine1, _agentTalk, 16, 32, 10,
+ _agentTalk, 15, 15, 0);
+ break;
+ default:
+ sendWSMessage_10000(1, _machine1, _agentTalk, 15, 6, 10,
+ _agentTalk, 6, 6, 0);
+ _val13 = 7;
+ break;
+ }
+ break;
+
+ case 14:
+ if (_val14 == 14) {
+ if (_soundName) {
+ _G(kernel).trigger_mode = KT_PARSE;
+ digi_play(_soundName, 1, 255, _val16);
+ _soundName = nullptr;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ }
+
+ sendWSMessage(1, _machine1, _agentSlidesPaper, 54, 54, 10,
+ _agentSlidesPaper, 54, 55, 1);
+
+ } else {
+ sendWSMessage_10000(1, _machine1, _agentSlidesPaper, 57, 76, 10,
+ _agentSlidesPaper, 76, 76, 0);
+ _val13 = _val14 = 0;
+ _val8 = 0;
+ _val10 = 1;
+ _val11 = 1;
+ }
+ break;
+ }
+ break;
+
+ case 12:
+ _machine4 = TriggerMachineByHash(triggerMachineByHashCallbackNegative, "rip");
+ sendWSMessage_10000(1, _machine4, _ripTrekTravel, 10, 10, 20,
+ _ripTrekTravel, 10, 10, 0);
+ _val15 = _val19 = 0;
+ kernel_timing_trigger(10, 10);
+ _val14 = 4;
+ _val8 = 0;
+ conv_resume();
+ break;
+
+ case 13:
+ _machine4 = TriggerMachineByHash(triggerMachineByHashCallbackNegative, "rip in conv");
+ sendWSMessage_10000(1, _machine4, _ripTrekTravel, 10, 10, 20,
+ _ripTrekTravel, 10, 10, 0);
+ _val15 = _val19 = 0;
+ kernel_timing_trigger(10, 10);
+ break;
+
+ case 14:
+ sendWSMessage_10000(1, _machine1, _agentSlidesPaper, 50, 63, 15,
+ _agentStander, 1, 1, 0);
+ digi_play("950_s35", 2);
+ break;
+
+ case 15:
+ _G(globals)[GLB_TEMP_2] = 1;
+ sendWSMessage_10000(1, _machine1, _agentSlidesPaper, 49, 1, 12,
+ _agentStander, 1, 1, 0);
+ break;
+
+ case 20:
+ if (!_val19 && !_val15 && _val5 != -1) {
+ kernel_trigger_dispatchx(_val5);
+ _val5 = -1;
+
+ if (_val9) {
+ ws_unhide_walker();
+ _val9 = 0;
+ }
+ if (_val10) {
+ sendWSMessage_80000(_machine4);
+ _val10 = 0;
+ }
+ }
+
+ kernel_timing_trigger(1, 21);
+ break;
case 21:
if (!_val19) {
@@ -224,7 +535,7 @@ void Room301::daemon() {
case 63:
_val14 = 6;
- _val7 = 2;
+ _val7 = KT_DAEMON;
_soundName = "301a01";
_val16 = 72;
break;
@@ -233,7 +544,7 @@ void Room301::daemon() {
if (_val12) {
_val14 = 5;
_soundName = (_val12 == 1) ? "301a03" : "301a04";
- _val7 = 2;
+ _val7 = KT_DAEMON;
_val16 = 71;
} else if (!player_been_here(401) && _G(globals)[V092] &&
!_G(globals)[V093]) {
@@ -562,8 +873,8 @@ void Room301::parser() {
case 3:
sendWSMessage_140000(-1);
_val14 = 5;
- _val6 = 1;
- _val7 = 1;
+ _val6 = KT_PARSE;
+ _val7 = KT_PARSE;
_val16 = 4;
_soundName = "301a02";
break;
diff --git a/engines/m4/riddle/rooms/section3/room301.h b/engines/m4/riddle/rooms/section3/room301.h
index 01bd4839191..5b6b9d06975 100644
--- a/engines/m4/riddle/rooms/section3/room301.h
+++ b/engines/m4/riddle/rooms/section3/room301.h
@@ -35,8 +35,8 @@ private:
const char *_soundName = nullptr;
const char *_nextSound = nullptr;
int _val5 = -1;
- int _val6 = 2;
- int _val7 = 2;
+ KernelTriggerType _val6 = KT_DAEMON;
+ KernelTriggerType _val7 = KT_DAEMON;
int _val8 = 0;
int _val9 = 0;
int _val10 = 0;
diff --git a/engines/m4/wscript/ws_machine.cpp b/engines/m4/wscript/ws_machine.cpp
index ef56e583385..36b4efe397d 100644
--- a/engines/m4/wscript/ws_machine.cpp
+++ b/engines/m4/wscript/ws_machine.cpp
@@ -1049,6 +1049,11 @@ machine *TriggerMachineByHash(int32 myHash, Anim8 *parentAnim8, int32 dataHash,
return m;
}
+machine *TriggerMachineByHash(MessageCB intrMsg, const char *machName) {
+ return TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+ intrMsg, machName);
+}
+
machine *TriggerMachineByHash(int32 val1, int32 val2, int32 val3, int32 val4, int32 val5, int32 val6,
int32 val7, int32 val8, int32 val9, int32 val10, bool flag,
MessageCB intrMsg, const char *machName) {
diff --git a/engines/m4/wscript/ws_machine.h b/engines/m4/wscript/ws_machine.h
index fa3af060785..ccce4ca72ac 100644
--- a/engines/m4/wscript/ws_machine.h
+++ b/engines/m4/wscript/ws_machine.h
@@ -202,6 +202,7 @@ machine *TriggerMachineByHash(int32 myHash, Anim8 *parentAnim8, int32 dataHash,
machine *TriggerMachineByHash(int32 val1, int32 val2, int32 val3, int32 val4, int32 val5, int32 val6,
int32 val7, int32 val8, int32 val9, int32 val10, bool flag,
MessageCB intrMsg, const char *machName);
+machine *TriggerMachineByHash(MessageCB intrMsg, const char *machName);
/**
* This proc is what allows a machine to send a message to another machine(s)
More information about the Scummvm-git-logs
mailing list