Skip to content

Repository files navigation

Naval Fleet Command

Credible command update: move and resize existing air stations on the chart, assign CAP to protect a group, and use capability-based AAW/ASW screens. Expanded readouts, evidence-based contact solutions, forward-looking missile seekers, submarine check-ins, deliberate ship-array handling and aircraft patrol/transit/dash profiles make the command decisions more legible. Two short command exercises teach missile defence and sonar deployment. See controls, behavior and limitations.

Deeper command review: Classic now uses the original four actual time rates (1×, 2×, 4×, 8×), manual SAM defence and attacks on orders. Northern Passage has an optional guide that follows real commands and explains unresolved reports. The 3D view distinguishes sighted vessels from sensor estimates, uses reported class data and respects terrain masking. Existing saves keep their exact gameplay rules. See the findings and validation.

Command-screen refinement: a quieter nine-control strip, task-first Orders menu, clearer contact menus and explicit live/stale report ages. Unassessed contacts no longer imply zero damage, and hover cards have a readable backing. See the review and validation.

M36 Missions, saves and an enemy with a plan: send a combat air patrol, a search or a strike from Air Operations and pick its station on the chart; ships and aircraft keep their stations through whatever they are doing (S sends them back); save and reload a battle exactly (Ctrl+Shift+S / L / O); share one attack between several ships; and choose Classic on the desk for missile defence on your orders. The enemy now pursues an objective, and the operations react to what you do and change from one start to the next. See what changed and how it was checked.

M34 The Command Loop: hook a ship and right-click a hostile, and it closes to range, chooses the weapon and keeps firing until the contact is destroyed or lost, reporting INTERCEPT TRACK and ENGAGE on its orders line. Right-click an unknown to investigate it; Shift+right-click for the contact menu. The operations desk opens on the authored operations again, every mission ends with a graded mission effectiveness percentage, and a commander's log keeps your best result for each. See why the game still missed Fleet Command, and what changed.

M33 Command Intent: inspect a contact while retaining your shooter, order a persistent investigation, and fire a stated finite salvo directly from its menu. Mouse-accessible chart, time and camera controls, readable 3D framing, subject captions and scenario-driven clouds and rain connect orders to the battle. See the Fleet Command research, controls and validation.

Combat cleanup: direct Attack and Defence keys, clearer salvo receipts, live missile inspection and corrected interceptor guidance. See the fixes and validation.

M32 Command Watch: a quieter relief chart, larger track numbers, persistent command keys, repeating patrol areas and rebuilt Nansen, Gorshkov and Steregushchiy models bring the command screen closer to its late-1990s inspiration. See the controls, screenshots and validation.

Northern Passage: start an original escort directly from the operations desk. Protect a freighter over an eight-mile route, investigate with a Seahawk, conserve defensive ammunition and avoid sinking neutral traffic. The debrief includes civilian accountability and the observed event timeline. See the play guide and validation.

A naval command game in Godot 4.7.2, in the tradition of the late-1990s fleet-command games. Build an uncertain contact picture, protect the force, operate a carrier air wing, and decide when the salvo is worth the missiles. Create missions across the North Atlantic, the Western Pacific, the Gulf and the Mediterranean, in 2027 and in 1990. Original art and code; no Jane's assets or affiliation.

Play

Play in your browser → jjnell95.github.io/naval-fleet-command. Nothing to install: it runs in Chrome, Edge, Firefox or Safari on a desktop or laptop with a keyboard. The first visit downloads the game once and the browser caches it.

Locally, open Launch Preview.command for the included browser build, or open project.godot in Godot. For the introductory operation, choose Start Northern Passage, read the paused briefing, then Take Command. The desk opens on Operations, the authored missions with their difficulty stars and your best result; Training holds the short exercises. To author a mission, use My Missions. Choose Build a Fleet / Edit Mission, open Fleet Builder, set the two forces, then Save and Play. Read the briefing before taking command.

