Skip to content

LinearPerk/endless-sky-drydock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Linear Perk's Endless Sky Drydock

A visual hardpoint editor for Endless Sky ship sprites. Place guns, turrets, engines, bays, and every sub-key on your sprite and export clean ES data format.

Try it now — runs in any browser, no install required.

Drydock Screenshot

Why This Exists

While building Sci-Fi Flavours, the ES Ship Builder saved me a ton of time placing hardpoints. That tool inspired me to build something that goes further — full support for every hardpoint type and sub-key in modern ES, flare previews, swizzle color previews, mirror mode, import/export, and more. I hope it helps other modders create cool ships for Endless Sky.

Features

  • All 7 hardpoint types — guns, turrets, engines, steering engines, reverse engines, fighter bays, drone bays
  • Every sub-key — angle, parallel, arc, blindspot, turret turn multiplier, zoom, gimbal, facing, launch effects
  • Flare preview — see engine exhaust (atomic, ion, plasma) rendered on your hardpoints with adjustable intensity
  • Swizzle preview — preview all 29 ES faction color remappings on your sprite
  • Mirror mode — place symmetric pairs across the Y axis with one click, angles auto-mirrored
  • Import & export — paste existing ship data (data file or save file format), edit visually, copy clean output
  • Drag to reposition — click and drag hardpoints, mirror twins move together
  • Arrow key nudge — fine-tune positions (0.5 / 0.1 / 5 ES unit increments)
  • Sprite bounds check — detect if opaque pixels touch sprite edges (causes in-game clipping)
  • Grid overlay — coordinate grid at 10/50 ES unit intervals with center crosshairs
  • Undo — full undo stack for place, delete, move, and clear-all operations
  • Zero dependencies — single HTML file, works offline, no build step

Quick Start

  1. Load a sprite — click the file input and select your ship PNG (both base and @2x auto-detected)
  2. Select a type — click a type button or press its keyboard shortcut (G/T/E/S/R/F/D)
  3. Click to place — click on the sprite to place a hardpoint
  4. Copy output — the right panel shows live ES data format output, click "Copy to Clipboard"

Panel Layout

Panel Contents
Left Sprite loader, type/layer selectors, sub-key controls, tools, flare preview, import, hardpoint list
Center Canvas with the ship sprite, coordinate readout, status bar
Right Live ES data format output, copy button

Hardpoint Types

Button Shortcut Type Marker
G G Gun Red circle
T T Turret Blue circle
E E Engine Green circle
SE S Steering Engine Yellow-green circle
RE R Reverse Engine Orange circle
FB F Fighter Bay Purple square
DB D Drone Bay Lavender square

Layers

Each hardpoint has a rendering layer that controls whether it draws under or over the sprite:

  • Default — uses the type's natural layer (guns: under, turrets: over, engines: under, bays: inside)
  • Under — renders behind the sprite
  • Over — renders on top of the sprite
  • Inside — shown with dotted outline (bays)

Cycle layers with U. Layer changes apply to the selected hardpoint if one is selected.

Sub-Keys

Context-sensitive controls appear based on the selected type:

Control Types Description
Angle All Rotation in degrees (0 = forward/up)
Parallel Gun Gun fires parallel to ship facing instead of converging
Arc Turret Firing arc limits (min, max degrees)
Blindspot Turret Dead zone where turret can't aim (min, max degrees)
Turn mult Turret Turret rotation speed multiplier
Zoom Engines Flare size multiplier (default 1.0)
Gimbal Engines How far flare can rotate to follow steering (degrees)
Facing Steering Engine Left or right side (affects flare direction)
Facing Bays Launch direction: forward, left, right, back
Launch FX Bays Effect name played when launching
FX count Bays Number of launch effect instances

Tools

Button Shortcut Description
Mirror M Toggle mirror mode — places symmetric pair across the Y axis
Grid Shift+G Toggle coordinate grid overlay
Bounds B Toggle sprite bounds overlay (green = good padding, red = pixels touch edge)
Markers H Toggle hardpoint markers — hide for clean in-game preview
Undo Ctrl+Z Undo last action (place, delete, move, clear)
Delete Del Delete selected hardpoint (and its mirror twin)
Clear All Remove all hardpoints (undoable)

Keyboard Shortcuts

Key Action
G T E S R F D Switch hardpoint type
M Toggle mirror mode
B Toggle bounds overlay
H Toggle hardpoint markers (hide for clean preview)
U Cycle layer (default / under / over / inside)
Shift+G Toggle grid
Arrows Nudge selected hardpoint (0.5 ES units)
Shift+Arrows Fine nudge (0.1 ES units)
Ctrl+Arrows Coarse nudge (5 ES units)
Ctrl+Z Undo
Del / Backspace Delete selected
Escape Deselect

Mirror Mode

When active, placing a hardpoint also places a mirrored twin at the opposite X coordinate. The twin is shown at reduced opacity and marked with (m) in the list.

Mirror twins stay linked — moving one moves the other. Angle, steering facing, and bay facing are automatically mirrored (sign-flipped for angle, left/right swapped for facing).

Placing exactly on the center line (X = 0) creates a single hardpoint, not a pair.

Swizzle Preview

The swizzle dropdown applies Endless Sky's faction color remapping to the sprite. This shows how the ship will look in-game for different governments (Republic, Pirate, Syndicate, etc.). All 29 ES swizzle values (0-28) are available.

Swizzle is preview-only — it doesn't affect the exported data.

Flare Preview

Select a flare type (Atomic, Ion, Plasma) to preview engine exhaust effects on engine-type hardpoints. The intensity slider controls brightness. Flares respect the hardpoint's zoom, angle, and layer settings.

Flares require the flares/ folder with the PNG assets to be in the same directory as the HTML file.

Import

Paste ES ship data into the import textarea and click Import. The parser accepts:

  • Full ship definitions (ship "Name" ...)
  • Standalone hardpoint blocks (just gun, turret, engine lines)
  • Both data file format and save file format
  • Quoted and unquoted multi-word keywords

All sub-keys (angle, zoom, gimbal, arc, layer, facing, etc.) are preserved on import.

Export Format

Output uses standard ES data file indentation (single tab for hardpoints, double tab for sub-keys):

	gun -15 -40
	gun 15 -40
	turret 0 10
		over
	engine -12 55
		zoom 1.2
	engine 12 55
		zoom 1.2

Hardpoints are grouped by type in standard order: guns, turrets, engines, steering engines, reverse engines, fighter bays, drone bays.

Sprite Tips

  • Use @2x sprites when available — the editor auto-detects from the filename and adjusts coordinate scaling
  • The bounds overlay (B) checks if opaque pixels touch the image edges, which can cause clipping artifacts in-game
  • ES coordinates: X is left-right (positive = right), Y is up-down (positive = down), origin is sprite center
  • 1 ES unit = 2 pixels in a @2x sprite, 1 pixel in a base sprite

JS API

The editor exposes functions on window for programmatic access:

window.getHardpoints()        // JSON array of all hardpoint objects
window.getHardpointsES()      // ES data format string
window.getShipName()          // Current ship name
window.importHardpoints(text) // Import from ES data string, returns count
window.clearHardpoints()      // Remove all hardpoints

Acknowledgments

  • Inspired by the ES Ship Builder from the Endless Sky project
  • Flare preview sprites derived from Endless Sky by Michael Zahniser and contributors (CC-BY-SA-4.0)
  • Built for the Endless Sky modding community

License

Code is licensed under GPL-3.0-or-later.

Flare images (flares/*.png) are derived from Endless Sky assets and licensed under CC-BY-SA-4.0.

Releases

No releases published

Packages

 
 
 

Contributors

Languages