A benchmark in which language models design roller coasters that RollerCoaster Tycoon 2 builds, tests, and rates.
I'll start by loading the coaster tools.
{"max_results":15,"query":"coaster ride place piece"}
no rated test yet this round
{"file_path":"/home/sandbox/.claude/projects/-workspace/memory/rct2-coaster-contest-tuning.md"}1 --- 2 name: rct2-coaster-contest-tuning 3 description: Hard-won tuning facts for the RCT2 steel-twister (ride_type 51) coaster-design contest via the coaster MCP tools 4 metadata: 5 node_type: memory 6 type: project 7 originSessionId: 7263586d-30ff-4ca5-831b-323955bcf1c3 8 modified: 2026-07-25T14:37:47.683Z 9 --- 10 11 Round-by-round results in the coaster MCP contest (steel twister, ride_type 51): scores plateau at 12 excitement 6.7-7.0. R3: 6.99 (int 9.94). R4: 6.93 (int 9.96, 5 inv). R5: 6.84 (int 9.58, 4 inv, 13 length 707, airtime 64, 11 drops, 100 pieces). 14 15 Facts established by experiment: 16 - **Intensity >= 10 halves excitement, repeatedly.** Stay just under 10.0; it is the binding constraint. 17 - **Lift height / first-drop depth is the dominant intensity driver.** R5 A/B on an otherwise IDENTICAL 18 layout: 15 up_25 chain (top z=368, drop 24 steps) -> int 9.19 / exc 6.71; 17 up_25 (top z=400, drop 19 30 steps) -> int 14.3 / exc 2.10. Never exceed ~24 height-steps of first drop. Two down_60 in the 20 drop is also too much; one is right. 21 - Adding one vertical loop to a fixed layout: int +0.4, exc +0.13 (6.71/9.19 -> 6.84/9.58). Good trade. 22 - Add… (2845 chars)
{"dir":0}{"deltas":[{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":0,"piece":"flat","slope_out":0},{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":0,"piece":"end_station","slope_out":0},{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":0,"piece":"begin_station","slope_out":0},{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":0,"piece":"middle_station","slope_out":0},{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":16,"piece":"up_25","slope_out":2},{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":64,"piece":"up_60","slope_out":4},{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":8,"piece":"flat_to_up_25","slope_out":2},{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":32,"piece":"up_25_to_up_60","slope_out":4},{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":32,"piece":"up_60_to_up_25","slope_out":2},{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":8,"piece":"up_25_to_flat","slope_out":0},{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":-16,"piece":"down_25","slope_out":6},{"bank_out":0,"dir_out":0,"dx_tiles":-1,"dy_tiles":0,"dz":-64,"piece":"down_60","slope_out":8},{"bank_out":0,"dir_out":0,"dx… (7397 chars)
Good context. First, bank my known-good R5 layout (6.84) immediately, then experiment.
{"dir":0,"ride_type":51,"x":62,"y":50}{"cursor":{"bank":0,"dir":0,"slope":0,"x":62,"y":50,"z":112},"ride_id":0}
{"pieces":["begin_station","middle_station","middle_station","end_station",{"chain":true,"piece":"flat_to_up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25_to_flat"},"left_turn_5","left_turn_5","flat_to_down_25","down_25","down_25_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_right_bank","banked_right_turn_5","banked_right_turn_5","right_bank_to_flat","flat_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_t… (1831 chars){"circuit_closed":false,"cursor":{"bank":2,"dir":0,"slope":0,"x":62,"y":50,"z":128},"placed_this_call":100,"rejection":{"error":"Twister Roller Coaster 1 in the way","index":100,"piece":"left_bank_to_flat"},"total_placed":100}
{"cursor":{"bank":2,"dir":1,"slope":0,"x":65,"y":48,"z":128},"pieces_placed":99,"removed":"banked_left_turn_5"}
{"cursor":{"bank":2,"dir":2,"slope":0,"x":63,"y":45,"z":128},"pieces_placed":98,"removed":"banked_left_turn_5"}
{"cursor":{"bank":0,"dir":2,"slope":0,"x":62,"y":45,"z":128},"pieces_placed":97,"removed":"flat_to_left_bank"}
{"cursor":{"bank":0,"dir":2,"slope":0,"x":61,"y":45,"z":128},"pieces_placed":96,"removed":"brakes"}
{"cursor":{"bank":0,"dir":2,"slope":0,"x":60,"y":45,"z":128},"pieces_placed":95,"removed":"brakes"}
{"pieces":["flat_to_down_25","down_25_to_flat","flat_to_left_bank","banked_left_turn_5","banked_left_turn_5","left_bank_to_flat"]}{"circuit_closed":false,"cursor":{"bank":2,"dir":0,"slope":0,"x":62,"y":50,"z":112},"placed_this_call":5,"rejection":{"error":"Twister Roller Coaster 1 in the way","index":5,"piece":"left_bank_to_flat"},"total_placed":100}
{"cursor":{"bank":2,"dir":1,"slope":0,"x":65,"y":48,"z":112},"pieces_placed":99,"removed":"banked_left_turn_5"}
{"cursor":{"bank":2,"dir":2,"slope":0,"x":63,"y":45,"z":112},"pieces_placed":98,"removed":"banked_left_turn_5"}
{"cursor":{"bank":0,"dir":2,"slope":0,"x":62,"y":45,"z":112},"pieces_placed":97,"removed":"flat_to_left_bank"}
{"pieces":["flat","left_turn_5","left_turn_5"]}{"circuit_closed":true,"cursor":{"bank":0,"dir":0,"slope":0,"x":62,"y":50,"z":112},"placed_this_call":3,"total_placed":100}
Circuit closed. Banking a score now.
{"bounds":{"max_tile_x":65,"max_tile_y":50,"max_z":408,"min_tile_x":24,"min_tile_y":39,"min_z":112},"placed_pieces":["begin_station","middle_station","middle_station","end_station",{"chain":true,"t":"flat_to_up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25_to_flat"},"left_turn_5","left_turn_5","flat_to_down_25","down_25","down_25_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_right_bank","banked_right_turn_5","banked_right_turn_5","right_bank_to_flat","flat_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_25","up_25","up_25_to_flat","fla… (2476 chars)
Banked 6.66. Now an experiment: replace the boring straight tail with a second chain lift + extra inversions.
{"demolished":0}
{"dir":0,"ride_type":51,"x":62,"y":50}{"cursor":{"bank":0,"dir":0,"slope":0,"x":62,"y":50,"z":112},"ride_id":0}
{"pieces":["begin_station","middle_station","middle_station","end_station",{"chain":true,"piece":"flat_to_up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25_to_flat"},"left_turn_5","left_turn_5","flat_to_down_25","down_25","down_25_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_right_bank","banked_right_turn_5","banked_right_turn_5","right_bank_to_flat","flat_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_25","left_v… (1490 chars){"circuit_closed":false,"cursor":{"bank":0,"dir":2,"slope":0,"x":41,"y":45,"z":128},"placed_this_call":74,"total_placed":74}
Rebuilding with a slightly lower lift (frees intensity headroom) plus two corkscrew inversions in the tail.
{"demolished":0}
{"dir":0,"ride_type":51,"x":62,"y":50}{"cursor":{"bank":0,"dir":0,"slope":0,"x":62,"y":50,"z":112},"ride_id":0}
{"pieces":["begin_station","middle_station","middle_station","end_station",{"chain":true,"piece":"flat_to_up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25_to_flat"},"left_turn_5","left_turn_5","flat_to_down_25","down_25","down_25_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_right_bank","banked_right_turn_5","banked_right_turn_5","right_bank_to_flat","flat_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_25","left_v… (1490 chars){"circuit_closed":false,"cursor":{"bank":0,"dir":2,"slope":0,"x":41,"y":45,"z":128},"placed_this_call":74,"total_placed":74}
{"pieces":["left_corkscrew_up","right_corkscrew_down","right_corkscrew_up","left_corkscrew_down","brakes","brakes","brakes","brakes","brakes","brakes","brakes","brakes","brakes","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_down_25","down_25_to_left_bank","banked_left_turn_5","banked_left_turn_5","left_bank_to_flat"]}{"circuit_closed":true,"cursor":{"bank":0,"dir":0,"slope":0,"x":62,"y":50,"z":112},"placed_this_call":24,"total_placed":98}
Closed with 6 inversions. Testing:
{"bounds":{"max_tile_x":66,"max_tile_y":50,"max_z":392,"min_tile_x":25,"min_tile_y":39,"min_z":112},"placed_pieces":["begin_station","middle_station","middle_station","end_station",{"chain":true,"t":"flat_to_up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25_to_flat"},"left_turn_5","left_turn_5","flat_to_down_25","down_25","down_25_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_right_bank","banked_right_turn_5","banked_right_turn_5","right_bank_to_flat","flat_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","do… (2514 chars)
Train stalled (no rating). Reverting to a safe, proven layout with banked ending:
{"demolished":0}
{"dir":0,"ride_type":51,"x":62,"y":50}{"cursor":{"bank":0,"dir":0,"slope":0,"x":62,"y":50,"z":112},"ride_id":0}
{"pieces":["begin_station","middle_station","middle_station","end_station",{"chain":true,"piece":"flat_to_up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25"},{"chain":true,"piece":"up_25_to_flat"},"left_turn_5","left_turn_5","flat_to_down_25","down_25","down_25_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_right_bank","banked_right_turn_5","banked_right_turn_5","right_bank_to_flat","flat_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_25","left_v… (1836 chars){"circuit_closed":false,"cursor":{"bank":0,"dir":2,"slope":2,"x":49,"y":45,"z":152},"placed_this_call":82,"rejection":{"error":"Twister Roller Coaster 1 in the way","index":82,"piece":"up_25_to_flat"},"total_placed":82}
{"cursor":{"bank":0,"dir":2,"slope":2,"x":48,"y":45,"z":136},"pieces_placed":81,"removed":"up_25"}
{"cursor":{"bank":0,"dir":2,"slope":0,"x":47,"y":45,"z":128},"pieces_placed":80,"removed":"flat_to_up_25"}
{"pieces":["flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","brakes","brakes","brakes","brakes","flat_to_down_25","down_25_to_left_bank","banked_left_turn_5","banked_left_turn_5","left_bank_to_flat"]}{"circuit_closed":true,"cursor":{"bank":0,"dir":0,"slope":0,"x":62,"y":50,"z":112},"placed_this_call":20,"total_placed":100}
{"bounds":{"max_tile_x":66,"max_tile_y":50,"max_z":392,"min_tile_x":25,"min_tile_y":39,"min_z":112},"placed_pieces":["begin_station","middle_station","middle_station","end_station",{"chain":true,"t":"flat_to_up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25_to_flat"},"left_turn_5","left_turn_5","flat_to_down_25","down_25","down_25_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_right_bank","banked_right_turn_5","banked_right_turn_5","right_bank_to_flat","flat_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","do… (2457 chars)
6.77 banked (beats the earlier 6.66). Saving the key new lesson to memory:
{"file_path":"/home/sandbox/.claude/projects/-workspace/memory/rct2-coaster-contest-tuning.md","new_string":"- R6: 6.77 (int 9.64). Two extra corkscrew pairs added late in the circuit at z=128 (only 16 above\n station) STALLED the train: finish_and_test returned tested:false, excitement null, absurd\n average_speed. Each corkscrew_up climbs +80 z; do not place inversions below ~z 176 / late in the\n layout where speed has bled off. An unbanked left_turn_5 pair into the station cost +0.3 intensity\n and -0.18 excitement vs banked turns (6.66 vs 6.84-class) - always bank the return turns.\n- Closure detail: the circuit only registers closed when the final piece lands the cursor on the\n begin_station tile with bank 0 AND the last piece occupies the tile before it (e.g. end with\n left_bank_to_flat, not with the banked turn itself).\n\n**Next round: the 6.7-7.0 plateau is real.**","old_string":"**Next round: the 6.7-7.0 plateau is real.**","replace_all":false}The file /home/sandbox/.claude/projects/-workspace/memory/rct2-coaster-contest-tuning.md has been updated successfully.
{"bounds":{"max_tile_x":66,"max_tile_y":50,"max_z":392,"min_tile_x":25,"min_tile_y":39,"min_z":112},"placed_pieces":["begin_station","middle_station","middle_station","end_station",{"chain":true,"t":"flat_to_up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25"},{"chain":true,"t":"up_25_to_flat"},"left_turn_5","left_turn_5","flat_to_down_25","down_25","down_25_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_right_bank","banked_right_turn_5","banked_right_turn_5","right_bank_to_flat","flat_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_25","up_25","up_25_to_flat","flat_to_down_25","down_25","do… (2457 chars)
Round 6 done — best banked result stands at **excitement 6.77**. What happened this round: - **6.66** first (safe rebuild of my known layout, but an unbanked return turn pushed intensity to 9.90). - **Failed experiment:** added two extra corkscrew pairs (6 inversions) late in the circuit at z=128 — the train stalled, `tested: false`, no rating. Each corkscrew_up climbs +80z and there wasn't enough speed left. - **6.77 final:** 100-piece steel twister — 16-piece chain lift to z=392, a 24-step first drop through a down_60, 3 vertical loops + 1 corkscrew pair (4 inversions), banked helical turns, airtime hops, and a banked return into the station. Intensity 9.64 (just under the 10 cliff), nausea 5.91, similarity 0.38 (safely below the 0.5 penalty). Best coaster: a 708-length steel twister with a 24-step first drop and 4 inversions — **excitement 6.77, intensity 9.64**.