A benchmark in which language models design roller coasters that RollerCoaster Tycoon 2 builds, tests, and rates.
I'll start by checking my memory notes and getting the coaster tools loaded.
{"max_results":10,"query":"select:mcp__coaster__new_ride,mcp__coaster__place_pieces,mcp__coaster__finish_and_test,mcp__coaster__get_state,mcp__coaster__piece_geometry,mcp__coaster__valid_next_pieces"}
{"file_path":"/home/sandbox/.claude/projects/-workspace/memory/rct2-twister-rating-levers.md"}1 --- 2 name: rct2-twister-rating-levers 3 description: "What actually drives excitement for RCT2 twister coasters (ride_type 51) in the coaster-MCP benchmark, derived from engine source" 4 metadata: 5 node_type: memory 6 type: project 7 originSessionId: d2a054e0-f0a0-4d19-ba47-134eb86a0e0f 8 modified: 2026-07-25T03:45:29.042Z 9 --- 10 11 Excitement formula for twister RC lives in `/tmp/openrct2-src/src/openrct2/ride/rtd/coaster/TwisterRollerCoaster.h` 12 (`.RatingsData`) plus `ride/RideRatings.cpp`. Base excitement 3.50. Measured levers, biggest first: 13 14 - **Inversions**: `min(inv,6) * 27.33` pre-multiplier, x0.408 => ~0.67 excitement at 6 inversions. 15 Intensity cost only ~0.27 each. Always go to exactly 6. 16 - **Sharp 60-degree crests** (round-2 win, +0.15): geometry-preserving swaps that raise negative G 17 from -0.85 to -2.43 (excitement clamps at -2.50). Drop-in replacements, same tiles AND same dz: 18 - 6 tiles dz0: `flat_to_up_25,up_25,up_25_to_flat,flat_to_down_25,down_25,down_25_to_flat` 19 -> `flat_to_up_25,up_25_to_up_60,up_60_to_flat,flat_to_down_60,down_60_to_down_25,down_25_to_flat` 20 - 4 tiles dz0: `flat_to_up_25,up_25_to_flat,flat_to_d… (3533 chars)
{"file_path":"/home/sandbox/.claude/projects/-workspace/memory/rct2-proximity-bonus-plan.md"}1 --- 2 name: rct2-proximity-bonus-plan 3 description: "RCT2 proximity excitement bonuses - full scoring table, the loop-under-lift recipe worth ~+0.86, and the turn-direction rule" 4 metadata: 5 node_type: memory 6 type: project 7 originSessionId: ab5792fe-09e5-4bd9-9b33-f24111835f22 8 modified: 2026-07-25T04:00:04.917Z 9 --- 10 11 `BonusProximity` multiplier is 20130/65536 = **x0.307** on `ride_ratings_get_proximity_score` 12 (RideRatings.cpp ~1379). Raw score x 0.307 = rating units; 100 rating units = 1.00 excitement. 13 14 ## Full payout table (RideRatings.cpp:1382-1408), best first 15 | Bonus | helper | hits to cap | excitement | 16 |---|---|---|---| 17 | TRACK_THROUGH_VERTICAL_LOOP | h2(+4, cap6, x20) | **2** | **+0.37** | 18 | INTERSECTING_VERTICAL_LOOP | h3(100) | **1** | **+0.31** | 19 | THROUGH_VERTICAL_LOOP | h2(+4, cap6, x10) | 2 | +0.18 | 20 | OWN_STATION_TOUCH_ABOVE | h3(55) | 1 | +0.17 | 21 | OWN_TRACK_TOUCH_ABOVE | h2(+10, cap15, x3.33) | 5 | +0.15 | 22 | OWN_TRACK_CLOSE_ABOVE | h1(cap5, x6) | 5 | +0.09 | 23 | OWN_STATION_CLOSE_ABOVE | h3(25) | 1 | +0.08 | 24 | SURFACE_TOUCH | h1(cap70, x1.71) | 70 | +0.37 but MEASURED DUD (see below) | 25 26 Loop bonuse… (5620 chars)
Memory has a detailed plan. Round 3's 7.12 build is fully specified in the eval report — I'll rebuild and bank that first, then attempt the loop-under-lift upgrade.
{"dir":0,"ride_type":51,"x":60,"y":60}{"cursor":{"bank":0,"dir":0,"slope":0,"x":60,"y":60,"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_to_flat"},"flat_to_down_25","down_25_to_down_60","down_60","down_60","down_60_to_down_25","down_25_to_flat","flat_to_up_25","left_vertical_loop","down_25_to_flat","flat_to_up_25","up_25","up_25","up_25_to_flat","left_corkscrew_up","left_corkscrew_down","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_down_25","down_25_to_flat","right_corkscrew_up","right_corkscrew_down","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_do… (1923 chars){"circuit_closed":true,"cursor":{"bank":0,"dir":0,"slope":0,"x":60,"y":60,"z":112},"placed_this_call":104,"total_placed":104}
Circuit closed on the first try. Banking the score now.
{"max_results":10,"query":"select:mcp__coaster__finish_and_test,mcp__coaster__best_result,mcp__coaster__demolish,mcp__coaster__undo_piece,mcp__coaster__place_piece"}
{"bounds":{"max_tile_x":64,"max_tile_y":60,"max_z":360,"min_tile_x":26,"min_tile_y":31,"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_to_flat"},"flat_to_down_25","down_25_to_down_60","down_60","down_60","down_60_to_down_25","down_25_to_flat","flat_to_up_25","left_vertical_loop","down_25_to_flat","flat_to_up_25","up_25","up_25","up_25_to_flat","left_corkscrew_up","left_corkscrew_down","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_down_25","down_25_to_flat","right_corkscrew_up","right_corkscrew_down","flat_to_up_25","up_25_to_up_60","u… (2652 chars)
7.12 banked. Now the upgrade from my notes: a vertical loop crossing under the lift hill for proximity bonuses (~+0.5). Round 5's route was accepted by the game but the train valleyed — I need to add energy first. Checking for boosters:
{"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)
Booster confirmed in the catalog. Rebuilding with the loop-under-lift detour plus boosters for the energy fix:
{"demolished":0}
{"dir":0,"ride_type":51,"x":60,"y":60}{"cursor":{"bank":0,"dir":0,"slope":0,"x":60,"y":60,"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_to_flat"},"flat_to_down_25","down_25_to_down_60","down_60","down_60","down_60_to_down_25","down_25_to_flat","flat_to_up_25","left_vertical_loop","down_25_to_flat","flat_to_up_25","up_25","up_25","up_25_to_flat","left_corkscrew_up","left_corkscrew_down","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_down_25","down_25_to_flat","right_corkscrew_up","right_corkscrew_down","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_do… (1679 chars){"circuit_closed":false,"cursor":{"bank":0,"dir":2,"slope":0,"x":56,"y":48,"z":112},"placed_this_call":84,"total_placed":84}
Main layout ends exactly at (56,48,112) dir 2 as predicted. Now the detour:
{"pieces":["left_turn_3","left_turn_3","flat","flat","flat","flat","flat","right_turn_5","booster","booster","booster","flat_to_up_25","up_25_to_flat","flat_to_up_25","right_vertical_loop"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":1,"slope":6,"x":49,"y":62,"z":136},"placed_this_call":15,"total_placed":99}
{"pieces":["down_25_to_flat","right_turn_5","flat_to_down_25","down_25_to_flat","flat","flat","flat","flat","flat","flat","flat","flat","flat","right_turn_5","right_turn_5","flat","flat"]}{"circuit_closed":true,"cursor":{"bank":0,"dir":0,"slope":0,"x":60,"y":60,"z":112},"placed_this_call":17,"total_placed":116}
{"bounds":{"max_tile_x":65,"max_tile_y":65,"max_z":360,"min_tile_x":26,"min_tile_y":48,"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_to_flat"},"flat_to_down_25","down_25_to_down_60","down_60","down_60","down_60_to_down_25","down_25_to_flat","flat_to_up_25","left_vertical_loop","down_25_to_flat","flat_to_up_25","up_25","up_25","up_25_to_flat","left_corkscrew_up","left_corkscrew_down","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_down_25","down_25_to_flat","right_corkscrew_up","right_corkscrew_down","flat_to_up_25","up_25_to_up_60","u… (2729 chars)
The loop at the end has no energy — the train valleys (tested:false). That approach is dead. Pivoting to the other untried lever in my notes: a station flyover at exactly z=128 (`OWN_STATION_TOUCH_ABOVE` + `CLOSE_ABOVE`, ~+0.25).
{"demolished":0}
{"dir":0,"ride_type":51,"x":60,"y":60}{"cursor":{"bank":0,"dir":0,"slope":0,"x":60,"y":60,"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_to_flat"},"flat_to_down_25","down_25_to_down_60","down_60","down_60","down_60_to_down_25","down_25_to_flat","flat_to_up_25","left_vertical_loop","down_25_to_flat","flat_to_up_25","up_25","up_25","up_25_to_flat","left_corkscrew_up","left_corkscrew_down","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_down_25","down_25_to_flat","right_corkscrew_up","right_corkscrew_down","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_do… (1781 chars){"circuit_closed":false,"cursor":{"bank":0,"dir":1,"slope":0,"x":58,"y":60,"z":128},"placed_this_call":94,"rejection":{"error":"Twister Roller Coaster 1 in the way","index":94,"piece":"flat"},"total_placed":94}
Cursor reached the flyover tile but z=128 collides with the station's clearance. Trying one level higher:
{"cursor":{"bank":0,"dir":1,"slope":0,"x":58,"y":59,"z":128},"pieces_placed":93,"removed":"flat"}
{"pieces":["flat_to_up_25","up_25_to_flat"]}{"circuit_closed":false,"cursor":{"bank":0,"dir":1,"slope":0,"x":58,"y":61,"z":144},"placed_this_call":2,"total_placed":95}
Flyover placed at z=136 directly over the station. Closing the circuit:
{"pieces":["flat_to_down_25","down_25","down_25_to_flat","right_turn_3","flat","flat","flat","right_turn_5","right_turn_5","flat","flat"]}{"circuit_closed":true,"cursor":{"bank":0,"dir":0,"slope":0,"x":60,"y":60,"z":112},"placed_this_call":11,"total_placed":106}
{"bounds":{"max_tile_x":65,"max_tile_y":65,"max_z":360,"min_tile_x":26,"min_tile_y":48,"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_to_flat"},"flat_to_down_25","down_25_to_down_60","down_60","down_60","down_60_to_down_25","down_25_to_flat","flat_to_up_25","left_vertical_loop","down_25_to_flat","flat_to_up_25","up_25","up_25","up_25_to_flat","left_corkscrew_up","left_corkscrew_down","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_down_25","down_25_to_flat","right_corkscrew_up","right_corkscrew_down","flat_to_up_25","up_25_to_up_60","u… (2656 chars)
5.53 — lateral G hit 2.92, crossing the 2.80 penalty threshold my notes flag, so intensity blew past 10. Banking that sharp turn to shed lateral G:
{"demolished":0}
{"dir":0,"ride_type":51,"x":60,"y":60}{"cursor":{"bank":0,"dir":0,"slope":0,"x":60,"y":60,"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_to_flat"},"flat_to_down_25","down_25_to_down_60","down_60","down_60","down_60_to_down_25","down_25_to_flat","flat_to_up_25","left_vertical_loop","down_25_to_flat","flat_to_up_25","up_25","up_25","up_25_to_flat","left_corkscrew_up","left_corkscrew_down","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_down_25","down_25_to_flat","right_corkscrew_up","right_corkscrew_down","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_do… (1946 chars){"circuit_closed":false,"cursor":{"bank":0,"dir":1,"slope":0,"x":58,"y":64,"z":112},"placed_this_call":98,"rejection":{"error":"piece enters right-banked but the track here is unbanked; add a banking transition piece first","index":98,"piece":"banked_right_turn_3"},"total_placed":98}
{"pieces":["flat_to_right_bank","banked_right_turn_3","right_bank_to_flat","s_bend_right","right_turn_5","right_turn_5","flat","flat","flat"]}{"circuit_closed":true,"cursor":{"bank":0,"dir":0,"slope":0,"x":60,"y":60,"z":112},"placed_this_call":9,"total_placed":107}
{"bounds":{"max_tile_x":66,"max_tile_y":66,"max_z":360,"min_tile_x":26,"min_tile_y":48,"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_to_flat"},"flat_to_down_25","down_25_to_down_60","down_60","down_60","down_60_to_down_25","down_25_to_flat","flat_to_up_25","left_vertical_loop","down_25_to_flat","flat_to_up_25","up_25","up_25","up_25_to_flat","left_corkscrew_up","left_corkscrew_down","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_down_25","down_25_to_flat","right_corkscrew_up","right_corkscrew_down","flat_to_up_25","up_25_to_up_60","u… (2703 chars)
**7.39** — new best, up from 7.12. The station flyover paid off once the banked turn brought lateral G back to 2.52 (under the 2.80 penalty threshold).
{"bounds":{"max_tile_x":66,"max_tile_y":66,"max_z":360,"min_tile_x":26,"min_tile_y":48,"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_to_flat"},"flat_to_down_25","down_25_to_down_60","down_60","down_60","down_60_to_down_25","down_25_to_flat","flat_to_up_25","left_vertical_loop","down_25_to_flat","flat_to_up_25","up_25","up_25","up_25_to_flat","left_corkscrew_up","left_corkscrew_down","flat_to_down_25","down_25","down_25_to_flat","flat_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_flat","flat_to_up_25","right_vertical_loop","down_25_to_flat","flat_to_up_25","up_25_to_up_60","up_60_to_flat","flat_to_down_60","down_60_to_down_25","down_25_to_flat","right_corkscrew_up","right_corkscrew_down","flat_to_up_25","up_25_to_up_60","u… (2703 chars)
Confirmed as this round's best. Updating memory with what was learned:
{"content":"---\nname: rct2-proximity-bonus-plan\ndescription: \"RCT2 proximity excitement bonuses - measured results: station flyover WORKS (+0.27), loop-under-lift is energy-infeasible, SURFACE_TOUCH is a dud\"\nmetadata:\n node_type: memory\n type: project\n---\n\n`BonusProximity` multiplier is 20130/65536 = **x0.307** on `ride_ratings_get_proximity_score`\n(RideRatings.cpp ~1379). Raw score x 0.307 = rating units; 100 rating units = 1.00 excitement.\n\n## Payout table (RideRatings.cpp:1382-1408), best first\n| Bonus | helper | hits to cap | excitement |\n|---|---|---|---|\n| TRACK_THROUGH_VERTICAL_LOOP | h2(+4, cap6, x20) | 2 | +0.37 |\n| INTERSECTING_VERTICAL_LOOP | h3(100) | 1 | +0.31 |\n| THROUGH_VERTICAL_LOOP | h2(+4, cap6, x10) | 2 | +0.18 |\n| OWN_STATION_TOUCH_ABOVE | h3(55) | 1 | **+0.17 — MEASURED, WORKS** |\n| OWN_TRACK_TOUCH_ABOVE | h2(+10, cap15, x3.33) | 5 | +0.15 |\n| OWN_TRACK_CLOSE_ABOVE | h1(cap5, x6) | 5 | +0.09 |\n| OWN_STATION_CLOSE_ABOVE | h3(25) | 1 | +0.08 |\n| SURFACE_TOUCH | h1(cap70, x1.71) | 70 | MEASURED DUD |\n\n## ROUND 6 WIN: station flyover => 7.12 -> **7.39** (+0.27, matches TOUCH+CLOSE_ABOVE = 0.25)\n**The flyover height is z=136, NOT z=128.*… (4654 chars)The file /home/sandbox/.claude/projects/-workspace/memory/rct2-proximity-bonus-plan.md has been updated successfully.
{"file_path":"/home/sandbox/.claude/projects/-workspace/memory/rct2-twister-rating-levers.md","new_string":"Round 6 best: **7.39 excitement / 9.18 intensity**, 107 pieces, similarity 0.377 — round-3 skeleton's\nfirst 84 pieces with the serpentine tail replaced by a **station flyover at z=136** (proximity\nbonus, +0.27) closed by a *banked* right_turn_3. Full recipe in [[rct2-proximity-bonus-plan]];\nthat file also records the 2.80 lateral-G cliff that cost 1.9 excitement when the turn was unbanked.\n\nRound 3 best: **7.12 excitement / 9.08 intensity**","old_string":"Round 3 best: **7.12 excitement / 9.08 intensity**","replace_all":false}The file /home/sandbox/.claude/projects/-workspace/memory/rct2-twister-rating-levers.md has been updated successfully.
Round 6 done, with a solid improvement over the previous best. **What happened:** 1. **Banked 7.12 first** — rebuilt round 3's proven layout verbatim from the eval report and tested immediately, so there was a floor before experimenting. 2. **Loop-under-lift: dead end, now confirmed.** My notes had this queued as the big untapped lever (~+0.5). The loop *places* fine under the lift hill, but the train can't clear a vertical loop that late in the ride — adding boosters didn't fix it either (`tested:false`, excitement null, train valleying). That's two rounds spent on it; I've written it up as a dead end so it doesn't get retried. 3. **Station flyover: the actual win.** Routing the return leg directly over a station tile earns `OWN_STATION_TOUCH_ABOVE` + `CLOSE_ABOVE`. My notes said z=128; that's wrong — the game rejects it as blocked. **z=136 works.** 4. **One near-miss worth flagging:** the first flyover version scored **5.53**, *worse* than the baseline. The closing `right_turn_3` pushed lateral G to 2.92, past the 2.80 threshold, which drove intensity to 11.33 — over the 10.0 penalty line. Swapping in a banked turn restored lateral G to 2.52 and unlocked the real gain. A single unbanked tight turn was worth −1.9 excitement. **Final: 7.39 excitement / 9.18 intensity / 4.88 nausea**, 107 pieces, 6 inversions, similarity 0.377 (safely under the 0.5 penalty). Up from 7.12. One caveat on the number: the +0.27 gain matches the predicted 0.25 for the two station bonuses closely enough that I'm confident in the mechanism, but I didn't isolate it — the new tail also changed length and drop count slightly, so a small part of the delta may come from those.