The operations desk puts the task, first orders, theatre, difficulty and estimated play time beside the chart. The briefing separates Orders & Objectives, Situation, and Command Reference. All of the conflicts are fiction on real charts.

Fleet Command: the relief chart, mouse command controls, regional map, live Nansen frigate and platform data

Operations

The operations desk opens on the authored operations, as the late-1990s mission lists did: each with its theatre, difficulty stars and, once played, your best effectiveness. Training holds the exercises and short engagements; My Missions holds what you build.

Shelf Missions
Operations · 2027 North Cape: Ballistic Missile Defence · Taiwan Strait: The Picket Line · Strait of Hormuz: Tanker Transit · Eastern Mediterranean: The Tartus Line
Operations · 1990 Northern Convoy · The Iceland–Faroe Barrier · Norwegian Sea: Carrier Watch
Training Northern Passage · Carrier Qualification · Command Practice / Missile Defence · Command Practice / Deliberate Sonar

Eleven missions ship: one 2027 operation in each chart region, three from 1990, and four introductory operations and command exercises. Earlier builds carried 23; the overlapping ones were cut in M35 and remain in git history.

The Campaigns shelf takes the same seven operations in their in-game date order: Northern Flank, September 1990 (convoy, barrier, carrier watch, climbing from one star to three) and Four Crises, 2027 (North Cape in March, the Taiwan Strait in April, Hormuz in May, Tartus in October). An operation opens when the one before it has been won at 60% effectiveness or better, so a victory spoiled by a sunk neutral has to be flown again. Nothing carries between operations, because each is a different force in a different sea; the commander's log is the campaign's only record, and the debrief says what a result opened.

Every mission ends with a graded mission effectiveness from 0 to 100%: the task is worth 60 and is credited only on a win, the force kept 20 and the enemy's points taken 20, with partial credit for damage; each neutral vessel your weapons sink costs 25. Before any civilian penalty, a victory grades between 60 and 100% and a defeat between 0 and 40%; a neutral your weapons damage but do not sink costs a pro-rata share of the 25. Platforms are worth points by type (a carrier 1,000, a destroyer 400, a frigate 250, a fighter 60), and a scenario can set its own. The commander's log in your browser or application storage keeps each mission's best result and date.

Every operation carries a commander's intent, numbered first orders, a difficulty and a play estimate. The Pacific and Gulf operations add coastal missile batteries, long-range SAM sites, ballistic anti-ship missiles, drone salvos, fast-attack-craft swarms, and Japanese destroyers sailing with the US carrier group. Several give you Tomahawks and a battery ashore to think about: striking it first is a decision with rules of engagement attached, not a reflex.

The forces

140 platforms, 149 weapons and 165 sensors across four catalogues, each with recognition art and an inspectable model:

  • Modern NATO and Russia: Burke IIA and III, Ticonderoga, Constellation, Nimitz and Ford, Queen Elizabeth, Type 45 and Type 26, FREMM, Horizon, Charles de Gaulle, Mistral, Juan Carlos I, Nansen, Iver Huitfeldt, Sachsen, Braunschweig, Visby, Virginia, Astute, Suffren, Gotland; Gorshkov, Grigorovich, Slava, Udaloy, Steregushchiy, Buyan-M, Yasen-M, Kilo; carrier and land-based aviation on both sides.
  • PLAN: Type 055, Type 052D, Type 054A, Type 056A, Type 022, the carrier Shandong with J-15s, Type 093B and Type 039A submarines, H-6J, J-16, KJ-500, Y-8Q, four helicopter types, a replenishment ship, YJ-12B and DF-21D batteries and an HQ-9B site.
  • Japan: Maya, Akizuki, Mogami, the Izumo after her F-35B conversion, Taigei, P-1, SH-60K, F-35B and F-2, and a Type 12 coastal battery.
  • Iran: Moudge and Alvand frigates, an export Kilo, Ghadir midget submarines, Peykaap III and Houdong craft, Mohajer-6, Qader and Khalij Fars batteries, a drone launch site and a Bavar-373 site.
  • 1990: Perry, Spruance, Ticonderoga, Nimitz, Los Angeles, Victor III, Sovremennyy, Udaloy, Slava, Nanuchka, F-14A+, E-2C, A-6E TRAM with Harpoon, P-3C, S-3A and period helicopters, with their own weapons and sensors so nothing modern leaks in.

Public identities and broad fits are documented in the 2027 theatres ledger, the 1990 ledger and DATA_SOURCES.md. Performance values, signatures, magazines, detachments and hit probabilities are game estimates.

Command the force

The command screen is laid out the way the late-1990s fleet-command games laid theirs out: the relief-shaded tactical chart across the top two-thirds of the window, and along the bottom the regional map, the 3D view of the hooked platform and the data display.

  • Patrol: hook a deployed platform, choose Orders → Assign patrol area (or Shift+W), then click two opposite corners. The circuit repeats until retasked; aircraft still use fuel and return at bingo. The preview checks land and turning room. Right-click or Escape cancels drawing.
  • Keep a station: a patrol, a formation slot or an air mission's box is a platform's standing assignment, and investigating, attacking, evading or refuelling no longer erases it. S (or Return to station in the Orders menu) sends the hooked platforms back to it; the orders line names the station and says when a platform is off it. Orders → Navigation → Auto-return to station makes a platform go back by itself once an identification or intercept ends. A move, course, stop, route or return-to-base order from you replaces the station.
  • Hook and move: left-click a symbol to hook it (Shift adds). Right-click water to send the hooked platform there at once; Shift+right-click adds a waypoint. W arms a multi-leg route. Right-drag, middle-drag or the arrow keys pan; the wheel zooms. Home fits the force, C centres the hook and its target, F follows it, . hooks the next own platform.
  • Give orders: right-click your own platform for its Orders menu (speed, course, altitude or depth, sensors, EMCON, weapons state, flight deck, formation, route). R radar, P active sonar, E emission control.
  • Respond to an attack: Defence on the command strip opens defensive controls; your platform's right-click menu also includes them. D deploys a radar countermeasure pack; V orders evasion against a detected inbound weapon. The Defence tab on the orders board adds infrared and acoustic packs, run-away steering, resume-plan, automatic/manual countermeasures and Conserve/Balanced/Saturation interceptor policies. Stores, active windows and reload times are finite. Evasion keeps the existing route and formation assignment.
  • Command large groups: J opens Fleet Operations with group readiness, station error, defensive ammunition and group orders. Ctrl+1 to 9 stores a selection and Alt+1 to 9 recalls it. AAW and ASW screens place the best-equipped escorts toward a held threat; Transit keeps a column. Geometric formations remain available. Groups pace slower consorts, including a ship listening with its array streamed, and pass command after a flagship is lost.
  • Attack: hook a platform (or several) and right-click a hostile contact. The cursor shows a cross when a right-click will attack. Each platform closes to its best weapon's range (the orders line reads Intercept track), fires a salvo, waits for it to land and reads the plot, and fires again until the contact is destroyed or lost, its magazines are empty or weapons are put on hold; when one weapon runs out it moves on to the next. A move, course, stop, route, patrol, formation or investigate order replaces the attack; a speed order sets its closing speed, and evasion only pauses it. It never fires on a stale plot. An unclassified contact is investigated instead, and a neutral, a friendly or a classified contact of unknown allegiance gets the menu.
  • Engage: Shift+right-click a contact for its menu: Attack track N, a ready Fire N × weapon, or Weapon selection for Attack with a chosen weapon and Engage with a finite salvo, or choose Attack on the command strip for the firing board. With two or more ships hooked, Group attack (N rounds)… (or GROUP BUDGET and GROUP ATTACK on the firing board, Shift+E) shares one round budget across the group: rounds go to the ships that can fire them, and nobody fires again at a contact until the last volley has landed and been assessed. Each system shows available, queued and airborne rounds; group salvo quantities apply per eligible platform. Hover a plotted weapon for its course and speed; own rounds also show shooter, target, estimated time and remaining range. Unknown and neutral contacts are not free targets. Land-attack rounds can be fired at a battery or an airfield once it is classified.
  • Inspect and investigate: clicking a contact updates its data and 3D view while retaining your selected shooter. Right-click an unresolved contact to investigate it (the cursor shows a query mark): the platform follows the held plot until classification or loss. Use a reconnaissance aircraft to keep escorts on station. A ready Fire N × weapon choice gives a direct finite salvo; blocked shots state why. Click your own platform to restore its view.
  • Mouse controls: Orders opens route, patrol and return-to-station tasks, with speed/course under Navigation and boards under View & status (A still opens boards directly). Chart opens silhouettes, labels, symbol explanations, ranges, zoom and framing. The time menu beside Pause selects acceleration while preserving pause. Chart → Next priority contact (or N) cycles contacts. The live view exposes camera selection, Swap and Full/Back controls.
  • Build the picture: contacts begin uncertain. Radar establishes a domain; acoustic/ESM library matches can suggest a probable class, and visual recognition or the operation’s authored recognition brief can establish identity. Waiting on an unchanged passive bearing does not produce range: a useful maneuver or separated, crossing reports are needed. A passive bearing is not a measured range. N / Shift-N cycles priority contacts. Tab switches NTDS and graphic symbols; Shift-V / K / I toggle velocity leaders, track numbers and tags.
  • Read the data display: the hooked platform's class, track number, course, speed, damage, orders, sensors and weapons (the hull's reach for each job, then every system and its rounds in columns, strike first), or a contact as held: its class, COURSE and SPEED, an estimated %DAMAGE from your own hits, and the SOURCE platform and sensor that made the last plot ("FFG Nansen SPY-1F multifunction radar"). With nothing hooked it shows the mission's tasking, or whichever contact the cursor rests on. F7 opens the reference on a classified contact's class. DETAILS opens the full wrapping readout; +N MORE opens all weapon systems. The expanded view keeps live warnings and the current clock state. Its footer carries the watch time and the time scale (click them to pause or step the scale) and a lamp that flashes for new warnings.
  • See it: the 3D view follows the hook. T cycles the cameras: F9 tether, F11 fly-by, F12 action, F8 detached. Action follows your strike rounds to their impact and cuts to anything your plot witnesses, however far off; the tether names an out-of-frame event ("F12 to watch") without leaving your ship. G swaps the chart and the 3D view; F10 gives the 3D view the whole window, with sun shadows. After dark, ships show their navigation lights on their proper arcs, so the lights alone say which way a ship is heading.
  • Fly: F3 opens Air Operations. Select a host, aircraft type and quantity, then launch. Launch is the only launch action; Close sends no order and restores the previous clock state. Choose an airborne airframe and a compatible Land At destination, then Return & Land. Recovery, refuelling and rearming precede relaunch.
  • Fly a mission: in Air Operations open MISSION PLAN and choose a MISSION (combat air patrol, reconnaissance, ASW search or strike), the type and how many, then PICK ON CHART for the station or the target (Air strike… in a contact's menu does the same for that contact). The deck launches what it has ready and queues the rest; the MISSIONS tab shows each airframe's state, from queued to recovering, and Cancel brings them home. A CAP identifies unknown aircraft and intercepts only hostile ones; reconnaissance never fires. Tick Relief to launch a replacement before an airframe leaves the station. Hold area keeps a CAP on a fixed station; Protect group follows a friendly platform, with a stated pursuit boundary. Use MISSIONS → EDIT MISSION to change an existing CAP/search, or drag its station centre/title and east-edge radius handle on the chart. These edits retain assigned aircraft; Escape or right-click cancels an unsubmitted drag. Active strike targets are reassigned by cancelling and creating a new strike.
  • Status boards: A opens the orders board, the task group (roster, readiness, event log), the track file (with the air-defence board) and the comms history over the chart. The game keeps running.
  • Manage the watch: Space pauses; 1–6 selects 1×–60× time (1–4 selects 1×, 2×, 4×, 8× under Classic). Combat you could see interrupts acceleration. Radio traffic reads along the bottom of the chart, and whoever is talking is ringed in white.
  • Save the battle: Ctrl+Shift+S quicksaves, Ctrl+Shift+L loads the quicksave, and Ctrl+Shift+O lists every saved engagement (also from the operations desk). The battle is autosaved every ten minutes of simulated time and the newest five autosaves are kept. A restored engagement opens paused, exactly where it was, under the gameplay options it was saved with.
  • Find a command: H lists every key command. Command-K / Control-K opens Actions from anywhere. Right-click the chart with nothing hooked for the display and screens menu. F1 orders and help, F2 symbol key, F4 sensors, F5 trails, F6 relief shading, F7 reference, M missions, Ctrl-E editor, Ctrl-F10 restart (press twice to confirm), Ctrl-M sound. Crew voice (spoken reports through the system's text-to-speech; on by default in the browser, macOS and Windows) and the ambient sea and machinery bed are switched from Actions or the right-click Sound menu, and remembered between sessions.
  • Choose how to play: the operations desk's Gameplay row (and the preset chip on the command bar) switches between NORMAL, the game as above, and CLASSIC, the late-1990s way of playing: an 8× actual time ceiling, missile defence on your orders (X, or right-click a detected inbound round, fires the hooked ships' SAMs; close-in guns still answer by themselves), attacks only when ordered, submarine communication windows, and crew voice and ambient sound on. OPTIONS sets each one separately (CUSTOM), including optional auto-attack after investigation. Normal and older saves keep immediate submarine orders unless communication windows are enabled. The choice is remembered between sessions. CAMPAIGN: NORTHERN FLANK, SEPTEMBER 1990 on the desk opens the next operation of the 1990 campaign (an alternate-history Cold War setting, separate from the Classic way of playing).

The interface targets a desktop/laptop with keyboard and mouse/trackpad and is laid out for 1600 × 900 or larger. Browser play requires WebGL 2. Touch-only phone play is not supported, and the browser build says so before it downloads.

What realism means here

Interface size: choose 100%, 110%, or 125% under the operations desk’s Options menu or the command bar’s gameplay preset menu. This saved display preference scales text, chart labels, menus and controls together; it does not change the realism preset or engagement saves.

Dipping sonar: select a fitted airborne helicopter, then Orders → Sensors → Deploy dipping sonar. The crew establishes a hover, lowers for 30 simulation seconds, then listens. Active/passive sonar commands choose the sensing posture. Raise dipping sonar takes 20 seconds; navigation and recovery commands also raise the array before movement resumes. ASW crews use timed listening cycles and return to their search circuit. These handling durations are gameplay estimates.

Ship arrays: on a fitted surface ship, Orders → Sensors → ASW search keeps its route, slows to 8 knots and streams for 120 simulation seconds before listening. Recover towed array, new navigation, unsafe water, sensor damage or evasion initiate recovery; acceleration resumes after 90 seconds. Hull sonar is independent. These are handling estimates, not named-equipment specifications.

Submarine communications: Classic enables full orders and reports at 150 ft / 46 m or shallower. While deep, the boat continues its task, the display retains its last report and your orders queue. Orders → Navigation → Communications requests a check-in or selects on-demand, hourly, two-hourly or four-hourly reporting. The threshold and one-minute communication window are game abstractions; Normal retains immediate orders.

Aircraft profiles: airborne aircraft have Patrol, Transit and Dash speed choices. Stations use economical patrol; outbound and return legs use transit. Dash costs disproportionate fuel, and hovering costs more than economical helicopter forward flight. The Tomcat’s representative profiles are 390/480/700 knots, with other catalogue values and performance estimates documented in data.

The game models radar horizons, ESM, passive/active sonar, thermal layers, sonobuoys, uncertain and stale tracks, target-motion estimates, layered defence, channel limits, chaff against missiles and acoustic decoys and anti-torpedo rounds against torpedoes, damage control, terrain masking, ship turning, aircraft fuel and deck cycles. The AI uses its held tracks and detected threats. Installations ashore stand on their ground: a battery on a headland sees the sea it faces, fires out over its own coast, and is hidden from the other side.

Four chart regions are built from Natural Earth 1:10m land and bathymetry: the North Atlantic with the Norwegian, Barents and Baltic seas; the Western Pacific from the Sea of Japan to the South China Sea; the Arabian Sea with the Gulf and the Red Sea; and the Mediterranean. Each has a continuous sea floor for the water column and the chart. Natural Earth is generalized cartography, not navigation data.

Forward seeker cones and authored mount sectors now constrain acquisition and firing; the crew turns to unmask a weapon during a standing attack. Held civilian traffic and positional uncertainty produce firing advisories. Datalink latency and topology, continuous illumination details, mechanical launcher conflicts and some weapon trajectories remain simplified. Ballistic anti-ship missiles fly a single abstract profile. Drone swarms are a generic one-way attack drone fired in salvos. Logistics, replenishment and mine warfare remain future work. Engagement saves are implemented, including mission assignments, queued orders and sonar handling state.

Develop and verify

godot --headless --path . --editor --import --quit
godot --headless --path . --script tests/run_tests.gd      # regression tests
godot --headless --path . --script tests/run_tests.gd -- --only=test_attack.gd,test_cds.gd   # a few files
godot --path . -- --cold-war-smoke                          # 50 command-screen checks
godot --path . -- --aviation-smoke                          # 19 air-operations checks
godot --path . -- --fleet-workshop-smoke --scenario-storage=res://work/test-library   # 44 authoring, desk and campaign checks
godot --path . -- --weapon-control-smoke --scenario-storage=res://work/test-weapons  # 30 weapon-control checks
python3 tools/verify_northern_passage.py "$(command -v godot)" # real-scene outcomes and replay
godot --path . -- --scenario=res://data/scenarios/pacific_02_taiwan_strait.json --fastforward=2400 --run --perf=8   # frame budget
godot --path .

GitHub Actions runs the regression, command, aviation, workshop and weapon-control suites on every pull request, plus Command Watch mouse/patrol checks, Northern Passage outcomes/replay and graphical checks at 1280 × 720 and 1920 × 1080 (.github/workflows/tests.yml).

Regenerate the scenarios by running, from tools/scenarios/, build_scenarios.py, build_northern_passage.py, build_cold_war.py, build_theatres.py and then operation_design.py. Run build_command_training.py after those to regenerate the two command exercises. operation_design.py and the training builder apply the explicit recognition briefs from recognition_brief.py. The regional coastline extractions and sea-floor rasters come from tools/scenarios/import_coastlines.py and import_bathymetry.py over the Natural Earth downloads named in tools/scenarios/regions.py. Generated files are committed, so playing needs neither Python packages nor network access. tools/art/ builds the models and renders the recognition art without Blender; tools/blender/ holds the earlier pipeline.

The repository includes the matching Godot 4.7.2 browser runtime. After changing the game, run tools/web/build_web.sh to rebuild docs/play/index.pck and record its size in the loader page (set GODOT=/path/to/Godot if godot is not on your PATH). GitHub Pages serves main:/docs, so merging to main publishes the browser build.

See the release notes, architecture and the source ledgers. Godot licensing is in docs/play/GODOT-LICENSE.txt. No new source-license grant is inferred.

About

Aegis-inspired naval command simulation: Godot source and playable browser release

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages