An open-source, tool-assisted pinball idle game.
- Play here: https://supertasball.amos.me/
Check out the video tutorial.
This project uses the pull request hack.
If you submit a pull request, we'll give you commit access.
Additionally, the game is deployed every 5 minute.
Super TASball is released under the MIT license, see the LICENSE file.
- TypeScript, React, Redux
- jsxm plays modules from The Mod Archive
- planck.js for the pinball physics
- PixiJS for the WebGL/canvas display
Super TASball is:
- a static website hosted on a tiny Scaleway instance
- served over HTTP/2 via Nginx (config file) and Let's Encrypt
- deployed every 5 minutes via Ansible (config file)
- Make sure you have Node.js 9.x or above.
- Clone the repository
- Run
npm i
to install dependencies - Run
node fuse.js
to start the development server
In development, the game is served at http://localhost:4444
If you're going to be writing code, you'll need to read the Code structure documentation.
Read how maps work, how to make a new map and add it to the game in the Maps documentation.
The soundtrack is a collection of .XM files in the src/tracks/
folder, mostly collected from The Mod Archive.
For a track to be picked up by the game, it must be listed in track-list.ts.
Instruction types are listed in types.ts. Editor controls are inferred automatically from this definition, so you don't have to mess with the UI at all.
Their effects are implemented in reactors/sim.ts and to a lesser degree, in reducers/simulation.ts.
Unlocks are listed in unlocks.ts. The effects
field is a partial version of ResourcesState
- when something is
unlocked, the specified resource fields are overwritten (see the resources reducer).
For unlocks to be available in the clicker/idle part of the game, a corresponding expense must exist in expenses.ts.
Expenses can be hidden until one or more unlocks have been... unlocked, via the requires
field.