BENCH / BUILDS AND MATCHUPS

Elemental Armory benchmark

Bounce Duels, the main mode of Elemental Armory, played against the game's own rival. A model builds a deck of four elemental balls and their ability cards, then picks a ball and aims its launch each round, and the fight runs itself. The bench runs the game's own simulation, so these are matches you can play. Elemental Armory is made with Chach16. Compare matches won, rounds won, the counters a model picks, the cards it builds with, the game's own players on the same matches, and the cost and time of a match.

11 model settings26 matches8 won66 roundsUpdated 2026-10-29

100 means every match won. The rival picks its deck, cards, balls and aim at random, so a player who does the same wins about half of its matches. The rival playing the model's seat scores 49. The game's other players on the same matches are in the table below.

Elemental Armory leaderboard

Select a column to sort. Scroll sideways for all metrics →

#ModelScore95% intervalWon per levelL1L5L8RoundsCountersStarsIllegalRequests / matchMatchesAPI cost / matchSec / decision
1Qwen3.8 Flash-Nextlocal, thinking low · open weights673 of 150100010056%5 of 967%countered 0%3.00100% of slots filled0.0%0.0% defaulted4.03n/a193.9
2Qwen3.5 9Blocal, no thinking · open weights502 of 1500100·60%3 of 540%countered 20%2.69100% of slots filled8.3%57.1% defaulted6.02n/a182.5
3Qwen3.8 27Blocal, no thinking · open weights502 of 1501000·50%3 of 650%countered 33%1.50100% of slots filled0.0%0.0% defaulted4.02n/a411.0
4Ministral 3 8Blocal, no thinking · open weights502 of 1501000·40%2 of 520%countered 0%2.75100% of slots filled0.0%0.0% defaulted3.52n/a72.2
5GPT-6 Lunareasoning medium333 of 1501000038%3 of 825%countered 12%2.17100% of slots filled0.0%0.0% defaulted3.73$0.00303.8
6GPT-6.1 Terrareasoning medium333 of 1500100033%2 of 633%countered 50%2.06100% of slots filled0.0%0.0% defaulted3.03$0.0194.6
7GPT-6 Astrareasoning medium333 of 1500010029%2 of 729%countered 0%2.67100% of slots filled0.0%0.0% defaulted3.33$0.27311.0
8GPT-6 Solreasoning medium03 of 15000025%2 of 850%countered 38%2.08100% of slots filled0.0%0.0% defaulted3.73$0.06619.5
9GPT-6.1 Solreasoning medium03 of 15000025%2 of 850%countered 0%2.81100% of slots filled0.0%0.0% defaulted3.73$0.05910.5
10Gemma 3 4Blocal, no thinking · open weights01 of 1500··0%0 of 20%countered 50%1.00100% of slots filled0.0%0.0% defaulted3.01n/a13.2
11gpt-oss 20Blocal, thinking low · open weights01 of 1500··0%0 of 250%countered 0%1.50100% of slots filled0.0%0.0% defaulted3.01n/a175.2

Score is the match win rate per level, each level weighted the same, from 0 to 100. Rounds is the share of decided rounds won. Counters is the share of decided rounds its ball countered the rival's. Stars is the average rating of the cards it equipped. A model ranks once it has played the first 50 matches of every tier; until then it shows how many of those it has played and ranks after the models that have. Past that the bench keeps playing further matches in the same order for every model, and every finished one counts, so n grows and the intervals narrow.

Cost frontierAPI-equivalent cost per match. Local models have no list price and are omitted. Bars show 95% intervals.
Closed weightsOpen weightsPareto frontier
0204060$0.0030$0.010$0.030$0.100$0.300API-equivalent USD / match (log scale)ScoreGPT-6 LunaGPT-6.1 TerraGPT-6 Astra
Time frontierObserved response time, including reasoning and queue wait. Routes and hardware differ.
Closed weightsOpen weightsPareto frontier
0501000100200300400Seconds / decisionScoreQwen3.8 Flash-NextQwen3.5 9BQwen3.8 27B

