Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Salvage Run

Salvage Run is a minimal asteroid-field roguelite demonstrating Storm! Engine v2's ECS, circle-collision model, and pure-velocity movement. Thrust, drift, break rocks into smaller rocks, tow what is worth taking back to the station before your hold or your fuel runs out.

  • Core loop: blast rocks → fragments split → tow valuable chunks to the station
  • Tether physics: damped spring, slack → stretch → swing — the only thing resisting "go faster"
  • One data table: mass, value, split count, radius for all 12 rock types (size × material)
  • Shift clock: 2 minutes, score = banked only, tethered loot lost on timeout
  • 37 BDD specs covering table invariants, tether math, split chains, HUD math

Clean C++17, no frameworks beyond SDL2 + engine. Build: make && make run.

Salvage Run

Built on Storm! Engine v2 2.3.0.

Controls

Input Action
W / Thrust forward
A / Rotate left
D / Rotate right
Space Fire shot
E Fire / release tether
Esc Quit

Gamepad (Xbox-style layout):

Input Action
Left stick X Rotate (proportional)
Right trigger Thrust
A button Fire shot
B button Fire / release tether

The tether targets the nearest rock in a ±60° cone ahead of the ship, up to 300 px. Press again to release.

Why this game

As an example for Storm! Engine. Everything in it is round, so CircleColliderComponent is the whole collision model with no approximation anywhere. Splitting a rock into two smaller rocks is entity churn by construction rather than by contrivance. Movement is RigidBodyComponent velocity integration and nothing else. MovementSystem is the entire physics layer, which makes this the cheapest of the four to get playable.

What it will not showcase

No tilemap, no camera scroll, and lighting has little to do in open space.

Build

Linux

The engine must be installed first (sudo make -f Makefile.debian install in the engine tree). Then:

make          # build
make run      # run from this directory — asset paths are CWD-relative
./verify.sh   # build, run headless, check it draws

Windows (x64, MinGW-w64 cross-compile from Linux)

Download the SDK zip from the Storm! Engine releases, unpack it, and point SDK at the unpacked directory:

sudo apt install mingw-w64
unzip stormengine2-2.3.0-win64.zip -d ~/sdk
make -f Makefile.win SDK=~/sdk/stormengine2-2.3.0-win64
make -f Makefile.win SDK=~/sdk/stormengine2-2.3.0-win64 run    # under wine

The build copies every DLL from the SDK's bin/ beside your .exe. Windows resolves DLLs from the executable's directory first.

MinGW-w64 only. MSVC cannot link this, the import library and C++ ABI are GCC's.

Raspberry Pi / Android / LibNX

Want to build for other platforms? The engine is portable, so this project is portable. You will need to write a platform Makefile and a platform main() that calls Game::Run(). See the engine's examples/ for how to do that.

I have not done it yet, but many platforms supported by DevkitPro (i.e., WiiU, Wii, GameCube, etc.) are probably supported by the engine, so it is likely to be straightforward with minimal changes. This includes MacOS as well.

SCAFFOLD.md documents the layout and the traps that come with it.

License

Totally free, do what you want, but don't blame me if it breaks. LICENSE.md is the full text.

About

Asteroid-field salvage roguelite: thrust, drift, blast rocks, tow loot to the station before your shift ends. Built on Storm! Engine v2.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Sponsor this project

Used by

Contributors

Languages