Ungodly Streets of Rogue AI v1.0.0

A BepInEx 5 plugin for Streets of Rogue

Every character
in the city
thinks again.

Stock Streets of Rogue gives you a genuinely clever goal-arbitration brain sitting on top of senses, targeting and combat that are much thinner than it deserves. This replaces what sits underneath — sight that reacts to what you are doing, hearing that tells a gunshot from a footstep, cover, morale, friendly-fire checks, and gangs that arrive as gangs. Then it hands you 354 switches for it.

modUngodly Streets of Rogue AIversionv1.0.0loaderBepInEx 5.4.23.5route3 parts

What this is

Ungodly Streets of Rogue AI v1.0.0 is a single plugin DLL that replaces how every character in Streets of Rogue senses, thinks, decides and fights. It runs on BepInEx 5 — the standard mod loader for Unity games that use Mono — and it does not modify a single file the game shipped with.

The install is three short parts. Most people are done in five minutes; the guide is long because it explains what each part is doing, so that when something looks wrong you can tell which part went wrong instead of starting over.

See it running first

Before any of that, here is what you are actually installing — a live run with the plugin in place. The see it in action page breaks down what to watch for while it plays.

Video thumbnail: Streets of Rogue with my Ungodly Streets of Rogue AI v1.0.0WatchStreets of Rogue with my Ungodly Streets of Rogue AI v1.0.0
A live run with the plugin installed. Recorded on v1.0.0 by StixsworldHD4k. Watch on YouTube · StixsworldHD4k

The three parts

Part 1

Install BepInEx

Extract five items into your game folder, beside StreetsOfRogue.exe. This is the step that goes wrong most often, so it gets a whole page.

Part 2

Launch once

Start the game and quit. BepInEx builds its folders on that first run, and its log tells you whether it attached.

Part 3

Add the plugin

One DLL into BepInEx\plugins\. Launch, press F5, and the panel opens.

The settings panel open over a run — Core › General, with the live status readout above the tab rows.Click to enlarge · 1920 × 1080
The settings panel open over a run — Core › General, with the live status readout above the tab rows.

What it actually changes

Streets of Rogue's stock AI is a goal-arbitration system: BrainUpdate.GoalArbitrate() scores 38 goal types by desirability every cycle, and the winner becomes that character's plan. That architecture is genuinely good, and this plugin leaves it alone. What sits underneath it is much thinner, and that is what gets replaced.

The left column is what the unmodified game does. Turning the master switch off in the panel returns every character to it instantly.
Stock behaviourWhat this does instead
Everyone sees through a flat 96° cone at a fixed 13.44 unit range, no matter what you are doing Sight weighted by distance, by whether you are moving, sprinting or crouched, by whether you just fired, and by how dark it is — with a hard cap so bonuses cannot stack into level-wide vision
Hearing is one flat number Gunshots, explosions and footsteps carry different distances, with configurable falloff through walls
Characters flip instantly between oblivious and hostile A real middle state — suspicion builds and decays, so you can back out of being noticed
Targets picked by proximity Seven policies (closest, first seen, random, highest threat, weakest, most exposed, biggest grudge) with focus-fire caps and switch hysteresis
Fight-or-flight is teamSize × hate × health ÷ distance, with no notion of morale or of how dangerous you look The same formula, then adjusted by temperament, morale, threat assessment and group strength
Guns roll a flat percentage per cycle and fire the instant it passes — the characteristic metronome Bursts, pauses between bursts, an aim-up delay before the first round, and a check that a friend is not standing in the line
No friendly-fire check at all — a police squad will shoot each other in the back Angular line check against every ally closer than the target
No cover logic whatsoever — people stand in open doorways trading shots Cover search, hide and peek cycles, and relocation when cover stops facing the threat
No morale, no blocking, no dodging, no anti-stuck for characters on foot All four, as Emerald-style combat actions
A gang of six trickles into a fight one at a time GetTeamSize widened to count allies who would respond, so groups arrive as groups

Why it does not break your game

It steers, it does not replace
Every one of the 7 hooks adjusts a decision the game was already making, at the moment it makes it. Goal arbitration, quests, jobs, gangs, alignment, the level editor and multiplayer are untouched.
It never writes relationships
The game's relationship matrix drives quest logic, alignment tracking and multiplayer replication. A mod that quietly rewrote who likes whom would corrupt saves and desynchronise clients. The faction system in this plugin is read-only, top to bottom.
Failures degrade, they do not cascade
Each hook is applied in its own try block. If the game updates and a method moves, that one behaviour reverts to stock and everything else keeps working — and the Diagnostics tab names exactly which one.
Nothing allocates on the hot path
Per-character state is pooled and reused, because Streets of Rogue recycles agents aggressively and a level churns through hundreds. Scratch lists are allocated once, and relationship lookups are cached per cycle.
Performance, in one paragraph

A fixed slice of the character list is refreshed each cycle, sized by the frame budget — so a level with 300 characters costs the same per frame as one with 30, and individual characters simply think slightly less often. Nobody is ever frozen: attention scales the effective time step rather than skipping the update, because skipping outright is what leaves NPCs stuck mid-stride when you round a corner. Live cost figures are on the status readout at the top of the panel.

Before you start

  • You own Streets of Rogue on Steam (or another PC copy) and have launched it at least once.
  • You can find your game folder — the one containing StreetsOfRogue.exe.
  • You have something that opens .rar files: 7-Zip, WinRAR or NanaZip.
  • You are on 64-bit Windows, or Linux/Steam Deck via Proton (there is a section for that).

Full detail is on the requirements page. If you already have BepInEx 5 installed for another mod, skip straight to Part 3.