Go to file
AdJaGu 9f985babca
Merge base-*.yaml & fix YAML lint errors and warnings. (#918)
* Update base-en.yaml

Updated spelling, grammar, and to a lesser extent the information of some tips.

* Update base-en.yaml

* Update base-en.yaml

* Update base-en.yaml

Applied most of EmeraldBlock's suggestions

* Update base-ind.yaml

Update on tips, matching it with the new improved version, and corrected some things.

- PresS#9257

* Update base-cz.yaml

Corrected one of the tips.

* Update base-zh-TW.yaml

* Update base-en.yaml

Issue #849

* Few more spelling mistakes.

* Update base-en.yaml

Fixed inconsistencies and mispellations of Rotator (previously was Rotater, which is wrong)

* Update base-en.yaml

* Improving existing CZ translations and yaml check

* Update base-en.yaml

* Update base-zh-TW.yaml

* Update base-ind.yaml

* Update base-cz.yaml

* Completed translation

* Update base-en.yaml

Changed "20 Upgrade Tiers" to "Unlimited"

* Update base-zh-TW.yaml

* Update base-pl.yaml

Updated some polish translations.

* Update base-uk.yaml

* Update base-pl.yaml

Fix linter

* Update base-uk.yaml

* Update base-fi.yaml

Full translation. Fixed some bad grammar. Anything you need here?

* Update base-zh-TW.yaml

Finish translating.
Still need to review it all over again.

* fixing errors

* fixed errors. found few paragraphs not translated

* changed settings

* edits

* more edits

* quote marks 129

* fixed last errors. should work now

* ready now?

* colon error fix, hopefully

* 2

* new try. still error with colon

* Fixed idents

* fixed some syntax errors

* fixed more idents

* Fixed missing lines and stuff

* update translation ja-jp

* Update base-en.yaml

Upgrade text should say ∞ instead of 20 upgrade tiers, for real this time

* Update base-en.yaml

Changed "it" to "the game" because there wasn't enough context to know what "it" means

* Update base-ind.yaml

Fixed some things

* Update base-kor.yaml

* Update base-zh-TW.yaml

* A little more Polish

* Update base-it.yaml

Uploaded the new text relative to the wire layer and other small corrections, it's 100% done

* Update base-sv.yaml

Advantages, title_future, planned, title_open_source and title_links text translated

* Update base-sv.yaml

Trailing space fixed

* Update base-sv.yaml

* Update base-sv.yaml

Fix trailing spaces and wierd syntax error

* Update base-en.yaml

Removed changes present in a future pr

* Update for base-ro.yaml

I found some words like Roadmap and Standalone to be better suited when they're in English, I think some neologisms are better kept in their language.

* Update base-it.yaml

* Fix YAML Lint errors and warnings

Co-authored-by: Hyperion-21 <69665635+Hyperion-21@users.noreply.github.com>
Co-authored-by: presdm <72538204+presdm@users.noreply.github.com>
Co-authored-by: RevosCZ <72229413+RevosCZ@users.noreply.github.com>
Co-authored-by: Colleabois <12426652+Colleabois@users.noreply.github.com>
Co-authored-by: ZrubekLukas <39225468+ZrubekLukas@users.noreply.github.com>
Co-authored-by: VL4DL3N <6233477+Vlad1slaw@users.noreply.github.com>
Co-authored-by: Jędrzej Stolarz <jedrek1993@gmail.com>
Co-authored-by: Hermanni Saresma <hermukka@gmail.com>
Co-authored-by: Nucleareal <nukereiuzi@gmail.com>
Co-authored-by: sindaehyeon <56984093+sindaehyeon@users.noreply.github.com>
Co-authored-by: BananoGamer <72351355+BananoGamer@users.noreply.github.com>
Co-authored-by: Oscar Bäck <oscar.back96@outlook.com>
Co-authored-by: Memel <30528044+MemelDanzig@users.noreply.github.com>
Co-authored-by: tobspr <tobspr@users.noreply.github.com>
2020-10-31 10:20:00 +01:00
.github/workflows Run yamllint in parallel (#758) 2020-10-04 10:38:28 +02:00
.vscode Merge base-*.yaml & fix YAML lint errors and warnings. (#918) 2020-10-31 10:20:00 +01:00
electron Add steampipe files and upgrade electron 2020-09-29 19:07:48 +02:00
gulp Get rid of some todos / fixmes 2020-10-08 19:47:27 +02:00
res Add wires tutorial 2020-10-08 19:40:58 +02:00
res_raw Fix artwork 2020-10-08 18:07:26 +02:00
src Use locale decimal separator on belt reader display (#816) 2020-10-31 10:15:45 +01:00
translations Merge base-*.yaml & fix YAML lint errors and warnings. (#918) 2020-10-31 10:20:00 +01:00
.editorconfig Added EditorConfig (#778) 2020-10-06 17:28:17 +02:00
.eslintignore add all GH Actions work 2020-05-27 08:17:25 -04:00
.eslintrc.yml Update github actions 2020-05-28 09:37:57 +02:00
.gitignore LibGDX Texture Packing (finally!) (#755) 2020-10-04 09:21:37 +02:00
.gitpod.Dockerfile simplify code contributions + reviews by fully automating the dev setup with Gitpod. (#824) 2020-10-11 08:29:26 +02:00
.gitpod.yml simplify code contributions + reviews by fully automating the dev setup with Gitpod. (#824) 2020-10-11 08:29:26 +02:00
.prettierrc.yaml Update github actions 2020-05-28 09:37:57 +02:00
.travis.yml Update travis 2020-07-19 11:02:37 +02:00
.yamllint Fix yaml errors in CI (#757) 2020-10-04 10:38:02 +02:00
CONTRIBUTORS Add artwork folder and list of contributors 2020-05-20 13:50:20 +02:00
Dockerfile Improved Dockerfile performance + added java dependency (#768) 2020-10-06 14:47:46 +02:00
LICENSE Update license 2020-05-21 15:08:30 +02:00
README.md simplify code contributions + reviews by fully automating the dev setup with Gitpod. (#824) 2020-10-11 08:29:26 +02:00
package.json Build, sign, notarise, & upload on OS X (#687) 2020-09-27 23:14:43 +02:00
shapez.code-workspace Merge base-*.yaml & fix YAML lint errors and warnings. (#918) 2020-10-31 10:20:00 +01:00
sync-translations.js Get rid of some todos / fixmes 2020-10-08 19:47:27 +02:00
version Fix stacking bug and bump version, fixes #814 2020-10-11 08:18:55 +02:00
yarn.lock Build, sign, notarise, & upload on OS X (#687) 2020-09-27 23:14:43 +02:00

README.md

shapez.io

shapez.io Logo

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.

Reporting issues, suggestions, feedback, bugs

  1. Ask in #bugs / #feedback / #questions on the Official Discord if you are not entirely sure if it's a bug etc.
  2. Check out the trello board: https://trello.com/b/ISQncpJP/shapezio
  3. See if it's already there - If so, vote for it, done. I will see it. (You have to be signed in on trello)
  4. If not, check if it's already reported here: https://github.com/tobspr/shapez.io/issues
  5. If not, file a new issue here: https://github.com/tobspr/shapez.io/issues/new
  6. 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 ;)

Building

  • Make sure ffmpeg is on your path
  • Install Node.js and Yarn
  • Install Java (required for textures)
  • Run yarn in the root folder
  • Cd into gulp folder
  • Run yarn and then yarn 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.

Build Online with one-click setup

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 in gulp/ directory.

Open in Gitpod

Helping translate

Please checkout the Translations readme.

Contributing

Since this game is in the more or less early development, I will only accept pull requests which add an immediate benefit. Please understand that low quality PR's might be closed by me with a short comment explaining why.

If you want to add a new building, please understand that I can not simply add every building to the game! I recommend to talk to me before implementing anything, to make sure its actually useful. Otherwise there is a high chance of your PR not getting merged.

If you want to add a new feature or in generally contribute I recommend to get in touch with me on Discord:

discord logo

Code

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. 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.

Adding a new component

  1. Create the component file in src/js/game/components/<name_lowercase>.js
  2. Create a component class (e.g. MyFancyComponent) which extends Component
  3. Create a static getId() method which should return the PascalCaseName without component (e.g. MyFancy)
  4. If any data needs to be persisted, create a static getSchema() which should return the properties to be saved (See other components)
  5. Add a constructor. The constructor must be called with optional parameters only! new MyFancyComponent({}) should always work.
  6. Add any props you need in the constructor.
  7. Add the component in src/js/game/component_registry.js
  8. Add the component in src/js/game/entity_components.js
  9. Done! You can use your component now

Adding a new building

(The easiest way is to copy an existing building)

  1. Create your building in src/js/game/buildings/<my_building.js>
  2. Create the building meta class, e.g. MetaMyFancyBuilding extends MetaBuilding
  3. Override the methods from MetaBuilding you want to override.
  4. Most important is setupEntityComponents
  5. Add the building to src/js/game/meta_building_registry.js: You need to register it on the registry, and also call registerBuildingVariant.
  6. Add the building to the right toolbar, e.g. src/js/game/hud/parts/buildings_toolbar.js:supportedBuildings
  7. Add a keybinding for the building in src/js/game/key_action_mapper.js in KEYMAPPINGS.buildings
  8. In translations/base-en.yaml add it to two sections: buildings.[my_building].XXX (See other buildings) and also keybindings.mappings.[my_building]. Be sure to do it the same way as other buildings do!
  9. Create a icon (128x128, prefab) for your building and save it in res/ui/buildings_icons with the id of your building
  10. Create a tutorial image (600x600) for your building and save it in res/ui/building_tutorials
  11. In src/css/resources.scss add your building to $buildings as well as $buildingAndVariants
  12. Done! Optional: Add a new reward for unlocking your building at some point.

Adding a new game system

  1. Create the class in src/js/game/systems/<system_name>.js
  2. Derive it from GameSystemWithFilter if you want it to work on certain entities only which have the given components. Otherwise use GameSystem to do more generic stuff.
  3. Implement the update() method.
  4. Add the system in src/js/game/game_system_manager.js (To this.systems and also call add in the internalInitSystems() method)
  5. If your system should draw stuff, this is a bit more complicated. Have a look at existing systems on how they do it.

Checklist for a new building / testing it

This is a quick checklist, if a new building is added this points should be fulfilled:

  1. The translation for all variants is done and finalized
  2. The artwork (regular sprite) is finalized
  3. The blueprint sprite has been generated and is up to date
  4. The building has been added to the appropriate toolbar
  5. The building has a keybinding which makes sense
  6. The building has a reward assigned and is unlocked at a meaningful point
  7. The reward for the building has a proper translation
  8. The reward for the building has a proper image
  9. The building has a proper tutorial image assigned
  10. The buliding has a proper toolbar icon
  11. The reward requires a proper shape
  12. The building has a proper silhouette color
  13. The building has a proper matrix for being rendered on the minimap
  14. The building has proper statistics in the dialog
  15. The building properly contributes to the shapes produced analytics
  16. The building is properly persisted in the savegame
  17. The building is explained properly, ideally via an interactive tutorial

Assets

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!)

shapez.io Screenshot