Skip to content

Add RoboCode CC:Ladder - #115

Merged
john-b-yang merged 8 commits into
mainfrom
john/robocode-ladder
Jul 7, 2026
Merged

john-b-yang merged 8 commits into
mainfrom
john/robocode-ladder

Conversation

@john-b-yang

Copy link
Copy Markdown
Contributor
  • 116 open-source classic Robocode bots imported to CodeClash-ai/RoboCode human/robocode/* branches from ~30 repos
    • shipped sample bots + mgalushka Super* variants
    • the full RoboWiki/PEZ collection (micro/mini/nano/femto + Marshmallow/GF1/Swiffer)
    • flat multi-file bots (Mb2, BerendBotje, MaximBot, TheCarver, BobTheBuilder, StarterBot, npcomplete)
    • flattened subpackage bots (ur4no, kokomo)
    • single-file DrussGT/HawkOnFire (strong top rungs)
    • ~35 more from a broad GitHub sweep.
    • All copy-in (0 reimplementations): verbatim, only repackaged to the arena package + main class renamed to MyTank (helpers flattened where needed).
  • Each of the 116 verified to compile and play a real battle in the arena image (stage 2, 116/116).
  • Provenance: every port file carries a source-URL/author/license header; scripts/ladder/SOURCES.md is the committed manifest (slug -> GitHub URL). See stamp_sources.py.
  • Fix arena description: it mislabeled itself Tank Royale but the engine is classic Robocode.
  • make_robocode.yaml: round-robin (100 rounds, ~2h local at -w6) for Elo
  • scripts/ladder/: build tooling (copy-in porting guide, structural validator, compile+battle smoke, push script, provenance stamper, reference bot); ports/ regenerated, not committed.
john-b-yang and others added 8 commits July 6, 2026 18:18
…oling)

- 116 open-source classic Robocode bots imported to CodeClash-ai/RoboCode human/robocode/*
  branches (source of truth, not committed here) from ~30 repos: shipped sample bots +
  mgalushka Super* variants; the full RoboWiki/PEZ collection (micro/mini/nano/femto +
  Marshmallow/GF1/Swiffer); flat multi-file bots (Mb2, BerendBotje, MaximBot, TheCarver,
  BobTheBuilder, StarterBot, npcomplete); flattened subpackage bots (ur4no, kokomo); single-file
  DrussGT/HawkOnFire (strong top rungs); and ~35 more from a broad GitHub sweep. All copy-in
  (0 reimplementations) -- verbatim, only repackaged to the arena package + main class renamed to
  MyTank (helpers flattened where needed). yngwie/chomsky skipped (unresolvable external deps).
- Each of the 116 verified to COMPILE and play a real battle in the arena image (stage 2, 116/116).
- Provenance: every port file carries a source-URL/author/license header; scripts/ladder/SOURCES.md
  is the committed manifest (slug -> GitHub URL). See stamp_sources.py.
- Fix arena description: it mislabeled itself Tank Royale but the engine is classic Robocode.
- make_robocode.yaml: round-robin (100 rounds, ~2h local at -w6) for Elo; README note.
- scripts/ladder/: build tooling (copy-in porting guide, structural validator, compile+battle
  smoke, push script, provenance stamper, reference bot); ports/ regenerated, not committed.
`ladder make` set the per-player name to the raw branch_init (e.g.
`human/robocode/walls`), which the RoboCode arena turns into an on-disk dir,
a Java package via `sed s/custom/<name>/`, and a robot-selector token. Slashes
broke the sed (terminating the s/// command) and produced invalid robot names,
so battles loaded 0 robots and get_results crashed on max() of an empty score
dict. Sanitizing to `robocode_<bot>` still failed: RoboCode reserves the
`robocode` package namespace for its engine, so its robot classloader refuses
any robot whose package starts with it (ClassNotFoundException at battle time).

Add `_player_slug()` (shared by make + run) that strips the `human/` prefix and
a leading path segment equal to the game name, yielding a bare `<bot>` package
(e.g. `human/robocode/walls` -> `walls`). Non-RoboCode branches
(`human/<author>/<bot>`, `human/<bot>`) are unaffected -- their leading segment
never matches the game name, so slugs are identical to before.

Bump make_robocode.yaml sims_per_round 100 -> 300 for lower Elo variance
(~41s/pair solo, ~25s/pair throughput under -w 6; still far under the 5-min/pair
budget) and refresh the cost comment with measured numbers.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The round-robin only needs per-battle scores to fit Elo; recording every sim
wrote ~8.7MB of compressed replay XML per pair (~59GB over 6670 pairs, risking
disk exhaustion mid-run) and pinned a gzip core on each log copy. Scores come
from results_*.txt, which is unaffected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… john/robocode-ladder

# Conflicts:
#	configs/ladder/README.md
#	configs/ladder/make_robocode.yaml
@john-b-yang
john-b-yang merged commit afe9efd into main Jul 7, 2026
5 checks passed
@john-b-yang
john-b-yang deleted the john/robocode-ladder branch July 7, 2026 22:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant