Visualizes game state logs generated by the open-source spaceship bridge simulation game, EmptyEpsilon.
Demonstration of a scenario being played back in the game state log viewer: https://i.imgur.com/j07hRlx.gif
Enable game state logging in EmptyEpsilon by creating a logs
directory in the directory where you installed EmptyEpsilon (on Windows), or in a relative path (on *nix), or inside the app bundle on macOS.
Run an EmptyEpsilon scenario, then exit the game. A JSON file should be present in the logs
directory, named game_log_(datestamp).txt
. For log examples, see the samplelogs
directory in this repository.
Clone or download this repo, then open index.html
in a web browser (or go to https://oznogon.github.io/ee-gsl-viewer/, which uses the current version on the main
branch).
Drag the game state log onto it, or select the log in your storage by clicking the "Browse..." button.
You can then view a replay of the scenario, at one second of gameplay per frame of playback.
- Ships: Large deltas (notched triangles) color-coded by faction
- Missiles: Small deltas color-coded by type.
- Gray: HVLI
- Light orange: Homing
- Blue: EMP
- Dark orange: Nukes
- Space stations: Hexagons
- Phenomena such as nebulae, black holes, wormholes: Images
Other objects are color-coded dots:
- Yellow dots: Asteroids. Faded yellow dots are visual asteroids that can't be collided with.
- White dots with a ring: Mines, with the ring representing their detonation range.
- White dots without a ring: Artifacts.
- Blue dots: Supply drops.
- Orange dots: Warp jammers.
Ship and station colors correspond to their faction, using the same colors as EmptyEpsilon's factionInfo.lua
script:
- White: Human Navy
- Red: Kraylor
- Light green: Ktlitans
- Bright green: Ghosts
- Orange: Arlenians
- Gray: Independent
- Bright pink: Exuari
- Bright purple: USN
- Teal: CUF
- Yellow: TSN
Red arcs on ships represent its beam weapons. Faded red arcs represent turreted beams' extents.
When zoomed in, objects with hulls (green) and shields (blue) have color-coded rings. The shield ring can be notched to represent separate shield segments. The thickness of shield and hull rings represent relative strength, so a ship with a stronger shield and hull has thicker rings.
The text at top left denotes:
- the current mission time
- the current zoom scale
- the X / Y coordinates of the center of the view
- the designation of the sector at the center of the view
- Start and stop automatic playback by clicking the "Play" button.
- Cycle through playback speeds by clicking the "10x" button, which displays the current playback rate.
- Scrub through the scenario timeline by dragging the slider at the bottom.
- Toggle callsign displays by clicking the "Callsigns" button.
- Zoom with your mouse wheel, by dragging the zoom slider at top right, or by clicking the +/- buttons near the zoom bar.
- Click and drag on the map to scroll.
- Click a ship or station to display stats, such as its shield and hull strength, weapons, etc.
- Click the "Lock" button (crosshairs under the zoom bar) to lock the view on the selected object and follow it during playback or when scrubbing through the timeline. This prevents you from manually panning the camera until you unlock the view, or if you lose the selection (by clicking in empty space, or the selected object being destroyed).
- To load a new file, either drag and drop it onto the current viewer, or refresh the page (ctrl-r or command-r).
- =, -: Zoom in and out, respectively. Hold shift to increase the zoom magnitude.
- k: Toggle playback.
- ]: Cycle through playback speeds (1x, 2x, 4x, 10x, 20x, 40x).
- c: Toggle callsign display.
- l: Toggle locking the view on the selected object.
- x, z: Scrub through the timeline one frame (1 second of game time) at a time. Hold shift to scrub by 10 frames.
- w, a, s, d: Pan the map up, left, down, or right, respectively. The distance panned scales to the current zoom level. Hold shift to pan 10x faster.
Based on logs/index.html
in the EmptyEpsilon repository.
Incorporates:
- Johannes Baagøe's Alea PRNG asported and packaged in davidbau/seedrandom
- ccampbell/mousetrap
- fstirlitz/luaparse
- jquery
- The font Big Shoulders, xotypeco/big_shoulders
- The EmptyEpsilon icons font from daid/EmptyEpsilon
factionInfo.lua
from daid/EmptyEpsilon