From bf52bfb291b1618dba0bfe5f6ee2f99990a63bd6 Mon Sep 17 00:00:00 2001 From: James Osborne Date: Mon, 25 May 2026 18:37:30 -0400 Subject: [PATCH] Recognize BB x-prefixed crossplay rooms --- src/ReceiveCommands.cc | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index 657cf8bb..889c6a23 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -4941,8 +4941,20 @@ static uint16_t safe_default_compatibility_group_for_version(Version v) { return groups.at(static_cast(v)); } -static bool game_name_enables_full_crossplay(const string& name) { - return !name.empty() && ((name[0] == 'x') || (name[0] == 'X')); +static bool game_name_enables_full_crossplay(const string& name, Version creator_version) { + if (!name.empty() && ((name[0] == 'x') || (name[0] == 'X'))) { + return true; + } + + // BB room names appear here with an 8-space + "E" prefix before the user-visible room name. + // Example: a BB room entered as "x asdf" is decoded here as " Ex asdf". + if ((creator_version == Version::BB_V4) && + (name.size() >= 10) && + (name.compare(0, 9, " E") == 0)) { + return (name[9] == 'x') || (name[9] == 'X'); + } + + return false; } shared_ptr create_game_generic( @@ -4985,7 +4997,7 @@ shared_ptr create_game_generic( game->episode = episode; game->mode = mode; game->difficulty = difficulty; - bool full_crossplay_enabled = game_name_enables_full_crossplay(name); + bool full_crossplay_enabled = game_name_enables_full_crossplay(name, creator_c->version()); if (full_crossplay_enabled) { game->allowed_versions = s->compatibility_groups.at(static_cast(creator_c->version())); } else {