{"id":51851652,"url":"https://github.com/mursisru/nocs","last_synced_at":"2026-07-23T20:01:17.293Z","repository":{"id":370968995,"uuid":"1297718710","full_name":"Mursisru/NOCS","owner":"Mursisru","description":"BepInEx 5 plugin for Nuclear Option: TrueNotch jam HUD and Hard-Kill APS countermeasures.","archived":false,"fork":false,"pushed_at":"2026-07-12T10:27:28.000Z","size":93,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-12T11:05:47.102Z","etag":null,"topics":["bepinex","countermeasures","csharp","flight-sim","harmony","mod","nuclearoption"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mursisru.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-11T19:12:18.000Z","updated_at":"2026-07-12T10:27:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Mursisru/NOCS","commit_stats":null,"previous_names":["mursisru/nocs"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Mursisru/NOCS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mursisru%2FNOCS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mursisru%2FNOCS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mursisru%2FNOCS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mursisru%2FNOCS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mursisru","download_url":"https://codeload.github.com/Mursisru/NOCS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mursisru%2FNOCS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35814993,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-23T02:00:06.683Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bepinex","countermeasures","csharp","flight-sim","harmony","mod","nuclearoption"],"created_at":"2026-07-23T20:01:16.254Z","updated_at":"2026-07-23T20:01:17.286Z","avatar_url":"https://github.com/Mursisru.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NOCS (NO Countermeasures Supporter)\n\n[![Nuclear Option](https://img.shields.io/badge/Game-Nuclear%20Option-blue)](https://store.steampowered.com/app/2168680/Nuclear_Option/)\n[![BepInEx 5](https://img.shields.io/badge/Loader-BepInEx%205-orange)](https://docs.bepinex.dev/)\n[![Version](https://img.shields.io/badge/Version-0.5.35QV-green)](https://github.com/Mursisru/NOCS/releases/tag/v0.5.35)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow)](LICENSE)\n[![.NET Framework 4.8](https://img.shields.io/badge/.NET%20Framework-4.8-512BD4)](https://dotnet.microsoft.com/download/dotnet-framework/net48)\n\n---\n\n## Critical warnings\n\n\u003e [!IMPORTANT]\n\u003e **BepInEx 5 (x64) required** — install [BepInEx](https://docs.bepinex.dev/articles/user_guide/installation/index.html) before this mod.\n\n\u003e [!WARNING]\n\u003e **Hard-Kill APS changes weapon targeting** — pressing the engagement hotkey (or `AutoEngage`) captures your track list and launches defensive interceptors. Targets are restored after the salvo. Code-fixed MP balance: nose FOV **50°**, **ARH/SARH** inbound only, max **2** launches per pair + **1.8 s** cooldown, one interceptor per live incoming missile.\n\n\u003e [!TIP]\n\u003e **Configuration Manager recommended** — open in-game with **F1** for `com.at747.nocs.bepinex.cfg`. If CM fails after a game update, set `HideManagerGameObject = true` in `BepInEx\\config\\BepInEx.cfg`. Delete `BepInEx\\cache\\harmony_interop_cache.dat` if patches behave oddly.\n\nBepInEx 5 plugin for the flight sim **Nuclear Option** with two independent HUD systems: passive TrueNotch radar-jam width and active Hard-Kill APS with swarm ASE fire-control geometry.\n\n**Plugin GUID:** `com.at747.nocs.bepinex` · **Display version:** `0.5.35QV` · **BepInPlugin semver:** `0.5.35`\n\n---\n\n\n\n## Table of contents\n\n- [Critical warnings](#critical-warnings)\n- [Features](#features)\n- [Requirements](#requirements)\n- [Player installation](#player-installation)\n- [Controls \u0026 keybinds](#controls--keybinds)\n- [Configuration (BepInEx Configuration Manager)](#configuration-bepinex-configuration-manager)\n- [Project layout](#project-layout)\n- [Changelog](#changelog)\n- [Licence](#licence)\n\n---\n\n\n\n## Features\n\n- **TrueNotch HUD (passive):** Resizes the radar notch indicator width from real `RadarParams.GetSignalStrength` jam boundaries. Notch center and rotation remain vanilla.\n- **Hard-Kill APS (active):** Swarm ASE intercept geometry for all incoming radar-guided threats in the nose FOV. Optional intercept ring (`ShowAseInterceptRing`) and status cue under the weapon HUD hint (`RenderRadialText`).\n- **SHOOT / POTENTIAL HIT cues:** Shared fire-control math for HUD and hotkey — not tied to whether the ring or cue is rendered.\n  - **SHOOT** — velocity vector (gun cross) inside **all** per-threat guarantee envelopes, weapon reach OK, at least one unengaged salvo target.\n  - **POTENTIAL HIT** — threat visible in ASE preview, but shoot window not open yet (aim outside envelopes, out of range, or target already engaged).\n- **Warning TTI (MWS labels):** Smoothed time-to-impact suffix on threat list rows (e.g. `Missile [ARH] 4.2 km [8.6s]`), with `[IMPACT]` at zero.\n- **Salvo engine:** IR interceptors expended before radar stations; launch budget capped by ammo and pair window; track list restored after session; engagement ledger prevents duplicate shots at the same live threat.\n\n---\n\n\n\n## Requirements\n\n- **Nuclear Option** ([Steam](https://store.steampowered.com/app/2168680/Nuclear_Option/)).\n- **BepInEx 5** (x64) in the game root (`BepInEx\\core\\` must exist for **build** reference paths).\n- **[Configuration Manager](https://github.com/BepInEx/BepInEx.ConfigurationManager)** (recommended) — in-game UI for plugin settings.\n\n---\n\n\n\n## Player installation\n\n1. Install [BepInEx 5](https://github.com/bepinex/bepinex) for Nuclear Option.\n2. Install [Configuration Manager](https://github.com/BepInEx/BepInEx.ConfigurationManager) (recommended).\n3. Copy into:\n  ```text\n   Nuclear Option\\BepInEx\\plugins\\NOCS\\\n  ```\n  - `NOCS.dll`\n4. Settings are stored in `BepInEx\\config\\com.at747.nocs.bepinex.cfg` (auto-created on first run). Edit in-game via **Configuration Manager**, or edit the `.cfg` file while the game is closed.\n5. Do **not** rename the plugin folder or install duplicate copies under different names.\n\n---\n\n\n\n## Controls \u0026 keybinds\n\nActive while Hard-Kill APS is enabled and threats are present. **US English keyboard layout.** Keybinds are editable in Configuration Manager.\n\n\n| Keybind               | Default `KeyCode`      | Action                |\n| --------------------- | ---------------------- | --------------------- |\n| **Right Shift** + `/` | `RightShift` + `Slash` | Start / extend Hard-Kill salvo |\n\n\n**Salvo behaviour:** up to **2** interceptors per pair (hard-coded), then **1.8 s** cooldown. Hotkey and `AutoEngage` both require the same **SHOOT** geometry gate as the HUD cue. Previous track list and active station are restored when the session finishes.\n\n---\n\n\n\n## Configuration (BepInEx Configuration Manager)\n\nAll settings are exposed through **BepInEx.Configuration** (`Config.Bind` in `Config/NocsBepInConfig.cs`). Use [Configuration Manager](https://github.com/BepInEx/BepInEx.ConfigurationManager) in-game (**F1**), or edit:\n\n```text\nBepInEx\\config\\com.at747.nocs.bepinex.cfg\n```\n\nCM groups: **TrueNotchHUD**, **HardKillAPS**, **1. HUD Visuals**, **2. Engagement Envelope**, **3. Fire Control \u0026 Geometry**, **4. Signal \u0026 Tracking**, **WarningTTI**.\n\n\n\n### TrueNotchHUD\n\n\n| Key                | Default | Description                           |\n| ------------------ | ------- | ------------------------------------- |\n| `Enabled`          | `true`  | Master switch for notch width overlay |\n| `SmoothTime`       | `0.05`  | Width smoothing time constant         |\n| `ClampWidth`       | `false` | Clamp width to min/max scale          |\n| `MinWidthScale`    | `1.0`   | Min scale when clamp enabled          |\n| `MaxWidthScale`    | `1.0`   | Max scale when clamp enabled          |\n| `NotchDopplerBias` | `0.0`   | Optional Doppler bias offset          |\n\n\n\n\n### HardKillAPS\n\n\n| Key                | Default      | Description |\n| ------------------ | ------------ | ----------- |\n| `Enabled`          | `true`       | Master switch for Hard-Kill APS |\n| `AutoEngage`       | `false`      | Automatic salvo when **SHOOT** window is open (same gate as hotkey) |\n| `HotKeyModifier`   | `RightShift` | Engagement modifier key |\n| `HotKey`           | `Slash`      | Engagement fire key (`/` on US layout) |\n| `WeaponPriority`   | `IR_First`   | Legacy enum — runtime always expends **IR before radar** |\n| `WeaponFilterMode` | `AntiMissileOnly` | Station filter mode |\n\n**1. HUD Visuals**\n\n| Key                    | Default | Description |\n| ---------------------- | ------- | ----------- |\n| `ShowAseInterceptRing` | `false` | Optional ASE ring + arc SHOOT / POTENTIAL HIT labels |\n| `RenderRadialText`     | `true`  | Status cue under weapon HUD hint |\n| `AseVisualScale`       | `1.0`   | Ring visual scale |\n\n**2. Engagement Envelope**\n\n| Key                         | Default   | Description |\n| --------------------------- | --------- | ----------- |\n| `MaxLaunchRangeMeters`      | `15000`   | Absolute max intercept range (m) |\n| `MinLaunchRangeMeters`      | `150`     | Absolute min engagement dead-zone (m) |\n| `AseMaxRangeFactor`         | `1.0`     | Dynamic engage window multiplier |\n| `AsePreviewRangeFactor`     | `1.0`     | ASE preview range multiplier |\n| `AsePreviewAppearDistanceM` | `5000`    | Slant range (m) where ASE preview may first appear |\n| `MaxManeuverWindow`         | `4.5`     | Max maneuver time for envelope (s) |\n| `AseInterceptConfidence`    | `0.99`    | Intercept confidence target |\n| `AseSensitivityBias`        | `1.0`     | Global envelope radius multiplier |\n| `DefaultMaxTurnG`           | `15.0`    | Fallback g-limit when prefab data missing |\n| `MinArmDistSlack`           | `1.0`     | Arm-distance slack multiplier |\n\n**3. Fire Control \u0026 Geometry**\n\n| Key                       | Default | Description |\n| ------------------------- | ------- | ----------- |\n| `ManualLaunchAimTolerance`| `0`     | Extra aim tolerance (deg). `0` = strict ASE; `180` = open gate |\n| `RequireAseScreenShoot`   | `false` | When `true`, SHOOT requires on-screen gun cross (no velocity/nose world fallback) |\n| `LaunchCooldown`          | `0.35`  | Inter-shot station wait inside a pair (s). Pair hardware lock fixed at **1.8 s** in code |\n| `MissDistanceToleranceMeters` | `50` | Max CPA (m) for threat inclusion |\n| `MaxTimingTickDt`         | `0`     | Optional salvo timing tick cap (`0` = off) |\n\n**4. Signal \u0026 Tracking**\n\n| Key                    | Default | Description |\n| ---------------------- | ------- | ----------- |\n| `ClosureMinThreshold`  | `0.1`   | Minimum closure speed floor (m/s) for TTI and range gates |\n| `TtiSmoothingFactor`   | `0.08`  | TTI low-pass alpha (also under WarningTTI) |\n\n\n\n\n### WarningTTI\n\n\n| Key                  | Default | Description                                    |\n| -------------------- | ------- | ---------------------------------------------- |\n| `Enabled`            | `true`  | Append TTI suffix to MWS threat labels         |\n| `TtiSmoothingFactor` | `0.08`  | Low-pass blend toward raw physics TTI (0.01–1) |\n\n\n---\n\n\n\n## Project layout\n\n```text\nNOCS/\n├── NOCS.csproj\n├── NOCS.sln\n├── NocsPlugin.cs              # BepInPlugin entry, Config.Bind\n├── NocsHost.cs                # DDOL host, mission-scene bootstrap\n├── AppVersion.cs\n├── CHANGELOG.md\n├── Config/                    # BepInEx config bindings + cache\n├── Core/                      # Bootstrap, guards, FlightHud patch\n├── TrueNotch/                 # Passive notch HUD + Warning TTI\n├── HardKill/                  # ASE circle, MWS filter, swarm geometry, weapon FSM\n└── Util/                      # HUD placement, screen scale, hotkey helpers\n```\n\n---\n\n\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md).\n\n---\n\n\n\n## Licence\n\nMIT License (c) CopyRight ©Mursisru (2026) — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmursisru%2Fnocs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmursisru%2Fnocs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmursisru%2Fnocs/lists"}