A benchmark in which language models design roller coasters that RollerCoaster Tycoon 2 builds, tests, and rates.
I'll start by understanding the available pieces and the environment, then plan a layout.
{"dir":2}{"deltas":[{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":0,"piece":"flat","slope_out":0},{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":0,"piece":"end_station","slope_out":0},{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":0,"piece":"begin_station","slope_out":0},{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":0,"piece":"middle_station","slope_out":0},{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":16,"piece":"up_25","slope_out":2},{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":64,"piece":"up_60","slope_out":4},{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":8,"piece":"flat_to_up_25","slope_out":2},{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":32,"piece":"up_25_to_up_60","slope_out":4},{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":32,"piece":"up_60_to_up_25","slope_out":2},{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":8,"piece":"up_25_to_flat","slope_out":0},{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":-16,"piece":"down_25","slope_out":6},{"bank_out":0,"dir_out":2,"dx_tiles":1,"dy_tiles":0,"dz":-64,"piece":"down_60","slope_out":8},{"bank_out":0,"dir_out":2,"dx_tiles":1,"d… (7346 chars)
{"ride_type":51}{"designs":[{"name":"Atomizer","piece_count":126,"ride_type":51},{"name":"Contortion","piece_count":108,"ride_type":51},{"name":"Crush Hour","piece_count":94,"ride_type":51},{"name":"Flashback","piece_count":143,"ride_type":51},{"name":"Frightmare","piece_count":112,"ride_type":51},{"name":"Helixius","piece_count":82,"ride_type":51},{"name":"Liberty Loop","piece_count":51,"ride_type":51},{"name":"Lunar Launcher","piece_count":149,"ride_type":51},{"name":"Medusa","piece_count":159,"ride_type":51},{"name":"Silvertwist","piece_count":80,"ride_type":51},{"name":"Time Twister","piece_count":96,"ride_type":51}],"note":"final score is penalized for similarity to any of these designs"}
{"dir":2,"ride_type":51,"x":35,"y":60}{"cursor":{"bank":0,"dir":2,"slope":0,"x":35,"y":60,"z":112},"ride_id":0}
I have the piece catalog. Now let me plan a layout: **Design plan** (staying west of the lake at x≤64): - Station at (35,60) facing east (+x) - Chain lift up to z=128, steep 60° first drop - Vertical loop #1 - Climb to z=96 (no chain, uses speed), banked 180° turnaround - Second drop (96), vertical loop #2 - Airtime hops on the return leg, final 180° turn back into the station Let me verify the ground area with a screenshot and start the ride:
{"pieces":["begin_station","middle_station","end_station","flat",{"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"},"up_25_to_flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":2,"slope":0,"x":48,"y":60,"z":240},"placed_this_call":13,"total_placed":13}
Lift hill done — now at z=240. Placing the first drop:
{"pieces":["flat_to_down_60","down_60","down_60_to_down_25","down_25_to_flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":2,"slope":0,"x":52,"y":60,"z":112},"placed_this_call":4,"total_placed":17}
Drop complete at ground level. Checking the loop is accepted here:
{"cursor":{"bank":0,"dir":2,"slope":0,"x":52,"y":60,"z":112},"valid_pieces":["flat","end_station","begin_station","middle_station","flat_to_up_25","left_turn_5","right_turn_5","flat_to_left_bank","flat_to_right_bank","s_bend_left","s_bend_right","left_turn_3","right_turn_3","left_corkscrew_up","right_corkscrew_up","flat_to_up_60","brakes","booster"]}
The vertical loop isn't offered right after the slope transition. Let me add a flat run-up piece and re-check:
{"piece":"flat"}{"circuit_closed":false,"cost":600,"cursor":{"bank":0,"dir":2,"slope":0,"x":53,"y":60,"z":112},"pieces_placed":18,"placed":"flat"}
{"cursor":{"bank":0,"dir":2,"slope":0,"x":53,"y":60,"z":112},"valid_pieces":["flat","end_station","begin_station","middle_station","flat_to_up_25","left_turn_5","right_turn_5","flat_to_left_bank","flat_to_right_bank","s_bend_left","s_bend_right","left_turn_3","right_turn_3","left_corkscrew_up","right_corkscrew_up","flat_to_up_60","brakes","booster"]}
{"pieces":["flat_to_up_25","up_25","up_25","up_25","up_25","up_25","up_25_to_flat","flat_to_left_bank","banked_left_turn_3","banked_left_turn_3","left_bank_to_flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":59,"y":63,"z":208},"placed_this_call":11,"total_placed":29}
Banked turnaround done at z=208. Now the second drop back to ground:
{"pieces":["flat_to_down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":54,"y":63,"z":112},"placed_this_call":5,"total_placed":34}
{"cursor":{"bank":0,"dir":0,"slope":0,"x":54,"y":63,"z":112},"valid_pieces":["flat","end_station","begin_station","middle_station","flat_to_up_25","left_turn_5","right_turn_5","flat_to_left_bank","flat_to_right_bank","s_bend_left","s_bend_right","left_turn_3","right_turn_3","left_corkscrew_up","right_corkscrew_up","flat_to_up_60","brakes","booster"]}
Corkscrew is available. Placing the corkscrew pair (2 inversions):
{"piece":"right_corkscrew_up"}{"circuit_closed":false,"cost":2200,"cursor":{"bank":15,"dir":1,"slope":0,"x":53,"y":65,"z":192},"pieces_placed":35,"placed":"right_corkscrew_up"}
{"piece":"left_corkscrew_down"}{"circuit_closed":false,"cost":2200,"cursor":{"bank":0,"dir":0,"slope":0,"x":51,"y":66,"z":112},"pieces_placed":36,"placed":"left_corkscrew_down"}
Corkscrew pair placed — now the return leg with airtime hops:
{"pieces":["flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":30,"y":66,"z":112},"placed_this_call":21,"total_placed":57}
Now the final turnaround and closing approach:
{"pieces":["left_turn_5","left_turn_5","s_bend_right","flat"]}{"circuit_closed":true,"cursor":{"bank":0,"dir":2,"slope":0,"x":35,"y":60,"z":112},"placed_this_call":4,"total_placed":61}
**Circuit closed!** Cursor back at start (35,60). Testing immediately to bank a score:
{"bounds":{"max_tile_x":62,"max_tile_y":66,"max_z":264,"min_tile_x":28,"min_tile_y":60,"min_z":112},"placed_pieces":["begin_station","middle_station","end_station","flat","flat_to_up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25_to_flat","flat_to_down_60","down_60","down_60_to_down_25","down_25_to_flat","flat","flat_to_up_25","up_25","up_25","up_25","up_25","up_25","up_25_to_flat","flat_to_left_bank","banked_left_turn_3","banked_left_turn_3","left_bank_to_flat","flat_to_down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","left_turn_5","left_turn_5","s_bend_right","flat"],"program":null,"rides":[{"average_speed":459006,"crashed":false,"excitement":5.71999979019165,"highest_drop":15,"id":0,"intensity":5.329999923706055,"max_lateral_g":2.109999895095825,"max_negative_g":-0.7099999785423279,"max_positive_g":3.690000057220459,"max_speed":1068356,"nausea":2.680000066757202,"num_drops":5… (1540 chars)
**Banked: excitement 5.72, intensity 5.33, no crash, similarity 0.4** — safe under all limits with lots of headroom. Now I'll push harder: taller lift (z=288), bigger 176 first drop, faster corkscrews, and a third airtime hop. I'll shift the whole layout west to keep clear of the lake:
{"demolished":0}
{"dir":2,"ride_type":51,"x":31,"y":60}{"cursor":{"bank":0,"dir":2,"slope":0,"x":31,"y":60,"z":112},"ride_id":0}
{"pieces":["begin_station","middle_station","end_station","flat",{"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"},"up_25_to_flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":2,"slope":0,"x":47,"y":60,"z":288},"placed_this_call":16,"total_placed":16}
Lift at z=288. First drop (176 units):
{"pieces":["flat_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25","down_25_to_flat","flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":2,"slope":0,"x":55,"y":60,"z":112},"placed_this_call":8,"total_placed":24}
{"pieces":["flat_to_up_25","up_25","up_25","up_25","up_25","up_25","up_25_to_flat","flat_to_left_bank","banked_left_turn_3","banked_left_turn_3","left_bank_to_flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":61,"y":63,"z":208},"placed_this_call":11,"total_placed":35}
Second drop and corkscrew pair:
{"pieces":["flat_to_down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":53,"y":66,"z":112},"placed_this_call":7,"total_placed":42}
Return leg with three airtime hops:
{"pieces":["flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":26,"y":66,"z":112},"placed_this_call":27,"total_placed":69}
{"pieces":["left_turn_5","left_turn_5","s_bend_right","flat"]}{"circuit_closed":true,"cursor":{"bank":0,"dir":2,"slope":0,"x":31,"y":60,"z":112},"placed_this_call":4,"total_placed":73}
{"bounds":{"max_tile_x":64,"max_tile_y":66,"max_z":312,"min_tile_x":24,"min_tile_y":60,"min_z":112},"placed_pieces":["begin_station","middle_station","end_station","flat","flat_to_up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25_to_flat","flat_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25","down_25_to_flat","flat","flat_to_up_25","up_25","up_25","up_25","up_25","up_25","up_25_to_flat","flat_to_left_bank","banked_left_turn_3","banked_left_turn_3","left_bank_to_flat","flat_to_down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","left_turn_5","left_turn_5","s_bend_right","flat"],"program":null,"rides":[{"average_speed":505898,"crashed":false,"excitement":5.920000076293945,"highest_drop":21,"id":0,"intensity":6.230000019073486,"max_lateral_g":2.48000001907… (1713 chars)
{"demolished":0}
{"dir":2,"ride_type":51,"x":31,"y":60}{"cursor":{"bank":0,"dir":2,"slope":0,"x":31,"y":60,"z":112},"ride_id":0}
{"pieces":["begin_station","middle_station","end_station","flat",{"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"},"up_25_to_flat","flat_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25","down_25_to_flat","flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":2,"slope":0,"x":55,"y":60,"z":112},"placed_this_call":24,"total_placed":24}
{"pieces":["flat_to_up_25","up_25","up_25","up_25","up_25","up_25","up_25_to_flat","flat_to_left_bank","banked_left_turn_3","banked_left_turn_3","left_bank_to_flat","flat_to_down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":48,"y":66,"z":112},"placed_this_call":23,"total_placed":47}
{"pieces":["left_corkscrew_up","right_corkscrew_down","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat","flat","flat","flat_to_left_bank","banked_left_turn_3","banked_left_turn_3","left_bank_to_flat","flat"]}{"circuit_closed":true,"cursor":{"bank":0,"dir":2,"slope":0,"x":31,"y":60,"z":112},"placed_this_call":23,"total_placed":70}
{"bounds":{"max_tile_x":64,"max_tile_y":66,"max_z":312,"min_tile_x":27,"min_tile_y":60,"min_z":112},"placed_pieces":["begin_station","middle_station","end_station","flat","flat_to_up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25","up_25_to_flat","flat_to_down_60","down_60","down_60_to_down_25","down_25","down_25","down_25","down_25_to_flat","flat","flat_to_up_25","up_25","up_25","up_25","up_25","up_25","up_25_to_flat","flat_to_left_bank","banked_left_turn_3","banked_left_turn_3","left_bank_to_flat","flat_to_down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","left_corkscrew_up","right_corkscrew_down","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat","flat","flat","flat_to_left_bank","banked_left_turn_3","banked_left_turn_3","left_bank_to_flat","flat"],"program":null,"rides":[{"average_speed":487752,"crashed":false,"excitement":6.079999923706055,"highest_drop":21,"id":0,"intensity":6.61000… (1710 chars)
6.08 now. Key insight: the lake only occupies y=55-75, so the entire **south region (y<55) is open even at high x** — I can build a much bigger ride there with a 208-unit first drop for higher top speed. Building v4:
{"demolished":0}
{"dir":2,"ride_type":51,"x":35,"y":40}{"cursor":{"bank":0,"dir":2,"slope":0,"x":35,"y":40,"z":112},"ride_id":0}
{"pieces":["begin_station","middle_station","end_station","flat",{"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"},"up_25_to_flat","flat_to_down_60","down_60","down_60","down_60_to_down_25","down_25","down_25_to_flat","flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":2,"slope":0,"x":60,"y":40,"z":112},"placed_this_call":25,"total_placed":25}
{"pieces":["flat_to_up_25","up_25","up_25","up_25","up_25","up_25","up_25_to_flat","flat_to_left_bank","banked_left_turn_3","banked_left_turn_3","left_bank_to_flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":66,"y":43,"z":208},"placed_this_call":11,"total_placed":36}
{"pieces":["flat_to_down_60","down_60_to_down_25","down_25","down_25","down_25_to_flat","right_corkscrew_up","left_corkscrew_down"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":58,"y":46,"z":112},"placed_this_call":7,"total_placed":43}
West return leg with three hops:
{"pieces":["flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat_to_up_25","up_25_to_flat","flat_to_down_25","down_25_to_flat","flat","flat","flat","flat","flat","flat","flat","flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":33,"y":46,"z":112},"placed_this_call":25,"total_placed":68}
← openrouter_moonshotai_kimi-k3 · 20260724-kimi-k3-twister · all runs