Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Scrapstorm Squadron

Scrapstorm Squadron is a self-contained 2D up-scrolling fighter jet arcade game for the browser. It runs with a tiny zero-dependency Node webserver, uses generated bitmap game art, and can be deployed as a static Vercel project.

The game is built around a gritty retro military arcade style: a generated battlefield backdrop, generated sprite atlas graphics, chunky explosions, escalating enemy waves, powerups, wingmen, shields, bombs, and rotating boss aircraft.

Screenshots

Scrapstorm Squadron boss encounter Scrapstorm Squadron gameplay

Run Locally

npm run dev

Then open http://127.0.0.1:3500.

The local server reads these environment variables:

  • PORT: HTTP port, default 3500
  • HOST: bind host, default 127.0.0.1

Example:

PORT=3000 HOST=127.0.0.1 npm run dev

Scripts

npm run dev
npm start
npm run check
  • npm run dev: start the local Node static server
  • npm start: start the same server for a generic Node host
  • npm run check: syntax-check server.js and public/game.js

Game Features

  • Up-scrolling top-down fighter jet combat
  • Keyboard, mouse, and touch steering
  • Automatic primary fire
  • Bombs for screen-clearing pressure relief
  • Regenerating shield and hull health
  • Pickups for spread fire, lasers, rockets, shields, wingmen, bombs, repairs, magnet, and score boost
  • Enemy scouts, heavy bombers, ace fighters, ground tanks, and boss aircraft
  • Boss archetypes: dreadnought, gunship, and carrier
  • Score combo multiplier that decays over time
  • Status badges for active weapon level, timed powerups, rocket and wingman counts, and multipliers
  • Generated battlefield background and generated sprite atlas graphics
  • Layered Web Audio sound effects and arcade pulse music with a sound toggle
  • Automatic pause when the window loses focus

Controls

  • Move: arrow keys or WASD
  • Bomb: space, B, X, or the bomb button
  • Pause: P, Escape, or the pause button
  • Launch or restart: Enter, the LAUNCH button, or the REARM button
  • Sound: the SND/OFF button toggles audio
  • Touch or mouse drag: steer the jet

The game pauses automatically when the browser window loses focus.

HUD

The heads-up display reads:

  • SCORE: zero-padded running score
  • HULL: remaining hull health
  • SHIELD: regenerating shield charge
  • ZONE: current zone, increasing with distance

Status badges appear above the HUD for active modifiers:

  • LV2-LV5: current weapon level
  • SPR: spread fire timer
  • LSR: laser timer
  • RKT: remaining rockets
  • WNG: active wingmen
  • MAG: pickup magnet timer
  • X2: score boost
  • X1.x: active combo multiplier

URL Options

The browser game supports lightweight demo query options for automated checks and visual review:

  • ?demo=1: start gameplay automatically
  • ?demo=1&boss=1: start gameplay and spawn a boss encounter

Example:

http://127.0.0.1:3500/?demo=1&boss=1

Cache-busting query strings are used internally by public/index.html for game assets.

Graphics

Runtime graphics live in public/assets/:

  • generated-battlefield.png: scrolling top-down battlefield backdrop
  • generated-sprite-atlas-alpha.png: transparent gameplay sprite atlas used by the renderer
  • generated-sprite-atlas.png: original chroma-key atlas source

The checked-in art is generated bitmap game art from gpt-image-2. The sprite atlas source uses a chroma-key background, and the runtime atlas is an alpha PNG derived from that source.

The sprite atlas includes player aircraft, wingman drones, enemy aircraft, tanks, boss aircraft, pickups, bullets, rockets, explosions, smoke, and muzzle flashes. public/game.js maps atlas regions to gameplay entities and falls back to procedural drawing only if an image asset is not available.

The canvas exposes non-visible data-* attributes for automated verification:

  • data-state: current game state
  • data-zone: current zone
  • data-shield: rounded shield value
  • data-boss: active boss archetype, when present
  • data-graphics: loaded generated graphics, such as atlas,battlefield

Project Structure

public/
  assets/
    generated-battlefield.png
    generated-sprite-atlas-alpha.png
    generated-sprite-atlas.png
  game.js
  index.html
  styles.css
server.js
vercel.json
package.json

Deploy

For Vercel:

vercel
vercel --prod

The vercel.json file points Vercel at public/, so the game deploys as static assets.

For a generic Node host:

npm start

Set PORT and HOST if the host provides them. The server reads both automatically.

About

Scrapstorm Squadron — a self-contained 2D up-scrolling fighter jet arcade game for the browser. Zero-dependency Node server, generated bitmap art, Web Audio sound + music, and Vercel-ready static deploy.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages