Ungodly Nazi Zombies Install guide · BepInEx 6 + two mods
6.0.0-be.785 v1.0.0

Step 4 of 6 Board up the window

Install BepInEx 6 (IL2CPP x64)

Unpack the loader into the game folder and let it build its interop layer.

This stage has two halves that people often run together and should not. First you unpack files into the game folder, which takes about a minute. Then you launch the game once and let it finish, which takes a few more and does the real work. The mod is not involved yet.

Before you extract

What is in the archive

Open NaziZombiesvHotfix_22-BepInEx-Unity_IL2CPP-win-x64-6_0_0-be_785_6abdba4.zip and you will see six things at the top level. Each one has a job, and knowing which is which makes the rest of this page — and any troubleshooting later — much easier.

NaziZombiesvHotfix_22-BepInEx-Unity_IL2CPP-win-x64-6_0_0-be_785_6abdba4.zip — 235 files, 36.3 MB

  • winhttp.dll Unity Doorstop 4.5.0. The foothold — Windows loads this before the game does.
  • doorstop_config.ini Tells Doorstop what to start and where the runtime lives.
  • .doorstop_version Version marker, read by Doorstop.
  • changelog.txt The upstream BepInEx changelog. Reference only.
  • dotnet A private .NET runtime — this is most of the archive size.
  • BepInEx The loader itself.
  • core 37 assemblies: the preloader, Harmony, Cecil, Il2CppInterop, Cpp2IL.
  • unity-libs The pre-seeded piece. See below.
  • 2022.3.62.zip 68 assemblies matched to this game's Unity build.
  • plugins Empty. This is where the mod goes in stage two.
  • patchers Empty. Nothing in this guide uses it.

The one thing that makes this package different

Stock BepInEx ships unity-libs empty. On its first launch it works out which Unity version the game was built with and downloads a matching set of base libraries from the internet, caching them there for next time.

That download is a real failure point. If the machine is offline, behind a restrictive firewall or a corporate proxy, or the upstream host is having a bad day, the first launch produces a broken or empty interop layer — and then the mod loads into nothing and appears to do absolutely nothing, with no obvious error to search for.

This package ships that cache already populated for Unity 2022.3.62, the build this game uses. The first launch reads it off your disk. The download step simply does not happen.

Nothing else has been modified. The core assemblies, Doorstop 4.5.0 and doorstop_config.ini are stock 6.0.0-be.785 as published upstream at commit 6abdba4.

Worth ninety seconds

How the loader gets in

You do not need this to install anything, but it explains why the files go exactly where they go, and it makes the log file readable later.

Windows loads winhttp.dll from the game folder

When a program asks for a system library, Windows looks in the program’s own folder first. BepInEx ships a stand-in named winhttp.dll, so the game loads that instead — it forwards every real call onward, so nothing breaks, but it now has a moment to run first. This is why the file must sit beside Nazi Zombies.exe and nowhere else.

Doorstop reads doorstop_config.ini

The stand-in is Unity Doorstop 4.5.0. It reads the ini next to it, which names the assembly to start and where to find a .NET runtime:

doorstop_config.ini · the lines that matter
[General]
enabled = true
target_assembly = BepInEx\core\BepInEx.Unity.IL2CPP.dll

[Il2Cpp]
coreclr_path = dotnet\coreclr.dll
corlib_dir   = dotnet

CoreCLR starts from the bundled dotnet folder

The game is IL2CPP, so there is no managed runtime inside it to borrow. Doorstop starts its own from the dotnet folder in the archive. That folder is why the download is 36.3 MB for a loader.

BepInEx builds the interop layer

The preloader reads GameAssembly.dll, works out the real shape of the game’s classes, and writes managed stand-ins into BepInEx\interop. This is the slow part of the first launch, and the part the pre-seeded unity-libs makes reliable. GameAssembly.dll is only ever read.

The chainloader loads your plugins

With interop in place, BepInEx scans BepInEx\plugins and loads every plugin it finds. On this first launch that folder is empty, which is correct — the mod arrives in stage two.

Do this now

Install it

Close the game completely

Not minimised, not sitting on the main menu. If the game is running it holds files open, and the paste will fail or half-succeed. Check the taskbar and the system tray.

Open the game root in one window and the archive in another

The game root is the folder containing Nazi Zombies.exe — see finding the game folder if you are not sure. Open the ZIP in a second window rather than dragging from inside the archive viewer, which is where partial extractions come from.

Extract the whole archive into the game root

Select all six top-level items in the archive and extract or copy them into the game root. Merge when Windows asks. The result you want is winhttp.dll sitting directly beside Nazi Zombies.exe.

If your archive tool offers Extract Here while you are inside the game folder, that is the shortest path.

Check the layout before you launch

Compare against the tree below. The single most common mistake is ending up with a nested folder — a NaziZombiesvHotfix_22-BepInEx-Unity_IL2CPP-win-x64-6_0_0-be_785_6abdba4 folder containing BepInEx, rather than the contents landing loose in the game root.

