Skip to content

Repository files navigation

IronNestFCS Smart

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

Design philosophy

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.

Highlights

  • 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 and installation

Download the latest universal package:

IronNestFCS-Smart_vX.X.X.zip

Installation:

  1. Install MelonLoader for IL2CPP using the official MelonLoader installer and run the game once.
  2. BepInEx-to-MelonLoader bridge setups are not supported, as incompatible bridge/runtime versions may prevent IronNestFCS from loading correctly.
  3. Close the game.
  4. Extract the ZIP directly into the game root directory.
  5. Allow Windows to merge Mods, UserLibs, and UserData when prompted.
  6. 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.

Automatic UI language

Smart automatically detects Chinese and supports both English and Simplified Chinese UI.

How to use it

1. Place a target marker

On the Tactical Map, move one of the red numbered markers 1–4 to the position you want to attack.

Red target markers 1–4 on the Tactical Map

2. Select ammunition and submit the mission

Choose the shell type, then click the matching T1–T4 submit button:

T1–T4 mission submit buttons

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.

3. Let the FCS prepare the shot

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

4. Read the status panel

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.

5. Fire

  • 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.

6. Replan with F9

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.

Diagnostics

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 architecture

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
Loading

Mission lifecycle

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.

One mission

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"]
Loading

Two-gun sliding window

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"]
Loading

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.

For developers

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 from master.

Detailed project context and current architecture are maintained under docs/context/. Empirical Time-To-Impact measurements are documented in docs/research/TTI_ESTIMATION.md.

Credits

IronNestFCS Smart is based on svr2kos2/IronNestFCS. Credit for the upstream code belongs to that repository's authors and contributors.

License

Released under the repository's MIT License.

About

IronNestFCS Smart — automated fire-control mod for Iron Nest: Heavy Turret Simulator

Topics

Resources

Stars

27 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages