This is the source code for shapez.io, an open source base building game inspired by Factorio. Your goal is to produce shapes by cutting, rotating, merging and painting parts of shapes.
- Steam Page
- Official Discord <- Highly recommended to join!
- Trello Board & Roadmap
- itch.io Page
- Online Demo
- Ask in
#bugs
/#feedback
/#questions
on the Official Discord if you are not entirely sure if it's a bug - Check out the trello board: https://trello.com/b/ISQncpJP/shapezio
- See if it's already there - If so, vote for it, done. I will see it. (You have to be signed in on trello)
- If not, check if it's already reported here: https://github.com/tobspr/shapez.io/issues
- If not, file a new issue here: https://github.com/tobspr/shapez.io/issues/new
- I will then have a look (This can take days or weeks) and convert it to trello, and comment with the link. You can then vote there ;)
- Make sure
ffmpeg
is on your path - Install Node.js (v16 or earlier) and Yarn
- Install Java (required for texture packer)
- Run
yarn
in the root folder cd
intogulp
folder- Run
yarn
and thenyarn gulp
- it should now open in your browser
Notice: This will produce a debug build with several debugging flags enabled. If you want to disable them, modify src/js/core/config.js
.
Mods can be found here. The documentation for creating mods can be found here, including a bunch of sample mods.
You can use Gitpod (an Online Open Source VS Code-like IDE which is free for Open Source) for working on issues and making PRs to this project. With a single click it will start a workspace and automatically:
- clone the
shapez.io
repo. - install all of the dependencies.
- start
gulp
ingulp/
directory.
Please checkout the Translations readme.
I will only accept pull requests which add a benefit to a large portion of the player base. If the feature is useful but only to a fraction of players, or is controversial, I recommend making a mod instead.
If you want to add a new feature or in generally contribute I recommend to get in touch on Discord in advance, which largely increases the chance of the PR to get merged:
The game is based on a custom engine which itself is based on the YORG.io 3 game engine (Actually it shares almost the same core). The code within the engine is relatively clean with some code for the actual game on top being hacky.
This project is based on ES5 (If I would develop it again, I would definitely use TypeScript). Some ES2015 features are used but most of them are too slow, especially when polyfilled. For example, Array.prototype.forEach
is only used within non-critical loops since its slower than a plain for loop.
For most assets I use Adobe Photoshop, you can find them here.
All assets will be automatically rebuilt into the atlas once changed (Thanks to dengr1065!)