Godot Survivors: the eval log, round 1
This is an earlier round, kept as it was written. The latest round (round 2) tested v1.1.7.
We gave Godot Survivors to a coding agent in a new session with no CodePlate context, along with a made-up user's brief ("Scrap Siege"), then sent the requests below one at a time.
5 of 5 requests passed
- Run
- 2026-10-13
- Agent
- Claude Sonnet 5.5
- The user
- Claude Opus 5.5, from the script
- Version tested
- v1.0.0
- On sale now
- v1.2.0
The made-up user
Written the way a buyer would put it. {ASSETS}, {ART} and {GODOT} stand for the folder with their files and the engine's path; their asset pack isn't published.
The user is a hobbyist who builds with an agent. They don't read code.
- Game: Scrap Siege, a survivors-like. A little robot in a junkyard at dusk holds out against swarms of rust bugs.
- Art: only a robot (idle 2 frames, walk 8 frames, no hurt animation), two rust bugs (small and big), a scrap projectile, a ground tile and junk props, in
assets/(see its README). The pack deliberately doesn't match the template's frame counts. Keep the template's other art for now. - Platforms: mobile first, desktop too.
First message
Hi! I want to turn this survivors template into "Scrap Siege": a little robot in a junkyard fighting off swarms of rust bugs. My art is in
{ART}(there's a README). Godot 4.7.2 is at{GODOT}. Can you take a look and get us started?
Interview answers
- Hero: the robot ("Bolt-E"). Enemies: rust bugs replace the bats and slimes (small bug), and the big rust beetle replaces the treant. Keep skeletons, ghosts and the golem for now but rename them to junkyard things if easy (e.g. "Scrap Walker", "Static Ghost", "Junk Golem").
- Weapons: rename to fit (e.g. bolt → "Rivet Gun"), the agent can choose names.
- Run length: keep 10 minutes for now.
- The art is mine; credit "Scrap Siege team".
- Mobile first, desktop too.
The requests
- Make it Scrap Siege: my robot, the rust bugs, the scrapyard ground and junk, and junkyard names for everything.
- Add a new weapon, the "Scrap Magnet": it flings a piece of scrap (use my scrap sprite) that flies out and comes back to the robot like a boomerang, hitting bugs both ways.
- Runs are too long on a phone. Make a run 5 minutes, but keep the boss and the way it ramps up.
- Add a bomb pickup that sometimes drops and blows up every bug on screen (not the boss).
- Add coins: bugs sometimes drop a coin, and between runs I can spend coins on permanent upgrades (at least more damage and more health) from the title screen.
The run record
As we wrote it on 2026-10-13, with local paths and internal references taken out. "I" is the person running the eval.
- Agent: Claude Sonnet 5.5 (general-purpose subagent), with no CodePlate context. It was given only the user's messages and paths.
- User: played by Claude Opus 5.5, following
concept.mdandrequests.md. - Art pack: a robot (idle 2 frames, walk 8, no hurt), two rust bugs, a scrap nut, a ground tile and junk props (the eval's art pack). The frame counts deliberately don't match the template's.
Results
| Step | Result | Notes |
|---|---|---|
| Interview | pass | It ran the checks on the untouched template first, compared the art pack with the slots, noticed the missing hurt animation and that there were 2 bug sprites for 6 enemies, and proposed defaults for all 7 questions. |
| 1. Re-theme | pass | Robot, bugs, ground and junk are in, with the right frame counts in assets.json. Hurt is handled by a red flash. All names are junkyard ones, and credits and docs/project.md are updated. It renamed enemy ids (bat/slime → bug); records don't store them, so that's harmless. It updated two checks that named slime and the bolt sprite (needed, not weakened). |
| 2. Scrap Magnet | pass | A new boomerang kind, following the add-weapon recipe: validation, range_left/returning on Projectile, hit memory cleared on the turn (so it hits both ways), only rng. It added a check, docs, bot priority, an icon frame and a 6-run balance report. |
| 3. 5-minute runs | pass | Halved the timeline and raised spawn rates about 20%, so the boss now comes at 2:30. It found that event health used a fixed 1 + t/300 and changed it to follow the run length. It loosened the two balance targets and explained why. |
| 4. Bomb | pass | A single drop roll, a screen-sized blast that spares the boss, a BOMB event with boom, shake and white flash, config tunables and a check (with a boss and an off-screen enemy). It drew a placeholder sprite and sound and labelled them CodePlate-original (wrong owner). |
| 5. Coins and shop | pass | Coin drops and a boss bonus. Coins and upgrades are saved in records, and old files still load (missing keys default to 0). The shop is in content/shop.json, and the bonuses are passed into the run, so core/ never reads Game. There's a title button, a shop screen and 4 new checks. It added tools/balance.gd -- upgrades=max to show the maxed-out difference. |
The checks went from 23 to 29, all passing. Each request took one agent turn of 3.5–15 minutes.
Template fixes from this run (1.0.1)
- The hurt animation is optional. Without
assets/hero/hurt.pngthe hero flashes red, and he always flashes red when hit. The hero's sprite offset now follows the frame height instead of assuming 32 px. decor_densityin the config. Bigger props (the junk pack) cluttered the arena at the fixed density.- Event health follows the waves. Events take an optional
hp_mult, defaulting to the running wave's, instead of a hard-coded 10-minute curve. The template's events carry explicit values, so the balance is unchanged. - The level target time is configurable (
bot_level_check_minutes,bot_min_level), so shorter runs can scale it. The recipes say to scale both targets with run length. - The checks don't depend on the template's own content: no
"slime"id, no real sprite paths in made-up content, and any number of enemy types. - All four briefs now say that
CodePlate-originalis only for the template's placeholders. Art the agent makes belongs to the user's game. Spritesparsesassets.jsonquietly (JSON.new().parse).
Takeaway
The deterministic Run plus content-as-data held up under a new weapon kind, a pickup and a meta-progression layer. Each change stayed in the place the brief said, with a check. The fixes are robustness for content that differs from the template's, which is exactly what an eval with a mismatched art pack is for.
What each request was scored against
Every request: checks PASS, no check weakened silently, docs/project.md updated.
- Re-theme
- The robot replaces the hero: idle 2 and walk 8 frames listed correctly in
assets.json, and a sensible answer to the missing hurt animation (reuse a frame or flash, not a crash). - The rust bugs replace the bats/slimes and the treant, via
spriteinenemies.json; the ground and decor are replaced. - Names changed in
content/,project.godotand the title; ids kept (or the agent asked first). assets.jsonandCREDITS.mdare updated.- The agent took screenshots and looked at them.
- The robot replaces the hero: idle 2 and walk 8 frames listed correctly in
- Scrap Magnet: a new weapon kind (e.g.
boomerang) inContent.WEAPON_KINDS/KIND_FIELDSandRun._fire_weapons()/_move_projectiles(). It usesrng, notrandf(), and hits both ways. It has a check, docs incontent.md, the bot's PRIORITY, an icon frame, and a balance report. - 5-minute runs:
survive_seconds300, with waves and events scaled to the same shape (boss around 2:30). The balance report was run and the targets kept or adjusted with an explanation. - Bomb: a drop chance in config, collected in
Run._collect(), sparing the boss. It has an event with feedback (sound, shake or flash), a sprite (a placeholder is OK), and a check. - Coins and upgrades: coins come from
Run(drop or end-of-run), are saved in records, and old record files still load. A shop screen reachable from the title spends them. Upgrades are applied to the run withoutcore/readingGame. Checks cover the run bonus and buying.
Every round
Each round has its own made-up user and requests, run on the version on sale at the time. Older logs stay up as they were written.
- Round 2 (latest): 2026-10-15, v1.1.7, "Snow Day", 3 of 5 requests passed (2 partial)
- Round 1: 2026-10-13, v1.0.0, "Scrap Siege", 5 of 5 requests passed (this page)