Developer: Mursisru
Caution
Never install NOLoader and BepInEx in the same game folder - remove BepInEx winhttp.dll before deploying this mod.
Important
- NOLoader required - install NOLoader before this mod.
- Close Nuclear Option before PatchTool - PatchTool edits
Managed\Assembly-CSharp.dll; a running game causes Win32 IO error 1224. - Run PatchTool once after install or game update so Cecil IL patches from
mod.jsonapply.
Warning
- Gate L2 hash mismatch after game updates - re-bake all
expectedSignatureHashvalues inmod.jsonwhenAssembly-CSharp.dllchanges. - Third-party aircraft / MFD mods may break layout - set
[Layout] DisplayMode=skipinmod_config.iniif needed.
Note
loadStage: Mission - mod boots in mission scenes only (parity with BepInEx mission host).
NOLoader mod for the flight sim Nuclear Option that adds a live seeker-eye view (Missile Nose Cam) and a tactical HUD overlay directly onto your cockpit MFD Target display.
Mod id: com.at747.missilecamera
Origin: NOLoader port of the BepInEx MissileCamera plugin. Same gameplay; NOLoader uses mod_config.ini, BepInEx uses Configuration Manager. Use one loader — do not install both builds.
- Features
- Choose your loader
- Requirements
- Player installation
- Controls & keybinds
- Configuration (
mod_config.ini) - Runtime lifecycle
- Developer guide
- Project layout
- Compatibility & limitations
- Troubleshooting
- Changelog
- Licence
- MFD split-screen UI: Splits the wide tactical MFD (Target view) into zones and embeds the missile feed in the weapons panel area.
- Seeker cam (missile nose cam): Renders a live
RawImagefeed from your latest player-owned in-flight missile while it guides toward the target. - Tactical HUD overlay: Telemetry (
SPD,ALT,RNG), horizon reticle, salvo info, and target markers drawn on the live feed. - Manual feed controls: Cycle in-flight owned missiles and adjust camera zoom while the MFD overlay is active (see Controls below).
- Per-aircraft layout (
DisplayMode=auto):- Dedicated split (e.g. KR-67): wide target cam on the left, missile panel on the right.
- Small tac overlay (e.g. Cricket): mod skipped — vanilla tactical MFD unchanged.
- Mission-only bootstrap: Mod loads at Mission stage (
loadStage: Missioninmod.json), matching the BepInEx mission-scene bootstrap.
| This repo (NOLoader) | MissileCamera BepInEx | |
|---|---|---|
| Loader | NOLoader (winhttp.dll proxy) |
BepInEx 5 + Harmony |
| Config | mod_config.ini in mod folder |
BepInEx Configuration Manager (.cfg) |
| Patches | Cecil IL via mod.json + PatchTool |
Harmony runtime |
| Install path | NOLoader\mods\MissileCamera\ |
BepInEx\plugins\MissileCamera\ |
| Game update | Re-run PatchTool; verify expectedSignatureHash |
Clear Harmony cache if needed |
Do not install both loaders in the same game directory (winhttp.dll conflict).
- Nuclear Option (Steam).
- Matching game
Assembly-CSharp.dll(for patch hashes inmod.json). - NOLoader — install · player zip from Release v0.1.0 (RDYTU or RDYTU.mini).
- Developers: sibling clone NOLoader as
source\repos\NOLoader_Engine\next to this project (DEV.SDK).
-
Install NOLoader into the game (
NOLoader\core\,winhttp.dllproxy). See INSTALL.md · RDYTU · RDYTU.mini. -
Copy into:
Nuclear Option\NOLoader\mods\MissileCamera\NOLoader.MissileCamera.dllNOLoader.ModConfig.dllmod.jsonmod_config.ini
-
Run PatchTool once (or use the deploy script) so Cecil patches apply to
Assembly-CSharp.dll. -
Download release zip from GitHub Releases or use
release/v0.27.1/INSTALL.txtas a checklist.
Active only while the missile feed overlay is on and you have player-owned in-flight missiles. US English keyboard layout (Right Alt may act as AltGr on some EU keyboards). Keybinds are fixed in code (not in mod_config.ini).
| Keybind | Unity KeyCode |
Action |
|---|---|---|
Right Alt + / |
RightAlt + Slash |
Next missile (newer; wraps 6/6 → 1/6) |
Right Alt + , |
RightAlt + Comma |
Previous missile (older; wraps 1/6 → 6/6) |
Right Alt + ; |
RightAlt + Semicolon |
Zoom in (narrower FOV) |
Right Alt + . |
RightAlt + Period |
Zoom out (wider FOV) |
Right Shift + . |
RightShift + Period |
Reset zoom offset to 0.0 |
Sticky selection: after Next/Prev the camera stays on your chosen missile when new ones launch. If it is destroyed, the feed falls back to the newest remaining missile.
Zoom HUD: each zoom change shows the current offset (e.g. 2.0, -0.5) for 0.5 s above feed center (0.0 = default FOV from [MissileCameraFeed] Fov). Zoom limits/step: [MissileCameraControls] in mod_config.ini.
Edit NOLoader\mods\MissileCamera\mod_config.ini. Changes are polled every ~0.5 s during a mission (hot-reload without restart).
| Key | Default | Description |
|---|---|---|
Enabled |
1 |
Master switch for MFD layout changes |
DisplayMode |
split |
auto (per-aircraft) | skip (bypass) | split (forced split) |
OverlayMaxWidth |
0.45 |
Max normalized width for tac overlay detection |
LeftWidth |
0.58 |
Target cam column width (0–1) |
MissilePanelBottom |
0.38 |
Bottom edge of missile panel (engine strip below) |
WeaponsStripHeight |
0.12 |
Compressed weapons wireframe strip height |
ShowDivider |
1 |
Zone divider lines |
DebugStub |
0 |
Bright magenta test panel |
StubLabel |
MISSILE CAMERA |
Label on debug stub |
| Key | Default | Description |
|---|---|---|
Enabled |
1 |
Live missile camera feed |
NoseSkinInset |
0.08 |
Keep camera outside nose mesh (meters) |
CameraBackOffset |
0.35 |
Pull camera back from nose point (meters) |
Fov |
60 |
Field of view (degrees) |
FeedWidth |
512 |
RenderTexture width |
FeedHeight |
512 |
RenderTexture height |
HorizonLock |
1 |
World-up roll lock; body-follow pitch/yaw |
TurnLookBankScale |
1 |
G-load turn look scale |
MaxTurnLookDegrees |
90 |
Max turn-look offset (degrees) |
DefaultMissileGLimit |
20 |
Fallback G limit |
TurnLookGDeadband |
0.15 |
G deadband |
TurnLookGFilterHz |
7 |
G filter cutoff (Hz) |
TurnLookSlewDegPerSec |
120 |
Turn-look slew rate (deg/s) |
TurnLookSmoothTime |
0.18 |
Turn-look smoothing |
PostExplosionHoldSeconds |
0 |
Hold last frame after missile loss (0 = off) |
RenderFps |
30 |
Feed refresh rate |
| Key | Default | Description |
|---|---|---|
Enabled |
1 |
HUD overlay on feed |
SalvoWindowSeconds |
0.5 |
Salvo grouping window (seconds) |
ShowCenterCluster |
1 |
Center reticle / intercept ring |
ShowTargetMarker |
1 |
Target diamond marker |
InterceptColor |
0,1,0,1 |
Intercept ring RGBA (0–1) |
ReticleColor |
0,0.4,1,1 |
Reticle RGBA |
HorizonColor |
0.05,0.35,0.08,1 |
Horizon fill |
HorizonOutlineColor |
0.2,1,0.25,1 |
Horizon outline |
MissileNameColor |
1,0,1,1 |
Missile name label |
TargetNameColor |
0.4,0.9,1,1 |
Target name label |
LabelBackgroundColor |
0.18,0.18,0.18,0.62 |
Label backdrop |
LabelBackgroundAlpha |
0.62 |
Backdrop alpha |
| Key | Default | Description |
|---|---|---|
Enabled |
1 |
Keyboard missile cycling and zoom (keybinds are fixed; see Controls & keybinds) |
ZoomStep |
0.5 |
Offset change per zoom key press |
ZoomMin |
-4 |
Minimum zoom offset |
ZoomMax |
4 |
Maximum zoom offset |
ZoomFovDegreesPerUnit |
5 |
FOV delta (degrees) per offset unit |
IndicatorSeconds |
0.5 |
Zoom HUD readout duration (seconds) |
- Bootstrap:
INOMod.OnLoadruns at Mission stage; Cecil IL hooks frommod.jsonare applied by PatchTool before play. - Activation: With Target MFD active, launch a trackable owned missile — layout applies and the feed binds.
- Rendering: The auxiliary camera draws only while the overlay is active and a missile is in flight.
- Isolation: Vanilla
TargetCamgeometry is not modified; layout uses UI zones and a separate render rig.
Close the game before deploy (PatchTool needs managed DLLs unlocked).
AI / mod authors: see .cursorrules in this repo and NOLoader_Engine/.cursorrules for full NOLoader architecture (DEV_SDK, PatchTool, Gate L2, INOMod).
**Developer:** Mursisru
# DEV_SDK build + PatchTool (default)
.\scripts\deploy.ps1
**Developer:** Mursisru
# RDYTU loader in game — build DEV_SDK, patch with RDYTU:
.\scripts\deploy.ps1 -PatchToolConfiguration RDYTURequires NOLoader_Engine at source\repos\NOLoader_Engine\ (sibling of this repo).
Set the game path in Directory.Build.props (NuclearOptionRoot) if needed. Copy Directory.Build.props.example to Directory.Build.props and adjust the path.
dotnet build NOLoader.MissileCamera.csproj -c DEV_SDKOutput: bin\DEV_SDK\net48\NOLoader.MissileCamera.dll
Open NOLoader.MissileCamera.sln in Visual Studio or JetBrains Rider for IDE builds.
Seven Cecil postfix injections (hashes must match game build):
TargetScreenUI::SetupCameraTargetCam::SetLandingCam/CancelTarget/OnDestroyTacScreen::Initialize/TacScreen_OnCamToggleWeaponManager::TargetListChanged
Re-run PatchTool after game updates or mod DLL changes. Gate L2 rejects patches when expectedSignatureHash mismatches.
When updating from the BepInEx MissileCamera repo (source\repos\MissileCamera\):
- Copy changed logic under
src/Camera/,src/Hud/,src/Layout/,src/Access/,src/Ui/. - Map Harmony postfix bodies to
src/Patches/Patches.cs(same call order). - Keep
mod_config.inikeys identical to BepInEx Configuration Manager defaults. - Rebuild, redeploy, and verify patch hashes if
Assembly-CSharp.dllchanged.
NOLoader.MissileCamera/
├── NOLoader.MissileCamera.csproj
├── NOLoader.MissileCamera.sln
├── mod.json
├── mod_config.ini
├── CHANGELOG.md
├── src/
│ ├── Mod/
│ │ └── MissileCameraMod.cs # INOMod entry
│ ├── Patches/
│ │ └── Patches.cs # Cecil inject targets
│ ├── Camera/ # Feed rig (port from MissileCamera)
│ ├── Hud/ # Overlay widgets
│ ├── Layout/ # MFD zone split
│ ├── Access/ # Game API wrappers
│ ├── Ui/ # HUD graphics helpers
│ └── Logging/
├── release/
│ └── v0.27.1/
│ └── INSTALL.txt
└── scripts/
└── deploy.ps1
GitHub: Mursisru/NOLoader.MissileCamera · Upstream (BepInEx): Mursisru/MissileCamera
Developed and tested against vanilla Nuclear Option aircraft and the stock Target MFD. The mod may work incorrectly or not at all when:
- Third-party / custom aircraft — non-vanilla cockpit MFD hierarchy, custom
TargetScreenUIlayouts, or unusual weapon integration can break layout detection (DisplayMode=auto), feed binding, nose-cam placement, or salvo tracking. - Other mods that change the MFD — tactical UI overlays, layout replacers, or patches to
TargetScreenUI,TacScreen,TargetCam, or target/weapon lists may conflict with this mod's Cecil IL hooks and UI zone split.
Mitigation: set [Layout] DisplayMode=skip in mod_config.ini to keep vanilla MFD layout (feed may still bind if hooks remain compatible), or disable conflicting MFD mods. For modded setups, include aircraft/mod names and repro steps in issue reports.
| Symptom | Likely cause | Fix |
|---|---|---|
| Mod not loading | NOLoader not installed / wrong folder | Verify NOLoader\mods\MissileCamera\ contents and mod.json |
| Hooks never fire | PatchTool not run or game was open | Close game; run PatchTool or deploy.ps1 |
| Gate L2 / hash fail after game update | expectedSignatureHash stale |
Re-bake hashes; update mod.json; redeploy |
| No feed on MFD | No owned in-flight missile / overlay off | Launch missile with Target MFD active |
| Layout wrong on modded aircraft | Custom MFD hierarchy | DisplayMode=skip or report with aircraft name |
| Keybinds ignored | Wrong keyboard layout / overlay inactive | US layout; feed must be active |
| BepInEx + NOLoader conflict | Both loaders installed | Remove one loader installation |
Logs: NOLoader\logs\noloader_ring.log (DEV loader: F10 overlay).
See CHANGELOG.md.
MIT License — see LICENSE.