[Scummvm-git-logs] scummvm master -> f810241fa1280a69f448a1864375777b4cf47780
dreammaster
noreply at scummvm.org
Sun Aug 4 04:42:58 UTC 2024
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
eca0152fd4 M4: RIDDLE: Added room 305 init
f5f5e04549 M4: RIDDLE: Room 305 pre-parser
514801c262 M4: RIDDLE: Added room 305 conv305a
f810241fa1 M4: RIDDLE: Starting room 305 parser, added camera_shift_xy
Commit: eca0152fd48d8d1b0fff3d0adc36eb133fd5c881
https://github.com/scummvm/scummvm/commit/eca0152fd48d8d1b0fff3d0adc36eb133fd5c881
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-03T20:13:12-07:00
Commit Message:
M4: RIDDLE: Added room 305 init
Changed paths:
engines/m4/riddle/flags.h
engines/m4/riddle/rooms/section3/room305.cpp
engines/m4/riddle/rooms/section3/room305.h
diff --git a/engines/m4/riddle/flags.h b/engines/m4/riddle/flags.h
index c5827542a9e..98bcdc67668 100644
--- a/engines/m4/riddle/flags.h
+++ b/engines/m4/riddle/flags.h
@@ -108,8 +108,8 @@ enum {
V073 = 73,
V074 = 74,
V075 = 75,
- V076 = 76,
- V077 = 77,
+ kChinshiCartoon = 76,
+ kTabletsCartoon = 77,
V078 = 78,
V079 = 79,
V080 = 80,
@@ -163,17 +163,17 @@ enum {
V127 = 127,
V128 = 128,
V129 = 129,
- V130 = 130,
+ kCastleCartoon = 130,
V131 = 131,
V132 = 132,
V133 = 133,
V134 = 134,
V135 = 135,
- V136 = 136,
- V137 = 137,
- V138 = 138,
+ kEmeraldCartoon = 136,
+ kEpitaphCartoon = 137,
+ kGraveyardCartoon = 138,
V139 = 139,
- V140 = 140,
+ kMocaMocheCartoon = 140,
V141 = 141,
V142 = 142,
V143 = 143,
@@ -213,7 +213,7 @@ enum {
V177 = 177,
V178 = 178,
V179 = 179,
- V180 = 180,
+ kEasterIslandCartoon = 180,
V181 = 181,
V182 = 182,
V183 = 183,
@@ -249,7 +249,7 @@ enum {
V212 = 212,
V213 = 213,
V214 = 214,
- V215 = 215,
+ kTempleCartoon = 215,
V216 = 216,
V217 = 217,
V218 = 218,
diff --git a/engines/m4/riddle/rooms/section3/room305.cpp b/engines/m4/riddle/rooms/section3/room305.cpp
index 519835c7baf..38ef3a181b4 100644
--- a/engines/m4/riddle/rooms/section3/room305.cpp
+++ b/engines/m4/riddle/rooms/section3/room305.cpp
@@ -22,17 +22,255 @@
#include "m4/riddle/rooms/section3/room305.h"
#include "m4/graphics/gr_series.h"
#include "m4/riddle/vars.h"
+#include "m4/gui/gui_vmng.h"
namespace M4 {
namespace Riddle {
namespace Rooms {
+void Room305::preload() {
+ if (_G(flags)[V000]) {
+ _G(art_base_override) = "CARTOON ROOM-TREK";
+ _G(use_alternate_attribute_file) = false;
+ _G(player).walker_type = 1;
+ _G(player).shadow_type = 1;
+ } else {
+ _G(player).walker_type = 0;
+ _G(player).shadow_type = 0;
+ }
+
+ LoadWSAssets("other script");
+}
+
void Room305::init() {
+ hotspot_set_active("TURTLE TREATS", false);
+ digi_preload("305_s01");
+ digi_preload("305_s02");
+
+ if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
+ _val1 = -1;
+ _triggerMode1 = KT_DAEMON;
+ _triggerMode2 = KT_DAEMON;
+ _val2 = 0;
+ _val3 = 0;
+ _val4 = 0;
+ }
+
+ _val5 = 0;
+ _ripMedHigh = series_load("RIP MED HIGH REACHER POS2");
+ _ripLooksDown = series_load("RIP LOOKS DOWN POS1");
+
+ if (inv_object_is_here("TURTLE"))
+ _turtle = series_show_sprite("395turtl", 0, 0xf00);
+ else
+ hotspot_set_active("TURTLE", false);
+
+ setupSign();
+
+ _shrunkenHead1 = series_load("DISPLAY CASE SHRUNKEN HEAD");
+ _incenseHolder1 = series_load("DISPLAY CASE INCENSE HOLDER");
+ _crystalSkull1 = series_load("DISPLAY CASE CRYSTAL SKULL");
+ _whaleboneHorn1 = series_load("DISPLAY CASE WHALE BONE HORN");
+ _wheeledToy1 = series_load("DISPLAY CASE WHEELED TOY");
+ _butterfly1 = series_load("DISPLAY CASE BUTTERFLY");
+ _amulet1 = series_load("DISPLAY CASE AMULET");
+ _knife1 = series_load("DISPLAY CASE YETI HANDLED KNIFE");
+ _banknote1 = series_load("DISPLAY CASE GERMAN BANKNOTE");
+ _stamp1 = series_load("DISPLAY CASE CHEAPEST STAMP");
+ _map1 = series_load("DISPLAY CASE QUARRY STICK MAP");
+ _emerald1 = series_load("DISPLAY CASE EMERALD");
+
+ if (_G(flags)[kEasterIslandCartoon]) {
+ _easterIslandCartoon = series_load("SMALL EASTER ISLAND CARTOON");
+ series_show_sprite("SMALL EASTER ISLAND CARTOON", 0, 0xfff);
+ }
+ if (_G(flags)[kChinshiCartoon]) {
+ _chinshiCartoon = series_load("SMALL CHINSHI CARTOON");
+ series_show_sprite("SMALL CHINSHI CARTOON", 0, 0xfff);
+ }
+ if (_G(flags)[kTabletsCartoon]) {
+ _tabletsCartoon = series_load("SMALL TABLETS CARTOON");
+ series_show_sprite("SMALL TABLETS CARTOON", 0, 0xfff);
+ }
+ if (_G(flags)[kEpitaphCartoon]) {
+ _epitaphCartoon = series_load("SMALL EPITAPH CARTOON");
+ series_show_sprite("SMALL EPITAPH CARTOON", 0, 0xfff);
+ }
+ if (_G(flags)[kGraveyardCartoon]) {
+ _graveyardCartoon = series_load("SMALL GRAVEYARD CARTOON");
+ series_show_sprite("SMALL GRAVEYARD CARTOON", 0, 0xfff);
+ }
+ if (_G(flags)[kCastleCartoon]) {
+ _castleCartoon = series_load("SMALL CASTLE CARTOON");
+ series_show_sprite("SMALL CASTLE CARTOON", 0, 0xfff);
+ }
+ if (_G(flags)[kMocaMocheCartoon]) {
+ _mocaMocheCartoon = series_load("SMALL MOCA MOCHE CARTOON");
+ series_show_sprite("SMALL MOCA MOCHE CARTOON", 0, 0xfff);
+ }
+ if (_G(flags)[kTempleCartoon]) {
+ _templeCartoon = series_load("SMALL TEMPLE CARTOON");
+ series_show_sprite("SMALL TEMPLE CARTOON", 0, 0xfff);
+ }
+ if (_G(flags)[kEmeraldCartoon]) {
+ _emeraldCartoon = series_load("SMALL EMERALD CARTOON");
+ series_show_sprite("SMALL EMERALD CARTOON", 0, 0xfff);
+ }
+
+ #define ITEM(FIELD, NAME, SPR_NAME) \
+ if (inv_object_is_here(NAME)) \
+ FIELD = series_show_sprite(SPR_NAME, 0, 0xfff); \
+ else \
+ hotspot_set_active(NAME, false)
+
+ ITEM(_shrunkenHead2, "SHRUNKEN HEAD", "DISPLAY CASE SHRUNKEN HEAD");
+ ITEM(_incenseHolder2, "INCENSE BURNER", "DISPLAY CASE INCENSE HOLDER");
+ ITEM(_crystalSkull2, "CRYSTAL SKULL", "DISPLAY CASE CRYSTAL SKULL");
+ ITEM(_whaleboneHorn2, "WHALE BONE HORN", "DISPLAY CASE WHALE BONE HORN");
+ ITEM(_wheeledToy2, "WHEELED TOY", "DISPLAY CASE WHEELED TOY");
+ ITEM(_butterfly2, "SILVER BUTTERFLY", "DISPLAY CASE BUTTERFLY");
+ ITEM(_amulet2, "REBUS AMULET", "DISPLAY CASE AMULET");
+ ITEM(_knife2, "CHISEL", "DISPLAY CASE YETI HANDLED KNIFE");
+ ITEM(_banknote2, "GERMAN BANKNOTE", "DISPLAY CASE GERMAN BANKNOTE");
+ ITEM(_stamp2, "POSTAGE STAMP", "DISPLAY CASE CHEAPEST STAMP");
+ ITEM(_map2, "STICK AND SHELL MAP", "DISPLAY CASE QUARRY STICK MAP");
+ ITEM(_emerald2, "ROMANOV EMERALD", "DISPLAY CASE EMERALD");
+
+ series_play(_G(flags)[V000] == 1 ? "395 jelly beans" : "jelly beans",
+ 0, 0, 3, 7, 0, 100, 0, 0, 49, 61);
+ _jellyBeans = series_load("FLTD35");
+
+ if (_G(flags)[V000] == 1) {
+ if (player_been_here(201)) {
+ _feng1 = series_load("feng trek hands clasped pos5");
+ _feng2 = series_load("feng trek bow pos5");
+ _feng3 = series_load("feng trek flame loop pos5");
+ }
+
+ _rip1 = series_load("RIP TREK HANDS HIPS POS2");
+ _rip2 = series_load("RIP TREK HAND ON CHIN POS2");
+ _rip3 = series_load("RIP TREK TWO HAND TALK POS2");
+ } else {
+ _suit1 = series_load("SUIT CHIN IN HAND POS2");
+ _suit2 = series_load("RIP SUIT RT HAND GEST TALK POS2");
+ _suit3 = series_load("RIP HNDS HIPS GEST TALK");
+ }
+
+ int32 status;
+ ScreenContext *game_buff_ptr = vmng_screen_find(_G(gameDrawBuff), &status);
+
+ switch (_G(game).previous_room) {
+ case KERNEL_RESTORING_GAME:
+ if (player_been_here(201)) {
+ _stander = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 494, 278, 73, 0xf00, 1,
+ triggerMachineByHashCallbackNegative, "fl stander");
+ sendWSMessage_10000(1, _stander, _feng3, 1, 1, 400, _feng3, 1, 6, 0);
+ _val6 = _val7 = 1;
+ setShadow5(true);
+ } else {
+ hotspot_set_active("FENG LI", false);
+ }
+
+ if (_val4) {
+ ws_demand_facing(11);
+ player_update_info();
+
+ if (_G(flags)[V000]) {
+ _rip4 = series_load("RIP TREK MED REACH HAND POS1");
+ setGlobals1(_rip4, 5, 5, 5, 5, 0, 5, 1, 1, 1);
+ sendWSMessage_110000(1);
+ } else {
+ ws_hide_walker();
+ _rip4 = series_load("SUIT RIP REACHES FOR DRAWER");
+ _rip5 = series_show("ripsh1", 0xf00, 0, -1, -1, 0,
+ _G(player_info).scale, _G(player_info).x, _G(player_info).y);
+ _rip6 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0xf00, false,
+ triggerMachineByHashCallbackNegative, "rip reach");
+ sendWSMessage_10000(1, _rip6, _rip4, 5, 5, -1, _rip4, 5, 5, 0);
+ }
+
+ hotspot_hide_all();
+ mouse_set_sprite(0);
+ hotspot_add_dynamic("LOOK AT", " ", 0, 0, 1500, 480, 0);
+
+ if (inv_object_is_here("TURTLE TREATS")) {
+ hotspot_add_dynamic("LOOK AT", "TURTLE TREATS", 1105, 208, 1175, 266, 6);
+ hotspot_add_dynamic("LOOK AT", "TURTLE TREATS", 1052, 230, 1147, 296, 6);
+ }
+
+ _openDrawer = series_show_sprite("open drawer", 0, 0);
+
+ if (inv_object_is_here("TURTLE TREATS"))
+ _openDrawerTreats = series_show_sprite("open drawer with treats", 0, 0);
+ }
+ break;
+
+ case 303:
+ player_set_commands_allowed(false);
+
+ if (player_been_here(301)) {
+ ws_demand_location(1320, 296, 9);
+
+ if (player_been_here(201)) {
+ _stander = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 494, 278, 73, 0xf00, true,
+ triggerMachineByHashCallbackNegative, "fl stander");
+ _G(kernel).trigger_mode = KT_DAEMON;
+ sendWSMessage_10000(1, _stander, _feng3, 1, 1, 400, _feng3, 1, 6, 0);
+ _val6 = _val7 = 1;
+ setShadow5(true);
+ } else {
+ hotspot_set_active("FENG LI", false);
+ }
+
+ MoveScreenDelta(game_buff_ptr, -640, 0);
+ kernel_timing_trigger(1, 10);
+ } else {
+ ws_demand_location(1320, 296, 9);
+ hotspot_set_active("FENG LI", false);
+ kernel_timing_trigger(1, 10);
+ MoveScreenDelta(game_buff_ptr, -640, 0);
+
+ }
+ break;
+
+ default:
+ ws_demand_location(1180, 320, 9);
+ hotspot_set_active("FENG LI", false);
+ break;
+ }
+
+ digi_play("305_s01", 3, 140);
}
void Room305::daemon() {
}
+void Room305::setupSign() {
+ if (!inv_object_is_here("SHRUNKEN HEAD")
+ && !inv_object_is_here("INCENSE BURNER")
+ && !inv_object_is_here("CRYSTAL SKULL")
+ && !inv_object_is_here("WHALE BONE HORN")
+ && !inv_object_is_here("WHEELED TOY")
+ && !inv_object_is_here("SILVER BUTTERFLY")
+ && !inv_object_is_here("REBUS AMULET")
+ && !inv_object_is_here("CHISEL")
+ && !inv_object_is_here("ROMANOV EMERALD")
+ && !inv_object_is_here("GERMAN BANKNOTE")
+ && !inv_object_is_here("POSTAGE STAMP")
+ && !inv_object_is_here("STICK AND SHELL MAP")
+ && !inv_object_is_here("305 NEW EXHIBIT SIGN")) {
+ series_load("305 NEW EXHIBIT SIGN");
+ series_show_sprite("305 NEW EXHIBIT SIGN", 0, 0xfff);
+ }
+}
+
+void Room305::setShadow5(bool active) {
+ if (active)
+ _shadow5 = series_place_sprite("candleman shadow5", 0, 494, 278, -84, 0xe06);
+ else
+ terminateMachineAndNull(_shadow5);
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section3/room305.h b/engines/m4/riddle/rooms/section3/room305.h
index 2e9de70afe8..ed9e9fbcd32 100644
--- a/engines/m4/riddle/rooms/section3/room305.h
+++ b/engines/m4/riddle/rooms/section3/room305.h
@@ -29,10 +29,78 @@ namespace Riddle {
namespace Rooms {
class Room305 : public Room {
+private:
+ int _val1 = 0;
+ int _val2 = 0;
+ int _val3 = 0;
+ int _val4 = 0;
+ int _val5 = 0;
+ int _val6 = 0;
+ int _val7 = 0;
+ KernelTriggerType _triggerMode1 = KT_DAEMON;
+ KernelTriggerType _triggerMode2 = KT_DAEMON;
+ int _ripMedHigh = 0;
+ int _ripLooksDown = 0;
+ machine *_turtle = nullptr;
+ int _shrunkenHead1 = 0;
+ int _incenseHolder1 = 0;
+ int _crystalSkull1 = 0;
+ int _whaleboneHorn1 = 0;
+ int _wheeledToy1 = 0;
+ int _butterfly1 = 0;
+ int _amulet1 = 0;
+ int _knife1 = 0;
+ int _banknote1 = 0;
+ int _stamp1 = 0;
+ int _map1 = 0;
+ int _emerald1 = 0;
+ machine *_shrunkenHead2 = nullptr;
+ machine *_incenseHolder2 = nullptr;
+ machine *_crystalSkull2 = nullptr;
+ machine *_whaleboneHorn2 = nullptr;
+ machine *_wheeledToy2 = nullptr;
+ machine *_butterfly2 = nullptr;
+ machine *_amulet2 = nullptr;
+ machine *_knife2 = nullptr;
+ machine *_banknote2 = nullptr;
+ machine *_stamp2 = nullptr;
+ machine *_map2 = nullptr;
+ machine *_emerald2 = nullptr;
+
+ int _easterIslandCartoon = 0;
+ int _chinshiCartoon = 0;
+ int _tabletsCartoon = 0;
+ int _epitaphCartoon = 0;
+ int _graveyardCartoon = 0;
+ int _castleCartoon = 0;
+ int _mocaMocheCartoon = 0;
+ int _templeCartoon = 0;
+ int _emeraldCartoon = 0;
+ int _jellyBeans = 0;
+ int _feng1 = 0;
+ int _feng2 = 0;
+ int _feng3 = 0;
+ int _rip1 = 0;
+ int _rip2 = 0;
+ int _rip3 = 0;
+ int _rip4 = 0;
+ int _suit1 = 0;
+ int _suit2 = 0;
+ int _suit3 = 0;
+ machine *_stander = nullptr;
+ machine *_shadow5 = nullptr;
+ machine *_rip5 = nullptr;
+ machine *_rip6 = nullptr;
+ machine *_openDrawer = nullptr;
+ machine *_openDrawerTreats = nullptr;
+ void setupSign();
+ void setShadow5(bool active);
+
public:
Room305() : Room() {}
~Room305() override {}
+ void preload() override;
void init() override;
void daemon() override;
};
Commit: f5f5e04549ed8705592a34b2550920d910fac412
https://github.com/scummvm/scummvm/commit/f5f5e04549ed8705592a34b2550920d910fac412
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-03T20:13:12-07:00
Commit Message:
M4: RIDDLE: Room 305 pre-parser
Changed paths:
engines/m4/riddle/rooms/section3/room304.cpp
engines/m4/riddle/rooms/section3/room305.cpp
engines/m4/riddle/rooms/section3/room305.h
diff --git a/engines/m4/riddle/rooms/section3/room304.cpp b/engines/m4/riddle/rooms/section3/room304.cpp
index aea8bcf1741..ef0a8099d8d 100644
--- a/engines/m4/riddle/rooms/section3/room304.cpp
+++ b/engines/m4/riddle/rooms/section3/room304.cpp
@@ -392,6 +392,8 @@ void Room304::parser() {
} else {
return;
}
+
+ _G(player).command_ready = false;
}
void Room304::intrMsg(frac16 myMessage, struct machine *sender) {
diff --git a/engines/m4/riddle/rooms/section3/room305.cpp b/engines/m4/riddle/rooms/section3/room305.cpp
index 38ef3a181b4..d24e373df32 100644
--- a/engines/m4/riddle/rooms/section3/room305.cpp
+++ b/engines/m4/riddle/rooms/section3/room305.cpp
@@ -245,6 +245,53 @@ void Room305::init() {
void Room305::daemon() {
}
+void Room305::pre_parser() {
+ bool lookFlag = player_said_any("look", "look at");
+ bool takeFlag = player_said("take");
+
+ if (_val4 && !(takeFlag && player_said("turtle treats"))
+ && !(lookFlag && player_said("turtle treats"))) {
+ player_set_commands_allowed(false);
+ Common::strcpy_s(_G(player).verb, "close");
+ Common::strcpy_s(_G(player).noun, "drawer");
+ _G(player).need_to_walk = false;
+ _G(player).ready_to_walk = true;
+ _G(player).waiting_for_walk = false;
+ }
+
+#define SAID(NAME) (player_said(NAME) && inv_player_has(NAME))
+ if (SAID("SHRUNKEN HEAD") || SAID("INCENSE BURNER") ||
+ SAID("CRYSTAL SKULL") || SAID("CRYSTAL SKULL)") ||
+ SAID("WHALE BONE HORN") || SAID("WHEELED TOY") ||
+ SAID("CHISEL") || SAID("ROMANOV EMERALD") ||
+ SAID("GERMAN BANKNOTE") || SAID("REBUS AMULET") ||
+ SAID("SILVER BUTTERFLY") || SAID("POSTAGE STAMP") ||
+ SAID("STICK AND SHELL MAP")) {
+ if (player_said("DISPLAY CASE")) {
+ _G(player).need_to_walk = false;
+ _G(player).ready_to_walk = true;
+ _G(player).waiting_for_walk = false;
+ }
+ }
+
+ if (lookFlag && player_said("cartoon"))
+ _G(camera_reacts_to_player) = false;
+
+ if (_val5) {
+ _G(camera_reacts_to_player) = true;
+ terminateMachineAndNull(_machine1);
+ terminateMachineAndNull(_machine2);
+ intr_cancel_sentence();
+ _val5 = 0;
+ hotspot_restore_all();
+ interface_show();
+ }
+}
+
+void Room305::parser() {
+
+}
+
void Room305::setupSign() {
if (!inv_object_is_here("SHRUNKEN HEAD")
&& !inv_object_is_here("INCENSE BURNER")
diff --git a/engines/m4/riddle/rooms/section3/room305.h b/engines/m4/riddle/rooms/section3/room305.h
index ed9e9fbcd32..ce9ebd3f752 100644
--- a/engines/m4/riddle/rooms/section3/room305.h
+++ b/engines/m4/riddle/rooms/section3/room305.h
@@ -93,6 +93,9 @@ private:
machine *_rip6 = nullptr;
machine *_openDrawer = nullptr;
machine *_openDrawerTreats = nullptr;
+ machine *_machine1 = nullptr;
+ machine *_machine2 = nullptr;
+
void setupSign();
void setShadow5(bool active);
@@ -103,6 +106,8 @@ public:
void preload() override;
void init() override;
void daemon() override;
+ void pre_parser() override;
+ void parser() override;
};
} // namespace Rooms
Commit: 514801c2624ae979041cfc6919633bcc8f7b41ee
https://github.com/scummvm/scummvm/commit/514801c2624ae979041cfc6919633bcc8f7b41ee
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-03T20:29:38-07:00
Commit Message:
M4: RIDDLE: Added room 305 conv305a
Changed paths:
engines/m4/riddle/rooms/section3/room305.cpp
engines/m4/riddle/rooms/section3/room305.h
diff --git a/engines/m4/riddle/rooms/section3/room305.cpp b/engines/m4/riddle/rooms/section3/room305.cpp
index d24e373df32..4bf8d4569ce 100644
--- a/engines/m4/riddle/rooms/section3/room305.cpp
+++ b/engines/m4/riddle/rooms/section3/room305.cpp
@@ -289,7 +289,19 @@ void Room305::pre_parser() {
}
void Room305::parser() {
+ bool lookFlag = player_said_any("look", "look at");
+ bool takeFlag = player_said("take");
+ bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
+
+ if (player_said("conv305a")) {
+ conv305a();
+ }
+ // TODO
+ else {
+ return;
+ }
+ _G(player).command_ready = false;
}
void Room305::setupSign() {
@@ -318,6 +330,50 @@ void Room305::setShadow5(bool active) {
terminateMachineAndNull(_shadow5);
}
+void Room305::conv305a() {
+ 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) {
+ _val7 = 1;
+ } else if (_G(kernel).trigger == 1) {
+ if (node != 1 || (entry != 0 && entry != 3 && entry != 5
+ && entry != 6 && entry != 7))
+ _conv1 = 0;
+ }
+
+ conv_resume();
+
+ } else if (!sound) {
+ conv_resume();
+
+ } else {
+ if (who <= 0) {
+ _val7 = 2;
+ } else if (who == 1) {
+ if ((node == 1 && entry == 0) || (node == 1 && entry == 6) ||
+ (node == 1 && entry == 7)) {
+ _conv1 = 5;
+ } else if (node == 1 && (entry == 3 || entry == 5)) {
+ _conv1 = 3;
+ } else if ((node == 7 && entry == 0) || (node == 8 && entry == 0) ||
+ (node == 9 && entry == 0) || (node == 10 && entry == 0) ||
+ (node == 12 && entry == 0)) {
+ _conv1 = 0;
+ } else if (node == 1 && entry == 1) {
+ _G(flags)[V089] = 2;
+ } else {
+ _conv1 = 1;
+ }
+ }
+
+ digi_play(sound, 1, 255, 1);
+ }
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section3/room305.h b/engines/m4/riddle/rooms/section3/room305.h
index ce9ebd3f752..0c3c7428b70 100644
--- a/engines/m4/riddle/rooms/section3/room305.h
+++ b/engines/m4/riddle/rooms/section3/room305.h
@@ -87,6 +87,7 @@ private:
int _suit1 = 0;
int _suit2 = 0;
int _suit3 = 0;
+ int _conv1 = 0;
machine *_stander = nullptr;
machine *_shadow5 = nullptr;
machine *_rip5 = nullptr;
@@ -98,6 +99,7 @@ private:
void setupSign();
void setShadow5(bool active);
+ void conv305a();
public:
Room305() : Room() {}
Commit: f810241fa1280a69f448a1864375777b4cf47780
https://github.com/scummvm/scummvm/commit/f810241fa1280a69f448a1864375777b4cf47780
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-03T21:37:09-07:00
Commit Message:
M4: RIDDLE: Starting room 305 parser, added camera_shift_xy
Changed paths:
engines/m4/adv_r/adv_control.cpp
engines/m4/adv_r/adv_control.h
engines/m4/core/rooms.cpp
engines/m4/core/rooms.h
engines/m4/riddle/rooms/room.cpp
engines/m4/riddle/rooms/room.h
engines/m4/riddle/rooms/section3/room305.cpp
engines/m4/riddle/rooms/section3/room305.h
diff --git a/engines/m4/adv_r/adv_control.cpp b/engines/m4/adv_r/adv_control.cpp
index c835ab782ec..f1e7e5835e2 100644
--- a/engines/m4/adv_r/adv_control.cpp
+++ b/engines/m4/adv_r/adv_control.cpp
@@ -28,6 +28,7 @@
#include "m4/mem/memman.h"
#include "m4/wscript/ws_machine.h"
#include "m4/vars.h"
+#include "m4/m4.h"
namespace M4 {
diff --git a/engines/m4/adv_r/adv_control.h b/engines/m4/adv_r/adv_control.h
index a2beb04b15e..570dd628e00 100644
--- a/engines/m4/adv_r/adv_control.h
+++ b/engines/m4/adv_r/adv_control.h
@@ -28,13 +28,13 @@
namespace M4 {
-bool kernel_section_startup();
-void player_set_commands_allowed(bool t_or_f);
-void game_pause(bool flag);
-bool this_is_a_walkcode(int32 x, int32 y);
-int32 get_screen_depth(int32 x, int32 y);
-int32 get_screen_color(int32 x, int32 y);
-void update_mouse_pos_dialog();
+extern bool kernel_section_startup();
+extern void player_set_commands_allowed(bool t_or_f);
+extern void game_pause(bool flag);
+extern bool this_is_a_walkcode(int32 x, int32 y);
+extern int32 get_screen_depth(int32 x, int32 y);
+extern int32 get_screen_color(int32 x, int32 y);
+extern void update_mouse_pos_dialog();
} // End of namespace M4
diff --git a/engines/m4/core/rooms.cpp b/engines/m4/core/rooms.cpp
index 0b58db3a8e5..65b8a58007e 100644
--- a/engines/m4/core/rooms.cpp
+++ b/engines/m4/core/rooms.cpp
@@ -444,6 +444,15 @@ void Sections::pal_game_task() {
update_mouse_pos_dialog();
}
+void Sections::camera_shift_xy(int32 x, int32 y) {
+ int32 status;
+ ScreenContext *sc = vmng_screen_find(_G(gameDrawBuff), &status);
+ assert(sc);
+
+ _cameraShiftAmount = -sc->x1 - x + _G(kernel).letter_box_x;
+ _cameraShift_vert_Amount = -sc->y1 - y + _G(kernel).letter_box_y;
+}
+
/*------------------------------------------------------------------------*/
Room *Section::operator[](uint roomNum) {
diff --git a/engines/m4/core/rooms.h b/engines/m4/core/rooms.h
index 7922ac3e851..6e70cbec572 100644
--- a/engines/m4/core/rooms.h
+++ b/engines/m4/core/rooms.h
@@ -158,6 +158,7 @@ public:
void m4EndScene();
void pal_game_task();
+ void camera_shift_xy(int32 x, int32 y);
virtual void global_daemon() = 0;
virtual void global_pre_parser() = 0;
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 1a710e6dfbe..6b5f85fd033 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -369,6 +369,23 @@ void Room::sendWSMessage_1a0000(machine *recv, int trigger) {
sendWSMessage(0x1a0000, 0, recv, 0, nullptr, 1);
}
+int Room::getNumKeyItemsPlaced() const {
+ static const char *const ITEMS[11] = {
+ "SHRUNKEN HEAD", "INCENSE BURNER", "CRYSTAL SKULL",
+ "WHALE BONE HORN", "WHEELED TOY", "SILVER BUTTERFLY",
+ "REBUS AMULET", "CHISEL", "GERMAN BANKNOTE",
+ "POSTAGE STAMP", "STICK AND SHELL MAP"
+ };
+
+ int total = 0;
+ for (int i = 0; i < 11; ++i) {
+ if (inv_object_in_scene(ITEMS[i], 305))
+ ++total;
+ }
+
+ return total;
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 3ce83c8f316..4926f29af63 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -94,6 +94,11 @@ protected:
void sendWSMessage_190000(machine *recv, int trigger);
void sendWSMessage_1a0000(machine *recv, int trigger);
+ /**
+ * Get the number of key items placed in room 305 (display room)
+ */
+ int getNumKeyItemsPlaced() const;
+
public:
Room() : M4::Room() {}
~Room() override {}
diff --git a/engines/m4/riddle/rooms/section3/room305.cpp b/engines/m4/riddle/rooms/section3/room305.cpp
index 4bf8d4569ce..6a93692851f 100644
--- a/engines/m4/riddle/rooms/section3/room305.cpp
+++ b/engines/m4/riddle/rooms/section3/room305.cpp
@@ -21,6 +21,7 @@
#include "m4/riddle/rooms/section3/room305.h"
#include "m4/graphics/gr_series.h"
+#include "m4/riddle/riddle.h"
#include "m4/riddle/vars.h"
#include "m4/gui/gui_vmng.h"
@@ -135,6 +136,7 @@ void Room305::init() {
ITEM(_stamp2, "POSTAGE STAMP", "DISPLAY CASE CHEAPEST STAMP");
ITEM(_map2, "STICK AND SHELL MAP", "DISPLAY CASE QUARRY STICK MAP");
ITEM(_emerald2, "ROMANOV EMERALD", "DISPLAY CASE EMERALD");
+ #undef ITEM
series_play(_G(flags)[V000] == 1 ? "395 jelly beans" : "jelly beans",
0, 0, 3, 7, 0, 100, 0, 0, 49, 61);
@@ -259,7 +261,7 @@ void Room305::pre_parser() {
_G(player).waiting_for_walk = false;
}
-#define SAID(NAME) (player_said(NAME) && inv_player_has(NAME))
+ #define SAID(NAME) (player_said(NAME) && inv_player_has(NAME))
if (SAID("SHRUNKEN HEAD") || SAID("INCENSE BURNER") ||
SAID("CRYSTAL SKULL") || SAID("CRYSTAL SKULL)") ||
SAID("WHALE BONE HORN") || SAID("WHEELED TOY") ||
@@ -273,6 +275,7 @@ void Room305::pre_parser() {
_G(player).waiting_for_walk = false;
}
}
+ #undef SAID
if (lookFlag && player_said("cartoon"))
_G(camera_reacts_to_player) = false;
@@ -295,6 +298,49 @@ void Room305::parser() {
if (player_said("conv305a")) {
conv305a();
+ } else if (player_said("TALK FL")) {
+ g_engine->camera_shift_xy(160, 0);
+ player_update_info();
+ ws_hide_walker();
+
+ _rip6 = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+ _G(player_info).x, _G(player_info).y, _G(player_info).scale + 1,
+ 0x500, 0, triggerMachineByHashCallbackNegative, "rip");
+ _G(kernel).trigger_mode = KT_DAEMON;
+ sendWSMessage_10000(1, _rip6, 1, 1, 1,
+ _G(flags)[V000] == 1 ? 200 : 300,
+ 1, 1, 1, 0);
+
+ _val8 = 0;
+ _conv1 = 0;
+ _G(kernel).trigger_mode = KT_PARSE;
+ player_set_commands_allowed(false);
+
+ _rip5 = series_show("safari shadow 2", 0xf00, 0, -1, -1, 0,
+ _G(player_info).scale, _G(player_info).x, _G(player_info).y);
+ conv_load("conv305a", 10, 10, 747);
+ conv_export_value_curr(_G(flags)[V088], 0);
+ conv_export_value_curr(_G(flags)[V089], 1);
+ conv_export_value_curr(
+ getNumKeyItemsPlaced() != 0 || inv_object_is_here("ROMANOV EMERALD") ? 1 : 0,
+ 2);
+ conv_export_value_curr(inv_object_in_scene("TURTLE", 305) ? 1 : 0, 3);
+
+ if (_G(flags)[V090] == 0 || inv_player_has("ROMANOV EMERALD") ||
+ inv_object_is_here("ROMANOV EMERALD")) {
+ conv_export_value_curr(0, 7);
+ } else if (_G(flags)[V090] == 1) {
+ conv_export_value_curr(1, 7);
+ } else if (_G(flags)[V090] == 2) {
+ conv_export_value_curr(2, 7);
+ } else if (_G(flags)[V090] == 3) {
+ conv_export_value_curr(2, 7);
+ }
+
+ conv_export_value_curr(_G(flags)[V141], 8);
+ conv_play();
+ _val7 = 1;
+ _conv1 = 0;
}
// TODO
else {
diff --git a/engines/m4/riddle/rooms/section3/room305.h b/engines/m4/riddle/rooms/section3/room305.h
index 0c3c7428b70..b48420ea741 100644
--- a/engines/m4/riddle/rooms/section3/room305.h
+++ b/engines/m4/riddle/rooms/section3/room305.h
@@ -37,6 +37,7 @@ private:
int _val5 = 0;
int _val6 = 0;
int _val7 = 0;
+ int _val8 = 0;
KernelTriggerType _triggerMode1 = KT_DAEMON;
KernelTriggerType _triggerMode2 = KT_DAEMON;
int _ripMedHigh = 0;
More information about the Scummvm-git-logs
mailing list