The game root immediately after extracting — 13 items

  • Nazi Zombies_Data was already here
  • savedata was already here
  • BepInEx added
  • core 37 assemblies
  • patchers empty
  • plugins empty for now
  • unity-libs the pre-seeded cache
  • dotnet added — the private .NET runtime
  • .doorstop_version added
  • baselib.dll was already here
  • changelog.txt added
  • doorstop_config.ini added
  • GameAssembly.dll was already here
  • Nazi Zombies.exe was already here
  • UnityCrashHandler64.exe was already here
  • UnityPlayer.dll was already here
  • winhttp.dll added — this one must be here

That is exactly what the folder looks like on the machine these screenshots came from. Click the image to open it at full size.

The game root with BepInEx extracted — winhttp.dll and doorstop_config.ini sit beside the executable

If you see a folder named after the archive, stop

A folder called NaziZombiesvHotfix_22-BepInEx-… inside the game root means the archive was extracted as a folder rather than into the game root. Open it, move its six items up one level into the game root, then delete the empty folder. Nothing will load until this is fixed.

The slow bit

The first launch

Launch the game normally from Steam. This launch is different from every launch after it, and it needs to be allowed to complete.

It will look like it has hung. It has not.

Expect a black window, a stalled splash screen, or an unresponsive title for anywhere from about thirty seconds to a few minutes, depending on your CPU and disk. BepInEx is generating the interop assemblies. Do not alt-F4, do not kill it from Task Manager, do not click anything. Wait until you reach the main menu.

Interrupting it leaves a half-written interop folder, which is genuinely awkward to diagnose later. If you already did, there is a clean fix — it is just easier not to.

Once you reach the main menu, the work is done. Quit back to the desktop. Every launch after this one starts at normal speed, because the interop layer is now cached on disk and only rebuilt if the game updates.

What appeared while you waited

Go back to the game root and open the BepInEx folder. It had four subfolders when you extracted it; it now has seven and two log files.

<game root>\BepInEx — 9 items after the first launch

  • cache created — assembly hashes, so it can skip work next time
  • config created — now holds BepInEx.cfg
  • core from the archive
  • interop created — the generated managed mirror of the game
  • patchers from the archive
  • plugins from the archive, still empty
  • unity-libs from the archive — read, not downloaded
  • ErrorLog.log created — errors only
  • LogOutput.log created — the full log of the last run
The BepInEx folder after a successful first launch — cache, config and interop are the new ones

The interop folder is the proof

If BepInEx\interop exists and contains a healthy stack of DLLs — including Assembly-CSharp.dll and a set of UnityEngine.*.dll files — the hard part is behind you. An empty or missing interop folder is the one result that means something went wrong; take it to troubleshooting.

Optional, strongly recommended

Turn on the console

BepInEx keeps its console window hidden by default. Turning it on gives you a live view of what loaded and what failed, and it is the single most useful thing you can do before installing a plugin — including for the verification step two pages from now.

Open BepInEx\config\BepInEx.cfg

The file did not exist until the first launch. Open it in Notepad or any text editor.

Find the [Logging.Console] section and set Enabled to true

It is near the top. Change the one word:

BepInEx.cfg
[Logging.Console]

## Enables showing a console for log output.
# Setting type: Boolean
# Default value: false
Enabled = true

Save the file and launch the game

A console window now opens alongside the game and stays open. It is safe to leave on permanently; if you find it distracting later, set the value back to false.

What a healthy startup looks like

Four landmarks, in this order. The exact wording shifts a little between builds, so read for the shape rather than matching character for character:

BepInEx console · first successful launch
BepInEx 6.0.0-be.785 - Nazi Zombies
Preloader started
Generating Il2Cpp interop assemblies      <- only on the first run, or after a game update
Chainloader started
0 / 0 plugins to load                     <- correct for now; the mod is not installed yet

Chainloader started is the line that matters. It means the runtime came up, interop is in place, and BepInEx is ready to load plugins. The 0 plugins count is expected at this stage — you have not installed one.

If you would rather not use the console

Everything the console shows is also written to BepInEx\LogOutput.log after every run, and errors alone are collected in ErrorLog.log. Opening those in a text editor works just as well; the console is only more convenient.

Next

Stage one is complete

  • winhttp.dll sits beside Nazi Zombies.exeAlong with doorstop_config.ini and the dotnet folder.
  • The game reached the main menu at least once with BepInEx installedSlowly the first time, normally after that.
  • BepInEx\interop exists and is not emptyThis is the generated managed mirror of the game.
  • BepInEx\config\BepInEx.cfg existsWhether or not you enabled the console.
  • BepInEx\plugins exists and is emptyThat is the folder stage two fills.

All five true? The loader is working. Now install the mod.

Install the mod