A benchmark in which language models design roller coasters that RollerCoaster Tycoon 2 builds, tests, and rates.
{"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)
I'll start by understanding the piece catalog and geometry to plan a closed circuit.
{"dir":1}{"deltas":[{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":0,"piece":"flat","slope_out":0},{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":0,"piece":"end_station","slope_out":0},{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":0,"piece":"begin_station","slope_out":0},{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":0,"piece":"middle_station","slope_out":0},{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":16,"piece":"up_25","slope_out":2},{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":64,"piece":"up_60","slope_out":4},{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":8,"piece":"flat_to_up_25","slope_out":2},{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":32,"piece":"up_25_to_up_60","slope_out":4},{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":32,"piece":"up_60_to_up_25","slope_out":2},{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":8,"piece":"up_25_to_flat","slope_out":0},{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":-16,"piece":"down_25","slope_out":6},{"bank_out":0,"dir_out":1,"dx_tiles":0,"dy_tiles":1,"dz":-64,"piece":"down_60","slope_out":8},{"bank_out":0,"dir_out":1,"dx_tiles":0,"d… (7346 chars)
{"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)
{"dir":3}{"deltas":[{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":0,"piece":"flat","slope_out":0},{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":0,"piece":"end_station","slope_out":0},{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":0,"piece":"begin_station","slope_out":0},{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":0,"piece":"middle_station","slope_out":0},{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":16,"piece":"up_25","slope_out":2},{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":64,"piece":"up_60","slope_out":4},{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":8,"piece":"flat_to_up_25","slope_out":2},{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":32,"piece":"up_25_to_up_60","slope_out":4},{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":32,"piece":"up_60_to_up_25","slope_out":2},{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":8,"piece":"up_25_to_flat","slope_out":0},{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":-16,"piece":"down_25","slope_out":6},{"bank_out":0,"dir_out":3,"dx_tiles":0,"dy_tiles":-1,"dz":-64,"piece":"down_60","slope_out":8},{"bank_out":0,"dir_out":3,"dx… (7397 chars)
Let me get the full geometry for all directions so I can plan a closed circuit precisely.
{"dir":0,"ride_type":51,"x":40,"y":80}{"cursor":{"bank":0,"dir":0,"slope":0,"x":40,"y":80,"z":112},"ride_id":0}
I have the full geometry. Let me plan a simple closed rectangle circuit and bank a score early, then iterate. I'll build west of the lake at (40,80) facing dir 0 (-x).
{"pieces":["begin_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_to_flat"}]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":29,"y":80,"z":224},"placed_this_call":11,"total_placed":11}
Now I'll build a simple closed circuit quickly to bank a score. Starting at (40,100), facing -x (dir 0), with 3 station pieces, then a lift, drop, one vertical loop, boosters, and a return leg.
{"pieces":["flat_to_down_25","down_25","down_25","down_25","down_25","down_25","down_25","down_25_to_flat","right_turn_1"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":21,"y":80,"z":112},"placed_this_call":8,"rejection":{"error":"ride type 51 has no artwork for this piece: it would build and rate but render as nothing (invisible track). valid_next_pieces lists what this ride can draw here","index":8,"piece":"right_turn_1"},"total_placed":19}
At the top of the lift (29,80, z224). Now I'll build a big drop and a rectangular return loop that ends back at (40,80) dir0. Placing the drop first.
The tight turn isn't in this ride's artwork set. Let me check what's available.
{"cursor":{"bank":0,"dir":0,"slope":0,"x":21,"y":80,"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"]}
{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":21,"y":80,"z":112},"finalized":false,"pieces_placed":19,"placed_pieces":["begin_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_to_flat"},"flat_to_down_25","down_25","down_25","down_25","down_25","down_25","down_25","down_25_to_flat"],"ride_id":0,"start":{"bank":0,"dir":0,"slope":0,"x":40,"y":80,"z":112},"total_cost":15222}
The tight turns aren't in this ride's artwork set. Let me check my state and plan the return with turn_5/turn_3 pieces.
{"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)
{"pieces":["right_turn_3","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","right_turn_3","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","right_turn_3","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","right_turn_3"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":49,"y":80,"z":112},"placed_this_call":58,"total_placed":77}
Good — the ride lacks artwork for tight turns/loops/helices, but turn_3, turn_5, s-bends, and corkscrews are available. I'll route the return leg using right_turn_3 pieces, landing exactly on the start tile (40,80). Placing the return circuit with boosters to keep momentum.
Place the final flats to close the circuit at (40,80).
{"pieces":["flat","flat","flat","flat","flat","flat","flat","flat","flat"]}{"circuit_closed":true,"cursor":{"bank":0,"dir":0,"slope":0,"x":40,"y":80,"z":112},"placed_this_call":9,"total_placed":86}
Circuit closed at 86 pieces. Let me test it now to bank a score early.
{"bounds":{"max_tile_x":51,"max_tile_y":96,"max_z":248,"min_tile_x":20,"min_tile_y":80,"min_z":112},"placed_pieces":["begin_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_to_flat"},"flat_to_down_25","down_25","down_25","down_25","down_25","down_25","down_25","down_25_to_flat","right_turn_3","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","right_turn_3","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","right_turn_3","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","right_turn_3","flat","flat","flat","flat","flat","flat","flat","flat","flat"],"program":null,"rides":[{"average_speed":538423,"circuit":{"looped":true,"orphan_pieces":0,"total_pieces":86,"walked_pieces":86},"crashed":false,"excitement":1.3799999952316284,"highest_drop":14,"id":0,"int… (1803 chars)
{"demolished":0}
The score is low (excitement 1.38) and it's flagged as similar to a stock design. Let me demolish and rebuild a taller, longer, more original circuit with a 60-degree drop.
{"dir":0,"ride_type":51,"x":45,"y":80}{"cursor":{"bank":0,"dir":0,"slope":0,"x":45,"y":80,"z":112},"ride_id":0}
Score too low and too similar to stock. Demolished. Let me rebuild a taller, faster, more original circuit with a big drop and a corkscrew. I'll plan it precisely: start (45,80) dir0, 3 station pieces, chain lift, turn north, big drop, long run, corkscrew turnaround, and return to close at (45,80).
Now I'll build a taller, faster circuit with a big drop, boosters, and brakes. Start (60,80) facing -x, 3 station pieces, then a taller chain lift.
{"pieces":["begin_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_to_flat"},"flat_to_down_25","down_25","down_25","down_25","down_25","down_25","down_25","down_25","down_25","down_25","down_25_to_flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":20,"y":80,"z":112},"placed_this_call":25,"total_placed":25}
Let me verify my cursor position.
{"circuit_closed":false,"cursor":{"bank":0,"dir":0,"slope":0,"x":20,"y":80,"z":112},"finalized":false,"pieces_placed":25,"placed_pieces":["begin_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_to_flat"},"flat_to_down_25","down_25","down_25","down_25","down_25","down_25","down_25","down_25","down_25","down_25","down_25_to_flat"],"ride_id":0,"start":{"bank":0,"dir":0,"slope":0,"x":45,"y":80,"z":112},"total_cost":20808}
← openrouter_deepseek_deepseek-v4-flash-0731 · 20260731-deepseek-v4-flash-design · all runs