TM 6-785 Deadly Dozen Reloaded

Field Modification Manual  ·  StixsworldHD (StixsmasterHD4k)

03
Section The first launch
Allow 15 min
Start from Section 02 complete — loader in place, game not yet launched

The first launch

This is the run that takes minutes and looks like a hang. It is not a hang. BepInEx is reconstructing 8,187 types out of the game's compiled binary and writing them to disk as real C# assemblies. It happens once, and every plugin you ever install depends on it having finished.

01 Launch the game and leave it alone

Start Deadly Dozen Reloaded from Steam as normal. Then wait, without clicking anything.

On a modern machine with an SSD, expect one to three minutes before the main menu appears. On a mechanical drive, or with an aggressive real-time antivirus scanning every file that gets written, five to ten minutes is not unusual. The window may show nothing at all, or a black screen, or Windows may grey it out and offer to close it.

You will know it worked when the main menu comes up. Quit from the menu. Do not start a mission yet.

02 What actually happened

Four stages, in order. Each one writes something you can go and look at.

#StageWhat it does
1InjectDoorstop, inside winhttp.dll, starts the CoreCLR runtime from dotnet\ and hands control to BepInEx.Unity.IL2CPP.dll. Milliseconds.
2DumpCpp2IL reads GameAssembly.dll and global-metadata.dat and reconstructs the type graph as stub assemblies. This is the slow part.
3ReferenceThe pre-seeded unity-libs\2019.4.9.zip is found and extracted for use as reference assemblies. No download — see section 02.
4GenerateIl2CppInterop turns the stubs plus the references into real, callable assemblies in BepInEx\interop\. These are what plugins compile and run against.

Only then does BepInEx load anything from BepInEx\plugins\ — which is empty right now, and that is why this section comes before the plugin sections rather than after them.

03 The folders that appeared

Open <game folder>\BepInEx. There are now more folders than you copied in.

Inside BepInEx after the first run View at 1920×1080
Plate 03 Inside BepInEx after the first run Seven folders and two logs. cache, config, interop and unity-libs carry the first-run timestamp — BepInEx created or filled them itself. core and patchers still carry the build date from the archive.
BepInEx after the first launch
  • BepInEx\
    • cache\ the Cpp2IL stub output and the hash that decides whether to regenerate
    • config\ now contains BepInEx.cfg — the loader's own settings
    • core\ unchanged, still carrying the build date from the archive
    • interop\ the generated assemblies — the whole point of this launch
    • patchers\ still empty, still correct
    • plugins\ still empty — sections 04 and 05 fill it
    • unity-libs\ your pre-seeded zip, now extracted alongside itself
    • LogOutput.log everything that happened, in order
    • ErrorLog.log only what went wrong — read this one first

04 Turn on the console

Now that BepInEx\config\BepInEx.cfg exists, you can switch on the console window. Open the file in Notepad and find the [Logging.Console] section:

BepInEx\config\BepInEx.cfg
[Logging.Console]

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

## Only displays the specified log levels in the console output.
# Setting type: LogLevel
# Default value: Fatal, Error, Warning, Message, Info
LogLevel = Fatal, Error, Warning, Message, Info

Change Enabled from false to true and save. The next launch opens a black console window beside the game showing everything as it happens.

This is not cosmetic. Every troubleshooting step in section 08 starts with reading a log line, and watching them scroll past in real time tells you which stage a problem lives in far faster than reconstructing it from a file afterwards. Leave it on until the install is finished and working, then turn it off if you find the extra window annoying.

05 Launch again and read the log

Start the game a second time. This launch should reach the main menu at close to normal speed — the expensive work is cached now. With the console on, you are looking for a banner and a plugin count:

A healthy second launch, before any plugins are installed
[Message:   BepInEx] BepInEx 6.0.0-be.785 - DeadlyDozenReloaded
[Info   :   BepInEx] Running under Unity v2019.4.9
[Info   :   BepInEx] CLR runtime version: …
[Message:   BepInEx] Preloader started
[Info   : Il2CppInterop] Using cached interop assemblies
[Message:   BepInEx] Chainloader ready
[Message:   BepInEx] 0 plugins to load

0 plugins to load is the correct and expected result at this point. You have not installed any yet. What matters is that the line exists at all — it means the chainloader started, looked in plugins\, and is ready to load whatever it finds there next time.

Before moving on

0 of 6 confirmed