1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-06-13 13:04:03 +00:00

Merge pull request #1 from tobspr/master

Updating from base repository
This commit is contained in:
BaleineSanguine 2020-09-15 19:34:18 +02:00 committed by GitHub
commit e1587ce816
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
569 changed files with 39518 additions and 37577 deletions

View File

@ -39,3 +39,15 @@ jobs:
- name: Lint - name: Lint
run: | run: |
yarn lint yarn lint
- name: YAML Lint
uses: ibiqlik/action-yamllint@v1.0.0
with:
file_or_dir: translations/*.yaml
- name: TSLint
run: |
cd gulp
yarn gulp translations.fullBuild
cd ..
yarn tslint

4
.gitignore vendored
View File

@ -109,10 +109,6 @@ build
tmp_standalone_files tmp_standalone_files
# Github Actions files
.github/workflows
# Local config # Local config
config.local.js config.local.js
.DS_Store .DS_Store

View File

@ -3,165 +3,164 @@ os: linux
dist: xenial dist: xenial
language: node_js language: node_js
node_js: node_js:
- "10" - "12"
cache: yarn cache: yarn
# platform specific configuration # platform specific configuration
jobs: jobs:
# jobs which have to succeed
include:
# OS: MAC
## -> build darwin
# - name: "Standalone MacOS on MacOS"
# os: osx
# osx_image: xcode11.3
# before_install:
# - HOMEBREW_NO_AUTO_UPDATE=1 brew install git-lfs
# - HOMEBREW_NO_AUTO_UPDATE=1 brew install ffmpeg
# script:
# - cd gulp
# - yarn gulp build.standalone-prod || travis_terminate 1
# - yarn gulp standalone.prepare
# - yarn gulp standalone.package.prod.darwin64
# - cd ..
# jobs which have to succeed ## -> build win
include: # - name: "Standalone Windows on MacOS"
# OS: MAC # os: osx
## -> build darwin # osx_image: xcode11.3
- name: "Standalone MacOS on MacOS" # before_install:
os: osx # - HOMEBREW_NO_AUTO_UPDATE=1 brew install git-lfs
osx_image: xcode11.3 # - HOMEBREW_NO_AUTO_UPDATE=1 brew install ffmpeg
before_install: # - HOMEBREW_NO_AUTO_UPDATE=1 brew cask install wine-stable
- HOMEBREW_NO_AUTO_UPDATE=1 brew install git-lfs # # prevent Wine popup dialogs about installing additional packages
- HOMEBREW_NO_AUTO_UPDATE=1 brew install ffmpeg # - export WINEDLLOVERRIDES="mscoree,mshtml="
script: # - export WINEDEBUG="-all"
- cd gulp # script:
- yarn gulp build.standalone-prod || travis_terminate 1 # - cd gulp
- yarn gulp standalone.prepare # - yarn gulp build.standalone-prod || travis_terminate 1
- yarn gulp standalone.package.prod.darwin64 # - yarn gulp standalone.prepare
- cd .. # - yarn gulp standalone.package.prod.win64
# - yarn gulp standalone.package.prod.win32
# - cd ..
## -> build win ## -> build linux
- name: "Standalone Windows on MacOS" # - name: "Standalone Linux on MacOS"
os: osx # os: osx
osx_image: xcode11.3 # osx_image: xcode11.3
before_install: # before_install:
- HOMEBREW_NO_AUTO_UPDATE=1 brew install git-lfs # - HOMEBREW_NO_AUTO_UPDATE=1 brew install git-lfs
- HOMEBREW_NO_AUTO_UPDATE=1 brew install ffmpeg # - HOMEBREW_NO_AUTO_UPDATE=1 brew install ffmpeg
- HOMEBREW_NO_AUTO_UPDATE=1 brew cask install wine-stable # script:
# prevent Wine popup dialogs about installing additional packages # - cd gulp
- export WINEDLLOVERRIDES="mscoree,mshtml=" # - yarn gulp build.standalone-prod || travis_terminate 1
- export WINEDEBUG="-all" # - yarn gulp standalone.prepare
script: # - yarn gulp standalone.package.prod.linux64
- cd gulp # - yarn gulp standalone.package.prod.linux32
- yarn gulp build.standalone-prod || travis_terminate 1 # - cd ..
- yarn gulp standalone.prepare
- yarn gulp standalone.package.prod.win64
- yarn gulp standalone.package.prod.win32
- cd ..
## -> build linux # OS: LINUX
- name: "Standalone Linux on MacOS" ## -> build darwin
os: osx ## not possible
osx_image: xcode11.3
before_install:
- HOMEBREW_NO_AUTO_UPDATE=1 brew install git-lfs
- HOMEBREW_NO_AUTO_UPDATE=1 brew install ffmpeg
script:
- cd gulp
- yarn gulp build.standalone-prod || travis_terminate 1
- yarn gulp standalone.prepare
- yarn gulp standalone.package.prod.linux64
- yarn gulp standalone.package.prod.linux32
- cd ..
# OS: LINUX ## -> build win
## -> build darwin # - name: "Standalone Windows on Linux"
## not possible # os: linux
# addons:
# apt:
# packages:
# - libavformat-dev
# - libavfilter-dev
# - libavdevice-dev
# - ffmpeg
# - wine
# script:
# - cd gulp
# - yarn gulp build.standalone-prod || travis_terminate 1
# - yarn gulp standalone.prepare
# - yarn gulp standalone.package.prod.win64
# - yarn gulp standalone.package.prod.win32
# - cd ..
## -> build win ## -> build linux
- name: "Standalone Windows on Linux" # - name: "Standalone Linux on Linux"
os: linux # os: linux
addons: # addons:
apt: # apt:
packages: # packages:
- libavformat-dev # - libavformat-dev
- libavfilter-dev # - libavfilter-dev
- libavdevice-dev # - libavdevice-dev
- ffmpeg # - ffmpeg
- wine # script:
script: # - cd gulp
- cd gulp # - yarn gulp build.standalone-prod || travis_terminate 1
- yarn gulp build.standalone-prod || travis_terminate 1 # - yarn gulp standalone.prepare
- yarn gulp standalone.prepare # - yarn gulp standalone.package.prod.linux64
- yarn gulp standalone.package.prod.win64 # - yarn gulp standalone.package.prod.linux32
- yarn gulp standalone.package.prod.win32 # - cd ..
- cd ..
## -> build linux # OS: WINDOWS
- name: "Standalone Linux on Linux" ## -> build darwin
os: linux ## not possible
addons:
apt:
packages:
- libavformat-dev
- libavfilter-dev
- libavdevice-dev
- ffmpeg
script:
- cd gulp
- yarn gulp build.standalone-prod || travis_terminate 1
- yarn gulp standalone.prepare
- yarn gulp standalone.package.prod.linux64
- yarn gulp standalone.package.prod.linux32
- cd ..
# OS: WINDOWS ## -> build linux
## -> build darwin # - name: "Standalone Linux on Windows"
## not possible # os: windows
# env: YARN_GPG=no
# before_install:
# - choco install git-lfs -y -f || echo "0" # choco fails but git-lfs is still installed
# - choco install ffmpeg --version=4.2.3
# - export PATH=/C/ProgramData/chocolatey/lib/ffmpeg/tools/ffmpeg/bin:$PATH
# - wget https://github.com/moiamond/docker-ffmpeg-base-windowsservercore/raw/master/System32/avicap32.dll -P /C/Windows/System32/
# - wget https://github.com/moiamond/docker-ffmpeg-base-windowsservercore/raw/master/System32/msvfw32.dll -P /C/Windows/System32/
# script:
# - cd gulp
# - yarn gulp build.standalone-prod || travis_terminate 1
# - yarn gulp standalone.prepare
# - yarn gulp standalone.package.prod.linux64
# - yarn gulp standalone.package.prod.linux32
# - cd ..
## -> build linux ## -> build win
- name: "Standalone Linux on Windows" - name: "Standalone Windows on Windows"
os: windows os: windows
env: YARN_GPG=no env: YARN_GPG=no
before_install: before_install:
- choco install git-lfs -y -f || echo "0" # choco fails but git-lfs is still installed - choco install git-lfs -y -f || echo "0" # choco fails but git-lfs is still installed
- choco install ffmpeg --version=4.2.3 - choco install ffmpeg --version=4.2.3
- export PATH=/C/ProgramData/chocolatey/lib/ffmpeg/tools/ffmpeg/bin:$PATH - choco install wget
- wget https://github.com/moiamond/docker-ffmpeg-base-windowsservercore/raw/master/System32/avicap32.dll -P /C/Windows/System32/ - export PATH=/C/ProgramData/chocolatey/lib/ffmpeg/tools/ffmpeg/bin:$PATH
- wget https://github.com/moiamond/docker-ffmpeg-base-windowsservercore/raw/master/System32/msvfw32.dll -P /C/Windows/System32/ - wget https://github.com/moiamond/docker-ffmpeg-base-windowsservercore/raw/master/System32/avicap32.dll -P /C/Windows/System32/
script: - wget https://github.com/moiamond/docker-ffmpeg-base-windowsservercore/raw/master/System32/msvfw32.dll -P /C/Windows/System32/
- cd gulp script:
- yarn gulp build.standalone-prod || travis_terminate 1 - cd gulp
- yarn gulp standalone.prepare - yarn gulp build.standalone-prod || travis_terminate 1
- yarn gulp standalone.package.prod.linux64 - yarn gulp standalone.prepare
- yarn gulp standalone.package.prod.linux32 - yarn gulp standalone.package.prod.win64
- cd .. - yarn gulp standalone.package.prod.win32
- cd ..
## -> build win # mark build as finished even if "allow_failures" are still running
- name: "Standalone Windows on Windows" fast_finish: true
os: windows
env: YARN_GPG=no
before_install:
- choco install git-lfs -y -f || echo "0" # choco fails but git-lfs is still installed
- choco install ffmpeg --version=4.2.3
- choco install wget
- export PATH=/C/ProgramData/chocolatey/lib/ffmpeg/tools/ffmpeg/bin:$PATH
- wget https://github.com/moiamond/docker-ffmpeg-base-windowsservercore/raw/master/System32/avicap32.dll -P /C/Windows/System32/
- wget https://github.com/moiamond/docker-ffmpeg-base-windowsservercore/raw/master/System32/msvfw32.dll -P /C/Windows/System32/
script:
- cd gulp
- yarn gulp build.standalone-prod || travis_terminate 1
- yarn gulp standalone.prepare
- yarn gulp standalone.package.prod.win64
- yarn gulp standalone.package.prod.win32
- cd ..
# mark build as finished even if "allow_failures" are still running # optional jobs which may fail
fast_finish: true #allow_failures:
# - name: ""
# optional jobs which may fail
#allow_failures:
# - name: ""
# shared # shared
install: install:
- git lfs install - git lfs install
- git lfs pull - git lfs pull
- yarn - yarn
# electron dependencies # electron dependencies
- cd electron - cd electron
- yarn - yarn
- cd .. - cd ..
# gulp dependendencies # gulp dependendencies
- cd gulp - cd gulp
- yarn - yarn
- cd .. - cd ..

6
.yamllint Normal file
View File

@ -0,0 +1,6 @@
extends: default
rules:
line-length:
level: warning
max: 200

View File

@ -11,6 +11,15 @@ Your goal is to produce shapes by cutting, rotating, merging and painting parts
- [Steam Page](https://steam.shapez.io) - [Steam Page](https://steam.shapez.io)
- [Official Discord](https://discord.com/invite/HN7EVzV) <- _Highly recommended to join!_ - [Official Discord](https://discord.com/invite/HN7EVzV) <- _Highly recommended to join!_
## Reporting issues, suggestions, feedback, bugs
1. Ask in `#bugs` / `#feedback` / `#questions` on the [Official Discord](https://discord.com/invite/HN7EVzV) 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 ## Building
- Make sure git `git lfs` extension is on your path - Make sure git `git lfs` extension is on your path
@ -41,11 +50,48 @@ If you want to add a new feature or in generally contribute I recommend to get i
### Code ### Code
The game is based on a custom engine which itself is based on the YORG.io 3 game egine (Actually it shares almost the same core). 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. 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. 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 componetn 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](https://github.com/tobspr/shapez.io-artwork/blob/master/ui/toolbar-icons.psd)) 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/icons.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.
### Assets ### Assets
For most assets I use Adobe Photoshop, you can find them in `assets/`. For most assets I use Adobe Photoshop, you can find them in `assets/`.

View File

@ -1,44 +0,0 @@
const glob = require("glob");
const execSync = require("child_process").execSync;
const trim = require("trim");
const fs = require("fs");
const path = require("path");
module.exports = {
getRevision: function (useLast = false) {
const commitHash = execSync("git rev-parse --short " + (useLast ? "HEAD^1" : "HEAD")).toString("ascii");
return commitHash.replace(/^\s+|\s+$/g, "");
},
getAllResourceImages() {
return glob
.sync("res/**/*.@(png|svg|jpg)", { cwd: ".." })
.map((f) => f.replace(/^res\//gi, ""))
.filter((f) => {
if (f.indexOf("ui") >= 0) {
// We drop all ui images except for the noinline ones
return f.indexOf("noinline") >= 0;
}
return true;
});
},
getAllAtlasImages() {
return glob.sync("res_built/atlas/*.png", { cwd: ".." }).map((s) => s.replace("res_built/atlas/", "res/"));
},
getAllSounds() {
return glob.sync("res_built/sounds/**/*.mp3", { cwd: ".." }).map((s) => s.replace("res_built/sounds/", "res/sounds/"));
},
getVersion() {
return trim(fs.readFileSync(path.join(__dirname, "version")).toString());
},
/**
* @param {string} url
* @param {string} commitHash
*/
cachebust(url, commitHash) {
return "/v/" + commitHash + "/" + url;
},
};

View File

@ -11,6 +11,7 @@ module.exports = {
); );
return commitHash.replace(/^\s+|\s+$/g, ""); return commitHash.replace(/^\s+|\s+$/g, "");
}, },
getAllResourceImages() { getAllResourceImages() {
return glob return glob
.sync("res/**/*.@(png|svg|jpg)", { cwd: ".." }) .sync("res/**/*.@(png|svg|jpg)", { cwd: ".." })
@ -24,18 +25,6 @@ module.exports = {
}); });
}, },
getAllAtlasImages() {
return glob
.sync("res_built/atlas/*.png", { cwd: ".." })
.map(s => s.replace("res_built/atlas/", "res/"));
},
getAllSounds() {
return glob
.sync("res_built/sounds/**/*.mp3", { cwd: ".." })
.map(s => s.replace("res_built/sounds/", "res/sounds/"));
},
getVersion() { getVersion() {
return trim(fs.readFileSync(path.join(__dirname, "..", "version")).toString()); return trim(fs.readFileSync(path.join(__dirname, "..", "version")).toString());
}, },

19
gulp/cordova.js vendored
View File

@ -132,25 +132,6 @@ function gulptasksCordova($, gulp, buildFolder) {
}) })
); );
}); });
// gulp.task("pushToStagingRepo", (cb) => {
// var cmd = spawn('../push-pgb.sh', ['https://TOKEN@github.com/tobspr/shapezapp-cordova-buildslave.git'],
// { stdio: 'inherit', stdout: 'inherit', stderr: 'inherit', shell: true });
// cmd.on('close', function (code) {
// console.log('push staging exited with code ' + code + " / " + cmd.stdout + " / " + cmd.stderr);
// cb(code);
// });
// });
// gulp.task("pushToProdRepo", (cb) => {
// var cmd = spawn('../push-pgb.sh', ['https://TOKEN@github.com/tobspr/shapezapp-cordova-buildslave-release.git'],
// { stdio: 'inherit', stdout: 'inherit', stderr: 'inherit', shell: true });
// cmd.on('close', function (code) {
// console.log('push prod exited with code ' + code + " / " + cmd.stdout + " / " + cmd.stderr);
// cb(code);
// });
// });
} }
module.exports = { module.exports = {

View File

@ -77,7 +77,6 @@ function gulptasksCSS($, gulp, buildFolder, browserSync) {
.pipe($.plumber()) .pipe($.plumber())
.pipe($.sass.sync({ outputStyle: "compressed" }).on("error", $.sass.logError)) .pipe($.sass.sync({ outputStyle: "compressed" }).on("error", $.sass.logError))
.pipe($.postcss(postcssPlugins(true, { cachebust: true }))) .pipe($.postcss(postcssPlugins(true, { cachebust: true })))
// .pipe($.cssbeautify())
.pipe(gulp.dest(buildFolder)) .pipe(gulp.dest(buildFolder))
); );
}); });
@ -90,7 +89,6 @@ function gulptasksCSS($, gulp, buildFolder, browserSync) {
.pipe($.plumber()) .pipe($.plumber())
.pipe($.sass.sync({ outputStyle: "compressed" }).on("error", $.sass.logError)) .pipe($.sass.sync({ outputStyle: "compressed" }).on("error", $.sass.logError))
.pipe($.postcss(postcssPlugins(true, { cachebust: false }))) .pipe($.postcss(postcssPlugins(true, { cachebust: false })))
// .pipe($.cssbeautify())
.pipe(gulp.dest(buildFolder)) .pipe(gulp.dest(buildFolder))
); );
}); });

View File

@ -9,7 +9,7 @@ function computeIntegrityHash(fullPath, algorithm = "sha256") {
return algorithm + "-" + hash; return algorithm + "-" + hash;
} }
function gulptasksHTML($, gulp, buildFolder, browserSync) { function gulptasksHTML($, gulp, buildFolder) {
const commitHash = buildUtils.getRevision(); const commitHash = buildUtils.getRevision();
async function buildHtml( async function buildHtml(
apiUrl, apiUrl,
@ -27,9 +27,8 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
return gulp return gulp
.src("../src/html/" + (standalone ? "index.standalone.html" : "index.html")) .src("../src/html/" + (standalone ? "index.standalone.html" : "index.html"))
.pipe( .pipe(
$.dom(function () { $.dom(/** @this {Document} **/ function () {
// @ts-ignore const document = this;
const document = /** @type {Document} */ (this);
// Preconnect to api // Preconnect to api
const prefetchLink = document.createElement("link"); const prefetchLink = document.createElement("link");
@ -38,21 +37,6 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
prefetchLink.setAttribute("crossorigin", "anonymous"); prefetchLink.setAttribute("crossorigin", "anonymous");
document.head.appendChild(prefetchLink); document.head.appendChild(prefetchLink);
// // Append css preload
// const cssPreload = document.createElement("link");
// cssPreload.rel = "preload";
// cssPreload.href = cachebust("main.css");
// cssPreload.setAttribute("as", "style");
// document.head.appendChild(cssPreload);
// document.head.appendChild(prefetchLink);
// // Append js preload
// const jsPreload = document.createElement("link");
// jsPreload.rel = "preload";
// jsPreload.href = cachebust("bundle.js");
// jsPreload.setAttribute("as", "script");
// document.head.appendChild(jsPreload);
// Append css // Append css
const css = document.createElement("link"); const css = document.createElement("link");
css.rel = "stylesheet"; css.rel = "stylesheet";
@ -68,17 +52,6 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
} }
document.head.appendChild(css); document.head.appendChild(css);
if (analytics) {
// Logrocket
// const logrocketScript = document.createElement("script");
// logrocketScript.src = "https://cdn.lr-ingest.io/LogRocket.min.js";
// logrocketScript.setAttribute("crossorigin", "anonymous");
// document.head.appendChild(logrocketScript);
// const logrocketInit = document.createElement("script");
// logrocketInit.textContent = "window.LogRocket && window.LogRocket.init('TODO: GET LOGROCKET ID');";
// document.head.appendChild(logrocketInit);
}
if (app) { if (app) {
// Append cordova link // Append cordova link
const cdv = document.createElement("script"); const cdv = document.createElement("script");
@ -114,18 +87,9 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
// Do not need to preload in app or standalone // Do not need to preload in app or standalone
if (!hasLocalFiles) { if (!hasLocalFiles) {
// Preload images
const images = buildUtils.getAllResourceImages();
// Preload essentials // Preload essentials
const preloads = ["fonts/GameFont.woff2"]; const preloads = ["fonts/GameFont.woff2"];
// for (let i = 0; i < images.length; ++i) {
// if (preloads.indexOf(images[i]) < 0) {
// preloads.push(images[i]);
// }
// }
preloads.forEach(src => { preloads.forEach(src => {
const preloadLink = document.createElement("link"); const preloadLink = document.createElement("link");
preloadLink.rel = "preload"; preloadLink.rel = "preload";
@ -138,23 +102,6 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
} }
document.head.appendChild(preloadLink); document.head.appendChild(preloadLink);
}); });
// Sound preloads
// const sounds = buildUtils.getAllSounds();
// sounds.forEach((src) => {
// if (src.indexOf("sounds/music/") >= 0) {
// // skip music
// return;
// }
// const preloadLink = document.createElement("link");
// preloadLink.rel = "preload";
// preloadLink.href = cachebust(src);
// // preloadLink.setAttribute("crossorigin", "anonymous");
// preloadLink.setAttribute("as", "fetch");
// document.head.appendChild(preloadLink);
// });
} }
const loadingSvg = `background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46YXV0bztiYWNrZ3JvdW5kOjAgMCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgZGlzcGxheT0iYmxvY2siPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzM5Mzc0NyIgc3Ryb2tlLXdpZHRoPSIzIiByPSI0MiIgc3Ryb2tlLWRhc2hhcnJheT0iMTk3LjkyMDMzNzE3NjE1Njk4IDY3Ljk3MzQ0NTcyNTM4NTY2IiB0cmFuc2Zvcm09InJvdGF0ZSg0OC4yNjUgNTAgNTApIj48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iNS41NTU1NTU1NTU1NTU1NTVzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIi8+PC9jaXJjbGU+PC9zdmc+")`; const loadingSvg = `background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46YXV0bztiYWNrZ3JvdW5kOjAgMCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgZGlzcGxheT0iYmxvY2siPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzM5Mzc0NyIgc3Ryb2tlLXdpZHRoPSIzIiByPSI0MiIgc3Ryb2tlLWRhc2hhcnJheT0iMTk3LjkyMDMzNzE3NjE1Njk4IDY3Ljk3MzQ0NTcyNTM4NTY2IiB0cmFuc2Zvcm09InJvdGF0ZSg0OC4yNjUgNTAgNTApIj48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iNS41NTU1NTU1NTU1NTU1NTVzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIi8+PC9jaXJjbGU+PC9zdmc+")`;

View File

@ -6,12 +6,6 @@ function requireUncached(module) {
} }
function gulptasksJS($, gulp, buildFolder, browserSync) { function gulptasksJS($, gulp, buildFolder, browserSync) {
gulp.task("js.prettify", () => {
return gulp
.src(path.join(buildFolder, "bundle.js"))
.pipe($.jsbeautifier(require("./jsbeautify.json")))
.pipe(gulp.dest(buildFolder));
});
//// DEV //// DEV
@ -71,6 +65,7 @@ function gulptasksJS($, gulp, buildFolder, browserSync) {
gulp.task("js.staging", gulp.parallel("js.staging.transpiled", "js.staging.latest")); gulp.task("js.staging", gulp.parallel("js.staging.transpiled", "js.staging.latest"));
//// PROD //// PROD
gulp.task("js.prod.transpiled", () => { gulp.task("js.prod.transpiled", () => {
return gulp return gulp
.src("../src/js/main.js") .src("../src/js/main.js")
@ -167,8 +162,6 @@ function gulptasksJS($, gulp, buildFolder, browserSync) {
) )
.pipe(gulp.dest(buildFolder)); .pipe(gulp.dest(buildFolder));
}); });
// TODO: Tasks for te app
} }
module.exports = { module.exports = {

View File

@ -3,7 +3,6 @@
"version": "1.0.0", "version": "1.0.0",
"description": "builder", "description": "builder",
"private": true, "private": true,
"main": "main.js",
"scripts": { "scripts": {
"gulp": "gulp" "gulp": "gulp"
}, },
@ -20,7 +19,7 @@
"ajv": "^6.10.2", "ajv": "^6.10.2",
"audiosprite": "^0.7.2", "audiosprite": "^0.7.2",
"babel-loader": "^8.1.0", "babel-loader": "^8.1.0",
"browser-sync": "^2.24.6", "browser-sync": "^2.26.10",
"circular-dependency-plugin": "^5.0.2", "circular-dependency-plugin": "^5.0.2",
"circular-json": "^0.5.9", "circular-json": "^0.5.9",
"clipboard-copy": "^3.1.0", "clipboard-copy": "^3.1.0",
@ -41,21 +40,18 @@
"lz-string": "^1.4.4", "lz-string": "^1.4.4",
"markdown-loader": "^5.1.0", "markdown-loader": "^5.1.0",
"node-sri": "^1.1.1", "node-sri": "^1.1.1",
"obfuscator-loader": "^1.1.2",
"phonegap-plugin-mobile-accessibility": "^1.0.5", "phonegap-plugin-mobile-accessibility": "^1.0.5",
"promise-polyfill": "^8.1.0", "promise-polyfill": "^8.1.0",
"query-string": "^6.8.1", "query-string": "^6.8.1",
"rusha": "^0.8.13", "rusha": "^0.8.13",
"serialize-error": "^3.0.0", "serialize-error": "^3.0.0",
"sloc": "^0.2.1",
"strictdom": "^1.0.1", "strictdom": "^1.0.1",
"string-replace-webpack-plugin": "^0.1.3", "string-replace-webpack-plugin": "^0.1.3",
"terser-webpack-plugin": "^1.1.0", "terser-webpack-plugin": "^1.1.0",
"through2": "^3.0.1", "through2": "^3.0.1",
"uglify-template-string-loader": "^1.1.0", "uglify-template-string-loader": "^1.1.0",
"unused-files-webpack-plugin": "^3.4.0", "unused-files-webpack-plugin": "^3.4.0",
"webpack": "^4.31.0", "webpack": "^4.43.0",
"webpack-bundle-analyzer": "^3.0.3",
"webpack-cli": "^3.1.0", "webpack-cli": "^3.1.0",
"webpack-deep-scope-plugin": "^1.6.0", "webpack-deep-scope-plugin": "^1.6.0",
"webpack-plugin-replace": "^1.1.1", "webpack-plugin-replace": "^1.1.1",
@ -77,8 +73,6 @@
"gulp-cache": "^1.1.3", "gulp-cache": "^1.1.3",
"gulp-cached": "^1.1.1", "gulp-cached": "^1.1.1",
"gulp-clean": "^0.4.0", "gulp-clean": "^0.4.0",
"gulp-cssbeautify": "^2.0.1",
"gulp-csslint": "^1.0.1",
"gulp-dom": "^1.0.0", "gulp-dom": "^1.0.0",
"gulp-flatten": "^0.4.0", "gulp-flatten": "^0.4.0",
"gulp-fluent-ffmpeg": "^2.0.0", "gulp-fluent-ffmpeg": "^2.0.0",
@ -86,8 +80,6 @@
"gulp-htmlmin": "^5.0.1", "gulp-htmlmin": "^5.0.1",
"gulp-if": "^3.0.0", "gulp-if": "^3.0.0",
"gulp-imagemin": "^7.1.0", "gulp-imagemin": "^7.1.0",
"gulp-javascript-obfuscator": "^1.1.5",
"gulp-jsbeautifier": "^3.0.0",
"gulp-load-plugins": "^2.0.3", "gulp-load-plugins": "^2.0.3",
"gulp-phonegap-build": "^0.1.5", "gulp-phonegap-build": "^0.1.5",
"gulp-plumber": "^1.2.1", "gulp-plumber": "^1.2.1",
@ -105,16 +97,14 @@
"imagemin-pngquant": "^9.0.0", "imagemin-pngquant": "^9.0.0",
"jimp": "^0.6.1", "jimp": "^0.6.1",
"js-yaml": "^3.13.1", "js-yaml": "^3.13.1",
"onesky-fetch": "^0.0.7",
"postcss-assets": "^5.0.0", "postcss-assets": "^5.0.0",
"postcss-preset-env": "^6.5.0", "postcss-preset-env": "^6.5.0",
"postcss-round-subpixels": "^1.2.0", "postcss-round-subpixels": "^1.2.0",
"postcss-unprefix": "^2.1.3", "postcss-unprefix": "^2.1.3",
"sass-unused": "^0.3.0", "sass-unused": "^0.3.0",
"speed-measure-webpack-plugin": "^1.3.1",
"strip-json-comments": "^3.0.1", "strip-json-comments": "^3.0.1",
"trim": "^0.0.1", "trim": "^0.0.1",
"webpack-stream": "^5.1.0", "webpack-stream": "^5.2.1",
"yaml-loader": "^0.6.0" "yaml-loader": "^0.6.0"
} }
} }

View File

@ -1,11 +1,11 @@
const packager = require("electron-packager"); const packager = require("electron-packager");
const path = require("path"); const path = require("path");
const buildutils = require("./buildutils"); const { getVersion } = require("./buildutils");
const fs = require("fs"); const fs = require("fs");
const fse = require("fs-extra"); const fse = require("fs-extra");
const execSync = require("child_process").execSync; const execSync = require("child_process").execSync;
function gulptasksStandalone($, gulp, buildFolder) { function gulptasksStandalone($, gulp) {
const electronBaseDir = path.join(__dirname, "..", "electron"); const electronBaseDir = path.join(__dirname, "..", "electron");
const tempDestDir = path.join(__dirname, "..", "tmp_standalone_files"); const tempDestDir = path.join(__dirname, "..", "tmp_standalone_files");
@ -47,49 +47,7 @@ function gulptasksStandalone($, gulp, buildFolder) {
}); });
gulp.task("standalone.prepare.minifyCode", () => { gulp.task("standalone.prepare.minifyCode", () => {
return ( return gulp.src(path.join(electronBaseDir, "*.js")).pipe(gulp.dest(tempDestBuildDir));
gulp
.src(path.join(electronBaseDir, "*.js"))
// .pipe(
// $.terser({
// ecma: 6,
// parse: {},
// module: false,
// toplevel: true,
// keep_classnames: false,
// keep_fnames: false,
// safari10: false,
// compress: {
// arguments: false, // breaks
// drop_console: false,
// // keep_fargs: false,
// keep_infinity: true,
// passes: 2,
// module: false,
// toplevel: true,
// unsafe_math: true,
// unsafe_arrows: false,
// warnings: true,
// },
// mangle: {
// eval: true,
// keep_classnames: false,
// keep_fnames: false,
// module: false,
// toplevel: true,
// safari10: false,
// },
// output: {
// comments: false,
// ascii_only: true,
// beautify: false,
// braces: false,
// ecma: 6,
// },
// })
// )
.pipe(gulp.dest(tempDestBuildDir))
);
}); });
gulp.task("standalone.prepare.copyGamefiles", () => { gulp.task("standalone.prepare.copyGamefiles", () => {
@ -122,15 +80,14 @@ function gulptasksStandalone($, gulp, buildFolder) {
* @param {'win32'|'linux'|'darwin'} platform * @param {'win32'|'linux'|'darwin'} platform
* @param {'x64'|'ia32'} arch * @param {'x64'|'ia32'} arch
* @param {function():void} cb * @param {function():void} cb
* @param {boolean=} isRelease
*/ */
function packageStandalone(platform, arch, cb, isRelease = false) { function packageStandalone(platform, arch, cb) {
const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml")); const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml"));
packager({ packager({
dir: tempDestBuildDir, dir: tempDestBuildDir,
appCopyright: "Tobias Springer", appCopyright: "Tobias Springer",
appVersion: buildutils.getVersion(), appVersion: getVersion(),
buildVersion: "1.0.0", buildVersion: "1.0.0",
arch, arch,
platform, platform,
@ -164,19 +121,6 @@ function gulptasksStandalone($, gulp, buildFolder) {
'#!/usr/bin/env bash\n./shapezio --no-sandbox "$@"\n' '#!/usr/bin/env bash\n./shapezio --no-sandbox "$@"\n'
); );
fs.chmodSync(path.join(appPath, "play.sh"), 0o775); fs.chmodSync(path.join(appPath, "play.sh"), 0o775);
} else if (platform === "win32") {
// Optional: Create a playable copy. Shouldn't be required
// const playablePath = appPath + "_playable";
// fse.copySync(appPath, playablePath);
// fs.writeFileSync(path.join(playablePath, "steam_appid.txt"), "1134480");
// fs.writeFileSync(
// path.join(playablePath, "play.bat"),
// "start shapezio --dev --disable-direct-composition --in-process-gpu\r\n"
// );
// fs.writeFileSync(
// path.join(playablePath, "play_local.bat"),
// "start shapezio --local --dev --disable-direct-composition --in-process-gpu\r\n"
// );
} }
if (platform === "darwin") { if (platform === "darwin") {
@ -226,11 +170,11 @@ function gulptasksStandalone($, gulp, buildFolder) {
); );
} }
gulp.task("standalone.package.prod.win64", cb => packageStandalone("win32", "x64", cb, true)); gulp.task("standalone.package.prod.win64", cb => packageStandalone("win32", "x64", cb));
gulp.task("standalone.package.prod.win32", cb => packageStandalone("win32", "ia32", cb, true)); gulp.task("standalone.package.prod.win32", cb => packageStandalone("win32", "ia32", cb));
gulp.task("standalone.package.prod.linux64", cb => packageStandalone("linux", "x64", cb, true)); gulp.task("standalone.package.prod.linux64", cb => packageStandalone("linux", "x64", cb));
gulp.task("standalone.package.prod.linux32", cb => packageStandalone("linux", "ia32", cb, true)); gulp.task("standalone.package.prod.linux32", cb => packageStandalone("linux", "ia32", cb));
gulp.task("standalone.package.prod.darwin64", cb => packageStandalone("darwin", "x64", cb, true)); gulp.task("standalone.package.prod.darwin64", cb => packageStandalone("darwin", "x64", cb));
gulp.task( gulp.task(
"standalone.package.prod", "standalone.package.prod",
@ -240,8 +184,6 @@ function gulptasksStandalone($, gulp, buildFolder) {
"standalone.package.prod.win64", "standalone.package.prod.win64",
"standalone.package.prod.linux64", "standalone.package.prod.linux64",
"standalone.package.prod.darwin64" "standalone.package.prod.darwin64"
// "standalone.package.prod.win32",
// "standalone.package.prod.linux32",
) )
) )
); );

View File

@ -5,7 +5,7 @@ const yaml = require("gulp-yaml");
const translationsSourceDir = path.join(__dirname, "..", "translations"); const translationsSourceDir = path.join(__dirname, "..", "translations");
const translationsJsonDir = path.join(__dirname, "..", "src", "js", "built-temp"); const translationsJsonDir = path.join(__dirname, "..", "src", "js", "built-temp");
function gulptasksTranslations($, gulp, buildFolder) { function gulptasksTranslations($, gulp) {
gulp.task("translations.convertToJson", () => { gulp.task("translations.convertToJson", () => {
return gulp return gulp
.src(path.join(translationsSourceDir, "*.yaml")) .src(path.join(translationsSourceDir, "*.yaml"))

View File

@ -2,9 +2,8 @@
const path = require("path"); const path = require("path");
const webpack = require("webpack"); const webpack = require("webpack");
const utils = require("./buildutils"); const { getRevision, getVersion, getAllResourceImages } = require("./buildutils");
const lzString = require("lz-string"); const lzString = require("lz-string");
// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const CircularDependencyPlugin = require("circular-dependency-plugin"); const CircularDependencyPlugin = require("circular-dependency-plugin");
module.exports = ({ watch = false, standalone = false }) => { module.exports = ({ watch = false, standalone = false }) => {
@ -41,9 +40,9 @@ module.exports = ({ watch = false, standalone = false }) => {
G_IS_BROWSER: "true", G_IS_BROWSER: "true",
G_IS_STANDALONE: standalone ? "true" : "false", G_IS_STANDALONE: standalone ? "true" : "false",
G_BUILD_TIME: "" + new Date().getTime(), G_BUILD_TIME: "" + new Date().getTime(),
G_BUILD_COMMIT_HASH: JSON.stringify(utils.getRevision()), G_BUILD_COMMIT_HASH: JSON.stringify(getRevision()),
G_BUILD_VERSION: JSON.stringify(utils.getVersion()), G_BUILD_VERSION: JSON.stringify(getVersion()),
G_ALL_UI_IMAGES: JSON.stringify(utils.getAllResourceImages()), G_ALL_UI_IMAGES: JSON.stringify(getAllResourceImages()),
}), }),
new CircularDependencyPlugin({ new CircularDependencyPlugin({
@ -60,7 +59,6 @@ module.exports = ({ watch = false, standalone = false }) => {
// set the current working directory for displaying module paths // set the current working directory for displaying module paths
cwd: path.join(__dirname, "..", "src", "js"), cwd: path.join(__dirname, "..", "src", "js"),
}), }),
// new BundleAnalyzerPlugin()
], ],
module: { module: {
rules: [ rules: [

View File

@ -2,14 +2,12 @@
const path = require("path"); const path = require("path");
const webpack = require("webpack"); const webpack = require("webpack");
const utils = require("./buildutils"); const { getRevision, getVersion, getAllResourceImages } = require("./buildutils");
const lzString = require("lz-string"); const lzString = require("lz-string");
const TerserPlugin = require("terser-webpack-plugin"); const TerserPlugin = require("terser-webpack-plugin");
const StringReplacePlugin = require("string-replace-webpack-plugin"); const StringReplacePlugin = require("string-replace-webpack-plugin");
// const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
const UnusedFilesPlugin = require("unused-files-webpack-plugin").UnusedFilesWebpackPlugin; const UnusedFilesPlugin = require("unused-files-webpack-plugin").UnusedFilesWebpackPlugin;
// const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");
module.exports = ({ module.exports = ({
enableAssert = false, enableAssert = false,
@ -34,9 +32,9 @@ module.exports = ({
G_APP_ENVIRONMENT: JSON.stringify(environment), G_APP_ENVIRONMENT: JSON.stringify(environment),
G_HAVE_ASSERT: enableAssert ? "true" : "false", G_HAVE_ASSERT: enableAssert ? "true" : "false",
G_BUILD_TIME: "" + new Date().getTime(), G_BUILD_TIME: "" + new Date().getTime(),
G_BUILD_COMMIT_HASH: JSON.stringify(utils.getRevision()), G_BUILD_COMMIT_HASH: JSON.stringify(getRevision()),
G_BUILD_VERSION: JSON.stringify(utils.getVersion()), G_BUILD_VERSION: JSON.stringify(getVersion()),
G_ALL_UI_IMAGES: JSON.stringify(utils.getAllResourceImages()), G_ALL_UI_IMAGES: JSON.stringify(getAllResourceImages()),
}; };
const minifyNames = environment === "prod"; const minifyNames = environment === "prod";
@ -143,9 +141,9 @@ module.exports = ({
ecma: es6 ? 6 : 5, ecma: es6 ? 6 : 5,
preamble: preamble:
"/* shapez.io Codebase - Copyright 2020 Tobias Springer - " + "/* shapez.io Codebase - Copyright 2020 Tobias Springer - " +
utils.getVersion() + getVersion() +
" @ " + " @ " +
utils.getRevision() + getRevision() +
" */", " */",
}, },
}, },
@ -164,15 +162,6 @@ module.exports = ({
cwd: path.join(__dirname, "..", "src", "js"), cwd: path.join(__dirname, "..", "src", "js"),
patterns: ["../src/js/**/*.js"], patterns: ["../src/js/**/*.js"],
}), }),
// new webpack.SourceMapDevToolPlugin({
// filename: "[name].map",
// publicPath: "/v/" + utils.getRevision() + "/",
// }),
// new ReplaceCompressBlocks()
// new webpack.optimize.ModuleConcatenationPlugin()
// new WebpackDeepScopeAnalysisPlugin()
// new BundleAnalyzerPlugin()
], ],
module: { module: {
rules: [ rules: [

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@
"scripts": { "scripts": {
"dev": "cd gulp && yarn gulp main.serveDev", "dev": "cd gulp && yarn gulp main.serveDev",
"tslint": "cd src/js && tsc", "tslint": "cd src/js && tsc",
"lint": "npx eslint src/js", "lint": "eslint src/js",
"prettier-all": "prettier --write src/**/*.* && prettier --write gulp/**/*.*", "prettier-all": "prettier --write src/**/*.* && prettier --write gulp/**/*.*",
"publishOnItchWindows": "butler push tmp_standalone_files/shapez.io-standalone-win32-x64 tobspr/shapezio:windows --userversion-file version", "publishOnItchWindows": "butler push tmp_standalone_files/shapez.io-standalone-win32-x64 tobspr/shapezio:windows --userversion-file version",
"publishOnItchLinux": "butler push tmp_standalone_files/shapez.io-standalone-linux-x64 tobspr/shapezio:linux --userversion-file version", "publishOnItchLinux": "butler push tmp_standalone_files/shapez.io-standalone-linux-x64 tobspr/shapezio:linux --userversion-file version",
@ -29,13 +29,14 @@
"@types/filesystem": "^0.0.29", "@types/filesystem": "^0.0.29",
"ajv": "^6.10.2", "ajv": "^6.10.2",
"babel-loader": "^8.0.4", "babel-loader": "^8.0.4",
"browser-sync": "^2.24.6",
"circular-dependency-plugin": "^5.0.2", "circular-dependency-plugin": "^5.0.2",
"circular-json": "^0.5.9", "circular-json": "^0.5.9",
"clipboard-copy": "^3.1.0", "clipboard-copy": "^3.1.0",
"colors": "^1.3.3", "colors": "^1.3.3",
"core-js": "3", "core-js": "3",
"crc": "^3.8.0",
"cssnano-preset-advanced": "^4.0.7", "cssnano-preset-advanced": "^4.0.7",
"debounce-promise": "^3.1.2",
"email-validator": "^2.0.4", "email-validator": "^2.0.4",
"eslint": "7.1.0", "eslint": "7.1.0",
"fastdom": "^1.0.8", "fastdom": "^1.0.8",
@ -47,20 +48,18 @@
"lz-string": "^1.4.4", "lz-string": "^1.4.4",
"markdown-loader": "^4.0.0", "markdown-loader": "^4.0.0",
"match-all": "^1.2.5", "match-all": "^1.2.5",
"obfuscator-loader": "^1.1.2",
"phonegap-plugin-mobile-accessibility": "^1.0.5", "phonegap-plugin-mobile-accessibility": "^1.0.5",
"promise-polyfill": "^8.1.0", "promise-polyfill": "^8.1.0",
"query-string": "^6.8.1", "query-string": "^6.8.1",
"rusha": "^0.8.13", "rusha": "^0.8.13",
"serialize-error": "^3.0.0", "serialize-error": "^3.0.0",
"sloc": "^0.2.1",
"strictdom": "^1.0.1", "strictdom": "^1.0.1",
"string-replace-webpack-plugin": "^0.1.3", "string-replace-webpack-plugin": "^0.1.3",
"terser-webpack-plugin": "^1.1.0", "terser-webpack-plugin": "^1.1.0",
"typescript": "3.9.3", "typescript": "3.9.3",
"uglify-template-string-loader": "^1.1.0", "uglify-template-string-loader": "^1.1.0",
"unused-files-webpack-plugin": "^3.4.0", "unused-files-webpack-plugin": "^3.4.0",
"webpack": "^4.31.0", "webpack": "^4.43.0",
"webpack-bundle-analyzer": "^3.0.3", "webpack-bundle-analyzer": "^3.0.3",
"webpack-cli": "^3.1.0", "webpack-cli": "^3.1.0",
"webpack-deep-scope-plugin": "^1.6.0", "webpack-deep-scope-plugin": "^1.6.0",
@ -88,16 +87,14 @@
"imagemin-pngquant": "^8.0.0", "imagemin-pngquant": "^8.0.0",
"jimp": "^0.6.1", "jimp": "^0.6.1",
"js-yaml": "^3.13.1", "js-yaml": "^3.13.1",
"onesky-fetch": "^0.0.7",
"postcss-assets": "^5.0.0", "postcss-assets": "^5.0.0",
"postcss-preset-env": "^6.5.0", "postcss-preset-env": "^6.5.0",
"postcss-round-subpixels": "^1.2.0", "postcss-round-subpixels": "^1.2.0",
"postcss-unprefix": "^2.1.3", "postcss-unprefix": "^2.1.3",
"prettier": "^2.0.4", "prettier": "^2.0.4",
"sass-unused": "^0.3.0", "sass-unused": "^0.3.0",
"speed-measure-webpack-plugin": "^1.3.1",
"strip-json-comments": "^3.0.1", "strip-json-comments": "^3.0.1",
"trim": "^0.0.1", "trim": "^0.0.1",
"webpack-stream": "^5.1.0" "yarn": "^1.22.4"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 712 B

After

Width:  |  Height:  |  Size: 756 B

BIN
res/ui/icons/link.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 515 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 976 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 KiB

View File

@ -7,28 +7,11 @@
<string>5.4.0</string> <string>5.4.0</string>
<key>autoSDSettings</key> <key>autoSDSettings</key>
<array> <array>
<struct type="AutoSDSettings">
<key>scale</key>
<double>1</double>
<key>extension</key>
<string>_100</string>
<key>spriteFilter</key>
<string></string>
<key>acceptFractionalValues</key>
<true/>
<key>maxTextureSize</key>
<QSize>
<key>width</key>
<int>4096</int>
<key>height</key>
<int>4096</int>
</QSize>
</struct>
<struct type="AutoSDSettings"> <struct type="AutoSDSettings">
<key>scale</key> <key>scale</key>
<double>0.75</double> <double>0.75</double>
<key>extension</key> <key>extension</key>
<string>_75</string> <string>_hq</string>
<key>spriteFilter</key> <key>spriteFilter</key>
<string></string> <string></string>
<key>acceptFractionalValues</key> <key>acceptFractionalValues</key>
@ -45,7 +28,7 @@
<key>scale</key> <key>scale</key>
<double>0.5</double> <double>0.5</double>
<key>extension</key> <key>extension</key>
<string>_50</string> <string>_mq</string>
<key>spriteFilter</key> <key>spriteFilter</key>
<string></string> <string></string>
<key>acceptFractionalValues</key> <key>acceptFractionalValues</key>
@ -62,7 +45,7 @@
<key>scale</key> <key>scale</key>
<double>0.25</double> <double>0.25</double>
<key>extension</key> <key>extension</key>
<string>_25</string> <string>_lq</string>
<key>spriteFilter</key> <key>spriteFilter</key>
<string></string> <string></string>
<key>acceptFractionalValues</key> <key>acceptFractionalValues</key>
@ -70,26 +53,9 @@
<key>maxTextureSize</key> <key>maxTextureSize</key>
<QSize> <QSize>
<key>width</key> <key>width</key>
<int>1024</int> <int>2048</int>
<key>height</key> <key>height</key>
<int>1024</int> <int>2048</int>
</QSize>
</struct>
<struct type="AutoSDSettings">
<key>scale</key>
<double>0.1</double>
<key>extension</key>
<string>_10</string>
<key>spriteFilter</key>
<string></string>
<key>acceptFractionalValues</key>
<true/>
<key>maxTextureSize</key>
<QSize>
<key>width</key>
<int>-1</int>
<key>height</key>
<int>-1</int>
</QSize> </QSize>
</struct> </struct>
</array> </array>
@ -174,7 +140,7 @@
<key>freeSizeMode</key> <key>freeSizeMode</key>
<enum type="AlgorithmSettings::AlgorithmFreeSizeMode">Best</enum> <enum type="AlgorithmSettings::AlgorithmFreeSizeMode">Best</enum>
<key>sizeConstraints</key> <key>sizeConstraints</key>
<enum type="AlgorithmSettings::SizeConstraints">AnySize</enum> <enum type="AlgorithmSettings::SizeConstraints">POT</enum>
<key>forceSquared</key> <key>forceSquared</key>
<false/> <false/>
<key>maxRects</key> <key>maxRects</key>
@ -249,17 +215,123 @@
</struct> </struct>
<key>individualSpriteSettings</key> <key>individualSpriteSettings</key>
<map type="IndividualSpriteSettingsMap"> <map type="IndividualSpriteSettingsMap">
<key type="filename">sprites/belt/forward_0.png</key> <key type="filename">sprites/belt/built/forward_0.png</key>
<key type="filename">sprites/belt/forward_1.png</key> <key type="filename">sprites/belt/built/forward_1.png</key>
<key type="filename">sprites/belt/forward_2.png</key> <key type="filename">sprites/belt/built/forward_10.png</key>
<key type="filename">sprites/buildings/miner.png</key> <key type="filename">sprites/belt/built/forward_11.png</key>
<key type="filename">sprites/buildings/rotater.png</key> <key type="filename">sprites/belt/built/forward_12.png</key>
<key type="filename">sprites/buildings/trash.png</key> <key type="filename">sprites/belt/built/forward_13.png</key>
<key type="filename">sprites/misc/wires_overlay_tile.png</key> <key type="filename">sprites/belt/built/forward_2.png</key>
<key type="filename">sprites/wires/pin_negative_accept.png</key> <key type="filename">sprites/belt/built/forward_3.png</key>
<key type="filename">sprites/wires/pin_negative_eject.png</key> <key type="filename">sprites/belt/built/forward_4.png</key>
<key type="filename">sprites/wires/pin_positive_accept.png</key> <key type="filename">sprites/belt/built/forward_5.png</key>
<key type="filename">sprites/wires/pin_positive_eject.png</key> <key type="filename">sprites/belt/built/forward_6.png</key>
<key type="filename">sprites/belt/built/forward_7.png</key>
<key type="filename">sprites/belt/built/forward_8.png</key>
<key type="filename">sprites/belt/built/forward_9.png</key>
<key type="filename">sprites/belt/built/left_0.png</key>
<key type="filename">sprites/belt/built/left_1.png</key>
<key type="filename">sprites/belt/built/left_10.png</key>
<key type="filename">sprites/belt/built/left_11.png</key>
<key type="filename">sprites/belt/built/left_12.png</key>
<key type="filename">sprites/belt/built/left_13.png</key>
<key type="filename">sprites/belt/built/left_2.png</key>
<key type="filename">sprites/belt/built/left_3.png</key>
<key type="filename">sprites/belt/built/left_4.png</key>
<key type="filename">sprites/belt/built/left_5.png</key>
<key type="filename">sprites/belt/built/left_6.png</key>
<key type="filename">sprites/belt/built/left_7.png</key>
<key type="filename">sprites/belt/built/left_8.png</key>
<key type="filename">sprites/belt/built/left_9.png</key>
<key type="filename">sprites/belt/built/right_0.png</key>
<key type="filename">sprites/belt/built/right_1.png</key>
<key type="filename">sprites/belt/built/right_10.png</key>
<key type="filename">sprites/belt/built/right_11.png</key>
<key type="filename">sprites/belt/built/right_12.png</key>
<key type="filename">sprites/belt/built/right_13.png</key>
<key type="filename">sprites/belt/built/right_2.png</key>
<key type="filename">sprites/belt/built/right_3.png</key>
<key type="filename">sprites/belt/built/right_4.png</key>
<key type="filename">sprites/belt/built/right_5.png</key>
<key type="filename">sprites/belt/built/right_6.png</key>
<key type="filename">sprites/belt/built/right_7.png</key>
<key type="filename">sprites/belt/built/right_8.png</key>
<key type="filename">sprites/belt/built/right_9.png</key>
<key type="filename">sprites/blueprints/constant_signal.png</key>
<key type="filename">sprites/blueprints/display.png</key>
<key type="filename">sprites/blueprints/lever.png</key>
<key type="filename">sprites/blueprints/logic_gate-not.png</key>
<key type="filename">sprites/blueprints/logic_gate-or.png</key>
<key type="filename">sprites/blueprints/logic_gate-transistor.png</key>
<key type="filename">sprites/blueprints/logic_gate-xor.png</key>
<key type="filename">sprites/blueprints/logic_gate.png</key>
<key type="filename">sprites/blueprints/miner-chainable.png</key>
<key type="filename">sprites/blueprints/miner.png</key>
<key type="filename">sprites/blueprints/reader.png</key>
<key type="filename">sprites/blueprints/rotater-ccw.png</key>
<key type="filename">sprites/blueprints/rotater-fl.png</key>
<key type="filename">sprites/blueprints/rotater.png</key>
<key type="filename">sprites/blueprints/splitter-compact-inverse.png</key>
<key type="filename">sprites/blueprints/splitter-compact-merge-inverse.png</key>
<key type="filename">sprites/blueprints/splitter-compact-merge.png</key>
<key type="filename">sprites/blueprints/splitter-compact.png</key>
<key type="filename">sprites/blueprints/trash.png</key>
<key type="filename">sprites/blueprints/underground_belt_entry-tier2.png</key>
<key type="filename">sprites/blueprints/underground_belt_entry.png</key>
<key type="filename">sprites/blueprints/underground_belt_exit-tier2.png</key>
<key type="filename">sprites/blueprints/underground_belt_exit.png</key>
<key type="filename">sprites/blueprints/virtual_processor-analyzer.png</key>
<key type="filename">sprites/blueprints/virtual_processor-rotater.png</key>
<key type="filename">sprites/blueprints/virtual_processor-shapecompare.png</key>
<key type="filename">sprites/blueprints/virtual_processor-unstacker.png</key>
<key type="filename">sprites/blueprints/virtual_processor.png</key>
<key type="filename">sprites/blueprints/wire_tunnel-coating.png</key>
<key type="filename">sprites/blueprints/wire_tunnel.png</key>
<key type="filename">sprites/buildings/constant_signal.png</key>
<key type="filename">sprites/buildings/display.png</key>
<key type="filename">sprites/buildings/lever.png</key>
<key type="filename">sprites/buildings/logic_gate-not.png</key>
<key type="filename">sprites/buildings/logic_gate-or.png</key>
<key type="filename">sprites/buildings/logic_gate-transistor.png</key>
<key type="filename">sprites/buildings/logic_gate-xor.png</key>
<key type="filename">sprites/buildings/logic_gate.png</key>
<key type="filename">sprites/buildings/miner-chainable.png</key>
<key type="filename">sprites/buildings/reader.png</key>
<key type="filename">sprites/buildings/rotater-ccw.png</key>
<key type="filename">sprites/buildings/rotater-fl.png</key>
<key type="filename">sprites/buildings/splitter-compact-inverse.png</key>
<key type="filename">sprites/buildings/splitter-compact-merge-inverse.png</key>
<key type="filename">sprites/buildings/splitter-compact-merge.png</key>
<key type="filename">sprites/buildings/splitter-compact.png</key>
<key type="filename">sprites/buildings/underground_belt_entry-tier2.png</key>
<key type="filename">sprites/buildings/underground_belt_entry.png</key>
<key type="filename">sprites/buildings/underground_belt_exit-tier2.png</key>
<key type="filename">sprites/buildings/underground_belt_exit.png</key>
<key type="filename">sprites/buildings/virtual_processor-analyzer.png</key>
<key type="filename">sprites/buildings/virtual_processor-rotater.png</key>
<key type="filename">sprites/buildings/virtual_processor-shapecompare.png</key>
<key type="filename">sprites/buildings/virtual_processor-unstacker.png</key>
<key type="filename">sprites/buildings/virtual_processor.png</key>
<key type="filename">sprites/buildings/wire_tunnel-coating.png</key>
<key type="filename">sprites/buildings/wire_tunnel.png</key>
<key type="filename">sprites/misc/reader_overlay.png</key>
<key type="filename">sprites/wires/lever_on.png</key>
<key type="filename">sprites/wires/sets/color_cross.png</key>
<key type="filename">sprites/wires/sets/color_forward.png</key>
<key type="filename">sprites/wires/sets/color_split.png</key>
<key type="filename">sprites/wires/sets/color_turn.png</key>
<key type="filename">sprites/wires/sets/conflict_cross.png</key>
<key type="filename">sprites/wires/sets/conflict_forward.png</key>
<key type="filename">sprites/wires/sets/conflict_split.png</key>
<key type="filename">sprites/wires/sets/conflict_turn.png</key>
<key type="filename">sprites/wires/sets/regular_cross.png</key>
<key type="filename">sprites/wires/sets/regular_forward.png</key>
<key type="filename">sprites/wires/sets/regular_split.png</key>
<key type="filename">sprites/wires/sets/regular_turn.png</key>
<key type="filename">sprites/wires/sets/shape_cross.png</key>
<key type="filename">sprites/wires/sets/shape_forward.png</key>
<key type="filename">sprites/wires/sets/shape_split.png</key>
<key type="filename">sprites/wires/sets/shape_turn.png</key>
<struct type="IndividualSpriteSettings"> <struct type="IndividualSpriteSettings">
<key>pivotPoint</key> <key>pivotPoint</key>
<point_f>0.5,0.5</point_f> <point_f>0.5,0.5</point_f>
@ -268,109 +340,26 @@
<key>scale9Enabled</key> <key>scale9Enabled</key>
<false/> <false/>
<key>scale9Borders</key> <key>scale9Borders</key>
<rect>32,32,64,64</rect> <rect>48,48,96,96</rect>
<key>scale9Paddings</key> <key>scale9Paddings</key>
<rect>32,32,64,64</rect> <rect>48,48,96,96</rect>
<key>scale9FromFile</key> <key>scale9FromFile</key>
<false/> <false/>
</struct> </struct>
<key type="filename">sprites/belt/forward_10.png</key>
<key type="filename">sprites/belt/forward_11.png</key>
<key type="filename">sprites/belt/forward_12.png</key>
<key type="filename">sprites/belt/forward_13.png</key>
<key type="filename">sprites/belt/forward_14.png</key>
<key type="filename">sprites/belt/forward_15.png</key>
<key type="filename">sprites/belt/forward_16.png</key>
<key type="filename">sprites/belt/forward_17.png</key>
<key type="filename">sprites/belt/forward_18.png</key>
<key type="filename">sprites/belt/forward_19.png</key>
<key type="filename">sprites/belt/forward_20.png</key>
<key type="filename">sprites/belt/forward_21.png</key>
<key type="filename">sprites/belt/forward_22.png</key>
<key type="filename">sprites/belt/forward_23.png</key>
<key type="filename">sprites/belt/forward_24.png</key>
<key type="filename">sprites/belt/forward_25.png</key>
<key type="filename">sprites/belt/forward_26.png</key>
<key type="filename">sprites/belt/forward_27.png</key>
<key type="filename">sprites/belt/forward_3.png</key>
<key type="filename">sprites/belt/forward_4.png</key>
<key type="filename">sprites/belt/forward_5.png</key>
<key type="filename">sprites/belt/forward_6.png</key>
<key type="filename">sprites/belt/forward_7.png</key>
<key type="filename">sprites/belt/forward_8.png</key>
<key type="filename">sprites/belt/forward_9.png</key>
<key type="filename">sprites/belt/left_0.png</key>
<key type="filename">sprites/belt/left_1.png</key>
<key type="filename">sprites/belt/left_10.png</key>
<key type="filename">sprites/belt/left_11.png</key>
<key type="filename">sprites/belt/left_12.png</key>
<key type="filename">sprites/belt/left_13.png</key>
<key type="filename">sprites/belt/left_14.png</key>
<key type="filename">sprites/belt/left_15.png</key>
<key type="filename">sprites/belt/left_16.png</key>
<key type="filename">sprites/belt/left_17.png</key>
<key type="filename">sprites/belt/left_18.png</key>
<key type="filename">sprites/belt/left_19.png</key>
<key type="filename">sprites/belt/left_2.png</key>
<key type="filename">sprites/belt/left_20.png</key>
<key type="filename">sprites/belt/left_21.png</key>
<key type="filename">sprites/belt/left_22.png</key>
<key type="filename">sprites/belt/left_23.png</key>
<key type="filename">sprites/belt/left_24.png</key>
<key type="filename">sprites/belt/left_25.png</key>
<key type="filename">sprites/belt/left_26.png</key>
<key type="filename">sprites/belt/left_27.png</key>
<key type="filename">sprites/belt/left_3.png</key>
<key type="filename">sprites/belt/left_4.png</key>
<key type="filename">sprites/belt/left_5.png</key>
<key type="filename">sprites/belt/left_6.png</key>
<key type="filename">sprites/belt/left_7.png</key>
<key type="filename">sprites/belt/left_8.png</key>
<key type="filename">sprites/belt/left_9.png</key>
<key type="filename">sprites/belt/right_0.png</key>
<key type="filename">sprites/belt/right_1.png</key>
<key type="filename">sprites/belt/right_10.png</key>
<key type="filename">sprites/belt/right_11.png</key>
<key type="filename">sprites/belt/right_12.png</key>
<key type="filename">sprites/belt/right_13.png</key>
<key type="filename">sprites/belt/right_14.png</key>
<key type="filename">sprites/belt/right_15.png</key>
<key type="filename">sprites/belt/right_16.png</key>
<key type="filename">sprites/belt/right_17.png</key>
<key type="filename">sprites/belt/right_18.png</key>
<key type="filename">sprites/belt/right_19.png</key>
<key type="filename">sprites/belt/right_2.png</key>
<key type="filename">sprites/belt/right_20.png</key>
<key type="filename">sprites/belt/right_21.png</key>
<key type="filename">sprites/belt/right_22.png</key>
<key type="filename">sprites/belt/right_23.png</key>
<key type="filename">sprites/belt/right_24.png</key>
<key type="filename">sprites/belt/right_25.png</key>
<key type="filename">sprites/belt/right_26.png</key>
<key type="filename">sprites/belt/right_27.png</key>
<key type="filename">sprites/belt/right_3.png</key>
<key type="filename">sprites/belt/right_4.png</key>
<key type="filename">sprites/belt/right_5.png</key>
<key type="filename">sprites/belt/right_6.png</key>
<key type="filename">sprites/belt/right_7.png</key>
<key type="filename">sprites/belt/right_8.png</key>
<key type="filename">sprites/belt/right_9.png</key>
<key type="filename">sprites/blueprints/belt_left.png</key> <key type="filename">sprites/blueprints/belt_left.png</key>
<key type="filename">sprites/blueprints/belt_right.png</key> <key type="filename">sprites/blueprints/belt_right.png</key>
<key type="filename">sprites/blueprints/belt_top.png</key> <key type="filename">sprites/blueprints/belt_top.png</key>
<key type="filename">sprites/blueprints/wire_crossings-merger.png</key> <key type="filename">sprites/blueprints/wire-cross.png</key>
<key type="filename">sprites/blueprints/wire_crossings.png</key> <key type="filename">sprites/blueprints/wire-split.png</key>
<key type="filename">sprites/blueprints/wire_left.png</key> <key type="filename">sprites/blueprints/wire-turn.png</key>
<key type="filename">sprites/blueprints/wire_right.png</key> <key type="filename">sprites/blueprints/wire.png</key>
<key type="filename">sprites/blueprints/wire_top.png</key>
<key type="filename">sprites/buildings/belt_left.png</key> <key type="filename">sprites/buildings/belt_left.png</key>
<key type="filename">sprites/buildings/belt_right.png</key> <key type="filename">sprites/buildings/belt_right.png</key>
<key type="filename">sprites/buildings/belt_top.png</key> <key type="filename">sprites/buildings/belt_top.png</key>
<key type="filename">sprites/buildings/wire_crossings-merger.png</key> <key type="filename">sprites/buildings/wire-cross.png</key>
<key type="filename">sprites/buildings/wire_crossings.png</key> <key type="filename">sprites/buildings/wire-split.png</key>
<key type="filename">sprites/buildings/wire_left.png</key> <key type="filename">sprites/buildings/wire-turn.png</key>
<key type="filename">sprites/buildings/wire_right.png</key> <key type="filename">sprites/buildings/wire.png</key>
<key type="filename">sprites/buildings/wire_top.png</key>
<struct type="IndividualSpriteSettings"> <struct type="IndividualSpriteSettings">
<key>pivotPoint</key> <key>pivotPoint</key>
<point_f>0.5,0.5</point_f> <point_f>0.5,0.5</point_f>
@ -385,28 +374,6 @@
<key>scale9FromFile</key> <key>scale9FromFile</key>
<false/> <false/>
</struct> </struct>
<key type="filename">sprites/blueprints/advanced_processor.png</key>
<key type="filename">sprites/blueprints/energy_generator.png</key>
<key type="filename">sprites/blueprints/painter-double.png</key>
<key type="filename">sprites/blueprints/trash-storage.png</key>
<key type="filename">sprites/buildings/advanced_processor.png</key>
<key type="filename">sprites/buildings/energy_generator.png</key>
<key type="filename">sprites/buildings/painter-double.png</key>
<key type="filename">sprites/misc/energy_generator_overlay.png</key>
<struct type="IndividualSpriteSettings">
<key>pivotPoint</key>
<point_f>0.5,0.5</point_f>
<key>spriteScale</key>
<double>1</double>
<key>scale9Enabled</key>
<false/>
<key>scale9Borders</key>
<rect>96,96,192,192</rect>
<key>scale9Paddings</key>
<rect>96,96,192,192</rect>
<key>scale9FromFile</key>
<false/>
</struct>
<key type="filename">sprites/blueprints/cutter-quad.png</key> <key type="filename">sprites/blueprints/cutter-quad.png</key>
<key type="filename">sprites/blueprints/painter-quad.png</key> <key type="filename">sprites/blueprints/painter-quad.png</key>
<key type="filename">sprites/buildings/cutter-quad.png</key> <key type="filename">sprites/buildings/cutter-quad.png</key>
@ -426,11 +393,13 @@
<false/> <false/>
</struct> </struct>
<key type="filename">sprites/blueprints/cutter.png</key> <key type="filename">sprites/blueprints/cutter.png</key>
<key type="filename">sprites/blueprints/filter.png</key>
<key type="filename">sprites/blueprints/mixer.png</key> <key type="filename">sprites/blueprints/mixer.png</key>
<key type="filename">sprites/blueprints/painter-mirrored.png</key> <key type="filename">sprites/blueprints/painter-mirrored.png</key>
<key type="filename">sprites/blueprints/painter.png</key> <key type="filename">sprites/blueprints/painter.png</key>
<key type="filename">sprites/blueprints/splitter.png</key> <key type="filename">sprites/blueprints/splitter.png</key>
<key type="filename">sprites/blueprints/stacker.png</key> <key type="filename">sprites/blueprints/stacker.png</key>
<key type="filename">sprites/buildings/filter.png</key>
<key type="filename">sprites/buildings/painter-mirrored.png</key> <key type="filename">sprites/buildings/painter-mirrored.png</key>
<struct type="IndividualSpriteSettings"> <struct type="IndividualSpriteSettings">
<key>pivotPoint</key> <key>pivotPoint</key>
@ -446,25 +415,9 @@
<key>scale9FromFile</key> <key>scale9FromFile</key>
<false/> <false/>
</struct> </struct>
<key type="filename">sprites/blueprints/miner-chainable.png</key> <key type="filename">sprites/blueprints/painter-double.png</key>
<key type="filename">sprites/blueprints/miner.png</key> <key type="filename">sprites/blueprints/trash-storage.png</key>
<key type="filename">sprites/blueprints/rotater-ccw.png</key> <key type="filename">sprites/buildings/painter-double.png</key>
<key type="filename">sprites/blueprints/rotater.png</key>
<key type="filename">sprites/blueprints/splitter-compact-inverse.png</key>
<key type="filename">sprites/blueprints/splitter-compact.png</key>
<key type="filename">sprites/blueprints/trash.png</key>
<key type="filename">sprites/blueprints/underground_belt_entry-tier2.png</key>
<key type="filename">sprites/blueprints/underground_belt_entry.png</key>
<key type="filename">sprites/blueprints/underground_belt_exit-tier2.png</key>
<key type="filename">sprites/blueprints/underground_belt_exit.png</key>
<key type="filename">sprites/buildings/miner-chainable.png</key>
<key type="filename">sprites/buildings/rotater-ccw.png</key>
<key type="filename">sprites/buildings/splitter-compact-inverse.png</key>
<key type="filename">sprites/buildings/splitter-compact.png</key>
<key type="filename">sprites/buildings/underground_belt_entry-tier2.png</key>
<key type="filename">sprites/buildings/underground_belt_entry.png</key>
<key type="filename">sprites/buildings/underground_belt_exit-tier2.png</key>
<key type="filename">sprites/buildings/underground_belt_exit.png</key>
<struct type="IndividualSpriteSettings"> <struct type="IndividualSpriteSettings">
<key>pivotPoint</key> <key>pivotPoint</key>
<point_f>0.5,0.5</point_f> <point_f>0.5,0.5</point_f>
@ -473,9 +426,9 @@
<key>scale9Enabled</key> <key>scale9Enabled</key>
<false/> <false/>
<key>scale9Borders</key> <key>scale9Borders</key>
<rect>48,48,96,96</rect> <rect>96,96,192,192</rect>
<key>scale9Paddings</key> <key>scale9Paddings</key>
<rect>48,48,96,96</rect> <rect>96,96,192,192</rect>
<key>scale9FromFile</key> <key>scale9FromFile</key>
<false/> <false/>
</struct> </struct>
@ -513,6 +466,28 @@
<key>scale9FromFile</key> <key>scale9FromFile</key>
<false/> <false/>
</struct> </struct>
<key type="filename">sprites/buildings/miner.png</key>
<key type="filename">sprites/buildings/rotater.png</key>
<key type="filename">sprites/buildings/trash.png</key>
<key type="filename">sprites/misc/processor_disabled.png</key>
<key type="filename">sprites/misc/processor_disconnected.png</key>
<key type="filename">sprites/wires/logical_acceptor.png</key>
<key type="filename">sprites/wires/logical_ejector.png</key>
<key type="filename">sprites/wires/overlay_tile.png</key>
<struct type="IndividualSpriteSettings">
<key>pivotPoint</key>
<point_f>0.5,0.5</point_f>
<key>spriteScale</key>
<double>1</double>
<key>scale9Enabled</key>
<false/>
<key>scale9Borders</key>
<rect>32,32,64,64</rect>
<key>scale9Paddings</key>
<rect>32,32,64,64</rect>
<key>scale9FromFile</key>
<false/>
</struct>
<key type="filename">sprites/buildings/trash-storage.png</key> <key type="filename">sprites/buildings/trash-storage.png</key>
<struct type="IndividualSpriteSettings"> <struct type="IndividualSpriteSettings">
<key>pivotPoint</key> <key>pivotPoint</key>
@ -530,9 +505,6 @@
</struct> </struct>
<key type="filename">sprites/debug/acceptor_slot.png</key> <key type="filename">sprites/debug/acceptor_slot.png</key>
<key type="filename">sprites/debug/ejector_slot.png</key> <key type="filename">sprites/debug/ejector_slot.png</key>
<key type="filename">sprites/map_overview/belt_forward.png</key>
<key type="filename">sprites/map_overview/belt_left.png</key>
<key type="filename">sprites/map_overview/belt_right.png</key>
<key type="filename">sprites/misc/hub_direction_indicator.png</key> <key type="filename">sprites/misc/hub_direction_indicator.png</key>
<key type="filename">sprites/misc/waypoint.png</key> <key type="filename">sprites/misc/waypoint.png</key>
<struct type="IndividualSpriteSettings"> <struct type="IndividualSpriteSettings">
@ -549,7 +521,6 @@
<key>scale9FromFile</key> <key>scale9FromFile</key>
<false/> <false/>
</struct> </struct>
<key type="filename">sprites/misc/deletion_marker.png</key>
<key type="filename">sprites/misc/slot_bad_arrow.png</key> <key type="filename">sprites/misc/slot_bad_arrow.png</key>
<key type="filename">sprites/misc/slot_good_arrow.png</key> <key type="filename">sprites/misc/slot_good_arrow.png</key>
<struct type="IndividualSpriteSettings"> <struct type="IndividualSpriteSettings">
@ -566,21 +537,6 @@
<key>scale9FromFile</key> <key>scale9FromFile</key>
<false/> <false/>
</struct> </struct>
<key type="filename">sprites/misc/lock_direction_indicator.png</key>
<struct type="IndividualSpriteSettings">
<key>pivotPoint</key>
<point_f>0.5,0.5</point_f>
<key>spriteScale</key>
<double>1</double>
<key>scale9Enabled</key>
<false/>
<key>scale9Borders</key>
<rect>12,12,24,24</rect>
<key>scale9Paddings</key>
<rect>12,12,24,24</rect>
<key>scale9FromFile</key>
<false/>
</struct>
<key type="filename">sprites/misc/storage_overlay.png</key> <key type="filename">sprites/misc/storage_overlay.png</key>
<struct type="IndividualSpriteSettings"> <struct type="IndividualSpriteSettings">
<key>pivotPoint</key> <key>pivotPoint</key>
@ -596,13 +552,11 @@
<key>scale9FromFile</key> <key>scale9FromFile</key>
<false/> <false/>
</struct> </struct>
<key type="filename">sprites/wires/battery_empty.png</key> <key type="filename">sprites/wires/boolean_false.png</key>
<key type="filename">sprites/wires/battery_full.png</key> <key type="filename">sprites/wires/boolean_true.png</key>
<key type="filename">sprites/wires/battery_low.png</key> <key type="filename">sprites/wires/network_conflict.png</key>
<key type="filename">sprites/wires/battery_medium.png</key> <key type="filename">sprites/wires/network_empty.png</key>
<key type="filename">sprites/wires/negative_energy.png</key> <key type="filename">sprites/wires/wires_preview.png</key>
<key type="filename">sprites/wires/positive_energy.png</key>
<key type="filename">sprites/wires/waste_piled.png</key>
<struct type="IndividualSpriteSettings"> <struct type="IndividualSpriteSettings">
<key>pivotPoint</key> <key>pivotPoint</key>
<point_f>0.5,0.5</point_f> <point_f>0.5,0.5</point_f>
@ -617,6 +571,27 @@
<key>scale9FromFile</key> <key>scale9FromFile</key>
<false/> <false/>
</struct> </struct>
<key type="filename">sprites/wires/display/blue.png</key>
<key type="filename">sprites/wires/display/cyan.png</key>
<key type="filename">sprites/wires/display/green.png</key>
<key type="filename">sprites/wires/display/purple.png</key>
<key type="filename">sprites/wires/display/red.png</key>
<key type="filename">sprites/wires/display/white.png</key>
<key type="filename">sprites/wires/display/yellow.png</key>
<struct type="IndividualSpriteSettings">
<key>pivotPoint</key>
<point_f>0.5,0.5</point_f>
<key>spriteScale</key>
<double>1</double>
<key>scale9Enabled</key>
<false/>
<key>scale9Borders</key>
<rect>11,11,22,22</rect>
<key>scale9Paddings</key>
<rect>11,11,22,22</rect>
<key>scale9FromFile</key>
<false/>
</struct>
</map> </map>
<key>fileList</key> <key>fileList</key>
<array> <array>

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4e6959df75e915fb1a8d55e3d0ab750349b27276788ded63178f2a117c2edcf5
size 79441572

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a4f810fcfbfcea08cfb48a8d58f9b65d1fd14cd20ff3cabf94a03c39b5250547 oid sha256:3207e92c0fa5e71030d04c739647032be2697bf910eb7b7d9548bf04e95803b1
size 1765124 size 1223220

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Some files were not shown because too many files have changed in this diff Show More