CraftBench-UE: Deterministic Evaluation for Coding Agents in Unreal Engine
Organizations: University of Rochester · RamenVR
Abstract
Building gameplay features in a game engine requires more than code, as code that compiles and runs does not necessarily implement the requested gameplay. We introduce CraftBenchUE, an evaluation harness that runs agents in an isolated Unreal Engine environment, reconstructs their saved submissions in fresh projects, and applies deterministic build, asset, and runtime checks without an LLM judge. Based on the harness, we built a benchmark consisting of 70 tasks spanning C++ source, Blueprint assets, and editor scripting. We evaluate seven models under two editor-tool configurations, with a file-and-shell baseline on C++ tasks. We further pair tasks that specify the same gameplay and use the same runtime tests, but require C++ and Blueprint as the deliverables. Across the 10 paired tasks, C++ completion rates exceed Blueprint by 30.0 and 42.9 percentage points in the two tool configurations. Among on-time Blueprint submissions in this paired set that pass asset checks, 42.2% and 50.0% fail explicit runtime assertions. These submissions satisfy asset requirements but fail the required gameplay tests. We will release the harness, task benchmark, and our trajectory findings with the report.
Figures & tables
| Task group | Tasks | Build | Runtime | Assets |
|---|---|---|---|---|
| C++ | 33 | 33 | 33 | 0 |
| BP | 25 | 25 | 15 | 20 |
| Python | 12 | 12 | 0 | 12 |
| Configuration | C++ tasks | BP and Python tasks |
|---|---|---|
| File/shell baseline | Read, write, edit, shell; no editor MCP | Not evaluated |
| MCP1 | File/shell tools and editor MCP | File/shell tools and editor MCP |
| MCP2 | File/shell tools and editor MCP | Read/search and editor MCP; no native write/edit/shell |
| Configuration | C++ completion | BP completion |
|---|---|---|
| File/shell baseline | 45/70 (64.3%) | — |
| MCP1 | 46/70 (65.7%) | 25/70 (35.7%) |
| MCP2 | 50/70 (71.4%) | 20/70 (28.6%) |
| Observed method in BP runs | MCP1 | MCP2 |
|---|---|---|
| Task-asset readback | 149/175 | 165/175 |
| Compilation request | 131/175 | 132/175 |
| PIE start request | 38/175 | 44/175 |
| Image-capture request | 15/175 | 10/175 |
| PIE state readback | 24/175 | 30/175 |
Appendix figures & tables18 assets
Supplementary material from the paper’s appendix.
Appendix
| Display label | Requested model identifier |
|---|---|
| Claude Sonnet 5 | claude-sonnet-5 |
| DeepSeek V4 Pro | deepseek/deepseek-v4-pro-0813 |
| Gemini 3.7 Flash | google/gemini-3.7-flash |
| GPT-5.6 Luna | openai/gpt-5.6-luna |
| GPT-5.6 Sol | openai/gpt-5.6-sol |
| Grok 4.6 | x-ai/grok-4.6 |
| C++ | |||
|---|---|---|---|
| Model | File/shell baseline | MCP1 | MCP2 |
| Claude Sonnet 5 | 27/33 (81.8%) | 30/33 (90.9%) | 30/33 (90.9%) |
| DeepSeek V4 Pro | 26/33 (78.8%) | 28/33 (84.8%) | 27/33 (81.8%) |
| Gemini 3.7 Flash | 23/33 (69.7%) | 29/33 (87.9%) | 31/33 (93.9%) |
| GPT-5.6 Luna | 21/33 (63.6%) | 29/33 (87.9%) | 27/33 (81.8%) |
| GPT-5.6 Sol | 29/33 (87.9%) | 30/33 (90.9%) | 30/33 (90.9%) |
| Model | MCP1 | MCP2 | ||
|---|---|---|---|---|
| C++ | BP | C++ | BP | |
| Claude Sonnet 5 | 8/10 | 5/10 | 8/10 | 3/10 |
| DeepSeek V4 Pro | 6/10 | 5/10 | 6/10 | 2/10 |
| Gemini 3.7 Flash | 6/10 | 5/10 | 8/10 | 3/10 |
| GPT-5.6 Luna | 6/10 | 1/10 | 6/10 | 4/10 |
| GPT-5.6 Sol | 8/10 | 6/10 | 8/10 | 4/10 |
| C++ task subset | Baseline | MCP1 | MCP2 |
|---|---|---|---|
| Ten paired gameplay tasks | 45/70 | 46/70 | 50/70 |
| Other 23 C++ tasks | 135/161 | 153/161 | 153/161 |
| Configuration | C++ full | BP full | BP runtime pass | Gap (pp) |
|---|---|---|---|---|
| MCP1 | 46/70 | 25/70 | 25/70 | 30.0 |
| MCP2 | 50/70 | 20/70 | 20/70 | 42.9 |
| PIE start request | PIE state readback | Image return | ||||
| Model | MCP1 | MCP2 | MCP1 | MCP2 | MCP1 | MCP2 |
| Sonnet | 17 | 18 | 12 | 11 | 1 | 5 |
| DeepSeek | 4 | 6 | 2 | 4 | 2 | 0 |
| Gemini | 2 | 4 | 1 | 3 | 0 | 0 |
| Luna | 0 | 2 | 0 | 1 | 0 | 0 |
| Sol | 0 | 0 | 0 | 0 | 0 | 0 |
| Observed sequence | All (95) | Same tasks (49) | min (79) |
|---|---|---|---|
| Accepted write, then changed same-graph write | 30 | 16 | 20 |
| Readback between those writes | 27 | 15 | 17 |
| Compilation return between those writes | 21 | 11 | 12 |
| Both readback and compilation return | 18 | 10 | 9 |
| Error, then immediate same-graph change | 37 | 20 | 26 |
| Acceptance, then immediate same-graph change | 4 | 1 | 4 |
| Sequence | Runs | On-time pass | Final pass |
|---|---|---|---|
| Uses direct graph writing | 95 | 55 | 62 |
| Receives graph-writing error | 58 | 27 | 34 |
| Changed same-graph request accepted | 55 | 26 | 32 |
| Every error has a later accepted change | 50 | 23 | 29 |
| Previous row, session ends within 40 min | 39 | 23 | 23 |
| Failure after passing asset checks | MCP1 | MCP2 |
| Initial Health or Power | 3 | 4 |
| Required effect or resource use | 8 | 6 |
| Pose, display, or object indicator | 5 | 8 |
| Restoration or preserved behavior | 5 | 6 |
| Poison damage ratio | 3 | 4 |
| Total attempts | 24/70 | 28/70 |
| Selected BP submissions | MCP1 | MCP2 |
| On-time submissions passing asset checks | 45 | 40 |
| Runtime checks pass | 25 | 20 |
| Explicit runtime assertion failure | 19/45 (42.2%) | 20/40 (50.0%) |
| Runtime automation failure | 1 | 0 |
| Model | Pairs | MCP1 | MCP2 | Charge ratio | Higher |
|---|---|---|---|---|---|
| Claude Sonnet 5 | 0/33 | — | — | — | — |
| DeepSeek V4 Pro | 20/33 | 18/20 | 19/20 | 0.21 | 6/20 |
| Gemini 3.7 Flash | 32/33 | 28/32 | 31/32 | 1.86 | 23/32 |
| GPT-5.6 Luna | 29/33 | 27/29 | 25/29 | 2.48 | 29/29 |
| GPT-5.6 Sol | 33/33 | 30/33 | 30/33 | 2.69 | 33/33 |
| Grok 4.6 | 31/33 | 28/31 | 29/31 | 1.80 | 29/31 |
| Row | Task ID | Starting project | Build | Runtime | Inspect |
|---|---|---|---|---|---|
| C++ source tasks | |||||
| C01 | gp-crafting-queue | CraftBench template | — | ||
| C02 | gp-dot-aoe-burn-cpp | Third Person | — | ||
| C03 | gp-double-jump-stamina-cpp | Third Person | — | ||
| C04 | gp-glide-stamina-cpp | Third Person | — | ||
| C05 | gp-harvestable-regrow | CraftBench template | — | ||
| Task family | Requested behavior | Catalog rows |
|---|---|---|
| Area burn | Apply periodic damage inside a bounded area and stop after its duration. | C02 / B03 |
| Double jump | Reverse a fall with an upward impulse; debit Power once and reject insufficient Power. | C03 / B04 |
| Glide | Slow descent while draining Power and restore normal falling when Power is exhausted. | C04 / B05 |
| Healing over time | Restore Health repeatedly for a limited duration without exceeding MaxHealth. | C06 / B06 |
| Health operations | Initialize writable Health and provide repeatable damage and healing abilities. | C07 / B07 |
| Stacking poison | Apply periodic damage with up to three stacks and refresh the duration on reapplication. | C09 / B08 |
| Benchmark | Setting and task source | Agent’s deliverable | Grading evidence |
|---|---|---|---|
| GameDevBench ( Chi et al., 2026 ) | Godot; 333 tasks from web/video tutorials | Scripts, scenes, resources | In-engine tests of behavior and scene state |
| GameEngineBench ( La et al., 2026 ) | Unreal; 110 tasks from nine projects | C++ changes in existing projects | Build and runtime tests, followed by an LLM behavioral judge |
| OpenGameEval ( Zhang et al., 2025 ) | Roblox; expert-authored tasks (47 in the initial release) | Scripts and changes to existing experiences | Executable tests in Roblox Studio |
| GBQA ( Jiang et al., 2026 ) | Web games; 124 human-verified injected bugs in 30 agent-built games | Bug reports from interactive exploration | LLM critic matches reports to ground truth; recall of verified bugs |
| CutsceneBench ( He et al., 2026 ) | Unreal; 65 authored cutscene scenarios | Level Sequence assets | Tool and sequence checks; model-judged quality on 25 sampled videos per model |
| AutoUE ( Yin et al., 2026 ) | Unreal; complete game generation | Game projects with scenes and gameplay | Automated play-testing; LLM-judged game quality |
Coding Agents
Coding agents use language models, tools, and feedback to modify software and complete engineering tasks.
See all 139 papers