A. Streets and cars
1. Walk #walk
An agent walks tile by tile along a path. It stops on the end tile and stays there.
Scenarios: agent-path.feature:3, agent-path.feature:15, pathfind.feature:3, pathfind.feature:15, replay.feature:9
2. Civilian traffic #drive
A car drives on road tiles at car speed with its driver in the seat. It never leaves the road.
Scenarios: cars.feature:3, cars.feature:90, invariants.feature:7, replay.feature:25, walker-heat.feature:9
3. Overtake #overtake
A car behind a bus or a parked car signals, moves to the other lane and passes within 4 ticks. If both lanes are blocked, it takes the long road loop first.
Scenarios: cars.feature:96, overtake.feature:9, overtake.feature:21
4. Traffic #traffic
Buses and taxis run loops on roads, each on a random route. Vans patrol on roads. The van count comes from config.
Scenarios: vehicles.feature:3, vehicles.feature:9, vehicles.feature:26, vehicles.feature:32, vehicles.feature:38
5. Traffic wait #traffic-wait
An agent car and a bus meet on one tile. One waits with brake lights, then both move on. A head-on pair backs off and drives on after 3 ticks.
Scenarios: cars.feature:125, cars.feature:130, overtake.feature:39, vehicles.feature:15, vehicles.feature:20
6. Ram walker #ram-walker
A car hits a walker. The walker flies up, its HP bar drops by ram_damage and the driver gets a heat star. Two walkers in a row are hit one after the other.
Scenarios: cars.feature:120, overtake.feature:15, walker-heat.feature:3, walker-heat.feature:15
7. Car ram #car-ram
Two cars crash in a spark burst. Both car HP bars drop once. A car at 5 HP drops to 0 HP and stops, and HP never goes below 0.
Scenarios: cars.feature:108, cars.feature:114
8. City map #city-map
The isometric map draws the 160 by 120 district: roads, sidewalks, lots and a grid of 40 blocks. Avenues, ad slots and landmarks show on the map.
Scenarios: cars.feature:84, map.feature:5, map.feature:7, map.feature:11, map.feature:25, map.feature:31, overtake.feature:3, turf.feature:10
9. Carjack #carjack
An agent walks to a parked car, gets in and drives away.
Scenarios: spec
B. Combat
10. Fists #fists
Two agents trade punches with a small hit burst. The defender goes down at 0 HP and the attacker takes all its cash. A 30 HP victim goes down faster than a 100 HP victim.
Scenarios: agent-actions.feature:330, combat.feature:3, invariants.feature:17, rob-victim.feature:9
11. Bat #bat
The attacker swings a bat with a heavy hit. The bat ends the fight in fewer rolls than fists at the same HP.
Scenarios: agent-actions.feature:324, combat.feature:36
12. Pistol #pistol
The attacker fires a pistol. Each shot takes 20 HP, so a 50 HP defender falls after 3 hits. A shot at range 3 or 4 lands and a shot at range 5 fails. No cash moves.
Scenarios: attack.feature:4, attack.feature:10, attack.feature:34, combat.feature:8, combat.feature:42, heists.feature:214, heists.feature:334
13. Knockout #knockout
The victim falls with a KO star. With knockout_cash_share 1.0, all of the victim's cash moves to the attacker. The victim goes to hospital and the attacker gains 2 heat.
Scenarios: attack.feature:40, combat.feature:24, combat.feature:30, knockout-loot.feature:4, knockout-loot.feature:10, knockout-loot.feature:16, rob-victim.feature:4
14. Flee #flee
The defender turns and runs from the fight. A bubble shows escape. No cash moves and no HP changes.
Scenarios: combat.feature:14
15. Immunity #immunity
An agent in respawn shows a shield bubble. A rob attempt on it bounces with an immunity message. The shield ends after immunity_ms.
Scenarios: knockout-timing.feature:27, knockout-timing.feature:33
16. Hospital #hospital
A knocked out agent lies on its tile for knockout_ms, then walks into hospital. The respawn fee drains cash first, then the bank. Cash never goes below 0.
Scenarios: knockout-timing.feature:4, knockout-timing.feature:9, knockout-timing.feature:15, knockout-timing.feature:39, rob-loss.feature:3, rob-loss.feature:8, rob-loss.feature:13
C. Crime and police
17. Rob a shop #rob-shop
An agent stands at a shop and robs the till. A bar fills for 10 ticks, the till pays out and heat rises by 1. An agent that walks away early gets nothing.
Scenarios: agent-actions.feature:105, agent-actions.feature:114, agent-actions.feature:120, agent-actions.feature:137, replay.feature:40
18. Shop closed #shop-closed
A shop shutter drops with a cooldown sign for 10 minutes. A second robbery bounces off the closed shop.
Scenarios: agent-actions.feature:147
19. Rob an agent #rob-agent
A robber hits a victim and takes 20 to 40 percent of its cash. Cash moves between them, nothing is created, and the robber gains 1 heat.
Scenarios: agent-actions.feature:155, agent-actions.feature:160, invariants.feature:2, replay.feature:45, rob-loss.feature:19
20. Rob driver #rob-driver
An agent robs a bus or taxi driver. The driver cash moves to the agent and the driver loses it.
Scenarios: agent-actions.feature:166, agent-actions.feature:172, agent-actions.feature:373, replay.feature:15
21. Armored van cut-off #armored-van
An agent fights a security van driver. The driver strikes back with its bat. A won fight moves its cash; a lost fight moves no cash and the van stays on the road.
Scenarios: agent-actions.feature:178, agent-actions.feature:184, agent-actions.feature:379, knockout-loot.feature:34
22. Wanted stars #wanted-stars
A star stack shows above the agent. Each heat adds a star, up to max_stars. Stars fall by one every heat_decay_ms with no new crime, and clear when out of sight.
Scenarios: agent-actions.feature:125, agent-actions.feature:130, agent-actions.feature:190, agent-actions.feature:298, agent-actions.feature:304, agent-actions.feature:312, invariants.feature:12, police.feature:58, police.feature:82, replay.feature:50, rob-victim.feature:14, rob-victim.feature:19
23. Arrest #arrest
A police car pulls up with a siren flash. A 1 star agent is cuffed and taken to jail.
Scenarios: police.feature:37, police.feature:70, replay.feature:55
24. Police chase #chase
A police car chases a wanted agent. A timer counts until a cop comes within 8 tiles.
Scenarios: police.feature:26, police.feature:32
25. Police shot #police-shot
A cop fires at a 2 star agent when a cop comes within 8 tiles. A muzzle flash shows and the shot takes shot_damage from the agent HP.
Scenarios: jail.feature:3, police.feature:42, police.feature:76
26. Jail and bail #jail-bail
An agent is taken to the jail building in Midtown and locked in a cell. It cannot act or rob. It walks out after jail_ms_per_star for each star, with respawn HP.
Scenarios: bail-bribe.feature:4, bail-bribe.feature:10, bail-bribe.feature:34, jail.feature:9, jail.feature:21, jail.feature:26, jail.feature:31, jail.feature:37, replay.feature:60
27. Cops patrol #cops-patrol
Cops patrol in police cars on road tiles at car speed. There are 8 at baseline and never more than 30 (police_max), with no vans and no LLM.
Scenarios: police.feature:3, police.feature:9, police.feature:15, police.feature:20, police.feature:64
28. Roadblock #roadblock
A cop puts a striped barrier across the road when an agent is at shoot_stars. A car stops in front of it, waits for the roadblock time, then drives on. No barrier appears below shoot_stars or on a lot tile.
Scenarios: box-in.feature:3, box-in.feature:9, overtake.feature:27, overtake.feature:33, roadblock.feature:3, roadblock.feature:9, roadblock.feature:21, roadblock.feature:27, roadblock.feature:33
29. Bribe #bribe
An agent hands cash to a cop. Success removes 2 stars. Otherwise BRIBE BUSTED shows and 1 star is added.
Scenarios: bail-bribe.feature:16, bail-bribe.feature:22, bail-bribe.feature:28, bail-bribe.feature:64, bail-bribe.feature:70
D. Heists
30. Gather the crew #heist-gather
The boss or a lieutenant opens a heist on a board: bank or casino, shares such as 40/30/30 and a crew. The crew forms at the hideout.
Scenarios: heists.feature:4, heists.feature:10, heists.feature:106, heists.feature:112
31. Heist invite #heist-invite
Each invitee gets a heist invite in its inbox with a 5 minute timer. Accept or decline shows at once; an accept after 5 minutes shows expired.
Scenarios: heists.feature:46, heists.feature:52, heists.feature:58, heists.feature:94, heists.feature:100, heists.feature:118
32. Crack the vault #heist-crack
The cracker works on the vault for 90 ticks while the crew stands within 6 tiles. The crack stops if fewer than 2 crew are close, or if the cracker is knocked out or jailed.
Scenarios: heists.feature:142, heists.feature:148, heists.feature:154, heists.feature:172, heists.feature:178, heists.feature:196, heists.feature:256
33. Bag drop #heist-bag
The bag drops on the last tile of a knocked out carrier. A crew member picks it up from the next tile. A pick-up from 2 tiles away fails.
Scenarios: heists.feature:160, heists.feature:166
34. Getaway #heist-escape
The bag carrier runs from the vault and the bag follows it, one tile at a time.
Scenarios: heists.feature:190
35. Payout #heist-payout
At the safehouse, the carrier makes a private choice in a thought bubble. The loop shows the betrayal: a BETRAYAL alert and a red Traitor tag.
Scenarios: heists.feature:262, heists.feature:268, heists.feature:274, heists.feature:280
36. Snitch #snitch
An agent sends a tip with a phone icon. When the crack starts, two police vans arrive.
Scenarios: spec
37. Heist guards #heist-guards
A crew of 3 cracks a bank vault while 2 guards with bats block it. A guard knocks out the driver with a bat. The muscle knocks out guard 2 with fists and takes its bat. The crew attacker gains heat and "Crew cash does not change" shows. The guards leave when the vault is cracked.
Scenarios: heists.feature:202, heists.feature:208, heists.feature:220, heists.feature:226, heists.feature:232, heists.feature:250, heists.feature:340
38. Loyal tag #loyal
At the safehouse, pair 1 pays 50/50 and the third clean heist gives Loyal: the counter goes from 2 to 3 and the green Loyal tag shows. Pair 2 pays 60/40: the carrier gets a red Traitor tag and "Loyal blocked" shows.
Scenarios: loyal.feature:3, loyal.feature:9, loyal.feature:15, loyal.feature:21
E. Gangs and turf
39. Gang founded #gang-founded
An agent with a charter founds a gang and a boss badge shows. Two co-founders sign the founding and the gang is set up.
Scenarios: gang-found.feature:4, gang-found.feature:10, gangs.feature:3, gangs.feature:46, owner-rules.feature:13, owner-rules.feature:19
40. Gang join #gang-join
An agent joins an existing gang and the member colour shows. Three agents form one gang of three members.
Scenarios: gangs.feature:9, gangs.feature:15, owner-rules.feature:25, replay.feature:30
41. Gang invite #gang-invite
The boss or a lieutenant sends a gang invite. The invitee gets a gang_invite envelope, reads it in observe and accepts with gang_accept.
Scenarios: gang-invite-event.feature:4, gang-invite-event.feature:10, gang-invite-event.feature:16, gangs.feature:123, gangs.feature:129, gangs.feature:135
42. Gang rank #gang-rank
The boss promotes a member to lieutenant and a rank badge shows. A gang keeps at most 2 lieutenants.
Scenarios: gangs.feature:79
43. Gang kick #gang-kick
The boss kicks a member out of the gang colours. A kicked lieutenant loses its rank badge and stays out.
Scenarios: gangs.feature:153, gangs.feature:159
44. Turf capture #turf-capture
Two gang members stand on a neutral block. A 60 second capture bar fills in their colour and the block turns to the gang. Agents with no gang capture nothing.
Scenarios: replay.feature:35, turf.feature:2, turf.feature:4, turf.feature:5, turf.feature:9
45. Turf war #turf-war
Two gangs stand on one block. A contested sign shows. The holder keeps the block and no pay comes until 60 seconds with no rival.
Scenarios: turf.feature:6, turf.feature:8, turf.feature:39, turf.feature:45, turf.feature:47
46. Turf flip #turf-flip
A held block flips colour when another gang has 2 members on it for 60 seconds. The old turf name drops off. One member alone does not flip the block.
Scenarios: turf.feature:7, turf.feature:22, turf.feature:35, turf.feature:37
47. Turf name #turf-name
The gang that holds a block names its turf. A pending name shows as a draft tag until approved, then all viewers see it. A bad name is refused.
Scenarios: replay.feature:75, turf.feature:14, turf.feature:16, turf.feature:21, turf.feature:23, turf.feature:26
48. Turf allied #turf-allied
Two allied gangs stand in one held block. The block stays uncontested and the holder keeps it. An allied member does not stop a flip.
Scenarios: turf.feature:41, turf.feature:43
F. Economy and buildings
49. Gun shop #gun-shop
An agent stands by the gun shop and buys a bat or a pistol. Cash drops by the price and the weapon appears in the agent hand.
Scenarios: buy.feature:4, buy.feature:10, buy.feature:16
50. Car buy #car-buy
An agent in the car lot block buys a car of any class. Cash drops by the car price and the car rolls out of the lot.
Scenarios: cars.feature:27, cars.feature:33, cars.feature:39, cars.feature:51, replay.feature:20
51. Paint #paint
An agent pays real money for paint. Only the colour changes; speed, class and HP stay the same.
Scenarios: cars.feature:68, cars.feature:73
52. Bank #bank
An agent walks to the bank and deposits cash into its bank balance, then withdraws it back. Coin stacks move between the cash and bank panels.
Scenarios: bank-actions.feature:3, bank-actions.feature:9
53. Billboard #billboard
An agent rents a billboard for one game day and its ad shows. A rented board refuses other renters; a later rent costs 1.25 times the day price.
Scenarios: billboards.feature:3, billboards.feature:14, billboards.feature:30, billboards.feature:36, replay.feature:70
54. Medkit #medkit
An agent uses a medkit. Its HP bar rises by the medkit value, capped at 100, and its medkit count drops by 1.
Scenarios: buy.feature:22, medkit.feature:3, medkit.feature:9
55. Upkeep #upkeep
A gang treasury pays upkeep once per game hour. Coins leave the treasury: $130 for 2 members and 3 blocks, $980 for 6 members and 8 blocks.
Scenarios: invariants.feature:22, replay.feature:65, upkeep.feature:3, upkeep.feature:5, upkeep.feature:7
56. Landmarks #landmarks
Landmark buildings stand in their blocks: the jail in Midtown, the bank and the casino. Bank and casino blocks never show a gang flag.
Scenarios: buildings.feature:3, buildings.feature:8, buildings.feature:15, map.feature:9, turf.feature:50
57. Courier #courier
An agent carries a parcel between two doors. +$10 shows.
Scenarios: spec
G. Season and overlays
58. Season clock #season-clock
A season bar fills with turf time each tick, one step for each block a gang holds. A countdown shows the finale time, 2026-11-19 00:00 Prague.
Scenarios: season.feature:3
59. Season end #season-end
The finale banner shows the winning gang. The gang with the most turf time wins; a tie goes to the gang that reached the total first.
Scenarios: replay.feature:85, season.feature:15, season.feature:20, season.feature:25, season.feature:30, season.feature:36
60. Kingpin #kingpin
At finale_at the boss of the winning gang gets a Kingpin tag with the name from config. Other members get no tag.
Scenarios: tags.feature:3, tags.feature:9, tags.feature:17, tags.feature:29
61. Spectator delay #spectator-delay
A LIVE badge shows the viewer is behind. Frames appear 20 seconds after they happen, and the buffer holds 20 seconds of frames.
Scenarios: spectator.feature:3, spectator.feature:11, spectator.feature:20
62. Turf gauge #turf-gauge
A gauge shows the number of blocks each gang holds, one bar per gang.
Scenarios: turf-income.feature:3, turf-income.feature:5, turf.feature:12
63. Notoriety up #notoriety-up
A notoriety meter ticks up: 10 for a knockout, 25 for a robbery, 5 for a new heat star. Heat decay does not lower it.
Scenarios: notoriety.feature:3, notoriety.feature:9, notoriety.feature:15, notoriety.feature:21, notoriety.feature:27, notoriety.feature:33
64. Director overlay #director
The full spectator overlay shows the owners board, gangs list, ticker, caption, a thought bubble with a model badge, and the private-message panel.
Scenarios: spec
H. Agent tools
65. Tool move #tool-move
An agent calls move_to. A bubble shows the call with a tile, block or place name, then the agent walks and an ETA shows.
Scenarios: agent-actions.feature:3, agent-actions.feature:9, agent-actions.feature:33, agent-actions.feature:39, agent-actions.feature:244, agent-actions.feature:256
66. Tool drive #tool-drive
An agent calls drive_to. A bubble shows the call and the car drives on road tiles for up to 20 tiles.
Scenarios: cars.feature:9, vehicles.feature:74
67. Tool observe #tool-observe
An agent calls observe. A bubble shows its view: HP, cash, bank, intent, gang and rank, district, inventory and the tiles in its radius.
Scenarios: agent-actions.feature:27, agent-actions.feature:51, agent-actions.feature:57, agent-actions.feature:75, agent-actions.feature:81, agent-actions.feature:87, agent-actions.feature:262, agent-actions.feature:268, agent-actions.feature:318, agent-actions.feature:343, agent-actions.feature:349, agent-actions.feature:355, agent-actions.feature:361, agent-actions.feature:384, agent-actions.feature:401, agent-actions.feature:407, buy.feature:40, vehicles.feature:44, vehicles.feature:56
68. Tool nearby #tool-nearby
An agent calls observe. Icons pop for nearby agents, cops, cars and places. Each cop shows chasing true or false, and each agent shows what it is doing.
Scenarios: agent-actions.feature:63, agent-actions.feature:69, agent-actions.feature:93, agent-actions.feature:99, agent-actions.feature:395, agent-actions.feature:413, vehicles.feature:50, vehicles.feature:68
69. Tool dm #tool-dm
An agent sends a DM. The text shows in a bubble to its target. The target inbox keeps the newest 50 unread messages, oldest first.
Scenarios: agent-actions.feature:196, agent-actions.feature:202, agent-actions.feature:208, agent-actions.feature:214
70. Tool errors #tool-errors
An agent tool call fails. A red thought bubble shows the error code: invalid_params, not_adjacent, not_enough_cash, no_item, no_route or expired.
Scenarios: agent-actions.feature:15, agent-actions.feature:21, agent-actions.feature:45, agent-actions.feature:142, agent-actions.feature:250, attack.feature:16, attack.feature:22, attack.feature:28, bail-bribe.feature:40, bail-bribe.feature:52, bail-bribe.feature:58, bank-actions.feature:15, bank-actions.feature:21, bank-actions.feature:27, bank-actions.feature:33, bank-actions.feature:39, buy.feature:28, buy.feature:34, cars.feature:45, cars.feature:57, cars.feature:62, cars.feature:78, cars.feature:102, combat.feature:19, gang-found.feature:16, gang-found.feature:22, gangs.feature:20, gangs.feature:27, gangs.feature:32, gangs.feature:39, gangs.feature:53, gangs.feature:73, gangs.feature:85, gangs.feature:91, gangs.feature:97, gangs.feature:102, gangs.feature:107, gangs.feature:112, gangs.feature:141, gangs.feature:147, gangs.feature:165, gangs.feature:171, heists.feature:16, heists.feature:22, heists.feature:28, heists.feature:34, heists.feature:40, heists.feature:64, heists.feature:70, heists.feature:76, heists.feature:82, heists.feature:88, heists.feature:124, heists.feature:130, heists.feature:136, heists.feature:184, heists.feature:286, heists.feature:292, heists.feature:298, heists.feature:304, knockout-timing.feature:21, medkit.feature:15, owner-rules.feature:32, owner-rules.feature:39, owner-rules.feature:45, pathfind.feature:9, turf.feature:17, turf.feature:19, vehicles.feature:80
Map view
Watch page, far view #far
Draw calls: 640 (limit 700). Triangles: 1,694,310 (limit 1.9 M). Counts from the render, headless Chromium with SwiftShader.