English | 简体中文
A smart automated fire-control-system mod for Iron Nest: Heavy Turret Simulator.
After you place a target marker on the Tactical Map, IronNestFCS Smart can handle most of the repetitive firing workflow: ballistic calculation, gun assignment, ammunition loading, elevation, turret azimuth, trigger preparation, and optional automatic firing.
Nexus Mods · GitHub Release · IRON NEST on Steam · MelonLoader
Automate the work, not the tactics.
You choose the targets, ammunition, and task order. Smart executes the plan.
Press F9 when you want to abandon the current mission plan and build a new one. F9 resets TaskSystem planning and execution state, but it does not pretend that an already accepted physical loading sequence never happened. New missions continue from the guns' real current physical state.
- Build a T1–T4 mission queue and keep both guns working through it.
- Tasks that do not match the guns' current loaded shell/charge stay Pending instead of disappearing; later compatible tasks can still be planned.
- Replan with F9 without erasing already-started physical loading.
- Read the real chamber, loading mechanism, turret and control state before making execution decisions.
- Calculate ballistics through the game's own ballistic calculator.
- Quickly reject obvious shell-type or fixed-charge range mismatches before driving the slower in-game ballistic calculator UI.
- Automatically buy missing shells and powder when required.
- Set elevation and turret azimuth automatically.
- Optional Auto Fire for the final firing action.
- Max Charge can prefer the highest usable powder charge.
- The top-left FCS panel shows the current mission, progress, range, charge, elevation and estimated shell flight time; flight time is available as soon as the FirePlan is created instead of waiting for the mechanical TTI dial to reach the firing-ready stage.
- Pending tasks can show a short HUD reason such as shell mismatch or insufficient current charge range.
- Automatically detects Chinese and supports both English and Simplified Chinese UI.
- One universal release package is used for all players.
Download the latest universal package:
IronNestFCS-Smart_vX.X.X.zip
Installation:
- Install MelonLoader for IL2CPP using the official MelonLoader installer and run the game once.
- BepInEx-to-MelonLoader bridge setups are not supported, as incompatible bridge/runtime versions may prevent IronNestFCS from loading correctly.
- Close the game.
- Extract the ZIP directly into the game root directory.
- Allow Windows to merge
Mods,UserLibs, andUserDatawhen prompted. - Start the game normally through MelonLoader.
After installation these files should exist:
<GameDir>/Mods/IronNestFCS.dll
<GameDir>/UserLibs/IronNestFCS.Abstractions.dll
<GameDir>/UserData/IronNestFCS/IronNestFCS.Logic.dll
Do not put the whole ZIP inside the Mods folder.
Smart automatically detects Chinese and supports both English and Simplified Chinese UI.
On the Tactical Map, move one of the red numbered markers 1–4 to the position you want to attack.
Choose the shell type, then click the matching T1–T4 submit button:
red 1 → T1
red 2 → T2
red 3 → T3
red 4 → T4
You can submit several missions in succession. Smart will plan and distribute them between the two guns.
If a mission cannot match the guns' current physical ammunition state, it stays in the Pending queue. That blocked mission does not prevent a later compatible mission from using an available gun. Use F9 when you want to discard the current queued missions and replan.
A normal mission flows through:
read target
→ read current physical state
→ build Task × Gun eligibility
→ match the task to a gun
→ materialize the selected ballistic solution
→ buy missing ammunition if needed
→ load shell + powder
→ set elevation
→ rotate turret
→ prepare Review / Arm
→ manual fire or Auto Fire
The top-left IronNest Fire Control System panel shows:
- left/right gun physical state or current T mission;
- mission progress and elapsed time;
- azimuth and range;
- charge and elevation;
- estimated shell flight time as soon as the FirePlan is created;
- fire-priority/order status;
- Auto Fire and Max Charge state;
- pending queue, including a short mismatch hint when useful;
- session success/failure statistics and recent results.
Estimated flight time uses measured in-game C1–C6 fixed charge coefficients and the target range. This makes TTI available immediately after the FirePlan is fixed instead of waiting for WaitingForFire. The existing game Time-To-Impact dial reader remains as a fallback if an early estimate is unavailable. The value stored on the FirePlan does not continue counting down with the mechanical dial after firing.
- Auto Fire ON: Smart performs the final firing action once the gun and turret are physically ready.
- Auto Fire OFF: Smart prepares the shot and waits for you to fire manually.
Press F9 whenever the current plan or queue is wrong. Then reposition the markers and submit new T1–T4 missions.
Important: F9 resets the plan, not physical reality. An already accepted shell/powder loading sequence continues. The new plan reads the resulting real chamber, elevation and turret state.
A task that cannot use the current loaded shell/charge may intentionally remain Pending until the gun state changes. If that task is no longer wanted, use F9 to clear the current TaskSystem plan/queue and submit a new one.
Normal play writes only the compact problems.log.
For full troubleshooting diagnostics, edit:
<GameDir>/UserData/IronNestFCS/diagnostics.txt
Set it to:
on
and press F9. Detailed categorized logs are then written under:
<GameDir>/UserData/IronNestFCS/Logs/
Set diagnostics.txt back to off and press F9 after troubleshooting.
Temporary probes used to verify TTI timing, mechanical-dial behavior, and charge coefficients during development are not included in the production branch.
Smart separates the persistent physical Host from the hot-reloadable TaskSystem / Logic layer. Planning first builds side-effect-free Task × Gun eligibility, matches legal assignments across both guns, and only then drives the game's ballistic calculator for the selected assignment. Execution order is a plan; observed physical state and the gun that actually fires remain authoritative.
flowchart TB
PLAYER["Player / Tactical Map<br/>targets · ammunition · T1-T4"]
subgraph HOST["Stable Host · survives F9"]
LOADING["PersistentLoadingSystem<br/>accepted physical loading"]
end
subgraph LOGIC["Reloadable TaskSystem / Logic"]
DISPATCH["TaskDispatcher<br/>Pending · wakeups · admission"]
PLANNER["FirePlanner<br/>snapshot · eligibility"]
MATCHER["TaskGunMatcher<br/>stateless matching"]
MATERIALIZE["Selected-only materialization<br/>game ballistic calculator"]
PLAN["FirePlan"]
PRIORITY["FirePriorityCoordinator<br/>one-shot order"]
EXECUTOR["FirePlanExecutor<br/>left/right slots · current/next"]
CONTROLS["SharedConsoleCoordinator / TriggerConsole<br/>Review · Arm · Fire"]
end
subgraph REALITY["Game physical reality · authoritative"]
GUNS["Chamber / reload mechanism / guns"]
TURRET["Physical turret"]
CONSOLES["Physical consoles"]
end
PLAYER --> DISPATCH
DISPATCH --> PLANNER
PLANNER -->|side-effect-free edges| MATCHER
MATCHER -->|selected Task×Gun| MATERIALIZE
MATERIALIZE --> PLAN
PLAN --> EXECUTOR
EXECUTOR <--> PRIORITY
EXECUTOR --> CONTROLS
EXECUTOR -->|accepted load work| LOADING
LOADING --> GUNS
GUNS -->|physical state / observed shot| EXECUTOR
EXECUTOR --> TURRET
CONTROLS --> CONSOLES
EXECUTOR -. freed slot / recovery retry .-> DISPATCH
A Pending Task is not bound to a gun. The Left or Right side becomes fixed only after Planner / Matcher selects an assignment and creates a FirePlan. Both guns may perform local preparation in parallel; shared turret and firing work follows current / next, while observed physical gunfire determines which FirePlan is actually consumed.
flowchart LR
A["Pending"] --> B["Plan & Match<br/>snapshot · eligibility"]
B --> C["FirePlan<br/>gun assignment fixed"]
C --> D["Local Prepare<br/>load + elevation"]
C --> E["Shared Prepare<br/>current + turret"]
D --> F["Ready"]
E --> F
F --> G["Review · Arm<br/>WaitingForFire"]
G --> H["Observed physical shot"]
H --> I["Consume FirePlan<br/>release slot"]
H --> J["Post-shot recovery<br/>PersistentLoadingSystem"]
I -.-> K["Next Dispatcher<br/>opportunity"]
flowchart LR
A["T1 + T2<br/>Pending"] --> B["Plan & Match<br/>shared snapshot"]
subgraph LOCAL["Parallel local preparation"]
direction LR
subgraph LEFT["Left slot"]
direction TB
L0["FirePlan A"] --> L1["Load + elevation"] --> L2["Left Ready"]
end
subgraph RIGHT["Right slot"]
direction TB
R0["FirePlan B"] --> R1["Load + elevation"] --> R2["Right Ready"]
end
end
B --> L0
B --> R0
L2 --> S["Shared execution<br/>current / next<br/>turret · Review · Arm"]
R2 --> S
S --> P["Observe physical fire"]
P --> C["Consume only<br/>fired FirePlan(s)"]
C --> F["Release fired slot"]
F --> N["Dispatcher may<br/>fill freed slot"]
The two-gun executor therefore behaves as a sliding window, not a batch barrier: both guns may prepare locally in parallel, and a freed side can accept another Pending mission without waiting for the other FirePlan to finish.
These diagrams are intentionally high-level. The maintained architecture source is docs/context/PROJECT_CONTEXT.md, with detailed planning and execution notes in ARCHITECTURE_PLANNING.md and ARCHITECTURE_EXECUTION.md.
The project continues from svr2kos2/IronNestFCS. Smart intentionally keeps its additional automation focused on operating the existing fire-control workflow rather than choosing tactical targets for the player.
Useful scripts:
tools/Deploy.ps1— build/deploy a development copy;tools/Build-ReleasePackages.ps1— build the single universal release ZIP;tools/Release.ps1— version, build, tag and publish a release frommaster.
Detailed project context and current architecture are maintained under docs/context/. Empirical Time-To-Impact measurements are documented in docs/research/TTI_ESTIMATION.md.
IronNestFCS Smart is based on svr2kos2/IronNestFCS. Credit for the upstream code belongs to that repository's authors and contributors.
Released under the repository's MIT License.

