- Script version: 1.7.61
- Protocol version: 36/editable (game versions below script version won't be allowed to join)
curl -fsSL https://install.thecardinal.workers.dev | bash- Change into the directory:
cd Cardinal - Configure settings in
mods_config.jsonto your liking. - Open a tmux session (recommended for persistent background execution):
tmux
- Run the server:
./bombsquad_server
- Runs the Discord bot as an isolated process (ensures zero game server lag).
- Communicates with the game server via a local socket tunnel.
- Configure bot settings (
token,owner_id,port,webhooks) inmods_config.jsonunder thediscordsection.
/cmd <command>: Sends a chat command to the game server (executes according to user authority level)./say <message>: Broadcasts a chat message directly into the game./owner <user-mention>: Grants or revokes server owner permissions./admin <user-mention>: Grants or revokes server admin permissions./list: Displays the active players currently inside the server.
Cardinal provides an automated, high-stability tournament system managed via Discord bot commands.
Create five designated Discord channels and add their webhook URLs to mods_config.json under discord.webhooks:
brackets: Displays the active tournament bracket images.results: Posts match completion announcements and score summaries.dashboard: Posts player rankings, leaderboards, and group standings.registrations: Announcement and status channel for player/team signups.announcements: Tournament announcements and team captain lists.
Note: In dist/ba_root/mods/tournament/graphics/generator.py, replace the title and logo URLs with your own assets (raw image URLs).
Brackets and team announcements can be held for staff review before going public:
- Generated brackets (group stage, main stage, double elimination) and captain announcements appear in your designated staff channel first, tagging only owners/leaders.
- Staff messages include interactive "Send now" and "Cancel" buttons for immediate publishing or discarding.
- Posts are automatically published after
hold_hours(defaults to 3 hours). - If match results update a bracket while it is currently held, the held post updates in-place rather than creating duplicate spam.
- Configuration: Set
staff_channel_id(channel ID) andhold_hoursinmods_config.jsonunderdiscord. - Instant Posting: Set
staff_channel_id: 0orhold_hours: 0to post everything publicly immediately. - Results, dashboards, and live match announcements are never held and post in real-time.
- Optional Group Stage: If teams are grouped, generates round-robin groups. The top qualifying teams advance to the knockout main stage.
- Main Stage: Knocks out losing teams, concluding with a Final match (1st/2nd place) and a Third-Place match (3rd/4th place).
-
Team Requirements: Number of teams must be
$\ge 4$ and divisible by 4 if using groups.
- Structure: Every team begins in the Winners bracket. A team is only eliminated upon their second loss.
-
Byes & Seeding: Supports any number of teams
$\ge 4$ . If team count is not a power of 2, standard seeded byes are automatically assigned in Round 1. - Grand Final & Reset: The Winners bracket champion plays the Losers bracket champion. If the Losers champion wins match 1, an automatic reset match (Match 2) is scheduled.
- Placements: Final team rankings (1st through last) are determined by elimination round order and rendered directly on the bracket graphic.
/tournament create <type> <series> [mode]: Creates a tournament season.type:SOLOorTEAMseries:BO1,BO3,BO5, orBO7mode:SINGLE_ELIMINATION(default) orDOUBLE_ELIMINATION
/tournament registrations <open/close>: Opens or closes player registrations./tournament start: Starts the tournament and generates initial brackets./tournament list: Lists all playable matches in active rounds with their match keys./tournament win <match-index> <team-index>: Manually awards a match win to a team./tournament cancel: Cancels the active season after a confirmation dialog (closes registrations, drops held posts, stops any running in-game match, and restarts the game server session)./tournament uuid <user-mention> <uuid>: Updates the registered device UUID for a player.
/tournament register(Discord):- Solo: Instantly registers the player and provides a verification code.
- Team: Prompts the captain to invite teammates; sends verification codes once all members accept.
/verify <code>(In-Game): Verifies a player and binds their Discord account, Bombsquad account ID, and device UUID./ready(In-Game): Signals that a player is ready for their pending match. When all players in a match are ready, the match launches automatically.
- The device UUID and account ID captured during
/verifyare locked to the player for the season. - If a registered player tries to enter a match from an unauthorized device or account ID, they will be blocked from joining.
- Server admins can update a player's registered UUID using
/tournament uuidif a legitimate device change is required.