From 8bc602012e1c6e0c5ca0ae045b299a6a0a79d5be Mon Sep 17 00:00:00 2001 From: James Osborne Date: Tue, 5 May 2026 16:52:25 -0400 Subject: [PATCH] Allow DC V2 Falz death-drop pickup recovery --- src/ReceiveSubcommands.cc | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/ReceiveSubcommands.cc b/src/ReceiveSubcommands.cc index 0b90b23e..698e9f82 100644 --- a/src/ReceiveSubcommands.cc +++ b/src/ReceiveSubcommands.cc @@ -2487,10 +2487,25 @@ static asio::awaitable on_pick_up_item_generic( // TODO: Figure out what the actual max range is; 30 is an overestimate double dist2 = fi->pos.dist2(c->pos); if (dist2 > 900.0) { - l->log.warning_f("Player {} requests to pick up {:08X}, but it is too far away (dist2={})", - client_id, item_id, dist2); - l->add_item(floor, fi); - co_return; + const bool allow_dcv2_falz_pickup_distance_recovery = + is_request && + (c->version() == Version::DC_V2) && + (l->episode == Episode::EP1) && + (floor == 0x0E) && + (fi->from_obj == nullptr) && + (fi->from_ene == nullptr) && + fi->visible_to_client(c->lobby_client_id); + + if (allow_dcv2_falz_pickup_distance_recovery) { + l->log.warning_f( + "DC V2 Falz floor item pickup distance recovery: Player {} picking up {:08X}; dist2={} item_floor={} player_floor={}", + client_id, item_id, dist2, static_cast(floor), static_cast(c->floor)); + } else { + l->log.warning_f("Player {} requests to pick up {:08X}, but it is too far away (dist2={})", + client_id, item_id, dist2); + l->add_item(floor, fi); + co_return; + } } try {