Joey Drew Studios stopped patching this game years ago, and the community bug list still has a long column of entries marked Status: Unknown — which is the wiki's polite way of saying nobody ever fixed it. This plugin fixes them at the source.
StepsThe install¶
Identical to Enhanced, and quicker, because there is nothing to configure afterwards.
Step 01Get the archive
Ungodly Bendy Community Patch
v1.1.3Seventeen modules, thirty patch points, no configuration. Fixes the save lockout, the pause deadlock, the respawn softlocks and broken scripted sequences.
Step 02Unblock, then extract
Right-click
UngodlyBendyCommunityPatch_v1_1_3.rar→ Properties → tick Unblock if it is offered, then extract.Archive contents UngodlyBendyCommunityPatch_v1_1_3\ ├─ UngodlyBendyCommunityPatch.dll <- this is the file you install └─ README.md <- documentation; does not go in the game folderStep 03Copy the DLL into the plugins folder
Same destination as Enhanced:
Destination <game folder>\BepInEx\plugins\With both mods installed, that folder holds two files:
Both plugins in place BepInEx\plugins\ ├─ UngodlyBendyEnhanced.dll └─ UngodlyBendyCommunityPatch.dllOn disk:
View full size · 1752×130the plugins folderThe entire mod install: two DLLs, 54 KB and 242 KB. Nothing else belongs in here — no READMEs, no extracted folders, no .rar files. Step 04Launch and check the log
There is no menu and no hotkey for this one, so the log is the only place it announces itself. Open
BepInEx\LogOutput.logand look for both plugins in the chainloader list:LogOutput.log — both plugins loaded [Message: Chainloader] Chainloader ready [Info : Chainloader] 2 plugins to load [Info : Chainloader] Loading [Ungodly Bendy Enhanced 1.2.0] [Info : Chainloader] Loading [Ungodly Bendy Community Patch 1.1.3]
CompatibilityLoad order and compatibility¶
The patch declares a soft dependency on
stixsworldhd.bendy.ungodlyenhanced. Two consequences:
- If Enhanced is present, the patch always loads after it, so the order is deterministic rather than dependent on filesystem enumeration.
- If Enhanced is absent, the patch loads anyway and works normally. It does not need it.
The two were audited surface by surface rather than assumed compatible. Every global one of them reads or writes was checked against the other's source:
| Engine surface | Enhanced | Community Patch | Result |
|---|---|---|---|
RenderSettings (ambient) | never touched | snapshot / restore | No overlap |
Time.timeScale | never touched | restored on pause deadlock | No overlap |
QualitySettings level | sets it | watches it | Complementary |
Time.fixedDeltaTime | raises it | reads it | Adapted |
| Harmony patch targets | 4 postfixes on AspectRatioUtil | 30 points, none of them those | No overlap |
The physics rate needed a real adaptation
Enhanced raises Time.fixedDeltaTime to cure the camera jitter. That is a
correct fix and the patch does not attempt its own. But it changes the environment two of the
patch's modules run in:
- Ragdoll stability was tuned for Unity's default 0.02 s step. At a 144 Hz timestep the physics loop runs almost three times as often, so fixed solver iterations and continuous collision detection would cost roughly three times as much — landing precisely in the Butcher Gang death moments where the vanilla lag spike already lives. As of v1.1.3 both scale to the actual timestep: iterations come down as steps go up, and sweeping is dropped once a velocity-capped limb travels less than a limb's thickness per step. At vanilla 50 Hz the behaviour is byte-for-byte what it was.
- AI unstick accumulates real
Time.fixedDeltaTimerather than counting physics steps, so its 1.5-second detection window is rate-independent by construction. No change needed. Vanilla's ownCheckIfStuckgets this wrong — it addsTime.deltaTimeinsideFixedUpdate— which is one of the things the patch corrects.
The subtitle fix now lives in Enhanced
This module used to cap the subtitle backlog at three lines — a mitigation, not a cure.
Enhanced v1.2.0 found the actual cause: AudioManager
advances the voice queue every (clip length − one physics timestep) while
MainSubtitlesController advances the text queue every
(clip length), so the two drift apart by exactly one timestep per line and never
self-correct.
Enhanced corrects that at the source. But its resync only runs while both queues hold the same
number of entries — and this module’s trim removes entries from one of them, which
would silently disable the cure. So as of v1.1.3 the module checks
Harmony.GetPatchInfo at startup and
stands down completely if anything else has already patched
ShowSubtitles, logging that it has done so.
The inventoryWhat it fixes¶
Every fix here was written after reading the decompiled shipping code and finding the actual defect — not by guessing at symptoms. The full technical write-up for each one is in the archive's README; this is the summary.
The four that will change your playthrough
Most reported bug in the game
1. The save lockout
The little Bendy icon appears when you save and then never fades — and from that moment nothing is written to disk again. Players lose entire chapters to it. The community workaround has been to watch the corner of the screen and restart the moment the icon sticks.
It is a deadlock in AsyncFileAPI with three independent ways
in: the verify path returns without releasing the lock; the guard flag is set inside
the worker rather than the caller, so two quick saves both pass it; and completion is raised
on the worker thread, where touching Unity UI throws before the flag is cleared.
The save path is replaced with a writer that cannot deadlock. Serialisation moves to the main thread; the write goes to a temporary file, is flushed to the device, is read back and verified in full, and only then replaces the live file. A three-deep rolling backup chain is rotated on every success. Requests queue instead of being dropped. Completion always fires. And on load, a save that will not deserialise is repaired from the newest good backup instead of hanging the game on a black screen.
2. The pause deadlock — and the enemies that walk on the spot
GameManager.Pause() sets isPaused = true
and then asks for the pause menu. If that fails, the flag is stuck true forever,
because Unpause() guards on the menu existing.
That one stuck bool is behind two separate wiki entries: a menu that cannot be closed, and
“Ink Bendy sometimes stops moving while his walking animation keeps playing”
— because the AI controllers early-out on isPaused but the
Animator is not gated by it. A watchdog detects the state and unwinds it through the game's
own unpause path so the event still fires for anything listening.
13. The respawn softlocks
DeathController ends its respawn with an else
branch that just writes a log line. If no spawn node is active you are left in death limbo
— slowed movement, locked rotation, no crosshair, and OnSpawned
never raised. No input recovers it. That is Stuck in the ink tunnels, listed
game-breaking with cause unknown.
Three more defects live in the same path: the spawn point is scored by distance from
where you died, so dying to a pack respawns you inside it;
RespawnController.Respawn() has no null check at all; and the death
sequence disables two weapon objects but the respawn only re-enables one, which is the
mechanism behind Unbreakable weapon. All four are fixed, plus a four-second grace
window after any respawn during which enemies drop you as a target.
New in v1.1.3
17. Scripted sequences
Bendy stages a great deal of its story through the AI — Sammy’s ritual, the Boris set pieces, the Chapter 4 ballroom, Allison and Tom in the giant ink machine. All of it runs through the same thought machine that drives ordinary patrolling, and four defects live in that machinery:
- A throwing callback strands the AI forever. The wait handler invokes its
callback with no
try/catch, and theSetThoughtthat advances the sequence is the very next line. One destroyed reference and the AI sits inWaitpermanently, with every later beat dead. The callback now runs inside a guard so the transition happens regardless. - The callback can fire every single frame.
SetThoughtis a no-op when the new thought equals the current one, so aWaitthat followsWaitnever changes state, the timer stays at zero, and a beat meant to happen once fires at framerate. It now fires exactly once, and a chain that can never advance is released toIdleafter eight seconds. - A scripted walk is abandoned the moment the AI sees you. The enemy switches
to
Attackmid-walk, so it never arrives — and the arrival callback the script was waiting on never fires. The walk is now allowed to finish and the attack is handed over on arrival, so nothing is lost, only reordered: the sequence completes and the enemy still comes for you. - Arrival can dead-end. Reaching the mark reverts to the previous thought,
which is a no-op when that was
MoveToPointitself — trivially reached by scripting two moves in a row. The AI now resumes patrolling instead of re-arriving forever.
This release also fixes a regression of the patch’s own. Three modules previously reached
into AI state with no idea whether a sequence was running: AI unstick treated a
scripted mark as a wedged enemy and could drag it away from the arrival a script was waiting on;
the Miracle Station attack block stomped scripted attacks; the
respawn grace window cleared targets and could cancel a staged chase outright.
All three now consult a shared IsScripted() check.
The other thirteen
| # | Fix | What you would have noticed |
|---|---|---|
| 3 | Raw localization keys shown as dialogue | OBJECTIVES/CH1_OBJ_01 drawn on screen where dialogue belongs, and AUDIOLOG/NAME_<FIRST NAME> where a speaker’s name should be — the wiki’s In-game text glitch. A startup race; now memoised, with a sweep that retroactively repairs text already on screen |
| 4 | Little Miracle Stations | Sealed inside one with no way out, and stations that did not actually hide you because CombatStatus.Hiding was set ~1.5 s late |
| 5 | Stuck enemies | Projectionist, Brute Boris, Ink Demon and the Butcher Gang wedged on steps and door frames forever. Now escalates through three levels of unstick instead of only dropping the path |
| 6 | AI dispatch | Reflective Invoke twice per enemy per frame, on scaled time so AI stopped near timeScale zero. Rewritten to cached delegates — a net performance gain |
| 7 | Audio log transcripts | Wally Franks’ transcript welded to the screen permanently |
| 8 | Double interactions | Two ink hearts from one model — and, far worse, two overlapping saves, which is what wedges the save system |
| 9 | The super-stretchy Butcher Gang | Corpses tearing themselves across the room with a lag spike. Force preserved, solver given a chance |
| 10 | Achievements that never unlock | “Hearing Voices” and the audio-log achievements silently failing |
| 11 | Falling out of the map | No world floor of any kind existed. Also fixes being shoved inside a wall in Chapter 5 |
| 12 | Subtitles that run a chapter behind | A backlog cap of three, as a mitigation. Stands down entirely when Enhanced v1.2.0 is installed — see below |
| 14 | The plank that will not break | Chapter 5 softlock whose only remedy was restarting the chapter |
| 15 | Audio that loops forever | The never-ending ink spill, and cassette motors outliving their audio log |
| 16 | Pitch-black menus and walls | Changing quality mid-game collapsing RenderSettings ambient to black until you restarted |
Performance
The patch is designed to be cheaper than the bugs it removes: one
MonoBehaviour for the whole plugin, one per-frame operation (draining a
callback queue, which is a lock and a count check when idle), watchdogs at 2 Hz, all
reflection resolved once at install time, and no scene walking on a timer. The AI dispatch
rewrite is a net reduction in per-frame cost.
Where to goNext¶
Both plugins are in. The next page is the one worth not skipping: how to confirm the whole stack is actually running, using the folder tree, the log and the mod's own diagnostics panel.