--- title: A Unity City Where Bad PLC Code Made Cars Crash description: A REST-controlled traffic-light sim for a cybersecurity event. Bad PLC code showed up as car crashes, the most honest feedback loop I've shipped. date: 2026-05-01 projectPeriod: 'July-August 2018' thumbnail: src: ./_assets/city-simulation.jpg alt: Screenshot of a Unity traffic simulation. tags: ['simulation', 'systems'] role: Simulation author stack: ['Unity', 'C#', 'REST API', 'Blender'] outcome: Visible consequences for an otherwise abstract PLC challenge audience: technical links: [] --- A small city in Unity where the traffic lights were driven by a REST API. Contestants in a PLC cybersecurity event would write control logic; bad logic made cars crash, and they'd watch it happen. Three things are worth saying about it: - **Visual feedback was the whole point.** Most security challenges punish wrong answers with a red "incorrect." This one punished them with car wrecks, and people learned faster. - **Server-client, all decisions on the server.** Every agent's behaviour was computed centrally and broadcast. The harder problem wasn't simulation; it was getting the broadcast to be fault-tolerant on the conference Wi-Fi without flooding it. - **Built it solo, including the models and animations in Blender.** Not a flex, just context for why everything's a little janky. There was also a HUD overlay for tweets, which felt clever at the time and dated horribly. Skip that part.