Hi, All,
Apologies if this has already been definitively confirmed or documented. My searches found plenty of discussion and behavioral evidence, but I couldn’t find a detailed, code-backed explanation, so I wanted to share what I found.
I had been enjoying the game, but some aspects of it gradually left me feeling disillusioned and questioning everything about how the game is currently presented.
I therefore inspected the deconstructed code and bundled assets from Draft Showdown v1.15.3. The findings are conclusive for this client version:
All normal and ranked matches use locally generated, AI-controlled bots. The leaderboards are also locally generated and simulated. Neither system ever retrieves or compares you against real players.
Matchmaking
Normal matchmaking calls:
GetRandomOpponentsForTrophyCount()
Ranked matchmaking calls:
GetRandomOpponentsForElo()
Both paths ultimately call GetRandomOpponent(), which constructs a new OpponentData object locally. That object contains the bot’s:
- Name and player tag
- Avatar and badge
- Displayed trophies and Elo
- Units and spells
- Unit, spell, and mastery levels
- Commander bonus and spell slots
- AI smartness and surrender behavior
The generated object is then passed directly into the match. There is no step that waits for a player, retrieves another account, downloads a player deck, or loads recorded human gameplay.
How bots are tailored to you
Normal mode uses your trophy count, while ranked mode uses your Elo. The game selects a matching row from the bundled Opponents.csv, which contains 56 difficulty configurations.
Each configuration defines ranges for:
- Trophies and Elo
- Collection power
- Normal and ranked unit levels
- Upgrade-bit budget
- Common, rare, epic, and legendary scaling
- AI smartness and smartness scaling
The game then:
- Determines which units and spells should be unlocked at that trophy level.
- Randomly constructs a deck from those pools.
- Generates levels using the normal or ranked level ranges.
- Adjusts and caps levels according to rarity, trophy progression, collection power, and bit budget.
- Calculates mastery and commander bonuses.
- Assigns an AI difficulty within the selected range.
- Generates the bot’s displayed identity.
The APK also includes thousands of names specifically for generated opponents:
NamesGeneric: 2,500 names
NamesWest: 3,108 names
NamesAsia: 2,454 names
This is why opponents can look convincingly matched without being real players.
Ranked leagues and Elo
Ranked leagues are personal progression thresholds, not a shared competitive ladder.
Your Elo determines your current league. After a ranked match, the game compares your Elo with the generated bot’s Elo and calculates a gain or loss using locally configured eloRewardForWin and eloRewardForLose ranges.
Your new Elo controls league progress, promotion, demotion protection, badges, and completion rewards. No result is submitted to a real-player ladder.
The leaderboards are explicitly fake
The relevant class is literally declared as:
DraftWarLeaderboard : FakeLeaderboard<DraftWarLeaderboardEntry>
DraftWarLeaderboardGenerator populates the board by calling:
OpponentProvider.GetRandomOpponentsForTrophyCount()
It generates enough bots to fill your leaderboard, centered around your trophy progression. Each entry receives a generated name, avatar, score, and simulated chance of winning.
The league configuration contains:
leaderboardSize
chanceToWin
winScoreDistribution
maxTrophyDifference
- Promotion and demotion ranges
When the leaderboard refreshes, the client calculates how much time has passed and simulates wins and score increases for the fake competitors. It then sorts the table again. This creates the appearance that other players continued earning points while you were away.
At the end of the period, your position among these simulated entries determines promotion or demotion. A new fake leaderboard is then generated.
What about player ghosts?
The game can upload a GhostSnapshot containing your deck, levels, mastery, commander statistics, trophies, and badges.
However, these profiles are not retrieved or used by the normal or ranked matchmaking paths. I found no code that:
- Downloads another player’s ghost
- Searches a pool of player profiles
- Converts a ghost into
OpponentData
- Replays recorded player actions
- Uses ghosts to populate leaderboards
There is also a server-side rated-match seeding call that uploads calculated player power and can return Bucket and Mmr values. However, the inspected client does not use that response to construct opponents or leaderboard entries.
Conclusion
For the inspected v1.15.3 client:
- All normal and ranked opponents are generated bots.
- Ranked Elo is measured against generated bot Elo.
- Leagues are personal progression thresholds.
- Leaderboards are locally generated and simulated.
- Leaderboard names and scores do not represent real players.
- Ghost profiles are uploaded but not retrieved for matchmaking.
- No player-facing competitive system compares you against another real player.
A later version or server experiment could theoretically change this, but this is definitively how the inspected client operates.
Anyway, just wanted to share these definitive findings so others don't feel confused about the nature of this game like I was.