The Pareto frontier shows where no other model scores at least as well for less cost or time, with one strict improvement. Partial sets are included and may cover different items. Use completed sets for direct comparisons.

By tier

Matches won at that level, then the win rate, the share of rounds won and the average card rating. The count after each result is n, the matches finished in that tier.

ModelLevel 1Level 5Level 8
Qwen3.8 Flash-Nextlocal, thinking low1 of 1100% · rounds 67% · 3.0 stars0 of 10% · rounds 33% · 3.0 stars1 of 1100% · rounds 67% · 3.0 stars
Qwen3.5 9Blocal, no thinking0 of 10% · rounds 33% · 2.5 stars1 of 1100% · rounds 100% · 2.9 starsnot played
Qwen3.8 27Blocal, no thinking1 of 1100% · rounds 67% · 1.0 stars0 of 10% · rounds 33% · 2.0 starsnot played
Ministral 3 8Blocal, no thinking1 of 1100% · rounds 67% · 2.8 stars0 of 10% · rounds 0% · 2.8 starsnot played
GPT-6 Lunareasoning medium1 of 1100% · rounds 67% · 2.0 stars0 of 10% · rounds 33% · 2.2 stars0 of 10% · rounds 0% · 2.2 stars
GPT-6.1 Terrareasoning medium0 of 10% · rounds 0% · 2.5 stars1 of 1100% · rounds 100% · 1.8 stars0 of 10% · rounds 0% · 1.9 stars
GPT-6 Astrareasoning medium0 of 10% · rounds 0% · 3.0 stars0 of 10% · rounds 0% · 2.5 stars1 of 1100% · rounds 67% · 2.5 stars
GPT-6 Solreasoning medium0 of 10% · rounds 33% · 2.2 stars0 of 10% · rounds 33% · 2.0 stars0 of 10% · rounds 0% · 2.0 stars
GPT-6.1 Solreasoning medium0 of 10% · rounds 33% · 3.0 stars0 of 10% · rounds 33% · 2.8 stars0 of 10% · rounds 0% · 2.7 stars
Gemma 3 4Blocal, no thinking0 of 10% · rounds 0% · 1.0 starsnot playednot played
gpt-oss 20Blocal, thinking low0 of 10% · rounds 0% · 1.5 starsnot playednot played

The game's own players on the same matches

PlayerScoreLevel 1Level 5Level 8
Rival in your seatThe game's own rival in your seat: a random deck, random cards, a random ball each round, aimed anywhere. The rival plays uniformly at random, so this is also the random baseline.4927 of 5054%22 of 5044%25 of 5050%
Starter playerA new player who changes nothing: the starter deck with its core cards, the first ball in hand, launched straight at the rival.1522 of 5044%1 of 502%0 of 500%
Sharp playerThe starter deck with three-star cards in every slot, the ball that counters most of the rival's balls left, launched straight at the rival.5732 of 5064%28 of 5056%25 of 5050%
Tuned playerA player who measured all 72 cards on the game's simulation: the four elements with the best cards, those cards, counters first.6835 of 5070%36 of 5072%31 of 5062%
Every match

Every match

One square per match, filled when it won. Columns run tier by tier, in the order every model meets them. Click a square to open that one.

ModelL1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950L5234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950L8234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
Qwen3.8 Flash-Next
Qwen3.5 9B
Qwen3.8 27B
Ministral 3 8B
GPT-6 Luna
GPT-6.1 Terra
GPT-6 Astra
GPT-6 Sol
GPT-6.1 Sol
Gemma 3 4B
gpt-oss 20B
MethodologyProtocol, scoring & limitations

The matches

Bounce Duels is the main mode of Elemental Armory, made with Chach16. Each side brings four of eight elemental balls. A ball fights with the ability cards in its slots: they attack on their own, on a timer, on contact or on a wall bounce, and a plain collision does no damage. Each round both sides pick one of their remaining balls and aim its opening launch, then the round runs by itself until a ball is knocked out, or for 45 seconds, when the larger share of health left wins. A ball that fought a decided round is spent, and the first side to two round wins takes the match. The bench runs the game's own simulation and its own match rules, pinned to commit 78afdf2, so a later change to the game cannot move anyone's result.

The opponent is the game's local rival. It deals itself a deck, equips random cards, and seals a random ball and a random aim each round before the player picks, never looking at the player's choice. Every model plays the same matches in the same order from set v1: match k is the same seed at every level, so the rival brings the same deck and makes the same picks for everyone. The levels are the game's ball levels, and the rival plays at the model's level, as the game sets it. Each level adds health, damage and, at levels 5 and 8, a card slot.

LevelThe matchesWon by the rival in your seatWon by the tuned player
Level 1Every ball on both sides at level 1: one card slot each101 of 200143 of 200
Level 5Level 5: two card slots, 132 HP, 124% damage106 of 200132 of 200
Level 8Level 8: three card slots, 156 HP, 142% damage100 of 200129 of 200

A model ranks once it has played the first 50 matches of every level. After that the bench keeps playing further matches, up to 200 per level, so n grows and the intervals narrow. The wins in the table count all of a level's matches.

The decisions

Play is in paused time: the game's 15-second planning clock is gone, and nothing moves while the model thinks. First one request for the deck: the rules, every ball's nine cards with the game's own descriptions and ratings, the counters and the level. As in the game, the deck is built before the rival's is known. Then one request per round, with both decks and their cards, which balls are spent, the score, the counters among the balls left, and every round so far: who launched what at which angle, who won, the health left, and each card's damage, healing, blocks and effects, the game's own battle details. The model answers with a ball and an angle. A drawn round replays with the same balls, so it only chooses a new angle.

One retry follows a reply the game cannot use (no answer tag, a card that is not that ball's, a spent ball), with the reason. A second one takes a recorded default: for the deck, whatever was legal, filled the way the game fills a short deck, with a core card for a ball that has none; for a round, the first ball left and the game's own starting aim, straight at the rival.

Score

The score is the match win rate at each level, averaged so every level counts the same, from 0 to 100. Its 95% interval adds up each level's Agresti-Coull uncertainty. Between evenly matched sides a match is close to a coin flip, so the intervals stay wide until many matches are in.

The game's own players

The game's own players played every match of the set on the same pinned commit. Rival in your seat. The game's own rival in your seat: a random deck, random cards, a random ball each round, aimed anywhere. The rival plays uniformly at random, so this is also the random baseline. Starter player. A new player who changes nothing: the starter deck with its core cards, the first ball in hand, launched straight at the rival. Sharp player. The starter deck with three-star cards in every slot, the ball that counters most of the rival's balls left, launched straight at the rival. Tuned player. A player who measured all 72 cards on the game's simulation: the four elements with the best cards, those cards, counters first.

Cost and time

Same as the chess and sudoku benchmarks: Claude models run through Claude Code and OpenAI models through the Codex CLI on a subscription, with every tool switched off, and local models on our own DGX Sparks. Cost is API-equivalent: what the tokens of every request in the match, retries included, would cost at the lab's list price. Local models have no list price, so they show n/a, not zero. Time is the wall-clock wait for the replies, including any queue on our side, so compare it within a route rather than across them. A request that fails on our side (a timeout, an outage, a usage limit) aborts the game, and an aborted game never counts against the model.

What it doesn't show

Paused time removes the planning clock on purpose. A model reads the cards as text and never sees the arena move, so it cannot learn how a card plays by watching it; it only gets each round's battle details. The rival plays at random, so this measures how well a model builds and picks against a fair but careless opponent, not against a strong person.

Data: JSON · CSVUse with credit to Glimmer Index.