From e0c34fe7001fd7d58b098c986e55e3fa40d0cceb Mon Sep 17 00:00:00 2001 From: James Osborne Date: Tue, 5 May 2026 03:32:48 -0400 Subject: [PATCH] PSO Peeps: block boosted clients from Vanilla and Hardcore Add HAS_PSO_PEEPS_XP_PATCH for future V2/GC client-function XP patches. Unify boosted-client proxy blocking so Vanilla/Hardcore reject: - PC v2 clients using boosted BattleParams - legacy boosted-disc listener ports - future clients with the PSO Peeps XP patch flag Normal unpatched V2/GC clients remain allowed. --- src/Client.hh | 1 + src/ReceiveCommands.cc | 39 ++++++++++++++++++++------------------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/Client.hh b/src/Client.hh index 7ff49167..6600644f 100644 --- a/src/Client.hh +++ b/src/Client.hh @@ -83,6 +83,7 @@ public: ITEM_DROP_NOTIFICATIONS_1 = 0x0000000400000000, ITEM_DROP_NOTIFICATIONS_2 = 0x0000000800000000, HAS_ENEMY_DAMAGE_SYNC_PATCH = 0x0000001000000000, // Must be same as in EnemyDamageSync*.s + HAS_PSO_PEEPS_XP_PATCH = 0x0000200000000000, // Must be same as in PSO Peeps XP patches // Proxy option flags PROXY_SAVE_FILES = 0x0000002000000000, diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index e829dea7..9a6afe43 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -3112,25 +3112,26 @@ static asio::awaitable on_10_proxy_destinations(shared_ptr c, uint send_message_box(c, "$C6No such destination exists."); c->channel->disconnect(); } else { - // PSO Peeps: boosted GC discs enter through separate frontdoor ports after - // pc_console_detect. Do not allow x5/x10 GC discs into Vanilla. - if ((c->listener_port == 9105 || c->listener_port == 9110 || - c->listener_port == 9201 || c->listener_port == 9202) && dest->second == 19203) { - send_message_box(c, "$C6Vanilla Ship is not available from boosted discs.\n\n$C7Use the normal disc for Vanilla."); - co_return; - } - // PSO Peeps: boosted GC discs enter through separate frontdoor ports after - // pc_console_detect. Do not allow x5/x10 GC discs into Vanilla. - if ((c->listener_port == 9105 || c->listener_port == 9110 || - c->listener_port == 9201 || c->listener_port == 9202) && dest->second == 19203) { - send_message_box(c, "$C6Vanilla Ship is not available from boosted discs.\n\n$C7Use the normal disc for Vanilla."); - co_return; - } - // PSO Peeps: PC v2 clients receive boosted BattleParams via the patch - // server. Vanilla and Hardcore run base XP rates and are incompatible. - if (c->version() == Version::PC_V2 && - (dest->second == 19230 || dest->second == 19530)) { - send_message_box(c, "$C6This ship is not available\nfor PSO PC.\n\n$C7Vanilla and Hardcore run\nbase XP rates."); + // PSO Peeps: boosted clients may not enter Vanilla/Hardcore. + // PC v2 receives boosted BattleParams via the patch server. DC/GC can be + // boosted either by old boosted-disc listener ports or by the PSO Peeps XP + // client-function patch, which sets HAS_PSO_PEEPS_XP_PATCH. + const bool is_vanilla_or_hardcore_dest = + (dest->second == 19203 || dest->second == 19230 || dest->second == 19530); + const bool is_boosted_disc = + (c->listener_port == 9105 || c->listener_port == 9110 || + c->listener_port == 9201 || c->listener_port == 9202 || + c->listener_port == 19105 || c->listener_port == 19110); + const bool is_pc_v2_boosted = (c->version() == Version::PC_V2); + const bool has_psopeeps_xp_patch = + c->check_flag(Client::Flag::HAS_PSO_PEEPS_XP_PATCH); + + if (is_vanilla_or_hardcore_dest && + (is_boosted_disc || is_pc_v2_boosted || has_psopeeps_xp_patch)) { + send_message_box(c, + "$C6Vanilla and Hardcore are not available\n" + "while boosted XP is active.\n\n" + "$C7Use Live, Test, or Dev."); co_return; }