https://github.com/fasterthanlime/supertasball
Super TASball, the new and improved version of the Ludum Dare 41 entry TASball!
https://github.com/fasterthanlime/supertasball
pinball-game programming-game tool-assisted-speedrun video-game
Last synced: about 1 month ago
JSON representation
Super TASball, the new and improved version of the Ludum Dare 41 entry TASball!
- Host: GitHub
- URL: https://github.com/fasterthanlime/supertasball
- Owner: fasterthanlime
- License: mit
- Created: 2018-04-24T14:27:50.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2018-04-29T18:32:57.000Z (almost 8 years ago)
- Last Synced: 2025-11-13T19:29:05.283Z (5 months ago)
- Topics: pinball-game, programming-game, tool-assisted-speedrun, video-game
- Language: HTML
- Homepage: https://supertasball.amos.me/
- Size: 2.29 MB
- Stars: 5
- Watchers: 4
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Super TASball
[](https://travis-ci.org/supertasball/supertasball)
[](https://sonarcloud.io/dashboard?id=supertasball)
[](./LICENSE)
[](https://sonarcloud.io/dashboard?id=supertasball)
[](https://sonarcloud.io/component_measures?id=supertasball&metric=coverage)
[](https://sonarcloud.io/dashboard?id=supertasball)
[](https://sonarcloud.io/dashboard?id=supertasball)
An open-source, tool-assisted pinball idle game.
* Play here: https://supertasball.amos.me/
## How to play
Check out the [video tutorial](https://www.youtube.com/watch?v=c2lE4DDl5P0).
## Contribution model
This project uses the [pull request hack](http://felixge.de/2013/03/11/the-pull-request-hack.html).
**If you submit a pull request, we'll give you commit access.**
Additionally, the game is deployed every 5 minute.
## License
Super TASball is released under the MIT license, see the [LICENSE](./LICENSE) file.
## What is it built with?
* [TypeScript](http://www.typescriptlang.org/), [React](https://www.npmjs.com/package/react), Redux
* [jsxm](https://github.com/a1k0n/jsxm/) plays modules from [The Mod Archive](http://modarchive.org)
* [planck.js](https://github.com/shakiba/planck.js) for the pinball physics
* [PixiJS](https://github.com/pixijs/pixi.js) for the WebGL/canvas display
Super TASball is:
* a static website hosted on a tiny [Scaleway](https://www.scaleway.com/) instance
* served over HTTP/2 via Nginx ([config file](./nginx/site.conf)) and [Let's Encrypt](http://letsencrypt.org/)
* deployed every 5 minutes via Ansible ([config file](./local.yml))
## Developing Super TASball
* Make sure you have [Node.js](https://nodejs.org/en/) 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
### Code structure
If you're going to be writing code, you'll need to read the [Code structure documentation](./docs/code-structure.md).
### Maps
Read how maps work, how to make a new map and add it to the game in the [Maps documentation](./docs/maps.md).
### Soundtrack
The soundtrack is a collection of [.XM files]() in the `src/tracks/` folder, mostly collected from [The Mod Archive](https://modarchive.org/).
For a track to be picked up by the game, it must be listed
in [track-list.ts](./src/track-list.ts).
### CPU instructions
Instruction types are listed in [types.ts](./src/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](./src/reactors/sim.ts) and
to a lesser degree, in [reducers/simulation.ts](./src/reducers/simulation.ts).
### Unlocks and expenses
Unlocks are listed in [unlocks.ts](./src/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](./src/expenses.ts).
Expenses can be hidden until one or more unlocks have been... unlocked, via the `requires` field.