Solar Duel
Solar Duel is a nuclear artillery game across the recognizable solar system. Open Menu → Solar Duel to start practice against House Vesper, create a duel and share its link, join an available human duel, or watch a public match. Playing requires a verified human account; watching and public replay do not.
Aim, save, watch
Both players aim at the same time. Choose a weapon, set a bearing and power; explicit edits save automatically. The latest saved shot fires at the deadline whether or not you press Ready. Ready is optional and freezes the exact displayed shot and flak placement for the scheduled readiness check. The bearing slider is centered on Sun · 0°: move left or right to aim beside the Sun without jumping between slider edges. Its numbers are offsets from the launcher-to-Sun direction, independent of camera rotation. Saved orders and API bearing fields still use an absolute world direction across the X/Z orbital plane; the interface converts between them. Power sets the initial launch speed; the missile also inherits its launcher's orbital velocity. Select hold fire to save an explicit no-shot order; any placed flak still deploys. An untouched default aim never fires automatically. Without a saved order, a missed deadline holds fire. Saving, Saved and failed-save indicators distinguish what has reached the server; an invalid or unconfirmed edit does not replace the previous saved order.
The battlefield fills the viewport beneath one compact command bar. Round, phase, countdown and both territory meters live in that bar. The floating firing controls can be minimized while observing. Duel opens sharing, graphics settings, public replays and map exports. Fullscreen removes browser chrome where supported. On mobile, controls overlay the battlefield; there is no page to scroll through during combat.
Round one gives 50 seconds to learn the battlefield, with one readiness check at 25 seconds. Every later round gives 24 seconds, with one check at 12 seconds. If both humans marked Ready by that instant, the exchange begins; otherwise the full window runs. A delayed worker uses submission timestamps, so a late lock cannot retroactively satisfy the earlier check. Once Ready, a shot cannot be edited. A failed network response can safely be retried with the same receipt. A committed hold also counts as ready; the practice bot plans independently. Autosaves do not trigger readiness or add server checks.
Playback lasts 12 seconds and advances two simulation years. Planets, asteroids and nukes move together during playback. The simulation clock stays still during planning. Most shots arrive in one exchange; slower or curved flights can continue into the next. A missile's maximum flight is four simulation years. At most 18 firing rounds give roughly 7–11 minutes, plus any final flight; a decisive capital strike can win earlier.
The local display plays each received exchange from launch through impact, even if its update arrives late. Brief rendering stalls or a hidden tab pause that presentation instead of skipping the flight. Later received exchanges wait for the current flight and its final impact to finish. The live countdown and firing controls continue to follow the server; map dragging for aim resumes once the displayed flight finishes. Replay flight deliberately restarts the displayed exchange. Reduced motion and the tactical fallback show the resolved snapshot directly.
Spend your arsenal
Each side starts with 60 ordnance, receives 16 before each subsequent firing round, and can store at most 80. Supply is equal and independent of remaining territory. Pick one weapon and optionally one flak placement per round; holding fire skips the weapon cost and lets you save. The controls show the combined order cost and stockpile left after spending. Weapon availability reserves the cost of any selected flak. An unaffordable order cannot be saved or marked Ready. Spending happens once, atomically with the exchange; continuing flights, retries, replay and final retaliation do not charge again. Final-flight and completed matches receive no resupply.
| Weapon | Cost | Speed × | Terrain / settlement radius | Role |
|---|---|---|---|---|
| Dart | 8 | 1.2 | 1.6 / 2.25 AU | Cheap, fast, precise shot |
| Nova | 16 | 1.0 | 2.75 / 4 AU | Balanced nuclear blast |
| Swarm | 26 | 0.9 | 1.35 / 2.1 AU per missile | Five missiles fan out in flight |
| Lance | 24 | 1.05 | 2.3 / 3.2 AU final blast | Pierce asteroid cover |
| Siege | 36 | 0.65 | 4.5 / 6 AU | Slow flight, heavy destruction |
Speed multiplies the selected launch speed before adding launcher motion. Slower weapons need more lead and bend more around planets. Damage also affects friendly and neutral asteroids. Every weapon is absorbed by a planet; piercing is for asteroid cover.
Swarm separates after 0.7 simulation years into five independently simulated missiles across a 14° fan. Children inherit the carrier's current velocity and original four-year flight deadline, and cannot split again. If the carrier hits terrain before separation, it makes one small blast. Lance punches through two asteroid encounters, destroying the triggering rock and nearby terrain within 0.55 AU each time, retaining 90% of its speed. Its third encounter makes the full blast. A carrier or penetrator can remain airborne into the next exchange; historical trails show what actually happened.
Older active matches without a recorded stockpile receive the same 60 starting ordnance on their next resolution. Historical replays keep missing stockpiles explicitly unknown. Older orders and missiles without a weapon field remain standard Nova shots.
Place precision flak
Spend 8 ordnance to protect one fixed point for the coming exchange. Select Flak in the bottom Fire Control panel, beside your shot and budget, to frame your defense perimeter, then click or tap the orbital plane. The outlined range is 20 AU from your launcher; placements must be on your half of the system. The small crosshair shows the actual 0.75 AU radius. Placement snaps when close to a previously recorded enemy trail, helping you cover a repeated firing lane. The trail is history, not a prediction of this round's secret order. Change bearing or power, use the moving planets, or spread Swarm fragments to challenge a predictable defense.
A field intercepts the first three hostile missiles that cross it, including missiles already in flight and Swarm fragments. Friendly shots pass through. An interception stops the missile without a nuclear blast or terrain damage; an unsplit Swarm carrier is lost with all its future fragments. The field stays at its chosen world coordinates while the planets and terrain move, and expires at the end of that exchange. No automatic renewal or extra server checks occur. Flak cannot be newly deployed during final retaliation.
Placement saves together with your shot; Ready remains optional. Remove flak cancels the planned purchase before locking. Hold fire can buy defense without launching a weapon. Shot and flak share the stockpile: an invalid or unaffordable combination leaves the previous saved order in force. Coordinates and spending stay private until simultaneous resolution. Recorded fields and interception events are public afterward, including in replay and map exports.
Learn the gravity
The short guide shows only the first 0.15 simulation years. Previous traces and impact markers let you learn from a miss. They describe the historical shot, not a fresh prediction: planets and territories have moved since it was fired. Aiming ahead matters.
The Sun and moving planets continuously pull on the projectile. Once launched, a nuke coasts without target updates or homing. Flying close to a moving planet changes its path and velocity; planetary positions during the encounter matter. The game uses familiar solar orbital spacing with a common gameplay plane. New duels use deliberately paced orbital sweeps: planets spend more time near the opposing firing lanes, then sweep through them, making one repeatedly copied shot unreliable. Their paths remain continuous full orbits. Giant-planet periods are 16, 22, 28 and 36 simulation years, with staggered starting phases and seeded orientation so neither seat always starts facing the same giant; their collision surfaces are also enlarged. The same positions and sizes drive the visible planets, collision solver, aim guide, practice bot and exports. Older duels without an orbitModel keep their original periods and body sizes so old shots and replays remain coherent. Planetary gravity, body radii and blast sizes are scaled for readable play, not literal astronomical dimensions. The numerical reference records all tuning values.
New duels use gravity model 2: the Sun and planets have stronger local attraction so useful slingshots do not require grazing their enlarged surfaces. The Sun’s maximum local pull is 32 times its distant-field strength; planetary close-encounter amplification is four times the previous orbit-scaled amplification. This extra strength tapers smoothly away at 8 AU; the distant fields remain unchanged. Slower shots curve more and can bend back toward you; moving planets can also change missile speed. A direct collision is absorbed, so aim beside the moving body. Persisted model-1 duels and duels without an orbitModel retain their original gravity; start a new duel for the stronger wells. Physics, previews, practice bots, replay continuation and exports all use the saved model version.
Gravity toggles blue flyby rings around the Sun (model 2) and the four giant planets. Planet arrows show their next two simulation years of motion. Ring size responds to weapon speed and launch power and compares nominal flyby strength. It does not predict an exact bend or mark a force boundary: inherited velocity, the moving encounter and other bodies affect the result. Use Focus target to inspect a planet or follow a missile; the recorded trail shows the resulting curve. Aim switches map dragging from camera orbit to bearing adjustment. The first draft points across the system toward opposing territory; the current weapon, bearing and power carry into the next round so you can refine a miss.
Nukes arm after leaving their departure corridor and detonate on a close asteroid encounter. Celestial impacts terminate the shot without destroying the Sun or planet. A missile that exhausts its flight lifetime burns out. Friendly and neutral terrain can be destroyed by your own shots.
Carve away a civilization
The belt contains 2,048 destructible asteroids. Each civilization owns an irregular 512 asteroid territory, one capital and 32 settlements. The remaining asteroids are neutral terrain. Original territory mass is balanced between players; formations differ.
The standard Nova destroys terrain within 2.75 AU and damages settlements within 4 AU; each other weapon has its own radii. The missing rocks become fragments and drifting orbital dust. Destroyed terrain never returns, cannot house buildings, and no longer triggers proximity fuses. Cleared gaps can admit later shots deeper into the field.
Settlements on surviving rocks rebuild automatically after two rounds, at most two per side per round. This recovery does not replace destroyed terrain or undo collapse progress. Fixed resupply provides enough for a standard Nova each firing round, even after spending the previous stockpile.
Winning and final retaliation
Destroy the opponent's capital asteroid, or destroy 75% of their original territory mass. The displayed percentage counts remaining original terrain, so rebuilding cannot postpone collapse indefinitely.
After a defeat trigger, new firing stops while already launched missiles finish. They can still destroy the other civilization and produce a draw. After the eighteenth firing round, remaining flights also finish before scoring. If neither side was defeated, the civilization with the greater fraction of original terrain remaining wins; equal totals draw.
Observation and interfaces
Diamonds identify the two capital asteroids. Close up, a dedicated pressure habitat stands on a fitted asteroid foundation; the launcher is a connected missile battery with supported tubes and tanks. Focus target includes capitals, launchers, planets, missiles and recorded impacts. Its Flyby approaches show a wider view around a giant planet so you can inspect the curve of a passing shot. Focus an object, then zoom without losing it. Manual movement or System releases focus. Low graphics retains all gameplay terrain and permanent damage. Legend opens help only when requested and can be dismissed on mobile; a tactical fallback remains available without WebGL.
All terrain, trajectories and recorded impacts are public. Submitted weapon, bearing, power and flak coordinates remain private until resolution. Your authenticated current view includes your own saved draft (including an explicit hold) and locked order so reconnecting restores them; opponents and spectators cannot read it. Public stockpiles change only when resolution commits, keeping the weapon cost secret while orders are locked. Public replay contains no private orders, personal seat identity or current locks.
HTTP reads use /api/v1/solar-duel, /api/v1/solar-duel/{matchId}, /replay?round=N and /map?format=json|markdown|ascii|svg|braille. Map coordinates and ownership refer to the selected snapshot; historical exports use the recorded round. JSON includes exact site and celestial positions; textual formats include a complete coordinate index; SVG preserves ownership and world-coordinate attributes. Read-only MCP tools are solar_duel_matches, solar_duel_world, solar_duel_replay and solar_duel_map. Creation, joining, saving and readiness require a same-origin verified human browser session.
Map schema 1.3.0 adds public defense costs and limits, optional orbitModel, upcoming body motion samples, resolved lastExchange.flak fields and intercepted traces / flak impacts. Flak impacts have zero damage radius; their bodyId is the field ID, and each field lists intercepted projectile IDs. Field coverage and exact coordinates are retained in SVG; text labels resolved fields as expired. Only an authorized player's current export can contain their own planned placement. Schema 1.2.0 includes public arsenal costs, speed multipliers and damage radii, supply rules, seat stockpiles, and weapon/fragment/effect metadata on recorded shots and impacts. Older snapshots may omit these fields: an omitted weapon means Nova, but an omitted historical stockpile is unknown. SVG carries weapon metadata on traces, marks flying missiles with triangles, fits the recorded trajectories into its drawing, and draws impact rings at the recorded terrain damage radius. Text maps list resources and weapon roles. Schema 1.1.0 added flybyGuideSpeed and each body's gravityMu, closeGravityMu, gravityBoostRadius and flybyGuideRadius. GM uses AU³/year². gravityMu is the distant field; closeGravityMu is its maximum close-encounter strength. Only the extra strength tapers within gravityBoostRadius. Exports use the public middle launch speed for guide radii, never a player's private draft. Text reports include this information and SVG shows the same Sun and giant-planet guide rings as the interactive map, according to the saved gravity model.
The additive private ownDraft wrapper distinguishes no submission (null) from a saved hold ({ aim: null }). It is absent or null in public replay. POST /api/v1/solar-duel accepts save and lock with the same round, aim, optional nullable flak: { position: [x, 0, z] } and receipt fields; saves replace only unlocked plans, and locks remain immutable. Saved drafts are read at the existing deadline; only locked timestamps count at the midpoint.