diff --git a/gulp/buildutils.js b/gulp/buildutils.js
index 1fb2a9a3..041c8b1d 100644
--- a/gulp/buildutils.js
+++ b/gulp/buildutils.js
@@ -11,6 +11,7 @@ module.exports = {
);
return commitHash.replace(/^\s+|\s+$/g, "");
},
+
getAllResourceImages() {
return glob
.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() {
return trim(fs.readFileSync(path.join(__dirname, "..", "version")).toString());
},
diff --git a/gulp/cordova.js b/gulp/cordova.js
index dc968df0..22274dba 100644
--- a/gulp/cordova.js
+++ b/gulp/cordova.js
@@ -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 = {
diff --git a/gulp/css.js b/gulp/css.js
index 729d0432..6734f1ae 100644
--- a/gulp/css.js
+++ b/gulp/css.js
@@ -77,7 +77,6 @@ function gulptasksCSS($, gulp, buildFolder, browserSync) {
.pipe($.plumber())
.pipe($.sass.sync({ outputStyle: "compressed" }).on("error", $.sass.logError))
.pipe($.postcss(postcssPlugins(true, { cachebust: true })))
- // .pipe($.cssbeautify())
.pipe(gulp.dest(buildFolder))
);
});
@@ -90,7 +89,6 @@ function gulptasksCSS($, gulp, buildFolder, browserSync) {
.pipe($.plumber())
.pipe($.sass.sync({ outputStyle: "compressed" }).on("error", $.sass.logError))
.pipe($.postcss(postcssPlugins(true, { cachebust: false })))
- // .pipe($.cssbeautify())
.pipe(gulp.dest(buildFolder))
);
});
diff --git a/gulp/html.js b/gulp/html.js
index a21d66cb..b49fc1b2 100644
--- a/gulp/html.js
+++ b/gulp/html.js
@@ -9,7 +9,7 @@ function computeIntegrityHash(fullPath, algorithm = "sha256") {
return algorithm + "-" + hash;
}
-function gulptasksHTML($, gulp, buildFolder, browserSync) {
+function gulptasksHTML($, gulp, buildFolder) {
const commitHash = buildUtils.getRevision();
async function buildHtml(
apiUrl,
@@ -27,9 +27,8 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
return gulp
.src("../src/html/" + (standalone ? "index.standalone.html" : "index.html"))
.pipe(
- $.dom(function () {
- // @ts-ignore
- const document = /** @type {Document} */ (this);
+ $.dom(/** @this {Document} **/ function () {
+ const document = this;
// Preconnect to api
const prefetchLink = document.createElement("link");
@@ -38,21 +37,6 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
prefetchLink.setAttribute("crossorigin", "anonymous");
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
const css = document.createElement("link");
css.rel = "stylesheet";
@@ -68,17 +52,6 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
}
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) {
// Append cordova link
const cdv = document.createElement("script");
@@ -114,18 +87,9 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
// Do not need to preload in app or standalone
if (!hasLocalFiles) {
- // Preload images
- const images = buildUtils.getAllResourceImages();
-
// Preload essentials
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 => {
const preloadLink = document.createElement("link");
preloadLink.rel = "preload";
@@ -138,23 +102,6 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
}
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+")`;
@@ -167,7 +114,7 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
font-display: swap;
src: url('${cachebust("res/fonts/GameFont.woff2")}') format('woff2');
}
-
+
#ll_fp {
font-family: GameFont;
font-size: 14px;
@@ -177,7 +124,7 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
left: 0;
opacity: 0.05;
}
-
+
#ll_p {
display: flex;
position: fixed;
@@ -190,7 +137,7 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
center;
align-items: center;
}
-
+
#ll_p > div {
position: absolute;
text-align: center;
@@ -201,7 +148,7 @@ function gulptasksHTML($, gulp, buildFolder, browserSync) {
font-family: 'GameFont', sans-serif;
font-size: 20px;
}
-
+
#ll_p > span {
width: 60px;
height: 60px;
diff --git a/gulp/js.js b/gulp/js.js
index 6faccfca..28c037bd 100644
--- a/gulp/js.js
+++ b/gulp/js.js
@@ -6,12 +6,6 @@ function requireUncached(module) {
}
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
@@ -71,6 +65,7 @@ function gulptasksJS($, gulp, buildFolder, browserSync) {
gulp.task("js.staging", gulp.parallel("js.staging.transpiled", "js.staging.latest"));
//// PROD
+
gulp.task("js.prod.transpiled", () => {
return gulp
.src("../src/js/main.js")
@@ -167,8 +162,6 @@ function gulptasksJS($, gulp, buildFolder, browserSync) {
)
.pipe(gulp.dest(buildFolder));
});
-
- // TODO: Tasks for te app
}
module.exports = {
diff --git a/gulp/package.json b/gulp/package.json
index 6279afc8..9c3d0182 100644
--- a/gulp/package.json
+++ b/gulp/package.json
@@ -3,7 +3,6 @@
"version": "1.0.0",
"description": "builder",
"private": true,
- "main": "main.js",
"scripts": {
"gulp": "gulp"
},
@@ -41,7 +40,6 @@
"lz-string": "^1.4.4",
"markdown-loader": "^5.1.0",
"node-sri": "^1.1.1",
- "obfuscator-loader": "^1.1.2",
"phonegap-plugin-mobile-accessibility": "^1.0.5",
"promise-polyfill": "^8.1.0",
"query-string": "^6.8.1",
@@ -54,7 +52,6 @@
"uglify-template-string-loader": "^1.1.0",
"unused-files-webpack-plugin": "^3.4.0",
"webpack": "^4.43.0",
- "webpack-bundle-analyzer": "^3.0.3",
"webpack-cli": "^3.1.0",
"webpack-deep-scope-plugin": "^1.6.0",
"webpack-plugin-replace": "^1.1.1",
@@ -76,8 +73,6 @@
"gulp-cache": "^1.1.3",
"gulp-cached": "^1.1.1",
"gulp-clean": "^0.4.0",
- "gulp-cssbeautify": "^2.0.1",
- "gulp-csslint": "^1.0.1",
"gulp-dom": "^1.0.0",
"gulp-flatten": "^0.4.0",
"gulp-fluent-ffmpeg": "^2.0.0",
@@ -85,8 +80,6 @@
"gulp-htmlmin": "^5.0.1",
"gulp-if": "^3.0.0",
"gulp-imagemin": "^7.1.0",
- "gulp-javascript-obfuscator": "^1.1.5",
- "gulp-jsbeautifier": "^3.0.0",
"gulp-load-plugins": "^2.0.3",
"gulp-phonegap-build": "^0.1.5",
"gulp-plumber": "^1.2.1",
@@ -104,13 +97,11 @@
"imagemin-pngquant": "^9.0.0",
"jimp": "^0.6.1",
"js-yaml": "^3.13.1",
- "onesky-fetch": "^0.0.7",
"postcss-assets": "^5.0.0",
"postcss-preset-env": "^6.5.0",
"postcss-round-subpixels": "^1.2.0",
"postcss-unprefix": "^2.1.3",
"sass-unused": "^0.3.0",
- "speed-measure-webpack-plugin": "^1.3.1",
"strip-json-comments": "^3.0.1",
"trim": "^0.0.1",
"webpack-stream": "^5.2.1",
diff --git a/gulp/standalone.js b/gulp/standalone.js
index c4f33417..3b0112d4 100644
--- a/gulp/standalone.js
+++ b/gulp/standalone.js
@@ -1,11 +1,11 @@
const packager = require("electron-packager");
const path = require("path");
-const buildutils = require("./buildutils");
+const { getVersion } = require("./buildutils");
const fs = require("fs");
const fse = require("fs-extra");
const execSync = require("child_process").execSync;
-function gulptasksStandalone($, gulp, buildFolder) {
+function gulptasksStandalone($, gulp) {
const electronBaseDir = path.join(__dirname, "..", "electron");
const tempDestDir = path.join(__dirname, "..", "tmp_standalone_files");
@@ -47,49 +47,7 @@ function gulptasksStandalone($, gulp, buildFolder) {
});
gulp.task("standalone.prepare.minifyCode", () => {
- return (
- 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))
- );
+ return gulp.src(path.join(electronBaseDir, "*.js")).pipe(gulp.dest(tempDestBuildDir));
});
gulp.task("standalone.prepare.copyGamefiles", () => {
@@ -122,15 +80,14 @@ function gulptasksStandalone($, gulp, buildFolder) {
* @param {'win32'|'linux'|'darwin'} platform
* @param {'x64'|'ia32'} arch
* @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"));
packager({
dir: tempDestBuildDir,
appCopyright: "Tobias Springer",
- appVersion: buildutils.getVersion(),
+ appVersion: getVersion(),
buildVersion: "1.0.0",
arch,
platform,
@@ -164,19 +121,6 @@ function gulptasksStandalone($, gulp, buildFolder) {
'#!/usr/bin/env bash\n./shapezio --no-sandbox "$@"\n'
);
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") {
@@ -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.win32", cb => packageStandalone("win32", "ia32", cb, true));
- gulp.task("standalone.package.prod.linux64", cb => packageStandalone("linux", "x64", cb, true));
- gulp.task("standalone.package.prod.linux32", cb => packageStandalone("linux", "ia32", cb, true));
- gulp.task("standalone.package.prod.darwin64", cb => packageStandalone("darwin", "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));
+ gulp.task("standalone.package.prod.linux64", cb => packageStandalone("linux", "x64", cb));
+ gulp.task("standalone.package.prod.linux32", cb => packageStandalone("linux", "ia32", cb));
+ gulp.task("standalone.package.prod.darwin64", cb => packageStandalone("darwin", "x64", cb));
gulp.task(
"standalone.package.prod",
@@ -240,8 +184,6 @@ function gulptasksStandalone($, gulp, buildFolder) {
"standalone.package.prod.win64",
"standalone.package.prod.linux64",
"standalone.package.prod.darwin64"
- // "standalone.package.prod.win32",
- // "standalone.package.prod.linux32",
)
)
);
diff --git a/gulp/translations.js b/gulp/translations.js
index 50404390..56054476 100644
--- a/gulp/translations.js
+++ b/gulp/translations.js
@@ -5,7 +5,7 @@ const yaml = require("gulp-yaml");
const translationsSourceDir = path.join(__dirname, "..", "translations");
const translationsJsonDir = path.join(__dirname, "..", "src", "js", "built-temp");
-function gulptasksTranslations($, gulp, buildFolder) {
+function gulptasksTranslations($, gulp) {
gulp.task("translations.convertToJson", () => {
return gulp
.src(path.join(translationsSourceDir, "*.yaml"))
diff --git a/gulp/webpack.config.js b/gulp/webpack.config.js
index 022e2773..6e1d7388 100644
--- a/gulp/webpack.config.js
+++ b/gulp/webpack.config.js
@@ -2,9 +2,8 @@
const path = require("path");
const webpack = require("webpack");
-const utils = require("./buildutils");
+const { getRevision, getVersion, getAllResourceImages } = require("./buildutils");
const lzString = require("lz-string");
-// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const CircularDependencyPlugin = require("circular-dependency-plugin");
module.exports = ({ watch = false, standalone = false }) => {
@@ -41,9 +40,9 @@ module.exports = ({ watch = false, standalone = false }) => {
G_IS_BROWSER: "true",
G_IS_STANDALONE: standalone ? "true" : "false",
G_BUILD_TIME: "" + new Date().getTime(),
- G_BUILD_COMMIT_HASH: JSON.stringify(utils.getRevision()),
- G_BUILD_VERSION: JSON.stringify(utils.getVersion()),
- G_ALL_UI_IMAGES: JSON.stringify(utils.getAllResourceImages()),
+ G_BUILD_COMMIT_HASH: JSON.stringify(getRevision()),
+ G_BUILD_VERSION: JSON.stringify(getVersion()),
+ G_ALL_UI_IMAGES: JSON.stringify(getAllResourceImages()),
}),
new CircularDependencyPlugin({
@@ -60,7 +59,6 @@ module.exports = ({ watch = false, standalone = false }) => {
// set the current working directory for displaying module paths
cwd: path.join(__dirname, "..", "src", "js"),
}),
- // new BundleAnalyzerPlugin()
],
module: {
rules: [
@@ -94,6 +92,16 @@ module.exports = ({ watch = false, standalone = false }) => {
},
],
},
+ {
+ test: /\.worker\.js$/,
+ use: {
+ loader: "worker-loader",
+ options: {
+ fallback: false,
+ inline: true,
+ },
+ },
+ },
{
test: /\.ya?ml$/,
type: "json", // Required by Webpack v4
diff --git a/gulp/webpack.production.config.js b/gulp/webpack.production.config.js
index 1b89283f..c26bca68 100644
--- a/gulp/webpack.production.config.js
+++ b/gulp/webpack.production.config.js
@@ -2,14 +2,12 @@
const path = require("path");
const webpack = require("webpack");
-const utils = require("./buildutils");
+const { getRevision, getVersion, getAllResourceImages } = require("./buildutils");
const lzString = require("lz-string");
const TerserPlugin = require("terser-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 SpeedMeasurePlugin = require("speed-measure-webpack-plugin");
module.exports = ({
enableAssert = false,
@@ -34,9 +32,9 @@ module.exports = ({
G_APP_ENVIRONMENT: JSON.stringify(environment),
G_HAVE_ASSERT: enableAssert ? "true" : "false",
G_BUILD_TIME: "" + new Date().getTime(),
- G_BUILD_COMMIT_HASH: JSON.stringify(utils.getRevision()),
- G_BUILD_VERSION: JSON.stringify(utils.getVersion()),
- G_ALL_UI_IMAGES: JSON.stringify(utils.getAllResourceImages()),
+ G_BUILD_COMMIT_HASH: JSON.stringify(getRevision()),
+ G_BUILD_VERSION: JSON.stringify(getVersion()),
+ G_ALL_UI_IMAGES: JSON.stringify(getAllResourceImages()),
};
const minifyNames = environment === "prod";
@@ -143,9 +141,9 @@ module.exports = ({
ecma: es6 ? 6 : 5,
preamble:
"/* 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"),
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: {
rules: [
diff --git a/gulp/yarn.lock b/gulp/yarn.lock
index 37fbfbb0..d0628aa3 100644
--- a/gulp/yarn.lock
+++ b/gulp/yarn.lock
@@ -718,21 +718,6 @@
js-levenshtein "^1.1.3"
semver "^5.5.0"
-"@babel/runtime@7.0.0-beta.42":
- version "7.0.0-beta.42"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.42.tgz#352e40c92e0460d3e82f49bd7e79f6cda76f919f"
- integrity sha512-iOGRzUoONLOtmCvjUsZv3mZzgCT6ljHQY5fr1qG1QIiJQwtM7zbPWGGpa3QWETq+UqwWyJnoi5XZDZRwZDFciQ==
- dependencies:
- core-js "^2.5.3"
- regenerator-runtime "^0.11.1"
-
-"@babel/runtime@7.0.0-rc.1":
- version "7.0.0-rc.1"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-rc.1.tgz#42f36fc5817911c89ea75da2b874054922967616"
- integrity sha512-Nifv2kwP/nwR39cAOasNxzjYfpeuf/ZbZNtQz5eYxWTC9yHARU9wItFnAwz1GTZ62MU+AtSjzZPMbLK5Q9hmbg==
- dependencies:
- regenerator-runtime "^0.12.0"
-
"@babel/runtime@^7.5.5":
version "7.9.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06"
@@ -1328,7 +1313,7 @@ abbrev@1:
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-accepts@~1.3.4, accepts@~1.3.7:
+accepts@~1.3.4:
version "1.3.7"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
@@ -1351,19 +1336,12 @@ acorn-jsx@^3.0.0:
dependencies:
acorn "^3.0.4"
-acorn-jsx@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e"
- integrity sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==
- dependencies:
- acorn "^5.0.3"
-
acorn-jsx@^5.0.0:
version "5.0.2"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f"
integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==
-acorn-walk@^6.0.1, acorn-walk@^6.1.1:
+acorn-walk@^6.0.1:
version "6.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
@@ -1373,7 +1351,7 @@ acorn@^3.0.4:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
-acorn@^5.0.3, acorn@^5.5.0, acorn@^5.6.0:
+acorn@^5.5.0:
version "5.7.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
@@ -1453,7 +1431,7 @@ ansi-colors@^1.0.1:
dependencies:
ansi-wrap "^0.1.0"
-ansi-colors@^4.1.0, ansi-colors@^4.1.1:
+ansi-colors@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
@@ -1685,11 +1663,6 @@ array-find-index@^1.0.1:
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
-array-flatten@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
- integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
-
array-initial@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795"
@@ -1724,19 +1697,12 @@ array-sort@^1.0.0:
get-value "^2.0.6"
kind-of "^5.0.2"
-array-union@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
- integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
- dependencies:
- array-uniq "^1.0.1"
-
array-union@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-array-uniq@^1.0.1, array-uniq@^1.0.2:
+array-uniq@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
@@ -1756,11 +1722,6 @@ arraybuffer.slice@~0.0.7:
resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
-arrify@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
- integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
-
asar@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/asar/-/asar-2.0.1.tgz#8518a1c62c238109c15a5f742213e83a09b9fd38"
@@ -1995,23 +1956,6 @@ babel-plugin-dynamic-import-node@^2.3.0:
dependencies:
object.assign "^4.1.0"
-babel-polyfill@6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
- integrity sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=
- dependencies:
- babel-runtime "^6.22.0"
- core-js "^2.4.0"
- regenerator-runtime "^0.10.0"
-
-babel-runtime@^6.22.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
- integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
- dependencies:
- core-js "^2.4.0"
- regenerator-runtime "^0.11.0"
-
babel-runtime@^7.0.0-beta.3:
version "7.0.0-beta.3"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-7.0.0-beta.3.tgz#7c750de5514452c27612172506b49085a4a630f2"
@@ -2097,16 +2041,6 @@ better-assert@~1.0.0:
dependencies:
callsite "1.0.0"
-bfj@^6.1.1:
- version "6.1.2"
- resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f"
- integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==
- dependencies:
- bluebird "^3.5.5"
- check-types "^8.0.3"
- hoopy "^0.1.4"
- tryer "^1.0.1"
-
big.js@^3.1.3:
version "3.2.0"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
@@ -2224,22 +2158,6 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
-body-parser@1.19.0:
- version "1.19.0"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
- integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
- dependencies:
- bytes "3.1.0"
- content-type "~1.0.4"
- debug "2.6.9"
- depd "~1.1.2"
- http-errors "1.7.2"
- iconv-lite "0.4.24"
- on-finished "~2.3.0"
- qs "6.7.0"
- raw-body "2.4.0"
- type-is "~1.6.17"
-
body-parser@~1.8.0:
version "1.8.4"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.8.4.tgz#d497e04bc13b3f9a8bd8c70bb0cdc16f2e028898"
@@ -2734,36 +2652,7 @@ caw@^2.0.0, caw@^2.0.1:
tunnel-agent "^0.6.0"
url-to-options "^1.0.1"
-chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
-chalk@2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
- integrity sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chalk@2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
- integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -2783,6 +2672,17 @@ chalk@^0.5.0:
strip-ansi "^0.3.0"
supports-color "^0.2.0"
+chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
chalk@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
@@ -2791,36 +2691,11 @@ chalk@^3.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chance@1.0.13:
- version "1.0.13"
- resolved "https://registry.yarnpkg.com/chance/-/chance-1.0.13.tgz#666bec2db42b3084456a3e4f4c28a82db5ccb7e6"
- integrity sha512-9cpcgmAIQiXC0eMgQuMZgXuHR2Y+gKUyGQnalqSAg5LlUJyJFsZeKyuHVSGhj+bx18ppH+Jo3VOayNeXR/7p9Q==
-
-chance@1.0.16:
- version "1.0.16"
- resolved "https://registry.yarnpkg.com/chance/-/chance-1.0.16.tgz#bd61912716b0010c3dca8e3948a960efcaa7bb1b"
- integrity sha512-2bgDHH5bVfAXH05SPtjqrsASzZ7h90yCuYT2z4mkYpxxYvJXiIydBFzVieVHZx7wLH1Ag2Azaaej2/zA1XUrNQ==
-
-chardet@^0.4.0:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
- integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
-
chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-charenc@~0.0.1:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
- integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
-
-check-types@^8.0.3:
- version "8.0.3"
- resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
- integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==
-
chokidar@^2.0.0, chokidar@^2.1.8:
version "2.1.8"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
@@ -2905,21 +2780,6 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
-class-validator@0.8.5:
- version "0.8.5"
- resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.8.5.tgz#484785acda98f68549c3a84dc1bb2f77b736dc58"
- integrity sha512-84yezRo44aP4oGhvPmqj6obAFQF1NzUyfR0+f8jubzdAspO5pmjpHhBBlPf335epUskzXAFe5uo4Qf+c7SI+DA==
- dependencies:
- validator "9.2.0"
-
-class-validator@0.9.1:
- version "0.9.1"
- resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.9.1.tgz#d60e58c5d14abca0a41bce38cf792ad4c46d1531"
- integrity sha512-3wApflrd3ywVZyx4jaasGoFt8pmo4aGLPPAEKCKCsTRWVGPilahD88q3jQjRQwja50rl9a7rsP5LAxJYwGK8/Q==
- dependencies:
- google-libphonenumber "^3.1.6"
- validator "10.4.0"
-
clean-css@4.2.x:
version "4.2.1"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
@@ -3010,7 +2870,7 @@ clone@^1.0.0, clone@^1.0.2:
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
-clone@^2.1.1, clone@~2.1.0:
+clone@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
@@ -3122,17 +2982,12 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
-commander@2.15.1:
- version "2.15.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
- integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
-
-commander@2.17.1, commander@2.17.x:
+commander@2.17.x:
version "2.17.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
-commander@^2.18.0, commander@^2.19.0, commander@^2.2.0, commander@^2.20.0, commander@^2.8.1:
+commander@^2.19.0, commander@^2.2.0, commander@^2.20.0, commander@^2.8.1:
version "2.20.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
@@ -3273,18 +3128,13 @@ constants-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
-content-disposition@0.5.3, content-disposition@^0.5.2:
+content-disposition@^0.5.2:
version "0.5.3"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
dependencies:
safe-buffer "5.1.2"
-content-type@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
- integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
-
convert-source-map@^1.5.0, convert-source-map@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
@@ -3292,21 +3142,11 @@ convert-source-map@^1.5.0, convert-source-map@^1.7.0:
dependencies:
safe-buffer "~5.1.1"
-cookie-signature@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
- integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
-
cookie@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
-cookie@0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
- integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
-
copy-concurrently@^1.0.0:
version "1.0.5"
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@@ -3345,7 +3185,7 @@ core-js@3:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.2.1.tgz#cd41f38534da6cc59f7db050fe67307de9868b09"
integrity sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==
-core-js@^2.4.0, core-js@^2.5.3, core-js@^2.5.7:
+core-js@^2.4.0, core-js@^2.5.7:
version "2.6.9"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
@@ -3355,7 +3195,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-cosmiconfig@^5.0.0, cosmiconfig@^5.2.1:
+cosmiconfig@^5.0.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
@@ -3448,11 +3288,6 @@ cross-zip@^2.1.5:
dependencies:
rimraf "^3.0.0"
-crypt@~0.0.1:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
- integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
-
crypto-browserify@^3.11.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
@@ -3568,11 +3403,6 @@ css-what@^2.1.2:
resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
-cssbeautify@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/cssbeautify/-/cssbeautify-0.3.1.tgz#12dd1f734035c2e6faca67dcbdcef74e42811397"
- integrity sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=
-
cssdb@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0"
@@ -3583,14 +3413,6 @@ cssesc@^2.0.0:
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703"
integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==
-csslint@^1.0.2:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/csslint/-/csslint-1.0.5.tgz#19cc3eda322160fd3f7232af1cb2a360e898a2e9"
- integrity sha1-Gcw+2jIhYP0/cjKvHLKjYOiYouk=
- dependencies:
- clone "~2.1.0"
- parserlib "~1.1.1"
-
cssnano-preset-advanced@^4.0.7:
version "4.0.7"
resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-4.0.7.tgz#d981527b77712e2f3f3f09c73313e9b71b278b88"
@@ -4124,11 +3946,6 @@ duplexer3@^0.1.4:
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
-duplexer@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
- integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
-
duplexify@^3.4.2, duplexify@^3.6.0:
version "3.7.1"
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
@@ -4199,11 +4016,6 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-ejs@^2.6.1:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.1.tgz#5b5ab57f718b79d4aca9254457afecd36fa80228"
- integrity sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ==
-
electron-notarize@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-0.1.1.tgz#c3563d70c5e7b3315f44e8495b30050a8c408b91"
@@ -4295,13 +4107,6 @@ encodeurl@~1.0.1, encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-encoding@^0.1.11:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
- integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
- dependencies:
- iconv-lite "~0.4.13"
-
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
@@ -4534,30 +4339,6 @@ escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-escodegen-wallaby@1.6.18:
- version "1.6.18"
- resolved "https://registry.yarnpkg.com/escodegen-wallaby/-/escodegen-wallaby-1.6.18.tgz#95a41e2fdc88687466e43550c7bf136386fd4363"
- integrity sha512-3UvR14JRNh8VfKJixTDHWmhPNKAJiVZS807KUjECBk6f05WMe8ZeWL1gbrswNYhDiAUeDBQccyTWR91fayx3og==
- dependencies:
- esprima "^2.7.1"
- estraverse "^1.9.1"
- esutils "^2.0.2"
- optionator "^0.8.1"
- optionalDependencies:
- source-map "~0.2.0"
-
-escodegen-wallaby@1.6.19:
- version "1.6.19"
- resolved "https://registry.yarnpkg.com/escodegen-wallaby/-/escodegen-wallaby-1.6.19.tgz#acd6bbd73f9270763e18570cdc13c0d694759a23"
- integrity sha512-q+JGvR5+NR+EJBLnGAevCk5PIiIhPkUFCvcm6w9MWYtm8sv4FdGUsgzWsY6At/YHkgMyA366sjphA/JTNC8CeQ==
- dependencies:
- esprima "^2.7.1"
- estraverse "^1.9.1"
- esutils "^2.0.2"
- optionator "^0.8.1"
- optionalDependencies:
- source-map "~0.2.0"
-
escodegen@^1.11.0:
version "1.12.0"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541"
@@ -4681,7 +4462,7 @@ eslint@^5.9.0:
table "^5.2.3"
text-table "^0.2.0"
-espree@3.5.4, espree@^3.1.6:
+espree@^3.1.6:
version "3.5.4"
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
@@ -4689,14 +4470,6 @@ espree@3.5.4, espree@^3.1.6:
acorn "^5.5.0"
acorn-jsx "^3.0.0"
-espree@4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634"
- integrity sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==
- dependencies:
- acorn "^5.6.0"
- acorn-jsx "^4.1.1"
-
espree@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
@@ -4706,11 +4479,6 @@ espree@^5.0.1:
acorn-jsx "^5.0.0"
eslint-visitor-keys "^1.0.0"
-esprima@^2.7.1:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
- integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
-
esprima@^3.1.3, esprima@~3.1.0:
version "3.1.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
@@ -4735,16 +4503,6 @@ esrecurse@^4.1.0, esrecurse@^4.2.1:
dependencies:
estraverse "^4.1.0"
-estraverse@4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
- integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
-
-estraverse@^1.9.1:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
- integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=
-
estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
@@ -4888,42 +4646,6 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2:
dependencies:
homedir-polyfill "^1.0.1"
-express@^4.16.3:
- version "4.17.1"
- resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
- integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
- dependencies:
- accepts "~1.3.7"
- array-flatten "1.1.1"
- body-parser "1.19.0"
- content-disposition "0.5.3"
- content-type "~1.0.4"
- cookie "0.4.0"
- cookie-signature "1.0.6"
- debug "2.6.9"
- depd "~1.1.2"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- finalhandler "~1.1.2"
- fresh "0.5.2"
- merge-descriptors "1.0.1"
- methods "~1.1.2"
- on-finished "~2.3.0"
- parseurl "~1.3.3"
- path-to-regexp "0.1.7"
- proxy-addr "~2.0.5"
- qs "6.7.0"
- range-parser "~1.2.1"
- safe-buffer "5.1.2"
- send "0.17.1"
- serve-static "1.14.1"
- setprototypeof "1.1.1"
- statuses "~1.5.0"
- type-is "~1.6.18"
- utils-merge "1.0.1"
- vary "~1.1.2"
-
ext-list@^2.0.0:
version "2.2.2"
resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37"
@@ -4966,15 +4688,6 @@ extend@^3.0.0, extend@~3.0.2:
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-external-editor@^2.0.1:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
- integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
- dependencies:
- chardet "^0.4.0"
- iconv-lite "^0.4.17"
- tmp "^0.0.33"
-
external-editor@^3.0.3:
version "3.1.0"
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
@@ -5189,11 +4902,6 @@ filenamify@^2.0.0:
strip-outer "^1.0.0"
trim-repeated "^1.0.0"
-filesize@^3.6.1:
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
- integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==
-
fill-range@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
@@ -5224,7 +4932,7 @@ finalhandler@1.1.0:
statuses "~1.3.1"
unpipe "~1.0.0"
-finalhandler@1.1.2, finalhandler@~1.1.2:
+finalhandler@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
@@ -5443,11 +5151,6 @@ form-data@~2.3.2:
combined-stream "^1.0.6"
mime-types "^2.1.12"
-forwarded@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
- integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
-
fragment-cache@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
@@ -5962,11 +5665,6 @@ gonzales-pe@^4.2.3:
dependencies:
minimist "1.1.x"
-google-libphonenumber@^3.1.6:
- version "3.2.5"
- resolved "https://registry.yarnpkg.com/google-libphonenumber/-/google-libphonenumber-3.2.5.tgz#2ebe6437fd3dbbffd65f4339ad1ba93b3dc56836"
- integrity sha512-Y0r7MFCI11UDLn0KaMPBEInhROyIOkWkQIyvWMFVF2I+h+sHE3vbl5a7FVe39td6u/w+nlKDdUMP9dMOZyv+2Q==
-
got@^7.0.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a"
@@ -6119,27 +5817,6 @@ gulp-cli@^2.2.0:
v8flags "^3.2.0"
yargs "^7.1.0"
-gulp-cssbeautify@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/gulp-cssbeautify/-/gulp-cssbeautify-2.0.1.tgz#39903a8fa0b4f384f20d4eb4bc6591d83c4e47ac"
- integrity sha512-IOFGr2KQuO9koeQ5i0aWFhyUU4DBXmIHHblE5xfVxQEzPy5YXdKb54maP1sXTIDDhihilL+y3RhcCcxStem4Ig==
- dependencies:
- cssbeautify "^0.3.1"
- plugin-error "^1.0.1"
- through2 "^3.0.1"
-
-gulp-csslint@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/gulp-csslint/-/gulp-csslint-1.0.1.tgz#112a908f7aef98efc27b7bd00801f13a77becb93"
- integrity sha512-Rec56+RpCGg7feK3d/S45oqgxyLV3end0ed+UjWFv6YziQae2Bp4DNSDobwEvJdfCAsOhOSExEEB+jcfMx430w==
- dependencies:
- csslint "^1.0.2"
- fancy-log "^1.3.2"
- plugin-error "^1.0.1"
- rcloader "^0.2.1"
- through2 "^2.0.1"
- vinyl "^2.1.0"
-
gulp-dom@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/gulp-dom/-/gulp-dom-1.0.0.tgz#f834d5299c09b85e11c32505044a2ebe86ae1375"
@@ -6212,29 +5889,6 @@ gulp-imagemin@^7.1.0:
imagemin-optipng "^7.0.0"
imagemin-svgo "^7.0.0"
-gulp-javascript-obfuscator@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/gulp-javascript-obfuscator/-/gulp-javascript-obfuscator-1.1.6.tgz#4615ce5adb6a0f846246aacea8e1402d8fe04e06"
- integrity sha512-oiROhi7Zlu/0fM2h20jBFPaDOZicilT6kN+97Si82yieeFqr6l70o2R3gZ2Ah0u8v5IqGa+Pt8c2q3UnkMuk2A==
- dependencies:
- javascript-obfuscator latest
- plugin-error "^1.0.1"
- through2 "^2.0.0"
- vinyl "^2.2.0"
-
-gulp-jsbeautifier@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/gulp-jsbeautifier/-/gulp-jsbeautifier-3.0.1.tgz#4b26991e0adf063130452c5d74910239fadbf254"
- integrity sha512-zSXsXQy0/s6qjhhtTun+/ZfC/q8cz/fZpZmxoGPKpmxjuP7/F+oGpV/LHqtOAaWNo+WjcxLVey0cFoNrPZiHWg==
- dependencies:
- ansi-colors "^4.1.1"
- cosmiconfig "^5.2.1"
- fancy-log "^1.3.3"
- js-beautify "^1.10.1"
- lodash.mergewith "^4.6.2"
- plugin-error "^1.0.1"
- through2 "^3.0.1"
-
gulp-load-plugins@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/gulp-load-plugins/-/gulp-load-plugins-2.0.3.tgz#5f275c0b7f1925d8a1ce57cbd5c346d6af6b64fb"
@@ -6455,14 +6109,6 @@ gulplog@^1.0.0:
dependencies:
glogg "^1.0.0"
-gzip-size@^5.0.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
- integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==
- dependencies:
- duplexer "^0.1.1"
- pify "^4.0.1"
-
har-schema@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
@@ -6626,11 +6272,6 @@ homedir-polyfill@^1.0.1:
dependencies:
parse-passwd "^1.0.0"
-hoopy@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
- integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
-
hosted-git-info@^2.1.4:
version "2.8.4"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546"
@@ -6697,17 +6338,6 @@ http-cache-semantics@^4.0.0:
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#495704773277eeef6e43f9ab2c2c7d259dda25c5"
integrity sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==
-http-errors@1.7.2:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
- integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
- dependencies:
- depd "~1.1.2"
- inherits "2.0.3"
- setprototypeof "1.1.1"
- statuses ">= 1.5.0 < 2"
- toidentifier "1.0.0"
-
http-errors@1.7.3, http-errors@~1.7.2:
version "1.7.3"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
@@ -6762,7 +6392,7 @@ human-signals@^1.1.1:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
-iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
+iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -6992,25 +6622,6 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-inquirer@3.0.6:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347"
- integrity sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=
- dependencies:
- ansi-escapes "^1.1.0"
- chalk "^1.0.0"
- cli-cursor "^2.1.0"
- cli-width "^2.0.0"
- external-editor "^2.0.1"
- figures "^2.0.0"
- lodash "^4.3.0"
- mute-stream "0.0.7"
- run-async "^2.2.0"
- rx "^4.1.0"
- string-width "^2.0.0"
- strip-ansi "^3.0.0"
- through "^2.3.6"
-
inquirer@^0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
@@ -7079,16 +6690,6 @@ invariant@^2.2.2:
dependencies:
loose-envify "^1.0.0"
-inversify@4.11.1:
- version "4.11.1"
- resolved "https://registry.yarnpkg.com/inversify/-/inversify-4.11.1.tgz#9a10635d1fd347da11da96475b3608babd5945a6"
- integrity sha512-9bs/36crPdTSOCcoomHMb96s+B8W0+2c9dHFP/Srv9ZQaPnUvsMgzmMHfgVECqfHVUIW+M5S7SYOjoig8khWuQ==
-
-inversify@4.13.0:
- version "4.13.0"
- resolved "https://registry.yarnpkg.com/inversify/-/inversify-4.13.0.tgz#0ab40570bfa4474b04d5b919bbab3a4f682a72f5"
- integrity sha512-O5d8y7gKtyRwrvTLZzYET3kdFjqUy58sGpBYMARF13mzqDobpfBXVOPLH7HmnD2VR6Q+1HzZtslGvsdQfeb0SA==
-
invert-kv@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
@@ -7099,11 +6700,6 @@ invert-kv@^2.0.0:
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
-ipaddr.js@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
- integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
-
irregular-plurals@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-2.0.0.tgz#39d40f05b00f656d0b7fa471230dd3b714af2872"
@@ -7160,7 +6756,7 @@ is-binary-path@~2.1.0:
dependencies:
binary-extensions "^2.0.0"
-is-buffer@^1.1.5, is-buffer@~1.1.1:
+is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
@@ -7412,7 +7008,7 @@ is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0:
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
-is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
+is-stream@^1.0.0, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
@@ -7525,55 +7121,6 @@ isurl@^1.0.0-alpha5:
has-to-string-tag-x "^1.2.0"
is-object "^1.0.1"
-javascript-obfuscator@^0.15.0:
- version "0.15.0"
- resolved "https://registry.yarnpkg.com/javascript-obfuscator/-/javascript-obfuscator-0.15.0.tgz#e2b348c3a6895ef9195e3088f05747cff7a914f1"
- integrity sha512-d4mzMLkwZarZE9ZDFXQapNba4iHEj6ARveU4qCz7j/T/TlrHJVbyhVRcZigIuiQqgotTWGub5vMCa2/ep+hA+w==
- dependencies:
- "@babel/runtime" "7.0.0-beta.42"
- chalk "2.3.2"
- chance "1.0.13"
- class-validator "0.8.5"
- commander "2.15.1"
- escodegen-wallaby "1.6.18"
- espree "3.5.4"
- estraverse "4.2.0"
- inversify "4.11.1"
- js-string-escape "1.0.1"
- md5 "2.2.1"
- mkdirp "0.5.1"
- multimatch "2.1.0"
- opencollective "1.0.3"
- pjson "1.0.9"
- reflect-metadata "0.1.12"
- source-map-support "0.5.4"
- string-template "1.0.0"
- tslib "1.9.0"
-
-javascript-obfuscator@latest:
- version "0.18.1"
- resolved "https://registry.yarnpkg.com/javascript-obfuscator/-/javascript-obfuscator-0.18.1.tgz#ed536645bd64998c8d284c1ab87957d6d8d8294c"
- integrity sha512-pQ2DyRV4j0neaWdII1S7iJftCyks9H7afVkQRSE4gslkqpeqyM1DE0eapsZKHR0BnYvw3tPU+Ky+j4yhzcxRZA==
- dependencies:
- "@babel/runtime" "7.0.0-rc.1"
- chalk "2.4.1"
- chance "1.0.16"
- class-validator "0.9.1"
- commander "2.17.1"
- escodegen-wallaby "1.6.19"
- espree "4.0.0"
- estraverse "4.2.0"
- inversify "4.13.0"
- js-string-escape "1.0.1"
- md5 "2.2.1"
- mkdirp "0.5.1"
- multimatch "2.1.0"
- opencollective "1.0.3"
- reflect-metadata "0.1.12"
- source-map-support "0.5.8"
- string-template "1.0.0"
- tslib "1.9.3"
-
jimp@^0.6.1:
version "0.6.8"
resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.6.8.tgz#63074984337cc469cd4030946e503e7c02a18b5c"
@@ -7604,7 +7151,7 @@ js-base64@^2.1.8, js-base64@^2.1.9:
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121"
integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==
-js-beautify@^1.10.1, js-beautify@^1.5.10:
+js-beautify@^1.5.10:
version "1.10.2"
resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.10.2.tgz#88c9099cd6559402b124cfab18754936f8a7b178"
integrity sha512-ZtBYyNUYJIsBWERnQP0rPN9KjkrDfJcMjuVGcvXOUJrD1zmOGwhRwQ4msG+HJ+Ni/FA7+sRQEMYVzdTQDvnzvQ==
@@ -7620,11 +7167,6 @@ js-levenshtein@^1.1.3:
resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
-js-string-escape@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef"
- integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=
-
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -8114,11 +7656,6 @@ lodash._shimkeys@~2.4.1:
dependencies:
lodash._objecttypes "~2.4.1"
-lodash.assign@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
- integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=
-
lodash.capitalize@^4.1.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9"
@@ -8183,11 +7720,6 @@ lodash.isfinite@^3.3.2:
resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3"
integrity sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=
-lodash.isobject@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d"
- integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=
-
lodash.isobject@~2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5"
@@ -8223,16 +7755,6 @@ lodash.memoize@^4.1.2:
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
-lodash.merge@^4.6.0:
- version "4.6.2"
- resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
- integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
-
-lodash.mergewith@^4.6.2:
- version "4.6.2"
- resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55"
- integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==
-
lodash.restparam@^3.0.0:
version "3.6.1"
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
@@ -8324,7 +7846,7 @@ lodash@^3.0.1:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=
-lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.3.0, lodash@~4.17.10:
+lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.3.0, lodash@~4.17.10:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
@@ -8507,15 +8029,6 @@ md5.js@^1.3.4:
inherits "^2.0.1"
safe-buffer "^5.1.2"
-md5@2.2.1, md5@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
- integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=
- dependencies:
- charenc "~0.0.1"
- crypt "~0.0.1"
- is-buffer "~1.1.1"
-
mdn-data@2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
@@ -8564,11 +8077,6 @@ meow@^3.3.0, meow@^3.7.0:
redent "^1.0.0"
trim-newlines "^1.0.0"
-merge-descriptors@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
- integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
-
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
@@ -8589,11 +8097,6 @@ merge@^1.2.0:
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
-methods@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
- integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
-
micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
version "3.1.10"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
@@ -8713,7 +8216,7 @@ minimatch@0.3:
lru-cache "2"
sigmund "~1.0.0"
-"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
+"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@@ -8745,11 +8248,6 @@ minimist@1.1.x:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8"
integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=
-minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
- integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-
minimist@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de"
@@ -8760,6 +8258,11 @@ minimist@^0.2.0:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.0.tgz#4dffe525dae2b864c66c2e23c6271d7afdecefce"
integrity sha1-Tf/lJdriuGTGbC4jxicdev3s784=
+minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
@@ -8864,16 +8367,6 @@ ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-multimatch@2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
- integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=
- dependencies:
- array-differ "^1.0.0"
- array-union "^1.0.1"
- arrify "^1.0.0"
- minimatch "^3.0.0"
-
multipipe@^0.1.0, multipipe@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
@@ -8969,22 +8462,6 @@ no-case@^2.2.0:
dependencies:
lower-case "^1.1.1"
-node-fetch@1.6.3:
- version "1.6.3"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
- integrity sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=
- dependencies:
- encoding "^0.1.11"
- is-stream "^1.0.1"
-
-node-fetch@^1.6.3:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
- integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
- dependencies:
- encoding "^0.1.11"
- is-stream "^1.0.1"
-
node-gyp@^3.8.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
@@ -9231,15 +8708,6 @@ oauth-sign@~0.9.0:
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-obfuscator-loader@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/obfuscator-loader/-/obfuscator-loader-1.1.2.tgz#6e8460066296fc642a68c945e64906e3c964cb0f"
- integrity sha512-5PKsa4Vzq8uLJG0GT9BvC9ZxCr44wyV0c9wi782RYWh44GdFMSqlnUldgqSV+HQkFH3MWNc34AlSVSEhg7I26w==
- dependencies:
- esprima "^4.0.0"
- javascript-obfuscator "^0.15.0"
- loader-utils "^1.1.0"
-
object-assign@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
@@ -9390,14 +8858,6 @@ once@~1.3.0:
dependencies:
wrappy "1"
-onesky-fetch@^0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/onesky-fetch/-/onesky-fetch-0.0.7.tgz#96fce1a258a80683d6a37840958bae2f6fdb2809"
- integrity sha1-lvzholioBoPWo3hAlYuuL2/bKAk=
- dependencies:
- md5 "^2.2.1"
- node-fetch "^1.6.3"
-
onetime@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
@@ -9422,36 +8882,11 @@ open@^0.0.5:
resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc"
integrity sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=
-opencollective@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1"
- integrity sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=
- dependencies:
- babel-polyfill "6.23.0"
- chalk "1.1.3"
- inquirer "3.0.6"
- minimist "1.2.0"
- node-fetch "1.6.3"
- opn "4.0.2"
-
-opener@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
- integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
-
openurl@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/openurl/-/openurl-1.1.1.tgz#3875b4b0ef7a52c156f0db41d4609dbb0f94b387"
integrity sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=
-opn@4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
- integrity sha1-erwi5kTf9jsKltWrfyeQwPAavJU=
- dependencies:
- object-assign "^4.0.1"
- pinkie-promise "^2.0.0"
-
opn@5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c"
@@ -9820,11 +9255,6 @@ parseqs@0.0.5:
dependencies:
better-assert "~1.0.0"
-parserlib@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/parserlib/-/parserlib-1.1.1.tgz#a64cfa724062434fdfc351c9a4ec2d92b94c06f4"
- integrity sha1-pkz6ckBiQ0/fw1HJpOwtkrlMBvQ=
-
parseuri@0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
@@ -9916,11 +9346,6 @@ path-starts-with@^2.0.0:
resolved "https://registry.yarnpkg.com/path-starts-with/-/path-starts-with-2.0.0.tgz#ffd6d51926cd497022b44d392196033d5451892f"
integrity sha512-3UHTHbJz5+NLkPafFR+2ycJOjoc4WV2e9qCZCnm71zHiWaFrm1XniLVTkZXvaRgxr1xFh9JsTdicpH2yM03nLA==
-path-to-regexp@0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
- integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
-
path-type@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
@@ -10012,11 +9437,6 @@ pixelmatch@^4.0.2:
dependencies:
pngjs "^3.0.0"
-pjson@1.0.9:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/pjson/-/pjson-1.0.9.tgz#8a9520ce76a4739f8fee91679dad6b065b1c7938"
- integrity sha512-4hRJH3YzkUpOlShRzhyxAmThSNnAaIlWZCAb27hd0pVUAXNUAHAO7XZbsPPvsCYwBFEScTmCCL6DGE8NyZ8BdQ==
-
pkg-dir@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
@@ -10854,14 +10274,6 @@ proto-list@~1.2.1:
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
-proxy-addr@~2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
- integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
- dependencies:
- forwarded "~0.1.2"
- ipaddr.js "1.9.0"
-
proxy-middleware@^0.5.0:
version "0.5.1"
resolved "https://registry.yarnpkg.com/proxy-middleware/-/proxy-middleware-0.5.1.tgz#da24d5d58c1ddf13dad237c7eca503849eaea903"
@@ -10959,11 +10371,6 @@ qs@6.2.3:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe"
integrity sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=
-qs@6.7.0:
- version "6.7.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
- integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
-
qs@~2.2.3:
version "2.2.5"
resolved "https://registry.yarnpkg.com/qs/-/qs-2.2.5.tgz#1088abaf9dcc0ae5ae45b709e6c6b5888b23923c"
@@ -11030,16 +10437,6 @@ raw-body@1.3.0:
bytes "1"
iconv-lite "0.4.4"
-raw-body@2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
- integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
- dependencies:
- bytes "3.1.0"
- http-errors "1.7.2"
- iconv-lite "0.4.24"
- unpipe "1.0.0"
-
raw-body@^2.3.2:
version "2.4.1"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
@@ -11080,16 +10477,6 @@ rcloader@^0.1.4:
lodash "^3.0.1"
rcfinder "^0.1.6"
-rcloader@^0.2.1:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/rcloader/-/rcloader-0.2.2.tgz#58d2298b462d0b9bfd2133d2a1ec74fbd705c717"
- integrity sha1-WNIpi0YtC5v9ITPSoex0+9cFxxc=
- dependencies:
- lodash.assign "^4.2.0"
- lodash.isobject "^3.0.2"
- lodash.merge "^4.6.0"
- rcfinder "^0.1.6"
-
read-pkg-up@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
@@ -11232,11 +10619,6 @@ redent@^1.0.0:
indent-string "^2.1.0"
strip-indent "^1.0.1"
-reflect-metadata@0.1.12:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.12.tgz#311bf0c6b63cd782f228a81abe146a2bfa9c56f2"
- integrity sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==
-
regenerate-unicode-properties@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e"
@@ -11249,21 +10631,11 @@ regenerate@^1.4.0:
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
-regenerator-runtime@^0.10.0:
- version "0.10.5"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
- integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=
-
-regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1:
+regenerator-runtime@^0.11.0:
version "0.11.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
-regenerator-runtime@^0.12.0:
- version "0.12.1"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
- integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==
-
regenerator-runtime@^0.13.3:
version "0.13.3"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
@@ -11628,7 +11000,7 @@ rx-lite@^3.1.2:
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
integrity sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=
-rx@4.1.0, rx@^4.1.0:
+rx@4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=
@@ -11888,7 +11260,7 @@ serve-static@1.13.2:
parseurl "~1.3.2"
send "0.16.2"
-serve-static@1.14.1, serve-static@^1.3.0:
+serve-static@^1.3.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
@@ -12148,21 +11520,6 @@ source-map-resolve@^0.5.0:
source-map-url "^0.4.0"
urix "^0.1.0"
-source-map-support@0.5.4:
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.4.tgz#54456efa89caa9270af7cd624cc2f123e51fbae8"
- integrity sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==
- dependencies:
- source-map "^0.6.0"
-
-source-map-support@0.5.8:
- version "0.5.8"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.8.tgz#04f5581713a8a65612d0175fbf3a01f80a162613"
- integrity sha512-WqAEWPdb78u25RfKzOF0swBpY0dKrNdjc4GvLwm7ScX/o9bj8Eh/YL8mcMhBHYDGl87UkkSXDOFnW4G7GhWhGg==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
source-map-support@~0.5.12:
version "0.5.13"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
@@ -12200,13 +11557,6 @@ source-map@~0.1.38:
dependencies:
amdefine ">=0.0.4"
-source-map@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
- integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50=
- dependencies:
- amdefine ">=0.0.4"
-
sparkles@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c"
@@ -12238,13 +11588,6 @@ spdx-license-ids@^3.0.0:
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
-speed-measure-webpack-plugin@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz#69840a5cdc08b4638697dac7db037f595d7f36a0"
- integrity sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ==
- dependencies:
- chalk "^2.0.1"
-
split-on-first@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
@@ -12436,11 +11779,6 @@ string-replace-webpack-plugin@^0.1.3:
file-loader "^0.8.1"
style-loader "^0.8.3"
-string-template@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/string-template/-/string-template-1.0.0.tgz#9e9f2233dc00f218718ec379a28a5673ecca8b96"
- integrity sha1-np8iM9wA8hhxjsN5oopWc+zKi5Y=
-
string-width@^1.0.1, string-width@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
@@ -13149,21 +12487,6 @@ truncate-utf8-bytes@^1.0.0:
dependencies:
utf8-byte-length "^1.0.1"
-tryer@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
- integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
-
-tslib@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8"
- integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==
-
-tslib@1.9.3:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
- integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
-
tslib@^1.9.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
@@ -13206,14 +12529,6 @@ type-is@~1.5.1:
media-typer "0.3.0"
mime-types "~2.0.9"
-type-is@~1.6.17, type-is@~1.6.18:
- version "1.6.18"
- resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
- integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
- dependencies:
- media-typer "0.3.0"
- mime-types "~2.1.24"
-
type@^1.0.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
@@ -13538,26 +12853,11 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
-validator@10.4.0:
- version "10.4.0"
- resolved "https://registry.yarnpkg.com/validator/-/validator-10.4.0.tgz#ee99a44afb3bb5ed350a159f056ca72a204cfc3c"
- integrity sha512-Q/wBy3LB1uOyssgNlXSRmaf22NxjvDNZM2MtIQ4jaEOAB61xsh1TQxsq1CgzUMBV1lDrVMogIh8GjG1DYW0zLg==
-
-validator@9.2.0:
- version "9.2.0"
- resolved "https://registry.yarnpkg.com/validator/-/validator-9.2.0.tgz#ad216eed5f37cac31a6fe00ceab1f6b88bded03e"
- integrity sha512-6Ij4Eo0KM4LkR0d0IegOwluG5453uqT5QyF5SV5Ezvm8/zmkKI/L4eoraafZGlZPC9guLkwKzgypcw8VGWWnGA==
-
value-or-function@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813"
integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=
-vary@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
- integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
-
vendors@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0"
@@ -13728,25 +13028,6 @@ webidl-conversions@^4.0.2:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
-webpack-bundle-analyzer@^3.0.3:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.5.1.tgz#84aabb1547178d842ebb4ccc7324084b6c3b0ea9"
- integrity sha512-CDdaT3TTu4F9X3tcDq6PNJOiNGgREOM0WdN2vVAoUUn+M6NLB5kJ543HImCWbrDwOpbpGARSwU8r+u0Pl367kA==
- dependencies:
- acorn "^6.0.7"
- acorn-walk "^6.1.1"
- bfj "^6.1.1"
- chalk "^2.4.1"
- commander "^2.18.0"
- ejs "^2.6.1"
- express "^4.16.3"
- filesize "^3.6.1"
- gzip-size "^5.0.0"
- lodash "^4.17.15"
- mkdirp "^0.5.1"
- opener "^1.5.1"
- ws "^6.0.0"
-
webpack-cli@^3.1.0:
version "3.3.9"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.9.tgz#79c27e71f94b7fe324d594ab64a8e396b9daa91a"
@@ -13989,7 +13270,7 @@ write@^0.2.1:
dependencies:
mkdirp "^0.5.1"
-ws@^6.0.0, ws@^6.1.0:
+ws@^6.1.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
diff --git a/package.json b/package.json
index bca0eac3..1228ead9 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
"scripts": {
"dev": "cd gulp && yarn gulp main.serveDev",
"tslint": "cd src/js && tsc",
- "lint": "npx eslint src/js",
+ "lint": "eslint src/js",
"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",
"publishOnItchLinux": "butler push tmp_standalone_files/shapez.io-standalone-linux-x64 tobspr/shapezio:linux --userversion-file version",
@@ -34,6 +34,7 @@
"clipboard-copy": "^3.1.0",
"colors": "^1.3.3",
"core-js": "3",
+ "crc": "^3.8.0",
"cssnano-preset-advanced": "^4.0.7",
"email-validator": "^2.0.4",
"eslint": "7.1.0",
@@ -46,7 +47,6 @@
"lz-string": "^1.4.4",
"markdown-loader": "^4.0.0",
"match-all": "^1.2.5",
- "obfuscator-loader": "^1.1.2",
"phonegap-plugin-mobile-accessibility": "^1.0.5",
"promise-polyfill": "^8.1.0",
"query-string": "^6.8.1",
@@ -86,14 +86,12 @@
"imagemin-pngquant": "^8.0.0",
"jimp": "^0.6.1",
"js-yaml": "^3.13.1",
- "onesky-fetch": "^0.0.7",
"postcss-assets": "^5.0.0",
"postcss-preset-env": "^6.5.0",
"postcss-round-subpixels": "^1.2.0",
"postcss-unprefix": "^2.1.3",
"prettier": "^2.0.4",
"sass-unused": "^0.3.0",
- "speed-measure-webpack-plugin": "^1.3.1",
"strip-json-comments": "^3.0.1",
"trim": "^0.0.1",
"yarn": "^1.22.4"
diff --git a/res_built/atlas/atlas0_10.json b/res_built/atlas/atlas0_10.json
index 044fb143..58079d8b 100644
--- a/res_built/atlas/atlas0_10.json
+++ b/res_built/atlas/atlas0_10.json
@@ -2,7 +2,7 @@
"sprites/belt/forward_0.png":
{
- "frame": {"x":85,"y":167,"w":13,"h":13},
+ "frame": {"x":44,"y":376,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -10,7 +10,7 @@
},
"sprites/belt/forward_1.png":
{
- "frame": {"x":91,"y":258,"w":13,"h":13},
+ "frame": {"x":44,"y":393,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -18,7 +18,7 @@
},
"sprites/belt/forward_2.png":
{
- "frame": {"x":107,"y":332,"w":13,"h":13},
+ "frame": {"x":78,"y":404,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -26,7 +26,7 @@
},
"sprites/belt/forward_3.png":
{
- "frame": {"x":42,"y":434,"w":13,"h":13},
+ "frame": {"x":88,"y":238,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -34,7 +34,7 @@
},
"sprites/belt/forward_4.png":
{
- "frame": {"x":45,"y":467,"w":13,"h":13},
+ "frame": {"x":88,"y":255,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -42,7 +42,7 @@
},
"sprites/belt/forward_5.png":
{
- "frame": {"x":45,"y":484,"w":13,"h":13},
+ "frame": {"x":88,"y":272,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -50,7 +50,7 @@
},
"sprites/belt/forward_6.png":
{
- "frame": {"x":45,"y":501,"w":13,"h":13},
+ "frame": {"x":91,"y":289,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -58,7 +58,7 @@
},
"sprites/belt/forward_7.png":
{
- "frame": {"x":45,"y":518,"w":13,"h":13},
+ "frame": {"x":91,"y":306,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -66,7 +66,7 @@
},
"sprites/belt/forward_8.png":
{
- "frame": {"x":59,"y":399,"w":13,"h":13},
+ "frame": {"x":91,"y":323,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -74,7 +74,7 @@
},
"sprites/belt/forward_9.png":
{
- "frame": {"x":59,"y":416,"w":13,"h":13},
+ "frame": {"x":91,"y":340,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -82,7 +82,7 @@
},
"sprites/belt/forward_10.png":
{
- "frame": {"x":91,"y":275,"w":13,"h":13},
+ "frame": {"x":44,"y":410,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -90,7 +90,7 @@
},
"sprites/belt/forward_11.png":
{
- "frame": {"x":91,"y":292,"w":13,"h":13},
+ "frame": {"x":44,"y":427,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -98,7 +98,7 @@
},
"sprites/belt/forward_12.png":
{
- "frame": {"x":108,"y":264,"w":13,"h":13},
+ "frame": {"x":44,"y":444,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -106,7 +106,7 @@
},
"sprites/belt/forward_13.png":
{
- "frame": {"x":108,"y":281,"w":13,"h":13},
+ "frame": {"x":61,"y":376,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -114,7 +114,7 @@
},
"sprites/belt/forward_14.png":
{
- "frame": {"x":108,"y":298,"w":13,"h":13},
+ "frame": {"x":61,"y":393,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -122,7 +122,7 @@
},
"sprites/belt/forward_15.png":
{
- "frame": {"x":91,"y":309,"w":13,"h":13},
+ "frame": {"x":61,"y":410,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -130,7 +130,7 @@
},
"sprites/belt/forward_16.png":
{
- "frame": {"x":90,"y":326,"w":13,"h":13},
+ "frame": {"x":61,"y":427,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -138,7 +138,7 @@
},
"sprites/belt/forward_17.png":
{
- "frame": {"x":90,"y":343,"w":13,"h":13},
+ "frame": {"x":61,"y":444,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -146,7 +146,7 @@
},
"sprites/belt/forward_18.png":
{
- "frame": {"x":90,"y":360,"w":13,"h":13},
+ "frame": {"x":78,"y":370,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -154,7 +154,7 @@
},
"sprites/belt/forward_19.png":
{
- "frame": {"x":108,"y":315,"w":13,"h":13},
+ "frame": {"x":78,"y":387,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -162,7 +162,7 @@
},
"sprites/belt/forward_20.png":
{
- "frame": {"x":107,"y":349,"w":13,"h":13},
+ "frame": {"x":78,"y":421,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -170,7 +170,7 @@
},
"sprites/belt/forward_21.png":
{
- "frame": {"x":107,"y":366,"w":13,"h":13},
+ "frame": {"x":78,"y":438,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -178,7 +178,7 @@
},
"sprites/belt/forward_22.png":
{
- "frame": {"x":90,"y":377,"w":13,"h":13},
+ "frame": {"x":78,"y":455,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -186,7 +186,7 @@
},
"sprites/belt/forward_23.png":
{
- "frame": {"x":107,"y":383,"w":13,"h":13},
+ "frame": {"x":107,"y":68,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -194,7 +194,7 @@
},
"sprites/belt/forward_24.png":
{
- "frame": {"x":52,"y":382,"w":13,"h":13},
+ "frame": {"x":107,"y":85,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -202,7 +202,7 @@
},
"sprites/belt/forward_25.png":
{
- "frame": {"x":69,"y":380,"w":13,"h":13},
+ "frame": {"x":107,"y":102,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -210,7 +210,7 @@
},
"sprites/belt/forward_26.png":
{
- "frame": {"x":42,"y":400,"w":13,"h":13},
+ "frame": {"x":107,"y":119,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -218,7 +218,7 @@
},
"sprites/belt/forward_27.png":
{
- "frame": {"x":42,"y":417,"w":13,"h":13},
+ "frame": {"x":88,"y":221,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -226,7 +226,7 @@
},
"sprites/belt/left_0.png":
{
- "frame": {"x":59,"y":433,"w":13,"h":13},
+ "frame": {"x":95,"y":367,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -234,7 +234,7 @@
},
"sprites/belt/left_1.png":
{
- "frame": {"x":76,"y":397,"w":13,"h":13},
+ "frame": {"x":95,"y":384,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -242,7 +242,7 @@
},
"sprites/belt/left_2.png":
{
- "frame": {"x":59,"y":450,"w":13,"h":13},
+ "frame": {"x":112,"y":238,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -250,7 +250,7 @@
},
"sprites/belt/left_3.png":
{
- "frame": {"x":79,"y":512,"w":13,"h":13},
+ "frame": {"x":112,"y":391,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -258,7 +258,7 @@
},
"sprites/belt/left_4.png":
{
- "frame": {"x":96,"y":493,"w":13,"h":13},
+ "frame": {"x":112,"y":408,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -266,7 +266,7 @@
},
"sprites/belt/left_5.png":
{
- "frame": {"x":96,"y":510,"w":13,"h":13},
+ "frame": {"x":112,"y":425,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -274,7 +274,7 @@
},
"sprites/belt/left_6.png":
{
- "frame": {"x":79,"y":529,"w":13,"h":13},
+ "frame": {"x":112,"y":442,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -282,7 +282,7 @@
},
"sprites/belt/left_7.png":
{
- "frame": {"x":96,"y":527,"w":13,"h":13},
+ "frame": {"x":112,"y":459,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -290,7 +290,7 @@
},
"sprites/belt/left_8.png":
{
- "frame": {"x":96,"y":544,"w":13,"h":13},
+ "frame": {"x":95,"y":469,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -298,7 +298,7 @@
},
"sprites/belt/left_9.png":
{
- "frame": {"x":43,"y":628,"w":13,"h":13},
+ "frame": {"x":112,"y":476,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -306,7 +306,7 @@
},
"sprites/belt/left_10.png":
{
- "frame": {"x":76,"y":414,"w":13,"h":13},
+ "frame": {"x":95,"y":401,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -314,7 +314,7 @@
},
"sprites/belt/left_11.png":
{
- "frame": {"x":76,"y":431,"w":13,"h":13},
+ "frame": {"x":95,"y":418,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -322,7 +322,7 @@
},
"sprites/belt/left_12.png":
{
- "frame": {"x":93,"y":408,"w":13,"h":13},
+ "frame": {"x":95,"y":435,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -330,7 +330,7 @@
},
"sprites/belt/left_13.png":
{
- "frame": {"x":110,"y":400,"w":13,"h":13},
+ "frame": {"x":95,"y":452,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -338,7 +338,7 @@
},
"sprites/belt/left_14.png":
{
- "frame": {"x":110,"y":417,"w":13,"h":13},
+ "frame": {"x":112,"y":136,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -346,7 +346,7 @@
},
"sprites/belt/left_15.png":
{
- "frame": {"x":93,"y":425,"w":13,"h":13},
+ "frame": {"x":112,"y":153,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -354,7 +354,7 @@
},
"sprites/belt/left_16.png":
{
- "frame": {"x":110,"y":434,"w":13,"h":13},
+ "frame": {"x":112,"y":170,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -362,7 +362,7 @@
},
"sprites/belt/left_17.png":
{
- "frame": {"x":93,"y":442,"w":13,"h":13},
+ "frame": {"x":112,"y":187,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -370,7 +370,7 @@
},
"sprites/belt/left_18.png":
{
- "frame": {"x":110,"y":451,"w":13,"h":13},
+ "frame": {"x":112,"y":204,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -378,7 +378,7 @@
},
"sprites/belt/left_19.png":
{
- "frame": {"x":76,"y":448,"w":13,"h":13},
+ "frame": {"x":112,"y":221,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -386,7 +386,7 @@
},
"sprites/belt/left_20.png":
{
- "frame": {"x":93,"y":459,"w":13,"h":13},
+ "frame": {"x":112,"y":255,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -394,7 +394,7 @@
},
"sprites/belt/left_21.png":
{
- "frame": {"x":110,"y":468,"w":13,"h":13},
+ "frame": {"x":112,"y":272,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -402,7 +402,7 @@
},
"sprites/belt/left_22.png":
{
- "frame": {"x":62,"y":467,"w":13,"h":13},
+ "frame": {"x":112,"y":289,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -410,7 +410,7 @@
},
"sprites/belt/left_23.png":
{
- "frame": {"x":62,"y":484,"w":13,"h":13},
+ "frame": {"x":112,"y":306,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -418,7 +418,7 @@
},
"sprites/belt/left_24.png":
{
- "frame": {"x":62,"y":501,"w":13,"h":13},
+ "frame": {"x":112,"y":323,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -426,7 +426,7 @@
},
"sprites/belt/left_25.png":
{
- "frame": {"x":62,"y":518,"w":13,"h":13},
+ "frame": {"x":112,"y":340,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -434,7 +434,7 @@
},
"sprites/belt/left_26.png":
{
- "frame": {"x":79,"y":478,"w":13,"h":13},
+ "frame": {"x":112,"y":357,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -442,7 +442,7 @@
},
"sprites/belt/left_27.png":
{
- "frame": {"x":79,"y":495,"w":13,"h":13},
+ "frame": {"x":112,"y":374,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -450,7 +450,7 @@
},
"sprites/belt/right_0.png":
{
- "frame": {"x":43,"y":645,"w":13,"h":13},
+ "frame": {"x":84,"y":127,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -458,7 +458,7 @@
},
"sprites/belt/right_1.png":
{
- "frame": {"x":43,"y":662,"w":13,"h":13},
+ "frame": {"x":83,"y":144,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -466,7 +466,7 @@
},
"sprites/belt/right_2.png":
{
- "frame": {"x":61,"y":603,"w":13,"h":13},
+ "frame": {"x":60,"y":512,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -474,7 +474,7 @@
},
"sprites/belt/right_3.png":
{
- "frame": {"x":95,"y":612,"w":13,"h":13},
+ "frame": {"x":111,"y":493,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -482,7 +482,7 @@
},
"sprites/belt/right_4.png":
{
- "frame": {"x":61,"y":620,"w":13,"h":13},
+ "frame": {"x":111,"y":510,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -490,7 +490,7 @@
},
"sprites/belt/right_5.png":
{
- "frame": {"x":60,"y":637,"w":13,"h":13},
+ "frame": {"x":111,"y":527,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -498,7 +498,7 @@
},
"sprites/belt/right_6.png":
{
- "frame": {"x":60,"y":654,"w":13,"h":13},
+ "frame": {"x":94,"y":537,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -506,7 +506,7 @@
},
"sprites/belt/right_7.png":
{
- "frame": {"x":60,"y":671,"w":13,"h":13},
+ "frame": {"x":77,"y":540,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -514,7 +514,7 @@
},
"sprites/belt/right_8.png":
{
- "frame": {"x":78,"y":631,"w":13,"h":13},
+ "frame": {"x":60,"y":546,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -522,7 +522,7 @@
},
"sprites/belt/right_9.png":
{
- "frame": {"x":95,"y":629,"w":13,"h":13},
+ "frame": {"x":111,"y":544,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -530,7 +530,7 @@
},
"sprites/belt/right_10.png":
{
- "frame": {"x":43,"y":679,"w":13,"h":13},
+ "frame": {"x":91,"y":175,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -538,7 +538,7 @@
},
"sprites/belt/right_11.png":
{
- "frame": {"x":44,"y":536,"w":13,"h":13},
+ "frame": {"x":91,"y":192,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -546,7 +546,7 @@
},
"sprites/belt/right_12.png":
{
- "frame": {"x":44,"y":553,"w":13,"h":13},
+ "frame": {"x":43,"y":462,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -554,7 +554,7 @@
},
"sprites/belt/right_13.png":
{
- "frame": {"x":44,"y":570,"w":13,"h":13},
+ "frame": {"x":43,"y":479,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -562,7 +562,7 @@
},
"sprites/belt/right_14.png":
{
- "frame": {"x":44,"y":587,"w":13,"h":13},
+ "frame": {"x":43,"y":496,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -570,7 +570,7 @@
},
"sprites/belt/right_15.png":
{
- "frame": {"x":44,"y":604,"w":13,"h":13},
+ "frame": {"x":43,"y":513,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -578,7 +578,7 @@
},
"sprites/belt/right_16.png":
{
- "frame": {"x":61,"y":535,"w":13,"h":13},
+ "frame": {"x":43,"y":530,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -586,7 +586,7 @@
},
"sprites/belt/right_17.png":
{
- "frame": {"x":61,"y":552,"w":13,"h":13},
+ "frame": {"x":60,"y":461,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -594,7 +594,7 @@
},
"sprites/belt/right_18.png":
{
- "frame": {"x":61,"y":569,"w":13,"h":13},
+ "frame": {"x":60,"y":478,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -602,7 +602,7 @@
},
"sprites/belt/right_19.png":
{
- "frame": {"x":61,"y":586,"w":13,"h":13},
+ "frame": {"x":60,"y":495,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -610,7 +610,7 @@
},
"sprites/belt/right_20.png":
{
- "frame": {"x":78,"y":546,"w":13,"h":13},
+ "frame": {"x":60,"y":529,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -618,7 +618,7 @@
},
"sprites/belt/right_21.png":
{
- "frame": {"x":78,"y":563,"w":13,"h":13},
+ "frame": {"x":77,"y":472,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -626,7 +626,7 @@
},
"sprites/belt/right_22.png":
{
- "frame": {"x":78,"y":580,"w":13,"h":13},
+ "frame": {"x":77,"y":489,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -634,7 +634,7 @@
},
"sprites/belt/right_23.png":
{
- "frame": {"x":78,"y":597,"w":13,"h":13},
+ "frame": {"x":77,"y":506,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -642,7 +642,7 @@
},
"sprites/belt/right_24.png":
{
- "frame": {"x":95,"y":561,"w":13,"h":13},
+ "frame": {"x":77,"y":523,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -650,7 +650,7 @@
},
"sprites/belt/right_25.png":
{
- "frame": {"x":95,"y":578,"w":13,"h":13},
+ "frame": {"x":94,"y":486,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -658,7 +658,7 @@
},
"sprites/belt/right_26.png":
{
- "frame": {"x":95,"y":595,"w":13,"h":13},
+ "frame": {"x":94,"y":503,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -666,23 +666,15 @@
},
"sprites/belt/right_27.png":
{
- "frame": {"x":78,"y":614,"w":13,"h":13},
+ "frame": {"x":94,"y":520,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
"sourceSize": {"w":13,"h":13}
},
-"sprites/blueprints/advanced_processor.png":
-{
- "frame": {"x":82,"y":3,"w":38,"h":38},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":38,"h":38},
- "sourceSize": {"w":38,"h":38}
-},
"sprites/blueprints/belt_left.png":
{
- "frame": {"x":77,"y":648,"w":13,"h":13},
+ "frame": {"x":94,"y":554,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -690,7 +682,7 @@
},
"sprites/blueprints/belt_right.png":
{
- "frame": {"x":77,"y":665,"w":13,"h":13},
+ "frame": {"x":77,"y":557,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -698,7 +690,7 @@
},
"sprites/blueprints/belt_top.png":
{
- "frame": {"x":77,"y":682,"w":13,"h":13},
+ "frame": {"x":111,"y":561,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -714,23 +706,15 @@
},
"sprites/blueprints/cutter.png":
{
- "frame": {"x":3,"y":628,"w":36,"h":19},
+ "frame": {"x":3,"y":462,"w":36,"h":19},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":36,"h":19},
"sourceSize": {"w":38,"h":19}
},
-"sprites/blueprints/energy_generator.png":
-{
- "frame": {"x":3,"y":301,"w":37,"h":37},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":1,"y":1,"w":37,"h":37},
- "sourceSize": {"w":38,"h":38}
-},
"sprites/blueprints/miner-chainable.png":
{
- "frame": {"x":45,"y":198,"w":19,"h":19},
+ "frame": {"x":45,"y":175,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -738,7 +722,7 @@
},
"sprites/blueprints/miner.png":
{
- "frame": {"x":45,"y":221,"w":19,"h":19},
+ "frame": {"x":3,"y":554,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -746,7 +730,7 @@
},
"sprites/blueprints/mixer.png":
{
- "frame": {"x":3,"y":536,"w":37,"h":19},
+ "frame": {"x":3,"y":370,"w":37,"h":19},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":37,"h":19},
@@ -754,7 +738,7 @@
},
"sprites/blueprints/painter-double.png":
{
- "frame": {"x":3,"y":175,"w":38,"h":38},
+ "frame": {"x":82,"y":3,"w":38,"h":38},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":38,"h":38},
@@ -778,7 +762,7 @@
},
"sprites/blueprints/painter.png":
{
- "frame": {"x":3,"y":467,"w":38,"h":19},
+ "frame": {"x":3,"y":301,"w":38,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":38,"h":19},
@@ -786,7 +770,7 @@
},
"sprites/blueprints/rotater-ccw.png":
{
- "frame": {"x":45,"y":244,"w":19,"h":19},
+ "frame": {"x":45,"y":198,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -794,7 +778,7 @@
},
"sprites/blueprints/rotater-fl.png":
{
- "frame": {"x":45,"y":267,"w":19,"h":19},
+ "frame": {"x":42,"y":221,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -802,7 +786,7 @@
},
"sprites/blueprints/rotater.png":
{
- "frame": {"x":68,"y":198,"w":19,"h":19},
+ "frame": {"x":42,"y":244,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -810,7 +794,7 @@
},
"sprites/blueprints/splitter-compact-inverse.png":
{
- "frame": {"x":68,"y":221,"w":19,"h":19},
+ "frame": {"x":42,"y":267,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -818,7 +802,7 @@
},
"sprites/blueprints/splitter-compact.png":
{
- "frame": {"x":68,"y":244,"w":19,"h":19},
+ "frame": {"x":26,"y":554,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -826,7 +810,7 @@
},
"sprites/blueprints/splitter.png":
{
- "frame": {"x":3,"y":651,"w":36,"h":19},
+ "frame": {"x":3,"y":485,"w":36,"h":19},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":36,"h":19},
@@ -834,7 +818,7 @@
},
"sprites/blueprints/stacker.png":
{
- "frame": {"x":3,"y":559,"w":37,"h":19},
+ "frame": {"x":3,"y":393,"w":37,"h":19},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":37,"h":19},
@@ -842,7 +826,7 @@
},
"sprites/blueprints/trash-storage.png":
{
- "frame": {"x":3,"y":383,"w":35,"h":38},
+ "frame": {"x":3,"y":217,"w":35,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":35,"h":38},
@@ -850,7 +834,7 @@
},
"sprites/blueprints/trash.png":
{
- "frame": {"x":68,"y":267,"w":19,"h":19},
+ "frame": {"x":68,"y":175,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -858,7 +842,7 @@
},
"sprites/blueprints/underground_belt_entry-tier2.png":
{
- "frame": {"x":67,"y":336,"w":19,"h":18},
+ "frame": {"x":3,"y":577,"w":19,"h":18},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":1,"w":19,"h":18},
@@ -866,7 +850,7 @@
},
"sprites/blueprints/underground_belt_entry.png":
{
- "frame": {"x":84,"y":127,"w":19,"h":16},
+ "frame": {"x":45,"y":336,"w":19,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":3,"w":19,"h":16},
@@ -874,7 +858,7 @@
},
"sprites/blueprints/underground_belt_exit-tier2.png":
{
- "frame": {"x":83,"y":147,"w":19,"h":16},
+ "frame": {"x":68,"y":290,"w":19,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":16},
@@ -882,63 +866,15 @@
},
"sprites/blueprints/underground_belt_exit.png":
{
- "frame": {"x":102,"y":173,"w":19,"h":16},
+ "frame": {"x":68,"y":310,"w":19,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":16},
"sourceSize": {"w":19,"h":19}
},
-"sprites/blueprints/wire_crossings-merger.png":
-{
- "frame": {"x":84,"y":81,"w":14,"h":19},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":5,"y":0,"w":14,"h":19},
- "sourceSize": {"w":19,"h":19}
-},
-"sprites/blueprints/wire_crossings.png":
-{
- "frame": {"x":107,"y":104,"w":14,"h":19},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":5,"y":0,"w":14,"h":19},
- "sourceSize": {"w":19,"h":19}
-},
-"sprites/blueprints/wire_left.png":
-{
- "frame": {"x":79,"y":465,"w":10,"h":9},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":4,"w":10,"h":9},
- "sourceSize": {"w":13,"h":13}
-},
-"sprites/blueprints/wire_right.png":
-{
- "frame": {"x":114,"y":225,"w":9,"h":9},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":4,"y":4,"w":9,"h":9},
- "sourceSize": {"w":13,"h":13}
-},
-"sprites/blueprints/wire_top.png":
-{
- "frame": {"x":42,"y":383,"w":6,"h":13},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":4,"y":0,"w":6,"h":13},
- "sourceSize": {"w":13,"h":13}
-},
-"sprites/buildings/advanced_processor.png":
-{
- "frame": {"x":3,"y":217,"w":38,"h":38},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":38,"h":38},
- "sourceSize": {"w":38,"h":38}
-},
"sprites/buildings/belt_left.png":
{
- "frame": {"x":95,"y":646,"w":13,"h":13},
+ "frame": {"x":94,"y":571,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -946,7 +882,7 @@
},
"sprites/buildings/belt_right.png":
{
- "frame": {"x":94,"y":663,"w":13,"h":13},
+ "frame": {"x":111,"y":578,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -954,7 +890,7 @@
},
"sprites/buildings/belt_top.png":
{
- "frame": {"x":85,"y":167,"w":13,"h":13},
+ "frame": {"x":44,"y":376,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -970,20 +906,12 @@
},
"sprites/buildings/cutter.png":
{
- "frame": {"x":3,"y":674,"w":36,"h":19},
+ "frame": {"x":3,"y":508,"w":36,"h":19},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":36,"h":19},
"sourceSize": {"w":38,"h":19}
},
-"sprites/buildings/energy_generator.png":
-{
- "frame": {"x":3,"y":342,"w":37,"h":37},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":1,"y":1,"w":37,"h":37},
- "sourceSize": {"w":38,"h":38}
-},
"sprites/buildings/hub.png":
{
"frame": {"x":3,"y":3,"w":75,"h":76},
@@ -994,7 +922,7 @@
},
"sprites/buildings/miner-chainable.png":
{
- "frame": {"x":104,"y":68,"w":19,"h":19},
+ "frame": {"x":68,"y":198,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -1002,7 +930,7 @@
},
"sprites/buildings/miner.png":
{
- "frame": {"x":84,"y":104,"w":19,"h":19},
+ "frame": {"x":65,"y":221,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -1010,7 +938,7 @@
},
"sprites/buildings/mixer.png":
{
- "frame": {"x":3,"y":582,"w":37,"h":19},
+ "frame": {"x":3,"y":416,"w":37,"h":19},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":37,"h":19},
@@ -1018,7 +946,7 @@
},
"sprites/buildings/painter-double.png":
{
- "frame": {"x":3,"y":259,"w":38,"h":38},
+ "frame": {"x":3,"y":175,"w":38,"h":38},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":38,"h":38},
@@ -1026,7 +954,7 @@
},
"sprites/buildings/painter-mirrored.png":
{
- "frame": {"x":3,"y":490,"w":38,"h":19},
+ "frame": {"x":3,"y":324,"w":38,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":38,"h":19},
@@ -1042,7 +970,7 @@
},
"sprites/buildings/painter.png":
{
- "frame": {"x":3,"y":513,"w":38,"h":19},
+ "frame": {"x":3,"y":347,"w":38,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":38,"h":19},
@@ -1050,7 +978,7 @@
},
"sprites/buildings/rotater-ccw.png":
{
- "frame": {"x":45,"y":290,"w":19,"h":19},
+ "frame": {"x":65,"y":244,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -1058,7 +986,7 @@
},
"sprites/buildings/rotater-fl.png":
{
- "frame": {"x":68,"y":290,"w":19,"h":19},
+ "frame": {"x":65,"y":267,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -1066,7 +994,7 @@
},
"sprites/buildings/rotater.png":
{
- "frame": {"x":44,"y":313,"w":19,"h":19},
+ "frame": {"x":84,"y":81,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -1074,7 +1002,7 @@
},
"sprites/buildings/splitter-compact-inverse.png":
{
- "frame": {"x":44,"y":336,"w":19,"h":19},
+ "frame": {"x":84,"y":104,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -1082,7 +1010,7 @@
},
"sprites/buildings/splitter-compact.png":
{
- "frame": {"x":67,"y":313,"w":19,"h":19},
+ "frame": {"x":45,"y":290,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -1090,7 +1018,7 @@
},
"sprites/buildings/splitter.png":
{
- "frame": {"x":45,"y":175,"w":36,"h":19},
+ "frame": {"x":3,"y":531,"w":36,"h":19},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":36,"h":19},
@@ -1098,7 +1026,7 @@
},
"sprites/buildings/stacker.png":
{
- "frame": {"x":3,"y":605,"w":37,"h":19},
+ "frame": {"x":3,"y":439,"w":37,"h":19},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":37,"h":19},
@@ -1106,7 +1034,7 @@
},
"sprites/buildings/trash-storage.png":
{
- "frame": {"x":3,"y":425,"w":35,"h":38},
+ "frame": {"x":3,"y":259,"w":35,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":35,"h":38},
@@ -1114,7 +1042,7 @@
},
"sprites/buildings/trash.png":
{
- "frame": {"x":44,"y":359,"w":19,"h":19},
+ "frame": {"x":45,"y":313,"w":19,"h":19},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":19},
@@ -1122,7 +1050,7 @@
},
"sprites/buildings/underground_belt_entry-tier2.png":
{
- "frame": {"x":67,"y":358,"w":19,"h":18},
+ "frame": {"x":26,"y":577,"w":19,"h":18},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":1,"w":19,"h":18},
@@ -1130,7 +1058,7 @@
},
"sprites/buildings/underground_belt_entry.png":
{
- "frame": {"x":91,"y":198,"w":19,"h":16},
+ "frame": {"x":68,"y":330,"w":19,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":3,"w":19,"h":16},
@@ -1138,7 +1066,7 @@
},
"sprites/buildings/underground_belt_exit-tier2.png":
{
- "frame": {"x":91,"y":218,"w":19,"h":16},
+ "frame": {"x":45,"y":356,"w":19,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":16},
@@ -1146,55 +1074,15 @@
},
"sprites/buildings/underground_belt_exit.png":
{
- "frame": {"x":91,"y":238,"w":19,"h":16},
+ "frame": {"x":68,"y":350,"w":19,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":19,"h":16},
"sourceSize": {"w":19,"h":19}
},
-"sprites/buildings/wire_crossings-merger.png":
-{
- "frame": {"x":107,"y":127,"w":14,"h":19},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":5,"y":0,"w":14,"h":19},
- "sourceSize": {"w":19,"h":19}
-},
-"sprites/buildings/wire_crossings.png":
-{
- "frame": {"x":106,"y":150,"w":14,"h":19},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":5,"y":0,"w":14,"h":19},
- "sourceSize": {"w":19,"h":19}
-},
-"sprites/buildings/wire_left.png":
-{
- "frame": {"x":114,"y":238,"w":9,"h":9},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":4,"w":9,"h":9},
- "sourceSize": {"w":13,"h":13}
-},
-"sprites/buildings/wire_right.png":
-{
- "frame": {"x":114,"y":251,"w":9,"h":9},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":4,"y":4,"w":9,"h":9},
- "sourceSize": {"w":13,"h":13}
-},
-"sprites/buildings/wire_top.png":
-{
- "frame": {"x":96,"y":476,"w":5,"h":13},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":4,"y":0,"w":5,"h":13},
- "sourceSize": {"w":13,"h":13}
-},
"sprites/debug/acceptor_slot.png":
{
- "frame": {"x":112,"y":577,"w":6,"h":6},
+ "frame": {"x":91,"y":357,"w":6,"h":6},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":6,"h":6},
@@ -1202,7 +1090,7 @@
},
"sprites/debug/ejector_slot.png":
{
- "frame": {"x":112,"y":587,"w":6,"h":6},
+ "frame": {"x":101,"y":357,"w":6,"h":6},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":6,"h":6},
@@ -1210,7 +1098,7 @@
},
"sprites/map_overview/belt_forward.png":
{
- "frame": {"x":44,"y":621,"w":3,"h":3},
+ "frame": {"x":43,"y":547,"w":3,"h":3},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":3,"h":3},
@@ -1218,7 +1106,7 @@
},
"sprites/map_overview/belt_left.png":
{
- "frame": {"x":51,"y":621,"w":3,"h":3},
+ "frame": {"x":91,"y":209,"w":3,"h":3},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":3,"h":3},
@@ -1226,7 +1114,7 @@
},
"sprites/map_overview/belt_right.png":
{
- "frame": {"x":70,"y":688,"w":3,"h":3},
+ "frame": {"x":66,"y":563,"w":3,"h":3},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":3,"h":3},
@@ -1234,39 +1122,23 @@
},
"sprites/misc/deletion_marker.png":
{
- "frame": {"x":85,"y":184,"w":10,"h":10},
+ "frame": {"x":83,"y":161,"w":10,"h":10},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":10,"h":10},
"sourceSize": {"w":10,"h":10}
},
-"sprites/misc/energy_generator_overlay.png":
-{
- "frame": {"x":82,"y":68,"w":18,"h":9},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":17,"y":27,"w":18,"h":9},
- "sourceSize": {"w":38,"h":38}
-},
"sprites/misc/hub_direction_indicator.png":
{
- "frame": {"x":111,"y":666,"w":3,"h":3},
+ "frame": {"x":49,"y":580,"w":3,"h":3},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":3,"h":3},
"sourceSize": {"w":3,"h":3}
},
-"sprites/misc/lock_direction_indicator.png":
-{
- "frame": {"x":112,"y":657,"w":5,"h":5},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":5,"h":5},
- "sourceSize": {"w":5,"h":5}
-},
"sprites/misc/slot_bad_arrow.png":
{
- "frame": {"x":85,"y":184,"w":10,"h":10},
+ "frame": {"x":83,"y":161,"w":10,"h":10},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":10,"h":10},
@@ -1274,7 +1146,7 @@
},
"sprites/misc/slot_good_arrow.png":
{
- "frame": {"x":93,"y":394,"w":10,"h":10},
+ "frame": {"x":97,"y":161,"w":10,"h":10},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":10,"h":10},
@@ -1282,7 +1154,7 @@
},
"sprites/misc/storage_overlay.png":
{
- "frame": {"x":102,"y":91,"w":18,"h":9},
+ "frame": {"x":82,"y":68,"w":18,"h":9},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":18,"h":9},
@@ -1290,7 +1162,7 @@
},
"sprites/misc/waypoint.png":
{
- "frame": {"x":111,"y":673,"w":3,"h":3},
+ "frame": {"x":50,"y":547,"w":3,"h":3},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":3,"h":3},
@@ -1298,107 +1170,19 @@
},
"sprites/misc/wires_overlay_tile.png":
{
- "frame": {"x":94,"y":680,"w":13,"h":13},
+ "frame": {"x":49,"y":563,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
"sourceSize": {"w":13,"h":13}
-},
-"sprites/wires/battery_empty.png":
-{
- "frame": {"x":112,"y":597,"w":6,"h":6},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6},
- "sourceSize": {"w":6,"h":6}
-},
-"sprites/wires/battery_full.png":
-{
- "frame": {"x":112,"y":607,"w":6,"h":6},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6},
- "sourceSize": {"w":6,"h":6}
-},
-"sprites/wires/battery_low.png":
-{
- "frame": {"x":112,"y":617,"w":6,"h":6},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6},
- "sourceSize": {"w":6,"h":6}
-},
-"sprites/wires/battery_medium.png":
-{
- "frame": {"x":112,"y":627,"w":6,"h":6},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6},
- "sourceSize": {"w":6,"h":6}
-},
-"sprites/wires/negative_energy.png":
-{
- "frame": {"x":112,"y":637,"w":6,"h":6},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6},
- "sourceSize": {"w":6,"h":6}
-},
-"sprites/wires/pin_negative_accept.png":
-{
- "frame": {"x":42,"y":451,"w":11,"h":12},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":1,"y":0,"w":11,"h":12},
- "sourceSize": {"w":13,"h":13}
-},
-"sprites/wires/pin_negative_eject.png":
-{
- "frame": {"x":114,"y":193,"w":9,"h":12},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":2,"y":0,"w":9,"h":12},
- "sourceSize": {"w":13,"h":13}
-},
-"sprites/wires/pin_positive_accept.png":
-{
- "frame": {"x":114,"y":209,"w":9,"h":12},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":2,"y":0,"w":9,"h":12},
- "sourceSize": {"w":13,"h":13}
-},
-"sprites/wires/pin_positive_eject.png":
-{
- "frame": {"x":112,"y":561,"w":11,"h":12},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":1,"y":0,"w":11,"h":12},
- "sourceSize": {"w":13,"h":13}
-},
-"sprites/wires/positive_energy.png":
-{
- "frame": {"x":112,"y":647,"w":6,"h":6},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6},
- "sourceSize": {"w":6,"h":6}
-},
-"sprites/wires/waste_piled.png":
-{
- "frame": {"x":60,"y":688,"w":6,"h":6},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6},
- "sourceSize": {"w":6,"h":6}
}},
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "1.0",
"image": "atlas0_10.png",
"format": "RGBA8888",
- "size": {"w":126,"h":698},
+ "size": {"w":128,"h":598},
"scale": "0.1",
- "smartupdate": "$TexturePacker:SmartUpdate:dfc84e4381978113df4ad0cd8a5aace9:4e9bd6f6c82aaaa8a4a583cab68dc719:f159918d23e5952766c6d23ab52278c6$"
+ "smartupdate": "$TexturePacker:SmartUpdate:a7ec474d30eba3dcfb9e1ce36dc9a3df:a66fdbb2f105a54e9a5193362b6c2d4d:f159918d23e5952766c6d23ab52278c6$"
}
}
diff --git a/res_built/atlas/atlas0_10.png b/res_built/atlas/atlas0_10.png
index 2fdd0720..7921ae6f 100644
Binary files a/res_built/atlas/atlas0_10.png and b/res_built/atlas/atlas0_10.png differ
diff --git a/res_built/atlas/atlas0_100.json b/res_built/atlas/atlas0_100.json
index b5980771..4020c412 100644
--- a/res_built/atlas/atlas0_100.json
+++ b/res_built/atlas/atlas0_100.json
@@ -2,7 +2,7 @@
"sprites/belt/forward_0.png":
{
- "frame": {"x":1515,"y":1539,"w":100,"h":126},
+ "frame": {"x":858,"y":1175,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -10,7 +10,7 @@
},
"sprites/belt/forward_1.png":
{
- "frame": {"x":1436,"y":1712,"w":100,"h":126},
+ "frame": {"x":1037,"y":1325,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -18,7 +18,7 @@
},
"sprites/belt/forward_2.png":
{
- "frame": {"x":1671,"y":969,"w":100,"h":126},
+ "frame": {"x":906,"y":1703,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -26,7 +26,7 @@
},
"sprites/belt/forward_3.png":
{
- "frame": {"x":1644,"y":1627,"w":100,"h":126},
+ "frame": {"x":1778,"y":1303,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -34,7 +34,7 @@
},
"sprites/belt/forward_4.png":
{
- "frame": {"x":1644,"y":1757,"w":100,"h":126},
+ "frame": {"x":1781,"y":1433,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -42,7 +42,7 @@
},
"sprites/belt/forward_5.png":
{
- "frame": {"x":1748,"y":1619,"w":100,"h":126},
+ "frame": {"x":1127,"y":1715,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -50,7 +50,7 @@
},
"sprites/belt/forward_6.png":
{
- "frame": {"x":1748,"y":1749,"w":100,"h":126},
+ "frame": {"x":1231,"y":1707,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -58,7 +58,7 @@
},
"sprites/belt/forward_7.png":
{
- "frame": {"x":1775,"y":1205,"w":100,"h":126},
+ "frame": {"x":1137,"y":2079,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -66,7 +66,7 @@
},
"sprites/belt/forward_8.png":
{
- "frame": {"x":1879,"y":1205,"w":100,"h":126},
+ "frame": {"x":1137,"y":2209,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -74,7 +74,7 @@
},
"sprites/belt/forward_9.png":
{
- "frame": {"x":1827,"y":1335,"w":100,"h":126},
+ "frame": {"x":1256,"y":1954,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -82,7 +82,7 @@
},
"sprites/belt/forward_10.png":
{
- "frame": {"x":1194,"y":1863,"w":100,"h":126},
+ "frame": {"x":1258,"y":1343,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -90,7 +90,7 @@
},
"sprites/belt/forward_11.png":
{
- "frame": {"x":1540,"y":1669,"w":100,"h":126},
+ "frame": {"x":1362,"y":1325,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -98,7 +98,7 @@
},
"sprites/belt/forward_12.png":
{
- "frame": {"x":1332,"y":1842,"w":100,"h":126},
+ "frame": {"x":1466,"y":1325,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -106,7 +106,7 @@
},
"sprites/belt/forward_13.png":
{
- "frame": {"x":1436,"y":1842,"w":100,"h":126},
+ "frame": {"x":1570,"y":1325,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -114,7 +114,7 @@
},
"sprites/belt/forward_14.png":
{
- "frame": {"x":1540,"y":1799,"w":100,"h":126},
+ "frame": {"x":1821,"y":1173,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -122,7 +122,7 @@
},
"sprites/belt/forward_15.png":
{
- "frame": {"x":2532,"y":589,"w":100,"h":126},
+ "frame": {"x":923,"y":1443,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -130,7 +130,7 @@
},
"sprites/belt/forward_16.png":
{
- "frame": {"x":2533,"y":719,"w":100,"h":126},
+ "frame": {"x":923,"y":1573,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -138,7 +138,7 @@
},
"sprites/belt/forward_17.png":
{
- "frame": {"x":2533,"y":849,"w":100,"h":126},
+ "frame": {"x":1027,"y":1455,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -146,7 +146,7 @@
},
"sprites/belt/forward_18.png":
{
- "frame": {"x":1463,"y":978,"w":100,"h":126},
+ "frame": {"x":1027,"y":1585,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -154,7 +154,7 @@
},
"sprites/belt/forward_19.png":
{
- "frame": {"x":1567,"y":977,"w":100,"h":126},
+ "frame": {"x":1131,"y":1577,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -162,7 +162,7 @@
},
"sprites/belt/forward_20.png":
{
- "frame": {"x":1567,"y":1107,"w":100,"h":126},
+ "frame": {"x":1365,"y":1455,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -170,7 +170,7 @@
},
"sprites/belt/forward_21.png":
{
- "frame": {"x":1671,"y":1099,"w":100,"h":126},
+ "frame": {"x":1469,"y":1455,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -178,7 +178,7 @@
},
"sprites/belt/forward_22.png":
{
- "frame": {"x":1567,"y":1237,"w":100,"h":126},
+ "frame": {"x":1573,"y":1455,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -186,7 +186,7 @@
},
"sprites/belt/forward_23.png":
{
- "frame": {"x":1671,"y":1229,"w":100,"h":126},
+ "frame": {"x":384,"y":2276,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -194,7 +194,7 @@
},
"sprites/belt/forward_24.png":
{
- "frame": {"x":1619,"y":1367,"w":100,"h":126},
+ "frame": {"x":488,"y":2248,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -202,7 +202,7 @@
},
"sprites/belt/forward_25.png":
{
- "frame": {"x":1619,"y":1497,"w":100,"h":126},
+ "frame": {"x":1023,"y":1832,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -210,7 +210,7 @@
},
"sprites/belt/forward_26.png":
{
- "frame": {"x":1723,"y":1359,"w":100,"h":126},
+ "frame": {"x":1674,"y":1325,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -218,7 +218,7 @@
},
"sprites/belt/forward_27.png":
{
- "frame": {"x":1723,"y":1489,"w":100,"h":126},
+ "frame": {"x":1677,"y":1455,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -226,7 +226,7 @@
},
"sprites/belt/left_0.png":
{
- "frame": {"x":1077,"y":1920,"w":113,"h":113},
+ "frame": {"x":1857,"y":395,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -234,7 +234,7 @@
},
"sprites/belt/left_1.png":
{
- "frame": {"x":1842,"y":971,"w":113,"h":113},
+ "frame": {"x":1857,"y":512,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -242,7 +242,7 @@
},
"sprites/belt/left_2.png":
{
- "frame": {"x":1959,"y":971,"w":113,"h":113},
+ "frame": {"x":1020,"y":2079,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -250,7 +250,7 @@
},
"sprites/belt/left_3.png":
{
- "frame": {"x":2310,"y":976,"w":113,"h":113},
+ "frame": {"x":1241,"y":2201,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -258,7 +258,7 @@
},
"sprites/belt/left_4.png":
{
- "frame": {"x":2334,"y":1210,"w":113,"h":113},
+ "frame": {"x":1136,"y":2339,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -266,7 +266,7 @@
},
"sprites/belt/left_5.png":
{
- "frame": {"x":2393,"y":1093,"w":113,"h":113},
+ "frame": {"x":1253,"y":2318,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -274,7 +274,7 @@
},
"sprites/belt/left_6.png":
{
- "frame": {"x":2451,"y":1210,"w":113,"h":113},
+ "frame": {"x":1335,"y":1707,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -282,7 +282,7 @@
},
"sprites/belt/left_7.png":
{
- "frame": {"x":2048,"y":1327,"w":113,"h":113},
+ "frame": {"x":1352,"y":1590,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -290,7 +290,7 @@
},
"sprites/belt/left_8.png":
{
- "frame": {"x":2165,"y":1327,"w":113,"h":113},
+ "frame": {"x":1469,"y":1585,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -298,7 +298,7 @@
},
"sprites/belt/left_9.png":
{
- "frame": {"x":2282,"y":1327,"w":113,"h":113},
+ "frame": {"x":1586,"y":1585,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -306,7 +306,7 @@
},
"sprites/belt/left_10.png":
{
- "frame": {"x":1842,"y":1088,"w":113,"h":113},
+ "frame": {"x":1141,"y":1343,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -314,7 +314,7 @@
},
"sprites/belt/left_11.png":
{
- "frame": {"x":1827,"y":1465,"w":113,"h":113},
+ "frame": {"x":1131,"y":1460,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -322,7 +322,7 @@
},
"sprites/belt/left_12.png":
{
- "frame": {"x":1852,"y":1582,"w":113,"h":113},
+ "frame": {"x":1010,"y":1715,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -330,7 +330,7 @@
},
"sprites/belt/left_13.png":
{
- "frame": {"x":1852,"y":1699,"w":113,"h":113},
+ "frame": {"x":1248,"y":1473,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -338,7 +338,7 @@
},
"sprites/belt/left_14.png":
{
- "frame": {"x":1852,"y":1816,"w":113,"h":113},
+ "frame": {"x":1235,"y":1590,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -346,7 +346,7 @@
},
"sprites/belt/left_15.png":
{
- "frame": {"x":1931,"y":1335,"w":113,"h":113},
+ "frame": {"x":592,"y":2248,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -354,7 +354,7 @@
},
"sprites/belt/left_16.png":
{
- "frame": {"x":1944,"y":1452,"w":113,"h":113},
+ "frame": {"x":906,"y":1833,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -362,7 +362,7 @@
},
"sprites/belt/left_17.png":
{
- "frame": {"x":1969,"y":1569,"w":113,"h":113},
+ "frame": {"x":905,"y":1950,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -370,7 +370,7 @@
},
"sprites/belt/left_18.png":
{
- "frame": {"x":1969,"y":1686,"w":113,"h":113},
+ "frame": {"x":903,"y":2067,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -378,7 +378,7 @@
},
"sprites/belt/left_19.png":
{
- "frame": {"x":1969,"y":1803,"w":113,"h":113},
+ "frame": {"x":1022,"y":1962,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -386,7 +386,7 @@
},
"sprites/belt/left_20.png":
{
- "frame": {"x":1959,"y":1088,"w":113,"h":113},
+ "frame": {"x":903,"y":2184,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -394,7 +394,7 @@
},
"sprites/belt/left_21.png":
{
- "frame": {"x":1983,"y":1205,"w":113,"h":113},
+ "frame": {"x":1020,"y":2196,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -402,7 +402,7 @@
},
"sprites/belt/left_22.png":
{
- "frame": {"x":2076,"y":976,"w":113,"h":113},
+ "frame": {"x":902,"y":2301,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -410,7 +410,7 @@
},
"sprites/belt/left_23.png":
{
- "frame": {"x":2193,"y":976,"w":113,"h":113},
+ "frame": {"x":1019,"y":2313,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -418,7 +418,7 @@
},
"sprites/belt/left_24.png":
{
- "frame": {"x":2159,"y":1093,"w":113,"h":113},
+ "frame": {"x":1127,"y":1845,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -426,7 +426,7 @@
},
"sprites/belt/left_25.png":
{
- "frame": {"x":2100,"y":1210,"w":113,"h":113},
+ "frame": {"x":1139,"y":1962,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -434,7 +434,7 @@
},
"sprites/belt/left_26.png":
{
- "frame": {"x":2217,"y":1210,"w":113,"h":113},
+ "frame": {"x":1244,"y":1837,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -442,7 +442,7 @@
},
"sprites/belt/left_27.png":
{
- "frame": {"x":2276,"y":1093,"w":113,"h":113},
+ "frame": {"x":1241,"y":2084,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -450,7 +450,7 @@
},
"sprites/belt/right_0.png":
{
- "frame": {"x":2399,"y":1327,"w":113,"h":113},
+ "frame": {"x":1361,"y":1824,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -458,7 +458,7 @@
},
"sprites/belt/right_1.png":
{
- "frame": {"x":2061,"y":1444,"w":113,"h":113},
+ "frame": {"x":1703,"y":1585,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -466,7 +466,7 @@
},
"sprites/belt/right_2.png":
{
- "frame": {"x":2320,"y":1678,"w":113,"h":113},
+ "frame": {"x":1478,"y":1941,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -474,7 +474,7 @@
},
"sprites/belt/right_3.png":
{
- "frame": {"x":2554,"y":1795,"w":113,"h":113},
+ "frame": {"x":1487,"y":2292,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -482,7 +482,7 @@
},
"sprites/belt/right_4.png":
{
- "frame": {"x":2510,"y":979,"w":113,"h":113},
+ "frame": {"x":1592,"y":2175,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -490,7 +490,7 @@
},
"sprites/belt/right_5.png":
{
- "frame": {"x":1644,"y":1887,"w":113,"h":113},
+ "frame": {"x":1594,"y":2058,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -498,7 +498,7 @@
},
"sprites/belt/right_6.png":
{
- "frame": {"x":1969,"y":1920,"w":113,"h":113},
+ "frame": {"x":1711,"y":2053,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -506,7 +506,7 @@
},
"sprites/belt/right_7.png":
{
- "frame": {"x":2086,"y":1912,"w":113,"h":113},
+ "frame": {"x":1828,"y":2053,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -514,7 +514,7 @@
},
"sprites/belt/right_8.png":
{
- "frame": {"x":2203,"y":1912,"w":113,"h":113},
+ "frame": {"x":1604,"y":2292,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -522,7 +522,7 @@
},
"sprites/belt/right_9.png":
{
- "frame": {"x":2320,"y":1912,"w":113,"h":113},
+ "frame": {"x":1709,"y":2175,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -530,7 +530,7 @@
},
"sprites/belt/right_10.png":
{
- "frame": {"x":2178,"y":1444,"w":113,"h":113},
+ "frame": {"x":1452,"y":1707,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -538,7 +538,7 @@
},
"sprites/belt/right_11.png":
{
- "frame": {"x":2295,"y":1444,"w":113,"h":113},
+ "frame": {"x":1569,"y":1702,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -546,7 +546,7 @@
},
"sprites/belt/right_12.png":
{
- "frame": {"x":2086,"y":1561,"w":113,"h":113},
+ "frame": {"x":1686,"y":1702,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -554,7 +554,7 @@
},
"sprites/belt/right_13.png":
{
- "frame": {"x":2086,"y":1678,"w":113,"h":113},
+ "frame": {"x":1478,"y":1824,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -562,7 +562,7 @@
},
"sprites/belt/right_14.png":
{
- "frame": {"x":2203,"y":1561,"w":113,"h":113},
+ "frame": {"x":1595,"y":1819,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -570,7 +570,7 @@
},
"sprites/belt/right_15.png":
{
- "frame": {"x":2086,"y":1795,"w":113,"h":113},
+ "frame": {"x":1712,"y":1819,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -578,7 +578,7 @@
},
"sprites/belt/right_16.png":
{
- "frame": {"x":2203,"y":1678,"w":113,"h":113},
+ "frame": {"x":1820,"y":1563,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -586,7 +586,7 @@
},
"sprites/belt/right_17.png":
{
- "frame": {"x":2203,"y":1795,"w":113,"h":113},
+ "frame": {"x":1803,"y":1702,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -594,7 +594,7 @@
},
"sprites/belt/right_18.png":
{
- "frame": {"x":2412,"y":1444,"w":113,"h":113},
+ "frame": {"x":1829,"y":1819,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -602,7 +602,7 @@
},
"sprites/belt/right_19.png":
{
- "frame": {"x":2320,"y":1561,"w":113,"h":113},
+ "frame": {"x":1361,"y":1941,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -610,7 +610,7 @@
},
"sprites/belt/right_20.png":
{
- "frame": {"x":2320,"y":1795,"w":113,"h":113},
+ "frame": {"x":1595,"y":1936,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -618,7 +618,7 @@
},
"sprites/belt/right_21.png":
{
- "frame": {"x":2437,"y":1561,"w":113,"h":113},
+ "frame": {"x":1712,"y":1936,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -626,7 +626,7 @@
},
"sprites/belt/right_22.png":
{
- "frame": {"x":2437,"y":1678,"w":113,"h":113},
+ "frame": {"x":1829,"y":1936,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -634,7 +634,7 @@
},
"sprites/belt/right_23.png":
{
- "frame": {"x":2437,"y":1795,"w":113,"h":113},
+ "frame": {"x":1360,"y":2058,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -642,7 +642,7 @@
},
"sprites/belt/right_24.png":
{
- "frame": {"x":2516,"y":1327,"w":113,"h":113},
+ "frame": {"x":1477,"y":2058,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -650,7 +650,7 @@
},
"sprites/belt/right_25.png":
{
- "frame": {"x":2529,"y":1444,"w":113,"h":113},
+ "frame": {"x":1358,"y":2175,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -658,7 +658,7 @@
},
"sprites/belt/right_26.png":
{
- "frame": {"x":2554,"y":1561,"w":113,"h":113},
+ "frame": {"x":1475,"y":2175,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -666,23 +666,15 @@
},
"sprites/belt/right_27.png":
{
- "frame": {"x":2554,"y":1678,"w":113,"h":113},
+ "frame": {"x":1370,"y":2292,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
"sourceSize": {"w":126,"h":126}
},
-"sprites/blueprints/advanced_processor.png":
-{
- "frame": {"x":3,"y":1316,"w":374,"h":358},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":10,"y":12,"w":374,"h":358},
- "sourceSize": {"w":384,"h":384}
-},
"sprites/blueprints/belt_left.png":
{
- "frame": {"x":2607,"y":3,"w":114,"h":114},
+ "frame": {"x":1703,"y":1173,"w":114,"h":114},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":12,"w":114,"h":114},
@@ -690,7 +682,7 @@
},
"sprites/blueprints/belt_right.png":
{
- "frame": {"x":959,"y":1920,"w":114,"h":114},
+ "frame": {"x":919,"y":1325,"w":114,"h":114},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":12,"y":12,"w":114,"h":114},
@@ -698,7 +690,7 @@
},
"sprites/blueprints/belt_top.png":
{
- "frame": {"x":1330,"y":1712,"w":102,"h":126},
+ "frame": {"x":1825,"y":629,"w":102,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":12,"y":0,"w":102,"h":126},
@@ -706,7 +698,7 @@
},
"sprites/blueprints/cutter-quad.png":
{
- "frame": {"x":1485,"y":3,"w":730,"h":191},
+ "frame": {"x":735,"y":395,"w":730,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":23,"y":0,"w":730,"h":191},
@@ -714,23 +706,15 @@
},
"sprites/blueprints/cutter.png":
{
- "frame": {"x":1485,"y":198,"w":341,"h":191},
+ "frame": {"x":391,"y":1319,"w":341,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":23,"y":0,"w":341,"h":191},
"sourceSize": {"w":384,"h":192}
},
-"sprites/blueprints/energy_generator.png":
-{
- "frame": {"x":381,"y":1319,"w":348,"h":364},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":20,"y":20,"w":348,"h":364},
- "sourceSize": {"w":384,"h":384}
-},
"sprites/blueprints/miner-chainable.png":
{
- "frame": {"x":2163,"y":588,"w":182,"h":190},
+ "frame": {"x":1697,"y":979,"w":182,"h":190},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":182,"h":190},
@@ -738,7 +722,7 @@
},
"sprites/blueprints/miner.png":
{
- "frame": {"x":2128,"y":782,"w":182,"h":190},
+ "frame": {"x":1770,"y":785,"w":182,"h":190},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":182,"h":190},
@@ -746,7 +730,7 @@
},
"sprites/blueprints/mixer.png":
{
- "frame": {"x":1123,"y":783,"w":347,"h":191},
+ "frame": {"x":1123,"y":590,"w":347,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":18,"y":0,"w":347,"h":191},
@@ -754,7 +738,7 @@
},
"sprites/blueprints/painter-double.png":
{
- "frame": {"x":735,"y":395,"w":384,"h":382},
+ "frame": {"x":3,"y":931,"w":384,"h":382},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":384,"h":382},
@@ -762,7 +746,7 @@
},
"sprites/blueprints/painter-mirrored.png":
{
- "frame": {"x":2219,"y":3,"w":384,"h":192},
+ "frame": {"x":1485,"y":3,"w":384,"h":192},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":384,"h":192},
@@ -778,7 +762,7 @@
},
"sprites/blueprints/painter.png":
{
- "frame": {"x":380,"y":1687,"w":384,"h":192},
+ "frame": {"x":1483,"y":199,"w":384,"h":192},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":384,"h":192},
@@ -786,7 +770,7 @@
},
"sprites/blueprints/rotater-ccw.png":
{
- "frame": {"x":2218,"y":393,"w":189,"h":191},
+ "frame": {"x":1118,"y":979,"w":189,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":189,"h":191},
@@ -794,7 +778,7 @@
},
"sprites/blueprints/rotater-fl.png":
{
- "frame": {"x":1458,"y":587,"w":189,"h":191},
+ "frame": {"x":1311,"y":979,"w":189,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":189,"h":191},
@@ -802,7 +786,7 @@
},
"sprites/blueprints/rotater.png":
{
- "frame": {"x":1474,"y":782,"w":189,"h":191},
+ "frame": {"x":1504,"y":979,"w":189,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":189,"h":191},
@@ -810,7 +794,7 @@
},
"sprites/blueprints/splitter-compact-inverse.png":
{
- "frame": {"x":1783,"y":589,"w":188,"h":182},
+ "frame": {"x":3,"y":2285,"w":188,"h":182},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":188,"h":182},
@@ -818,7 +802,7 @@
},
"sprites/blueprints/splitter-compact.png":
{
- "frame": {"x":2547,"y":393,"w":185,"h":182},
+ "frame": {"x":195,"y":2285,"w":185,"h":182},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":4,"w":185,"h":182},
@@ -826,7 +810,7 @@
},
"sprites/blueprints/splitter.png":
{
- "frame": {"x":1830,"y":198,"w":340,"h":191},
+ "frame": {"x":3,"y":2090,"w":340,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":23,"y":0,"w":340,"h":191},
@@ -834,7 +818,7 @@
},
"sprites/blueprints/stacker.png":
{
- "frame": {"x":1112,"y":978,"w":347,"h":191},
+ "frame": {"x":1474,"y":590,"w":347,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":18,"y":0,"w":347,"h":191},
@@ -842,7 +826,7 @@
},
"sprites/blueprints/trash-storage.png":
{
- "frame": {"x":1123,"y":395,"w":331,"h":384},
+ "frame": {"x":391,"y":931,"w":331,"h":384},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":29,"y":0,"w":331,"h":384},
@@ -850,7 +834,7 @@
},
"sprites/blueprints/trash.png":
{
- "frame": {"x":1826,"y":393,"w":192,"h":192},
+ "frame": {"x":726,"y":979,"w":192,"h":192},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":192},
@@ -858,7 +842,7 @@
},
"sprites/blueprints/underground_belt_entry-tier2.png":
{
- "frame": {"x":1432,"y":1369,"w":183,"h":166},
+ "frame": {"x":718,"y":1892,"w":183,"h":166},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":26,"w":183,"h":166},
@@ -866,7 +850,7 @@
},
"sprites/blueprints/underground_belt_entry.png":
{
- "frame": {"x":569,"y":1883,"w":182,"h":148},
+ "frame": {"x":717,"y":2062,"w":182,"h":148},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":44,"w":182,"h":148},
@@ -874,7 +858,7 @@
},
"sprites/blueprints/underground_belt_exit-tier2.png":
{
- "frame": {"x":380,"y":1883,"w":185,"h":148},
+ "frame": {"x":527,"y":2096,"w":185,"h":148},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":185,"h":148},
@@ -882,63 +866,15 @@
},
"sprites/blueprints/underground_belt_exit.png":
{
- "frame": {"x":959,"y":1768,"w":182,"h":148},
+ "frame": {"x":716,"y":2214,"w":182,"h":148},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":182,"h":148},
"sourceSize": {"w":192,"h":192}
},
-"sprites/blueprints/wire_crossings-merger.png":
-{
- "frame": {"x":2411,"y":393,"w":132,"h":192},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":60,"y":0,"w":132,"h":192},
- "sourceSize": {"w":192,"h":192}
-},
-"sprites/blueprints/wire_crossings.png":
-{
- "frame": {"x":1857,"y":775,"w":132,"h":192},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":60,"y":0,"w":132,"h":192},
- "sourceSize": {"w":192,"h":192}
-},
-"sprites/blueprints/wire_left.png":
-{
- "frame": {"x":2427,"y":974,"w":79,"h":79},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":47,"w":79,"h":79},
- "sourceSize": {"w":126,"h":126}
-},
-"sprites/blueprints/wire_right.png":
-{
- "frame": {"x":2076,"y":1093,"w":79,"h":80},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":47,"y":46,"w":79,"h":80},
- "sourceSize": {"w":126,"h":126}
-},
-"sprites/blueprints/wire_top.png":
-{
- "frame": {"x":2497,"y":782,"w":32,"h":126},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":47,"y":0,"w":32,"h":126},
- "sourceSize": {"w":126,"h":126}
-},
-"sprites/buildings/advanced_processor.png":
-{
- "frame": {"x":3,"y":1678,"w":373,"h":356},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":11,"y":13,"w":373,"h":356},
- "sourceSize": {"w":384,"h":384}
-},
"sprites/buildings/belt_left.png":
{
- "frame": {"x":2437,"y":1912,"w":113,"h":113},
+ "frame": {"x":1826,"y":2170,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":13,"w":113,"h":113},
@@ -946,7 +882,7 @@
},
"sprites/buildings/belt_right.png":
{
- "frame": {"x":2554,"y":1912,"w":113,"h":113},
+ "frame": {"x":1721,"y":2292,"w":113,"h":113},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":13,"w":113,"h":113},
@@ -954,7 +890,7 @@
},
"sprites/buildings/belt_top.png":
{
- "frame": {"x":1515,"y":1539,"w":100,"h":126},
+ "frame": {"x":858,"y":1175,"w":100,"h":126},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":100,"h":126},
@@ -970,20 +906,12 @@
},
"sprites/buildings/cutter.png":
{
- "frame": {"x":2174,"y":199,"w":339,"h":190},
+ "frame": {"x":1084,"y":785,"w":339,"h":190},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":24,"y":0,"w":339,"h":190},
"sourceSize": {"w":384,"h":192}
},
-"sprites/buildings/energy_generator.png":
-{
- "frame": {"x":733,"y":1171,"w":346,"h":363},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":21,"y":21,"w":346,"h":363},
- "sourceSize": {"w":384,"h":384}
-},
"sprites/buildings/hub.png":
{
"frame": {"x":3,"y":3,"w":728,"h":730},
@@ -994,7 +922,7 @@
},
"sprites/buildings/miner-chainable.png":
{
- "frame": {"x":2314,"y":782,"w":179,"h":188},
+ "frame": {"x":740,"y":1500,"w":179,"h":188},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":1,"w":179,"h":188},
@@ -1002,7 +930,7 @@
},
"sprites/buildings/miner.png":
{
- "frame": {"x":2349,"y":589,"w":179,"h":189},
+ "frame": {"x":736,"y":1307,"w":179,"h":189},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":0,"w":179,"h":189},
@@ -1010,7 +938,7 @@
},
"sprites/buildings/mixer.png":
{
- "frame": {"x":1083,"y":1173,"w":345,"h":190},
+ "frame": {"x":391,"y":1514,"w":345,"h":190},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":19,"y":0,"w":345,"h":190},
@@ -1018,7 +946,7 @@
},
"sprites/buildings/painter-double.png":
{
- "frame": {"x":3,"y":931,"w":384,"h":381},
+ "frame": {"x":3,"y":1317,"w":384,"h":381},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":384,"h":381},
@@ -1026,7 +954,7 @@
},
"sprites/buildings/painter-mirrored.png":
{
- "frame": {"x":735,"y":781,"w":384,"h":191},
+ "frame": {"x":735,"y":590,"w":384,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":384,"h":191},
@@ -1042,7 +970,7 @@
},
"sprites/buildings/painter.png":
{
- "frame": {"x":724,"y":976,"w":384,"h":191},
+ "frame": {"x":1469,"y":395,"w":384,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":384,"h":191},
@@ -1050,7 +978,7 @@
},
"sprites/buildings/rotater-ccw.png":
{
- "frame": {"x":2517,"y":199,"w":187,"h":190},
+ "frame": {"x":336,"y":1708,"w":187,"h":190},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":187,"h":190},
@@ -1058,7 +986,7 @@
},
"sprites/buildings/rotater-fl.png":
{
- "frame": {"x":1667,"y":775,"w":186,"h":190},
+ "frame": {"x":527,"y":1902,"w":186,"h":190},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":186,"h":190},
@@ -1066,7 +994,7 @@
},
"sprites/buildings/rotater.png":
{
- "frame": {"x":768,"y":1628,"w":187,"h":190},
+ "frame": {"x":527,"y":1708,"w":187,"h":190},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":187,"h":190},
@@ -1074,7 +1002,7 @@
},
"sprites/buildings/splitter-compact-inverse.png":
{
- "frame": {"x":768,"y":1822,"w":187,"h":180},
+ "frame": {"x":336,"y":1902,"w":187,"h":180},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":5,"w":187,"h":180},
@@ -1082,7 +1010,7 @@
},
"sprites/buildings/splitter-compact.png":
{
- "frame": {"x":1975,"y":589,"w":184,"h":180},
+ "frame": {"x":718,"y":1708,"w":184,"h":180},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":5,"w":184,"h":180},
@@ -1090,7 +1018,7 @@
},
"sprites/buildings/splitter.png":
{
- "frame": {"x":1483,"y":393,"w":339,"h":190},
+ "frame": {"x":1427,"y":785,"w":339,"h":190},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":24,"y":0,"w":339,"h":190},
@@ -1098,7 +1026,7 @@
},
"sprites/buildings/stacker.png":
{
- "frame": {"x":1083,"y":1367,"w":345,"h":190},
+ "frame": {"x":735,"y":785,"w":345,"h":190},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":19,"y":0,"w":345,"h":190},
@@ -1106,7 +1034,7 @@
},
"sprites/buildings/trash-storage.png":
{
- "frame": {"x":391,"y":931,"w":329,"h":384},
+ "frame": {"x":3,"y":1702,"w":329,"h":384},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":30,"y":0,"w":329,"h":384},
@@ -1114,7 +1042,7 @@
},
"sprites/buildings/trash.png":
{
- "frame": {"x":2022,"y":393,"w":192,"h":191},
+ "frame": {"x":922,"y":979,"w":192,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":1,"w":192,"h":191},
@@ -1122,7 +1050,7 @@
},
"sprites/buildings/underground_belt_entry-tier2.png":
{
- "frame": {"x":959,"y":1599,"w":181,"h":165},
+ "frame": {"x":1148,"y":1174,"w":181,"h":165},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":27,"w":181,"h":165},
@@ -1130,7 +1058,7 @@
},
"sprites/buildings/underground_belt_entry.png":
{
- "frame": {"x":1145,"y":1712,"w":181,"h":147},
+ "frame": {"x":1333,"y":1174,"w":181,"h":147},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":45,"w":181,"h":147},
@@ -1138,7 +1066,7 @@
},
"sprites/buildings/underground_belt_exit-tier2.png":
{
- "frame": {"x":1144,"y":1561,"w":182,"h":147},
+ "frame": {"x":962,"y":1174,"w":182,"h":147},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":0,"w":182,"h":147},
@@ -1146,55 +1074,15 @@
},
"sprites/buildings/underground_belt_exit.png":
{
- "frame": {"x":1330,"y":1561,"w":181,"h":147},
+ "frame": {"x":1518,"y":1174,"w":181,"h":147},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":0,"w":181,"h":147},
"sourceSize": {"w":192,"h":192}
},
-"sprites/buildings/wire_crossings-merger.png":
-{
- "frame": {"x":1993,"y":773,"w":131,"h":192},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":61,"y":0,"w":131,"h":192},
- "sourceSize": {"w":192,"h":192}
-},
-"sprites/buildings/wire_crossings.png":
-{
- "frame": {"x":1432,"y":1173,"w":131,"h":192},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":61,"y":0,"w":131,"h":192},
- "sourceSize": {"w":192,"h":192}
-},
-"sprites/buildings/wire_left.png":
-{
- "frame": {"x":2510,"y":1096,"w":78,"h":78},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":48,"w":78,"h":78},
- "sourceSize": {"w":126,"h":126}
-},
-"sprites/buildings/wire_right.png":
-{
- "frame": {"x":2627,"y":983,"w":78,"h":78},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":48,"y":48,"w":78,"h":78},
- "sourceSize": {"w":126,"h":126}
-},
-"sprites/buildings/wire_top.png":
-{
- "frame": {"x":1298,"y":1863,"w":30,"h":126},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":48,"y":0,"w":30,"h":126},
- "sourceSize": {"w":126,"h":126}
-},
"sprites/debug/acceptor_slot.png":
{
- "frame": {"x":2607,"y":121,"w":50,"h":64},
+ "frame": {"x":1920,"y":1680,"w":50,"h":64},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":0,"w":50,"h":64},
@@ -1202,7 +1090,7 @@
},
"sprites/debug/ejector_slot.png":
{
- "frame": {"x":2661,"y":121,"w":50,"h":64},
+ "frame": {"x":1920,"y":1748,"w":50,"h":64},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":0,"w":50,"h":64},
@@ -1210,7 +1098,7 @@
},
"sprites/map_overview/belt_forward.png":
{
- "frame": {"x":2427,"y":1057,"w":24,"h":32},
+ "frame": {"x":1946,"y":1816,"w":24,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":24,"h":32},
@@ -1218,7 +1106,7 @@
},
"sprites/map_overview/belt_left.png":
{
- "frame": {"x":2510,"y":1178,"w":28,"h":28},
+ "frame": {"x":1825,"y":590,"w":28,"h":28},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":28,"h":28},
@@ -1226,7 +1114,7 @@
},
"sprites/map_overview/belt_right.png":
{
- "frame": {"x":2542,"y":1178,"w":28,"h":28},
+ "frame": {"x":1883,"y":979,"w":28,"h":28},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":28,"h":28},
@@ -1234,39 +1122,23 @@
},
"sprites/misc/deletion_marker.png":
{
- "frame": {"x":2637,"y":897,"w":82,"h":82},
+ "frame": {"x":1873,"y":3,"w":82,"h":82},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":7,"w":82,"h":82},
"sourceSize": {"w":96,"h":96}
},
-"sprites/misc/energy_generator_overlay.png":
-{
- "frame": {"x":913,"y":1538,"w":153,"h":57},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":183,"y":290,"w":153,"h":57},
- "sourceSize": {"w":384,"h":384}
-},
"sprites/misc/hub_direction_indicator.png":
{
- "frame": {"x":2497,"y":912,"w":32,"h":32},
+ "frame": {"x":1931,"y":629,"w":32,"h":32},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":32,"h":32},
"sourceSize": {"w":32,"h":32}
},
-"sprites/misc/lock_direction_indicator.png":
-{
- "frame": {"x":1256,"y":1993,"w":48,"h":30},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":9,"w":48,"h":30},
- "sourceSize": {"w":48,"h":48}
-},
"sprites/misc/slot_bad_arrow.png":
{
- "frame": {"x":2637,"y":897,"w":82,"h":82},
+ "frame": {"x":1873,"y":3,"w":82,"h":82},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":7,"w":82,"h":82},
@@ -1274,7 +1146,7 @@
},
"sprites/misc/slot_good_arrow.png":
{
- "frame": {"x":2637,"y":797,"w":80,"h":96},
+ "frame": {"x":347,"y":2176,"w":80,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":0,"w":80,"h":96},
@@ -1282,7 +1154,7 @@
},
"sprites/misc/storage_overlay.png":
{
- "frame": {"x":733,"y":1538,"w":176,"h":86},
+ "frame": {"x":347,"y":2086,"w":176,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":4,"w":176,"h":86},
@@ -1290,7 +1162,7 @@
},
"sprites/misc/waypoint.png":
{
- "frame": {"x":2455,"y":1057,"w":24,"h":32},
+ "frame": {"x":1946,"y":1852,"w":24,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":24,"h":32},
@@ -1298,107 +1170,19 @@
},
"sprites/misc/wires_overlay_tile.png":
{
- "frame": {"x":1651,"y":587,"w":128,"h":128},
+ "frame": {"x":726,"y":1175,"w":128,"h":128},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128},
"sourceSize": {"w":128,"h":128}
-},
-"sprites/wires/battery_empty.png":
-{
- "frame": {"x":1525,"y":1108,"w":38,"h":60},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":13,"y":2,"w":38,"h":60},
- "sourceSize": {"w":64,"h":64}
-},
-"sprites/wires/battery_full.png":
-{
- "frame": {"x":1651,"y":719,"w":58,"h":38},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":3,"y":14,"w":58,"h":38},
- "sourceSize": {"w":64,"h":64}
-},
-"sprites/wires/battery_low.png":
-{
- "frame": {"x":1194,"y":1993,"w":58,"h":38},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":3,"y":14,"w":58,"h":38},
- "sourceSize": {"w":64,"h":64}
-},
-"sprites/wires/battery_medium.png":
-{
- "frame": {"x":1540,"y":1929,"w":58,"h":38},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":3,"y":14,"w":58,"h":38},
- "sourceSize": {"w":64,"h":64}
-},
-"sprites/wires/negative_energy.png":
-{
- "frame": {"x":1145,"y":1863,"w":42,"h":42},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":11,"y":11,"w":42,"h":42},
- "sourceSize": {"w":64,"h":64}
-},
-"sprites/wires/pin_negative_accept.png":
-{
- "frame": {"x":2636,"y":579,"w":73,"h":105},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":27,"y":0,"w":73,"h":105},
- "sourceSize": {"w":128,"h":128}
-},
-"sprites/wires/pin_negative_eject.png":
-{
- "frame": {"x":1775,"y":969,"w":63,"h":100},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":32,"y":0,"w":63,"h":100},
- "sourceSize": {"w":128,"h":128}
-},
-"sprites/wires/pin_positive_accept.png":
-{
- "frame": {"x":1775,"y":1073,"w":63,"h":100},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":32,"y":0,"w":63,"h":100},
- "sourceSize": {"w":128,"h":128}
-},
-"sprites/wires/pin_positive_eject.png":
-{
- "frame": {"x":2637,"y":688,"w":73,"h":105},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":27,"y":0,"w":73,"h":105},
- "sourceSize": {"w":128,"h":128}
-},
-"sprites/wires/positive_energy.png":
-{
- "frame": {"x":1713,"y":719,"w":42,"h":42},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":11,"y":11,"w":42,"h":42},
- "sourceSize": {"w":64,"h":64}
-},
-"sprites/wires/waste_piled.png":
-{
- "frame": {"x":1463,"y":1108,"w":58,"h":55},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":3,"y":4,"w":58,"h":55},
- "sourceSize": {"w":64,"h":64}
}},
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "1.0",
"image": "atlas0_100.png",
"format": "RGBA8888",
- "size": {"w":2735,"h":2037},
+ "size": {"w":1973,"h":2470},
"scale": "1",
- "smartupdate": "$TexturePacker:SmartUpdate:dfc84e4381978113df4ad0cd8a5aace9:4e9bd6f6c82aaaa8a4a583cab68dc719:f159918d23e5952766c6d23ab52278c6$"
+ "smartupdate": "$TexturePacker:SmartUpdate:a7ec474d30eba3dcfb9e1ce36dc9a3df:a66fdbb2f105a54e9a5193362b6c2d4d:f159918d23e5952766c6d23ab52278c6$"
}
}
diff --git a/res_built/atlas/atlas0_100.png b/res_built/atlas/atlas0_100.png
index a072216d..70e746aa 100644
Binary files a/res_built/atlas/atlas0_100.png and b/res_built/atlas/atlas0_100.png differ
diff --git a/res_built/atlas/atlas0_25.json b/res_built/atlas/atlas0_25.json
index dee62306..c314a229 100644
--- a/res_built/atlas/atlas0_25.json
+++ b/res_built/atlas/atlas0_25.json
@@ -2,7 +2,7 @@
"sprites/belt/forward_0.png":
{
- "frame": {"x":452,"y":459,"w":28,"h":32},
+ "frame": {"x":141,"y":452,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -10,7 +10,7 @@
},
"sprites/belt/forward_1.png":
{
- "frame": {"x":452,"y":495,"w":28,"h":32},
+ "frame": {"x":402,"y":245,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -18,7 +18,7 @@
},
"sprites/belt/forward_2.png":
{
- "frame": {"x":246,"y":697,"w":28,"h":32},
+ "frame": {"x":298,"y":337,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -26,7 +26,7 @@
},
"sprites/belt/forward_3.png":
{
- "frame": {"x":382,"y":624,"w":28,"h":32},
+ "frame": {"x":394,"y":315,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -34,7 +34,7 @@
},
"sprites/belt/forward_4.png":
{
- "frame": {"x":350,"y":628,"w":28,"h":32},
+ "frame": {"x":394,"y":351,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -42,7 +42,7 @@
},
"sprites/belt/forward_5.png":
{
- "frame": {"x":318,"y":640,"w":28,"h":32},
+ "frame": {"x":426,"y":315,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -50,7 +50,7 @@
},
"sprites/belt/forward_6.png":
{
- "frame": {"x":382,"y":660,"w":28,"h":32},
+ "frame": {"x":394,"y":387,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -58,7 +58,7 @@
},
"sprites/belt/forward_7.png":
{
- "frame": {"x":350,"y":664,"w":28,"h":32},
+ "frame": {"x":426,"y":351,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -66,7 +66,7 @@
},
"sprites/belt/forward_8.png":
{
- "frame": {"x":346,"y":802,"w":28,"h":32},
+ "frame": {"x":458,"y":315,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -74,7 +74,7 @@
},
"sprites/belt/forward_9.png":
{
- "frame": {"x":378,"y":802,"w":28,"h":32},
+ "frame": {"x":426,"y":387,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -82,7 +82,7 @@
},
"sprites/belt/forward_10.png":
{
- "frame": {"x":148,"y":723,"w":28,"h":32},
+ "frame": {"x":434,"y":245,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -90,7 +90,7 @@
},
"sprites/belt/forward_11.png":
{
- "frame": {"x":148,"y":759,"w":28,"h":32},
+ "frame": {"x":466,"y":245,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -98,7 +98,7 @@
},
"sprites/belt/forward_12.png":
{
- "frame": {"x":148,"y":795,"w":28,"h":32},
+ "frame": {"x":498,"y":245,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -106,7 +106,7 @@
},
"sprites/belt/forward_13.png":
{
- "frame": {"x":218,"y":536,"w":28,"h":32},
+ "frame": {"x":530,"y":245,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -114,7 +114,7 @@
},
"sprites/belt/forward_14.png":
{
- "frame": {"x":180,"y":712,"w":28,"h":32},
+ "frame": {"x":562,"y":245,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -122,7 +122,7 @@
},
"sprites/belt/forward_15.png":
{
- "frame": {"x":180,"y":748,"w":28,"h":32},
+ "frame": {"x":594,"y":245,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -130,7 +130,7 @@
},
"sprites/belt/forward_16.png":
{
- "frame": {"x":180,"y":784,"w":28,"h":32},
+ "frame": {"x":626,"y":245,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -138,7 +138,7 @@
},
"sprites/belt/forward_17.png":
{
- "frame": {"x":218,"y":572,"w":28,"h":32},
+ "frame": {"x":658,"y":245,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -146,7 +146,7 @@
},
"sprites/belt/forward_18.png":
{
- "frame": {"x":246,"y":625,"w":28,"h":32},
+ "frame": {"x":690,"y":245,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -154,7 +154,7 @@
},
"sprites/belt/forward_19.png":
{
- "frame": {"x":246,"y":661,"w":28,"h":32},
+ "frame": {"x":298,"y":301,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -162,7 +162,7 @@
},
"sprites/belt/forward_20.png":
{
- "frame": {"x":246,"y":733,"w":28,"h":32},
+ "frame": {"x":298,"y":373,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -170,7 +170,7 @@
},
"sprites/belt/forward_21.png":
{
- "frame": {"x":246,"y":769,"w":28,"h":32},
+ "frame": {"x":298,"y":409,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -178,7 +178,7 @@
},
"sprites/belt/forward_22.png":
{
- "frame": {"x":318,"y":568,"w":28,"h":32},
+ "frame": {"x":330,"y":329,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -186,7 +186,7 @@
},
"sprites/belt/forward_23.png":
{
- "frame": {"x":350,"y":556,"w":28,"h":32},
+ "frame": {"x":330,"y":365,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -194,7 +194,7 @@
},
"sprites/belt/forward_24.png":
{
- "frame": {"x":382,"y":552,"w":28,"h":32},
+ "frame": {"x":330,"y":401,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -202,7 +202,7 @@
},
"sprites/belt/forward_25.png":
{
- "frame": {"x":318,"y":604,"w":28,"h":32},
+ "frame": {"x":362,"y":329,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -210,7 +210,7 @@
},
"sprites/belt/forward_26.png":
{
- "frame": {"x":350,"y":592,"w":28,"h":32},
+ "frame": {"x":362,"y":365,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -218,7 +218,7 @@
},
"sprites/belt/forward_27.png":
{
- "frame": {"x":382,"y":588,"w":28,"h":32},
+ "frame": {"x":362,"y":401,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -226,7 +226,7 @@
},
"sprites/belt/left_0.png":
{
- "frame": {"x":452,"y":531,"w":30,"h":30},
+ "frame": {"x":247,"y":456,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -234,7 +234,7 @@
},
"sprites/belt/left_1.png":
{
- "frame": {"x":343,"y":522,"w":30,"h":30},
+ "frame": {"x":281,"y":456,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -242,7 +242,7 @@
},
"sprites/belt/left_2.png":
{
- "frame": {"x":178,"y":610,"w":30,"h":30},
+ "frame": {"x":436,"y":281,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -250,7 +250,7 @@
},
"sprites/belt/left_3.png":
{
- "frame": {"x":212,"y":744,"w":30,"h":30},
+ "frame": {"x":490,"y":315,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -258,7 +258,7 @@
},
"sprites/belt/left_4.png":
{
- "frame": {"x":212,"y":778,"w":30,"h":30},
+ "frame": {"x":524,"y":315,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -266,7 +266,7 @@
},
"sprites/belt/left_5.png":
{
- "frame": {"x":284,"y":543,"w":30,"h":30},
+ "frame": {"x":558,"y":315,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -274,7 +274,7 @@
},
"sprites/belt/left_6.png":
{
- "frame": {"x":250,"y":591,"w":30,"h":30},
+ "frame": {"x":592,"y":315,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -282,7 +282,7 @@
},
"sprites/belt/left_7.png":
{
- "frame": {"x":284,"y":577,"w":30,"h":30},
+ "frame": {"x":490,"y":349,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -290,7 +290,7 @@
},
"sprites/belt/left_8.png":
{
- "frame": {"x":414,"y":545,"w":30,"h":30},
+ "frame": {"x":626,"y":315,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -298,7 +298,7 @@
},
"sprites/belt/left_9.png":
{
- "frame": {"x":284,"y":611,"w":30,"h":30},
+ "frame": {"x":524,"y":349,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -306,7 +306,7 @@
},
"sprites/belt/left_10.png":
{
- "frame": {"x":150,"y":485,"w":30,"h":30},
+ "frame": {"x":402,"y":211,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -314,7 +314,7 @@
},
"sprites/belt/left_11.png":
{
- "frame": {"x":150,"y":519,"w":30,"h":30},
+ "frame": {"x":436,"y":211,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -322,7 +322,7 @@
},
"sprites/belt/left_12.png":
{
- "frame": {"x":144,"y":553,"w":30,"h":30},
+ "frame": {"x":470,"y":211,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -330,7 +330,7 @@
},
"sprites/belt/left_13.png":
{
- "frame": {"x":144,"y":587,"w":30,"h":30},
+ "frame": {"x":504,"y":211,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -338,7 +338,7 @@
},
"sprites/belt/left_14.png":
{
- "frame": {"x":144,"y":621,"w":30,"h":30},
+ "frame": {"x":538,"y":211,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -346,7 +346,7 @@
},
"sprites/belt/left_15.png":
{
- "frame": {"x":144,"y":655,"w":30,"h":30},
+ "frame": {"x":572,"y":211,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -354,7 +354,7 @@
},
"sprites/belt/left_16.png":
{
- "frame": {"x":144,"y":689,"w":30,"h":30},
+ "frame": {"x":606,"y":211,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -362,7 +362,7 @@
},
"sprites/belt/left_17.png":
{
- "frame": {"x":184,"y":508,"w":30,"h":30},
+ "frame": {"x":640,"y":211,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -370,7 +370,7 @@
},
"sprites/belt/left_18.png":
{
- "frame": {"x":184,"y":542,"w":30,"h":30},
+ "frame": {"x":674,"y":211,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -378,7 +378,7 @@
},
"sprites/belt/left_19.png":
{
- "frame": {"x":178,"y":576,"w":30,"h":30},
+ "frame": {"x":402,"y":281,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -386,7 +386,7 @@
},
"sprites/belt/left_20.png":
{
- "frame": {"x":178,"y":644,"w":30,"h":30},
+ "frame": {"x":470,"y":281,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -394,7 +394,7 @@
},
"sprites/belt/left_21.png":
{
- "frame": {"x":178,"y":678,"w":30,"h":30},
+ "frame": {"x":504,"y":281,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -402,7 +402,7 @@
},
"sprites/belt/left_22.png":
{
- "frame": {"x":250,"y":523,"w":30,"h":30},
+ "frame": {"x":538,"y":281,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -410,7 +410,7 @@
},
"sprites/belt/left_23.png":
{
- "frame": {"x":250,"y":557,"w":30,"h":30},
+ "frame": {"x":572,"y":281,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -418,7 +418,7 @@
},
"sprites/belt/left_24.png":
{
- "frame": {"x":212,"y":608,"w":30,"h":30},
+ "frame": {"x":606,"y":281,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -426,7 +426,7 @@
},
"sprites/belt/left_25.png":
{
- "frame": {"x":212,"y":642,"w":30,"h":30},
+ "frame": {"x":640,"y":281,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -434,7 +434,7 @@
},
"sprites/belt/left_26.png":
{
- "frame": {"x":212,"y":676,"w":30,"h":30},
+ "frame": {"x":674,"y":281,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -442,7 +442,7 @@
},
"sprites/belt/left_27.png":
{
- "frame": {"x":212,"y":710,"w":30,"h":30},
+ "frame": {"x":351,"y":295,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -450,7 +450,7 @@
},
"sprites/belt/right_0.png":
{
- "frame": {"x":414,"y":579,"w":30,"h":30},
+ "frame": {"x":660,"y":315,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -458,7 +458,7 @@
},
"sprites/belt/right_1.png":
{
- "frame": {"x":448,"y":565,"w":30,"h":30},
+ "frame": {"x":558,"y":349,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -466,7 +466,7 @@
},
"sprites/belt/right_2.png":
{
- "frame": {"x":312,"y":778,"w":30,"h":30},
+ "frame": {"x":394,"y":423,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -474,7 +474,7 @@
},
"sprites/belt/right_3.png":
{
- "frame": {"x":414,"y":715,"w":30,"h":30},
+ "frame": {"x":694,"y":315,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -482,7 +482,7 @@
},
"sprites/belt/right_4.png":
{
- "frame": {"x":448,"y":701,"w":30,"h":30},
+ "frame": {"x":694,"y":349,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -490,7 +490,7 @@
},
"sprites/belt/right_5.png":
{
- "frame": {"x":380,"y":766,"w":30,"h":30},
+ "frame": {"x":696,"y":383,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -498,7 +498,7 @@
},
"sprites/belt/right_6.png":
{
- "frame": {"x":414,"y":749,"w":30,"h":30},
+ "frame": {"x":330,"y":437,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -506,7 +506,7 @@
},
"sprites/belt/right_7.png":
{
- "frame": {"x":448,"y":735,"w":30,"h":30},
+ "frame": {"x":496,"y":451,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -514,7 +514,7 @@
},
"sprites/belt/right_8.png":
{
- "frame": {"x":414,"y":783,"w":30,"h":30},
+ "frame": {"x":530,"y":451,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -522,7 +522,7 @@
},
"sprites/belt/right_9.png":
{
- "frame": {"x":448,"y":769,"w":30,"h":30},
+ "frame": {"x":564,"y":451,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -530,7 +530,7 @@
},
"sprites/belt/right_10.png":
{
- "frame": {"x":278,"y":645,"w":30,"h":30},
+ "frame": {"x":592,"y":349,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -538,7 +538,7 @@
},
"sprites/belt/right_11.png":
{
- "frame": {"x":278,"y":679,"w":30,"h":30},
+ "frame": {"x":626,"y":349,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -546,7 +546,7 @@
},
"sprites/belt/right_12.png":
{
- "frame": {"x":278,"y":713,"w":30,"h":30},
+ "frame": {"x":660,"y":349,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -554,7 +554,7 @@
},
"sprites/belt/right_13.png":
{
- "frame": {"x":278,"y":747,"w":30,"h":30},
+ "frame": {"x":458,"y":387,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -562,7 +562,7 @@
},
"sprites/belt/right_14.png":
{
- "frame": {"x":278,"y":781,"w":30,"h":30},
+ "frame": {"x":492,"y":383,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -570,7 +570,7 @@
},
"sprites/belt/right_15.png":
{
- "frame": {"x":448,"y":599,"w":30,"h":30},
+ "frame": {"x":526,"y":383,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -578,7 +578,7 @@
},
"sprites/belt/right_16.png":
{
- "frame": {"x":414,"y":613,"w":30,"h":30},
+ "frame": {"x":560,"y":383,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -586,7 +586,7 @@
},
"sprites/belt/right_17.png":
{
- "frame": {"x":312,"y":676,"w":30,"h":30},
+ "frame": {"x":594,"y":383,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -594,7 +594,7 @@
},
"sprites/belt/right_18.png":
{
- "frame": {"x":312,"y":710,"w":30,"h":30},
+ "frame": {"x":628,"y":383,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -602,7 +602,7 @@
},
"sprites/belt/right_19.png":
{
- "frame": {"x":312,"y":744,"w":30,"h":30},
+ "frame": {"x":662,"y":383,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -610,7 +610,7 @@
},
"sprites/belt/right_20.png":
{
- "frame": {"x":448,"y":633,"w":30,"h":30},
+ "frame": {"x":428,"y":423,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -618,7 +618,7 @@
},
"sprites/belt/right_21.png":
{
- "frame": {"x":414,"y":647,"w":30,"h":30},
+ "frame": {"x":462,"y":421,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -626,7 +626,7 @@
},
"sprites/belt/right_22.png":
{
- "frame": {"x":346,"y":700,"w":30,"h":30},
+ "frame": {"x":496,"y":417,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -634,7 +634,7 @@
},
"sprites/belt/right_23.png":
{
- "frame": {"x":346,"y":734,"w":30,"h":30},
+ "frame": {"x":530,"y":417,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -642,7 +642,7 @@
},
"sprites/belt/right_24.png":
{
- "frame": {"x":346,"y":768,"w":30,"h":30},
+ "frame": {"x":564,"y":417,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -650,7 +650,7 @@
},
"sprites/belt/right_25.png":
{
- "frame": {"x":414,"y":681,"w":30,"h":30},
+ "frame": {"x":598,"y":417,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -658,7 +658,7 @@
},
"sprites/belt/right_26.png":
{
- "frame": {"x":448,"y":667,"w":30,"h":30},
+ "frame": {"x":632,"y":417,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -666,23 +666,15 @@
},
"sprites/belt/right_27.png":
{
- "frame": {"x":380,"y":732,"w":30,"h":30},
+ "frame": {"x":666,"y":417,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
"sourceSize": {"w":32,"h":32}
},
-"sprites/blueprints/advanced_processor.png":
-{
- "frame": {"x":3,"y":344,"w":95,"h":92},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":1,"y":2,"w":95,"h":92},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/blueprints/belt_left.png":
{
- "frame": {"x":448,"y":803,"w":30,"h":30},
+ "frame": {"x":598,"y":451,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -690,7 +682,7 @@
},
"sprites/blueprints/belt_right.png":
{
- "frame": {"x":103,"y":340,"w":30,"h":30},
+ "frame": {"x":632,"y":451,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -698,7 +690,7 @@
},
"sprites/blueprints/belt_top.png":
{
- "frame": {"x":382,"y":696,"w":28,"h":32},
+ "frame": {"x":458,"y":351,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -714,23 +706,15 @@
},
"sprites/blueprints/cutter.png":
{
- "frame": {"x":196,"y":315,"w":87,"h":48},
+ "frame": {"x":583,"y":55,"w":87,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":87,"h":48},
"sourceSize": {"w":96,"h":48}
},
-"sprites/blueprints/energy_generator.png":
-{
- "frame": {"x":3,"y":735,"w":89,"h":92},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":4,"y":4,"w":89,"h":92},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/blueprints/miner-chainable.png":
{
- "frame": {"x":248,"y":419,"w":47,"h":48},
+ "frame": {"x":196,"y":328,"w":47,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@@ -738,7 +722,7 @@
},
"sprites/blueprints/miner.png":
{
- "frame": {"x":299,"y":419,"w":47,"h":48},
+ "frame": {"x":247,"y":301,"w":47,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@@ -746,7 +730,7 @@
},
"sprites/blueprints/mixer.png":
{
- "frame": {"x":196,"y":211,"w":89,"h":48},
+ "frame": {"x":480,"y":107,"w":89,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":89,"h":48},
@@ -754,7 +738,7 @@
},
"sprites/blueprints/painter-double.png":
{
- "frame": {"x":383,"y":3,"w":96,"h":96},
+ "frame": {"x":191,"y":107,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -762,7 +746,7 @@
},
"sprites/blueprints/painter-mirrored.png":
{
- "frame": {"x":191,"y":159,"w":96,"h":48},
+ "frame": {"x":383,"y":55,"w":96,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":48},
@@ -778,7 +762,7 @@
},
"sprites/blueprints/painter.png":
{
- "frame": {"x":291,"y":159,"w":96,"h":48},
+ "frame": {"x":571,"y":3,"w":96,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":48},
@@ -786,7 +770,7 @@
},
"sprites/blueprints/rotater-ccw.png":
{
- "frame": {"x":92,"y":535,"w":48,"h":48},
+ "frame": {"x":671,"y":3,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -794,7 +778,7 @@
},
"sprites/blueprints/rotater-fl.png":
{
- "frame": {"x":92,"y":587,"w":48,"h":48},
+ "frame": {"x":674,"y":55,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -802,7 +786,7 @@
},
"sprites/blueprints/rotater.png":
{
- "frame": {"x":92,"y":639,"w":48,"h":48},
+ "frame": {"x":664,"y":107,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -810,7 +794,7 @@
},
"sprites/blueprints/splitter-compact-inverse.png":
{
- "frame": {"x":96,"y":733,"w":48,"h":48},
+ "frame": {"x":656,"y":159,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -818,7 +802,7 @@
},
"sprites/blueprints/splitter-compact.png":
{
- "frame": {"x":299,"y":471,"w":47,"h":47},
+ "frame": {"x":247,"y":405,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
@@ -826,7 +810,7 @@
},
"sprites/blueprints/splitter.png":
{
- "frame": {"x":287,"y":315,"w":87,"h":48},
+ "frame": {"x":573,"y":107,"w":87,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":87,"h":48},
@@ -834,7 +818,7 @@
},
"sprites/blueprints/stacker.png":
{
- "frame": {"x":196,"y":263,"w":89,"h":48},
+ "frame": {"x":380,"y":159,"w":89,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":89,"h":48},
@@ -842,7 +826,7 @@
},
"sprites/blueprints/trash-storage.png":
{
- "frame": {"x":3,"y":535,"w":85,"h":96},
+ "frame": {"x":291,"y":107,"w":85,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":85,"h":96},
@@ -850,7 +834,7 @@
},
"sprites/blueprints/trash.png":
{
- "frame": {"x":96,"y":785,"w":48,"h":48},
+ "frame": {"x":92,"y":348,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -858,7 +842,7 @@
},
"sprites/blueprints/underground_belt_entry-tier2.png":
{
- "frame": {"x":196,"y":419,"w":48,"h":43},
+ "frame": {"x":92,"y":400,"w":48,"h":43},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":5,"w":48,"h":43},
@@ -866,7 +850,7 @@
},
"sprites/blueprints/underground_belt_entry.png":
{
- "frame": {"x":92,"y":691,"w":48,"h":38},
+ "frame": {"x":247,"y":259,"w":48,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":10,"w":48,"h":38},
@@ -874,7 +858,7 @@
},
"sprites/blueprints/underground_belt_exit-tier2.png":
{
- "frame": {"x":144,"y":443,"w":48,"h":38},
+ "frame": {"x":299,"y":258,"w":48,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":38},
@@ -882,63 +866,15 @@
},
"sprites/blueprints/underground_belt_exit.png":
{
- "frame": {"x":196,"y":466,"w":48,"h":38},
+ "frame": {"x":195,"y":286,"w":48,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":38},
"sourceSize": {"w":48,"h":48}
},
-"sprites/blueprints/wire_crossings-merger.png":
-{
- "frame": {"x":352,"y":367,"w":34,"h":48},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/blueprints/wire_crossings.png":
-{
- "frame": {"x":378,"y":315,"w":34,"h":48},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/blueprints/wire_left.png":
-{
- "frame": {"x":466,"y":373,"w":21,"h":21},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":11,"w":21,"h":21},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/blueprints/wire_right.png":
-{
- "frame": {"x":466,"y":398,"w":21,"h":21},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":11,"y":11,"w":21,"h":21},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/blueprints/wire_top.png":
-{
- "frame": {"x":472,"y":259,"w":10,"h":32},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":11,"y":0,"w":10,"h":32},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/buildings/advanced_processor.png":
-{
- "frame": {"x":3,"y":440,"w":94,"h":91},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":2,"y":2,"w":94,"h":91},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/buildings/belt_left.png":
{
- "frame": {"x":102,"y":374,"w":30,"h":30},
+ "frame": {"x":666,"y":451,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":30,"h":30},
@@ -946,7 +882,7 @@
},
"sprites/buildings/belt_right.png":
{
- "frame": {"x":102,"y":408,"w":30,"h":30},
+ "frame": {"x":462,"y":455,"w":30,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":30,"h":30},
@@ -954,7 +890,7 @@
},
"sprites/buildings/belt_top.png":
{
- "frame": {"x":452,"y":459,"w":28,"h":32},
+ "frame": {"x":141,"y":452,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":28,"h":32},
@@ -962,7 +898,7 @@
},
"sprites/buildings/cutter-quad.png":
{
- "frame": {"x":191,"y":107,"w":184,"h":48},
+ "frame": {"x":383,"y":3,"w":184,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":184,"h":48},
@@ -970,20 +906,12 @@
},
"sprites/buildings/cutter.png":
{
- "frame": {"x":391,"y":207,"w":87,"h":48},
+ "frame": {"x":565,"y":159,"w":87,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":87,"h":48},
"sourceSize": {"w":96,"h":48}
},
-"sprites/buildings/energy_generator.png":
-{
- "frame": {"x":103,"y":244,"w":89,"h":92},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":4,"y":4,"w":89,"h":92},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/buildings/hub.png":
{
"frame": {"x":3,"y":3,"w":184,"h":185},
@@ -994,7 +922,7 @@
},
"sprites/buildings/miner-chainable.png":
{
- "frame": {"x":350,"y":419,"w":47,"h":48},
+ "frame": {"x":196,"y":380,"w":47,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@@ -1002,7 +930,7 @@
},
"sprites/buildings/miner.png":
{
- "frame": {"x":248,"y":471,"w":47,"h":48},
+ "frame": {"x":247,"y":353,"w":47,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@@ -1010,7 +938,7 @@
},
"sprites/buildings/mixer.png":
{
- "frame": {"x":289,"y":211,"w":88,"h":48},
+ "frame": {"x":473,"y":159,"w":88,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":88,"h":48},
@@ -1026,7 +954,7 @@
},
"sprites/buildings/painter-mirrored.png":
{
- "frame": {"x":391,"y":103,"w":96,"h":48},
+ "frame": {"x":380,"y":107,"w":96,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":48},
@@ -1042,7 +970,7 @@
},
"sprites/buildings/painter.png":
{
- "frame": {"x":391,"y":155,"w":96,"h":48},
+ "frame": {"x":483,"y":55,"w":96,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":48},
@@ -1050,7 +978,7 @@
},
"sprites/buildings/rotater-ccw.png":
{
- "frame": {"x":144,"y":340,"w":48,"h":48},
+ "frame": {"x":144,"y":348,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -1058,7 +986,7 @@
},
"sprites/buildings/rotater-fl.png":
{
- "frame": {"x":196,"y":367,"w":48,"h":48},
+ "frame": {"x":144,"y":400,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -1066,7 +994,7 @@
},
"sprites/buildings/rotater.png":
{
- "frame": {"x":248,"y":367,"w":48,"h":48},
+ "frame": {"x":195,"y":234,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -1074,7 +1002,7 @@
},
"sprites/buildings/splitter-compact-inverse.png":
{
- "frame": {"x":144,"y":392,"w":48,"h":47},
+ "frame": {"x":299,"y":207,"w":48,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":47},
@@ -1082,7 +1010,7 @@
},
"sprites/buildings/splitter-compact.png":
{
- "frame": {"x":350,"y":471,"w":47,"h":47},
+ "frame": {"x":196,"y":432,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
@@ -1090,7 +1018,7 @@
},
"sprites/buildings/splitter.png":
{
- "frame": {"x":381,"y":259,"w":87,"h":48},
+ "frame": {"x":103,"y":296,"w":87,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":87,"h":48},
@@ -1098,7 +1026,7 @@
},
"sprites/buildings/stacker.png":
{
- "frame": {"x":289,"y":263,"w":88,"h":48},
+ "frame": {"x":103,"y":244,"w":88,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":88,"h":48},
@@ -1106,7 +1034,7 @@
},
"sprites/buildings/trash-storage.png":
{
- "frame": {"x":3,"y":635,"w":85,"h":96},
+ "frame": {"x":3,"y":344,"w":85,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":85,"h":96},
@@ -1114,7 +1042,7 @@
},
"sprites/buildings/trash.png":
{
- "frame": {"x":300,"y":367,"w":48,"h":48},
+ "frame": {"x":247,"y":207,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -1122,7 +1050,7 @@
},
"sprites/buildings/underground_belt_entry-tier2.png":
{
- "frame": {"x":416,"y":311,"w":47,"h":42},
+ "frame": {"x":3,"y":444,"w":47,"h":42},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":6,"w":47,"h":42},
@@ -1130,7 +1058,7 @@
},
"sprites/buildings/underground_belt_entry.png":
{
- "frame": {"x":401,"y":419,"w":47,"h":38},
+ "frame": {"x":90,"y":447,"w":47,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":10,"w":47,"h":38},
@@ -1138,7 +1066,7 @@
},
"sprites/buildings/underground_belt_exit-tier2.png":
{
- "frame": {"x":401,"y":461,"w":47,"h":38},
+ "frame": {"x":351,"y":211,"w":47,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":38},
@@ -1146,55 +1074,15 @@
},
"sprites/buildings/underground_belt_exit.png":
{
- "frame": {"x":401,"y":503,"w":47,"h":38},
+ "frame": {"x":351,"y":253,"w":47,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":38},
"sourceSize": {"w":48,"h":48}
},
-"sprites/buildings/wire_crossings-merger.png":
-{
- "frame": {"x":390,"y":367,"w":34,"h":48},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/buildings/wire_crossings.png":
-{
- "frame": {"x":428,"y":357,"w":34,"h":48},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/buildings/wire_left.png":
-{
- "frame": {"x":318,"y":543,"w":21,"h":21},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":11,"w":21,"h":21},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/buildings/wire_right.png":
-{
- "frame": {"x":238,"y":812,"w":21,"h":21},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":11,"y":11,"w":21,"h":21},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/buildings/wire_top.png":
-{
- "frame": {"x":101,"y":472,"w":10,"h":32},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":11,"y":0,"w":10,"h":32},
- "sourceSize": {"w":32,"h":32}
-},
"sprites/debug/acceptor_slot.png":
{
- "frame": {"x":430,"y":817,"w":14,"h":16},
+ "frame": {"x":173,"y":452,"w":14,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":14,"h":16},
@@ -1202,7 +1090,7 @@
},
"sprites/debug/ejector_slot.png":
{
- "frame": {"x":123,"y":442,"w":14,"h":16},
+ "frame": {"x":700,"y":445,"w":14,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":14,"h":16},
@@ -1210,7 +1098,7 @@
},
"sprites/map_overview/belt_forward.png":
{
- "frame": {"x":184,"y":485,"w":8,"h":8},
+ "frame": {"x":718,"y":445,"w":8,"h":8},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":8,"h":8},
@@ -1218,7 +1106,7 @@
},
"sprites/map_overview/belt_left.png":
{
- "frame": {"x":200,"y":820,"w":8,"h":8},
+ "frame": {"x":718,"y":457,"w":8,"h":8},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":8,"h":8},
@@ -1226,7 +1114,7 @@
},
"sprites/map_overview/belt_right.png":
{
- "frame": {"x":379,"y":107,"w":8,"h":8},
+ "frame": {"x":173,"y":472,"w":8,"h":8},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":8,"h":8},
@@ -1234,39 +1122,23 @@
},
"sprites/misc/deletion_marker.png":
{
- "frame": {"x":212,"y":812,"w":22,"h":22},
+ "frame": {"x":364,"y":437,"w":22,"h":22},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":22,"h":22},
"sourceSize": {"w":24,"h":24}
},
-"sprites/misc/energy_generator_overlay.png":
-{
- "frame": {"x":299,"y":522,"w":40,"h":17},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":45,"y":71,"w":40,"h":17},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/misc/hub_direction_indicator.png":
{
- "frame": {"x":379,"y":119,"w":8,"h":8},
+ "frame": {"x":385,"y":295,"w":8,"h":8},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":8,"h":8},
"sourceSize": {"w":8,"h":8}
},
-"sprites/misc/lock_direction_indicator.png":
-{
- "frame": {"x":115,"y":494,"w":12,"h":10},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":1,"w":12,"h":10},
- "sourceSize": {"w":12,"h":12}
-},
"sprites/misc/slot_bad_arrow.png":
{
- "frame": {"x":212,"y":812,"w":22,"h":22},
+ "frame": {"x":364,"y":437,"w":22,"h":22},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":22,"h":22},
@@ -1274,7 +1146,7 @@
},
"sprites/misc/slot_good_arrow.png":
{
- "frame": {"x":218,"y":508,"w":22,"h":24},
+ "frame": {"x":700,"y":417,"w":22,"h":24},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":22,"h":24},
@@ -1282,7 +1154,7 @@
},
"sprites/misc/storage_overlay.png":
{
- "frame": {"x":101,"y":508,"w":45,"h":23},
+ "frame": {"x":191,"y":207,"w":45,"h":23},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":45,"h":23},
@@ -1290,7 +1162,7 @@
},
"sprites/misc/waypoint.png":
{
- "frame": {"x":379,"y":131,"w":8,"h":8},
+ "frame": {"x":708,"y":281,"w":8,"h":8},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":8,"h":8},
@@ -1298,107 +1170,19 @@
},
"sprites/misc/wires_overlay_tile.png":
{
- "frame": {"x":452,"y":423,"w":32,"h":32},
+ "frame": {"x":54,"y":444,"w":32,"h":32},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":32,"h":32},
"sourceSize": {"w":32,"h":32}
-},
-"sprites/wires/battery_empty.png":
-{
- "frame": {"x":263,"y":815,"w":12,"h":16},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":2,"y":0,"w":12,"h":16},
- "sourceSize": {"w":16,"h":16}
-},
-"sprites/wires/battery_full.png":
-{
- "frame": {"x":180,"y":820,"w":16,"h":12},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":2,"w":16,"h":12},
- "sourceSize": {"w":16,"h":16}
-},
-"sprites/wires/battery_low.png":
-{
- "frame": {"x":123,"y":462,"w":16,"h":12},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":2,"w":16,"h":12},
- "sourceSize": {"w":16,"h":16}
-},
-"sprites/wires/battery_medium.png":
-{
- "frame": {"x":115,"y":478,"w":16,"h":12},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":2,"w":16,"h":12},
- "sourceSize": {"w":16,"h":16}
-},
-"sprites/wires/negative_energy.png":
-{
- "frame": {"x":472,"y":295,"w":12,"h":12},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":2,"y":2,"w":12,"h":12},
- "sourceSize": {"w":16,"h":16}
-},
-"sprites/wires/pin_negative_accept.png":
-{
- "frame": {"x":467,"y":311,"w":20,"h":27},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":6,"y":0,"w":20,"h":27},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/wires/pin_negative_eject.png":
-{
- "frame": {"x":377,"y":522,"w":18,"h":26},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":7,"y":0,"w":18,"h":26},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/wires/pin_positive_accept.png":
-{
- "frame": {"x":101,"y":442,"w":18,"h":26},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":7,"y":0,"w":18,"h":26},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/wires/pin_positive_eject.png":
-{
- "frame": {"x":467,"y":342,"w":20,"h":27},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":6,"y":0,"w":20,"h":27},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/wires/positive_energy.png":
-{
- "frame": {"x":279,"y":815,"w":12,"h":12},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":2,"y":2,"w":12,"h":12},
- "sourceSize": {"w":16,"h":16}
-},
-"sprites/wires/waste_piled.png":
-{
- "frame": {"x":410,"y":817,"w":16,"h":16},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
- "sourceSize": {"w":16,"h":16}
}},
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "1.0",
"image": "atlas0_25.png",
"format": "RGBA8888",
- "size": {"w":490,"h":837},
+ "size": {"w":729,"h":489},
"scale": "0.25",
- "smartupdate": "$TexturePacker:SmartUpdate:dfc84e4381978113df4ad0cd8a5aace9:4e9bd6f6c82aaaa8a4a583cab68dc719:f159918d23e5952766c6d23ab52278c6$"
+ "smartupdate": "$TexturePacker:SmartUpdate:a7ec474d30eba3dcfb9e1ce36dc9a3df:a66fdbb2f105a54e9a5193362b6c2d4d:f159918d23e5952766c6d23ab52278c6$"
}
}
diff --git a/res_built/atlas/atlas0_25.png b/res_built/atlas/atlas0_25.png
index c58d7738..20433f95 100644
Binary files a/res_built/atlas/atlas0_25.png and b/res_built/atlas/atlas0_25.png differ
diff --git a/res_built/atlas/atlas0_50.json b/res_built/atlas/atlas0_50.json
index 07a7a7fc..e13bbcc2 100644
--- a/res_built/atlas/atlas0_50.json
+++ b/res_built/atlas/atlas0_50.json
@@ -2,7 +2,7 @@
"sprites/belt/forward_0.png":
{
- "frame": {"x":949,"y":270,"w":51,"h":63},
+ "frame": {"x":1214,"y":403,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -10,7 +10,7 @@
},
"sprites/belt/forward_1.png":
{
- "frame": {"x":849,"y":469,"w":51,"h":63},
+ "frame": {"x":1214,"y":470,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -18,7 +18,7 @@
},
"sprites/belt/forward_2.png":
{
- "frame": {"x":958,"y":731,"w":51,"h":63},
+ "frame": {"x":796,"y":498,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -26,7 +26,7 @@
},
"sprites/belt/forward_3.png":
{
- "frame": {"x":850,"y":859,"w":51,"h":63},
+ "frame": {"x":908,"y":543,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -34,7 +34,7 @@
},
"sprites/belt/forward_4.png":
{
- "frame": {"x":905,"y":859,"w":51,"h":63},
+ "frame": {"x":963,"y":543,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -42,7 +42,7 @@
},
"sprites/belt/forward_5.png":
{
- "frame": {"x":853,"y":926,"w":51,"h":63},
+ "frame": {"x":865,"y":610,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -50,7 +50,7 @@
},
"sprites/belt/forward_6.png":
{
- "frame": {"x":908,"y":926,"w":51,"h":63},
+ "frame": {"x":920,"y":610,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -58,7 +58,7 @@
},
"sprites/belt/forward_7.png":
{
- "frame": {"x":893,"y":1054,"w":51,"h":63},
+ "frame": {"x":975,"y":610,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -66,7 +66,7 @@
},
"sprites/belt/forward_8.png":
{
- "frame": {"x":948,"y":1048,"w":51,"h":63},
+ "frame": {"x":1018,"y":543,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -74,7 +74,7 @@
},
"sprites/belt/forward_9.png":
{
- "frame": {"x":850,"y":1126,"w":51,"h":63},
+ "frame": {"x":1073,"y":542,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -82,7 +82,7 @@
},
"sprites/belt/forward_10.png":
{
- "frame": {"x":848,"y":703,"w":51,"h":63},
+ "frame": {"x":366,"y":786,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -90,7 +90,7 @@
},
"sprites/belt/forward_11.png":
{
- "frame": {"x":467,"y":1057,"w":51,"h":63},
+ "frame": {"x":421,"y":786,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -98,7 +98,7 @@
},
"sprites/belt/forward_12.png":
{
- "frame": {"x":908,"y":408,"w":51,"h":63},
+ "frame": {"x":376,"y":853,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -106,7 +106,7 @@
},
"sprites/belt/forward_13.png":
{
- "frame": {"x":910,"y":536,"w":51,"h":63},
+ "frame": {"x":431,"y":853,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -114,7 +114,7 @@
},
"sprites/belt/forward_14.png":
{
- "frame": {"x":965,"y":469,"w":51,"h":63},
+ "frame": {"x":476,"y":786,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -122,7 +122,7 @@
},
"sprites/belt/forward_15.png":
{
- "frame": {"x":965,"y":536,"w":51,"h":63},
+ "frame": {"x":486,"y":853,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -130,7 +130,7 @@
},
"sprites/belt/forward_16.png":
{
- "frame": {"x":848,"y":770,"w":51,"h":63},
+ "frame": {"x":531,"y":773,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -138,7 +138,7 @@
},
"sprites/belt/forward_17.png":
{
- "frame": {"x":903,"y":664,"w":51,"h":63},
+ "frame": {"x":647,"y":791,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -146,7 +146,7 @@
},
"sprites/belt/forward_18.png":
{
- "frame": {"x":903,"y":731,"w":51,"h":63},
+ "frame": {"x":686,"y":498,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -154,7 +154,7 @@
},
"sprites/belt/forward_19.png":
{
- "frame": {"x":958,"y":664,"w":51,"h":63},
+ "frame": {"x":741,"y":498,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -162,7 +162,7 @@
},
"sprites/belt/forward_20.png":
{
- "frame": {"x":964,"y":798,"w":51,"h":63},
+ "frame": {"x":1156,"y":481,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -170,7 +170,7 @@
},
"sprites/belt/forward_21.png":
{
- "frame": {"x":740,"y":803,"w":51,"h":63},
+ "frame": {"x":688,"y":565,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -178,7 +178,7 @@
},
"sprites/belt/forward_22.png":
{
- "frame": {"x":740,"y":870,"w":51,"h":63},
+ "frame": {"x":743,"y":565,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -186,7 +186,7 @@
},
"sprites/belt/forward_23.png":
{
- "frame": {"x":795,"y":859,"w":51,"h":63},
+ "frame": {"x":690,"y":693,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -194,7 +194,7 @@
},
"sprites/belt/forward_24.png":
{
- "frame": {"x":728,"y":1059,"w":51,"h":63},
+ "frame": {"x":798,"y":565,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -202,7 +202,7 @@
},
"sprites/belt/forward_25.png":
{
- "frame": {"x":798,"y":926,"w":51,"h":63},
+ "frame": {"x":745,"y":693,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -210,7 +210,7 @@
},
"sprites/belt/forward_26.png":
{
- "frame": {"x":783,"y":1059,"w":51,"h":63},
+ "frame": {"x":810,"y":632,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -218,7 +218,7 @@
},
"sprites/belt/forward_27.png":
{
- "frame": {"x":838,"y":1059,"w":51,"h":63},
+ "frame": {"x":853,"y":543,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -226,7 +226,7 @@
},
"sprites/belt/left_0.png":
{
- "frame": {"x":827,"y":286,"w":57,"h":57},
+ "frame": {"x":1269,"y":495,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -234,7 +234,7 @@
},
"sprites/belt/left_1.png":
{
- "frame": {"x":888,"y":286,"w":57,"h":57},
+ "frame": {"x":373,"y":725,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -242,7 +242,7 @@
},
"sprites/belt/left_2.png":
{
- "frame": {"x":903,"y":798,"w":57,"h":57},
+ "frame": {"x":1030,"y":610,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -250,7 +250,7 @@
},
"sprites/belt/left_3.png":
{
- "frame": {"x":789,"y":1126,"w":57,"h":57},
+ "frame": {"x":763,"y":821,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -258,7 +258,7 @@
},
"sprites/belt/left_4.png":
{
- "frame": {"x":905,"y":1121,"w":57,"h":57},
+ "frame": {"x":824,"y":760,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -266,7 +266,7 @@
},
"sprites/belt/left_5.png":
{
- "frame": {"x":905,"y":1182,"w":57,"h":57},
+ "frame": {"x":824,"y":821,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -274,7 +274,7 @@
},
"sprites/belt/left_6.png":
{
- "frame": {"x":372,"y":1261,"w":57,"h":57},
+ "frame": {"x":861,"y":699,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -282,7 +282,7 @@
},
"sprites/belt/left_7.png":
{
- "frame": {"x":372,"y":1322,"w":57,"h":57},
+ "frame": {"x":922,"y":677,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -290,7 +290,7 @@
},
"sprites/belt/left_8.png":
{
- "frame": {"x":433,"y":1260,"w":57,"h":57},
+ "frame": {"x":983,"y":677,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -298,7 +298,7 @@
},
"sprites/belt/left_9.png":
{
- "frame": {"x":433,"y":1321,"w":57,"h":57},
+ "frame": {"x":1044,"y":671,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -306,7 +306,7 @@
},
"sprites/belt/left_10.png":
{
- "frame": {"x":873,"y":347,"w":57,"h":57},
+ "frame": {"x":434,"y":725,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -314,7 +314,7 @@
},
"sprites/belt/left_11.png":
{
- "frame": {"x":847,"y":408,"w":57,"h":57},
+ "frame": {"x":586,"y":791,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -322,7 +322,7 @@
},
"sprites/belt/left_12.png":
{
- "frame": {"x":849,"y":536,"w":57,"h":57},
+ "frame": {"x":851,"y":482,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -330,7 +330,7 @@
},
"sprites/belt/left_13.png":
{
- "frame": {"x":831,"y":597,"w":57,"h":57},
+ "frame": {"x":912,"y":482,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -338,7 +338,7 @@
},
"sprites/belt/left_14.png":
{
- "frame": {"x":522,"y":1077,"w":57,"h":57},
+ "frame": {"x":973,"y":482,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -346,7 +346,7 @@
},
"sprites/belt/left_15.png":
{
- "frame": {"x":904,"y":475,"w":57,"h":57},
+ "frame": {"x":1034,"y":481,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -354,7 +354,7 @@
},
"sprites/belt/left_16.png":
{
- "frame": {"x":934,"y":347,"w":57,"h":57},
+ "frame": {"x":1095,"y":481,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -362,7 +362,7 @@
},
"sprites/belt/left_17.png":
{
- "frame": {"x":963,"y":408,"w":57,"h":57},
+ "frame": {"x":688,"y":632,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -370,7 +370,7 @@
},
"sprites/belt/left_18.png":
{
- "frame": {"x":892,"y":603,"w":57,"h":57},
+ "frame": {"x":749,"y":632,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -378,7 +378,7 @@
},
"sprites/belt/left_19.png":
{
- "frame": {"x":953,"y":603,"w":57,"h":57},
+ "frame": {"x":800,"y":699,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -386,7 +386,7 @@
},
"sprites/belt/left_20.png":
{
- "frame": {"x":737,"y":937,"w":57,"h":57},
+ "frame": {"x":1091,"y":609,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -394,7 +394,7 @@
},
"sprites/belt/left_21.png":
{
- "frame": {"x":731,"y":998,"w":57,"h":57},
+ "frame": {"x":1128,"y":548,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -402,7 +402,7 @@
},
"sprites/belt/left_22.png":
{
- "frame": {"x":792,"y":998,"w":57,"h":57},
+ "frame": {"x":1152,"y":609,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -410,7 +410,7 @@
},
"sprites/belt/left_23.png":
{
- "frame": {"x":960,"y":865,"w":57,"h":57},
+ "frame": {"x":1189,"y":548,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -418,7 +418,7 @@
},
"sprites/belt/left_24.png":
{
- "frame": {"x":963,"y":926,"w":57,"h":57},
+ "frame": {"x":1213,"y":609,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -426,7 +426,7 @@
},
"sprites/belt/left_25.png":
{
- "frame": {"x":963,"y":987,"w":57,"h":57},
+ "frame": {"x":702,"y":760,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -434,7 +434,7 @@
},
"sprites/belt/left_26.png":
{
- "frame": {"x":853,"y":993,"w":57,"h":57},
+ "frame": {"x":763,"y":760,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -442,7 +442,7 @@
},
"sprites/belt/left_27.png":
{
- "frame": {"x":728,"y":1126,"w":57,"h":57},
+ "frame": {"x":702,"y":821,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -450,7 +450,7 @@
},
"sprites/belt/right_0.png":
{
- "frame": {"x":469,"y":1187,"w":57,"h":57},
+ "frame": {"x":1105,"y":670,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -458,7 +458,7 @@
},
"sprites/belt/right_1.png":
{
- "frame": {"x":494,"y":1248,"w":57,"h":57},
+ "frame": {"x":1166,"y":670,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -466,7 +466,7 @@
},
"sprites/belt/right_2.png":
{
- "frame": {"x":774,"y":1187,"w":57,"h":57},
+ "frame": {"x":1129,"y":792,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -474,7 +474,7 @@
},
"sprites/belt/right_3.png":
{
- "frame": {"x":921,"y":1243,"w":57,"h":57},
+ "frame": {"x":1190,"y":853,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -482,7 +482,7 @@
},
"sprites/belt/right_4.png":
{
- "frame": {"x":921,"y":1304,"w":57,"h":57},
+ "frame": {"x":1251,"y":853,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -490,7 +490,7 @@
},
"sprites/belt/right_5.png":
{
- "frame": {"x":494,"y":1370,"w":57,"h":57},
+ "frame": {"x":541,"y":852,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -498,7 +498,7 @@
},
"sprites/belt/right_6.png":
{
- "frame": {"x":555,"y":1370,"w":57,"h":57},
+ "frame": {"x":602,"y":858,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -506,7 +506,7 @@
},
"sprites/belt/right_7.png":
{
- "frame": {"x":616,"y":1370,"w":57,"h":57},
+ "frame": {"x":1274,"y":556,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -514,7 +514,7 @@
},
"sprites/belt/right_8.png":
{
- "frame": {"x":677,"y":1370,"w":57,"h":57},
+ "frame": {"x":663,"y":882,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -522,7 +522,7 @@
},
"sprites/belt/right_9.png":
{
- "frame": {"x":738,"y":1370,"w":57,"h":57},
+ "frame": {"x":724,"y":882,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -530,7 +530,7 @@
},
"sprites/belt/right_10.png":
{
- "frame": {"x":494,"y":1309,"w":57,"h":57},
+ "frame": {"x":1227,"y":670,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -538,7 +538,7 @@
},
"sprites/belt/right_11.png":
{
- "frame": {"x":530,"y":1187,"w":57,"h":57},
+ "frame": {"x":885,"y":760,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -546,7 +546,7 @@
},
"sprites/belt/right_12.png":
{
- "frame": {"x":555,"y":1248,"w":57,"h":57},
+ "frame": {"x":885,"y":821,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -554,7 +554,7 @@
},
"sprites/belt/right_13.png":
{
- "frame": {"x":555,"y":1309,"w":57,"h":57},
+ "frame": {"x":946,"y":738,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -562,7 +562,7 @@
},
"sprites/belt/right_14.png":
{
- "frame": {"x":591,"y":1187,"w":57,"h":57},
+ "frame": {"x":946,"y":799,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -570,7 +570,7 @@
},
"sprites/belt/right_15.png":
{
- "frame": {"x":616,"y":1248,"w":57,"h":57},
+ "frame": {"x":1007,"y":738,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -578,7 +578,7 @@
},
"sprites/belt/right_16.png":
{
- "frame": {"x":616,"y":1309,"w":57,"h":57},
+ "frame": {"x":1007,"y":799,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -586,7 +586,7 @@
},
"sprites/belt/right_17.png":
{
- "frame": {"x":652,"y":1187,"w":57,"h":57},
+ "frame": {"x":1068,"y":732,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -594,7 +594,7 @@
},
"sprites/belt/right_18.png":
{
- "frame": {"x":713,"y":1187,"w":57,"h":57},
+ "frame": {"x":1068,"y":793,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -602,7 +602,7 @@
},
"sprites/belt/right_19.png":
{
- "frame": {"x":677,"y":1248,"w":57,"h":57},
+ "frame": {"x":1129,"y":731,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -610,7 +610,7 @@
},
"sprites/belt/right_20.png":
{
- "frame": {"x":677,"y":1309,"w":57,"h":57},
+ "frame": {"x":1190,"y":731,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -618,7 +618,7 @@
},
"sprites/belt/right_21.png":
{
- "frame": {"x":738,"y":1248,"w":57,"h":57},
+ "frame": {"x":1190,"y":792,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -626,7 +626,7 @@
},
"sprites/belt/right_22.png":
{
- "frame": {"x":738,"y":1309,"w":57,"h":57},
+ "frame": {"x":1251,"y":731,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -634,7 +634,7 @@
},
"sprites/belt/right_23.png":
{
- "frame": {"x":835,"y":1193,"w":57,"h":57},
+ "frame": {"x":1251,"y":792,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -642,7 +642,7 @@
},
"sprites/belt/right_24.png":
{
- "frame": {"x":799,"y":1254,"w":57,"h":57},
+ "frame": {"x":946,"y":860,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -650,7 +650,7 @@
},
"sprites/belt/right_25.png":
{
- "frame": {"x":799,"y":1315,"w":57,"h":57},
+ "frame": {"x":1007,"y":860,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -658,7 +658,7 @@
},
"sprites/belt/right_26.png":
{
- "frame": {"x":860,"y":1254,"w":57,"h":57},
+ "frame": {"x":1068,"y":854,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -666,23 +666,15 @@
},
"sprites/belt/right_27.png":
{
- "frame": {"x":860,"y":1315,"w":57,"h":57},
+ "frame": {"x":1129,"y":853,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
"sourceSize": {"w":63,"h":63}
},
-"sprites/blueprints/advanced_processor.png":
-{
- "frame": {"x":3,"y":669,"w":188,"h":181},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":4,"y":5,"w":188,"h":181},
- "sourceSize": {"w":192,"h":192}
-},
"sprites/blueprints/belt_left.png":
{
- "frame": {"x":765,"y":278,"w":58,"h":58},
+ "frame": {"x":1272,"y":371,"w":58,"h":58},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":5,"w":58,"h":58},
@@ -690,7 +682,7 @@
},
"sprites/blueprints/belt_right.png":
{
- "frame": {"x":765,"y":340,"w":58,"h":58},
+ "frame": {"x":1269,"y":433,"w":58,"h":58},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":5,"w":58,"h":58},
@@ -698,7 +690,7 @@
},
"sprites/blueprints/belt_top.png":
{
- "frame": {"x":944,"y":203,"w":53,"h":63},
+ "frame": {"x":674,"y":399,"w":53,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":53,"h":63},
@@ -714,23 +706,15 @@
},
"sprites/blueprints/cutter.png":
{
- "frame": {"x":194,"y":861,"w":172,"h":96},
+ "frame": {"x":1143,"y":103,"w":172,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":172,"h":96},
"sourceSize": {"w":192,"h":96}
},
-"sprites/blueprints/energy_generator.png":
-{
- "frame": {"x":199,"y":474,"w":175,"h":183},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":9,"y":9,"w":175,"h":183},
- "sourceSize": {"w":192,"h":192}
-},
"sprites/blueprints/miner-chainable.png":
{
- "frame": {"x":373,"y":1160,"w":92,"h":96},
+ "frame": {"x":399,"y":547,"w":92,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":92,"h":96},
@@ -738,7 +722,7 @@
},
"sprites/blueprints/miner.png":
{
- "frame": {"x":735,"y":603,"w":92,"h":96},
+ "frame": {"x":495,"y":499,"w":92,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":92,"h":96},
@@ -746,7 +730,7 @@
},
"sprites/blueprints/mixer.png":
{
- "frame": {"x":556,"y":603,"w":175,"h":96},
+ "frame": {"x":936,"y":203,"w":175,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":0,"w":175,"h":96},
@@ -754,7 +738,7 @@
},
"sprites/blueprints/painter-double.png":
{
- "frame": {"x":751,"y":3,"w":192,"h":192},
+ "frame": {"x":373,"y":203,"w":192,"h":192},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":192},
@@ -762,7 +746,7 @@
},
"sprites/blueprints/painter-mirrored.png":
{
- "frame": {"x":373,"y":303,"w":192,"h":96},
+ "frame": {"x":751,"y":103,"w":192,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":96},
@@ -778,7 +762,7 @@
},
"sprites/blueprints/painter.png":
{
- "frame": {"x":569,"y":303,"w":192,"h":96},
+ "frame": {"x":1121,"y":3,"w":192,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":96},
@@ -786,7 +770,7 @@
},
"sprites/blueprints/rotater-ccw.png":
{
- "frame": {"x":553,"y":703,"w":96,"h":96},
+ "frame": {"x":199,"y":574,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -794,7 +778,7 @@
},
"sprites/blueprints/rotater-fl.png":
{
- "frame": {"x":274,"y":1161,"w":95,"h":96},
+ "frame": {"x":178,"y":862,"w":95,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":95,"h":96},
@@ -802,7 +786,7 @@
},
"sprites/blueprints/rotater.png":
{
- "frame": {"x":653,"y":703,"w":96,"h":96},
+ "frame": {"x":299,"y":574,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -810,7 +794,7 @@
},
"sprites/blueprints/splitter-compact-inverse.png":
{
- "frame": {"x":641,"y":803,"w":95,"h":93},
+ "frame": {"x":575,"y":399,"w":95,"h":93},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":1,"w":95,"h":93},
@@ -818,7 +802,7 @@
},
"sprites/blueprints/splitter-compact.png":
{
- "frame": {"x":349,"y":1063,"w":93,"h":93},
+ "frame": {"x":593,"y":694,"w":93,"h":93},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":1,"w":93,"h":93},
@@ -826,7 +810,7 @@
},
"sprites/blueprints/splitter.png":
{
- "frame": {"x":194,"y":961,"w":171,"h":96},
+ "frame": {"x":1115,"y":203,"w":171,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":171,"h":96},
@@ -834,7 +818,7 @@
},
"sprites/blueprints/stacker.png":
{
- "frame": {"x":199,"y":661,"w":175,"h":96},
+ "frame": {"x":740,"y":303,"w":175,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":0,"w":175,"h":96},
@@ -842,7 +826,7 @@
},
"sprites/blueprints/trash-storage.png":
{
- "frame": {"x":3,"y":1037,"w":167,"h":192},
+ "frame": {"x":569,"y":203,"w":167,"h":192},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":167,"h":192},
@@ -850,7 +834,7 @@
},
"sprites/blueprints/trash.png":
{
- "frame": {"x":174,"y":1161,"w":96,"h":96},
+ "frame": {"x":173,"y":674,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -858,7 +842,7 @@
},
"sprites/blueprints/underground_belt_entry-tier2.png":
{
- "frame": {"x":752,"y":502,"w":93,"h":84},
+ "frame": {"x":173,"y":774,"w":93,"h":84},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":12,"w":93,"h":84},
@@ -866,7 +850,7 @@
},
"sprites/blueprints/underground_belt_entry.png":
{
- "frame": {"x":535,"y":998,"w":93,"h":75},
+ "frame": {"x":828,"y":403,"w":93,"h":75},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":21,"w":93,"h":75},
@@ -874,7 +858,7 @@
},
"sprites/blueprints/underground_belt_exit-tier2.png":
{
- "frame": {"x":369,"y":984,"w":94,"h":75},
+ "frame": {"x":495,"y":694,"w":94,"h":75},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":94,"h":75},
@@ -882,63 +866,15 @@
},
"sprites/blueprints/underground_belt_exit.png":
{
- "frame": {"x":751,"y":199,"w":93,"h":75},
+ "frame": {"x":925,"y":403,"w":93,"h":75},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":93,"h":75},
"sourceSize": {"w":96,"h":96}
},
-"sprites/blueprints/wire_crossings-merger.png":
-{
- "frame": {"x":947,"y":3,"w":66,"h":96},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":30,"y":0,"w":66,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/blueprints/wire_crossings.png":
-{
- "frame": {"x":472,"y":789,"w":66,"h":96},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":30,"y":0,"w":66,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/blueprints/wire_left.png":
-{
- "frame": {"x":921,"y":1365,"w":40,"h":40},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":23,"w":40,"h":40},
- "sourceSize": {"w":63,"h":63}
-},
-"sprites/blueprints/wire_right.png":
-{
- "frame": {"x":831,"y":658,"w":40,"h":41},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":23,"y":22,"w":40,"h":41},
- "sourceSize": {"w":63,"h":63}
-},
-"sprites/blueprints/wire_top.png":
-{
- "frame": {"x":446,"y":1063,"w":17,"h":63},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":23,"y":0,"w":17,"h":63},
- "sourceSize": {"w":63,"h":63}
-},
-"sprites/buildings/advanced_processor.png":
-{
- "frame": {"x":3,"y":854,"w":187,"h":179},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":5,"y":6,"w":187,"h":179},
- "sourceSize": {"w":192,"h":192}
-},
"sprites/buildings/belt_left.png":
{
- "frame": {"x":799,"y":1376,"w":57,"h":57},
+ "frame": {"x":785,"y":882,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":6,"w":57,"h":57},
@@ -946,7 +882,7 @@
},
"sprites/buildings/belt_right.png":
{
- "frame": {"x":860,"y":1376,"w":57,"h":57},
+ "frame": {"x":846,"y":882,"w":57,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":57,"h":57},
@@ -954,7 +890,7 @@
},
"sprites/buildings/belt_top.png":
{
- "frame": {"x":949,"y":270,"w":51,"h":63},
+ "frame": {"x":1214,"y":403,"w":51,"h":63},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":51,"h":63},
@@ -962,7 +898,7 @@
},
"sprites/buildings/cutter-quad.png":
{
- "frame": {"x":373,"y":203,"w":366,"h":96},
+ "frame": {"x":751,"y":3,"w":366,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":366,"h":96},
@@ -970,20 +906,12 @@
},
"sprites/buildings/cutter.png":
{
- "frame": {"x":174,"y":1061,"w":171,"h":96},
+ "frame": {"x":1097,"y":303,"w":171,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":171,"h":96},
"sourceSize": {"w":192,"h":96}
},
-"sprites/buildings/energy_generator.png":
-{
- "frame": {"x":378,"y":403,"w":174,"h":182},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":10,"y":10,"w":174,"h":182},
- "sourceSize": {"w":192,"h":192}
-},
"sprites/buildings/hub.png":
{
"frame": {"x":3,"y":3,"w":366,"h":367},
@@ -994,7 +922,7 @@
},
"sprites/buildings/miner-chainable.png":
{
- "frame": {"x":753,"y":703,"w":91,"h":95},
+ "frame": {"x":591,"y":496,"w":91,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":91,"h":95},
@@ -1002,7 +930,7 @@
},
"sprites/buildings/miner.png":
{
- "frame": {"x":752,"y":403,"w":91,"h":95},
+ "frame": {"x":593,"y":595,"w":91,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":91,"h":95},
@@ -1010,7 +938,7 @@
},
"sprites/buildings/mixer.png":
{
- "frame": {"x":378,"y":589,"w":174,"h":96},
+ "frame": {"x":919,"y":303,"w":174,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":174,"h":96},
@@ -1026,7 +954,7 @@
},
"sprites/buildings/painter-mirrored.png":
{
- "frame": {"x":556,"y":403,"w":192,"h":96},
+ "frame": {"x":740,"y":203,"w":192,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":96},
@@ -1042,7 +970,7 @@
},
"sprites/buildings/painter.png":
{
- "frame": {"x":556,"y":503,"w":192,"h":96},
+ "frame": {"x":947,"y":103,"w":192,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":96},
@@ -1050,7 +978,7 @@
},
"sprites/buildings/rotater-ccw.png":
{
- "frame": {"x":273,"y":1261,"w":95,"h":96},
+ "frame": {"x":277,"y":861,"w":95,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":95,"h":96},
@@ -1058,7 +986,7 @@
},
"sprites/buildings/rotater-fl.png":
{
- "frame": {"x":373,"y":789,"w":95,"h":96},
+ "frame": {"x":377,"y":447,"w":95,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":95,"h":96},
@@ -1066,7 +994,7 @@
},
"sprites/buildings/rotater.png":
{
- "frame": {"x":542,"y":803,"w":95,"h":96},
+ "frame": {"x":476,"y":399,"w":95,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":95,"h":96},
@@ -1074,7 +1002,7 @@
},
"sprites/buildings/splitter-compact-inverse.png":
{
- "frame": {"x":370,"y":889,"w":94,"h":91},
+ "frame": {"x":495,"y":599,"w":94,"h":91},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":94,"h":91},
@@ -1082,7 +1010,7 @@
},
"sprites/buildings/splitter-compact.png":
{
- "frame": {"x":538,"y":903,"w":93,"h":91},
+ "frame": {"x":731,"y":403,"w":93,"h":91},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":2,"w":93,"h":91},
@@ -1090,7 +1018,7 @@
},
"sprites/buildings/splitter.png":
{
- "frame": {"x":378,"y":689,"w":171,"h":96},
+ "frame": {"x":3,"y":865,"w":171,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":171,"h":96},
@@ -1098,7 +1026,7 @@
},
"sprites/buildings/stacker.png":
{
- "frame": {"x":195,"y":761,"w":174,"h":96},
+ "frame": {"x":199,"y":474,"w":174,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":174,"h":96},
@@ -1106,7 +1034,7 @@
},
"sprites/buildings/trash-storage.png":
{
- "frame": {"x":3,"y":1233,"w":166,"h":192},
+ "frame": {"x":3,"y":669,"w":166,"h":192},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":166,"h":192},
@@ -1114,7 +1042,7 @@
},
"sprites/buildings/trash.png":
{
- "frame": {"x":173,"y":1261,"w":96,"h":96},
+ "frame": {"x":273,"y":674,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -1122,7 +1050,7 @@
},
"sprites/buildings/underground_belt_entry-tier2.png":
{
- "frame": {"x":848,"y":199,"w":92,"h":83},
+ "frame": {"x":270,"y":774,"w":92,"h":83},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":13,"w":92,"h":83},
@@ -1130,7 +1058,7 @@
},
"sprites/buildings/underground_belt_entry.png":
{
- "frame": {"x":641,"y":900,"w":92,"h":74},
+ "frame": {"x":399,"y":647,"w":92,"h":74},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":22,"w":92,"h":74},
@@ -1138,7 +1066,7 @@
},
"sprites/buildings/underground_belt_exit-tier2.png":
{
- "frame": {"x":635,"y":978,"w":92,"h":74},
+ "frame": {"x":1022,"y":403,"w":92,"h":74},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":92,"h":74},
@@ -1146,55 +1074,15 @@
},
"sprites/buildings/underground_belt_exit.png":
{
- "frame": {"x":632,"y":1056,"w":92,"h":74},
+ "frame": {"x":1118,"y":403,"w":92,"h":74},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":92,"h":74},
"sourceSize": {"w":96,"h":96}
},
-"sprites/buildings/wire_crossings-merger.png":
-{
- "frame": {"x":947,"y":103,"w":66,"h":96},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":30,"y":0,"w":66,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/buildings/wire_crossings.png":
-{
- "frame": {"x":468,"y":889,"w":66,"h":96},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":30,"y":0,"w":66,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/buildings/wire_left.png":
-{
- "frame": {"x":965,"y":1365,"w":40,"h":40},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":23,"w":40,"h":40},
- "sourceSize": {"w":63,"h":63}
-},
-"sprites/buildings/wire_right.png":
-{
- "frame": {"x":372,"y":1383,"w":40,"h":40},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":23,"y":23,"w":40,"h":40},
- "sourceSize": {"w":63,"h":63}
-},
-"sprites/buildings/wire_top.png":
-{
- "frame": {"x":1001,"y":203,"w":17,"h":63},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":23,"y":0,"w":17,"h":63},
- "sourceSize": {"w":63,"h":63}
-},
"sprites/debug/acceptor_slot.png":
{
- "frame": {"x":416,"y":1383,"w":26,"h":32},
+ "frame": {"x":1290,"y":255,"w":26,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":26,"h":32},
@@ -1202,7 +1090,7 @@
},
"sprites/debug/ejector_slot.png":
{
- "frame": {"x":266,"y":1395,"w":26,"h":32},
+ "frame": {"x":422,"y":920,"w":26,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":26,"h":32},
@@ -1210,7 +1098,7 @@
},
"sprites/map_overview/belt_forward.png":
{
- "frame": {"x":446,"y":1130,"w":14,"h":16},
+ "frame": {"x":1317,"y":3,"w":14,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":14,"h":16},
@@ -1218,7 +1106,7 @@
},
"sprites/map_overview/belt_left.png":
{
- "frame": {"x":875,"y":684,"w":15,"h":15},
+ "frame": {"x":476,"y":499,"w":15,"h":15},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":1,"w":15,"h":15},
@@ -1226,7 +1114,7 @@
},
"sprites/map_overview/belt_right.png":
{
- "frame": {"x":416,"y":1419,"w":15,"h":15},
+ "frame": {"x":476,"y":518,"w":15,"h":15},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":15,"h":15},
@@ -1234,39 +1122,23 @@
},
"sprites/misc/deletion_marker.png":
{
- "frame": {"x":914,"y":993,"w":42,"h":42},
+ "frame": {"x":376,"y":920,"w":42,"h":42},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":3,"w":42,"h":42},
"sourceSize": {"w":48,"h":48}
},
-"sprites/misc/energy_generator_overlay.png":
-{
- "frame": {"x":266,"y":1361,"w":78,"h":30},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":91,"y":144,"w":78,"h":30},
- "sourceSize": {"w":192,"h":192}
-},
"sprites/misc/hub_direction_indicator.png":
{
- "frame": {"x":174,"y":1037,"w":16,"h":16},
+ "frame": {"x":1320,"y":255,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
"sourceSize": {"w":16,"h":16}
},
-"sprites/misc/lock_direction_indicator.png":
-{
- "frame": {"x":875,"y":664,"w":24,"h":16},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":4,"w":24,"h":16},
- "sourceSize": {"w":24,"h":24}
-},
"sprites/misc/slot_bad_arrow.png":
{
- "frame": {"x":914,"y":993,"w":42,"h":42},
+ "frame": {"x":376,"y":920,"w":42,"h":42},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":3,"w":42,"h":42},
@@ -1274,7 +1146,7 @@
},
"sprites/misc/slot_good_arrow.png":
{
- "frame": {"x":827,"y":347,"w":42,"h":48},
+ "frame": {"x":1290,"y":203,"w":42,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":42,"h":48},
@@ -1282,7 +1154,7 @@
},
"sprites/misc/storage_overlay.png":
{
- "frame": {"x":173,"y":1361,"w":89,"h":44},
+ "frame": {"x":373,"y":399,"w":89,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":89,"h":44},
@@ -1290,7 +1162,7 @@
},
"sprites/misc/waypoint.png":
{
- "frame": {"x":1004,"y":270,"w":14,"h":16},
+ "frame": {"x":377,"y":547,"w":14,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":14,"h":16},
@@ -1298,107 +1170,19 @@
},
"sprites/misc/wires_overlay_tile.png":
{
- "frame": {"x":467,"y":989,"w":64,"h":64},
+ "frame": {"x":1272,"y":303,"w":64,"h":64},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":64,"h":64},
"sourceSize": {"w":64,"h":64}
-},
-"sprites/wires/battery_empty.png":
-{
- "frame": {"x":348,"y":1361,"w":20,"h":32},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":6,"y":0,"w":20,"h":32},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/wires/battery_full.png":
-{
- "frame": {"x":921,"y":1409,"w":30,"h":21},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":1,"y":6,"w":30,"h":21},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/wires/battery_low.png":
-{
- "frame": {"x":955,"y":1409,"w":30,"h":21},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":1,"y":6,"w":30,"h":21},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/wires/battery_medium.png":
-{
- "frame": {"x":173,"y":1409,"w":30,"h":21},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":1,"y":6,"w":30,"h":21},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/wires/negative_energy.png":
-{
- "frame": {"x":207,"y":1409,"w":22,"h":22},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":5,"y":5,"w":22,"h":22},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/wires/pin_negative_accept.png":
-{
- "frame": {"x":583,"y":1077,"w":38,"h":53},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":13,"y":0,"w":38,"h":53},
- "sourceSize": {"w":64,"h":64}
-},
-"sprites/wires/pin_negative_eject.png":
-{
- "frame": {"x":966,"y":1115,"w":33,"h":51},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":15,"y":0,"w":33,"h":51},
- "sourceSize": {"w":64,"h":64}
-},
-"sprites/wires/pin_positive_accept.png":
-{
- "frame": {"x":966,"y":1170,"w":33,"h":51},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":15,"y":0,"w":33,"h":51},
- "sourceSize": {"w":64,"h":64}
-},
-"sprites/wires/pin_positive_eject.png":
-{
- "frame": {"x":795,"y":802,"w":38,"h":53},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":13,"y":0,"w":38,"h":53},
- "sourceSize": {"w":64,"h":64}
-},
-"sprites/wires/positive_energy.png":
-{
- "frame": {"x":233,"y":1409,"w":22,"h":22},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":5,"y":5,"w":22,"h":22},
- "sourceSize": {"w":32,"h":32}
-},
-"sprites/wires/waste_piled.png":
-{
- "frame": {"x":446,"y":1382,"w":30,"h":29},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":1,"y":1,"w":30,"h":29},
- "sourceSize": {"w":32,"h":32}
}},
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "1.0",
"image": "atlas0_50.png",
"format": "RGBA8888",
- "size": {"w":1023,"h":1437},
+ "size": {"w":1339,"h":965},
"scale": "0.5",
- "smartupdate": "$TexturePacker:SmartUpdate:dfc84e4381978113df4ad0cd8a5aace9:4e9bd6f6c82aaaa8a4a583cab68dc719:f159918d23e5952766c6d23ab52278c6$"
+ "smartupdate": "$TexturePacker:SmartUpdate:a7ec474d30eba3dcfb9e1ce36dc9a3df:a66fdbb2f105a54e9a5193362b6c2d4d:f159918d23e5952766c6d23ab52278c6$"
}
}
diff --git a/res_built/atlas/atlas0_50.png b/res_built/atlas/atlas0_50.png
index 020e7ecf..80297cd3 100644
Binary files a/res_built/atlas/atlas0_50.png and b/res_built/atlas/atlas0_50.png differ
diff --git a/res_built/atlas/atlas0_75.json b/res_built/atlas/atlas0_75.json
index e03e4e6b..3858baf9 100644
--- a/res_built/atlas/atlas0_75.json
+++ b/res_built/atlas/atlas0_75.json
@@ -2,7 +2,7 @@
"sprites/belt/forward_0.png":
{
- "frame": {"x":1103,"y":739,"w":77,"h":95},
+ "frame": {"x":945,"y":1268,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -10,7 +10,7 @@
},
"sprites/belt/forward_1.png":
{
- "frame": {"x":1184,"y":737,"w":77,"h":95},
+ "frame": {"x":1026,"y":1244,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -18,7 +18,7 @@
},
"sprites/belt/forward_2.png":
{
- "frame": {"x":1468,"y":1511,"w":77,"h":95},
+ "frame": {"x":1668,"y":446,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -26,7 +26,7 @@
},
"sprites/belt/forward_3.png":
{
- "frame": {"x":1661,"y":1220,"w":77,"h":95},
+ "frame": {"x":1269,"y":1243,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -34,7 +34,7 @@
},
"sprites/belt/forward_4.png":
{
- "frame": {"x":1580,"y":1301,"w":77,"h":95},
+ "frame": {"x":1350,"y":1243,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -42,7 +42,7 @@
},
"sprites/belt/forward_5.png":
{
- "frame": {"x":1661,"y":1319,"w":77,"h":95},
+ "frame": {"x":1431,"y":1243,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -50,7 +50,7 @@
},
"sprites/belt/forward_6.png":
{
- "frame": {"x":1549,"y":1400,"w":77,"h":95},
+ "frame": {"x":1557,"y":1332,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -58,7 +58,7 @@
},
"sprites/belt/forward_7.png":
{
- "frame": {"x":1549,"y":1499,"w":77,"h":95},
+ "frame": {"x":1638,"y":1332,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -66,7 +66,7 @@
},
"sprites/belt/forward_8.png":
{
- "frame": {"x":1558,"y":1598,"w":77,"h":95},
+ "frame": {"x":1719,"y":1332,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -74,7 +74,7 @@
},
"sprites/belt/forward_9.png":
{
- "frame": {"x":1630,"y":1418,"w":77,"h":95},
+ "frame": {"x":1800,"y":1322,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -82,7 +82,7 @@
},
"sprites/belt/forward_10.png":
{
- "frame": {"x":1355,"y":683,"w":77,"h":95},
+ "frame": {"x":1839,"y":394,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -90,7 +90,7 @@
},
"sprites/belt/forward_11.png":
{
- "frame": {"x":1445,"y":759,"w":77,"h":95},
+ "frame": {"x":1114,"y":595,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -98,7 +98,7 @@
},
"sprites/belt/forward_12.png":
{
- "frame": {"x":1445,"y":858,"w":77,"h":95},
+ "frame": {"x":1130,"y":874,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -106,7 +106,7 @@
},
"sprites/belt/forward_13.png":
{
- "frame": {"x":1184,"y":836,"w":77,"h":95},
+ "frame": {"x":1107,"y":1243,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -114,7 +114,7 @@
},
"sprites/belt/forward_14.png":
{
- "frame": {"x":1177,"y":935,"w":77,"h":95},
+ "frame": {"x":1211,"y":874,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -122,7 +122,7 @@
},
"sprites/belt/forward_15.png":
{
- "frame": {"x":1238,"y":1180,"w":77,"h":95},
+ "frame": {"x":1292,"y":864,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -130,7 +130,7 @@
},
"sprites/belt/forward_16.png":
{
- "frame": {"x":1238,"y":1279,"w":77,"h":95},
+ "frame": {"x":1188,"y":1243,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -138,7 +138,7 @@
},
"sprites/belt/forward_17.png":
{
- "frame": {"x":843,"y":1478,"w":77,"h":95},
+ "frame": {"x":1310,"y":963,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -146,7 +146,7 @@
},
"sprites/belt/forward_18.png":
{
- "frame": {"x":847,"y":1330,"w":77,"h":95},
+ "frame": {"x":1373,"y":864,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -154,7 +154,7 @@
},
"sprites/belt/forward_19.png":
{
- "frame": {"x":1468,"y":1412,"w":77,"h":95},
+ "frame": {"x":1391,"y":963,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -162,7 +162,7 @@
},
"sprites/belt/forward_20.png":
{
- "frame": {"x":1588,"y":1004,"w":77,"h":95},
+ "frame": {"x":1454,"y":864,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -170,7 +170,7 @@
},
"sprites/belt/forward_21.png":
{
- "frame": {"x":1669,"y":1022,"w":77,"h":95},
+ "frame": {"x":1472,"y":963,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -178,7 +178,7 @@
},
"sprites/belt/forward_22.png":
{
- "frame": {"x":1499,"y":1074,"w":77,"h":95},
+ "frame": {"x":1535,"y":864,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -186,7 +186,7 @@
},
"sprites/belt/forward_23.png":
{
- "frame": {"x":1499,"y":1173,"w":77,"h":95},
+ "frame": {"x":1553,"y":963,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -194,7 +194,7 @@
},
"sprites/belt/forward_24.png":
{
- "frame": {"x":1499,"y":1272,"w":77,"h":95},
+ "frame": {"x":1634,"y":953,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -202,7 +202,7 @@
},
"sprites/belt/forward_25.png":
{
- "frame": {"x":1580,"y":1103,"w":77,"h":95},
+ "frame": {"x":1715,"y":953,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -210,7 +210,7 @@
},
"sprites/belt/forward_26.png":
{
- "frame": {"x":1580,"y":1202,"w":77,"h":95},
+ "frame": {"x":1839,"y":493,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -218,7 +218,7 @@
},
"sprites/belt/forward_27.png":
{
- "frame": {"x":1661,"y":1121,"w":77,"h":95},
+ "frame": {"x":1796,"y":863,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -226,7 +226,7 @@
},
"sprites/belt/left_0.png":
{
- "frame": {"x":1672,"y":554,"w":86,"h":86},
+ "frame": {"x":1195,"y":594,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -234,7 +234,7 @@
},
"sprites/belt/left_1.png":
{
- "frame": {"x":1535,"y":624,"w":86,"h":86},
+ "frame": {"x":1285,"y":594,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -242,7 +242,7 @@
},
"sprites/belt/left_2.png":
{
- "frame": {"x":1706,"y":842,"w":86,"h":86},
+ "frame": {"x":1220,"y":973,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -250,7 +250,7 @@
},
"sprites/belt/left_3.png":
{
- "frame": {"x":1304,"y":1052,"w":86,"h":86},
+ "frame": {"x":1474,"y":683,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -258,7 +258,7 @@
},
"sprites/belt/left_4.png":
{
- "frame": {"x":1394,"y":1052,"w":86,"h":86},
+ "frame": {"x":1564,"y":683,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -266,7 +266,7 @@
},
"sprites/belt/left_5.png":
{
- "frame": {"x":1319,"y":1142,"w":86,"h":86},
+ "frame": {"x":1645,"y":593,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -274,7 +274,7 @@
},
"sprites/belt/left_6.png":
{
- "frame": {"x":1409,"y":1142,"w":86,"h":86},
+ "frame": {"x":1654,"y":683,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -282,7 +282,7 @@
},
"sprites/belt/left_7.png":
{
- "frame": {"x":1319,"y":1232,"w":86,"h":86},
+ "frame": {"x":1749,"y":443,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -290,7 +290,7 @@
},
"sprites/belt/left_8.png":
{
- "frame": {"x":1409,"y":1232,"w":86,"h":86},
+ "frame": {"x":1458,"y":774,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -298,7 +298,7 @@
},
"sprites/belt/left_9.png":
{
- "frame": {"x":1319,"y":1322,"w":86,"h":86},
+ "frame": {"x":1548,"y":773,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -306,7 +306,7 @@
},
"sprites/belt/left_10.png":
{
- "frame": {"x":1625,"y":644,"w":86,"h":86},
+ "frame": {"x":1114,"y":694,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -314,7 +314,7 @@
},
"sprites/belt/left_11.png":
{
- "frame": {"x":1265,"y":683,"w":86,"h":86},
+ "frame": {"x":1204,"y":684,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -322,7 +322,7 @@
},
"sprites/belt/left_12.png":
{
- "frame": {"x":1265,"y":773,"w":86,"h":86},
+ "frame": {"x":1294,"y":684,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -330,7 +330,7 @@
},
"sprites/belt/left_13.png":
{
- "frame": {"x":1436,"y":669,"w":86,"h":86},
+ "frame": {"x":1098,"y":784,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -338,7 +338,7 @@
},
"sprites/belt/left_14.png":
{
- "frame": {"x":1355,"y":782,"w":86,"h":86},
+ "frame": {"x":1130,"y":973,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -346,7 +346,7 @@
},
"sprites/belt/left_15.png":
{
- "frame": {"x":1526,"y":714,"w":86,"h":86},
+ "frame": {"x":1112,"y":1063,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -354,7 +354,7 @@
},
"sprites/belt/left_16.png":
{
- "frame": {"x":1616,"y":734,"w":86,"h":86},
+ "frame": {"x":1086,"y":1153,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -362,7 +362,7 @@
},
"sprites/belt/left_17.png":
{
- "frame": {"x":1526,"y":804,"w":86,"h":86},
+ "frame": {"x":1107,"y":1342,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -370,7 +370,7 @@
},
"sprites/belt/left_18.png":
{
- "frame": {"x":1616,"y":824,"w":86,"h":86},
+ "frame": {"x":1188,"y":784,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -378,7 +378,7 @@
},
"sprites/belt/left_19.png":
{
- "frame": {"x":1706,"y":752,"w":86,"h":86},
+ "frame": {"x":1278,"y":774,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -386,7 +386,7 @@
},
"sprites/belt/left_20.png":
{
- "frame": {"x":1526,"y":894,"w":86,"h":86},
+ "frame": {"x":1202,"y":1063,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -394,7 +394,7 @@
},
"sprites/belt/left_21.png":
{
- "frame": {"x":1616,"y":914,"w":86,"h":86},
+ "frame": {"x":1176,"y":1153,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -402,7 +402,7 @@
},
"sprites/belt/left_22.png":
{
- "frame": {"x":1706,"y":932,"w":86,"h":86},
+ "frame": {"x":1197,"y":1342,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -410,7 +410,7 @@
},
"sprites/belt/left_23.png":
{
- "frame": {"x":1265,"y":863,"w":86,"h":86},
+ "frame": {"x":1375,"y":594,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -418,7 +418,7 @@
},
"sprites/belt/left_24.png":
{
- "frame": {"x":1355,"y":872,"w":86,"h":86},
+ "frame": {"x":1465,"y":593,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -426,7 +426,7 @@
},
"sprites/belt/left_25.png":
{
- "frame": {"x":1258,"y":953,"w":86,"h":86},
+ "frame": {"x":1555,"y":593,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -434,7 +434,7 @@
},
"sprites/belt/left_26.png":
{
- "frame": {"x":1348,"y":962,"w":86,"h":86},
+ "frame": {"x":1384,"y":684,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -442,7 +442,7 @@
},
"sprites/belt/left_27.png":
{
- "frame": {"x":1214,"y":1043,"w":86,"h":86},
+ "frame": {"x":1368,"y":774,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -450,7 +450,7 @@
},
"sprites/belt/right_0.png":
{
- "frame": {"x":1409,"y":1322,"w":86,"h":86},
+ "frame": {"x":1638,"y":773,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -458,7 +458,7 @@
},
"sprites/belt/right_1.png":
{
- "frame": {"x":928,"y":1328,"w":86,"h":86},
+ "frame": {"x":1616,"y":863,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -466,7 +466,7 @@
},
"sprites/belt/right_2.png":
{
- "frame": {"x":1015,"y":1688,"w":86,"h":86},
+ "frame": {"x":1652,"y":1052,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -474,7 +474,7 @@
},
"sprites/belt/right_3.png":
{
- "frame": {"x":1105,"y":1687,"w":86,"h":86},
+ "frame": {"x":1602,"y":1242,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -482,7 +482,7 @@
},
"sprites/belt/right_4.png":
{
- "frame": {"x":1198,"y":1558,"w":86,"h":86},
+ "frame": {"x":1626,"y":1152,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -490,7 +490,7 @@
},
"sprites/belt/right_5.png":
{
- "frame": {"x":1195,"y":1648,"w":86,"h":86},
+ "frame": {"x":1716,"y":1142,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -498,7 +498,7 @@
},
"sprites/belt/right_6.png":
{
- "frame": {"x":1288,"y":1592,"w":86,"h":86},
+ "frame": {"x":1806,"y":1142,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -506,7 +506,7 @@
},
"sprites/belt/right_7.png":
{
- "frame": {"x":1378,"y":1592,"w":86,"h":86},
+ "frame": {"x":1692,"y":1242,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -514,7 +514,7 @@
},
"sprites/belt/right_8.png":
{
- "frame": {"x":1285,"y":1682,"w":86,"h":86},
+ "frame": {"x":1782,"y":1232,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -522,7 +522,7 @@
},
"sprites/belt/right_9.png":
{
- "frame": {"x":1375,"y":1682,"w":86,"h":86},
+ "frame": {"x":1744,"y":623,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -530,7 +530,7 @@
},
"sprites/belt/right_10.png":
{
- "frame": {"x":1018,"y":1328,"w":86,"h":86},
+ "frame": {"x":1706,"y":863,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -538,7 +538,7 @@
},
"sprites/belt/right_11.png":
{
- "frame": {"x":1108,"y":1327,"w":86,"h":86},
+ "frame": {"x":1728,"y":773,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -546,7 +546,7 @@
},
"sprites/belt/right_12.png":
{
- "frame": {"x":928,"y":1418,"w":86,"h":86},
+ "frame": {"x":1749,"y":533,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -554,7 +554,7 @@
},
"sprites/belt/right_13.png":
{
- "frame": {"x":1018,"y":1418,"w":86,"h":86},
+ "frame": {"x":1796,"y":962,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -562,7 +562,7 @@
},
"sprites/belt/right_14.png":
{
- "frame": {"x":1108,"y":1417,"w":86,"h":86},
+ "frame": {"x":1266,"y":1153,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -570,7 +570,7 @@
},
"sprites/belt/right_15.png":
{
- "frame": {"x":924,"y":1508,"w":86,"h":86},
+ "frame": {"x":1287,"y":1342,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -578,7 +578,7 @@
},
"sprites/belt/right_16.png":
{
- "frame": {"x":1014,"y":1508,"w":86,"h":86},
+ "frame": {"x":1292,"y":1063,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -586,7 +586,7 @@
},
"sprites/belt/right_17.png":
{
- "frame": {"x":925,"y":1598,"w":86,"h":86},
+ "frame": {"x":1382,"y":1062,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -594,7 +594,7 @@
},
"sprites/belt/right_18.png":
{
- "frame": {"x":1015,"y":1598,"w":86,"h":86},
+ "frame": {"x":1472,"y":1062,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -602,7 +602,7 @@
},
"sprites/belt/right_19.png":
{
- "frame": {"x":925,"y":1688,"w":86,"h":86},
+ "frame": {"x":1562,"y":1062,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -610,7 +610,7 @@
},
"sprites/belt/right_20.png":
{
- "frame": {"x":1198,"y":1378,"w":86,"h":86},
+ "frame": {"x":1742,"y":1052,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -618,7 +618,7 @@
},
"sprites/belt/right_21.png":
{
- "frame": {"x":1198,"y":1468,"w":86,"h":86},
+ "frame": {"x":1832,"y":1052,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -626,7 +626,7 @@
},
"sprites/belt/right_22.png":
{
- "frame": {"x":1288,"y":1412,"w":86,"h":86},
+ "frame": {"x":1377,"y":1342,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -634,7 +634,7 @@
},
"sprites/belt/right_23.png":
{
- "frame": {"x":1378,"y":1412,"w":86,"h":86},
+ "frame": {"x":1356,"y":1153,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -642,7 +642,7 @@
},
"sprites/belt/right_24.png":
{
- "frame": {"x":1288,"y":1502,"w":86,"h":86},
+ "frame": {"x":1446,"y":1152,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -650,7 +650,7 @@
},
"sprites/belt/right_25.png":
{
- "frame": {"x":1378,"y":1502,"w":86,"h":86},
+ "frame": {"x":1536,"y":1152,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -658,7 +658,7 @@
},
"sprites/belt/right_26.png":
{
- "frame": {"x":1108,"y":1507,"w":86,"h":86},
+ "frame": {"x":1467,"y":1342,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -666,23 +666,15 @@
},
"sprites/belt/right_27.png":
{
- "frame": {"x":1105,"y":1597,"w":86,"h":86},
+ "frame": {"x":1512,"y":1242,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
"sourceSize": {"w":95,"h":95}
},
-"sprites/blueprints/advanced_processor.png":
-{
- "frame": {"x":3,"y":994,"w":281,"h":270},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":7,"y":8,"w":281,"h":270},
- "sourceSize": {"w":288,"h":288}
-},
"sprites/blueprints/belt_left.png":
{
- "frame": {"x":3,"y":1688,"w":87,"h":87},
+ "frame": {"x":995,"y":1153,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":8,"w":87,"h":87},
@@ -690,7 +682,7 @@
},
"sprites/blueprints/belt_right.png":
{
- "frame": {"x":94,"y":1688,"w":87,"h":87},
+ "frame": {"x":854,"y":1268,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":8,"w":87,"h":87},
@@ -698,7 +690,7 @@
},
"sprites/blueprints/belt_top.png":
{
- "frame": {"x":1715,"y":653,"w":79,"h":95},
+ "frame": {"x":1839,"y":295,"w":79,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":0,"w":79,"h":95},
@@ -714,23 +706,15 @@
},
"sprites/blueprints/cutter.png":
{
- "frame": {"x":554,"y":886,"w":256,"h":144},
+ "frame": {"x":1411,"y":150,"w":256,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":0,"w":256,"h":144},
"sourceSize": {"w":288,"h":144}
},
-"sprites/blueprints/energy_generator.png":
-{
- "frame": {"x":288,"y":996,"w":262,"h":274},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":14,"y":14,"w":262,"h":274},
- "sourceSize": {"w":288,"h":288}
-},
"sprites/blueprints/miner-chainable.png":
{
- "frame": {"x":1671,"y":3,"w":136,"h":143},
+ "frame": {"x":850,"y":890,"w":136,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":143},
@@ -738,7 +722,7 @@
},
"sprites/blueprints/miner.png":
{
- "frame": {"x":1098,"y":1180,"w":136,"h":143},
+ "frame": {"x":990,"y":890,"w":136,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":143},
@@ -746,7 +730,7 @@
},
"sprites/blueprints/mixer.png":
{
- "frame": {"x":3,"y":1540,"w":261,"h":144},
+ "frame": {"x":1139,"y":446,"w":261,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":261,"h":144},
@@ -778,7 +762,7 @@
},
"sprites/blueprints/painter.png":
{
- "frame": {"x":1411,"y":150,"w":288,"h":144},
+ "frame": {"x":847,"y":299,"w":288,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":288,"h":144},
@@ -786,7 +770,7 @@
},
"sprites/blueprints/rotater-ccw.png":
{
- "frame": {"x":702,"y":1182,"w":143,"h":144},
+ "frame": {"x":820,"y":595,"w":143,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":144},
@@ -794,7 +778,7 @@
},
"sprites/blueprints/rotater-fl.png":
{
- "frame": {"x":849,"y":1180,"w":142,"h":144},
+ "frame": {"x":559,"y":885,"w":142,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":142,"h":144},
@@ -802,7 +786,7 @@
},
"sprites/blueprints/rotater.png":
{
- "frame": {"x":700,"y":1330,"w":143,"h":144},
+ "frame": {"x":967,"y":595,"w":143,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":144},
@@ -810,7 +794,7 @@
},
"sprites/blueprints/splitter-compact-inverse.png":
{
- "frame": {"x":552,"y":1478,"w":142,"h":138},
+ "frame": {"x":283,"y":1286,"w":142,"h":138},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":142,"h":138},
@@ -818,7 +802,7 @@
},
"sprites/blueprints/splitter-compact.png":
{
- "frame": {"x":1241,"y":298,"w":139,"h":138},
+ "frame": {"x":429,"y":1286,"w":139,"h":138},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":2,"w":139,"h":138},
@@ -826,7 +810,7 @@
},
"sprites/blueprints/splitter.png":
{
- "frame": {"x":554,"y":1034,"w":256,"h":144},
+ "frame": {"x":1431,"y":298,"w":256,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":0,"w":256,"h":144},
@@ -834,7 +818,7 @@
},
"sprites/blueprints/stacker.png":
{
- "frame": {"x":847,"y":591,"w":261,"h":144},
+ "frame": {"x":295,"y":704,"w":261,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":261,"h":144},
@@ -842,7 +826,7 @@
},
"sprites/blueprints/trash-storage.png":
{
- "frame": {"x":847,"y":299,"w":250,"h":288},
+ "frame": {"x":1671,"y":3,"w":250,"h":288},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":21,"y":0,"w":250,"h":288},
@@ -850,7 +834,7 @@
},
"sprites/blueprints/trash.png":
{
- "frame": {"x":554,"y":1182,"w":144,"h":144},
+ "frame": {"x":1691,"y":295,"w":144,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
@@ -858,7 +842,7 @@
},
"sprites/blueprints/underground_belt_entry-tier2.png":
{
- "frame": {"x":1101,"y":445,"w":138,"h":125},
+ "frame": {"x":543,"y":1103,"w":138,"h":125},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":19,"w":138,"h":125},
@@ -866,7 +850,7 @@
},
"sprites/blueprints/underground_belt_entry.png":
{
- "frame": {"x":1527,"y":438,"w":138,"h":112},
+ "frame": {"x":828,"y":1037,"w":138,"h":112},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":32,"w":138,"h":112},
@@ -874,7 +858,7 @@
},
"sprites/blueprints/underground_belt_exit-tier2.png":
{
- "frame": {"x":1384,"y":438,"w":139,"h":112},
+ "frame": {"x":685,"y":1037,"w":139,"h":112},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":139,"h":112},
@@ -882,63 +866,15 @@
},
"sprites/blueprints/underground_belt_exit.png":
{
- "frame": {"x":1669,"y":438,"w":138,"h":112},
+ "frame": {"x":970,"y":1037,"w":138,"h":112},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":138,"h":112},
"sourceSize": {"w":144,"h":144}
},
-"sprites/blueprints/wire_crossings-merger.png":
-{
- "frame": {"x":1703,"y":150,"w":99,"h":144},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":45,"y":0,"w":99,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/blueprints/wire_crossings.png":
-{
- "frame": {"x":995,"y":1180,"w":99,"h":144},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":45,"y":0,"w":99,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/blueprints/wire_left.png":
-{
- "frame": {"x":441,"y":1698,"w":60,"h":60},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":35,"w":60,"h":60},
- "sourceSize": {"w":95,"h":95}
-},
-"sprites/blueprints/wire_right.png":
-{
- "frame": {"x":377,"y":1698,"w":60,"h":61},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":35,"y":34,"w":60,"h":61},
- "sourceSize": {"w":95,"h":95}
-},
-"sprites/blueprints/wire_top.png":
-{
- "frame": {"x":1772,"y":298,"w":25,"h":95},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":35,"y":0,"w":25,"h":95},
- "sourceSize": {"w":95,"h":95}
-},
-"sprites/buildings/advanced_processor.png":
-{
- "frame": {"x":3,"y":1268,"w":280,"h":268},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":8,"y":9,"w":280,"h":268},
- "sourceSize": {"w":288,"h":288}
-},
"sprites/buildings/belt_left.png":
{
- "frame": {"x":1468,"y":1610,"w":86,"h":86},
+ "frame": {"x":1834,"y":668,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":86,"h":86},
@@ -946,7 +882,7 @@
},
"sprites/buildings/belt_right.png":
{
- "frame": {"x":1498,"y":984,"w":86,"h":86},
+ "frame": {"x":1818,"y":758,"w":86,"h":86},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":86,"h":86},
@@ -954,7 +890,7 @@
},
"sprites/buildings/belt_top.png":
{
- "frame": {"x":1103,"y":739,"w":77,"h":95},
+ "frame": {"x":945,"y":1268,"w":77,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":77,"h":95},
@@ -970,20 +906,12 @@
},
"sprites/buildings/cutter.png":
{
- "frame": {"x":814,"y":886,"w":256,"h":143},
+ "frame": {"x":255,"y":999,"w":256,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":0,"w":256,"h":143},
"sourceSize": {"w":288,"h":144}
},
-"sprites/buildings/energy_generator.png":
-{
- "frame": {"x":287,"y":1274,"w":261,"h":273},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":15,"y":15,"w":261,"h":273},
- "sourceSize": {"w":288,"h":288}
-},
"sprites/buildings/hub.png":
{
"frame": {"x":3,"y":3,"w":548,"h":549},
@@ -994,7 +922,7 @@
},
"sprites/buildings/miner-chainable.png":
{
- "frame": {"x":1074,"y":1034,"w":136,"h":142},
+ "frame": {"x":3,"y":1286,"w":136,"h":142},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":142},
@@ -1002,7 +930,7 @@
},
"sprites/buildings/miner.png":
{
- "frame": {"x":1101,"y":299,"w":136,"h":142},
+ "frame": {"x":143,"y":1286,"w":136,"h":142},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":142},
@@ -1010,7 +938,7 @@
},
"sprites/buildings/mixer.png":
{
- "frame": {"x":839,"y":739,"w":260,"h":143},
+ "frame": {"x":295,"y":852,"w":260,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":260,"h":143},
@@ -1026,7 +954,7 @@
},
"sprites/buildings/painter-mirrored.png":
{
- "frame": {"x":555,"y":590,"w":288,"h":144},
+ "frame": {"x":1139,"y":298,"w":288,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":288,"h":144},
@@ -1042,7 +970,7 @@
},
"sprites/buildings/painter.png":
{
- "frame": {"x":547,"y":738,"w":288,"h":144},
+ "frame": {"x":847,"y":447,"w":288,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":288,"h":144},
@@ -1050,7 +978,7 @@
},
"sprites/buildings/rotater-ccw.png":
{
- "frame": {"x":698,"y":1478,"w":141,"h":143},
+ "frame": {"x":808,"y":743,"w":141,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":143},
@@ -1058,7 +986,7 @@
},
"sprites/buildings/rotater-fl.png":
{
- "frame": {"x":532,"y":1620,"w":141,"h":143},
+ "frame": {"x":953,"y":743,"w":141,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":141,"h":143},
@@ -1066,7 +994,7 @@
},
"sprites/buildings/rotater.png":
{
- "frame": {"x":677,"y":1625,"w":141,"h":143},
+ "frame": {"x":705,"y":890,"w":141,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":143},
@@ -1074,7 +1002,7 @@
},
"sprites/buildings/splitter-compact-inverse.png":
{
- "frame": {"x":1384,"y":298,"w":141,"h":136},
+ "frame": {"x":255,"y":1146,"w":141,"h":136},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":3,"w":141,"h":136},
@@ -1082,7 +1010,7 @@
},
"sprites/buildings/splitter-compact.png":
{
- "frame": {"x":1529,"y":298,"w":139,"h":136},
+ "frame": {"x":400,"y":1146,"w":139,"h":136},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":3,"w":139,"h":136},
@@ -1090,7 +1018,7 @@
},
"sprites/buildings/splitter.png":
{
- "frame": {"x":814,"y":1033,"w":256,"h":143},
+ "frame": {"x":560,"y":590,"w":256,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":0,"w":256,"h":143},
@@ -1098,7 +1026,7 @@
},
"sprites/buildings/stacker.png":
{
- "frame": {"x":268,"y":1551,"w":260,"h":143},
+ "frame": {"x":1404,"y":446,"w":260,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":260,"h":143},
@@ -1106,7 +1034,7 @@
},
"sprites/buildings/trash-storage.png":
{
- "frame": {"x":295,"y":704,"w":248,"h":288},
+ "frame": {"x":3,"y":994,"w":248,"h":288},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":22,"y":0,"w":248,"h":288},
@@ -1114,7 +1042,7 @@
},
"sprites/buildings/trash.png":
{
- "frame": {"x":552,"y":1330,"w":144,"h":144},
+ "frame": {"x":560,"y":737,"w":144,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
@@ -1122,7 +1050,7 @@
},
"sprites/buildings/underground_belt_entry-tier2.png":
{
- "frame": {"x":1243,"y":440,"w":137,"h":124},
+ "frame": {"x":572,"y":1232,"w":137,"h":124},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":20,"w":137,"h":124},
@@ -1130,7 +1058,7 @@
},
"sprites/buildings/underground_belt_entry.png":
{
- "frame": {"x":1112,"y":574,"w":137,"h":111},
+ "frame": {"x":713,"y":1153,"w":137,"h":111},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":33,"w":137,"h":111},
@@ -1138,7 +1066,7 @@
},
"sprites/buildings/underground_belt_exit-tier2.png":
{
- "frame": {"x":1253,"y":568,"w":137,"h":111},
+ "frame": {"x":854,"y":1153,"w":137,"h":111},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":137,"h":111},
@@ -1146,55 +1074,15 @@
},
"sprites/buildings/underground_belt_exit.png":
{
- "frame": {"x":1394,"y":554,"w":137,"h":111},
+ "frame": {"x":713,"y":1268,"w":137,"h":111},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":137,"h":111},
"sourceSize": {"w":144,"h":144}
},
-"sprites/buildings/wire_crossings-merger.png":
-{
- "frame": {"x":1074,"y":886,"w":99,"h":144},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":45,"y":0,"w":99,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/buildings/wire_crossings.png":
-{
- "frame": {"x":822,"y":1625,"w":99,"h":144},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":45,"y":0,"w":99,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/buildings/wire_left.png":
-{
- "frame": {"x":1465,"y":1700,"w":60,"h":60},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":35,"w":60,"h":60},
- "sourceSize": {"w":95,"h":95}
-},
-"sprites/buildings/wire_right.png":
-{
- "frame": {"x":1529,"y":1700,"w":60,"h":60},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":35,"y":35,"w":60,"h":60},
- "sourceSize": {"w":95,"h":95}
-},
-"sprites/buildings/wire_top.png":
-{
- "frame": {"x":1762,"y":554,"w":25,"h":95},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":35,"y":0,"w":25,"h":95},
- "sourceSize": {"w":95,"h":95}
-},
"sprites/debug/acceptor_slot.png":
{
- "frame": {"x":1639,"y":1597,"w":38,"h":48},
+ "frame": {"x":638,"y":1360,"w":38,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":38,"h":48},
@@ -1202,7 +1090,7 @@
},
"sprites/debug/ejector_slot.png":
{
- "frame": {"x":1593,"y":1697,"w":38,"h":48},
+ "frame": {"x":1744,"y":713,"w":38,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":38,"h":48},
@@ -1210,7 +1098,7 @@
},
"sprites/map_overview/belt_forward.png":
{
- "frame": {"x":1499,"y":1371,"w":20,"h":24},
+ "frame": {"x":543,"y":1232,"w":20,"h":24},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":20,"h":24},
@@ -1218,7 +1106,7 @@
},
"sprites/map_overview/belt_left.png":
{
- "frame": {"x":505,"y":1698,"w":22,"h":22},
+ "frame": {"x":708,"y":837,"w":22,"h":22},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":22,"h":22},
@@ -1226,7 +1114,7 @@
},
"sprites/map_overview/belt_right.png":
{
- "frame": {"x":1195,"y":1738,"w":22,"h":22},
+ "frame": {"x":515,"y":999,"w":22,"h":22},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":22,"h":22},
@@ -1234,39 +1122,23 @@
},
"sprites/misc/deletion_marker.png":
{
- "frame": {"x":311,"y":1698,"w":62,"h":62},
+ "frame": {"x":572,"y":1360,"w":62,"h":62},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":5,"w":62,"h":62},
"sourceSize": {"w":72,"h":72}
},
-"sprites/misc/energy_generator_overlay.png":
-{
- "frame": {"x":1112,"y":689,"w":116,"h":44},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":137,"y":217,"w":116,"h":44},
- "sourceSize": {"w":288,"h":288}
-},
"sprites/misc/hub_direction_indicator.png":
{
- "frame": {"x":1288,"y":1378,"w":24,"h":24},
+ "frame": {"x":515,"y":1103,"w":24,"h":24},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":24,"h":24},
"sourceSize": {"w":24,"h":24}
},
-"sprites/misc/lock_direction_indicator.png":
-{
- "frame": {"x":1198,"y":1327,"w":36,"h":24},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":6,"w":36,"h":24},
- "sourceSize": {"w":36,"h":36}
-},
"sprites/misc/slot_bad_arrow.png":
{
- "frame": {"x":311,"y":1698,"w":62,"h":62},
+ "frame": {"x":572,"y":1360,"w":62,"h":62},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":5,"w":62,"h":62},
@@ -1274,7 +1146,7 @@
},
"sprites/misc/slot_good_arrow.png":
{
- "frame": {"x":245,"y":1698,"w":62,"h":72},
+ "frame": {"x":1839,"y":592,"w":62,"h":72},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":62,"h":72},
@@ -1282,7 +1154,7 @@
},
"sprites/misc/storage_overlay.png":
{
- "frame": {"x":1535,"y":554,"w":133,"h":66},
+ "frame": {"x":515,"y":1033,"w":133,"h":66},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":133,"h":66},
@@ -1290,7 +1162,7 @@
},
"sprites/misc/waypoint.png":
{
- "frame": {"x":1683,"y":1517,"w":20,"h":24},
+ "frame": {"x":652,"y":1033,"w":20,"h":24},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":20,"h":24},
@@ -1298,107 +1170,19 @@
},
"sprites/misc/wires_overlay_tile.png":
{
- "frame": {"x":1672,"y":298,"w":96,"h":96},
+ "frame": {"x":708,"y":737,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
"sourceSize": {"w":96,"h":96}
-},
-"sprites/wires/battery_empty.png":
-{
- "frame": {"x":1711,"y":1418,"w":29,"h":46},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":9,"y":1,"w":29,"h":46},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/wires/battery_full.png":
-{
- "frame": {"x":1672,"y":398,"w":44,"h":30},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":2,"y":10,"w":44,"h":30},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/wires/battery_low.png":
-{
- "frame": {"x":1103,"y":838,"w":44,"h":30},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":2,"y":10,"w":44,"h":30},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/wires/battery_medium.png":
-{
- "frame": {"x":847,"y":1429,"w":44,"h":30},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":2,"y":10,"w":44,"h":30},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/wires/negative_energy.png":
-{
- "frame": {"x":1262,"y":1133,"w":32,"h":32},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":8,"y":8,"w":32,"h":32},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/wires/pin_negative_accept.png":
-{
- "frame": {"x":185,"y":1688,"w":56,"h":79},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":20,"y":0,"w":56,"h":79},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/wires/pin_negative_eject.png":
-{
- "frame": {"x":1750,"y":1022,"w":49,"h":76},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":23,"y":0,"w":49,"h":76},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/wires/pin_positive_accept.png":
-{
- "frame": {"x":1630,"y":1517,"w":49,"h":76},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":23,"y":0,"w":49,"h":76},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/wires/pin_positive_eject.png":
-{
- "frame": {"x":1438,"y":962,"w":56,"h":79},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":20,"y":0,"w":56,"h":79},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/wires/positive_energy.png":
-{
- "frame": {"x":843,"y":1577,"w":32,"h":32},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":8,"y":8,"w":32,"h":32},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/wires/waste_piled.png":
-{
- "frame": {"x":1214,"y":1133,"w":44,"h":43},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":2,"y":2,"w":44,"h":43},
- "sourceSize": {"w":48,"h":48}
}},
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "1.0",
"image": "atlas0_75.png",
"format": "RGBA8888",
- "size": {"w":1810,"h":1778},
+ "size": {"w":1924,"h":1431},
"scale": "0.75",
- "smartupdate": "$TexturePacker:SmartUpdate:dfc84e4381978113df4ad0cd8a5aace9:4e9bd6f6c82aaaa8a4a583cab68dc719:f159918d23e5952766c6d23ab52278c6$"
+ "smartupdate": "$TexturePacker:SmartUpdate:a7ec474d30eba3dcfb9e1ce36dc9a3df:a66fdbb2f105a54e9a5193362b6c2d4d:f159918d23e5952766c6d23ab52278c6$"
}
}
diff --git a/res_built/atlas/atlas0_75.png b/res_built/atlas/atlas0_75.png
index d865f650..530922ba 100644
Binary files a/res_built/atlas/atlas0_75.png and b/res_built/atlas/atlas0_75.png differ
diff --git a/res_raw/atlas.tps b/res_raw/atlas.tps
index a5a6abbd..6d6d972e 100644
--- a/res_raw/atlas.tps
+++ b/res_raw/atlas.tps
@@ -256,10 +256,6 @@
sprites/buildings/rotater.png
sprites/buildings/trash.png
sprites/misc/wires_overlay_tile.png
- sprites/wires/pin_negative_accept.png
- sprites/wires/pin_negative_eject.png
- sprites/wires/pin_positive_accept.png
- sprites/wires/pin_positive_eject.png
pivotPoint
0.5,0.5
@@ -358,19 +354,9 @@
sprites/blueprints/belt_left.png
sprites/blueprints/belt_right.png
sprites/blueprints/belt_top.png
- sprites/blueprints/wire_crossings-merger.png
- sprites/blueprints/wire_crossings.png
- sprites/blueprints/wire_left.png
- sprites/blueprints/wire_right.png
- sprites/blueprints/wire_top.png
sprites/buildings/belt_left.png
sprites/buildings/belt_right.png
sprites/buildings/belt_top.png
- sprites/buildings/wire_crossings-merger.png
- sprites/buildings/wire_crossings.png
- sprites/buildings/wire_left.png
- sprites/buildings/wire_right.png
- sprites/buildings/wire_top.png
pivotPoint
0.5,0.5
@@ -385,28 +371,6 @@
scale9FromFile
- sprites/blueprints/advanced_processor.png
- sprites/blueprints/energy_generator.png
- sprites/blueprints/painter-double.png
- sprites/blueprints/trash-storage.png
- sprites/buildings/advanced_processor.png
- sprites/buildings/energy_generator.png
- sprites/buildings/painter-double.png
- sprites/misc/energy_generator_overlay.png
-
- pivotPoint
- 0.5,0.5
- spriteScale
- 1
- scale9Enabled
-
- scale9Borders
- 96,96,192,192
- scale9Paddings
- 96,96,192,192
- scale9FromFile
-
-
sprites/blueprints/cutter-quad.png
sprites/blueprints/painter-quad.png
sprites/buildings/cutter-quad.png
@@ -481,6 +445,23 @@
scale9FromFile
+ sprites/blueprints/painter-double.png
+ sprites/blueprints/trash-storage.png
+ sprites/buildings/painter-double.png
+
+ pivotPoint
+ 0.5,0.5
+ spriteScale
+ 1
+ scale9Enabled
+
+ scale9Borders
+ 96,96,192,192
+ scale9Paddings
+ 96,96,192,192
+ scale9FromFile
+
+
sprites/buildings/cutter.png
sprites/buildings/mixer.png
sprites/buildings/painter.png
@@ -568,21 +549,6 @@
scale9FromFile
- sprites/misc/lock_direction_indicator.png
-
- pivotPoint
- 0.5,0.5
- spriteScale
- 1
- scale9Enabled
-
- scale9Borders
- 12,12,24,24
- scale9Paddings
- 12,12,24,24
- scale9FromFile
-
-
sprites/misc/storage_overlay.png
pivotPoint
@@ -598,27 +564,6 @@
scale9FromFile
- sprites/wires/battery_empty.png
- sprites/wires/battery_full.png
- sprites/wires/battery_low.png
- sprites/wires/battery_medium.png
- sprites/wires/negative_energy.png
- sprites/wires/positive_energy.png
- sprites/wires/waste_piled.png
-
- pivotPoint
- 0.5,0.5
- spriteScale
- 1
- scale9Enabled
-
- scale9Borders
- 16,16,32,32
- scale9Paddings
- 16,16,32,32
- scale9FromFile
-
-
fileList
diff --git a/res_raw/sprites/blueprints/advanced_processor.png b/res_raw/sprites/blueprints/advanced_processor.png
deleted file mode 100644
index ab385816..00000000
Binary files a/res_raw/sprites/blueprints/advanced_processor.png and /dev/null differ
diff --git a/res_raw/sprites/blueprints/energy_generator.png b/res_raw/sprites/blueprints/energy_generator.png
deleted file mode 100644
index 42258c63..00000000
Binary files a/res_raw/sprites/blueprints/energy_generator.png and /dev/null differ
diff --git a/res_raw/sprites/blueprints/wire_crossings-merger.png b/res_raw/sprites/blueprints/wire_crossings-merger.png
deleted file mode 100644
index f58ae10e..00000000
Binary files a/res_raw/sprites/blueprints/wire_crossings-merger.png and /dev/null differ
diff --git a/res_raw/sprites/blueprints/wire_crossings.png b/res_raw/sprites/blueprints/wire_crossings.png
deleted file mode 100644
index a1d44678..00000000
Binary files a/res_raw/sprites/blueprints/wire_crossings.png and /dev/null differ
diff --git a/res_raw/sprites/blueprints/wire_left.png b/res_raw/sprites/blueprints/wire_left.png
deleted file mode 100644
index 232c13e9..00000000
Binary files a/res_raw/sprites/blueprints/wire_left.png and /dev/null differ
diff --git a/res_raw/sprites/blueprints/wire_right.png b/res_raw/sprites/blueprints/wire_right.png
deleted file mode 100644
index fba98482..00000000
Binary files a/res_raw/sprites/blueprints/wire_right.png and /dev/null differ
diff --git a/res_raw/sprites/blueprints/wire_top.png b/res_raw/sprites/blueprints/wire_top.png
deleted file mode 100644
index 52efcc01..00000000
Binary files a/res_raw/sprites/blueprints/wire_top.png and /dev/null differ
diff --git a/res_raw/sprites/buildings/advanced_processor.png b/res_raw/sprites/buildings/advanced_processor.png
deleted file mode 100644
index 5402760b..00000000
Binary files a/res_raw/sprites/buildings/advanced_processor.png and /dev/null differ
diff --git a/res_raw/sprites/buildings/energy_generator.png b/res_raw/sprites/buildings/energy_generator.png
deleted file mode 100644
index 5bd9f9a2..00000000
Binary files a/res_raw/sprites/buildings/energy_generator.png and /dev/null differ
diff --git a/res_raw/sprites/buildings/wire_crossings-merger.png b/res_raw/sprites/buildings/wire_crossings-merger.png
deleted file mode 100644
index ee0db056..00000000
Binary files a/res_raw/sprites/buildings/wire_crossings-merger.png and /dev/null differ
diff --git a/res_raw/sprites/buildings/wire_crossings.png b/res_raw/sprites/buildings/wire_crossings.png
deleted file mode 100644
index 243fe45d..00000000
Binary files a/res_raw/sprites/buildings/wire_crossings.png and /dev/null differ
diff --git a/res_raw/sprites/buildings/wire_left.png b/res_raw/sprites/buildings/wire_left.png
deleted file mode 100644
index 5799ab5b..00000000
Binary files a/res_raw/sprites/buildings/wire_left.png and /dev/null differ
diff --git a/res_raw/sprites/buildings/wire_right.png b/res_raw/sprites/buildings/wire_right.png
deleted file mode 100644
index b3f2df5a..00000000
Binary files a/res_raw/sprites/buildings/wire_right.png and /dev/null differ
diff --git a/res_raw/sprites/buildings/wire_top.png b/res_raw/sprites/buildings/wire_top.png
deleted file mode 100644
index a9f90aaa..00000000
Binary files a/res_raw/sprites/buildings/wire_top.png and /dev/null differ
diff --git a/res_raw/sprites/misc/energy_generator_overlay.png b/res_raw/sprites/misc/energy_generator_overlay.png
deleted file mode 100644
index 634c2e10..00000000
Binary files a/res_raw/sprites/misc/energy_generator_overlay.png and /dev/null differ
diff --git a/res_raw/sprites/wires/battery_empty.png b/res_raw/sprites/wires/battery_empty.png
deleted file mode 100644
index 78095666..00000000
Binary files a/res_raw/sprites/wires/battery_empty.png and /dev/null differ
diff --git a/res_raw/sprites/wires/battery_full.png b/res_raw/sprites/wires/battery_full.png
deleted file mode 100644
index 5256150f..00000000
Binary files a/res_raw/sprites/wires/battery_full.png and /dev/null differ
diff --git a/res_raw/sprites/wires/battery_low.png b/res_raw/sprites/wires/battery_low.png
deleted file mode 100644
index 79fbd8a4..00000000
Binary files a/res_raw/sprites/wires/battery_low.png and /dev/null differ
diff --git a/res_raw/sprites/wires/battery_medium.png b/res_raw/sprites/wires/battery_medium.png
deleted file mode 100644
index ba0151a0..00000000
Binary files a/res_raw/sprites/wires/battery_medium.png and /dev/null differ
diff --git a/res_raw/sprites/wires/negative_energy.png b/res_raw/sprites/wires/negative_energy.png
deleted file mode 100644
index cc372330..00000000
Binary files a/res_raw/sprites/wires/negative_energy.png and /dev/null differ
diff --git a/res_raw/sprites/wires/pin_negative_accept.png b/res_raw/sprites/wires/pin_negative_accept.png
deleted file mode 100644
index 82581abb..00000000
Binary files a/res_raw/sprites/wires/pin_negative_accept.png and /dev/null differ
diff --git a/res_raw/sprites/wires/pin_negative_eject.png b/res_raw/sprites/wires/pin_negative_eject.png
deleted file mode 100644
index e816bd83..00000000
Binary files a/res_raw/sprites/wires/pin_negative_eject.png and /dev/null differ
diff --git a/res_raw/sprites/wires/pin_positive_accept.png b/res_raw/sprites/wires/pin_positive_accept.png
deleted file mode 100644
index 57044532..00000000
Binary files a/res_raw/sprites/wires/pin_positive_accept.png and /dev/null differ
diff --git a/res_raw/sprites/wires/pin_positive_eject.png b/res_raw/sprites/wires/pin_positive_eject.png
deleted file mode 100644
index a7da6bc0..00000000
Binary files a/res_raw/sprites/wires/pin_positive_eject.png and /dev/null differ
diff --git a/res_raw/sprites/wires/positive_energy.png b/res_raw/sprites/wires/positive_energy.png
deleted file mode 100644
index c95c80c9..00000000
Binary files a/res_raw/sprites/wires/positive_energy.png and /dev/null differ
diff --git a/res_raw/sprites/wires/waste_piled.png b/res_raw/sprites/wires/waste_piled.png
deleted file mode 100644
index 062d0df6..00000000
Binary files a/res_raw/sprites/wires/waste_piled.png and /dev/null differ
diff --git a/src/css/common.scss b/src/css/common.scss
index 5f599716..b8f02d40 100644
--- a/src/css/common.scss
+++ b/src/css/common.scss
@@ -318,7 +318,7 @@ input {
canvas {
pointer-events: all;
- image-rendering: auto;
+ image-rendering: pixelated;
// &.smoothed {
// }
// &.unsmoothed {
diff --git a/src/css/icons.scss b/src/css/icons.scss
index 6d10e2d7..04253fc1 100644
--- a/src/css/icons.scss
+++ b/src/css/icons.scss
@@ -1,5 +1,4 @@
-$buildings: belt, cutter, miner, mixer, painter, rotater, splitter, stacker, trash, underground_belt,
- energy_generator, wire, advanced_processor, wire_crossings;
+$buildings: belt, cutter, miner, mixer, painter, rotater, splitter, stacker, trash, underground_belt;
@each $building in $buildings {
[data-icon="building_icons/#{$building}.png"] {
diff --git a/src/js/application.js b/src/js/application.js
index bf70239d..e5e22b60 100644
--- a/src/js/application.js
+++ b/src/js/application.js
@@ -14,13 +14,9 @@ import { AdProviderInterface } from "./platform/ad_provider";
import { NoAdProvider } from "./platform/ad_providers/no_ad_provider";
import { AnalyticsInterface } from "./platform/analytics";
import { GoogleAnalyticsImpl } from "./platform/browser/google_analytics";
-import { NoGameAnalytics } from "./platform/browser/no_game_analytics";
import { SoundImplBrowser } from "./platform/browser/sound";
import { PlatformWrapperImplBrowser } from "./platform/browser/wrapper";
import { PlatformWrapperImplElectron } from "./platform/electron/wrapper";
-import { GameAnalyticsInterface } from "./platform/game_analytics";
-import { SoundInterface } from "./platform/sound";
-import { StorageInterface } from "./platform/storage";
import { PlatformWrapperInterface } from "./platform/wrapper";
import { ApplicationSettings } from "./profile/application_settings";
import { SavegameManager } from "./savegame/savegame_manager";
@@ -34,6 +30,12 @@ import { PreloadState } from "./states/preload";
import { SettingsState } from "./states/settings";
import { ShapezGameAnalytics } from "./platform/browser/game_analytics";
+/**
+ * @typedef {import("./platform/game_analytics").GameAnalyticsInterface} GameAnalyticsInterface
+ * @typedef {import("./platform/sound").SoundInterface} SoundInterface
+ * @typedef {import("./platform/storage").StorageInterface} StorageInterface
+ */
+
const logger = createLogger("application");
// Set the name of the hidden property and the change event for visibility
diff --git a/src/js/core/animation_frame.js b/src/js/core/animation_frame.js
index 14147f7f..eeefb4b0 100644
--- a/src/js/core/animation_frame.js
+++ b/src/js/core/animation_frame.js
@@ -1,6 +1,7 @@
import { Signal } from "./signal";
-import BackgroundAnimationFrameEmitterWorker from "worker-loader?inline=true&fallback=false!../webworkers/background_animation_frame_emittter.worker";
+// @ts-ignore
+import BackgroundAnimationFrameEmitterWorker from "../webworkers/background_animation_frame_emittter.worker";
import { createLogger } from "./logging";
const logger = createLogger("animation_frame");
diff --git a/src/js/core/async_compression.js b/src/js/core/async_compression.js
index 9263cdab..ddc780cc 100644
--- a/src/js/core/async_compression.js
+++ b/src/js/core/async_compression.js
@@ -1,5 +1,8 @@
-import CompressionWorker from "worker-loader?inline=true&fallback=false!../webworkers/compression.worker";
+// @ts-ignore
+import CompressionWorker from "../webworkers/compression.worker";
+
import { createLogger } from "./logging";
+import { round2Digits } from "./utils";
const logger = createLogger("async_compression");
@@ -50,7 +53,15 @@ class AsynCompression {
}
const duration = performance.now() - jobData.startTime;
- // log(this, "Got response from worker within", duration.toFixed(2), "ms");
+ logger.log(
+ "Got job",
+ jobId,
+ "response within",
+ round2Digits(duration),
+ "ms: ",
+ result.length,
+ "bytes"
+ );
const resolver = jobData.resolver;
delete this.currentJobs[jobId];
resolver(result);
@@ -70,12 +81,13 @@ class AsynCompression {
}
/**
- * Compresses file
- * @param {string} text
+ * Compresses any object
+ * @param {any} obj
*/
- compressFileAsync(text) {
- return this.internalQueueJob("compressFile", {
- text,
+ compressObjectAsync(obj) {
+ logger.log("Compressing object async (optimized)");
+ return this.internalQueueJob("compressObject", {
+ obj,
compressionPrefix,
});
}
@@ -98,6 +110,8 @@ class AsynCompression {
resolver: resolve,
startTime: performance.now(),
};
+
+ logger.log("Posting job", job, "/", jobId);
this.worker.postMessage({ jobId, job, data });
});
}
diff --git a/src/js/core/atlas_definitions.js b/src/js/core/atlas_definitions.js
index 42cd2bce..38d36b59 100644
--- a/src/js/core/atlas_definitions.js
+++ b/src/js/core/atlas_definitions.js
@@ -1,20 +1,38 @@
/**
+ * @typedef {{ w: number, h: number }} Size
+ * @typedef {{ x: number, y: number }} Position
* @typedef {{
- * frame: { x: number, y: number, w: number, h: number },
- * rotated: false,
- * spriteSourceSize: { x: number, y: number, w: number, h: number },
- * sourceSize: { w: number, h: number},
- * trimmed: true
+ * frame: Position & Size,
+ * rotated: boolean,
+ * spriteSourceSize: Position & Size,
+ * sourceSize: Size,
+ * trimmed: boolean
* }} SpriteDefinition
+ *
+ * @typedef {{
+ * app: string,
+ * version: string,
+ * image: string,
+ * format: string,
+ * size: Size,
+ * scale: string,
+ * smartupdate: string
+ * }} AtlasMeta
+ *
+ * @typedef {{
+ * frames: Object.,
+ * meta: AtlasMeta
+ * }} SourceData
*/
export class AtlasDefinition {
- constructor(sourceData) {
- this.sourceFileName = sourceData.meta.image;
- this.meta = sourceData.meta;
-
- /** @type {Object.} */
- this.sourceData = sourceData.frames;
+ /**
+ * @param {SourceData} sourceData
+ */
+ constructor({ frames, meta }) {
+ this.meta = meta;
+ this.sourceData = frames;
+ this.sourceFileName = meta.image;
}
getFullSourcePath() {
@@ -22,6 +40,7 @@ export class AtlasDefinition {
}
}
+/** @type {AtlasDefinition[]} **/
export const atlasFiles = require
// @ts-ignore
.context("../../../res_built/atlas/", false, /.*\.json/i)
diff --git a/src/js/core/background_resources_loader.js b/src/js/core/background_resources_loader.js
index 213e5869..b3a7671b 100644
--- a/src/js/core/background_resources_loader.js
+++ b/src/js/core/background_resources_loader.js
@@ -115,7 +115,6 @@ export class BackgroundResourcesLoader {
})
.then(() => {
logger.log("⏰ Finish load: bare game");
- Loader.createAtlasLinks();
this.bareGameReady = true;
initBuildingCodesAfterResourcesLoaded();
this.signalBareGameLoaded.dispatch();
diff --git a/src/js/core/buffer_maintainer.js b/src/js/core/buffer_maintainer.js
index c92a92a5..c28c0ee5 100644
--- a/src/js/core/buffer_maintainer.js
+++ b/src/js/core/buffer_maintainer.js
@@ -95,15 +95,18 @@ export class BufferMaintainer {
}
/**
- *
- * @param {string} key
- * @param {string} subKey
- * @param {function(HTMLCanvasElement, CanvasRenderingContext2D, number, number, number, object?) : void} redrawMethod
- * @param {object=} additionalParams
+ * @param {object} param0
+ * @param {string} param0.key
+ * @param {string} param0.subKey
+ * @param {number} param0.w
+ * @param {number} param0.h
+ * @param {number} param0.dpi
+ * @param {function(HTMLCanvasElement, CanvasRenderingContext2D, number, number, number, object?) : void} param0.redrawMethod
+ * @param {object=} param0.additionalParams
* @returns {HTMLCanvasElement}
*
*/
- getForKey(key, subKey, w, h, dpi, redrawMethod, additionalParams) {
+ getForKey({ key, subKey, w, h, dpi, redrawMethod, additionalParams }) {
// First, create parent key
let parent = this.cache.get(key);
if (!parent) {
diff --git a/src/js/core/config.js b/src/js/core/config.js
index 235904d9..bdb73727 100644
--- a/src/js/core/config.js
+++ b/src/js/core/config.js
@@ -34,6 +34,7 @@ export const globalConfig = {
assetsDpi: 192 / 32,
assetsSharpness: 1.2,
shapesSharpness: 1.4,
+ mapChunkSharpness: 1.0,
// Production analytics
statisticsGraphDpi: 2.5,
@@ -45,18 +46,14 @@ export const globalConfig = {
// Map
mapChunkSize: 16,
- mapChunkPrerenderMinZoom: -1,
- mapChunkOverviewMinZoom: 0.7,
+ mapChunkOverviewMinZoom: 0.9,
// Belt speeds
// NOTICE: Update webpack.production.config too!
beltSpeedItemsPerSecond: 2,
minerSpeedItemsPerSecond: 0, // COMPUTED
- beltItemSpacingByLayer: {
- regular: 0.63,
- wires: 0.4,
- },
+ itemSpacingOnBelts: 0.63,
wiresSpeedItemsPerSecond: 6,
@@ -116,14 +113,12 @@ globalConfig.minerSpeedItemsPerSecond = globalConfig.beltSpeedItemsPerSecond / 5
// Dynamic calculations
if (globalConfig.debug.disableMapOverview) {
globalConfig.mapChunkOverviewMinZoom = 0;
- globalConfig.mapChunkPrerenderMinZoom = 0;
}
// Stuff for making the trailer
if (G_IS_DEV && globalConfig.debug.renderForTrailer) {
globalConfig.debug.framePausesBetweenTicks = 32;
// globalConfig.mapChunkOverviewMinZoom = 0.0;
- // globalConfig.mapChunkPrerenderMinZoom = globalConfig.mapChunkOverviewMinZoom;
// globalConfig.debug.instantBelts = true;
// globalConfig.debug.instantProcessors = true;
// globalConfig.debug.instantMiners = true;
diff --git a/src/js/core/dpi_manager.js b/src/js/core/dpi_manager.js
index 0388c5f9..b944d155 100644
--- a/src/js/core/dpi_manager.js
+++ b/src/js/core/dpi_manager.js
@@ -15,8 +15,8 @@ export function getDeviceDPI() {
* @returns {number} Smoothed dpi
*/
export function smoothenDpi(dpi) {
- if (dpi < 0.05) {
- return 0.05;
+ if (dpi < 0.02) {
+ return 0.02;
} else if (dpi < 0.1) {
return round2Digits(dpi);
} else if (dpi < 1) {
diff --git a/src/js/core/draw_parameters.js b/src/js/core/draw_parameters.js
index dcdf6d13..45620a9e 100644
--- a/src/js/core/draw_parameters.js
+++ b/src/js/core/draw_parameters.js
@@ -1,9 +1,9 @@
-import { Rectangle } from "./rectangle";
import { globalConfig } from "./config";
-/* typehints:start */
-import { GameRoot } from "../game/root";
-/* typehints:end */
+/**
+ * @typedef {import("../game/root").GameRoot} GameRoot
+ * @typedef {import("./rectangle").Rectangle} Rectangle
+ */
export class DrawParameters {
constructor({ context, visibleRect, desiredAtlasScale, zoomLevel, root }) {
diff --git a/src/js/core/draw_utils.js b/src/js/core/draw_utils.js
index 1b37b929..ea5b70c2 100644
--- a/src/js/core/draw_utils.js
+++ b/src/js/core/draw_utils.js
@@ -1,18 +1,13 @@
-/* typehints:start */
-import { AtlasSprite } from "./sprites";
-import { DrawParameters } from "./draw_parameters";
-/* typehints:end */
-
-import { Vector } from "./vector";
-import { Rectangle } from "./rectangle";
-import { createLogger } from "./logging";
-
-const logger = createLogger("draw_utils");
+/**
+ * @typedef {import("./sprites").AtlasSprite} AtlasSprite
+ * @typedef {import("./draw_parameters").DrawParameters} DrawParameters
+ */
export function initDrawUtils() {
CanvasRenderingContext2D.prototype.beginRoundedRect = function (x, y, w, h, r) {
+ this.beginPath();
+
if (r < 0.05) {
- this.beginPath();
this.rect(x, y, w, h);
return;
}
@@ -20,25 +15,26 @@ export function initDrawUtils() {
if (w < 2 * r) {
r = w / 2;
}
+
if (h < 2 * r) {
r = h / 2;
}
- this.beginPath();
+
this.moveTo(x + r, y);
this.arcTo(x + w, y, x + w, y + h, r);
this.arcTo(x + w, y + h, x, y + h, r);
this.arcTo(x, y + h, x, y, r);
this.arcTo(x, y, x + w, y, r);
- // this.closePath();
};
CanvasRenderingContext2D.prototype.beginCircle = function (x, y, r) {
+ this.beginPath();
+
if (r < 0.05) {
- this.beginPath();
this.rect(x, y, 1, 1);
return;
}
- this.beginPath();
+
this.arc(x, y, r, 0, 2.0 * Math.PI);
};
}
@@ -62,259 +58,3 @@ export function drawRotatedSprite({ parameters, sprite, x, y, angle, size, offse
parameters.context.rotate(-angle);
parameters.context.translate(-x, -y);
}
-
-export function drawLineFast(context, { x1, x2, y1, y2, color = null, lineSize = 1 }) {
- const dX = x2 - x1;
- const dY = y2 - y1;
-
- const angle = Math.atan2(dY, dX) + 0.0 * Math.PI;
- const len = Math.hypot(dX, dY);
-
- context.translate(x1, y1);
- context.rotate(angle);
-
- if (color) {
- context.fillStyle = color;
- }
-
- context.fillRect(0, -lineSize / 2, len, lineSize);
-
- context.rotate(-angle);
- context.translate(-x1, -y1);
-}
-
-const INSIDE = 0;
-const LEFT = 1;
-const RIGHT = 2;
-const BOTTOM = 4;
-const TOP = 8;
-
-// https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm
-
-function computeOutCode(x, y, xmin, xmax, ymin, ymax) {
- let code = INSIDE;
-
- if (x < xmin)
- // to the left of clip window
- code |= LEFT;
- else if (x > xmax)
- // to the right of clip window
- code |= RIGHT;
- if (y < ymin)
- // below the clip window
- code |= BOTTOM;
- else if (y > ymax)
- // above the clip window
- code |= TOP;
-
- return code;
-}
-
-// Cohen–Sutherland clipping algorithm clips a line from
-// P0 = (x0, y0) to P1 = (x1, y1) against a rectangle with
-// diagonal from (xmin, ymin) to (xmax, ymax).
-/**
- *
- * @param {CanvasRenderingContext2D} context
- */
-export function drawLineFastClipped(context, rect, { x0, y0, x1, y1, color = null, lineSize = 1 }) {
- const xmin = rect.x;
- const ymin = rect.y;
- const xmax = rect.right();
- const ymax = rect.bottom();
-
- // compute outcodes for P0, P1, and whatever point lies outside the clip rectangle
- let outcode0 = computeOutCode(x0, y0, xmin, xmax, ymin, ymax);
- let outcode1 = computeOutCode(x1, y1, xmin, xmax, ymin, ymax);
- let accept = false;
-
- // eslint-disable-next-line no-constant-condition
- while (true) {
- if (!(outcode0 | outcode1)) {
- // bitwise OR is 0: both points inside window; trivially accept and exit loop
- accept = true;
- break;
- } else if (outcode0 & outcode1) {
- // bitwise AND is not 0: both points share an outside zone (LEFT, RIGHT, TOP,
- // or BOTTOM), so both must be outside window; exit loop (accept is false)
- break;
- } else {
- // failed both tests, so calculate the line segment to clip
- // from an outside point to an intersection with clip edge
- let x, y;
-
- // At least one endpoint is outside the clip rectangle; pick it.
- let outcodeOut = outcode0 ? outcode0 : outcode1;
-
- // Now find the intersection point;
- // use formulas:
- // slope = (y1 - y0) / (x1 - x0)
- // x = x0 + (1 / slope) * (ym - y0), where ym is ymin or ymax
- // y = y0 + slope * (xm - x0), where xm is xmin or xmax
- // No need to worry about divide-by-zero because, in each case, the
- // outcode bit being tested guarantees the denominator is non-zero
- if (outcodeOut & TOP) {
- // point is above the clip window
- x = x0 + ((x1 - x0) * (ymax - y0)) / (y1 - y0);
- y = ymax;
- } else if (outcodeOut & BOTTOM) {
- // point is below the clip window
- x = x0 + ((x1 - x0) * (ymin - y0)) / (y1 - y0);
- y = ymin;
- } else if (outcodeOut & RIGHT) {
- // point is to the right of clip window
- y = y0 + ((y1 - y0) * (xmax - x0)) / (x1 - x0);
- x = xmax;
- } else if (outcodeOut & LEFT) {
- // point is to the left of clip window
- y = y0 + ((y1 - y0) * (xmin - x0)) / (x1 - x0);
- x = xmin;
- }
-
- // Now we move outside point to intersection point to clip
- // and get ready for next pass.
- if (outcodeOut == outcode0) {
- x0 = x;
- y0 = y;
- outcode0 = computeOutCode(x0, y0, xmin, xmax, ymin, ymax);
- } else {
- x1 = x;
- y1 = y;
- outcode1 = computeOutCode(x1, y1, xmin, xmax, ymin, ymax);
- }
- }
- }
- if (accept) {
- // Following functions are left for implementation by user based on
- // their platform (OpenGL/graphics.h etc.)
- // DrawRectangle(xmin, ymin, xmax, ymax);
- // LineSegment(x0, y0, x1, y1);
- drawLineFast(context, {
- x1: x0,
- y1: y0,
- x2: x1,
- y2: y1,
- color,
- lineSize,
- });
- }
-}
-
-/**
- * Converts an HSL color value to RGB. Conversion formula
- * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
- * Assumes h, s, and l are contained in the set [0, 1] and
- * returns r, g, and b in the set [0, 255].
- *
- * @param {number} h The hue
- * @param {number} s The saturation
- * @param {number} l The lightness
- * @return {Array} The RGB representation
- */
-export function hslToRgb(h, s, l) {
- let r;
- let g;
- let b;
-
- if (s === 0) {
- r = g = b = l; // achromatic
- } else {
- // tslint:disable-next-line:no-shadowed-variable
- const hue2rgb = function (p, q, t) {
- if (t < 0) {
- t += 1;
- }
- if (t > 1) {
- t -= 1;
- }
- if (t < 1 / 6) {
- return p + (q - p) * 6 * t;
- }
- if (t < 1 / 2) {
- return q;
- }
- if (t < 2 / 3) {
- return p + (q - p) * (2 / 3 - t) * 6;
- }
- return p;
- };
-
- let q = l < 0.5 ? l * (1 + s) : l + s - l * s;
- let p = 2 * l - q;
- r = hue2rgb(p, q, h + 1 / 3);
- g = hue2rgb(p, q, h);
- b = hue2rgb(p, q, h - 1 / 3);
- }
-
- return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
-}
-
-export function wrapText(context, text, x, y, maxWidth, lineHeight, stroke = false) {
- var words = text.split(" ");
- var line = "";
-
- for (var n = 0; n < words.length; n++) {
- var testLine = line + words[n] + " ";
- var metrics = context.measureText(testLine);
- var testWidth = metrics.width;
- if (testWidth > maxWidth && n > 0) {
- if (stroke) {
- context.strokeText(line, x, y);
- } else {
- context.fillText(line, x, y);
- }
- line = words[n] + " ";
- y += lineHeight;
- } else {
- line = testLine;
- }
- }
-
- if (stroke) {
- context.strokeText(line, x, y);
- } else {
- context.fillText(line, x, y);
- }
-}
-
-/**
- * Returns a rotated trapez, used for spotlight culling
- * @param {number} x
- * @param {number} y
- * @param {number} w
- * @param {number} h
- * @param {number} leftHeight
- * @param {number} angle
- */
-export function rotateTrapezRightFaced(x, y, w, h, leftHeight, angle) {
- const halfY = y + h / 2;
- const points = [
- new Vector(x, halfY - leftHeight / 2),
- new Vector(x + w, y),
- new Vector(x, halfY + leftHeight / 2),
- new Vector(x + w, y + h),
- ];
-
- return Rectangle.getAroundPointsRotated(points, angle);
-}
-
-/**
- * Converts values from 0 .. 255 to values like 07, 7f, 5d etc
- * @param {number} value
- * @returns {string}
- */
-export function mapClampedColorValueToHex(value) {
- const hex = "0123456789abcdef";
- return hex[Math.floor(value / 16)] + hex[value % 16];
-}
-
-/**
- * Converts rgb to a hex string
- * @param {number} r
- * @param {number} g
- * @param {number} b
- * @returns {string}
- */
-export function rgbToHex(r, g, b) {
- return mapClampedColorValueToHex(r) + mapClampedColorValueToHex(g) + mapClampedColorValueToHex(b);
-}
diff --git a/src/js/core/global_registries.js b/src/js/core/global_registries.js
index 321732e0..ad45850c 100644
--- a/src/js/core/global_registries.js
+++ b/src/js/core/global_registries.js
@@ -1,19 +1,19 @@
import { SingletonFactory } from "./singleton_factory";
import { Factory } from "./factory";
-/* typehints:start */
-import { BaseGameSpeed } from "../game/time/base_game_speed";
-import { Component } from "../game/component";
-import { BaseItem } from "../game/base_item";
-import { MetaBuilding } from "../game/meta_building";
-/* typehints:end */
+/**
+ * @typedef {import("../game/time/base_game_speed").BaseGameSpeed} BaseGameSpeed
+ * @typedef {import("../game/component").Component} Component
+ * @typedef {import("../game/base_item").BaseItem} BaseItem
+ * @typedef {import("../game/meta_building").MetaBuilding} MetaBuilding
+
// These factories are here to remove circular dependencies
/** @type {SingletonFactoryTemplate} */
export let gMetaBuildingRegistry = new SingletonFactory();
-/** @type {Object.>} */
+/** @type {Object.>>} */
export let gBuildingsByCategory = null;
/** @type {FactoryTemplate} */
@@ -28,7 +28,7 @@ export let gItemRegistry = new Factory("item");
// Helpers
/**
- * @param {Object.>} buildings
+ * @param {Object.>>} buildings
*/
export function initBuildingsByCategory(buildings) {
gBuildingsByCategory = buildings;
diff --git a/src/js/core/loader.js b/src/js/core/loader.js
index 8888ecbf..d7f544e3 100644
--- a/src/js/core/loader.js
+++ b/src/js/core/loader.js
@@ -1,20 +1,19 @@
-/* typehints:start */
-import { Application } from "../application";
-/* typehints:end */
-
-import { AtlasDefinition } from "./atlas_definitions";
import { makeOffscreenBuffer } from "./buffer_utils";
import { AtlasSprite, BaseSprite, RegularSprite, SpriteAtlasLink } from "./sprites";
import { cachebust } from "./cachebust";
import { createLogger } from "./logging";
+/**
+ * @typedef {import("../application").Application} Application
+ * @typedef {import("./atlas_definitions").AtlasDefinition} AtlasDefinition;
+ */
+
const logger = createLogger("loader");
const missingSpriteIds = {};
class LoaderImpl {
constructor() {
- /** @type {Application} */
this.app = null;
/** @type {Map} */
@@ -23,6 +22,9 @@ class LoaderImpl {
this.rawImages = [];
}
+ /**
+ * @param {Application} app
+ */
linkAppAfterBoot(app) {
this.app = app;
this.makeSpriteNotFoundCanvas();
@@ -58,7 +60,7 @@ class LoaderImpl {
}
/**
- * Retursn a regular sprite from the cache
+ * Returns a regular sprite from the cache
* @param {string} key
* @returns {RegularSprite}
*/
@@ -155,44 +157,34 @@ class LoaderImpl {
* @param {AtlasDefinition} atlas
* @param {HTMLImageElement} loadedImage
*/
- internalParseAtlas(atlas, loadedImage) {
+ internalParseAtlas({ meta: { scale }, sourceData }, loadedImage) {
this.rawImages.push(loadedImage);
- for (const spriteKey in atlas.sourceData) {
- const spriteData = atlas.sourceData[spriteKey];
+ for (const spriteName in sourceData) {
+ const { frame, sourceSize, spriteSourceSize } = sourceData[spriteName];
- let sprite = /** @type {AtlasSprite} */ (this.sprites.get(spriteKey));
+ let sprite = /** @type {AtlasSprite} */ (this.sprites.get(spriteName));
if (!sprite) {
- sprite = new AtlasSprite({
- spriteName: spriteKey,
- });
- this.sprites.set(spriteKey, sprite);
+ sprite = new AtlasSprite(spriteName);
+ this.sprites.set(spriteName, sprite);
}
const link = new SpriteAtlasLink({
- packedX: spriteData.frame.x,
- packedY: spriteData.frame.y,
- packedW: spriteData.frame.w,
- packedH: spriteData.frame.h,
- packOffsetX: spriteData.spriteSourceSize.x,
- packOffsetY: spriteData.spriteSourceSize.y,
+ packedX: frame.x,
+ packedY: frame.y,
+ packedW: frame.w,
+ packedH: frame.h,
+ packOffsetX: spriteSourceSize.x,
+ packOffsetY: spriteSourceSize.y,
atlas: loadedImage,
- w: spriteData.sourceSize.w,
- h: spriteData.sourceSize.h,
+ w: sourceSize.w,
+ h: sourceSize.h,
});
- sprite.linksByResolution[atlas.meta.scale] = link;
+ sprite.linksByResolution[scale] = link;
}
}
- /**
- * Creates the links for the sprites after the atlas has been loaded. Used so we
- * don't have to store duplicate sprites.
- */
- createAtlasLinks() {
- // NOT USED
- }
-
/**
* Makes the canvas which shows the question mark, shown when a sprite was not found
*/
@@ -216,14 +208,9 @@ class LoaderImpl {
// @ts-ignore
canvas.src = "not-found";
- const resolutions = ["0.1", "0.25", "0.5", "0.75", "1"];
- const sprite = new AtlasSprite({
- spriteName: "not-found",
- });
-
- for (let i = 0; i < resolutions.length; ++i) {
- const res = resolutions[i];
- const link = new SpriteAtlasLink({
+ const sprite = new AtlasSprite("not-found");
+ ["0.1", "0.25", "0.5", "0.75", "1"].forEach(resolution => {
+ sprite.linksByResolution[resolution] = new SpriteAtlasLink({
packedX: 0,
packedY: 0,
w: dims,
@@ -234,8 +221,8 @@ class LoaderImpl {
packedH: dims,
atlas: canvas,
});
- sprite.linksByResolution[res] = link;
- }
+ });
+
this.spriteNotFoundSprite = sprite;
}
}
diff --git a/src/js/core/read_write_proxy.js b/src/js/core/read_write_proxy.js
index 3444057a..48e12b4c 100644
--- a/src/js/core/read_write_proxy.js
+++ b/src/js/core/read_write_proxy.js
@@ -2,7 +2,7 @@
import { Application } from "../application";
/* typehints:end */
-import { sha1 } from "./sensitive_utils.encrypt";
+import { sha1, CRC_PREFIX, computeCrc } from "./sensitive_utils.encrypt";
import { createLogger } from "./logging";
import { FILE_NOT_FOUND } from "../platform/storage";
import { accessNestedPropertyReverse } from "./utils";
@@ -84,7 +84,7 @@ export class ReadWriteProxy {
*/
static serializeObject(obj) {
const jsonString = JSON.stringify(compressObject(obj));
- const checksum = sha1(jsonString + salt);
+ const checksum = computeCrc(jsonString + salt);
return compressionPrefix + compressX64(checksum + jsonString);
}
@@ -106,7 +106,11 @@ export class ReadWriteProxy {
// Compare stored checksum with actual checksum
const checksum = decompressed.substring(0, 40);
const jsonString = decompressed.substr(40);
- const desiredChecksum = sha1(jsonString + salt);
+
+ const desiredChecksum = checksum.startsWith(CRC_PREFIX)
+ ? computeCrc(jsonString + salt)
+ : sha1(jsonString + salt);
+
if (desiredChecksum !== checksum) {
// Checksum mismatch
throw new Error("bad-content / checksum-mismatch");
@@ -119,7 +123,7 @@ export class ReadWriteProxy {
/**
* Writes the data asychronously, fails if verify() fails
- * @returns {Promise}
+ * @returns {Promise}
*/
writeAsync() {
const verifyResult = this.internalVerifyEntry(this.currentData);
@@ -128,35 +132,14 @@ export class ReadWriteProxy {
logger.error("Tried to write invalid data to", this.filename, "reason:", verifyResult.reason);
return Promise.reject(verifyResult.reason);
}
- const jsonString = JSON.stringify(compressObject(this.currentData));
-
- // if (!this.app.pageVisible || this.app.unloaded) {
- // logger.log("Saving file sync because in unload handler");
- // const checksum = sha1(jsonString + salt);
- // let compressed = compressionPrefix + compressX64(checksum + jsonString);
- // if (G_IS_DEV && IS_DEBUG) {
- // compressed = jsonString;
- // }
-
- // if (!this.app.storage.writeFileSyncIfSupported(this.filename, compressed)) {
- // return Promise.reject("Failed to write " + this.filename + " sync!");
- // } else {
- // logger.log("📄 Wrote (sync!)", this.filename);
- // return Promise.resolve(compressed);
- // }
- // }
return asyncCompressor
- .compressFileAsync(jsonString)
+ .compressObjectAsync(this.currentData)
.then(compressed => {
- if (G_IS_DEV && IS_DEBUG) {
- compressed = jsonString;
- }
return this.app.storage.writeFileAsync(this.filename, compressed);
})
.then(() => {
logger.log("📄 Wrote", this.filename);
- return jsonString;
})
.catch(err => {
logger.error("Failed to write", this.filename, ":", err);
@@ -205,10 +188,16 @@ export class ReadWriteProxy {
// Compare stored checksum with actual checksum
const checksum = decompressed.substring(0, 40);
const jsonString = decompressed.substr(40);
- const desiredChecksum = sha1(jsonString + salt);
+
+ const desiredChecksum = checksum.startsWith(CRC_PREFIX)
+ ? computeCrc(jsonString + salt)
+ : sha1(jsonString + salt);
+
if (desiredChecksum !== checksum) {
// Checksum mismatch
- return Promise.reject("bad-content / checksum-mismatch");
+ return Promise.reject(
+ "bad-content / checksum-mismatch: " + desiredChecksum + " vs " + checksum
+ );
}
return jsonString;
} else {
diff --git a/src/js/core/rectangle.js b/src/js/core/rectangle.js
index 75279e58..6b4315aa 100644
--- a/src/js/core/rectangle.js
+++ b/src/js/core/rectangle.js
@@ -1,5 +1,5 @@
import { globalConfig } from "./config";
-import { clamp, epsilonCompare, round2Digits } from "./utils";
+import { epsilonCompare, round2Digits } from "./utils";
import { Vector } from "./vector";
export class Rectangle {
diff --git a/src/js/core/sensitive_utils.encrypt.js b/src/js/core/sensitive_utils.encrypt.js
index 0a8906e7..5a83bf76 100644
--- a/src/js/core/sensitive_utils.encrypt.js
+++ b/src/js/core/sensitive_utils.encrypt.js
@@ -1,5 +1,5 @@
import { createHash } from "rusha";
-
+import crc32 from "crc/crc32";
import { decompressX64 } from "./lzstring";
export function sha1(str) {
@@ -10,3 +10,14 @@ export function sha1(str) {
export function getNameOfProvider() {
return window[decompressX64("DYewxghgLgliB2Q")][decompressX64("BYewzgLgdghgtgUyA")];
}
+
+// Distinguish legacy crc prefixes
+export const CRC_PREFIX = "crc32".padEnd(32, "-");
+
+/**
+ * Computes the crc for a given string
+ * @param {string} str
+ */
+export function computeCrc(str) {
+ return CRC_PREFIX + crc32(str).toString(16).padStart(8, "0");
+}
diff --git a/src/js/core/sprites.js b/src/js/core/sprites.js
index 8427f2ef..6cf495cf 100644
--- a/src/js/core/sprites.js
+++ b/src/js/core/sprites.js
@@ -1,6 +1,6 @@
import { DrawParameters } from "./draw_parameters";
import { Rectangle } from "./rectangle";
-import { epsilonCompare, round3Digits } from "./utils";
+import { round3Digits } from "./utils";
const floorSpriteCoordinates = false;
@@ -63,10 +63,9 @@ export class SpriteAtlasLink {
export class AtlasSprite extends BaseSprite {
/**
*
- * @param {object} param0
- * @param {string} param0.spriteName
+ * @param {string} spriteName
*/
- constructor({ spriteName = "sprite" }) {
+ constructor(spriteName = "sprite") {
super();
/** @type {Object.} */
this.linksByResolution = {};
@@ -197,8 +196,6 @@ export class AtlasSprite extends BaseSprite {
destH = intersection.h;
}
- // assert(epsilonCompare(scaleW, scaleH), "Sprite should be square for cached rendering");
-
if (floorSpriteCoordinates) {
parameters.context.drawImage(
link.atlas,
diff --git a/src/js/core/utils.js b/src/js/core/utils.js
index cb00e465..0aa97992 100644
--- a/src/js/core/utils.js
+++ b/src/js/core/utils.js
@@ -1,46 +1,7 @@
-import { globalConfig, IS_DEBUG } from "./config";
-import { Vector } from "./vector";
import { T } from "../translations";
-// Constants
-export const TOP = new Vector(0, -1);
-export const RIGHT = new Vector(1, 0);
-export const BOTTOM = new Vector(0, 1);
-export const LEFT = new Vector(-1, 0);
-export const ALL_DIRECTIONS = [TOP, RIGHT, BOTTOM, LEFT];
-
const bigNumberSuffixTranslationKeys = ["thousands", "millions", "billions", "trillions"];
-/**
- * Returns the build id
- * @returns {string}
- */
-export function getBuildId() {
- if (G_IS_DEV && IS_DEBUG) {
- return "local-dev";
- } else if (G_IS_DEV) {
- return "dev-" + getPlatformName() + "-" + G_BUILD_COMMIT_HASH;
- } else {
- return "prod-" + getPlatformName() + "-" + G_BUILD_COMMIT_HASH;
- }
-}
-
-/**
- * Returns the environment id (dev, prod, etc)
- * @returns {string}
- */
-export function getEnvironmentId() {
- if (G_IS_DEV && IS_DEBUG) {
- return "local-dev";
- } else if (G_IS_DEV) {
- return "dev-" + getPlatformName();
- } else if (G_IS_RELEASE) {
- return "release-" + getPlatformName();
- } else {
- return "staging-" + getPlatformName();
- }
-}
-
/**
* Returns if this platform is android
* @returns {boolean}
@@ -66,7 +27,7 @@ export function isIos() {
/**
* Returns a platform name
- * @returns {string}
+ * @returns {"android" | "browser" | "ios" | "standalone" | "unknown"}
*/
export function getPlatformName() {
if (G_IS_STANDALONE) {
@@ -96,60 +57,13 @@ export function getIPCRenderer() {
return ipcRenderer;
}
-/**
- * Formats a sensitive token by only displaying the first digits of it. Use for
- * stuff like savegame keys etc which should not appear in the log.
- * @param {string} key
- */
-export function formatSensitive(key) {
- if (!key) {
- return "";
- }
- key = key || "";
- return "[" + key.substr(0, 8) + "...]";
-}
-
-/**
- * Creates a new 2D array with the given fill method
- * @param {number} w Width
- * @param {number} h Height
- * @param {(function(number, number) : any) | number | boolean | string | null | undefined} filler Either Fill method, which should return the content for each cell, or static content
- * @param {string=} context Optional context for memory tracking
- * @returns {Array>}
- */
-export function make2DArray(w, h, filler, context = null) {
- if (typeof filler === "function") {
- const tiles = new Array(w);
- for (let x = 0; x < w; ++x) {
- const row = new Array(h);
- for (let y = 0; y < h; ++y) {
- row[y] = filler(x, y);
- }
- tiles[x] = row;
- }
- return tiles;
- } else {
- const tiles = new Array(w);
- const row = new Array(h);
- for (let y = 0; y < h; ++y) {
- row[y] = filler;
- }
-
- for (let x = 0; x < w; ++x) {
- tiles[x] = row.slice();
- }
- return tiles;
- }
-}
-
/**
* Makes a new 2D array with undefined contents
* @param {number} w
* @param {number} h
- * @param {string=} context
* @returns {Array>}
*/
-export function make2DUndefinedArray(w, h, context = null) {
+export function make2DUndefinedArray(w, h) {
const result = new Array(w);
for (let x = 0; x < w; ++x) {
result[x] = new Array(h);
@@ -157,33 +71,6 @@ export function make2DUndefinedArray(w, h, context = null) {
return result;
}
-/**
- * Clears a given 2D array with the given fill method
- * @param {Array>} array
- * @param {number} w Width
- * @param {number} h Height
- * @param {(function(number, number) : any) | number | boolean | string | null | undefined} filler Either Fill method, which should return the content for each cell, or static content
- */
-export function clear2DArray(array, w, h, filler) {
- assert(array.length === w, "Array dims mismatch w");
- assert(array[0].length === h, "Array dims mismatch h");
- if (typeof filler === "function") {
- for (let x = 0; x < w; ++x) {
- const row = array[x];
- for (let y = 0; y < h; ++y) {
- row[y] = filler(x, y);
- }
- }
- } else {
- for (let x = 0; x < w; ++x) {
- const row = array[x];
- for (let y = 0; y < h; ++y) {
- row[y] = filler;
- }
- }
- }
-}
-
/**
* Creates a new map (an empty object without any props)
*/
@@ -215,7 +102,9 @@ export function accessNestedPropertyReverse(obj, keys) {
/**
* Chooses a random entry of an array
- * @param {Array | string} arr
+ * @template T
+ * @param {T[]} arr
+ * @returns {T}
*/
export function randomChoice(arr) {
return arr[Math.floor(Math.random() * arr.length)];
@@ -304,23 +193,6 @@ export function arrayDeleteValue(array, value) {
return arrayDelete(array, index);
}
-// Converts a direction into a 0 .. 7 index
-/**
- * Converts a direction into a index from 0 .. 7, used for miners, zombies etc which have 8 sprites
- * @param {Vector} offset direction
- * @param {boolean} inverse if inverse, the direction is reversed
- * @returns {number} in range [0, 7]
- */
-export function angleToSpriteIndex(offset, inverse = false) {
- const twoPi = 2.0 * Math.PI;
- const factor = inverse ? -1 : 1;
- const offs = inverse ? 2.5 : 3.5;
- const angle = (factor * Math.atan2(offset.y, offset.x) + offs * Math.PI) % twoPi;
-
- const index = Math.round((angle / twoPi) * 8) % 8;
- return index;
-}
-
/**
* Compare two floats for epsilon equality
* @param {number} a
@@ -331,15 +203,6 @@ export function epsilonCompare(a, b, epsilon = 1e-5) {
return Math.abs(a - b) < epsilon;
}
-/**
- * Compare a float for epsilon equal to 0
- * @param {number} a
- * @returns {boolean}
- */
-export function epsilonIsZero(a) {
- return epsilonCompare(a, 0);
-}
-
/**
* Interpolates two numbers
* @param {number} a
@@ -399,17 +262,6 @@ export function findNiceIntegerValue(num) {
return Math.ceil(findNiceValue(num));
}
-/**
- * Smart rounding + fractional handling
- * @param {number} n
- */
-function roundSmart(n) {
- if (n < 100) {
- return n.toFixed(1);
- }
- return Math.round(n);
-}
-
/**
* Formats a big number
* @param {number} num
@@ -477,92 +329,12 @@ export function formatBigNumberFull(num, divider = T.global.thousandsDivider) {
return out.substring(0, out.length - 1);
}
-/**
- * Delayes a promise so that it will resolve after a *minimum* amount of time only
- * @param {Promise} promise The promise to delay
- * @param {number} minTimeMs The time to make it run at least
- * @returns {Promise} The delayed promise
- */
-export function artificialDelayedPromise(promise, minTimeMs = 500) {
- if (G_IS_DEV && globalConfig.debug.noArtificialDelays) {
- return promise;
- }
-
- const startTime = performance.now();
- return promise.then(
- result => {
- const timeTaken = performance.now() - startTime;
- const waitTime = Math.floor(minTimeMs - timeTaken);
- if (waitTime > 0) {
- return new Promise(resolve => {
- setTimeout(() => {
- resolve(result);
- }, waitTime);
- });
- } else {
- return result;
- }
- },
- error => {
- const timeTaken = performance.now() - startTime;
- const waitTime = Math.floor(minTimeMs - timeTaken);
- if (waitTime > 0) {
- // @ts-ignore
- return new Promise((resolve, reject) => {
- setTimeout(() => {
- reject(error);
- }, waitTime);
- });
- } else {
- throw error;
- }
- }
- );
-}
-
-/**
- * Computes a sine-based animation which pulsates from 0 .. 1 .. 0
- * @param {number} time Current time in seconds
- * @param {number} duration Duration of the full pulse in seconds
- * @param {number} seed Seed to offset the animation
- */
-export function pulseAnimation(time, duration = 1.0, seed = 0.0) {
- return Math.sin((time * Math.PI * 2.0) / duration + seed * 5642.86729349) * 0.5 + 0.5;
-}
-
-/**
- * Returns the smallest angle between two angles
- * @param {number} a
- * @param {number} b
- * @returns {number} 0 .. 2 PI
- */
-export function smallestAngle(a, b) {
- return safeMod(a - b + Math.PI, 2.0 * Math.PI) - Math.PI;
-}
-
-/**
- * Modulo which works for negative numbers
- * @param {number} n
- * @param {number} m
- */
-export function safeMod(n, m) {
- return ((n % m) + m) % m;
-}
-
-/**
- * Wraps an angle between 0 and 2 pi
- * @param {number} angle
- */
-export function wrapAngle(angle) {
- return safeMod(angle, 2.0 * Math.PI);
-}
-
/**
* Waits two frames so the ui is updated
* @returns {Promise}
*/
export function waitNextFrame() {
- return new Promise(function (resolve, reject) {
+ return new Promise(function (resolve) {
window.requestAnimationFrame(function () {
window.requestAnimationFrame(function () {
resolve();
@@ -617,27 +389,13 @@ export function clamp(v, minimum = 0, maximum = 1) {
return Math.max(minimum, Math.min(maximum, v));
}
-/**
- * Measures how long a function took
- * @param {string} name
- * @param {function():void} target
- */
-export function measure(name, target) {
- const now = performance.now();
- for (let i = 0; i < 25; ++i) {
- target();
- }
- const dur = (performance.now() - now) / 25.0;
- console.warn("->", name, "took", dur.toFixed(2), "ms");
-}
-
/**
* Helper method to create a new div element
* @param {string=} id
* @param {Array=} classes
* @param {string=} innerHTML
*/
-export function makeDivElement(id = null, classes = [], innerHTML = "") {
+function makeDivElement(id = null, classes = [], innerHTML = "") {
const div = document.createElement("div");
if (id) {
div.id = id;
@@ -662,20 +420,6 @@ export function makeDiv(parent, id = null, classes = [], innerHTML = "") {
return div;
}
-/**
- * Helper method to create a new div and place before reference Node
- * @param {Element} parent
- * @param {Element} referenceNode
- * @param {string=} id
- * @param {Array=} classes
- * @param {string=} innerHTML
- */
-export function makeDivBefore(parent, referenceNode, id = null, classes = [], innerHTML = "") {
- const div = makeDivElement(id, classes, innerHTML);
- parent.insertBefore(div, referenceNode);
- return div;
-}
-
/**
* Helper method to create a new button element
* @param {Array=} classes
@@ -703,19 +447,6 @@ export function makeButton(parent, classes = [], innerHTML = "") {
return element;
}
-/**
- * Helper method to create a new button and place before reference Node
- * @param {Element} parent
- * @param {Element} referenceNode
- * @param {Array=} classes
- * @param {string=} innerHTML
- */
-export function makeButtonBefore(parent, referenceNode, classes = [], innerHTML = "") {
- const element = makeButtonElement(classes, innerHTML);
- parent.insertBefore(element, referenceNode);
- return element;
-}
-
/**
* Removes all children of the given element
* @param {Element} elem
@@ -728,20 +459,10 @@ export function removeAllChildren(elem) {
}
}
-export function smartFadeNumber(current, newOne, minFade = 0.01, maxFade = 0.9) {
- const tolerance = Math.min(current, newOne) * 0.5 + 10;
- let fade = minFade;
- if (Math.abs(current - newOne) < tolerance) {
- fade = maxFade;
- }
-
- return current * fade + newOne * (1 - fade);
-}
-
/**
* Fixes lockstep simulation by converting times like 34.0000000003 to 34.00.
- * We use 3 digits of precision, this allows to store sufficient precision of 1 ms without
- * the risk to simulation errors due to resync issues
+ * We use 3 digits of precision, this allows us to store precision of 1 ms without
+ * the risking simulation errors due to resync issues
* @param {number} value
*/
export function quantizeFloat(value) {
@@ -840,37 +561,6 @@ export function isSupportedBrowser() {
}
}
-/**
- * Helper function to create a json schema object
- * @param {any} properties
- */
-export function schemaObject(properties) {
- return {
- type: "object",
- required: Object.keys(properties).slice(),
- additionalProperties: false,
- properties,
- };
-}
-
-/**
- * Quickly
- * @param {number} x
- * @param {number} y
- * @param {number} deg
- * @returns {Vector}
- */
-export function fastRotateMultipleOf90(x, y, deg) {
- switch (deg) {
- case 0: {
- return new Vector(x, y);
- }
- case 90: {
- return new Vector(x, y);
- }
- }
-}
-
/**
* Formats an amount of seconds into something like "5s ago"
* @param {number} secs Seconds
@@ -928,31 +618,6 @@ export function formatSeconds(secs) {
}
}
-/**
- * Generates a file download
- * @param {string} filename
- * @param {string} text
- */
-export function generateFileDownload(filename, text) {
- var element = document.createElement("a");
- element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(text));
- element.setAttribute("download", filename);
-
- element.style.display = "none";
- document.body.appendChild(element);
-
- element.click();
- document.body.removeChild(element);
-}
-
-/**
- * Capitalizes the first letter
- * @param {string} str
- */
-export function capitalizeFirstLetter(str) {
- return str.substr(0, 1).toUpperCase() + str.substr(1).toLowerCase();
-}
-
/**
* Formats a number like 2.5 to "2.5 items / s"
* @param {number} speed
diff --git a/src/js/game/base_item.js b/src/js/game/base_item.js
index d0da5fa1..3a79ed3b 100644
--- a/src/js/game/base_item.js
+++ b/src/js/game/base_item.js
@@ -1,6 +1,5 @@
import { DrawParameters } from "../core/draw_parameters";
import { BasicSerializableObject } from "../savegame/serialization";
-import { enumLayer } from "./root";
/** @enum {string} */
export const enumItemType = {
@@ -13,15 +12,6 @@ export const enumItemType = {
genericEnergy: "genericEnergy",
};
-/** @enum {enumLayer} */
-export const enumItemTypeToLayer = {
- [enumItemType.shape]: enumLayer.regular,
- [enumItemType.color]: enumLayer.regular,
- [enumItemType.positiveEnergy]: enumLayer.wires,
- [enumItemType.negativeEnergy]: enumLayer.wires,
- [enumItemType.genericEnergy]: enumLayer.wires,
-};
-
/**
* Class for items on belts etc. Not an entity for performance reasons
*/
diff --git a/src/js/game/belt_path.js b/src/js/game/belt_path.js
index 0b6da48c..5abcef3f 100644
--- a/src/js/game/belt_path.js
+++ b/src/js/game/belt_path.js
@@ -1,14 +1,14 @@
import { globalConfig } from "../core/config";
import { DrawParameters } from "../core/draw_parameters";
+import { gItemRegistry } from "../core/global_registries";
import { createLogger } from "../core/logging";
+import { Rectangle } from "../core/rectangle";
import { epsilonCompare, round4Digits } from "../core/utils";
-import { Vector } from "../core/vector";
+import { enumDirection, enumDirectionToVector, Vector, enumInvertedDirections } from "../core/vector";
+import { BasicSerializableObject, types } from "../savegame/serialization";
import { BaseItem } from "./base_item";
import { Entity } from "./entity";
import { GameRoot, enumLayer } from "./root";
-import { Rectangle } from "../core/rectangle";
-import { BasicSerializableObject, types } from "../savegame/serialization";
-import { gItemRegistry } from "../core/global_registries";
const logger = createLogger("belt_path");
@@ -115,22 +115,7 @@ export class BeltPath extends BasicSerializableObject {
* @returns {boolean}
*/
canAcceptItem() {
- return this.spacingToFirstItem >= this.getItemSpacing();
- }
-
- /**
- * Returns the spacing between items
- */
- getItemSpacing() {
- return globalConfig.beltItemSpacingByLayer[this.layer];
- }
-
- /**
- * Returns the layer of the this path
- * @returns {enumLayer}
- */
- getLayer() {
- return this.entityPath[0].layer;
+ return this.spacingToFirstItem >= globalConfig.itemSpacingOnBelts;
}
/**
@@ -138,15 +123,15 @@ export class BeltPath extends BasicSerializableObject {
* @param {BaseItem} item
*/
tryAcceptItem(item) {
- if (this.spacingToFirstItem >= this.getItemSpacing()) {
+ if (this.spacingToFirstItem >= globalConfig.itemSpacingOnBelts) {
// So, since we already need one tick to accept this item we will add this directly.
const beltProgressPerTick =
- this.root.hubGoals.getBeltBaseSpeed(this.layer) *
+ this.root.hubGoals.getBeltBaseSpeed() *
this.root.dynamicTickrate.deltaSeconds *
- this.getItemSpacing();
+ globalConfig.itemSpacingOnBelts;
// First, compute how much progress we can make *at max*
- const maxProgress = Math.max(0, this.spacingToFirstItem - this.getItemSpacing());
+ const maxProgress = Math.max(0, this.spacingToFirstItem - globalConfig.itemSpacingOnBelts);
const initialProgress = Math.min(maxProgress, beltProgressPerTick);
this.items.unshift([this.spacingToFirstItem - initialProgress, item]);
@@ -167,7 +152,7 @@ export class BeltPath extends BasicSerializableObject {
* @returns {BaseItem|null}
*/
findItemAtTile(tile) {
- // TODO: This breaks color blind mode otherwise
+ // @TODO: This breaks color blind mode otherwise
return null;
}
@@ -186,27 +171,81 @@ export class BeltPath extends BasicSerializableObject {
}
/**
- * Updates all ejectors on the path, so that only the last ejector
+ * Recomputes cache variables once the path was changed
*/
onPathChanged() {
- this.ejectorComp = this.entityPath[this.entityPath.length - 1].components.ItemEjector;
- this.ejectorSlot = this.ejectorComp.slots[0];
+ this.acceptorTarget = this.computeAcceptingEntityAndSlot();
+ }
- for (let i = 0; i < this.entityPath.length; ++i) {
- const ejectorComp = this.entityPath[i].components.ItemEjector;
- const isLast = i === this.entityPath.length - 1;
- ejectorComp.enabled = isLast;
+ /**
+ * Called by the belt system when the surroundings changed
+ */
+ onSurroundingsChanged() {
+ this.onPathChanged();
+ }
- // Clear all slots of non-end entities
- if (!isLast) {
- for (let k = 0; k < ejectorComp.slots.length; ++k) {
- ejectorComp.slots[k].item = null;
- ejectorComp.slots[k].progress = 0.0;
+ /**
+ * Finds the entity which accepts our items
+ * @return {{ entity: Entity, slot: number, direction?: enumDirection }}
+ */
+ computeAcceptingEntityAndSlot() {
+ const lastEntity = this.entityPath[this.entityPath.length - 1];
+ const lastStatic = lastEntity.components.StaticMapEntity;
+ const lastBeltComp = lastEntity.components.Belt;
+
+ // Figure out where and into which direction we eject items
+ const ejectSlotWsTile = lastStatic.localTileToWorld(new Vector(0, 0));
+ const ejectSlotWsDirection = lastStatic.localDirectionToWorld(lastBeltComp.direction);
+ const ejectSlotWsDirectionVector = enumDirectionToVector[ejectSlotWsDirection];
+ const ejectSlotTargetWsTile = ejectSlotWsTile.add(ejectSlotWsDirectionVector);
+
+ // Try to find the given acceptor component to take the item
+ const targetEntity = this.root.map.getLayerContentXY(
+ ejectSlotTargetWsTile.x,
+ ejectSlotTargetWsTile.y,
+ enumLayer.regular
+ );
+
+ if (targetEntity) {
+ const targetStaticComp = targetEntity.components.StaticMapEntity;
+ const targetBeltComp = targetEntity.components.Belt;
+
+ // Check for belts (special case)
+ if (targetBeltComp) {
+ const beltAcceptingDirection = targetStaticComp.localDirectionToWorld(enumDirection.top);
+ if (ejectSlotWsDirection === beltAcceptingDirection) {
+ return {
+ entity: targetEntity,
+ direction: null,
+ slot: 0,
+ };
}
}
- }
- this.layer = this.entityPath[0].layer;
+ // Check for item acceptors
+ const targetAcceptorComp = targetEntity.components.ItemAcceptor;
+ if (!targetAcceptorComp) {
+ // Entity doesn't accept items
+ return;
+ }
+
+ const ejectingDirection = targetStaticComp.worldDirectionToLocal(ejectSlotWsDirection);
+ const matchingSlot = targetAcceptorComp.findMatchingSlot(
+ targetStaticComp.worldToLocalTile(ejectSlotTargetWsTile),
+ ejectingDirection
+ );
+
+ if (!matchingSlot) {
+ // No matching slot found
+ return;
+ }
+
+ return {
+ entity: targetEntity,
+ slot: matchingSlot.index,
+ direction: enumInvertedDirections[ejectingDirection],
+ };
+ }
}
// Following code will be compiled out outside of dev versions
@@ -251,11 +290,6 @@ export class BeltPath extends BasicSerializableObject {
return fail("Reference to destroyed entity " + entity.uid);
}
- const enabledState = i === this.entityPath.length - 1;
- if (entity.components.ItemEjector.enabled !== enabledState) {
- return fail("Item ejector enabled state is not synchronized (index =" + i + ")");
- }
-
const followUp = this.root.systemMgr.systems.belt.findFollowUpEntity(entity);
if (!followUp) {
return fail(
@@ -283,20 +317,6 @@ export class BeltPath extends BasicSerializableObject {
}
}
- // Check for right ejector component and slot
- if (this.ejectorComp !== this.entityPath[this.entityPath.length - 1].components.ItemEjector) {
- return fail("Stale ejectorComp handle");
- }
- if (this.ejectorSlot !== this.ejectorComp.slots[0]) {
- return fail("Stale ejector slot handle");
- }
- if (!this.ejectorComp) {
- return fail("Ejector comp not set");
- }
- if (!this.ejectorSlot) {
- return fail("Ejector slot not set");
- }
-
// Check spacing
if (this.spacingToFirstItem > this.totalLength + 0.005) {
return fail(
@@ -370,20 +390,12 @@ export class BeltPath extends BasicSerializableObject {
const beltComp = entity.components.Belt;
- // If the last belt has something on its ejector, put that into the path first
- const pendingItem = this.ejectorComp.takeSlotItem(0);
- if (pendingItem) {
- // Ok, so we have a pending item
- DEBUG && logger.log("Taking pending item and putting it back on the path");
- this.items.push([0, pendingItem]);
- }
-
// Append the entity
this.entityPath.push(entity);
this.onPathChanged();
// Extend the path length
- const additionalLength = beltComp.getEffectiveLengthTiles(entity.layer);
+ const additionalLength = beltComp.getEffectiveLengthTiles();
this.totalLength += additionalLength;
DEBUG && logger.log(" Extended total length by", additionalLength, "to", this.totalLength);
@@ -426,7 +438,7 @@ export class BeltPath extends BasicSerializableObject {
// All items on that belt are simply lost (for now)
- const length = beltComp.getEffectiveLengthTiles(entity.layer);
+ const length = beltComp.getEffectiveLengthTiles();
// Extend the length of this path
this.totalLength += length;
@@ -478,7 +490,7 @@ export class BeltPath extends BasicSerializableObject {
const beltComp = entity.components.Belt;
beltComp.assignedPath = null;
- const entityLength = beltComp.getEffectiveLengthTiles(entity.layer);
+ const entityLength = beltComp.getEffectiveLengthTiles();
assert(this.entityPath.indexOf(entity) >= 0, "Entity not contained for split");
assert(this.entityPath.indexOf(entity) !== 0, "Entity is first");
assert(this.entityPath.indexOf(entity) !== this.entityPath.length - 1, "Entity is last");
@@ -496,7 +508,7 @@ export class BeltPath extends BasicSerializableObject {
++firstPathEntityCount;
firstPathEndEntity = otherEntity;
- firstPathLength += otherEntity.components.Belt.getEffectiveLengthTiles(otherEntity.layer);
+ firstPathLength += otherEntity.components.Belt.getEffectiveLengthTiles();
}
DEBUG &&
@@ -640,7 +652,7 @@ export class BeltPath extends BasicSerializableObject {
// Ok, first remove the entity
const beltComp = entity.components.Belt;
- const beltLength = beltComp.getEffectiveLengthTiles(entity.layer);
+ const beltLength = beltComp.getEffectiveLengthTiles();
DEBUG &&
logger.log(
@@ -749,7 +761,7 @@ export class BeltPath extends BasicSerializableObject {
// Ok, first remove the entity
const beltComp = entity.components.Belt;
- const beltLength = beltComp.getEffectiveLengthTiles(entity.layer);
+ const beltLength = beltComp.getEffectiveLengthTiles();
DEBUG &&
logger.log(
@@ -889,7 +901,7 @@ export class BeltPath extends BasicSerializableObject {
beltComp.assignedPath = this;
// Update our length
- const additionalLength = beltComp.getEffectiveLengthTiles(entity.layer);
+ const additionalLength = beltComp.getEffectiveLengthTiles();
this.totalLength += additionalLength;
}
@@ -947,7 +959,7 @@ export class BeltPath extends BasicSerializableObject {
let length = 0;
for (let i = 0; i < this.entityPath.length; ++i) {
const entity = this.entityPath[i];
- length += entity.components.Belt.getEffectiveLengthTiles(this.layer);
+ length += entity.components.Belt.getEffectiveLengthTiles();
}
return length;
}
@@ -962,15 +974,15 @@ export class BeltPath extends BasicSerializableObject {
// Divide by item spacing on belts since we use throughput and not speed
let beltSpeed =
- this.root.hubGoals.getBeltBaseSpeed(this.layer) *
+ this.root.hubGoals.getBeltBaseSpeed() *
this.root.dynamicTickrate.deltaSeconds *
- this.getItemSpacing();
+ globalConfig.itemSpacingOnBelts;
if (G_IS_DEV && globalConfig.debug.instantBelts) {
beltSpeed *= 100;
}
- let minimumDistance = this.ejectorSlot.item ? this.getItemSpacing() : 0;
+ let minimumDistance = 0;
// Try to reduce spacing
let remainingAmount = beltSpeed;
@@ -991,13 +1003,13 @@ export class BeltPath extends BasicSerializableObject {
break;
}
- minimumDistance = this.getItemSpacing();
+ minimumDistance = globalConfig.itemSpacingOnBelts;
}
+ // Check if we have an item which is ready to be emitted
const lastItem = this.items[this.items.length - 1];
- if (lastItem && lastItem[_nextDistance] === 0) {
- // Take over
- if (this.ejectorComp.tryEject(0, lastItem[_item])) {
+ if (lastItem && lastItem[_nextDistance] === 0 && this.acceptorTarget) {
+ if (this.tryHandOverItem(lastItem[_item])) {
this.items.pop();
}
}
@@ -1007,6 +1019,47 @@ export class BeltPath extends BasicSerializableObject {
}
}
+ /**
+ * Tries to hand over the item to the end entity
+ * @param {BaseItem} item
+ */
+ tryHandOverItem(item) {
+ if (!this.acceptorTarget) {
+ return;
+ }
+
+ const targetAcceptorComp = this.acceptorTarget.entity.components.ItemAcceptor;
+
+ // Check if the acceptor has a filter for example
+ if (targetAcceptorComp && !targetAcceptorComp.canAcceptItem(this.acceptorTarget.slot, item)) {
+ // Well, this item is not accepted
+ return false;
+ }
+
+ // Try to pass over
+ if (
+ this.root.systemMgr.systems.itemEjector.tryPassOverItem(
+ item,
+ this.acceptorTarget.entity,
+ this.acceptorTarget.slot
+ )
+ ) {
+ // Trigger animation on the acceptor comp
+ const targetAcceptorComp = this.acceptorTarget.entity.components.ItemAcceptor;
+ if (targetAcceptorComp) {
+ targetAcceptorComp.onItemAccepted(
+ this.acceptorTarget.slot,
+ this.acceptorTarget.direction,
+ item
+ );
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
/**
* Computes a world space position from the given progress
* @param {number} progress
@@ -1020,14 +1073,14 @@ export class BeltPath extends BasicSerializableObject {
for (let i = 0; i < this.entityPath.length; ++i) {
const beltComp = this.entityPath[i].components.Belt;
- const localLength = beltComp.getEffectiveLengthTiles(this.layer);
+ const localLength = beltComp.getEffectiveLengthTiles();
if (currentLength + localLength >= progress || i === this.entityPath.length - 1) {
// Min required here due to floating point issues
const localProgress = Math.min(1.0, progress - currentLength);
assert(localProgress >= 0.0, "Invalid local progress: " + localProgress);
- const localSpace = beltComp.transformBeltToLocalSpace(localProgress, this.layer);
+ const localSpace = beltComp.transformBeltToLocalSpace(localProgress);
return this.entityPath[i].components.StaticMapEntity.localTileToWorld(localSpace);
}
currentLength += localLength;
@@ -1045,11 +1098,6 @@ export class BeltPath extends BasicSerializableObject {
return;
}
- if (this.entityPath[0].layer !== this.root.currentLayer) {
- // Don't draw
- return;
- }
-
parameters.context.fillStyle = "#d79a25";
parameters.context.strokeStyle = "#d79a25";
parameters.context.beginPath();
@@ -1131,10 +1179,10 @@ export class BeltPath extends BasicSerializableObject {
for (let i = 0; i < this.entityPath.length; ++i) {
const entity = this.entityPath[i];
const beltComp = entity.components.Belt;
- const beltLength = beltComp.getEffectiveLengthTiles(this.layer);
+ const beltLength = beltComp.getEffectiveLengthTiles();
// Check if the current items are on the belt
- while (trackPos + beltLength >= currentItemPos) {
+ while (trackPos + beltLength >= currentItemPos - 1e-51) {
// Its on the belt, render it now
const staticComp = entity.components.StaticMapEntity;
assert(
@@ -1142,7 +1190,7 @@ export class BeltPath extends BasicSerializableObject {
"invalid track pos: " + currentItemPos + " vs " + trackPos + " (l =" + beltLength + ")"
);
- const localPos = beltComp.transformBeltToLocalSpace(currentItemPos - trackPos, this.layer);
+ const localPos = beltComp.transformBeltToLocalSpace(currentItemPos - trackPos);
const worldPos = staticComp.localTileToWorld(localPos).toWorldSpaceCenterOfTile();
const distanceAndItem = this.items[currentItemIndex];
diff --git a/src/js/game/blueprint.js b/src/js/game/blueprint.js
index e1ac2dec..ecffdc31 100644
--- a/src/js/game/blueprint.js
+++ b/src/js/game/blueprint.js
@@ -92,13 +92,7 @@ export class Blueprint {
parameters.context.globalAlpha = 1;
}
- staticComp.drawSpriteOnFullEntityBounds(
- parameters,
- staticComp.getBlueprintSprite(),
- 0,
- true,
- newPos
- );
+ staticComp.drawSpriteOnFullEntityBounds(parameters, staticComp.getBlueprintSprite(), 0, newPos);
}
parameters.context.globalAlpha = 1;
}
diff --git a/src/js/game/building_codes.js b/src/js/game/building_codes.js
index ea331272..05c27f57 100644
--- a/src/js/game/building_codes.js
+++ b/src/js/game/building_codes.js
@@ -1,5 +1,8 @@
-import { MetaBuilding, defaultBuildingVariant } from "./meta_building";
+/* typehints:start */
+import { MetaBuilding } from "./meta_building";
import { AtlasSprite } from "../core/sprites";
+import { Vector } from "../core/vector";
+/* typehints:end */
/**
* @typedef {{
@@ -7,6 +10,7 @@ import { AtlasSprite } from "../core/sprites";
* metaInstance?: MetaBuilding,
* variant?: string,
* rotationVariant?: number,
+ * tileSize?: Vector,
* sprite?: AtlasSprite,
* blueprintSprite?: AtlasSprite,
* silhouetteColor?: string
@@ -22,18 +26,25 @@ export const gBuildingVariants = {
};
/**
- *
- * @param {*} id
- * @param {*} meta
- * @param {*} variant
- * @param {*} rotationVariant
+ * Registers a new variant
+ * @param {number} id
+ * @param {typeof MetaBuilding} meta
+ * @param {string} variant
+ * @param {number} rotationVariant
*/
-export function registerBuildingVariant(id, meta, variant = defaultBuildingVariant, rotationVariant = 0) {
+export function registerBuildingVariant(
+ id,
+ meta,
+ variant = "default" /* FIXME: Circular dependency, actually its defaultBuildingVariant */,
+ rotationVariant = 0
+) {
assert(!gBuildingVariants[id], "Duplicate id: " + id);
gBuildingVariants[id] = {
metaClass: meta,
variant,
rotationVariant,
+ // @ts-ignore
+ tileSize: new meta().getDimensions(variant),
};
}
diff --git a/src/js/game/buildings/advanced_processor.js b/src/js/game/buildings/advanced_processor.js
deleted file mode 100644
index a688c878..00000000
--- a/src/js/game/buildings/advanced_processor.js
+++ /dev/null
@@ -1,108 +0,0 @@
-import { formatItemsPerSecond } from "../../core/utils";
-import { enumDirection, Vector } from "../../core/vector";
-import { T } from "../../translations";
-import { enumItemType } from "../base_item";
-import { EnergyConsumerComponent } from "../components/energy_consumer";
-import { ItemAcceptorComponent } from "../components/item_acceptor";
-import { ItemEjectorComponent } from "../components/item_ejector";
-import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor";
-import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins";
-import { Entity } from "../entity";
-import { MetaBuilding } from "../meta_building";
-import { enumLayer, GameRoot } from "../root";
-
-export class MetaAdvancedProcessorBuilding extends MetaBuilding {
- constructor() {
- super("advanced_processor");
- }
-
- getSilhouetteColor() {
- return "#25d7b8";
- }
-
- getDimensions(variant) {
- return new Vector(2, 2);
- }
-
- /**
- * @param {GameRoot} root
- * @param {string} variant
- * @returns {Array<[string, string]>}
- */
- getAdditionalStatistics(root, variant) {
- const speed = root.hubGoals.getProcessorBaseSpeed(enumItemProcessorTypes.advancedProcessor);
- return [[T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(speed)]];
- }
-
- /**
- * @param {GameRoot} root
- */
- getIsUnlocked(root) {
- // TODO
- return true;
- // return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_cutter_and_trash);
- }
-
- /**
- * Creates the entity at the given location
- * @param {Entity} entity
- */
- setupEntityComponents(entity) {
- entity.addComponent(
- new ItemProcessorComponent({
- inputsPerCharge: 1,
- processorType: enumItemProcessorTypes.advancedProcessor,
- })
- );
- entity.addComponent(
- new ItemEjectorComponent({
- slots: [
- { pos: new Vector(1, 0), direction: enumDirection.right },
- { pos: new Vector(1, 0), direction: enumDirection.top, layer: enumLayer.wires },
- ],
- })
- );
- entity.addComponent(
- new EnergyConsumerComponent({
- bufferSize: 3,
- perCharge: 1,
- batteryPosition: new Vector(0.63, 0.7),
- acceptorSlotIndex: 1,
- ejectorSlotIndex: 1,
- })
- );
-
- entity.addComponent(
- new WiredPinsComponent({
- slots: [
- {
- pos: new Vector(0, 0),
- direction: enumDirection.top,
- type: enumPinSlotType.positiveEnergyAcceptor,
- },
- {
- pos: new Vector(1, 0),
- direction: enumDirection.top,
- type: enumPinSlotType.negativeEnergyEjector,
- },
- ],
- })
- );
- entity.addComponent(
- new ItemAcceptorComponent({
- slots: [
- {
- pos: new Vector(0, 1),
- directions: [enumDirection.left],
- },
- {
- pos: new Vector(0, 0),
- directions: [enumDirection.top],
- filter: enumItemType.positiveEnergy,
- layer: enumLayer.wires,
- },
- ],
- })
- );
- }
-}
diff --git a/src/js/game/buildings/belt_base.js b/src/js/game/buildings/belt_base.js
index a87589a3..322c345e 100644
--- a/src/js/game/buildings/belt_base.js
+++ b/src/js/game/buildings/belt_base.js
@@ -3,15 +3,35 @@ import { enumAngleToDirection, enumDirection, Vector } from "../../core/vector";
import { SOUNDS } from "../../platform/sound";
import { T } from "../../translations";
import { BeltComponent } from "../components/belt";
-import { ItemAcceptorComponent } from "../components/item_acceptor";
-import { ItemEjectorComponent } from "../components/item_ejector";
-import { ReplaceableMapEntityComponent } from "../components/replaceable_map_entity";
import { Entity } from "../entity";
import { MetaBuilding } from "../meta_building";
-import { GameRoot, enumLayer } from "../root";
+import { GameRoot } from "../root";
export const arrayBeltVariantToRotation = [enumDirection.top, enumDirection.left, enumDirection.right];
+const overlayMatrices = {
+ [enumDirection.top]: {
+ 0: [0, 1, 0, 0, 1, 0, 0, 1, 0],
+ 90: [0, 0, 0, 1, 1, 1, 0, 0, 0],
+ 180: [0, 1, 0, 0, 1, 0, 0, 1, 0],
+ 270: [0, 0, 0, 1, 1, 1, 0, 0, 0],
+ },
+
+ [enumDirection.left]: {
+ 0: [0, 0, 0, 1, 1, 0, 0, 1, 0],
+ 90: [0, 1, 0, 1, 1, 0, 0, 0, 0],
+ 180: [0, 1, 0, 0, 1, 1, 0, 0, 0],
+ 270: [0, 0, 0, 0, 1, 1, 0, 1, 0],
+ },
+
+ [enumDirection.right]: {
+ 0: [0, 0, 0, 0, 1, 1, 0, 1, 0],
+ 90: [0, 0, 0, 1, 1, 0, 0, 1, 0],
+ 180: [0, 1, 0, 1, 1, 0, 0, 0, 0],
+ 270: [0, 1, 0, 0, 1, 1, 0, 0, 0],
+ },
+};
+
export class MetaBeltBaseBuilding extends MetaBuilding {
getHasDirectionLockAvailable() {
return true;
@@ -23,7 +43,7 @@ export class MetaBeltBaseBuilding extends MetaBuilding {
* @returns {Array<[string, string]>}
*/
getAdditionalStatistics(root, variant) {
- const beltSpeed = root.hubGoals.getBeltBaseSpeed(enumLayer.regular);
+ const beltSpeed = root.hubGoals.getBeltBaseSpeed();
return [[T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(beltSpeed)]];
}
@@ -43,6 +63,21 @@ export class MetaBeltBaseBuilding extends MetaBuilding {
return null;
}
+ getIsReplaceable() {
+ return true;
+ }
+
+ /**
+ *
+ * @param {number} rotation
+ * @param {number} rotationVariant
+ * @param {string} variant
+ * @param {Entity} entity
+ */
+ getSpecialOverlayRenderMatrix(rotation, rotationVariant, variant, entity) {
+ return overlayMatrices[entity.components.Belt.direction][rotation];
+ }
+
/**
* Creates the entity at the given location
* @param {Entity} entity
@@ -53,34 +88,6 @@ export class MetaBeltBaseBuilding extends MetaBuilding {
direction: enumDirection.top, // updated later
})
);
- // Make this entity replaceabel
- entity.addComponent(new ReplaceableMapEntityComponent());
-
- entity.addComponent(
- new ItemAcceptorComponent({
- slots: [
- {
- pos: new Vector(0, 0),
- directions: [enumDirection.bottom],
- layer: this.getLayer(),
- },
- ],
- animated: false,
- })
- );
-
- entity.addComponent(
- new ItemEjectorComponent({
- slots: [
- {
- pos: new Vector(0, 0),
- direction: enumDirection.top, // updated later
- layer: this.getLayer(),
- },
- ],
- instantEject: true,
- })
- );
}
/**
@@ -90,7 +97,6 @@ export class MetaBeltBaseBuilding extends MetaBuilding {
*/
updateVariants(entity, rotationVariant) {
entity.components.Belt.direction = arrayBeltVariantToRotation[rotationVariant];
- entity.components.ItemEjector.slots[0].direction = arrayBeltVariantToRotation[rotationVariant];
}
/**
@@ -109,7 +115,7 @@ export class MetaBeltBaseBuilding extends MetaBuilding {
const bottomDirection = enumAngleToDirection[(rotation + 180) % 360];
const leftDirection = enumAngleToDirection[(rotation + 270) % 360];
- const { ejectors, acceptors } = root.logic.getEjectorsAndAcceptorsAtTile(tile, layer);
+ const { ejectors, acceptors } = root.logic.getEjectorsAndAcceptorsAtTile(tile);
let hasBottomEjector = false;
let hasRightEjector = false;
diff --git a/src/js/game/buildings/energy_generator.js b/src/js/game/buildings/energy_generator.js
deleted file mode 100644
index 1d7ac18b..00000000
--- a/src/js/game/buildings/energy_generator.js
+++ /dev/null
@@ -1,109 +0,0 @@
-import { enumDirection, Vector } from "../../core/vector";
-import { enumItemType } from "../base_item";
-import { EnergyGeneratorComponent } from "../components/energy_generator";
-import { ItemAcceptorComponent } from "../components/item_acceptor";
-import { ItemEjectorComponent } from "../components/item_ejector";
-import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins";
-import { Entity } from "../entity";
-import { MetaBuilding } from "../meta_building";
-import { enumLayer, GameRoot } from "../root";
-import { enumHubGoalRewards } from "../tutorial_goals";
-
-export class MetaEnergyGenerator extends MetaBuilding {
- constructor() {
- super("energy_generator");
- }
-
- getSilhouetteColor() {
- return "#c425d7";
- }
-
- /**
- * @param {GameRoot} root
- * @param {string} variant
- * @returns {Array<[string, string]>}
- */
- getAdditionalStatistics(root, variant) {
- // TODO
- return [];
- }
-
- getDimensions(variant) {
- return new Vector(2, 2);
- }
-
- /**
- * @param {GameRoot} root
- */
- getIsUnlocked(root) {
- return true;
- // return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_cutter_and_trash);
- }
-
- /**
- * Creates the entity at the given location
- * @param {Entity} entity
- */
- setupEntityComponents(entity) {
- entity.addComponent(
- new ItemAcceptorComponent({
- slots: [
- {
- pos: new Vector(0, 1),
- directions: [enumDirection.bottom],
- filter: enumItemType.shape,
- },
- {
- pos: new Vector(1, 1),
- directions: [enumDirection.bottom],
- filter: enumItemType.shape,
- },
- {
- pos: new Vector(1, 0),
- directions: [enumDirection.top],
- layer: enumLayer.wires,
- filter: enumItemType.negativeEnergy,
- },
- ],
- })
- );
-
- entity.addComponent(
- new ItemEjectorComponent({
- slots: [
- {
- pos: new Vector(0, 0),
- direction: enumDirection.top,
- layer: enumLayer.wires,
- },
- ],
- instantEject: true,
- })
- );
-
- entity.addComponent(
- new EnergyGeneratorComponent({
- // Set by the energy generator system later
- requiredKey: null,
- wasteAcceptorSlotIndex: 2,
- })
- );
-
- entity.addComponent(
- new WiredPinsComponent({
- slots: [
- {
- pos: new Vector(0, 0),
- type: enumPinSlotType.positiveEnergyEjector,
- direction: enumDirection.top,
- },
- {
- pos: new Vector(1, 0),
- type: enumPinSlotType.negativeEnergyAcceptor,
- direction: enumDirection.top,
- },
- ],
- })
- );
- }
-}
diff --git a/src/js/game/buildings/hub.js b/src/js/game/buildings/hub.js
index 4f0e0d80..f67032b7 100644
--- a/src/js/game/buildings/hub.js
+++ b/src/js/game/buildings/hub.js
@@ -3,9 +3,9 @@ import { enumItemType } from "../base_item";
import { HubComponent } from "../components/hub";
import { ItemAcceptorComponent } from "../components/item_acceptor";
import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor";
-import { UnremovableComponent } from "../components/unremovable";
import { Entity } from "../entity";
import { MetaBuilding } from "../meta_building";
+import { WiredPinsComponent, enumPinSlotType } from "../components/wired_pins";
export class MetaHubBuilding extends MetaBuilding {
constructor() {
@@ -33,6 +33,10 @@ export class MetaHubBuilding extends MetaBuilding {
return null;
}
+ getIsRemovable() {
+ return false;
+ }
+
/**
* Creates the entity at the given location
* @param {Entity} entity
@@ -46,7 +50,18 @@ export class MetaHubBuilding extends MetaBuilding {
})
);
- entity.addComponent(new UnremovableComponent());
+ entity.addComponent(
+ new WiredPinsComponent({
+ slots: [
+ {
+ pos: new Vector(0, 0),
+ type: enumPinSlotType.logicalEjector,
+ direction: enumDirection.top,
+ },
+ ],
+ })
+ );
+
entity.addComponent(
new ItemAcceptorComponent({
slots: [
diff --git a/src/js/game/buildings/miner.js b/src/js/game/buildings/miner.js
index ed87bc85..1a9c97ff 100644
--- a/src/js/game/buildings/miner.js
+++ b/src/js/game/buildings/miner.js
@@ -6,11 +6,13 @@ import { MetaBuilding, defaultBuildingVariant } from "../meta_building";
import { GameRoot } from "../root";
import { enumHubGoalRewards } from "../tutorial_goals";
import { T } from "../../translations";
-import { round1Digit, round2Digits, formatItemsPerSecond } from "../../core/utils";
+import { formatItemsPerSecond } from "../../core/utils";
/** @enum {string} */
export const enumMinerVariants = { chainable: "chainable" };
+const overlayMatrix = [1, 1, 1, 1, 0, 1, 1, 1, 1];
+
export class MetaMinerBuilding extends MetaBuilding {
constructor() {
super("miner");
@@ -41,6 +43,16 @@ export class MetaMinerBuilding extends MetaBuilding {
return super.getAvailableVariants(root);
}
+ /**
+ * @param {number} rotation
+ * @param {number} rotationVariant
+ * @param {string} variant
+ * @param {Entity} entity
+ */
+ getSpecialOverlayRenderMatrix(rotation, rotationVariant, variant, entity) {
+ return overlayMatrix;
+ }
+
/**
* Creates the entity at the given location
* @param {Entity} entity
diff --git a/src/js/game/buildings/splitter.js b/src/js/game/buildings/splitter.js
index 12f0e6e7..219f02cf 100644
--- a/src/js/game/buildings/splitter.js
+++ b/src/js/game/buildings/splitter.js
@@ -1,14 +1,14 @@
-import { globalConfig } from "../../core/config";
import { enumDirection, Vector } from "../../core/vector";
import { ItemAcceptorComponent } from "../components/item_acceptor";
import { ItemEjectorComponent } from "../components/item_ejector";
import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor";
import { Entity } from "../entity";
import { MetaBuilding, defaultBuildingVariant } from "../meta_building";
-import { GameRoot, enumLayer } from "../root";
+import { GameRoot } from "../root";
import { enumHubGoalRewards } from "../tutorial_goals";
import { T } from "../../translations";
import { formatItemsPerSecond } from "../../core/utils";
+import { BeltUnderlaysComponent } from "../components/belt_underlays";
/** @enum {string} */
export const enumSplitterVariants = { compact: "compact", compactInverse: "compact-inverse" };
@@ -88,6 +88,8 @@ export class MetaSplitterBuilding extends MetaBuilding {
slots: [], // set later
})
);
+
+ entity.addComponent(new BeltUnderlaysComponent({ underlays: [] }));
}
/**
@@ -115,9 +117,9 @@ export class MetaSplitterBuilding extends MetaBuilding {
{ pos: new Vector(1, 0), direction: enumDirection.top },
]);
- entity.components.ItemAcceptor.beltUnderlays = [
- { pos: new Vector(0, 0), direction: enumDirection.top, layer: enumLayer.regular },
- { pos: new Vector(1, 0), direction: enumDirection.top, layer: enumLayer.regular },
+ entity.components.BeltUnderlays.underlays = [
+ { pos: new Vector(0, 0), direction: enumDirection.top },
+ { pos: new Vector(1, 0), direction: enumDirection.top },
];
break;
@@ -143,8 +145,8 @@ export class MetaSplitterBuilding extends MetaBuilding {
{ pos: new Vector(0, 0), direction: enumDirection.top },
]);
- entity.components.ItemAcceptor.beltUnderlays = [
- { pos: new Vector(0, 0), direction: enumDirection.top, layer: enumLayer.regular },
+ entity.components.BeltUnderlays.underlays = [
+ { pos: new Vector(0, 0), direction: enumDirection.top },
];
break;
diff --git a/src/js/game/buildings/underground_belt.js b/src/js/game/buildings/underground_belt.js
index 2c4f6a1d..498b19a0 100644
--- a/src/js/game/buildings/underground_belt.js
+++ b/src/js/game/buildings/underground_belt.js
@@ -25,13 +25,31 @@ export const enumUndergroundBeltVariantToTier = {
[enumUndergroundBeltVariants.tier2]: 1,
};
+const overlayMatrices = [
+ // Sender
+ {
+ 0: [1, 1, 1, 0, 1, 0, 0, 1, 0],
+ 90: [0, 0, 0, 1, 1, 1, 0, 0, 0],
+ 180: [0, 1, 0, 0, 1, 0, 0, 1, 0],
+ 270: [0, 0, 0, 1, 1, 1, 0, 0, 0],
+ },
+
+ // Receiver
+ {
+ 0: [0, 1, 0, 0, 1, 0, 1, 1, 1],
+ 90: [0, 1, 0, 1, 1, 0, 0, 0, 0],
+ 180: [0, 1, 0, 0, 1, 1, 0, 0, 0],
+ 270: [0, 0, 0, 0, 1, 1, 0, 1, 0],
+ },
+];
+
export class MetaUndergroundBeltBuilding extends MetaBuilding {
constructor() {
super("underground_belt");
}
getSilhouetteColor() {
- return "#555";
+ return "#222";
}
getFlipOrientationAfterPlacement() {
@@ -42,6 +60,16 @@ export class MetaUndergroundBeltBuilding extends MetaBuilding {
return true;
}
+ /**
+ * @param {number} rotation
+ * @param {number} rotationVariant
+ * @param {string} variant
+ * @param {Entity} entity
+ */
+ getSpecialOverlayRenderMatrix(rotation, rotationVariant, variant, entity) {
+ return overlayMatrices[rotationVariant][rotation];
+ }
+
/**
* @param {GameRoot} root
* @param {string} variant
diff --git a/src/js/game/buildings/wire_base.js b/src/js/game/buildings/wire_base.js
deleted file mode 100644
index 6f3ffec8..00000000
--- a/src/js/game/buildings/wire_base.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import { Loader } from "../../core/loader";
-import { enumDirection } from "../../core/vector";
-import { enumLayer } from "../root";
-import { arrayBeltVariantToRotation, MetaBeltBaseBuilding } from "./belt_base";
-
-export class MetaWireBaseBuilding extends MetaBeltBaseBuilding {
- constructor() {
- super("wire");
- }
-
- getSilhouetteColor() {
- return "#c425d7";
- }
-
- getLayer() {
- return enumLayer.wires;
- }
-
- getPreviewSprite(rotationVariant) {
- switch (arrayBeltVariantToRotation[rotationVariant]) {
- case enumDirection.top: {
- return Loader.getSprite("sprites/buildings/wire_top.png");
- }
- case enumDirection.left: {
- return Loader.getSprite("sprites/buildings/wire_left.png");
- }
- case enumDirection.right: {
- return Loader.getSprite("sprites/buildings/wire_right.png");
- }
- default: {
- assertAlways(false, "Invalid belt rotation variant");
- }
- }
- }
-
- getBlueprintSprite(rotationVariant) {
- switch (arrayBeltVariantToRotation[rotationVariant]) {
- case enumDirection.top: {
- return Loader.getSprite("sprites/blueprints/wire_top.png");
- }
- case enumDirection.left: {
- return Loader.getSprite("sprites/blueprints/wire_left.png");
- }
- case enumDirection.right: {
- return Loader.getSprite("sprites/blueprints/wire_right.png");
- }
- default: {
- assertAlways(false, "Invalid belt rotation variant");
- }
- }
- }
-}
diff --git a/src/js/game/buildings/wire_crossings.js b/src/js/game/buildings/wire_crossings.js
deleted file mode 100644
index cb3c933a..00000000
--- a/src/js/game/buildings/wire_crossings.js
+++ /dev/null
@@ -1,120 +0,0 @@
-import { enumDirection, Vector } from "../../core/vector";
-import { enumItemType } from "../base_item";
-import { ItemAcceptorComponent } from "../components/item_acceptor";
-import { ItemEjectorComponent } from "../components/item_ejector";
-import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor";
-import { Entity } from "../entity";
-import { defaultBuildingVariant, MetaBuilding } from "../meta_building";
-import { enumLayer, GameRoot } from "../root";
-
-/** @enum {string} */
-export const enumWireCrossingVariants = {
- // Default = splitter
- merger: "merger",
-};
-
-export class MetaWireCrossingsBuilding extends MetaBuilding {
- constructor() {
- super("wire_crossings");
- }
-
- getDimensions(variant) {
- return new Vector(1, 1);
- }
-
- getSilhouetteColor() {
- return "#c425d7";
- }
-
- getLayer() {
- return enumLayer.wires;
- }
-
- /**
- * @param {GameRoot} root
- */
- getAvailableVariants(root) {
- return [defaultBuildingVariant, enumWireCrossingVariants.merger];
- }
-
- /**
- * @param {GameRoot} root
- */
- getIsUnlocked(root) {
- return true;
- }
-
- /**
- * Creates the entity at the given location
- * @param {Entity} entity
- */
- setupEntityComponents(entity) {
- entity.addComponent(
- new ItemAcceptorComponent({
- slots: [], // set later
- })
- );
-
- entity.addComponent(
- new ItemProcessorComponent({
- inputsPerCharge: 1,
- processorType: enumItemProcessorTypes.splitterWires,
- })
- );
-
- entity.addComponent(
- new ItemEjectorComponent({
- slots: [], // set later
- instantEject: true,
- })
- );
- }
-
- /**
- *
- * @param {Entity} entity
- * @param {number} rotationVariant
- * @param {string} variant
- */
- updateVariants(entity, rotationVariant, variant) {
- switch (variant) {
- case defaultBuildingVariant: {
- entity.components.ItemAcceptor.setSlots([
- {
- pos: new Vector(0, 0),
- directions: [enumDirection.bottom],
- layer: enumLayer.wires,
- },
- ]);
-
- entity.components.ItemEjector.setSlots([
- { pos: new Vector(0, 0), direction: enumDirection.top, layer: enumLayer.wires },
- { pos: new Vector(0, 0), direction: enumDirection.right, layer: enumLayer.wires },
- ]);
-
- break;
- }
- case enumWireCrossingVariants.merger: {
- entity.components.ItemAcceptor.setSlots([
- {
- pos: new Vector(0, 0),
- directions: [enumDirection.top],
- layer: enumLayer.wires,
- },
- {
- pos: new Vector(0, 0),
- directions: [enumDirection.right],
- layer: enumLayer.wires,
- },
- ]);
-
- entity.components.ItemEjector.setSlots([
- { pos: new Vector(0, 0), direction: enumDirection.bottom, layer: enumLayer.wires },
- ]);
- break;
- }
- default:
- assertAlways(false, "Unknown painter variant: " + variant);
- }
- }
-}
diff --git a/src/js/game/colors.js b/src/js/game/colors.js
index 9c7d0d2d..e7219175 100644
--- a/src/js/game/colors.js
+++ b/src/js/game/colors.js
@@ -10,8 +10,6 @@ export const enumColors = {
white: "white",
uncolored: "uncolored",
-
- black: "black",
};
/** @enum {string} */
@@ -26,8 +24,6 @@ export const enumColorToShortcode = {
[enumColors.white]: "w",
[enumColors.uncolored]: "u",
-
- [enumColors.black]: "0",
};
/** @enum {enumColors} */
@@ -54,27 +50,9 @@ export const enumColorsToHexCode = {
// blue + green + red
[enumColors.white]: "#ffffff",
- [enumColors.black]: "#31383a",
-
[enumColors.uncolored]: "#aaaaaa",
};
-/** @enum {enumColors} */
-export const enumInvertedColors = {
- [enumColors.red]: enumColors.cyan,
- [enumColors.green]: enumColors.purple,
- [enumColors.blue]: enumColors.yellow,
-
- [enumColors.yellow]: enumColors.blue,
- [enumColors.purple]: enumColors.green,
- [enumColors.cyan]: enumColors.red,
-
- [enumColors.white]: enumColors.black,
- [enumColors.black]: enumColors.white,
-
- [enumColors.uncolored]: enumColors.uncolored,
-};
-
const c = enumColors;
/** @enum {Object.} */
export const enumColorMixingResults = {
@@ -88,7 +66,6 @@ export const enumColorMixingResults = {
[c.cyan]: c.white,
[c.white]: c.white,
- [c.black]: c.red,
},
// 0, 255, 0
@@ -100,7 +77,6 @@ export const enumColorMixingResults = {
[c.cyan]: c.cyan,
[c.white]: c.white,
- [c.black]: c.green,
},
// 0, 255, 0
@@ -110,20 +86,17 @@ export const enumColorMixingResults = {
[c.cyan]: c.cyan,
[c.white]: c.white,
- [c.black]: c.blue,
},
// 255, 255, 0
[c.yellow]: {
[c.purple]: c.white,
[c.cyan]: c.white,
- [c.black]: c.yellow,
},
// 255, 0, 255
[c.purple]: {
[c.cyan]: c.white,
- [c.black]: c.purple,
},
// 0, 255, 255
@@ -140,24 +113,12 @@ export const enumColorMixingResults = {
[c.uncolored]: {
// auto
},
-
- [c.black]: {
- // auto
- [c.white]: c.uncolored,
- [c.cyan]: c.cyan,
- [c.uncolored]: c.uncolored,
- },
};
// Create same color lookups
for (const color in enumColors) {
enumColorMixingResults[color][color] = color;
-
- // Anything with white is white again, except for black which creates gray
- if (color !== enumColors.black) {
- enumColorMixingResults[color][c.white] = c.white;
- }
-
+ enumColorMixingResults[color][c.white] = c.white;
// Anything with uncolored is the same color
enumColorMixingResults[color][c.uncolored] = color;
}
diff --git a/src/js/game/component.js b/src/js/game/component.js
index 1d44d60f..7d30faff 100644
--- a/src/js/game/component.js
+++ b/src/js/game/component.js
@@ -44,3 +44,9 @@ export class Component extends BasicSerializableObject {
}
/* dev:end */
}
+
+/**
+ * TypeScript does not support Abstract Static methods (https://github.com/microsoft/TypeScript/issues/34516)
+ * One workaround is to declare the type of the component and reference that for static methods
+ * @typedef {typeof Component} StaticComponent
+ */
diff --git a/src/js/game/component_registry.js b/src/js/game/component_registry.js
index d3398937..2c64b5f4 100644
--- a/src/js/game/component_registry.js
+++ b/src/js/game/component_registry.js
@@ -5,14 +5,11 @@ import { ItemEjectorComponent } from "./components/item_ejector";
import { ItemAcceptorComponent } from "./components/item_acceptor";
import { MinerComponent } from "./components/miner";
import { ItemProcessorComponent } from "./components/item_processor";
-import { ReplaceableMapEntityComponent } from "./components/replaceable_map_entity";
import { UndergroundBeltComponent } from "./components/underground_belt";
-import { UnremovableComponent } from "./components/unremovable";
import { HubComponent } from "./components/hub";
import { StorageComponent } from "./components/storage";
-import { EnergyGeneratorComponent } from "./components/energy_generator";
import { WiredPinsComponent } from "./components/wired_pins";
-import { EnergyConsumerComponent } from "./components/energy_consumer";
+import { BeltUnderlaysComponent } from "./components/belt_underlays";
export function initComponentRegistry() {
gComponentRegistry.register(StaticMapEntityComponent);
@@ -21,14 +18,11 @@ export function initComponentRegistry() {
gComponentRegistry.register(ItemAcceptorComponent);
gComponentRegistry.register(MinerComponent);
gComponentRegistry.register(ItemProcessorComponent);
- gComponentRegistry.register(ReplaceableMapEntityComponent);
gComponentRegistry.register(UndergroundBeltComponent);
- gComponentRegistry.register(UnremovableComponent);
gComponentRegistry.register(HubComponent);
gComponentRegistry.register(StorageComponent);
- gComponentRegistry.register(EnergyGeneratorComponent);
gComponentRegistry.register(WiredPinsComponent);
- gComponentRegistry.register(EnergyConsumerComponent);
+ gComponentRegistry.register(BeltUnderlaysComponent);
// IMPORTANT ^^^^^ UPDATE ENTITY COMPONENT STORAGE AFTERWARDS
diff --git a/src/js/game/components/belt.js b/src/js/game/components/belt.js
index e9a0cd80..02197822 100644
--- a/src/js/game/components/belt.js
+++ b/src/js/game/components/belt.js
@@ -2,23 +2,44 @@ import { enumDirection, Vector } from "../../core/vector";
import { types } from "../../savegame/serialization";
import { BeltPath } from "../belt_path";
import { Component } from "../component";
-import { Entity } from "../entity";
-import { enumLayer } from "../root";
export const curvedBeltLength = /* Math.PI / 4 */ 0.78;
+/** @type {import("./item_acceptor").ItemAcceptorSlot} */
+export const FAKE_BELT_ACCEPTOR_SLOT = {
+ pos: new Vector(0, 0),
+ directions: [enumDirection.bottom],
+};
+
+/** @type {Object} */
+export const FAKE_BELT_EJECTOR_SLOT_BY_DIRECTION = {
+ [enumDirection.top]: {
+ pos: new Vector(0, 0),
+ direction: enumDirection.top,
+ item: null,
+ progress: 0,
+ },
+
+ [enumDirection.right]: {
+ pos: new Vector(0, 0),
+ direction: enumDirection.right,
+ item: null,
+ progress: 0,
+ },
+
+ [enumDirection.left]: {
+ pos: new Vector(0, 0),
+ direction: enumDirection.left,
+ item: null,
+ progress: 0,
+ },
+};
+
export class BeltComponent extends Component {
static getId() {
return "Belt";
}
- static getSchema() {
- // The followUpCache field is not serialized.
- return {
- direction: types.string,
- };
- }
-
duplicateWithoutContents() {
return new BeltComponent({ direction: this.direction });
}
@@ -33,9 +54,6 @@ export class BeltComponent extends Component {
this.direction = direction;
- /** @type {Entity} */
- this.followUpCache = null;
-
/**
* The path this belt is contained in, not serialized
* @type {BeltPath}
@@ -45,77 +63,59 @@ export class BeltComponent extends Component {
/**
* Returns the effective length of this belt in tile space
- * @param {enumLayer} layer
* @returns {number}
*/
- getEffectiveLengthTiles(layer) {
- assert(layer, "no layer given");
- if (layer === enumLayer.wires) {
- return 1.0;
- }
+ getEffectiveLengthTiles() {
return this.direction === enumDirection.top ? 1.0 : curvedBeltLength;
}
+ /**
+ * Returns fake acceptor slot used for matching
+ * @returns {import("./item_acceptor").ItemAcceptorSlot}
+ */
+ getFakeAcceptorSlot() {
+ return FAKE_BELT_ACCEPTOR_SLOT;
+ }
+
+ /**
+ * Returns fake acceptor slot used for matching
+ * @returns {import("./item_ejector").ItemEjectorSlot}
+ */
+ getFakeEjectorSlot() {
+ assert(
+ FAKE_BELT_EJECTOR_SLOT_BY_DIRECTION[this.direction],
+ "Invalid belt direction: ",
+ this.direction
+ );
+ return FAKE_BELT_EJECTOR_SLOT_BY_DIRECTION[this.direction];
+ }
+
/**
* Converts from belt space (0 = start of belt ... 1 = end of belt) to the local
* belt coordinates (-0.5|-0.5 to 0.5|0.5)
* @param {number} progress
- * @param {enumLayer} layer
* @returns {Vector}
*/
- transformBeltToLocalSpace(progress, layer) {
+ transformBeltToLocalSpace(progress) {
assert(progress >= 0.0, "Invalid progress ( < 0): " + progress);
+ switch (this.direction) {
+ case enumDirection.top:
+ assert(progress <= 1.02, "Invalid progress: " + progress);
+ return new Vector(0, 0.5 - progress);
- switch (layer) {
- case enumLayer.regular: {
- switch (this.direction) {
- case enumDirection.top:
- assert(progress <= 1.02, "Invalid progress: " + progress);
- return new Vector(0, 0.5 - progress);
-
- case enumDirection.right: {
- assert(progress <= curvedBeltLength + 0.02, "Invalid progress 2: " + progress);
- const arcProgress = (progress / curvedBeltLength) * 0.5 * Math.PI;
- return new Vector(
- 0.5 - 0.5 * Math.cos(arcProgress),
- 0.5 - 0.5 * Math.sin(arcProgress)
- );
- }
- case enumDirection.left: {
- assert(progress <= curvedBeltLength + 0.02, "Invalid progress 3: " + progress);
- const arcProgress = (progress / curvedBeltLength) * 0.5 * Math.PI;
- return new Vector(
- -0.5 + 0.5 * Math.cos(arcProgress),
- 0.5 - 0.5 * Math.sin(arcProgress)
- );
- }
- default:
- assertAlways(false, "Invalid belt direction: " + this.direction);
- return new Vector(0, 0);
- }
+ case enumDirection.right: {
+ assert(progress <= curvedBeltLength + 0.02, "Invalid progress 2: " + progress);
+ const arcProgress = (progress / curvedBeltLength) * 0.5 * Math.PI;
+ return new Vector(0.5 - 0.5 * Math.cos(arcProgress), 0.5 - 0.5 * Math.sin(arcProgress));
}
- case enumLayer.wires: {
- const pow = 0.5;
- switch (this.direction) {
- case enumDirection.top:
- assert(progress <= 1.02, "Invalid progress: " + progress);
- return new Vector(0, 0.5 - progress);
-
- case enumDirection.right: {
- assert(progress <= 1.02, "Invalid progress 2: " + progress);
- return progress > 0.5 ? new Vector(progress - 0.5, 0) : new Vector(0, 0.5 - progress);
- }
- case enumDirection.left: {
- assert(progress <= 1.02, "Invalid progress 3: " + progress);
- return progress > 0.5
- ? new Vector(-progress + 0.5, 0)
- : new Vector(0, 0.5 - progress);
- }
- default:
- assertAlways(false, "Invalid belt direction: " + this.direction);
- return new Vector(0, 0);
- }
+ case enumDirection.left: {
+ assert(progress <= curvedBeltLength + 0.02, "Invalid progress 3: " + progress);
+ const arcProgress = (progress / curvedBeltLength) * 0.5 * Math.PI;
+ return new Vector(-0.5 + 0.5 * Math.cos(arcProgress), 0.5 - 0.5 * Math.sin(arcProgress));
}
+ default:
+ assertAlways(false, "Invalid belt direction: " + this.direction);
+ return new Vector(0, 0);
}
}
}
diff --git a/src/js/game/components/belt_underlays.js b/src/js/game/components/belt_underlays.js
new file mode 100644
index 00000000..cb516b1a
--- /dev/null
+++ b/src/js/game/components/belt_underlays.js
@@ -0,0 +1,33 @@
+import { Component } from "../component";
+import { types } from "../../savegame/serialization";
+import { enumDirection, Vector } from "../../core/vector";
+
+export class BeltUnderlaysComponent extends Component {
+ static getId() {
+ return "BeltUnderlays";
+ }
+
+ duplicateWithoutContents() {
+ const beltUnderlaysCopy = [];
+ for (let i = 0; i < this.underlays.length; ++i) {
+ const underlay = this.underlays[i];
+ beltUnderlaysCopy.push({
+ pos: underlay.pos.copy(),
+ direction: underlay.direction,
+ });
+ }
+
+ return new BeltUnderlaysComponent({
+ underlays: beltUnderlaysCopy,
+ });
+ }
+
+ /**
+ * @param {object} param0
+ * @param {Array<{pos: Vector, direction: enumDirection}>=} param0.underlays Where to render belt underlays
+ */
+ constructor({ underlays }) {
+ super();
+ this.underlays = underlays;
+ }
+}
diff --git a/src/js/game/components/energy_consumer.js b/src/js/game/components/energy_consumer.js
deleted file mode 100644
index 6e54af86..00000000
--- a/src/js/game/components/energy_consumer.js
+++ /dev/null
@@ -1,133 +0,0 @@
-import { Component } from "../component";
-import { types } from "../../savegame/serialization";
-import { Vector } from "../../core/vector";
-import { BaseItem, enumItemTypeToLayer, enumItemType } from "../base_item";
-
-export class EnergyConsumerComponent extends Component {
- static getId() {
- return "EnergyConsumer";
- }
-
- static getSchema() {
- return {
- bufferSize: types.float,
- perCharge: types.float,
- batteryPosition: types.vector,
- energyType: types.enum(enumItemType),
- wasteType: types.enum(enumItemType),
- acceptorSlotIndex: types.uint,
- ejectorSlotIndex: types.uint,
-
- stored: types.float,
- piledOutput: types.float,
- };
- }
-
- duplicateWithoutContents() {
- return new EnergyConsumerComponent({
- bufferSize: this.bufferSize,
- perCharge: this.perCharge,
- batteryPosition: this.batteryPosition.copy(),
- acceptorSlotIndex: this.acceptorSlotIndex,
- ejectorSlotIndex: this.ejectorSlotIndex,
- });
- }
-
- /**
- *
- * @param {object} param0
- * @param {number} param0.bufferSize How much energy this consumer can store
- * @param {number} param0.perCharge How much energy this consumer needs per charge
- * @param {Vector} param0.batteryPosition world space render offset of the battery icon
- * @param {number} param0.acceptorSlotIndex Which slot to accept energy on
- * @param {number} param0.ejectorSlotIndex Which slot to eject energy off
- *
- */
- constructor({
- bufferSize = 3,
- perCharge = 1,
- batteryPosition = new Vector(),
- acceptorSlotIndex = 0,
- ejectorSlotIndex = 0,
- }) {
- super();
- this.bufferSize = bufferSize;
- this.perCharge = perCharge;
- this.batteryPosition = batteryPosition;
- this.energyType = enumItemType.positiveEnergy;
- this.wasteType = enumItemType.negativeEnergy;
- this.acceptorSlotIndex = acceptorSlotIndex;
- this.ejectorSlotIndex = ejectorSlotIndex;
-
- /**
- * How much energy we have stored right now
- */
- this.stored = 0;
-
- /**
- * How much waste we have piled up so far
- */
- this.piledOutput = 0;
- }
-
- /**
- * Tries to accept a given item
- * @param {BaseItem} item
- * @param {number} slotIndex
- */
- tryAcceptItem(item, slotIndex) {
- if (slotIndex !== this.acceptorSlotIndex) {
- // Wrong slot
- return false;
- }
-
- if (item.getItemType() !== this.energyType) {
- // Not the right type
- return false;
- }
-
- if (this.stored >= this.bufferSize) {
- // We are full
- return false;
- }
-
- // All good, consume
- this.stored = Math.min(this.stored + 1, this.bufferSize);
-
- return true;
- }
-
- /**
- * Tries to start the next charge
- */
- tryStartNextCharge() {
- if (this.hasTooMuchWastePiled()) {
- // Too much waste remaining
- return false;
- }
-
- if (this.stored < this.perCharge) {
- // Not enough energy stored
- return false;
- }
-
- this.stored -= this.perCharge;
- this.piledOutput += this.perCharge;
- return true;
- }
-
- /**
- * Returns if there is too much waste piled
- */
- hasTooMuchWastePiled() {
- return this.piledOutput >= 1.0;
- }
-
- /**
- * Reduces the waste by the given amount
- * @param {number} amount
- */
- reduceWaste(amount) {
- this.piledOutput = Math.max(0, this.piledOutput - amount);
- }
-}
diff --git a/src/js/game/components/energy_generator.js b/src/js/game/components/energy_generator.js
deleted file mode 100644
index a45492d7..00000000
--- a/src/js/game/components/energy_generator.js
+++ /dev/null
@@ -1,93 +0,0 @@
-import { types } from "../../savegame/serialization";
-import { BaseItem, enumItemType } from "../base_item";
-import { Component } from "../component";
-import { ShapeItem } from "../items/shape_item";
-
-const maxQueueSize = 4;
-
-export class EnergyGeneratorComponent extends Component {
- static getId() {
- return "EnergyGenerator";
- }
-
- static getSchema() {
- return {
- requiredKey: types.nullable(types.string),
- itemsInQueue: types.uint,
- wasteAcceptorSlotIndex: types.uint,
- };
- }
-
- duplicateWithoutContents() {
- return new EnergyGeneratorComponent({
- requiredKey: null,
- wasteAcceptorSlotIndex: this.wasteAcceptorSlotIndex,
- });
- }
-
- /**
- *
- * @param {object} param0
- * @param {string=} param0.requiredKey Which shape this generator needs, can be null if not computed yet
- * @param {number} param0.wasteAcceptorSlotIndex Which slot accepts the waste
- */
- constructor({ requiredKey, wasteAcceptorSlotIndex = 0 }) {
- super();
- this.requiredKey = requiredKey;
-
- /**
- * Stores how many items are ready to be converted to energy
- * @type {number}
- */
- this.itemsInQueue = 0;
-
- /**
- * Stores which slot accepts the waste
- * @type {number}
- */
- this.wasteAcceptorSlotIndex = wasteAcceptorSlotIndex;
- }
-
- /**
- *
- * @param {BaseItem} item
- * @param {number} slot
- */
- tryTakeItem(item, slot) {
- if (slot === this.wasteAcceptorSlotIndex) {
- // this is the acceptor slot on the wires layer
- // just destroy it
- return true;
- } else {
- if (item.getItemType() !== enumItemType.shape) {
- // This shouldn't happen since we have a filter - still, it doesn't hurt
- // to check either
- assertAlways(
- false,
- "Energy generator took wrong item: " +
- item.getItemType() +
- " on slot " +
- slot +
- " (waste slot = " +
- this.wasteAcceptorSlotIndex +
- ")"
- );
- return false;
- }
-
- if (/** @type {ShapeItem} */ (item).definition.getHash() !== this.requiredKey) {
- // Not our shape
- return false;
- }
-
- if (this.itemsInQueue >= maxQueueSize) {
- // Queue is full
- return false;
- }
-
- // Take item and put it into the queue
- ++this.itemsInQueue;
- return true;
- }
- }
-}
diff --git a/src/js/game/components/hub.js b/src/js/game/components/hub.js
index f9c13dc3..fb88d6f6 100644
--- a/src/js/game/components/hub.js
+++ b/src/js/game/components/hub.js
@@ -1,32 +1,7 @@
import { Component } from "../component";
-import { ShapeDefinition } from "../shape_definition";
-import { types } from "../../savegame/serialization";
export class HubComponent extends Component {
static getId() {
return "Hub";
}
-
- static getSchema() {
- return {
- definitionsToAnalyze: types.array(types.knownType(ShapeDefinition)),
- };
- }
-
- constructor() {
- super();
-
- /**
- * Shape definitions in queue to be analyzed and counted towards the goal
- * @type {Array}
- */
- this.definitionsToAnalyze = [];
- }
-
- /**
- * @param {ShapeDefinition} definition
- */
- queueShapeDefinition(definition) {
- this.definitionsToAnalyze.push(definition);
- }
}
diff --git a/src/js/game/components/item_acceptor.js b/src/js/game/components/item_acceptor.js
index a5676119..c51093ff 100644
--- a/src/js/game/components/item_acceptor.js
+++ b/src/js/game/components/item_acceptor.js
@@ -2,12 +2,10 @@ import { enumDirection, enumInvertedDirections, Vector } from "../../core/vector
import { types } from "../../savegame/serialization";
import { BaseItem, enumItemType } from "../base_item";
import { Component } from "../component";
-import { enumLayer } from "../root";
/** @typedef {{
* pos: Vector,
* directions: enumDirection[],
- * layer: enumLayer,
* filter?: enumItemType
* }} ItemAcceptorSlot */
@@ -22,7 +20,6 @@ import { enumLayer } from "../root";
/** @typedef {{
* pos: Vector,
* directions: enumDirection[],
- * layer?: enumLayer,
* filter?: enumItemType
* }} ItemAcceptorSlotConfig */
@@ -31,31 +28,6 @@ export class ItemAcceptorComponent extends Component {
return "ItemAcceptor";
}
- static getSchema() {
- return {
- slots: types.array(
- types.structured({
- pos: types.vector,
- directions: types.array(types.enum(enumDirection)),
- filter: types.nullable(types.enum(enumItemType)),
-
- // TODO: MIGRATE
- layer: types.enum(enumLayer),
- })
- ),
- animated: types.bool,
- beltUnderlays: types.array(
- types.structured({
- pos: types.vector,
- direction: types.enum(enumDirection),
-
- // TODO: MIGRATE
- layer: types.enum(enumLayer),
- })
- ),
- };
- }
-
duplicateWithoutContents() {
const slotsCopy = [];
for (let i = 0; i < this.slots.length; ++i) {
@@ -64,24 +36,11 @@ export class ItemAcceptorComponent extends Component {
pos: slot.pos.copy(),
directions: slot.directions.slice(),
filter: slot.filter,
- layer: slot.layer,
- });
- }
-
- const beltUnderlaysCopy = [];
- for (let i = 0; i < this.beltUnderlays.length; ++i) {
- const underlay = this.beltUnderlays[i];
- beltUnderlaysCopy.push({
- pos: underlay.pos.copy(),
- direction: underlay.direction,
- layer: underlay.layer,
});
}
return new ItemAcceptorComponent({
slots: slotsCopy,
- beltUnderlays: beltUnderlaysCopy,
- animated: this.animated,
});
}
@@ -89,23 +48,16 @@ export class ItemAcceptorComponent extends Component {
*
* @param {object} param0
* @param {Array} param0.slots The slots from which we accept items
- * @param {boolean=} param0.animated Whether to animate item consumption
- * @param {Array<{pos: Vector, direction: enumDirection, layer: enumLayer}>=} param0.beltUnderlays Where to render belt underlays
*/
- constructor({ slots = [], beltUnderlays = [], animated = true }) {
+ constructor({ slots = [] }) {
super();
- this.animated = animated;
-
/**
* Fixes belt animations
* @type {Array<{ item: BaseItem, slotIndex: number, animProgress: number, direction: enumDirection }>}
*/
this.itemConsumptionAnimations = [];
- /* Which belt underlays to render */
- this.beltUnderlays = beltUnderlays;
-
this.setSlots(slots);
}
@@ -121,7 +73,6 @@ export class ItemAcceptorComponent extends Component {
this.slots.push({
pos: slot.pos,
directions: slot.directions,
- layer: slot.layer || enumLayer.regular,
// Which type of item to accept (shape | color | all) @see enumItemType
filter: slot.filter,
@@ -164,24 +115,21 @@ export class ItemAcceptorComponent extends Component {
* @param {BaseItem} item
*/
onItemAccepted(slotIndex, direction, item) {
- if (this.animated) {
- this.itemConsumptionAnimations.push({
- item,
- slotIndex,
- direction,
- animProgress: 0.0,
- });
- }
+ this.itemConsumptionAnimations.push({
+ item,
+ slotIndex,
+ direction,
+ animProgress: 0.0,
+ });
}
/**
* Tries to find a slot which accepts the current item
* @param {Vector} targetLocalTile
* @param {enumDirection} fromLocalDirection
- * @param {enumLayer} layer
* @returns {ItemAcceptorLocatedSlot|null}
*/
- findMatchingSlot(targetLocalTile, fromLocalDirection, layer) {
+ findMatchingSlot(targetLocalTile, fromLocalDirection) {
// We need to invert our direction since the acceptor specifies *from* which direction
// it accepts items, but the ejector specifies *into* which direction it ejects items.
// E.g.: Ejector ejects into "right" direction but acceptor accepts from "left" direction.
@@ -196,11 +144,6 @@ export class ItemAcceptorComponent extends Component {
continue;
}
- // Make sure the layer matches
- if (slot.layer !== layer) {
- continue;
- }
-
// Check if the acceptor slot accepts items from our direction
for (let i = 0; i < slot.directions.length; ++i) {
// const localDirection = targetStaticComp.localDirectionToWorld(slot.directions[l]);
diff --git a/src/js/game/components/item_ejector.js b/src/js/game/components/item_ejector.js
index ee661078..281cf91e 100644
--- a/src/js/game/components/item_ejector.js
+++ b/src/js/game/components/item_ejector.js
@@ -5,15 +5,16 @@ import { types } from "../../savegame/serialization";
import { gItemRegistry } from "../../core/global_registries";
import { Entity } from "../entity";
import { enumLayer } from "../root";
+import { BeltPath } from "../belt_path";
/**
* @typedef {{
* pos: Vector,
* direction: enumDirection,
* item: BaseItem,
- * layer: enumLayer,
* progress: number?,
* cachedDestSlot?: import("./item_acceptor").ItemAcceptorLocatedSlot,
+ * cachedBeltPath?: BeltPath,
* cachedTargetEntity?: Entity
* }} ItemEjectorSlot
*/
@@ -24,19 +25,12 @@ export class ItemEjectorComponent extends Component {
}
static getSchema() {
- // The cachedDestSlot, cachedTargetEntity, and cachedConnectedSlots fields
- // are not serialized.
+ // The cachedDestSlot, cachedTargetEntity fields are not serialized.
return {
- instantEject: types.bool,
slots: types.array(
types.structured({
- pos: types.vector,
- direction: types.enum(enumDirection),
item: types.nullable(types.obj(gItemRegistry)),
progress: types.float,
-
- // TODO: Migrate
- layer: types.enum(enumLayer),
})
),
};
@@ -49,33 +43,24 @@ export class ItemEjectorComponent extends Component {
slotsCopy.push({
pos: slot.pos.copy(),
direction: slot.direction,
- layer: slot.layer,
});
}
return new ItemEjectorComponent({
slots: slotsCopy,
- instantEject: this.instantEject,
});
}
/**
*
* @param {object} param0
- * @param {Array<{pos: Vector, direction: enumDirection, layer?: enumLayer}>=} param0.slots The slots to eject on
- * @param {boolean=} param0.instantEject If the ejection is instant
+ * @param {Array<{pos: Vector, direction: enumDirection }>=} param0.slots The slots to eject on
*/
- constructor({ slots = [], instantEject = false }) {
+ constructor({ slots = [] }) {
super();
- // How long items take to eject
- this.instantEject = instantEject;
-
this.setSlots(slots);
- /** @type {ItemEjectorSlot[]} */
- this.cachedConnectedSlots = null;
-
/**
* Whether this ejector slot is enabled
*/
@@ -83,7 +68,7 @@ export class ItemEjectorComponent extends Component {
}
/**
- * @param {Array<{pos: Vector, direction: enumDirection, layer?: enumLayer}>} slots The slots to eject on
+ * @param {Array<{pos: Vector, direction: enumDirection }>} slots The slots to eject on
*/
setSlots(slots) {
/** @type {Array} */
@@ -95,7 +80,6 @@ export class ItemEjectorComponent extends Component {
direction: slot.direction,
item: null,
progress: 0,
- layer: slot.layer || enumLayer.regular,
cachedDestSlot: null,
cachedTargetEntity: null,
});
@@ -104,11 +88,10 @@ export class ItemEjectorComponent extends Component {
/**
* Returns where this slot ejects to
- * @param {number} index
+ * @param {ItemEjectorSlot} slot
* @returns {Vector}
*/
- getSlotTargetLocalTile(index) {
- const slot = this.slots[index];
+ getSlotTargetLocalTile(slot) {
const directionVector = enumDirectionToVector[slot.direction];
return slot.pos.add(directionVector);
}
@@ -116,11 +99,10 @@ export class ItemEjectorComponent extends Component {
/**
* Returns whether any slot ejects to the given local tile
* @param {Vector} tile
- * @param {enumLayer} layer
*/
- anySlotEjectsToLocalTile(tile, layer) {
+ anySlotEjectsToLocalTile(tile) {
for (let i = 0; i < this.slots.length; ++i) {
- if (this.getSlotTargetLocalTile(i).equals(tile) && this.slots[i].layer === layer) {
+ if (this.getSlotTargetLocalTile(this.slots[i]).equals(tile)) {
return true;
}
}
@@ -139,12 +121,11 @@ export class ItemEjectorComponent extends Component {
/**
* Returns the first free slot on this ejector or null if there is none
- * @param {enumLayer} layer
* @returns {number?}
*/
- getFirstFreeSlot(layer) {
+ getFirstFreeSlot() {
for (let i = 0; i < this.slots.length; ++i) {
- if (this.canEjectOnSlot(i) && this.slots[i].layer === layer) {
+ if (this.canEjectOnSlot(i)) {
return i;
}
}
@@ -162,7 +143,7 @@ export class ItemEjectorComponent extends Component {
return false;
}
this.slots[slotIndex].item = item;
- this.slots[slotIndex].progress = this.instantEject ? 1 : 0;
+ this.slots[slotIndex].progress = 0;
return true;
}
diff --git a/src/js/game/components/item_processor.js b/src/js/game/components/item_processor.js
index 806ec7c8..eeb045a9 100644
--- a/src/js/game/components/item_processor.js
+++ b/src/js/game/components/item_processor.js
@@ -18,7 +18,6 @@ export const enumItemProcessorTypes = {
painter: "painter",
painterDouble: "painterDouble",
painterQuad: "painterQuad",
- advancedProcessor: "advancedProcessor",
hub: "hub",
};
@@ -30,9 +29,6 @@ export class ItemProcessorComponent extends Component {
static getSchema() {
return {
nextOutputSlot: types.uint,
- type: types.enum(enumItemProcessorTypes),
- inputsPerCharge: types.uint,
-
inputSlots: types.array(
types.structured({
item: types.obj(gItemRegistry),
diff --git a/src/js/game/components/miner.js b/src/js/game/components/miner.js
index 74a4b616..411e49b9 100644
--- a/src/js/game/components/miner.js
+++ b/src/js/game/components/miner.js
@@ -15,7 +15,6 @@ export class MinerComponent extends Component {
// cachedMinedItem is not serialized.
return {
lastMiningTime: types.ufloat,
- chainable: types.bool,
itemChainBuffer: types.array(types.obj(gItemRegistry)),
};
}
diff --git a/src/js/game/components/replaceable_map_entity.js b/src/js/game/components/replaceable_map_entity.js
deleted file mode 100644
index 78861caf..00000000
--- a/src/js/game/components/replaceable_map_entity.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Component } from "../component";
-
-/**
- * Marks an entity as replaceable, so that when other buildings are placed above him it
- * simply gets deleted
- */
-export class ReplaceableMapEntityComponent extends Component {
- static getId() {
- return "ReplaceableMapEntity";
- }
-
- duplicateWithoutContents() {
- return new ReplaceableMapEntityComponent();
- }
-}
diff --git a/src/js/game/components/static_map_entity.js b/src/js/game/components/static_map_entity.js
index 6494aba1..f43dca3c 100644
--- a/src/js/game/components/static_map_entity.js
+++ b/src/js/game/components/static_map_entity.js
@@ -6,6 +6,7 @@ import { enumDirection, Vector } from "../../core/vector";
import { types } from "../../savegame/serialization";
import { Component } from "../component";
import { getBuildingDataFromCode } from "../building_codes";
+import { MetaBuilding } from "../meta_building";
export class StaticMapEntityComponent extends Component {
static getId() {
@@ -15,7 +16,6 @@ export class StaticMapEntityComponent extends Component {
static getSchema() {
return {
origin: types.tileVector,
- tileSize: types.tileVector,
rotation: types.float,
originalRotation: types.float,
@@ -24,6 +24,14 @@ export class StaticMapEntityComponent extends Component {
};
}
+ /**
+ * Returns the effective tile size
+ * @returns {Vector}
+ */
+ getTileSize() {
+ return getBuildingDataFromCode(this.code).tileSize;
+ }
+
/**
* Returns the sprite
* @returns {AtlasSprite}
@@ -48,10 +56,17 @@ export class StaticMapEntityComponent extends Component {
return getBuildingDataFromCode(this.code).silhouetteColor;
}
+ /**
+ * Returns the meta building
+ * @returns {MetaBuilding}
+ */
+ getMetaBuilding() {
+ return getBuildingDataFromCode(this.code).metaInstance;
+ }
+
duplicateWithoutContents() {
return new StaticMapEntityComponent({
origin: this.origin.copy(),
- tileSize: this.tileSize.copy(),
rotation: this.rotation,
originalRotation: this.originalRotation,
code: this.code,
@@ -81,7 +96,6 @@ export class StaticMapEntityComponent extends Component {
);
this.origin = origin;
- this.tileSize = tileSize;
this.rotation = rotation;
this.code = code;
this.originalRotation = originalRotation;
@@ -92,30 +106,16 @@ export class StaticMapEntityComponent extends Component {
* @returns {Rectangle}
*/
getTileSpaceBounds() {
+ const size = this.getTileSize();
switch (this.rotation) {
case 0:
- return new Rectangle(this.origin.x, this.origin.y, this.tileSize.x, this.tileSize.y);
+ return new Rectangle(this.origin.x, this.origin.y, size.x, size.y);
case 90:
- return new Rectangle(
- this.origin.x - this.tileSize.y + 1,
- this.origin.y,
- this.tileSize.y,
- this.tileSize.x
- );
+ return new Rectangle(this.origin.x - size.y + 1, this.origin.y, size.y, size.x);
case 180:
- return new Rectangle(
- this.origin.x - this.tileSize.x + 1,
- this.origin.y - this.tileSize.y + 1,
- this.tileSize.x,
- this.tileSize.y
- );
+ return new Rectangle(this.origin.x - size.x + 1, this.origin.y - size.y + 1, size.x, size.y);
case 270:
- return new Rectangle(
- this.origin.x,
- this.origin.y - this.tileSize.x + 1,
- this.tileSize.y,
- this.tileSize.x
- );
+ return new Rectangle(this.origin.x, this.origin.y - size.x + 1, size.y, size.x);
default:
assert(false, "Invalid rotation");
}
@@ -186,34 +186,35 @@ export class StaticMapEntityComponent extends Component {
let y = 0;
let w = 0;
let h = 0;
+ const size = this.getTileSize();
switch (this.rotation) {
case 0: {
x = this.origin.x;
y = this.origin.y;
- w = this.tileSize.x;
- h = this.tileSize.y;
+ w = size.x;
+ h = size.y;
break;
}
case 90: {
- x = this.origin.x - this.tileSize.y + 1;
+ x = this.origin.x - size.y + 1;
y = this.origin.y;
- w = this.tileSize.y;
- h = this.tileSize.x;
+ w = size.y;
+ h = size.x;
break;
}
case 180: {
- x = this.origin.x - this.tileSize.x + 1;
- y = this.origin.y - this.tileSize.y + 1;
- w = this.tileSize.x;
- h = this.tileSize.y;
+ x = this.origin.x - size.x + 1;
+ y = this.origin.y - size.y + 1;
+ w = size.x;
+ h = size.y;
break;
}
case 270: {
x = this.origin.x;
- y = this.origin.y - this.tileSize.x + 1;
- w = this.tileSize.y;
- h = this.tileSize.x;
+ y = this.origin.y - size.x + 1;
+ w = size.y;
+ h = size.x;
break;
}
default:
@@ -233,19 +234,13 @@ export class StaticMapEntityComponent extends Component {
* @param {DrawParameters} parameters
* @param {AtlasSprite} sprite
* @param {number=} extrudePixels How many pixels to extrude the sprite
- * @param {boolean=} clipping Whether to clip
* @param {Vector=} overridePosition Whether to drwa the entity at a different location
*/
- drawSpriteOnFullEntityBounds(
- parameters,
- sprite,
- extrudePixels = 0,
- clipping = true,
- overridePosition = null
- ) {
+ drawSpriteOnFullEntityBounds(parameters, sprite, extrudePixels = 0, overridePosition = null) {
if (!this.shouldBeDrawn(parameters) && !overridePosition) {
return;
}
+ const size = this.getTileSize();
let worldX = this.origin.x * globalConfig.tileSize;
let worldY = this.origin.y * globalConfig.tileSize;
@@ -258,10 +253,10 @@ export class StaticMapEntityComponent extends Component {
// Early out, is faster
sprite.drawCached(
parameters,
- worldX - extrudePixels * this.tileSize.x,
- worldY - extrudePixels * this.tileSize.y,
- globalConfig.tileSize * this.tileSize.x + 2 * extrudePixels * this.tileSize.x,
- globalConfig.tileSize * this.tileSize.y + 2 * extrudePixels * this.tileSize.y,
+ worldX - extrudePixels * size.x,
+ worldY - extrudePixels * size.y,
+ globalConfig.tileSize * size.x + 2 * extrudePixels * size.x,
+ globalConfig.tileSize * size.y + 2 * extrudePixels * size.y,
false
);
} else {
@@ -273,10 +268,10 @@ export class StaticMapEntityComponent extends Component {
sprite.drawCached(
parameters,
- -globalConfig.halfTileSize - extrudePixels * this.tileSize.x,
- -globalConfig.halfTileSize - extrudePixels * this.tileSize.y,
- globalConfig.tileSize * this.tileSize.x + 2 * extrudePixels * this.tileSize.x,
- globalConfig.tileSize * this.tileSize.y + 2 * extrudePixels * this.tileSize.y,
+ -globalConfig.halfTileSize - extrudePixels * size.x,
+ -globalConfig.halfTileSize - extrudePixels * size.y,
+ globalConfig.tileSize * size.x + 2 * extrudePixels * size.x,
+ globalConfig.tileSize * size.y + 2 * extrudePixels * size.y,
false
);
diff --git a/src/js/game/components/storage.js b/src/js/game/components/storage.js
index e7b40a77..acc68a51 100644
--- a/src/js/game/components/storage.js
+++ b/src/js/game/components/storage.js
@@ -12,10 +12,8 @@ export class StorageComponent extends Component {
static getSchema() {
return {
- maximumStorage: types.uint,
storedCount: types.uint,
storedItem: types.nullable(types.obj(gItemRegistry)),
- overlayOpacity: types.ufloat,
};
}
diff --git a/src/js/game/components/underground_belt.js b/src/js/game/components/underground_belt.js
index e94b7cb1..b09927ce 100644
--- a/src/js/game/components/underground_belt.js
+++ b/src/js/game/components/underground_belt.js
@@ -26,9 +26,7 @@ export class UndergroundBeltComponent extends Component {
static getSchema() {
return {
- mode: types.enum(enumUndergroundBeltMode),
pendingItems: types.array(types.pair(types.obj(gItemRegistry), types.float)),
- tier: types.uint,
};
}
@@ -103,8 +101,7 @@ export class UndergroundBeltComponent extends Component {
}
// Notice: We assume that for all items the travel distance is the same
- const maxItemsInTunnel =
- (2 + travelDistance) / globalConfig.beltItemSpacingByLayer[enumLayer.regular];
+ const maxItemsInTunnel = (2 + travelDistance) / globalConfig.itemSpacingOnBelts;
if (this.pendingItems.length >= maxItemsInTunnel) {
// Simulate a real belt which gets full at some point
return false;
@@ -114,8 +111,7 @@ export class UndergroundBeltComponent extends Component {
// This corresponds to the item ejector - it needs 0.5 additional tiles to eject the item.
// So instead of adding 1 we add 0.5 only.
// Additionally it takes 1 tile for the acceptor which we just add on top.
- const travelDuration =
- (travelDistance + 1.5) / beltSpeed / globalConfig.beltItemSpacingByLayer[enumLayer.regular];
+ const travelDuration = (travelDistance + 1.5) / beltSpeed / globalConfig.itemSpacingOnBelts;
this.pendingItems.push([item, travelDuration]);
diff --git a/src/js/game/components/unremovable.js b/src/js/game/components/unremovable.js
deleted file mode 100644
index f3864cf8..00000000
--- a/src/js/game/components/unremovable.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Component } from "../component";
-
-export class UnremovableComponent extends Component {
- static getId() {
- return "Unremovable";
- }
-
- static getSchema() {
- return {};
- }
-
- duplicateWithoutContents() {
- return new UnremovableComponent();
- }
-}
diff --git a/src/js/game/components/wired_pins.js b/src/js/game/components/wired_pins.js
index 0d331a68..227bff09 100644
--- a/src/js/game/components/wired_pins.js
+++ b/src/js/game/components/wired_pins.js
@@ -8,6 +8,8 @@ export const enumPinSlotType = {
negativeEnergyEjector: "negativeEnergyEjector",
positiveEnergyAcceptor: "positiveEnergyAcceptor",
negativeEnergyAcceptor: "negativeEnergyAcceptor",
+ logicalEjector: "logicalEjector",
+ logicalAcceptor: "logicalAcceptor",
};
/** @typedef {{
@@ -27,17 +29,6 @@ export class WiredPinsComponent extends Component {
return "WiredPins";
}
- static getSchema() {
- return {
- slots: types.array(
- types.structured({
- pos: types.vector,
- type: types.enum(enumPinSlotType),
- })
- ),
- };
- }
-
/**
*
* @param {object} param0
diff --git a/src/js/game/core.js b/src/js/game/core.js
index 960a83e3..cf8fb19d 100644
--- a/src/js/game/core.js
+++ b/src/js/game/core.js
@@ -349,8 +349,9 @@ export class GameCore {
// Gather context and save all state
const context = root.context;
context.save();
- if (G_IS_DEV && globalConfig.debug.testClipping) {
- context.clearRect(0, 0, window.innerWidth * 3, window.innerHeight * 3);
+ if (G_IS_DEV) {
+ context.fillStyle = "#a10000";
+ context.fillRect(0, 0, window.innerWidth * 3, window.innerHeight * 3);
}
// Compute optimal zoom level and atlas scale
@@ -394,49 +395,36 @@ export class GameCore {
// -----
// BG / Map Resources / Belt Backgrounds
- root.map.drawBackground(params);
-
if (!this.root.camera.getIsMapOverlayActive()) {
+ root.map.drawBackground(params);
+
// Underlays for splitters / balancers
- systems.itemAcceptor.drawUnderlays(params, enumLayer.regular);
+ systems.beltUnderlays.drawUnderlays(params);
// Belt items
- systems.belt.drawLayerBeltItems(params, enumLayer.regular);
+ systems.belt.drawBeltItems(params);
// Items being ejected / accepted currently (animations)
- systems.itemEjector.drawLayer(params, enumLayer.regular);
- systems.itemAcceptor.drawLayer(params, enumLayer.regular);
- }
+ systems.itemEjector.draw(params);
+ systems.itemAcceptor.draw(params);
- // Miner & Static map entities
- root.map.drawForeground(params);
+ // Miner & Static map entities
+ root.map.drawForeground(params);
- if (!this.root.camera.getIsMapOverlayActive()) {
// HUB Overlay
systems.hub.draw(params);
- // Energy generator overlay
- systems.energyGenerator.draw(params);
-
// Storage items
systems.storage.draw(params);
- // Energy consumer (Battery icons)
- systems.energyConsumer.draw(params);
+ // Green wires overlay
+ root.hud.parts.wiresOverlay.draw(params);
+ } else {
+ root.map.drawOverlay(params);
}
- // Green wires overlay (not within the if because it can fade)
- root.hud.parts.wiresOverlay.draw(params);
-
if (this.root.currentLayer === enumLayer.wires && !this.root.camera.getIsMapOverlayActive()) {
- // Belt sprites & Static map entities
- root.map.drawWiresLayer(params);
-
- // Belt items as well as accepted / ejected items
- systems.belt.drawLayerBeltItems(params, enumLayer.wires);
- systems.itemEjector.drawLayer(params, enumLayer.wires);
- systems.itemAcceptor.drawLayer(params, enumLayer.wires);
-
+ // Static map entities
root.map.drawWiresForegroundLayer(params);
// pins
diff --git a/src/js/game/dynamic_tickrate.js b/src/js/game/dynamic_tickrate.js
index f289e2c1..a5033acf 100644
--- a/src/js/game/dynamic_tickrate.js
+++ b/src/js/game/dynamic_tickrate.js
@@ -1,7 +1,6 @@
import { GameRoot } from "./root";
import { createLogger } from "../core/logging";
import { globalConfig } from "../core/config";
-import { round3Digits } from "../core/utils";
const logger = createLogger("dynamic_tickrate");
diff --git a/src/js/game/entity.js b/src/js/game/entity.js
index c86aa3b7..943683fb 100644
--- a/src/js/game/entity.js
+++ b/src/js/game/entity.js
@@ -76,8 +76,7 @@ export class Entity extends BasicSerializableObject {
static getSchema() {
return {
uid: types.uint,
- components: types.keyValueMap(types.objData(gComponentRegistry)),
- layer: types.enum(enumLayer),
+ components: types.keyValueMap(types.objData(gComponentRegistry), false),
};
}
@@ -169,9 +168,6 @@ export class Entity extends BasicSerializableObject {
const ejectorSprite = Loader.getSprite("sprites/debug/ejector_slot.png");
for (let i = 0; i < ejectorComp.slots.length; ++i) {
const slot = ejectorComp.slots[i];
- if (slot.layer !== this.root.currentLayer) {
- continue;
- }
const slotTile = staticComp.localTileToWorld(slot.pos);
const direction = staticComp.localDirectionToWorld(slot.direction);
const directionVector = enumDirectionToVector[direction];
@@ -194,9 +190,6 @@ export class Entity extends BasicSerializableObject {
const acceptorSprite = Loader.getSprite("sprites/debug/acceptor_slot.png");
for (let i = 0; i < acceptorComp.slots.length; ++i) {
const slot = acceptorComp.slots[i];
- if (slot.layer !== this.root.currentLayer) {
- continue;
- }
const slotTile = staticComp.localTileToWorld(slot.pos);
for (let k = 0; k < slot.directions.length; ++k) {
const direction = staticComp.localDirectionToWorld(slot.directions[k]);
diff --git a/src/js/game/entity_components.js b/src/js/game/entity_components.js
index 24430dd2..6d04346d 100644
--- a/src/js/game/entity_components.js
+++ b/src/js/game/entity_components.js
@@ -1,18 +1,15 @@
/* typehints:start */
-import { StaticMapEntityComponent } from "./components/static_map_entity";
import { BeltComponent } from "./components/belt";
-import { ItemEjectorComponent } from "./components/item_ejector";
-import { ItemAcceptorComponent } from "./components/item_acceptor";
-import { MinerComponent } from "./components/miner";
-import { ItemProcessorComponent } from "./components/item_processor";
-import { ReplaceableMapEntityComponent } from "./components/replaceable_map_entity";
-import { UndergroundBeltComponent } from "./components/underground_belt";
-import { UnremovableComponent } from "./components/unremovable";
+import { BeltUnderlaysComponent } from "./components/belt_underlays";
import { HubComponent } from "./components/hub";
+import { ItemAcceptorComponent } from "./components/item_acceptor";
+import { ItemEjectorComponent } from "./components/item_ejector";
+import { ItemProcessorComponent } from "./components/item_processor";
+import { MinerComponent } from "./components/miner";
+import { StaticMapEntityComponent } from "./components/static_map_entity";
import { StorageComponent } from "./components/storage";
-import { EnergyGeneratorComponent } from "./components/energy_generator";
+import { UndergroundBeltComponent } from "./components/underground_belt";
import { WiredPinsComponent } from "./components/wired_pins";
-import { EnergyConsumerComponent } from "./components/energy_consumer";
/* typehints:end */
/**
@@ -41,29 +38,20 @@ export class EntityComponentStorage {
/** @type {ItemProcessorComponent} */
this.ItemProcessor;
- /** @type {ReplaceableMapEntityComponent} */
- this.ReplaceableMapEntity;
-
/** @type {UndergroundBeltComponent} */
this.UndergroundBelt;
- /** @type {UnremovableComponent} */
- this.Unremovable;
-
/** @type {HubComponent} */
this.Hub;
/** @type {StorageComponent} */
this.Storage;
- /** @type {EnergyGeneratorComponent} */
- this.EnergyGenerator;
-
/** @type {WiredPinsComponent} */
this.WiredPins;
- /** @type {EnergyConsumerComponent} */
- this.EnergyConsumer;
+ /** @type {BeltUnderlaysComponent} */
+ this.BeltUnderlays;
/* typehints:end */
}
diff --git a/src/js/game/game_system_manager.js b/src/js/game/game_system_manager.js
index ed9d1155..6e82db6c 100644
--- a/src/js/game/game_system_manager.js
+++ b/src/js/game/game_system_manager.js
@@ -13,9 +13,8 @@ import { HubSystem } from "./systems/hub";
import { StaticMapEntitySystem } from "./systems/static_map_entity";
import { ItemAcceptorSystem } from "./systems/item_acceptor";
import { StorageSystem } from "./systems/storage";
-import { EnergyGeneratorSystem } from "./systems/energy_generator";
import { WiredPinsSystem } from "./systems/wired_pins";
-import { EnergyConsumerSystem } from "./systems/energy_consumer";
+import { BeltUnderlaysSystem } from "./systems/belt_underlays";
const logger = createLogger("game_system_manager");
@@ -59,14 +58,11 @@ export class GameSystemManager {
/** @type {StorageSystem} */
storage: null,
- /** @type {EnergyGeneratorSystem} */
- energyGenerator: null,
-
/** @type {WiredPinsSystem} */
wiredPins: null,
- /** @type {EnergyConsumerSystem} */
- energyConsumer: null,
+ /** @type {BeltUnderlaysSystem} */
+ beltUnderlays: null,
/* typehints:end */
};
@@ -102,13 +98,11 @@ export class GameSystemManager {
add("hub", HubSystem);
- add("energyGenerator", EnergyGeneratorSystem);
-
add("staticMapEntities", StaticMapEntitySystem);
add("wiredPins", WiredPinsSystem);
- add("energyConsumer", EnergyConsumerSystem);
+ add("beltUnderlays", BeltUnderlaysSystem);
// IMPORTANT: Must be after belt system since belt system can change the
// orientation of an entity after it is placed -> the item acceptor cache
diff --git a/src/js/game/game_system_with_filter.js b/src/js/game/game_system_with_filter.js
index 82ab4c22..ef6dfd52 100644
--- a/src/js/game/game_system_with_filter.js
+++ b/src/js/game/game_system_with_filter.js
@@ -3,7 +3,7 @@ import { Component } from "./component";
import { Entity } from "./entity";
/* typehints:end */
-import { GameRoot, enumLayer } from "./root";
+import { GameRoot } from "./root";
import { GameSystem } from "./game_system";
import { arrayDelete, arrayDeleteValue } from "../core/utils";
import { DrawParameters } from "../core/draw_parameters";
@@ -39,9 +39,8 @@ export class GameSystemWithFilter extends GameSystem {
* Calls a function for each matching entity on the screen, useful for drawing them
* @param {DrawParameters} parameters
* @param {function} callback
- * @param {enumLayer=} layerFilter Can be null for no filter
*/
- forEachMatchingEntityOnScreen(parameters, callback, layerFilter = null) {
+ forEachMatchingEntityOnScreen(parameters, callback) {
const cullRange = parameters.visibleRect.toTileCullRectangle();
if (this.allEntities.length < 100) {
// So, its much quicker to simply perform per-entity checking
@@ -49,9 +48,7 @@ export class GameSystemWithFilter extends GameSystem {
for (let i = 0; i < this.allEntities.length; ++i) {
const entity = this.allEntities[i];
if (cullRange.containsRect(entity.components.StaticMapEntity.getTileSpaceBounds())) {
- if (!layerFilter || entity.layer === layerFilter) {
- callback(parameters, entity);
- }
+ callback(parameters, entity);
}
}
return;
@@ -94,11 +91,6 @@ export class GameSystemWithFilter extends GameSystem {
entityLoop: for (let i = 0; i < entities.length; ++i) {
const entity = entities[i];
- // Avoid drawing non-layer contents
- if (layerFilter && entity.layer !== layerFilter) {
- continue;
- }
-
// Avoid drawing twice
if (seenUids.has(entity.uid)) {
continue;
diff --git a/src/js/game/hub_goals.js b/src/js/game/hub_goals.js
index 36f8f107..a20e02b9 100644
--- a/src/js/game/hub_goals.js
+++ b/src/js/game/hub_goals.js
@@ -1,5 +1,4 @@
import { globalConfig } from "../core/config";
-import { queryParamOptions } from "../core/query_parameters";
import { clamp, findNiceIntegerValue, randomChoice, randomInt } from "../core/utils";
import { BasicSerializableObject, types } from "../savegame/serialization";
import { enumColors } from "./colors";
@@ -7,7 +6,7 @@ import { enumItemProcessorTypes } from "./components/item_processor";
import { GameRoot, enumLayer } from "./root";
import { enumSubShape, ShapeDefinition } from "./shape_definition";
import { enumHubGoalRewards, tutorialGoals } from "./tutorial_goals";
-import { UPGRADES, blueprintShape } from "./upgrades";
+import { UPGRADES } from "./upgrades";
export class HubGoals extends BasicSerializableObject {
static getId() {
@@ -328,9 +327,7 @@ export class HubGoals extends BasicSerializableObject {
/** @type {Array} */
let layers = [];
- // @ts-ignore
const randomColor = () => randomChoice(Object.values(enumColors));
- // @ts-ignore
const randomShape = () => randomChoice(Object.values(enumSubShape));
let anyIsMissingTwo = false;
@@ -370,13 +367,9 @@ export class HubGoals extends BasicSerializableObject {
/**
* Belt speed
- * @param {enumLayer} layer
* @returns {number} items / sec
*/
- getBeltBaseSpeed(layer) {
- if (layer === enumLayer.wires) {
- return globalConfig.wiresSpeedItemsPerSecond;
- }
+ getBeltBaseSpeed() {
return globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.belt;
}
@@ -443,9 +436,6 @@ export class HubGoals extends BasicSerializableObject {
globalConfig.buildingSpeeds[processorType]
);
}
- case enumItemProcessorTypes.advancedProcessor: {
- return globalConfig.beltSpeedItemsPerSecond * globalConfig.buildingSpeeds[processorType];
- }
default:
assertAlways(false, "invalid processor type: " + processorType);
}
diff --git a/src/js/game/hud/parts/building_placer.js b/src/js/game/hud/parts/building_placer.js
index d5770d0a..a6a16aad 100644
--- a/src/js/game/hud/parts/building_placer.js
+++ b/src/js/game/hud/parts/building_placer.js
@@ -1,7 +1,7 @@
import { ClickDetector } from "../../../core/click_detector";
-import { globalConfig, THIRDPARTY_URLS } from "../../../core/config";
+import { globalConfig } from "../../../core/config";
import { DrawParameters } from "../../../core/draw_parameters";
-import { drawRotatedSprite, rotateTrapezRightFaced } from "../../../core/draw_utils";
+import { drawRotatedSprite } from "../../../core/draw_utils";
import { Loader } from "../../../core/loader";
import { clamp, makeDiv, removeAllChildren } from "../../../core/utils";
import {
@@ -9,6 +9,7 @@ import {
enumDirectionToVector,
enumInvertedDirections,
Vector,
+ enumDirection,
} from "../../../core/vector";
import { T } from "../../../translations";
import { KEYMAPPINGS } from "../../key_action_mapper";
@@ -311,7 +312,6 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic {
const staticComp = this.fakeEntity.components.StaticMapEntity;
staticComp.origin = mouseTile;
staticComp.rotation = rotation;
- staticComp.tileSize = metaBuilding.getDimensions(this.currentVariant.get());
metaBuilding.updateVariants(this.fakeEntity, rotationVariant, this.currentVariant.get());
staticComp.code = getCodeFromBuildingData(
this.currentMetaBuilding.get(),
@@ -323,7 +323,6 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic {
// Fade in / out
parameters.context.lineWidth = 1;
- // parameters.context.globalAlpha = 0.3 + pulseAnimation(this.root.time.realtimeNow(), 0.9) * 0.7;
// Determine the bounds and visualize them
const entityBounds = staticComp.getTileSpaceBounds();
@@ -428,6 +427,7 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic {
const acceptorComp = this.fakeEntity.components.ItemAcceptor;
const ejectorComp = this.fakeEntity.components.ItemEjector;
const staticComp = this.fakeEntity.components.StaticMapEntity;
+ const beltComp = this.fakeEntity.components.Belt;
const goodArrowSprite = Loader.getSprite("sprites/misc/slot_good_arrow.png");
const badArrowSprite = Loader.getSprite("sprites/misc/slot_bad_arrow.png");
@@ -436,132 +436,71 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic {
const offsetShift = 10;
- if (acceptorComp) {
- const slots = acceptorComp.slots;
- for (let acceptorSlotIndex = 0; acceptorSlotIndex < slots.length; ++acceptorSlotIndex) {
- const slot = slots[acceptorSlotIndex];
-
- // Only draw same layer slots
- if (slot.layer !== this.root.currentLayer) {
- continue;
- }
-
- const acceptorSlotWsTile = staticComp.localTileToWorld(slot.pos);
- const acceptorSlotWsPos = acceptorSlotWsTile.toWorldSpaceCenterOfTile();
-
- // Go over all slots
- for (
- let acceptorDirectionIndex = 0;
- acceptorDirectionIndex < slot.directions.length;
- ++acceptorDirectionIndex
- ) {
- const direction = slot.directions[acceptorDirectionIndex];
- const worldDirection = staticComp.localDirectionToWorld(direction);
-
- // Figure out which tile ejects to this slot
- const sourceTile = acceptorSlotWsTile.add(enumDirectionToVector[worldDirection]);
-
- let isBlocked = false;
- let isConnected = false;
-
- // Find all entities which are on that tile
- const sourceEntities = this.root.map.getLayersContentsMultipleXY(
- sourceTile.x,
- sourceTile.y
- );
-
- // Check for every entity:
- for (let i = 0; i < sourceEntities.length; ++i) {
- const sourceEntity = sourceEntities[i];
- const sourceEjector = sourceEntity.components.ItemEjector;
- const sourceStaticComp = sourceEntity.components.StaticMapEntity;
- const ejectorAcceptLocalTile = sourceStaticComp.worldToLocalTile(acceptorSlotWsTile);
-
- // If this entity is on the same layer as the slot - if so, it can either be
- // connected, or it can not be connected and thus block the input
- if (sourceEntity.layer === slot.layer) {
- if (
- sourceEjector &&
- sourceEjector.anySlotEjectsToLocalTile(
- ejectorAcceptLocalTile,
- this.root.currentLayer
- )
- ) {
- // This one is connected, all good
- isConnected = true;
- } else {
- // This one is blocked
- isBlocked = true;
- }
- }
- }
-
- const alpha = isConnected || isBlocked ? 1.0 : 0.3;
- const sprite = isBlocked ? badArrowSprite : goodArrowSprite;
-
- parameters.context.globalAlpha = alpha;
- drawRotatedSprite({
- parameters,
- sprite,
- x: acceptorSlotWsPos.x,
- y: acceptorSlotWsPos.y,
- angle: Math.radians(enumDirectionToAngle[enumInvertedDirections[worldDirection]]),
- size: 13,
- offsetY: offsetShift + 13,
- });
- parameters.context.globalAlpha = 1;
- }
- }
- }
+ let acceptorSlots = [];
+ let ejectorSlots = [];
if (ejectorComp) {
- const slots = ejectorComp.slots;
+ ejectorSlots = ejectorComp.slots.slice();
+ }
+
+ if (acceptorComp) {
+ acceptorSlots = acceptorComp.slots.slice();
+ }
+
+ if (beltComp) {
+ const fakeEjectorSlot = beltComp.getFakeEjectorSlot();
+ const fakeAcceptorSlot = beltComp.getFakeAcceptorSlot();
+ ejectorSlots.push(fakeEjectorSlot);
+ acceptorSlots.push(fakeAcceptorSlot);
+ }
+
+ for (let acceptorSlotIndex = 0; acceptorSlotIndex < acceptorSlots.length; ++acceptorSlotIndex) {
+ const slot = acceptorSlots[acceptorSlotIndex];
+
+ const acceptorSlotWsTile = staticComp.localTileToWorld(slot.pos);
+ const acceptorSlotWsPos = acceptorSlotWsTile.toWorldSpaceCenterOfTile();
// Go over all slots
- for (let ejectorSlotIndex = 0; ejectorSlotIndex < slots.length; ++ejectorSlotIndex) {
- const slot = slots[ejectorSlotIndex];
+ for (
+ let acceptorDirectionIndex = 0;
+ acceptorDirectionIndex < slot.directions.length;
+ ++acceptorDirectionIndex
+ ) {
+ const direction = slot.directions[acceptorDirectionIndex];
+ const worldDirection = staticComp.localDirectionToWorld(direction);
- // Only draw same layer slots
- if (slot.layer !== this.root.currentLayer) {
- continue;
- }
-
- const ejectorSlotWsTile = staticComp.localTileToWorld(
- ejectorComp.getSlotTargetLocalTile(ejectorSlotIndex)
- );
- const ejectorSLotWsPos = ejectorSlotWsTile.toWorldSpaceCenterOfTile();
- const ejectorSlotWsDirection = staticComp.localDirectionToWorld(slot.direction);
+ // Figure out which tile ejects to this slot
+ const sourceTile = acceptorSlotWsTile.add(enumDirectionToVector[worldDirection]);
let isBlocked = false;
let isConnected = false;
// Find all entities which are on that tile
- const destEntities = this.root.map.getLayersContentsMultipleXY(
- ejectorSlotWsTile.x,
- ejectorSlotWsTile.y
- );
+ const sourceEntities = this.root.map.getLayersContentsMultipleXY(sourceTile.x, sourceTile.y);
// Check for every entity:
- for (let i = 0; i < destEntities.length; ++i) {
- const destEntity = destEntities[i];
- const destAcceptor = destEntity.components.ItemAcceptor;
- const destStaticComp = destEntity.components.StaticMapEntity;
+ for (let i = 0; i < sourceEntities.length; ++i) {
+ const sourceEntity = sourceEntities[i];
+ const sourceEjector = sourceEntity.components.ItemEjector;
+ const sourceBeltComp = sourceEntity.components.Belt;
+ const sourceStaticComp = sourceEntity.components.StaticMapEntity;
+ const ejectorAcceptLocalTile = sourceStaticComp.worldToLocalTile(acceptorSlotWsTile);
// If this entity is on the same layer as the slot - if so, it can either be
// connected, or it can not be connected and thus block the input
- if (destEntity.layer === slot.layer) {
- const destLocalTile = destStaticComp.worldToLocalTile(ejectorSlotWsTile);
- const destLocalDir = destStaticComp.worldDirectionToLocal(ejectorSlotWsDirection);
- if (
- destAcceptor &&
- destAcceptor.findMatchingSlot(destLocalTile, destLocalDir, this.root.currentLayer)
- ) {
- // This one is connected, all good
- isConnected = true;
- } else {
- // This one is blocked
- isBlocked = true;
- }
+ if (sourceEjector && sourceEjector.anySlotEjectsToLocalTile(ejectorAcceptLocalTile)) {
+ // This one is connected, all good
+ isConnected = true;
+ } else if (
+ sourceBeltComp &&
+ sourceStaticComp.localDirectionToWorld(sourceBeltComp.direction) ===
+ enumInvertedDirections[worldDirection]
+ ) {
+ // Belt connected
+ isConnected = true;
+ } else {
+ // This one is blocked
+ isBlocked = true;
}
}
@@ -572,14 +511,69 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic {
drawRotatedSprite({
parameters,
sprite,
- x: ejectorSLotWsPos.x,
- y: ejectorSLotWsPos.y,
- angle: Math.radians(enumDirectionToAngle[ejectorSlotWsDirection]),
+ x: acceptorSlotWsPos.x,
+ y: acceptorSlotWsPos.y,
+ angle: Math.radians(enumDirectionToAngle[enumInvertedDirections[worldDirection]]),
size: 13,
- offsetY: offsetShift,
+ offsetY: offsetShift + 13,
});
parameters.context.globalAlpha = 1;
}
}
+
+ // Go over all slots
+ for (let ejectorSlotIndex = 0; ejectorSlotIndex < ejectorSlots.length; ++ejectorSlotIndex) {
+ const slot = ejectorSlots[ejectorSlotIndex];
+
+ const ejectorSlotLocalTile = slot.pos.add(enumDirectionToVector[slot.direction]);
+ const ejectorSlotWsTile = staticComp.localTileToWorld(ejectorSlotLocalTile);
+
+ const ejectorSLotWsPos = ejectorSlotWsTile.toWorldSpaceCenterOfTile();
+ const ejectorSlotWsDirection = staticComp.localDirectionToWorld(slot.direction);
+
+ let isBlocked = false;
+ let isConnected = false;
+
+ // Find all entities which are on that tile
+ const destEntities = this.root.map.getLayersContentsMultipleXY(
+ ejectorSlotWsTile.x,
+ ejectorSlotWsTile.y
+ );
+
+ // Check for every entity:
+ for (let i = 0; i < destEntities.length; ++i) {
+ const destEntity = destEntities[i];
+ const destAcceptor = destEntity.components.ItemAcceptor;
+ const destStaticComp = destEntity.components.StaticMapEntity;
+
+ const destLocalTile = destStaticComp.worldToLocalTile(ejectorSlotWsTile);
+ const destLocalDir = destStaticComp.worldDirectionToLocal(ejectorSlotWsDirection);
+ if (destAcceptor && destAcceptor.findMatchingSlot(destLocalTile, destLocalDir)) {
+ // This one is connected, all good
+ isConnected = true;
+ } else if (destEntity.components.Belt && destLocalDir === enumDirection.top) {
+ // Connected to a belt
+ isConnected = true;
+ } else {
+ // This one is blocked
+ isBlocked = true;
+ }
+ }
+
+ const alpha = isConnected || isBlocked ? 1.0 : 0.3;
+ const sprite = isBlocked ? badArrowSprite : goodArrowSprite;
+
+ parameters.context.globalAlpha = alpha;
+ drawRotatedSprite({
+ parameters,
+ sprite,
+ x: ejectorSLotWsPos.x,
+ y: ejectorSLotWsPos.y,
+ angle: Math.radians(enumDirectionToAngle[ejectorSlotWsDirection]),
+ size: 13,
+ offsetY: offsetShift,
+ });
+ parameters.context.globalAlpha = 1;
+ }
}
}
diff --git a/src/js/game/hud/parts/buildings_toolbar.js b/src/js/game/hud/parts/buildings_toolbar.js
index c46a5c98..929f72b1 100644
--- a/src/js/game/hud/parts/buildings_toolbar.js
+++ b/src/js/game/hud/parts/buildings_toolbar.js
@@ -1,6 +1,5 @@
import { MetaBeltBaseBuilding } from "../../buildings/belt_base";
import { MetaCutterBuilding } from "../../buildings/cutter";
-import { MetaEnergyGenerator } from "../../buildings/energy_generator";
import { MetaMinerBuilding } from "../../buildings/miner";
import { MetaMixerBuilding } from "../../buildings/mixer";
import { MetaPainterBuilding } from "../../buildings/painter";
@@ -11,7 +10,6 @@ import { MetaTrashBuilding } from "../../buildings/trash";
import { MetaUndergroundBeltBuilding } from "../../buildings/underground_belt";
import { enumLayer } from "../../root";
import { HUDBaseToolbar } from "./base_toolbar";
-import { MetaAdvancedProcessorBuilding } from "../../buildings/advanced_processor";
const supportedBuildings = [
MetaBeltBaseBuilding,
@@ -24,9 +22,6 @@ const supportedBuildings = [
MetaMixerBuilding,
MetaPainterBuilding,
MetaTrashBuilding,
-
- MetaEnergyGenerator,
- MetaAdvancedProcessorBuilding,
];
export class HUDBuildingsToolbar extends HUDBaseToolbar {
diff --git a/src/js/game/hud/parts/color_blind_helper.js b/src/js/game/hud/parts/color_blind_helper.js
index c7dd6288..46890979 100644
--- a/src/js/game/hud/parts/color_blind_helper.js
+++ b/src/js/game/hud/parts/color_blind_helper.js
@@ -66,9 +66,6 @@ export class HUDColorBlindHelper extends BaseHUDPart {
if (ejectorComp) {
for (let i = 0; i < ejectorComp.slots.length; ++i) {
const slot = ejectorComp.slots[i];
- if (slot.layer !== this.root.currentLayer) {
- continue;
- }
if (slot.item && slot.item.getItemType() === enumItemType.color) {
return /** @type {ColorItem} */ (slot.item).color;
}
diff --git a/src/js/game/hud/parts/game_menu.js b/src/js/game/hud/parts/game_menu.js
index 64285624..2f820f7a 100644
--- a/src/js/game/hud/parts/game_menu.js
+++ b/src/js/game/hud/parts/game_menu.js
@@ -1,10 +1,9 @@
import { BaseHUDPart } from "../base_hud_part";
-import { makeDiv, randomInt } from "../../../core/utils";
+import { makeDiv } from "../../../core/utils";
import { SOUNDS } from "../../../platform/sound";
import { enumNotificationType } from "./notifications";
import { T } from "../../../translations";
import { KEYMAPPINGS } from "../../key_action_mapper";
-import { IS_DEMO } from "../../../core/config";
import { DynamicDomAttach } from "../dynamic_dom_attach";
export class HUDGameMenu extends BaseHUDPart {
diff --git a/src/js/game/hud/parts/pinned_shapes.js b/src/js/game/hud/parts/pinned_shapes.js
index bda49f1e..2f7dd11e 100644
--- a/src/js/game/hud/parts/pinned_shapes.js
+++ b/src/js/game/hud/parts/pinned_shapes.js
@@ -1,5 +1,5 @@
import { ClickDetector } from "../../../core/click_detector";
-import { formatBigNumber, makeDiv, arrayDelete, arrayDeleteValue } from "../../../core/utils";
+import { formatBigNumber, makeDiv, arrayDeleteValue } from "../../../core/utils";
import { ShapeDefinition } from "../../shape_definition";
import { BaseHUDPart } from "../base_hud_part";
import { blueprintShape, UPGRADES } from "../../upgrades";
diff --git a/src/js/game/hud/parts/settings_menu.js b/src/js/game/hud/parts/settings_menu.js
index 6034ab9d..391fde01 100644
--- a/src/js/game/hud/parts/settings_menu.js
+++ b/src/js/game/hud/parts/settings_menu.js
@@ -1,13 +1,11 @@
import { BaseHUDPart } from "../base_hud_part";
-import { makeDiv, formatSeconds, formatBigNumberFull } from "../../../core/utils";
+import { makeDiv, formatBigNumberFull } from "../../../core/utils";
import { DynamicDomAttach } from "../dynamic_dom_attach";
import { InputReceiver } from "../../../core/input_receiver";
import { KeyActionMapper, KEYMAPPINGS } from "../../key_action_mapper";
import { T } from "../../../translations";
import { StaticMapEntityComponent } from "../../components/static_map_entity";
-import { ItemProcessorComponent } from "../../components/item_processor";
import { BeltComponent } from "../../components/belt";
-import { IS_DEMO } from "../../../core/config";
export class HUDSettingsMenu extends BaseHUDPart {
createElements(parent) {
@@ -57,16 +55,7 @@ export class HUDSettingsMenu extends BaseHUDPart {
}
returnToMenu() {
- // if (IS_DEMO) {
- // const { cancel, deleteGame } = this.root.hud.parts.dialogs.showWarning(
- // T.dialogs.leaveNotPossibleInDemo.title,
- // T.dialogs.leaveNotPossibleInDemo.desc,
- // ["cancel:good", "deleteGame:bad"]
- // );
- // deleteGame.add(() => this.root.gameState.goBackToMenu());
- // } else {
this.root.gameState.goBackToMenu();
- // }
}
goToSettings() {
@@ -102,7 +91,6 @@ export class HUDSettingsMenu extends BaseHUDPart {
show() {
this.visible = true;
document.body.classList.add("ingameDialogOpen");
- // this.background.classList.add("visible");
this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever);
const totalMinutesPlayed = Math.ceil(this.root.time.now() / 60);
diff --git a/src/js/game/hud/parts/statistics.js b/src/js/game/hud/parts/statistics.js
index e1a747a2..e15af4fb 100644
--- a/src/js/game/hud/parts/statistics.js
+++ b/src/js/game/hud/parts/statistics.js
@@ -1,5 +1,5 @@
import { InputReceiver } from "../../../core/input_receiver";
-import { makeButton, makeDiv, removeAllChildren, capitalizeFirstLetter } from "../../../core/utils";
+import { makeButton, makeDiv, removeAllChildren } from "../../../core/utils";
import { KeyActionMapper, KEYMAPPINGS } from "../../key_action_mapper";
import { enumAnalyticsDataSource } from "../../production_analytics";
import { BaseHUDPart } from "../base_hud_part";
@@ -7,6 +7,14 @@ import { DynamicDomAttach } from "../dynamic_dom_attach";
import { enumDisplayMode, HUDShapeStatisticsHandle } from "./statistics_handle";
import { T } from "../../../translations";
+/**
+ * Capitalizes the first letter
+ * @param {string} str
+ */
+function capitalizeFirstLetter(str) {
+ return str.substr(0, 1).toUpperCase() + str.substr(1).toLowerCase();
+}
+
export class HUDStatistics extends BaseHUDPart {
createElements(parent) {
this.background = makeDiv(parent, "ingame_HUD_Statistics", ["ingameDialog"]);
diff --git a/src/js/game/hud/parts/wires_overlay.js b/src/js/game/hud/parts/wires_overlay.js
index 8bda5d0d..b861e5f9 100644
--- a/src/js/game/hud/parts/wires_overlay.js
+++ b/src/js/game/hud/parts/wires_overlay.js
@@ -75,7 +75,7 @@ export class HUDWiresOverlay extends BaseHUDPart {
const scaleFactor = 1 / wiresBackgroundDpi;
- parameters.context.globalAlpha = 0.9 * this.currentAlpha;
+ parameters.context.globalAlpha = this.currentAlpha;
parameters.context.globalCompositeOperation = "darken";
parameters.context.scale(scaleFactor, scaleFactor);
parameters.context.fillStyle = this.cachedPatternBackground;
@@ -88,10 +88,5 @@ export class HUDWiresOverlay extends BaseHUDPart {
parameters.context.scale(1 / scaleFactor, 1 / scaleFactor);
parameters.context.globalCompositeOperation = "source-over";
parameters.context.globalAlpha = 1;
-
- // parameters.context.fillStyle = "#3a85bf";
- // parameters.context.globalAlpha = 0.0 * this.currentAlpha;
- // parameters.context.fillRect(bounds.x, bounds.y, bounds.w, bounds.h);
- // parameters.context.globalAlpha = 1;
}
}
diff --git a/src/js/game/hud/parts/wires_toolbar.js b/src/js/game/hud/parts/wires_toolbar.js
index 6ebc0a98..deb73f18 100644
--- a/src/js/game/hud/parts/wires_toolbar.js
+++ b/src/js/game/hud/parts/wires_toolbar.js
@@ -1,9 +1,7 @@
-import { MetaWireBaseBuilding } from "../../buildings/wire_base";
import { enumLayer } from "../../root";
import { HUDBaseToolbar } from "./base_toolbar";
-import { MetaWireCrossingsBuilding } from "../../buildings/wire_crossings";
-const supportedBuildings = [MetaWireBaseBuilding, MetaWireCrossingsBuilding];
+const supportedBuildings = [];
export class HUDWiresToolbar extends HUDBaseToolbar {
constructor(root) {
diff --git a/src/js/game/hud/trailer_maker.js b/src/js/game/hud/trailer_maker.js
index 2834b40d..cb81aab3 100644
--- a/src/js/game/hud/trailer_maker.js
+++ b/src/js/game/hud/trailer_maker.js
@@ -92,7 +92,7 @@ export class TrailerMaker {
const speed =
globalConfig.tileSize *
globalConfig.beltSpeedItemsPerSecond *
- globalConfig.beltItemSpacingByLayer[enumLayer.regular];
+ globalConfig.itemSpacingOnBelts;
// let time =
// this.currentPlaybackOrigin.distance(Vector.fromSerializedObject(nextMarker.pos)) / speed;
const time = nextMarker.time;
diff --git a/src/js/game/items/color_item.js b/src/js/game/items/color_item.js
index d1b9a217..61dcfaf1 100644
--- a/src/js/game/items/color_item.js
+++ b/src/js/game/items/color_item.js
@@ -54,14 +54,14 @@ export class ColorItem extends BaseItem {
const dpi = smoothenDpi(globalConfig.shapesSharpness * parameters.zoomLevel);
const key = size + "/" + dpi;
- const canvas = parameters.root.buffers.getForKey(
+ const canvas = parameters.root.buffers.getForKey({
key,
- this.color,
- size,
- size,
+ subKey: this.color,
+ w: size,
+ h: size,
dpi,
- this.bufferGenerator
- );
+ redrawMethod: this.bufferGenerator,
+ });
parameters.context.drawImage(canvas, x - size / 2, y - size / 2, size, size);
}
/**
diff --git a/src/js/game/key_action_mapper.js b/src/js/game/key_action_mapper.js
index 2dfc5bb1..542009ee 100644
--- a/src/js/game/key_action_mapper.js
+++ b/src/js/game/key_action_mapper.js
@@ -54,12 +54,6 @@ export const KEYMAPPINGS = {
mixer: { keyCode: key("8") },
painter: { keyCode: key("9") },
trash: { keyCode: key("0") },
- energy_generator: { keyCode: key("O") },
- advanced_processor: { keyCode: key("P") },
-
- // Wires layer
- wire: { keyCode: key("1") },
- wire_crossings: { keyCode: key("2") },
},
placement: {
diff --git a/src/js/game/logic.js b/src/js/game/logic.js
index 403fa15b..0997d686 100644
--- a/src/js/game/logic.js
+++ b/src/js/game/logic.js
@@ -3,7 +3,7 @@ import { round2Digits } from "../core/utils";
import { enumDirection, enumDirectionToVector, Vector } from "../core/vector";
import { Entity } from "./entity";
import { MetaBuilding } from "./meta_building";
-import { enumLayer, GameRoot } from "./root";
+import { GameRoot, enumLayer } from "./root";
import { STOP_PROPAGATION } from "../core/signal";
const logger = createLogger("ingame/logic");
@@ -63,9 +63,12 @@ export class GameLogic {
for (let y = rect.y; y < rect.y + rect.h; ++y) {
// Check if there is any direct collision
const otherEntity = this.root.map.getLayerContentXY(x, y, entity.layer);
- if (otherEntity && !otherEntity.components.ReplaceableMapEntity) {
- // This one is a direct blocker
- return false;
+ if (otherEntity) {
+ const metaClass = otherEntity.components.StaticMapEntity.getMetaBuilding();
+ if (!metaClass.getIsReplaceable()) {
+ // This one is a direct blocker
+ return false;
+ }
}
}
}
@@ -121,7 +124,7 @@ export class GameLogic {
const contents = this.root.map.getLayerContentXY(x, y, entity.layer);
if (contents) {
assertAlways(
- contents.components.ReplaceableMapEntity,
+ contents.components.StaticMapEntity.getMetaBuilding().getIsReplaceable(),
"Tried to replace non-repleaceable entity"
);
if (!this.tryDeleteBuilding(contents)) {
@@ -158,7 +161,8 @@ export class GameLogic {
* @param {Entity} building
*/
canDeleteBuilding(building) {
- return building.components.StaticMapEntity && !building.components.Unremovable;
+ const staticComp = building.components.StaticMapEntity;
+ return staticComp.getMetaBuilding().getIsRemovable();
}
/**
@@ -178,10 +182,9 @@ export class GameLogic {
/**
* Returns the acceptors and ejectors which affect the current tile
* @param {Vector} tile
- * @param {enumLayer} layer
* @returns {AcceptorsAndEjectorsAffectingTile}
*/
- getEjectorsAndAcceptorsAtTile(tile, layer) {
+ getEjectorsAndAcceptorsAtTile(tile) {
/** @type {EjectorsAffectingTile} */
let ejectors = [];
/** @type {AcceptorsAffectingTile} */
@@ -194,54 +197,61 @@ export class GameLogic {
continue;
}
- const entities = this.root.map.getLayersContentsMultipleXY(tile.x + dx, tile.y + dy);
- for (let i = 0; i < entities.length; ++i) {
- const entity = entities[i];
+ const entity = this.root.map.getLayerContentXY(tile.x + dx, tile.y + dy, enumLayer.regular);
+ if (entity) {
+ let ejectorSlots = [];
+ let acceptorSlots = [];
const staticComp = entity.components.StaticMapEntity;
const itemEjector = entity.components.ItemEjector;
+ const itemAcceptor = entity.components.ItemAcceptor;
+ const beltComp = entity.components.Belt;
+
if (itemEjector) {
- for (let ejectorSlot = 0; ejectorSlot < itemEjector.slots.length; ++ejectorSlot) {
- const slot = itemEjector.slots[ejectorSlot];
- if (slot.layer !== layer) {
- continue;
- }
- const wsTile = staticComp.localTileToWorld(slot.pos);
- const wsDirection = staticComp.localDirectionToWorld(slot.direction);
- const targetTile = wsTile.add(enumDirectionToVector[wsDirection]);
- if (targetTile.equals(tile)) {
- ejectors.push({
- entity,
- slot,
- fromTile: wsTile,
- toDirection: wsDirection,
- });
- }
+ ejectorSlots = itemEjector.slots.slice();
+ }
+
+ if (itemAcceptor) {
+ acceptorSlots = itemAcceptor.slots.slice();
+ }
+
+ if (beltComp) {
+ const fakeEjectorSlot = beltComp.getFakeEjectorSlot();
+ const fakeAcceptorSlot = beltComp.getFakeAcceptorSlot();
+ ejectorSlots.push(fakeEjectorSlot);
+ acceptorSlots.push(fakeAcceptorSlot);
+ }
+
+ for (let ejectorSlot = 0; ejectorSlot < ejectorSlots.length; ++ejectorSlot) {
+ const slot = ejectorSlots[ejectorSlot];
+ const wsTile = staticComp.localTileToWorld(slot.pos);
+ const wsDirection = staticComp.localDirectionToWorld(slot.direction);
+ const targetTile = wsTile.add(enumDirectionToVector[wsDirection]);
+ if (targetTile.equals(tile)) {
+ ejectors.push({
+ entity,
+ slot,
+ fromTile: wsTile,
+ toDirection: wsDirection,
+ });
}
}
- const itemAcceptor = entity.components.ItemAcceptor;
- if (itemAcceptor) {
- for (let acceptorSlot = 0; acceptorSlot < itemAcceptor.slots.length; ++acceptorSlot) {
- const slot = itemAcceptor.slots[acceptorSlot];
- if (slot.layer !== layer) {
- continue;
- }
+ for (let acceptorSlot = 0; acceptorSlot < acceptorSlots.length; ++acceptorSlot) {
+ const slot = acceptorSlots[acceptorSlot];
+ const wsTile = staticComp.localTileToWorld(slot.pos);
+ for (let k = 0; k < slot.directions.length; ++k) {
+ const direction = slot.directions[k];
+ const wsDirection = staticComp.localDirectionToWorld(direction);
- const wsTile = staticComp.localTileToWorld(slot.pos);
- for (let k = 0; k < slot.directions.length; ++k) {
- const direction = slot.directions[k];
- const wsDirection = staticComp.localDirectionToWorld(direction);
-
- const sourceTile = wsTile.add(enumDirectionToVector[wsDirection]);
- if (sourceTile.equals(tile)) {
- acceptors.push({
- entity,
- slot,
- toTile: wsTile,
- fromDirection: wsDirection,
- });
- }
+ const sourceTile = wsTile.add(enumDirectionToVector[wsDirection]);
+ if (sourceTile.equals(tile)) {
+ acceptors.push({
+ entity,
+ slot,
+ toTile: wsTile,
+ fromDirection: wsDirection,
+ });
}
}
}
diff --git a/src/js/game/map.js b/src/js/game/map.js
index 3f8a16f8..b0992627 100644
--- a/src/js/game/map.js
+++ b/src/js/game/map.js
@@ -5,7 +5,6 @@ import { Entity } from "./entity";
import { createLogger } from "../core/logging";
import { BaseItem } from "./base_item";
import { MapChunkView } from "./map_chunk_view";
-import { randomInt } from "../core/utils";
import { BasicSerializableObject, types } from "../savegame/serialization";
const logger = createLogger("map");
diff --git a/src/js/game/map_chunk.js b/src/js/game/map_chunk.js
index dd9ba81d..84b9e47a 100644
--- a/src/js/game/map_chunk.js
+++ b/src/js/game/map_chunk.js
@@ -28,25 +28,13 @@ export class MapChunk {
this.tileY = y * globalConfig.mapChunkSize;
/** @type {Array>} */
- this.contents = make2DUndefinedArray(
- globalConfig.mapChunkSize,
- globalConfig.mapChunkSize,
- "map-chunk@" + this.x + "|" + this.y
- );
+ this.contents = make2DUndefinedArray(globalConfig.mapChunkSize, globalConfig.mapChunkSize);
/** @type {Array>} */
- this.wireContents = make2DUndefinedArray(
- globalConfig.mapChunkSize,
- globalConfig.mapChunkSize,
- "map-chunk-wires@" + this.x + "|" + this.y
- );
+ this.wireContents = make2DUndefinedArray(globalConfig.mapChunkSize, globalConfig.mapChunkSize);
/** @type {Array>} */
- this.lowerLayer = make2DUndefinedArray(
- globalConfig.mapChunkSize,
- globalConfig.mapChunkSize,
- "map-chunk-lower@" + this.x + "|" + this.y
- );
+ this.lowerLayer = make2DUndefinedArray(globalConfig.mapChunkSize, globalConfig.mapChunkSize);
/** @type {Array} */
this.containedEntities = [];
diff --git a/src/js/game/map_chunk_view.js b/src/js/game/map_chunk_view.js
index c3f09b39..3b9f61a1 100644
--- a/src/js/game/map_chunk_view.js
+++ b/src/js/game/map_chunk_view.js
@@ -1,15 +1,12 @@
import { MapChunk } from "./map_chunk";
-import { GameRoot } from "./root";
-import { globalConfig } from "../core/config";
+import { GameRoot, enumLayer } from "./root";
import { DrawParameters } from "../core/draw_parameters";
-import { round1Digit } from "../core/utils";
-import { Rectangle } from "../core/rectangle";
-import { createLogger } from "../core/logging";
import { smoothenDpi } from "../core/dpi_manager";
+import { globalConfig } from "../core/config";
import { THEME } from "./theme";
+import { getBuildingDataFromCode } from "./building_codes";
-const logger = createLogger("chunk");
-const chunkSizePixels = globalConfig.mapChunkSize * globalConfig.tileSize;
+const CHUNK_OVERLAY_RES = 3;
export class MapChunkView extends MapChunk {
/**
@@ -58,12 +55,131 @@ export class MapChunkView extends MapChunk {
}
/**
- * Draws the wires layer
+ * Overlay
* @param {DrawParameters} parameters
*/
- drawWiresLayer(parameters) {
- const systems = this.root.systemMgr.systems;
- systems.belt.drawWiresChunk(parameters, this);
+ drawOverlay(parameters) {
+ const sprite = this.root.buffers.getForKey({
+ key: "chunk@" + this.root.currentLayer,
+ subKey: this.renderKey,
+ w: globalConfig.mapChunkSize * CHUNK_OVERLAY_RES,
+ h: globalConfig.mapChunkSize * CHUNK_OVERLAY_RES,
+ dpi: 1,
+ redrawMethod: this.generateOverlayBuffer.bind(this),
+ });
+
+ const dims = globalConfig.mapChunkSize * globalConfig.tileSize;
+
+ parameters.context.imageSmoothingEnabled = false;
+
+ parameters.context.drawImage(sprite, this.x * dims, this.y * dims, dims, dims);
+ parameters.context.imageSmoothingEnabled = true;
+
+ for (let i = 0; i < this.patches.length; ++i) {
+ const patch = this.patches[i];
+
+ patch.item.draw(
+ this.x * dims + patch.pos.x * globalConfig.tileSize,
+ this.y * dims + patch.pos.y * globalConfig.tileSize,
+ parameters,
+ Math.min(80, 30 / parameters.zoomLevel)
+ );
+ }
+ }
+
+ /**
+ *
+ * @param {HTMLCanvasElement} canvas
+ * @param {CanvasRenderingContext2D} context
+ * @param {number} w
+ * @param {number} h
+ * @param {number} dpi
+ */
+ generateOverlayBuffer(canvas, context, w, h, dpi) {
+ context.fillStyle =
+ this.containedEntities.length > 0
+ ? THEME.map.chunkOverview.filled
+ : THEME.map.chunkOverview.empty;
+ context.fillRect(0, 0, w, h);
+
+ for (let x = 0; x < globalConfig.mapChunkSize; ++x) {
+ const lowerArray = this.lowerLayer[x];
+ const upperArray = this.contents[x];
+ for (let y = 0; y < globalConfig.mapChunkSize; ++y) {
+ const upperContent = upperArray[y];
+ if (upperContent) {
+ const staticComp = upperContent.components.StaticMapEntity;
+ const data = getBuildingDataFromCode(staticComp.code);
+ const metaBuilding = data.metaInstance;
+
+ const overlayMatrix = metaBuilding.getSpecialOverlayRenderMatrix(
+ staticComp.rotation,
+ data.rotationVariant,
+ data.variant,
+ upperContent
+ );
+
+ if (overlayMatrix) {
+ // Draw lower content first since it "shines" through
+ const lowerContent = lowerArray[y];
+ if (lowerContent) {
+ context.fillStyle = lowerContent.getBackgroundColorAsResource();
+ context.fillRect(
+ x * CHUNK_OVERLAY_RES,
+ y * CHUNK_OVERLAY_RES,
+ CHUNK_OVERLAY_RES,
+ CHUNK_OVERLAY_RES
+ );
+ }
+
+ context.fillStyle = metaBuilding.getSilhouetteColor();
+ for (let dx = 0; dx < 3; ++dx) {
+ for (let dy = 0; dy < 3; ++dy) {
+ const isFilled = overlayMatrix[dx + dy * 3];
+ if (isFilled) {
+ context.fillRect(
+ x * CHUNK_OVERLAY_RES + dx,
+ y * CHUNK_OVERLAY_RES + dy,
+ 1,
+ 1
+ );
+ }
+ }
+ }
+
+ continue;
+ } else {
+ context.fillStyle = metaBuilding.getSilhouetteColor();
+ context.fillRect(
+ x * CHUNK_OVERLAY_RES,
+ y * CHUNK_OVERLAY_RES,
+ CHUNK_OVERLAY_RES,
+ CHUNK_OVERLAY_RES
+ );
+
+ continue;
+ }
+ }
+
+ const lowerContent = lowerArray[y];
+ if (lowerContent) {
+ context.fillStyle = lowerContent.getBackgroundColorAsResource();
+ context.fillRect(
+ x * CHUNK_OVERLAY_RES,
+ y * CHUNK_OVERLAY_RES,
+ CHUNK_OVERLAY_RES,
+ CHUNK_OVERLAY_RES
+ );
+ }
+ }
+ }
+
+ if (this.root.currentLayer === enumLayer.wires) {
+ // Draw wires overlay
+
+ context.fillStyle = THEME.map.wires.overlayColor;
+ context.fillRect(0, 0, w, h);
+ }
}
/**
diff --git a/src/js/game/map_view.js b/src/js/game/map_view.js
index bd10755c..62039468 100644
--- a/src/js/game/map_view.js
+++ b/src/js/game/map_view.js
@@ -167,14 +167,6 @@ export class MapView extends BaseMap {
}
}
- /**
- * Draws the wires background
- * @param {DrawParameters} parameters
- */
- drawWiresLayer(parameters) {
- this.drawVisibleChunks(parameters, MapChunkView.prototype.drawWiresLayer);
- }
-
/**
* Draws the wires foreground
* @param {DrawParameters} parameters
@@ -183,33 +175,38 @@ export class MapView extends BaseMap {
this.drawVisibleChunks(parameters, MapChunkView.prototype.drawWiresForegroundLayer);
}
+ /**
+ * Draws the map overlay
+ * @param {DrawParameters} parameters
+ */
+ drawOverlay(parameters) {
+ this.drawVisibleChunks(parameters, MapChunkView.prototype.drawOverlay);
+ }
+
/**
* Draws the map background
* @param {DrawParameters} parameters
*/
drawBackground(parameters) {
- // If not using prerendered, draw background
- if (parameters.zoomLevel > globalConfig.mapChunkPrerenderMinZoom) {
- if (!this.cachedBackgroundPattern) {
- this.cachedBackgroundPattern = parameters.context.createPattern(
- this.cachedBackgroundCanvas,
- "repeat"
- );
- }
-
- const dpi = this.backgroundCacheDPI;
- parameters.context.scale(1 / dpi, 1 / dpi);
-
- parameters.context.fillStyle = this.cachedBackgroundPattern;
- parameters.context.fillRect(
- parameters.visibleRect.x * dpi,
- parameters.visibleRect.y * dpi,
- parameters.visibleRect.w * dpi,
- parameters.visibleRect.h * dpi
+ if (!this.cachedBackgroundPattern) {
+ this.cachedBackgroundPattern = parameters.context.createPattern(
+ this.cachedBackgroundCanvas,
+ "repeat"
);
- parameters.context.scale(dpi, dpi);
}
+ const dpi = this.backgroundCacheDPI;
+ parameters.context.scale(1 / dpi, 1 / dpi);
+
+ parameters.context.fillStyle = this.cachedBackgroundPattern;
+ parameters.context.fillRect(
+ parameters.visibleRect.x * dpi,
+ parameters.visibleRect.y * dpi,
+ parameters.visibleRect.w * dpi,
+ parameters.visibleRect.h * dpi
+ );
+ parameters.context.scale(dpi, dpi);
+
this.drawVisibleChunks(parameters, MapChunkView.prototype.drawBackgroundLayer);
if (G_IS_DEV && globalConfig.debug.showChunkBorders) {
diff --git a/src/js/game/meta_building.js b/src/js/game/meta_building.js
index 722dca13..27c911b1 100644
--- a/src/js/game/meta_building.js
+++ b/src/js/game/meta_building.js
@@ -54,6 +54,18 @@ export class MetaBuilding {
return false;
}
+ /**
+ * Can return a special interlaved 9 elements overlay matrix for rendering
+ * @param {number} rotation
+ * @param {number} rotationVariant
+ * @param {string} variant
+ * @param {Entity} entity
+ * @returns {Array|null}
+ */
+ getSpecialOverlayRenderMatrix(rotation, rotationVariant, variant, entity) {
+ return null;
+ }
+
/**
* Should return additional statistics about this building
* @param {GameRoot} root
@@ -64,6 +76,13 @@ export class MetaBuilding {
return [];
}
+ /**
+ * Returns whether this building can get replaced
+ */
+ getIsReplaceable() {
+ return false;
+ }
+
/**
* Whether to flip the orientation after a building has been placed - useful
* for tunnels.
@@ -80,6 +99,14 @@ export class MetaBuilding {
return false;
}
+ /**
+ * Returns whether this building is removable
+ * @returns {boolean}
+ */
+ getIsRemovable() {
+ return true;
+ }
+
/**
* Returns the placement sound
* @returns {string}
diff --git a/src/js/game/meta_building_registry.js b/src/js/game/meta_building_registry.js
index 20ca6f41..36e534ac 100644
--- a/src/js/game/meta_building_registry.js
+++ b/src/js/game/meta_building_registry.js
@@ -1,10 +1,8 @@
import { gMetaBuildingRegistry } from "../core/global_registries";
import { createLogger } from "../core/logging";
-import { MetaAdvancedProcessorBuilding } from "./buildings/advanced_processor";
import { MetaBeltBuilding } from "./buildings/belt";
import { MetaBeltBaseBuilding } from "./buildings/belt_base";
import { enumCutterVariants, MetaCutterBuilding } from "./buildings/cutter";
-import { MetaEnergyGenerator } from "./buildings/energy_generator";
import { MetaHubBuilding } from "./buildings/hub";
import { enumMinerVariants, MetaMinerBuilding } from "./buildings/miner";
import { MetaMixerBuilding } from "./buildings/mixer";
@@ -14,8 +12,6 @@ import { enumSplitterVariants, MetaSplitterBuilding } from "./buildings/splitter
import { MetaStackerBuilding } from "./buildings/stacker";
import { enumTrashVariants, MetaTrashBuilding } from "./buildings/trash";
import { enumUndergroundBeltVariants, MetaUndergroundBeltBuilding } from "./buildings/underground_belt";
-import { MetaWireBaseBuilding } from "./buildings/wire_base";
-import { enumWireCrossingVariants, MetaWireCrossingsBuilding } from "./buildings/wire_crossings";
import { gBuildingVariants, registerBuildingVariant } from "./building_codes";
import { defaultBuildingVariant } from "./meta_building";
@@ -33,10 +29,6 @@ export function initMetaBuildingRegistry() {
gMetaBuildingRegistry.register(MetaBeltBuilding);
gMetaBuildingRegistry.register(MetaUndergroundBeltBuilding);
gMetaBuildingRegistry.register(MetaHubBuilding);
- gMetaBuildingRegistry.register(MetaEnergyGenerator);
- gMetaBuildingRegistry.register(MetaWireBaseBuilding);
- gMetaBuildingRegistry.register(MetaAdvancedProcessorBuilding);
- gMetaBuildingRegistry.register(MetaWireCrossingsBuilding);
// Belt
registerBuildingVariant(1, MetaBeltBaseBuilding, defaultBuildingVariant, 0);
@@ -86,21 +78,6 @@ export function initMetaBuildingRegistry() {
// Hub
registerBuildingVariant(26, MetaHubBuilding);
- // Energy generator
- registerBuildingVariant(27, MetaEnergyGenerator);
-
- // Wire
- registerBuildingVariant(28, MetaWireBaseBuilding, defaultBuildingVariant, 0);
- registerBuildingVariant(29, MetaWireBaseBuilding, defaultBuildingVariant, 1);
- registerBuildingVariant(30, MetaWireBaseBuilding, defaultBuildingVariant, 2);
-
- // Advanced processor
- registerBuildingVariant(31, MetaAdvancedProcessorBuilding);
-
- // Wire crossing
- registerBuildingVariant(32, MetaWireCrossingsBuilding);
- registerBuildingVariant(33, MetaWireCrossingsBuilding, enumWireCrossingVariants.merger);
-
// Propagate instances
for (const key in gBuildingVariants) {
gBuildingVariants[key].metaInstance = gMetaBuildingRegistry.findByClass(
diff --git a/src/js/game/shape_definition.js b/src/js/game/shape_definition.js
index f6117a52..a016d23e 100644
--- a/src/js/game/shape_definition.js
+++ b/src/js/game/shape_definition.js
@@ -5,13 +5,7 @@ import { DrawParameters } from "../core/draw_parameters";
import { createLogger } from "../core/logging";
import { Vector } from "../core/vector";
import { BasicSerializableObject, types } from "../savegame/serialization";
-import {
- enumColors,
- enumColorsToHexCode,
- enumColorToShortcode,
- enumShortcodeToColor,
- enumInvertedColors,
-} from "./colors";
+import { enumColors, enumColorsToHexCode, enumColorToShortcode, enumShortcodeToColor } from "./colors";
import { THEME } from "./theme";
const rusha = require("rusha");
@@ -295,14 +289,14 @@ export class ShapeDefinition extends BasicSerializableObject {
}
const key = size + "/" + dpi;
- const canvas = parameters.root.buffers.getForKey(
+ const canvas = parameters.root.buffers.getForKey({
key,
- this.cachedHash,
- size,
- size,
+ subKey: this.cachedHash,
+ w: size,
+ h: size,
dpi,
- this.bufferGenerator
- );
+ redrawMethod: this.bufferGenerator,
+ });
parameters.context.drawImage(canvas, x - size / 2, y - size / 2, size, size);
}
@@ -598,23 +592,6 @@ export class ShapeDefinition extends BasicSerializableObject {
return new ShapeDefinition({ layers: newLayers });
}
- /**
- * Clones the shape and inverts all colors
- */
- cloneAndInvertColors() {
- const newLayers = this.internalCloneLayers();
- for (let layerIndex = 0; layerIndex < newLayers.length; ++layerIndex) {
- const quadrants = newLayers[layerIndex];
- for (let quadrantIndex = 0; quadrantIndex < 4; ++quadrantIndex) {
- const item = quadrants[quadrantIndex];
- if (item) {
- item.color = enumInvertedColors[item.color];
- }
- }
- }
- return new ShapeDefinition({ layers: newLayers });
- }
-
/**
* Clones the shape and colors everything in the given colors
* @param {[enumColors, enumColors, enumColors, enumColors]} colors
diff --git a/src/js/game/shape_definition_manager.js b/src/js/game/shape_definition_manager.js
index a3b8c841..bf240071 100644
--- a/src/js/game/shape_definition_manager.js
+++ b/src/js/game/shape_definition_manager.js
@@ -179,22 +179,6 @@ export class ShapeDefinitionManager extends BasicSerializableObject {
));
}
- /**
- * Generates a definition for inverting all colors on that shape
- * @param {ShapeDefinition} definition
- * @returns {ShapeDefinition}
- */
- shapeActionInvertColors(definition) {
- const key = "invert:" + definition.getHash();
- if (this.operationCache[key]) {
- return /** @type {ShapeDefinition} */ (this.operationCache[key]);
- }
- const inverted = definition.cloneAndInvertColors();
- return /** @type {ShapeDefinition} */ (this.operationCache[key] = this.registerOrReturnHandle(
- inverted
- ));
- }
-
/**
* Generates a definition for painting it with the 4 colors
* @param {ShapeDefinition} definition
diff --git a/src/js/game/systems/belt.js b/src/js/game/systems/belt.js
index db538a56..a581343c 100644
--- a/src/js/game/systems/belt.js
+++ b/src/js/game/systems/belt.js
@@ -13,9 +13,6 @@ import { Entity } from "../entity";
import { GameSystemWithFilter } from "../game_system_with_filter";
import { MapChunkView } from "../map_chunk_view";
import { defaultBuildingVariant } from "../meta_building";
-import { enumLayer } from "../root";
-import { MetaWireBaseBuilding } from "../buildings/wire_base";
-import { enumItemType } from "../base_item";
export const BELT_ANIM_COUNT = 28;
@@ -137,6 +134,9 @@ export class BeltSystem extends GameSystemWithFilter {
const originalRect = staticComp.getTileSpaceBounds();
const affectedArea = originalRect.expandedInAllDirections(1);
+ /** @type {Set} */
+ const changedPaths = new Set();
+
for (let x = affectedArea.x; x < affectedArea.right(); ++x) {
for (let y = affectedArea.y; y < affectedArea.bottom(); ++y) {
if (originalRect.containsPoint(x, y)) {
@@ -189,10 +189,17 @@ export class BeltSystem extends GameSystemWithFilter {
// Make sure the chunks know about the update
this.root.signals.entityChanged.dispatch(targetEntity);
}
+
+ if (targetBeltComp.assignedPath) {
+ changedPaths.add(targetBeltComp.assignedPath);
+ }
}
}
}
+ // notify all paths *afterwards* to avoid multi-updates
+ changedPaths.forEach(path => path.onSurroundingsChanged());
+
if (G_IS_DEV && globalConfig.debug.checkBeltPaths) {
this.debug_verifyBeltPaths();
}
@@ -310,14 +317,10 @@ export class BeltSystem extends GameSystemWithFilter {
/**
* Draws all belt paths
* @param {DrawParameters} parameters
- * @param {enumLayer} layer
*/
- drawLayerBeltItems(parameters, layer) {
+ drawBeltItems(parameters) {
for (let i = 0; i < this.beltPaths.length; ++i) {
- const path = this.beltPaths[i];
- if (path.layer === layer) {
- path.draw(parameters);
- }
+ this.beltPaths[i].draw(parameters);
}
}
@@ -361,24 +364,10 @@ export class BeltSystem extends GameSystemWithFilter {
const followUpBeltComp = followUpEntity.components.Belt;
if (followUpBeltComp) {
const followUpStatic = followUpEntity.components.StaticMapEntity;
- const followUpAcceptor = followUpEntity.components.ItemAcceptor;
- // Check if the belt accepts items from our direction
- const acceptorSlots = followUpAcceptor.slots;
- for (let i = 0; i < acceptorSlots.length; ++i) {
- const slot = acceptorSlots[i];
-
- // Make sure the acceptor slot is on the same layer
- if (slot.layer !== entity.layer) {
- continue;
- }
-
- for (let k = 0; k < slot.directions.length; ++k) {
- const localDirection = followUpStatic.localDirectionToWorld(slot.directions[k]);
- if (enumInvertedDirections[localDirection] === followUpDirection) {
- return followUpEntity;
- }
- }
+ const acceptedDirection = followUpStatic.localDirectionToWorld(enumDirection.top);
+ if (acceptedDirection === followUpDirection) {
+ return followUpEntity;
}
}
}
@@ -405,21 +394,12 @@ export class BeltSystem extends GameSystemWithFilter {
const supplyBeltComp = supplyEntity.components.Belt;
if (supplyBeltComp) {
const supplyStatic = supplyEntity.components.StaticMapEntity;
- const supplyEjector = supplyEntity.components.ItemEjector;
+ const otherDirection = supplyStatic.localDirectionToWorld(
+ enumInvertedDirections[supplyBeltComp.direction]
+ );
- // Check if the belt accepts items from our direction
- const ejectorSlots = supplyEjector.slots;
- for (let i = 0; i < ejectorSlots.length; ++i) {
- const slot = ejectorSlots[i];
-
- // Make sure the ejector slot is on the same layer
- if (slot.layer !== entity.layer) {
- continue;
- }
- const localDirection = supplyStatic.localDirectionToWorld(slot.direction);
- if (enumInvertedDirections[localDirection] === supplyDirection) {
- return supplyEntity;
- }
+ if (otherDirection === supplyDirection) {
+ return supplyEntity;
}
}
}
@@ -510,13 +490,13 @@ export class BeltSystem extends GameSystemWithFilter {
}
// Limit speed to avoid belts going backwards
- const speedMultiplier = Math.min(this.root.hubGoals.getBeltBaseSpeed(enumLayer.regular), 10);
+ const speedMultiplier = Math.min(this.root.hubGoals.getBeltBaseSpeed(), 10);
// SYNC with systems/item_acceptor.js:drawEntityUnderlays!
// 126 / 42 is the exact animation speed of the png animation
const animationIndex = Math.floor(
((this.root.time.realtimeNow() * speedMultiplier * BELT_ANIM_COUNT * 126) / 42) *
- globalConfig.beltItemSpacingByLayer[enumLayer.regular]
+ globalConfig.itemSpacingOnBelts
);
const contents = chunk.contents;
for (let y = 0; y < globalConfig.mapChunkSize; ++y) {
@@ -527,47 +507,13 @@ export class BeltSystem extends GameSystemWithFilter {
const direction = entity.components.Belt.direction;
const sprite = this.beltAnimations[direction][animationIndex % BELT_ANIM_COUNT];
- entity.components.StaticMapEntity.drawSpriteOnFullEntityBounds(
- parameters,
- sprite,
- 0,
- false
- );
+ entity.components.StaticMapEntity.drawSpriteOnFullEntityBounds(parameters, sprite, 0);
}
}
}
1;
}
- /**
- * Draws a given chunk
- * @param {DrawParameters} parameters
- * @param {MapChunkView} chunk
- */
- drawWiresChunk(parameters, chunk) {
- if (parameters.zoomLevel < globalConfig.mapChunkOverviewMinZoom) {
- return;
- }
-
- const contents = chunk.wireContents;
- for (let y = 0; y < globalConfig.mapChunkSize; ++y) {
- for (let x = 0; x < globalConfig.mapChunkSize; ++x) {
- const entity = contents[x][y];
-
- if (entity && entity.components.Belt) {
- const direction = entity.components.Belt.direction;
- const sprite = this.wireSprites[direction];
- entity.components.StaticMapEntity.drawSpriteOnFullEntityBounds(
- parameters,
- sprite,
- 0,
- false
- );
- }
- }
- }
- }
-
/**
* Draws the belt path debug overlays
* @param {DrawParameters} parameters
diff --git a/src/js/game/systems/belt_underlays.js b/src/js/game/systems/belt_underlays.js
new file mode 100644
index 00000000..4bfd4b48
--- /dev/null
+++ b/src/js/game/systems/belt_underlays.js
@@ -0,0 +1,67 @@
+import { globalConfig } from "../../core/config";
+import { drawRotatedSprite } from "../../core/draw_utils";
+import { Loader } from "../../core/loader";
+import { enumDirectionToAngle } from "../../core/vector";
+import { BeltUnderlaysComponent } from "../components/belt_underlays";
+import { Entity } from "../entity";
+import { GameSystemWithFilter } from "../game_system_with_filter";
+import { BELT_ANIM_COUNT } from "./belt";
+
+export class BeltUnderlaysSystem extends GameSystemWithFilter {
+ constructor(root) {
+ super(root, [BeltUnderlaysComponent]);
+
+ this.underlayBeltSprites = [];
+
+ for (let i = 0; i < BELT_ANIM_COUNT; ++i) {
+ this.underlayBeltSprites.push(Loader.getSprite("sprites/belt/forward_" + i + ".png"));
+ }
+ }
+
+ /**
+ * Draws the acceptor underlays
+ * @param {import("../../core/draw_utils").DrawParameters} parameters
+ */
+ drawUnderlays(parameters) {
+ this.forEachMatchingEntityOnScreen(parameters, this.drawEntityUnderlays.bind(this));
+ }
+
+ /**
+ * @param {import("../../core/draw_utils").DrawParameters} parameters
+ * @param {Entity} entity
+ */
+ drawEntityUnderlays(parameters, entity) {
+ const staticComp = entity.components.StaticMapEntity;
+ const underlayComp = entity.components.BeltUnderlays;
+
+ if (!staticComp.shouldBeDrawn(parameters)) {
+ return;
+ }
+
+ // Limit speed to avoid belts going backwards
+ const speedMultiplier = Math.min(this.root.hubGoals.getBeltBaseSpeed(), 10);
+
+ const underlays = underlayComp.underlays;
+ for (let i = 0; i < underlays.length; ++i) {
+ const { pos, direction } = underlays[i];
+
+ const transformedPos = staticComp.localTileToWorld(pos);
+ const angle = enumDirectionToAngle[staticComp.localDirectionToWorld(direction)];
+
+ // SYNC with systems/belt.js:drawSingleEntity!
+ const animationIndex = Math.floor(
+ ((this.root.time.realtimeNow() * speedMultiplier * BELT_ANIM_COUNT * 126) / 42) *
+ globalConfig.itemSpacingOnBelts
+ );
+
+ drawRotatedSprite({
+ parameters,
+ sprite: this.underlayBeltSprites[animationIndex % this.underlayBeltSprites.length],
+ x: (transformedPos.x + 0.5) * globalConfig.tileSize,
+ y: (transformedPos.y + 0.5) * globalConfig.tileSize,
+ angle: Math.radians(angle),
+ size: globalConfig.tileSize,
+ });
+ }
+ }
+}
diff --git a/src/js/game/systems/energy_consumer.js b/src/js/game/systems/energy_consumer.js
deleted file mode 100644
index 6552fb9a..00000000
--- a/src/js/game/systems/energy_consumer.js
+++ /dev/null
@@ -1,90 +0,0 @@
-import { DrawParameters } from "../../core/draw_parameters";
-import { Loader } from "../../core/loader";
-import { clamp } from "../../core/utils";
-import { enumItemType } from "../base_item";
-import { EnergyConsumerComponent } from "../components/energy_consumer";
-import { Entity } from "../entity";
-import { GameSystemWithFilter } from "../game_system_with_filter";
-import { NEGATIVE_ENERGY_ITEM_SINGLETON } from "../items/negative_energy_item";
-import { POSITIVE_ENERGY_ITEM_SINGLETON } from "../items/positive_energy_item";
-
-export class EnergyConsumerSystem extends GameSystemWithFilter {
- constructor(root) {
- super(root, [EnergyConsumerComponent]);
-
- this.batterySprites = [
- Loader.getSprite("sprites/wires/battery_empty.png"),
- Loader.getSprite("sprites/wires/battery_low.png"),
- Loader.getSprite("sprites/wires/battery_medium.png"),
- Loader.getSprite("sprites/wires/battery_full.png"),
- ];
-
- this.piledWasteSprite = Loader.getSprite("sprites/wires/waste_piled.png");
- }
-
- update() {
- for (let i = 0; i < this.allEntities.length; ++i) {
- const entity = this.allEntities[i];
- const energyConsumerComp = entity.components.EnergyConsumer;
-
- if (energyConsumerComp.piledOutput >= 1.0) {
- // Try to get rid of waste
-
- const ejectorComp = entity.components.ItemEjector;
- const item = this.getItemSingletonByType(energyConsumerComp.wasteType);
- if (ejectorComp.tryEject(energyConsumerComp.ejectorSlotIndex, item)) {
- // Got rid of waste
- energyConsumerComp.reduceWaste(1.0);
- }
- }
- }
- }
-
- /**
- *
- * @param {enumItemType} itemType
- */
- getItemSingletonByType(itemType) {
- switch (itemType) {
- case enumItemType.positiveEnergy:
- return POSITIVE_ENERGY_ITEM_SINGLETON;
- case enumItemType.negativeEnergy:
- return NEGATIVE_ENERGY_ITEM_SINGLETON;
- default:
- assertAlways(false, "Bad item type: " + itemType);
- }
- }
-
- /**
- * Draws everything
- * @param {DrawParameters} parameters
- */
- draw(parameters) {
- this.forEachMatchingEntityOnScreen(parameters, this.drawSingleEntity.bind(this));
- }
-
- /**
- * Draws a given entity
- * @param {DrawParameters} parameters
- * @param {Entity} entity
- */
- drawSingleEntity(parameters, entity) {
- const staticComp = entity.components.StaticMapEntity;
- const consumerComp = entity.components.EnergyConsumer;
-
- const position = staticComp.localTileToWorld(consumerComp.batteryPosition).toWorldSpaceCenterOfTile();
-
- if (consumerComp.hasTooMuchWastePiled()) {
- this.piledWasteSprite.drawCachedCentered(parameters, position.x, position.y, 12);
- } else {
- const percentage = consumerComp.stored / consumerComp.bufferSize;
- const index = clamp(
- Math.round(percentage * this.batterySprites.length),
- 0,
- this.batterySprites.length - 1
- );
-
- this.batterySprites[index].drawCachedCentered(parameters, position.x, position.y, 12);
- }
- }
-}
diff --git a/src/js/game/systems/energy_generator.js b/src/js/game/systems/energy_generator.js
deleted file mode 100644
index 76e14c01..00000000
--- a/src/js/game/systems/energy_generator.js
+++ /dev/null
@@ -1,97 +0,0 @@
-import { DrawParameters } from "../../core/draw_parameters";
-import { formatBigNumber } from "../../core/utils";
-import { T } from "../../translations";
-import { EnergyGeneratorComponent } from "../components/energy_generator";
-import { Entity } from "../entity";
-import { GameSystemWithFilter } from "../game_system_with_filter";
-import { POSITIVE_ENERGY_ITEM_SINGLETON } from "../items/positive_energy_item";
-import { ShapeDefinition } from "../shape_definition";
-import { Loader } from "../../core/loader";
-import { globalConfig } from "../../core/config";
-
-export class EnergyGeneratorSystem extends GameSystemWithFilter {
- constructor(root) {
- super(root, [EnergyGeneratorComponent]);
-
- this.energyGeneratorOverlay = Loader.getSprite("sprites/misc/energy_generator_overlay.png");
- }
-
- draw(parameters) {
- this.forEachMatchingEntityOnScreen(parameters, this.drawEntity.bind(this));
- }
-
- /**
- * Returns which shape is required for a given generator
- * @param {Entity} entity
- */
- getShapeRequiredForGenerator(entity) {
- return "CuCuCuCu";
- }
-
- update() {
- for (let i = 0; i < this.allEntities.length; ++i) {
- const entity = this.allEntities[i];
- const energyGenComp = entity.components.EnergyGenerator;
- const ejectorComp = entity.components.ItemEjector;
-
- if (!energyGenComp.requiredKey) {
- // Compute required key for this generator
- energyGenComp.requiredKey = this.getShapeRequiredForGenerator(entity);
- }
-
- if (energyGenComp.itemsInQueue > 0) {
- // FIXME: Find slot dynamically
- if (ejectorComp.tryEject(0, POSITIVE_ENERGY_ITEM_SINGLETON)) {
- energyGenComp.itemsInQueue -= 1;
- }
- }
- }
- }
-
- /**
- * @param {DrawParameters} parameters
- * @param {Entity} entity
- */
- drawEntity(parameters, entity) {
- const context = parameters.context;
- const staticComp = entity.components.StaticMapEntity;
-
- if (!staticComp.shouldBeDrawn(parameters)) {
- return;
- }
-
- const energyGenComp = entity.components.EnergyGenerator;
- if (!energyGenComp.requiredKey) {
- // Not initialized yet
- return;
- }
-
- const pos = staticComp.getTileSpaceBounds().getCenter().toWorldSpace();
-
- const definition = ShapeDefinition.fromShortKey(energyGenComp.requiredKey);
- definition.draw(pos.x, pos.y, parameters, 30);
-
- // Draw background
- this.energyGeneratorOverlay.drawCachedCentered(
- parameters,
- pos.x,
- pos.y,
- globalConfig.tileSize * 2 + 8
- );
-
- // TODO
- const energyGenerated = 5;
-
- // deliver: Deliver
- // toGenerateEnergy: For energy
- context.font = "bold 9px GameFont";
- context.fillStyle = "#64666e";
- context.textAlign = "left";
- context.fillText(T.buildings.energy_generator.deliver.toUpperCase(), pos.x - 25, pos.y - 18);
- context.fillText(T.buildings.energy_generator.toGenerateEnergy.toUpperCase(), pos.x - 25, pos.y + 27);
-
- context.font = "700 9px GameFont";
- context.fillStyle = "#dee1ea";
- context.fillText("" + formatBigNumber(energyGenerated), pos.x + 1, pos.y + 27);
- }
-}
diff --git a/src/js/game/systems/hub.js b/src/js/game/systems/hub.js
index f1d4ee28..5050b16a 100644
--- a/src/js/game/systems/hub.js
+++ b/src/js/game/systems/hub.js
@@ -17,21 +17,7 @@ export class HubSystem extends GameSystemWithFilter {
this.forEachMatchingEntityOnScreen(parameters, this.drawEntity.bind(this));
}
- update() {
- for (let i = 0; i < this.allEntities.length; ++i) {
- const entity = this.allEntities[i];
-
- const hubComponent = entity.components.Hub;
-
- const queue = hubComponent.definitionsToAnalyze;
- for (let k = 0; k < queue.length; ++k) {
- const definition = queue[k];
- this.root.hubGoals.handleDefinitionDelivered(definition);
- }
-
- hubComponent.definitionsToAnalyze = [];
- }
- }
+ update() {}
/**
* @param {DrawParameters} parameters
diff --git a/src/js/game/systems/item_acceptor.js b/src/js/game/systems/item_acceptor.js
index 2c0f1686..1caf14c6 100644
--- a/src/js/game/systems/item_acceptor.js
+++ b/src/js/game/systems/item_acceptor.js
@@ -1,24 +1,15 @@
-import { GameSystemWithFilter } from "../game_system_with_filter";
import { globalConfig } from "../../core/config";
import { DrawParameters } from "../../core/draw_parameters";
-import { Entity } from "../entity";
-import { enumDirectionToVector, enumDirectionToAngle } from "../../core/vector";
-import { ItemAcceptorComponent } from "../components/item_acceptor";
-import { Loader } from "../../core/loader";
-import { drawRotatedSprite } from "../../core/draw_utils";
-import { BELT_ANIM_COUNT } from "./belt";
import { fastArrayDelete } from "../../core/utils";
+import { enumDirectionToVector } from "../../core/vector";
+import { ItemAcceptorComponent } from "../components/item_acceptor";
+import { Entity } from "../entity";
+import { GameSystemWithFilter } from "../game_system_with_filter";
import { enumLayer } from "../root";
export class ItemAcceptorSystem extends GameSystemWithFilter {
constructor(root) {
super(root, [ItemAcceptorComponent]);
-
- this.underlayBeltSprites = [];
-
- for (let i = 0; i < BELT_ANIM_COUNT; ++i) {
- this.underlayBeltSprites.push(Loader.getSprite("sprites/belt/forward_" + i + ".png"));
- }
}
update() {
@@ -32,11 +23,8 @@ export class ItemAcceptorSystem extends GameSystemWithFilter {
// Process item consumption animations to avoid items popping from the belts
for (let animIndex = 0; animIndex < animations.length; ++animIndex) {
const anim = animations[animIndex];
- const layer = aceptorComp.slots[anim.slotIndex].layer;
anim.animProgress +=
- progress *
- this.root.hubGoals.getBeltBaseSpeed(layer) *
- globalConfig.beltItemSpacingByLayer[layer];
+ progress * this.root.hubGoals.getBeltBaseSpeed() * globalConfig.itemSpacingOnBelts;
if (anim.animProgress > 1) {
// Original
// animations.splice(animIndex, 1);
@@ -53,27 +41,16 @@ export class ItemAcceptorSystem extends GameSystemWithFilter {
/**
* Draws the acceptor items
* @param {DrawParameters} parameters
- * @param {enumLayer} layer
*/
- drawLayer(parameters, layer) {
- this.forEachMatchingEntityOnScreen(parameters, this.drawEntityRegularLayer.bind(this, layer));
+ draw(parameters) {
+ this.forEachMatchingEntityOnScreen(parameters, this.drawEntityRegularLayer.bind(this));
}
/**
- * Draws the acceptor underlays
- * @param {DrawParameters} parameters
- * @param {enumLayer} layer
- */
- drawUnderlays(parameters, layer) {
- this.forEachMatchingEntityOnScreen(parameters, this.drawEntityUnderlays.bind(this, layer));
- }
-
- /**
- * @param {enumLayer} layer
* @param {DrawParameters} parameters
* @param {Entity} entity
*/
- drawEntityRegularLayer(layer, parameters, entity) {
+ drawEntityRegularLayer(parameters, entity) {
const staticComp = entity.components.StaticMapEntity;
const acceptorComp = entity.components.ItemAcceptor;
@@ -87,10 +64,6 @@ export class ItemAcceptorSystem extends GameSystemWithFilter {
];
const slotData = acceptorComp.slots[slotIndex];
- if (slotData.layer !== layer) {
- // Don't draw non-regular slots for now
- continue;
- }
const slotWorldPos = staticComp.applyRotationToVector(slotData.pos).add(staticComp.origin);
const fadeOutDirection = enumDirectionToVector[staticComp.localDirectionToWorld(direction)];
@@ -105,48 +78,4 @@ export class ItemAcceptorSystem extends GameSystemWithFilter {
);
}
}
-
- /**
- * @param {enumLayer} layer
- * @param {DrawParameters} parameters
- * @param {Entity} entity
- */
- drawEntityUnderlays(layer, parameters, entity) {
- const staticComp = entity.components.StaticMapEntity;
- const acceptorComp = entity.components.ItemAcceptor;
-
- if (!staticComp.shouldBeDrawn(parameters)) {
- return;
- }
-
- // Limit speed to avoid belts going backwards
- const speedMultiplier = Math.min(this.root.hubGoals.getBeltBaseSpeed(layer), 10);
-
- const underlays = acceptorComp.beltUnderlays;
- for (let i = 0; i < underlays.length; ++i) {
- const { pos, direction, layer: underlayLayer } = underlays[i];
- if (underlayLayer !== layer) {
- // Not our layer
- continue;
- }
-
- const transformedPos = staticComp.localTileToWorld(pos);
- const angle = enumDirectionToAngle[staticComp.localDirectionToWorld(direction)];
-
- // SYNC with systems/belt.js:drawSingleEntity!
- const animationIndex = Math.floor(
- ((this.root.time.realtimeNow() * speedMultiplier * BELT_ANIM_COUNT * 126) / 42) *
- globalConfig.beltItemSpacingByLayer[layer]
- );
-
- drawRotatedSprite({
- parameters,
- sprite: this.underlayBeltSprites[animationIndex % this.underlayBeltSprites.length],
- x: (transformedPos.x + 0.5) * globalConfig.tileSize,
- y: (transformedPos.y + 0.5) * globalConfig.tileSize,
- angle: Math.radians(angle),
- size: globalConfig.tileSize,
- });
- }
- }
}
diff --git a/src/js/game/systems/item_ejector.js b/src/js/game/systems/item_ejector.js
index 316dc053..2a2df26a 100644
--- a/src/js/game/systems/item_ejector.js
+++ b/src/js/game/systems/item_ejector.js
@@ -2,12 +2,11 @@ import { globalConfig } from "../../core/config";
import { DrawParameters } from "../../core/draw_parameters";
import { createLogger } from "../../core/logging";
import { Rectangle } from "../../core/rectangle";
-import { enumDirectionToVector, Vector } from "../../core/vector";
-import { BaseItem, enumItemType, enumItemTypeToLayer } from "../base_item";
+import { enumDirection, enumDirectionToVector, Vector } from "../../core/vector";
+import { BaseItem } from "../base_item";
import { ItemEjectorComponent } from "../components/item_ejector";
import { Entity } from "../entity";
import { GameSystemWithFilter } from "../game_system_with_filter";
-import { enumLayer } from "../root";
const logger = createLogger("systems/ejector");
@@ -120,15 +119,13 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
const ejectorComp = entity.components.ItemEjector;
const staticComp = entity.components.StaticMapEntity;
- // Clear the old cache.
- ejectorComp.cachedConnectedSlots = null;
-
- for (let ejectorSlotIndex = 0; ejectorSlotIndex < ejectorComp.slots.length; ++ejectorSlotIndex) {
- const ejectorSlot = ejectorComp.slots[ejectorSlotIndex];
+ for (let slotIndex = 0; slotIndex < ejectorComp.slots.length; ++slotIndex) {
+ const ejectorSlot = ejectorComp.slots[slotIndex];
// Clear the old cache.
ejectorSlot.cachedDestSlot = null;
ejectorSlot.cachedTargetEntity = null;
+ ejectorSlot.cachedBeltPath = null;
// Figure out where and into which direction we eject items
const ejectSlotWsTile = staticComp.localTileToWorld(ejectorSlot.pos);
@@ -146,8 +143,21 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
for (let i = 0; i < targetEntities.length; ++i) {
const targetEntity = targetEntities[i];
- const targetAcceptorComp = targetEntity.components.ItemAcceptor;
const targetStaticComp = targetEntity.components.StaticMapEntity;
+ const targetBeltComp = targetEntity.components.Belt;
+
+ // Check for belts (special case)
+ if (targetBeltComp) {
+ const beltAcceptingDirection = targetStaticComp.localDirectionToWorld(enumDirection.top);
+ if (ejectSlotWsDirection === beltAcceptingDirection) {
+ ejectorSlot.cachedTargetEntity = targetEntity;
+ ejectorSlot.cachedBeltPath = targetBeltComp.assignedPath;
+ break;
+ }
+ }
+
+ // Check for item acceptors
+ const targetAcceptorComp = targetEntity.components.ItemAcceptor;
if (!targetAcceptorComp) {
// Entity doesn't accept items
continue;
@@ -155,8 +165,7 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
const matchingSlot = targetAcceptorComp.findMatchingSlot(
targetStaticComp.worldToLocalTile(ejectSlotTargetWsTile),
- targetStaticComp.worldDirectionToLocal(ejectSlotWsDirection),
- ejectorSlot.layer
+ targetStaticComp.worldDirectionToLocal(ejectSlotWsDirection)
);
if (!matchingSlot) {
@@ -164,13 +173,6 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
continue;
}
- // Ok we found a connection
- if (ejectorComp.cachedConnectedSlots) {
- ejectorComp.cachedConnectedSlots.push(ejectorSlot);
- } else {
- ejectorComp.cachedConnectedSlots = [ejectorSlot];
- }
-
// A slot can always be connected to one other slot only
ejectorSlot.cachedTargetEntity = targetEntity;
ejectorSlot.cachedDestSlot = matchingSlot;
@@ -199,11 +201,7 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
continue;
}
- if (!sourceEjectorComp.cachedConnectedSlots) {
- continue;
- }
-
- const slots = sourceEjectorComp.cachedConnectedSlots;
+ const slots = sourceEjectorComp.slots;
for (let j = 0; j < slots.length; ++j) {
const sourceSlot = slots[j];
const item = sourceSlot.item;
@@ -212,7 +210,6 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
continue;
}
- const destSlot = sourceSlot.cachedDestSlot;
const targetEntity = sourceSlot.cachedTargetEntity;
// Advance items on the slot
@@ -220,8 +217,8 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
1,
sourceSlot.progress +
progressGrowth *
- this.root.hubGoals.getBeltBaseSpeed(sourceSlot.layer) *
- globalConfig.beltItemSpacingByLayer[sourceSlot.layer]
+ this.root.hubGoals.getBeltBaseSpeed() *
+ globalConfig.itemSpacingOnBelts
);
// Check if we are still in the process of ejecting, can't proceed then
@@ -229,18 +226,34 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
continue;
}
- // Check if the target acceptor can actually accept this item
- const targetAcceptorComp = targetEntity.components.ItemAcceptor;
- if (!targetAcceptorComp.canAcceptItem(destSlot.index, item)) {
+ // Check if we are ejecting to a belt path
+ const destPath = sourceSlot.cachedBeltPath;
+ if (destPath) {
+ // Try passing the item over
+ if (destPath.tryAcceptItem(item)) {
+ sourceSlot.item = null;
+ }
+
+ // Always stop here, since there can *either* be a belt path *or*
+ // a slot
continue;
}
- // Try to hand over the item
- if (this.tryPassOverItem(item, targetEntity, destSlot.index)) {
- // Handover successful, clear slot
- targetAcceptorComp.onItemAccepted(destSlot.index, destSlot.acceptedDirection, item);
- sourceSlot.item = null;
- continue;
+ // Check if the target acceptor can actually accept this item
+ const destSlot = sourceSlot.cachedDestSlot;
+ if (destSlot) {
+ const targetAcceptorComp = targetEntity.components.ItemAcceptor;
+ if (!targetAcceptorComp.canAcceptItem(destSlot.index, item)) {
+ continue;
+ }
+
+ // Try to hand over the item
+ if (this.tryPassOverItem(item, targetEntity, destSlot.index)) {
+ // Handover successful, clear slot
+ targetAcceptorComp.onItemAccepted(destSlot.index, destSlot.acceptedDirection, item);
+ sourceSlot.item = null;
+ continue;
+ }
}
}
}
@@ -257,8 +270,6 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
// TODO: Kinda hacky. How to solve this properly? Don't want to go through inheritance hell.
// Also its just a few cases (hope it stays like this .. :x).
- const itemLayer = enumItemTypeToLayer[item.getItemType()];
-
const beltComp = receiver.components.Belt;
if (beltComp) {
const path = beltComp.assignedPath;
@@ -270,27 +281,14 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
return false;
}
- const energyConsumerComp = receiver.components.EnergyConsumer;
- if (energyConsumerComp) {
- if (energyConsumerComp.tryAcceptItem(item, slotIndex)) {
- // All good
- return true;
- }
-
- // Energy consumer can have more components
- }
-
const itemProcessorComp = receiver.components.ItemProcessor;
if (itemProcessorComp) {
- // Make sure its the same layer
- if (itemLayer === receiver.layer) {
- // Its an item processor ..
- if (itemProcessorComp.tryTakeItem(item, slotIndex)) {
- return true;
- }
- // Item processor can have nothing else
- return false;
+ // Its an item processor ..
+ if (itemProcessorComp.tryTakeItem(item, slotIndex)) {
+ return true;
}
+ // Item processor can have nothing else
+ return false;
}
const undergroundBeltComp = receiver.components.UndergroundBelt;
@@ -321,35 +319,22 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
return false;
}
- const energyGeneratorComp = receiver.components.EnergyGenerator;
- if (energyGeneratorComp) {
- if (energyGeneratorComp.tryTakeItem(item, slotIndex)) {
- // Passed it over
- return true;
- }
-
- // Energy generator comp can't have anything else
- return false;
- }
-
return false;
}
/**
- * Draws the given layer
+ * Draws everything
* @param {DrawParameters} parameters
- * @param {enumLayer} layer
*/
- drawLayer(parameters, layer) {
- this.forEachMatchingEntityOnScreen(parameters, this.drawSingleEntity.bind(this, layer));
+ draw(parameters) {
+ this.forEachMatchingEntityOnScreen(parameters, this.drawSingleEntity.bind(this));
}
/**
- * @param {enumLayer} layer
* @param {DrawParameters} parameters
* @param {Entity} entity
*/
- drawSingleEntity(layer, parameters, entity) {
+ drawSingleEntity(parameters, entity) {
const ejectorComp = entity.components.ItemEjector;
const staticComp = entity.components.StaticMapEntity;
@@ -366,11 +351,6 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
continue;
}
- if (slot.layer !== layer) {
- // Not our layer
- continue;
- }
-
const realPosition = slot.pos.rotateFastMultipleOf90(staticComp.rotation);
const realDirection = Vector.transformDirectionFromMultipleOf90(
slot.direction,
diff --git a/src/js/game/systems/item_processor.js b/src/js/game/systems/item_processor.js
index 5bebfed7..e51045b6 100644
--- a/src/js/game/systems/item_processor.js
+++ b/src/js/game/systems/item_processor.js
@@ -1,6 +1,6 @@
import { globalConfig } from "../../core/config";
import { BaseItem, enumItemType } from "../base_item";
-import { enumColorMixingResults, enumInvertedColors } from "../colors";
+import { enumColorMixingResults } from "../colors";
import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor";
import { Entity } from "../entity";
import { GameSystemWithFilter } from "../game_system_with_filter";
@@ -48,11 +48,11 @@ export class ItemProcessorSystem extends GameSystemWithFilter {
if (ejectorComp.canEjectOnSlot(preferredSlot)) {
slot = preferredSlot;
} else {
- slot = ejectorComp.getFirstFreeSlot(entity.layer);
+ slot = ejectorComp.getFirstFreeSlot();
}
} else {
// We can eject on any slot
- slot = ejectorComp.getFirstFreeSlot(entity.layer);
+ slot = ejectorComp.getFirstFreeSlot();
}
if (slot !== null) {
@@ -70,16 +70,7 @@ export class ItemProcessorSystem extends GameSystemWithFilter {
// Check if we have an empty queue and can start a new charge
if (processorComp.itemsToEject.length === 0) {
if (processorComp.inputSlots.length >= processorComp.inputsPerCharge) {
- const energyConsumerComp = entity.components.EnergyConsumer;
- if (energyConsumerComp) {
- // Check if we have enough energy
- if (energyConsumerComp.tryStartNextCharge()) {
- this.startNewCharge(entity);
- }
- } else {
- // No further checks required
- this.startNewCharge(entity);
- }
+ this.startNewCharge(entity);
}
}
}
@@ -347,37 +338,8 @@ export class ItemProcessorSystem extends GameSystemWithFilter {
assert(hubComponent, "Hub item processor has no hub component");
for (let i = 0; i < items.length; ++i) {
- const shapeItem = /** @type {ShapeItem} */ (items[i].item);
- hubComponent.queueShapeDefinition(shapeItem.definition);
- }
-
- break;
- }
-
- // ADVANCED PROCESSING
-
- case enumItemProcessorTypes.advancedProcessor: {
- const item = items[0].item;
-
- if (item.getItemType() === enumItemType.color) {
- const colorItem = /** @type {ColorItem} */ (items[0].item);
- const newColor = enumInvertedColors[colorItem.color];
- outItems.push({
- item: new ColorItem(newColor),
- requiredSlot: 0,
- });
- } else if (item.getItemType() === enumItemType.shape) {
- const shapeItem = /** @type {ShapeItem} */ (items[0].item);
- const newItem = this.root.shapeDefinitionMgr.shapeActionInvertColors(
- shapeItem.definition
- );
-
- outItems.push({
- item: new ShapeItem(newItem),
- requiredSlot: 0,
- });
- } else {
- assertAlways(false, "Bad item type: " + item.getItemType() + " for advanced processor.");
+ const item = /** @type {ShapeItem} */ (items[i].item);
+ this.root.hubGoals.handleDefinitionDelivered(item.definition);
}
break;
diff --git a/src/js/game/systems/static_map_entity.js b/src/js/game/systems/static_map_entity.js
index 886291a6..7e931575 100644
--- a/src/js/game/systems/static_map_entity.js
+++ b/src/js/game/systems/static_map_entity.js
@@ -1,10 +1,9 @@
-import { GameSystem } from "../game_system";
-import { DrawParameters } from "../../core/draw_parameters";
import { globalConfig } from "../../core/config";
-import { MapChunkView } from "../map_chunk_view";
+import { DrawParameters } from "../../core/draw_parameters";
import { Loader } from "../../core/loader";
import { enumDirection } from "../../core/vector";
-import { enumLayer } from "../root";
+import { GameSystem } from "../game_system";
+import { MapChunkView } from "../map_chunk_view";
export class StaticMapEntitySystem extends GameSystem {
constructor(root) {
@@ -48,7 +47,7 @@ export class StaticMapEntitySystem extends GameSystem {
const beltComp = entity.components.Belt;
if (beltComp) {
const sprite = this.beltOverviewSprites[beltComp.direction];
- staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 0, false);
+ staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 0);
} else {
parameters.context.fillRect(
rect.x * globalConfig.tileSize,
@@ -60,7 +59,7 @@ export class StaticMapEntitySystem extends GameSystem {
} else {
const sprite = staticComp.getSprite();
if (sprite) {
- staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 2, false);
+ staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 2);
}
}
}
@@ -92,7 +91,7 @@ export class StaticMapEntitySystem extends GameSystem {
const sprite = staticComp.getSprite();
if (sprite) {
- staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 2, false);
+ staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 2);
}
}
}
diff --git a/src/js/game/systems/storage.js b/src/js/game/systems/storage.js
index 7f946e5b..b6f62d46 100644
--- a/src/js/game/systems/storage.js
+++ b/src/js/game/systems/storage.js
@@ -22,8 +22,7 @@ export class StorageSystem extends GameSystemWithFilter {
if (storageComp.storedItem && storageComp.storedCount > 0) {
const ejectorComp = entity.components.ItemEjector;
- /* FIXME: WIRES */
- const nextSlot = ejectorComp.getFirstFreeSlot(enumLayer.regular);
+ const nextSlot = ejectorComp.getFirstFreeSlot();
if (nextSlot !== null) {
if (ejectorComp.tryEject(nextSlot, storageComp.storedItem)) {
storageComp.storedCount--;
diff --git a/src/js/game/systems/underground_belt.js b/src/js/game/systems/underground_belt.js
index f5e1b0ab..5bbb280c 100644
--- a/src/js/game/systems/underground_belt.js
+++ b/src/js/game/systems/underground_belt.js
@@ -395,7 +395,7 @@ export class UndergroundBeltSystem extends GameSystemWithFilter {
if (remainingTime <= 0) {
const ejectorComp = entity.components.ItemEjector;
- const nextSlotIndex = ejectorComp.getFirstFreeSlot(entity.layer);
+ const nextSlotIndex = ejectorComp.getFirstFreeSlot();
if (nextSlotIndex !== null) {
if (ejectorComp.tryEject(nextSlotIndex, nextItem)) {
items.shift();
diff --git a/src/js/game/systems/wired_pins.js b/src/js/game/systems/wired_pins.js
index 853568ef..64f9a7a0 100644
--- a/src/js/game/systems/wired_pins.js
+++ b/src/js/game/systems/wired_pins.js
@@ -14,14 +14,8 @@ export class WiredPinsSystem extends GameSystemWithFilter {
super(root, [WiredPinsComponent]);
this.pinSprites = {
- [enumPinSlotType.positiveEnergyEjector]: Loader.getSprite("sprites/wires/pin_positive_eject.png"),
- [enumPinSlotType.positiveEnergyAcceptor]: Loader.getSprite(
- "sprites/wires/pin_positive_accept.png"
- ),
- [enumPinSlotType.negativeEnergyEjector]: Loader.getSprite("sprites/wires/pin_negative_eject.png"),
- [enumPinSlotType.negativeEnergyAcceptor]: Loader.getSprite(
- "sprites/wires/pin_negative_accept.png"
- ),
+ [enumPinSlotType.logicalEjector]: Loader.getSprite("sprites/wires/pin_negative_eject.png"),
+ [enumPinSlotType.logicalAcceptor]: Loader.getSprite("sprites/wires/pin_negative_accept.png"),
};
this.root.signals.prePlacementCheck.add(this.prePlacementCheck, this);
@@ -58,7 +52,7 @@ export class WiredPinsSystem extends GameSystemWithFilter {
continue;
}
- if (otherEntity.components.ReplaceableMapEntity) {
+ if (staticComp.getMetaBuilding().getIsReplaceable()) {
// Don't mind here, even if there would be a collision we
// could replace it
continue;
@@ -111,8 +105,10 @@ export class WiredPinsSystem extends GameSystemWithFilter {
const collidingEntity = this.root.map.getLayerContentXY(worldPos.x, worldPos.y, enumLayer.wires);
// If there's an entity, and it can't get removed -> That's a collision
- if (collidingEntity && !collidingEntity.components.ReplaceableMapEntity) {
- return true;
+ if (collidingEntity) {
+ if (!collidingEntity.components.StaticMapEntity.getMetaBuilding().getIsReplaceable()) {
+ return true;
+ }
}
}
return false;
@@ -136,7 +132,7 @@ export class WiredPinsSystem extends GameSystemWithFilter {
const collidingEntity = this.root.map.getLayerContentXY(worldPos.x, worldPos.y, enumLayer.wires);
if (collidingEntity) {
assertAlways(
- collidingEntity.components.ReplaceableMapEntity,
+ collidingEntity.components.StaticMapEntity.getMetaBuilding().getIsReplaceable(),
"Tried to replace non-repleaceable entity for pins"
);
if (!this.root.logic.tryDeleteBuilding(collidingEntity)) {
diff --git a/src/js/game/themes/dark.json b/src/js/game/themes/dark.json
index 626efa19..85b29617 100644
--- a/src/js/game/themes/dark.json
+++ b/src/js/game/themes/dark.json
@@ -34,9 +34,7 @@
},
"wires": {
- "pins": {
- "energyEjector": "#c425d7"
- }
+ "overlayColor": "rgba(97, 161, 152, 0.75)"
}
},
diff --git a/src/js/game/themes/light.json b/src/js/game/themes/light.json
index 21599585..2bc7050a 100644
--- a/src/js/game/themes/light.json
+++ b/src/js/game/themes/light.json
@@ -35,9 +35,7 @@
},
"wires": {
- "pins": {
- "energyEjector": "#c425d7"
- }
+ "overlayColor": "rgba(97, 161, 152, 0.75)"
}
},
diff --git a/src/js/globals.d.ts b/src/js/globals.d.ts
index cc6118ca..3f842e7e 100644
--- a/src/js/globals.d.ts
+++ b/src/js/globals.d.ts
@@ -131,22 +131,24 @@ declare interface Math {
degrees(number): number;
}
+declare type Class = new (...args: any[]) => T;
+
declare interface String {
padStart(size: number, fill?: string): string;
padEnd(size: number, fill: string): string;
}
declare interface FactoryTemplate {
- entries: Array T>;
+ entries: Array>;
entryIds: Array;
idToEntry: any;
getId(): string;
getAllIds(): Array;
- register(entry: new (...args: any[]) => T): void;
+ register(entry: Class): void;
hasId(id: string): boolean;
- findById(id: string): new (...args: any[]) => T;
- getEntries(): Array T>;
+ findById(id: string): Class;
+ getEntries(): Array>;
getNumEntries(): number;
}
@@ -156,10 +158,10 @@ declare interface SingletonFactoryTemplate {
getId(): string;
getAllIds(): Array;
- register(classHandle: new (...args: any[]) => T): void;
+ register(classHandle: Class): void;
hasId(id: string): boolean;
findById(id: string): T;
- findByClass(classHandle: new (...args: any[]) => T): T;
+ findByClass(classHandle: Class): T;
getEntries(): Array;
getNumEntries(): number;
}
diff --git a/src/js/platform/browser/wrapper.js b/src/js/platform/browser/wrapper.js
index 726f843b..56705025 100644
--- a/src/js/platform/browser/wrapper.js
+++ b/src/js/platform/browser/wrapper.js
@@ -82,7 +82,7 @@ export class PlatformWrapperImplBrowser extends PlatformWrapperInterface {
return new Promise(resolve => {
logger.log("Detecting storage");
- if (!window.indexedDB || G_IS_DEV) {
+ if (!window.indexedDB) {
logger.log("Indexed DB not supported");
this.app.storage = new StorageImplBrowser(this.app);
resolve();
diff --git a/src/js/platform/game_analytics.js b/src/js/platform/game_analytics.js
index ea6aa293..765b2d67 100644
--- a/src/js/platform/game_analytics.js
+++ b/src/js/platform/game_analytics.js
@@ -1,8 +1,6 @@
-/* typehints:start */
-import { Application } from "../application";
-import { ShapeDefinition } from "../game/shape_definition";
-import { Savegame } from "../savegame/savegame";
-/* typehints:end */
+/**
+ * @typedef {import("../application").Application} Application
+ */
export class GameAnalyticsInterface {
constructor(app) {
diff --git a/src/js/platform/wrapper.js b/src/js/platform/wrapper.js
index 9fee5b3a..5754a8a2 100644
--- a/src/js/platform/wrapper.js
+++ b/src/js/platform/wrapper.js
@@ -66,7 +66,7 @@ export class PlatformWrapperInterface {
* @returns {number}
*/
getMinimumZoom() {
- return 0.2 * this.getScreenScale();
+ return 0.1 * this.getScreenScale();
}
/**
diff --git a/src/js/profile/application_settings.js b/src/js/profile/application_settings.js
index 50c34e0e..2167c77c 100644
--- a/src/js/profile/application_settings.js
+++ b/src/js/profile/application_settings.js
@@ -221,7 +221,7 @@ export const allApplicationSettings = [
}),
new EnumSetting("refreshRate", {
- options: ["60", "100", "120", "144", "165", "250", G_IS_DEV ? "10" : "500"],
+ options: ["60", "75", "100", "120", "144", "165", "250", G_IS_DEV ? "10" : "500"],
valueGetter: rate => rate,
textGetter: rate => rate + " Hz",
category: enumCategories.advanced,
diff --git a/src/js/savegame/savegame.js b/src/js/savegame/savegame.js
index 1db813d7..2a7102a9 100644
--- a/src/js/savegame/savegame.js
+++ b/src/js/savegame/savegame.js
@@ -1,8 +1,3 @@
-/* typehints:start */
-import { Application } from "../application";
-import { GameRoot } from "../game/root";
-/* typehints:end */
-
import { ReadWriteProxy } from "../core/read_write_proxy";
import { ExplainedResult } from "../core/explained_result";
import { SavegameSerializer } from "./savegame_serializer";
@@ -18,20 +13,29 @@ import { SavegameInterface_V1005 } from "./schemas/1005";
const logger = createLogger("savegame");
+/**
+ * @typedef {import("../application").Application} Application
+ * @typedef {import("../game/root").GameRoot} GameRoot
+ * @typedef {import("./savegame_typedefs").SavegameData} SavegameData
+ * @typedef {import("./savegame_typedefs").SavegameMetadata} SavegameMetadata
+ * @typedef {import("./savegame_typedefs").SavegameStats} SavegameStats
+ * @typedef {import("./savegame_typedefs").SerializedGame} SerializedGame
+ */
+
export class Savegame extends ReadWriteProxy {
/**
*
* @param {Application} app
* @param {object} param0
* @param {string} param0.internalId
- * @param {import("./savegame_manager").SavegameMetadata} param0.metaDataRef Handle to the meta data
+ * @param {SavegameMetadata} param0.metaDataRef Handle to the meta data
*/
constructor(app, { internalId, metaDataRef }) {
super(app, "savegame-" + internalId + ".bin");
this.internalId = internalId;
this.metaDataRef = metaDataRef;
- /** @type {import("./savegame_typedefs").SavegameData} */
+ /** @type {SavegameData} */
this.currentData = this.getDefaultData();
assert(
@@ -65,7 +69,7 @@ export class Savegame extends ReadWriteProxy {
/**
* Returns the savegames default data
- * @returns {import("./savegame_typedefs").SavegameData}
+ * @returns {SavegameData}
*/
getDefaultData() {
return {
@@ -78,7 +82,7 @@ export class Savegame extends ReadWriteProxy {
/**
* Migrates the savegames data
- * @param {import("./savegame_typedefs").SavegameData} data
+ * @param {SavegameData} data
*/
migrate(data) {
if (data.version < 1000) {
@@ -115,7 +119,7 @@ export class Savegame extends ReadWriteProxy {
/**
* Verifies the savegames data
- * @param {import("./savegame_typedefs").SavegameData} data
+ * @param {SavegameData} data
*/
verify(data) {
if (!data.dump) {
@@ -140,7 +144,7 @@ export class Savegame extends ReadWriteProxy {
}
/**
* Returns the statistics of the savegame
- * @returns {import("./savegame_typedefs").SavegameStats}
+ * @returns {SavegameStats}
*/
getStatistics() {
return this.currentData.stats;
@@ -163,7 +167,7 @@ export class Savegame extends ReadWriteProxy {
/**
* Returns the current game dump
- * @returns {import("./savegame_typedefs").SerializedGame}
+ * @returns {SerializedGame}
*/
getCurrentDump() {
return this.currentData.dump;
diff --git a/src/js/savegame/savegame_compressor.js b/src/js/savegame/savegame_compressor.js
index 30c28879..bc14baf7 100644
--- a/src/js/savegame/savegame_compressor.js
+++ b/src/js/savegame/savegame_compressor.js
@@ -90,9 +90,6 @@ function compressObjectInternal(obj, keys = [], values = []) {
}
export function compressObject(obj) {
- if (G_IS_DEV) {
- return obj;
- }
const keys = [];
const values = [];
const data = compressObjectInternal(obj, keys, values);
diff --git a/src/js/savegame/savegame_manager.js b/src/js/savegame/savegame_manager.js
index e3052806..42e56734 100644
--- a/src/js/savegame/savegame_manager.js
+++ b/src/js/savegame/savegame_manager.js
@@ -7,31 +7,21 @@ const logger = createLogger("savegame_manager");
const Rusha = require("rusha");
+/**
+ * @typedef {import("./savegame_typedefs").SavegamesData} SavegamesData
+ * @typedef {import("./savegame_typedefs").SavegameMetadata} SavegameMetadata
+ */
+
/** @enum {string} */
export const enumLocalSavegameStatus = {
offline: "offline",
synced: "synced",
};
-/**
- * @typedef {{
- * lastUpdate: number,
- * version: number,
- * internalId: string,
- * level: number
- * }} SavegameMetadata
- *
- * @typedef {{
- * version: number,
- * savegames: Array
- * }} SavegamesData
- */
-
export class SavegameManager extends ReadWriteProxy {
constructor(app) {
super(app, "savegames.bin");
- /** @type {SavegamesData} */
this.currentData = this.getDefaultData();
}
diff --git a/src/js/savegame/savegame_serializer.js b/src/js/savegame/savegame_serializer.js
index eff802a0..92db738b 100644
--- a/src/js/savegame/savegame_serializer.js
+++ b/src/js/savegame/savegame_serializer.js
@@ -1,18 +1,20 @@
-/* typehints:start */
-import { Component } from "../game/component";
-import { GameRoot } from "../game/root";
-/* typehints:end */
-
import { ExplainedResult } from "../core/explained_result";
import { createLogger } from "../core/logging";
-// import { BuildingComponent } from "../components/impl/building";
import { gComponentRegistry } from "../core/global_registries";
import { SerializerInternal } from "./serializer_internal";
+/**
+ * @typedef {import("../game/component").Component} Component
+ * @typedef {import("../game/component").StaticComponent} StaticComponent
+ * @typedef {import("../game/entity").Entity} Entity
+ * @typedef {import("../game/root").GameRoot} GameRoot
+ * @typedef {import("../savegame/savegame_typedefs").SerializedGame} SerializedGame
+ */
+
const logger = createLogger("savegame_serializer");
/**
- * Allows to serialize a savegame
+ * Serializes a savegame
*/
export class SavegameSerializer {
constructor() {
@@ -26,7 +28,7 @@ export class SavegameSerializer {
* @returns {object}
*/
generateDumpFromGameRoot(root, sanityChecks = true) {
- // Now store generic savegame payload
+ /** @type {SerializedGame} */
const data = {
camera: root.camera.serialize(),
time: root.time.serialize(),
@@ -35,11 +37,10 @@ export class SavegameSerializer {
hubGoals: root.hubGoals.serialize(),
pinnedShapes: root.hud.parts.pinnedShapes.serialize(),
waypoints: root.hud.parts.waypoints.serialize(),
+ entities: this.internal.serializeEntityArray(root.entityMgr.entities),
beltPaths: root.systemMgr.systems.belt.serializePaths(),
};
- data.entities = this.internal.serializeEntityArray(root.entityMgr.entities);
-
if (!G_IS_RELEASE) {
if (sanityChecks) {
// Sanity check
@@ -55,7 +56,7 @@ export class SavegameSerializer {
/**
* Verifies if there are logical errors in the savegame
- * @param {object} savegame
+ * @param {SerializedGame} savegame
* @returns {ExplainedResult}
*/
verifyLogicalErrors(savegame) {
@@ -66,47 +67,44 @@ export class SavegameSerializer {
const seenUids = [];
// Check for duplicate UIDS
- for (const entityListId in savegame.entities) {
- for (let i = 0; i < savegame.entities[entityListId].length; ++i) {
- const list = savegame.entities[entityListId][i];
- for (let k = 0; k < list.length; ++k) {
- const entity = list[k];
- const uid = entity.uid;
- if (!Number.isInteger(uid)) {
- return ExplainedResult.bad("Entity has invalid uid: " + uid);
- }
- if (seenUids.indexOf(uid) >= 0) {
- return ExplainedResult.bad("Duplicate uid " + uid);
- }
- seenUids.push(uid);
+ for (let i = 0; i < savegame.entities.length; ++i) {
+ /** @type {Entity} */
+ const entity = savegame.entities[i];
- // Verify components
- if (!entity.components) {
- return ExplainedResult.bad(
- "Entity is missing key 'components': " + JSON.stringify(entity)
- );
- }
- const components = entity.components;
- for (const componentId in components) {
- // Verify component data
- const componentData = components[componentId];
- const componentClass = gComponentRegistry.findById(componentId);
+ const uid = entity.uid;
+ if (!Number.isInteger(uid)) {
+ return ExplainedResult.bad("Entity has invalid uid: " + uid);
+ }
+ if (seenUids.indexOf(uid) >= 0) {
+ return ExplainedResult.bad("Duplicate uid " + uid);
+ }
+ seenUids.push(uid);
- // Check component id is known
- if (!componentClass) {
- return ExplainedResult.bad("Unknown component id: " + componentId);
- }
+ // Verify components
+ if (!entity.components) {
+ return ExplainedResult.bad("Entity is missing key 'components': " + JSON.stringify(entity));
+ }
- // Check component data is ok
- const componentVerifyError = /** @type {typeof Component} */ (componentClass).verify(
- componentData
- );
- if (componentVerifyError) {
- return ExplainedResult.bad(
- "Component " + componentId + " has invalid data: " + componentVerifyError
- );
- }
- }
+ const components = entity.components;
+ for (const componentId in components) {
+ const componentClass = gComponentRegistry.findById(componentId);
+
+ // Check component id is known
+ if (!componentClass) {
+ return ExplainedResult.bad("Unknown component id: " + componentId);
+ }
+
+ // Verify component data
+ const componentData = components[componentId];
+ const componentVerifyError = /** @type {StaticComponent} */ (componentClass).verify(
+ componentData
+ );
+
+ // Check component data is ok
+ if (componentVerifyError) {
+ return ExplainedResult.bad(
+ "Component " + componentId + " has invalid data: " + componentVerifyError
+ );
}
}
}
@@ -116,7 +114,7 @@ export class SavegameSerializer {
/**
* Tries to load the savegame from a given dump
- * @param {import("./savegame_typedefs").SerializedGame} savegame
+ * @param {SerializedGame} savegame
* @param {GameRoot} root
* @returns {ExplainedResult}
*/
diff --git a/src/js/savegame/savegame_typedefs.js b/src/js/savegame/savegame_typedefs.js
index 642865cd..f5bb08c2 100644
--- a/src/js/savegame/savegame_typedefs.js
+++ b/src/js/savegame/savegame_typedefs.js
@@ -1,15 +1,8 @@
-import { Entity } from "../game/entity";
-
-/**
- * @typedef {{
- * }} SavegameStats
- */
-
/**
+ * @typedef {import("../game/entity").Entity} Entity
+ *
+ * @typedef {{}} SavegameStats
*
- */
-
-/**
* @typedef {{
* camera: any,
* time: any,
@@ -21,13 +14,25 @@ import { Entity } from "../game/entity";
* entities: Array,
* beltPaths: Array
* }} SerializedGame
- */
-
-/**
+ *
* @typedef {{
* version: number,
* dump: SerializedGame,
* stats: SavegameStats,
* lastUpdate: number,
* }} SavegameData
+ *
+ * @typedef {{
+ * lastUpdate: number,
+ * version: number,
+ * internalId: string,
+ * level: number
+ * }} SavegameMetadata
+ *
+ * @typedef {{
+ * version: number,
+ * savegames: Array
+ * }} SavegamesData
*/
+
+export default {};
diff --git a/src/js/savegame/schemas/1001.js b/src/js/savegame/schemas/1001.js
index 3af5eebe..af86b09d 100644
--- a/src/js/savegame/schemas/1001.js
+++ b/src/js/savegame/schemas/1001.js
@@ -1,6 +1,7 @@
import { SavegameInterface_V1000 } from "./1000.js";
import { createLogger } from "../../core/logging.js";
import { T } from "../../translations.js";
+import { TypeVector, TypeNumber, TypeString, TypeNullable } from "../serialization_data_types.js";
const schema = require("./1001.json");
@@ -43,6 +44,25 @@ export class SavegameInterface_V1001 extends SavegameInterface_V1000 {
for (let i = 0; i < entities.length; ++i) {
const entity = entities[i];
+ /**
+ * @typedef {{
+ * origin: TypeVector,
+ * tileSize: TypeVector,
+ * rotation: TypeNumber,
+ * originalRotation: TypeNumber,
+ * spriteKey?: string,
+ * blueprintSpriteKey: string,
+ * silhouetteColor: string
+ * }} OldStaticMapEntity
+ */
+
+ // Here we mock the old type of the StaticMapEntity before the change to using
+ // a building ID based system (see building_codes.js) to stop the linter from
+ // complaining that the type doesn't have the properties.
+ // The ignored error is the error that the types do not overlap. In the case
+ // of a v1000 save though, the data will match the mocked type above.
+ /** @type OldStaticMapEntity **/
+ // @ts-ignore
const staticComp = entity.components.StaticMapEntity;
const beltComp = entity.components.Belt;
if (staticComp) {
diff --git a/src/js/savegame/schemas/1002.js b/src/js/savegame/schemas/1002.js
index 92dadfc1..866bc1e8 100644
--- a/src/js/savegame/schemas/1002.js
+++ b/src/js/savegame/schemas/1002.js
@@ -29,7 +29,9 @@ export class SavegameInterface_V1002 extends SavegameInterface_V1001 {
const entity = entities[i];
const beltComp = entity.components.Belt;
const ejectorComp = entity.components.ItemEjector;
+
if (beltComp && ejectorComp) {
+ // @ts-ignore
ejectorComp.instantEject = true;
}
}
diff --git a/src/js/savegame/serialization_data_types.js b/src/js/savegame/serialization_data_types.js
index 86b177c1..c9ab570d 100644
--- a/src/js/savegame/serialization_data_types.js
+++ b/src/js/savegame/serialization_data_types.js
@@ -4,7 +4,7 @@ import { BasicSerializableObject } from "./serialization";
/* typehints:end */
import { Vector } from "../core/vector";
-import { round4Digits, schemaObject, accessNestedPropertyReverse } from "../core/utils";
+import { round4Digits } from "../core/utils";
export const globalJsonSchemaDefs = {};
/**
@@ -28,6 +28,19 @@ export function schemaToJsonSchema(schema) {
return jsonSchema;
}
+/**
+ * Helper function to create a json schema object
+ * @param {any} properties
+ */
+function schemaObject(properties) {
+ return {
+ type: "object",
+ required: Object.keys(properties).slice(),
+ additionalProperties: false,
+ properties,
+ };
+}
+
/**
* Base serialization data type
*/
@@ -75,23 +88,6 @@ export class BaseDataType {
return {
$ref: "#/definitions/" + key,
};
-
- // return this.getAsJsonSchemaUncached();
- // if (!globalJsonSchemaDefs[key]) {
- // // schema.$id = key;
- // globalJsonSchemaDefs[key] = {
- // $id: key,
- // definitions: {
- // ["d-" + key]: schema
- // }
- // };
- // }
-
- // return {
- // $ref: key + "#/definitions/d-" + key
- // }
-
- // // return this.getAsJsonSchemaUncached();
}
/**
@@ -875,14 +871,17 @@ export class TypeArray extends BaseDataType {
* @returns {string|void} String error code or null on success
*/
deserialize(value, targetObject, targetKey, root) {
- const result = new Array(value.length);
+ let destination = targetObject[targetKey];
+ if (!destination) {
+ targetObject[targetKey] = destination = new Array(value.length);
+ }
+
for (let i = 0; i < value.length; ++i) {
- const errorStatus = this.innerType.deserializeWithVerify(value[i], result, i, root);
+ const errorStatus = this.innerType.deserializeWithVerify(value[i], destination, i, root);
if (errorStatus) {
return errorStatus;
}
}
- targetObject[targetKey] = result;
}
getAsJsonSchemaUncached() {
@@ -1230,15 +1229,18 @@ export class TypeStructuredObject extends BaseDataType {
* @returns {string|void} String error code or null on success
*/
deserialize(value, targetObject, targetKey, root) {
- let result = {};
+ let target = targetObject[targetKey];
+ if (!target) {
+ targetObject[targetKey] = target = {};
+ }
+
for (const key in value) {
const valueType = this.descriptor[key];
- const errorCode = valueType.deserializeWithVerify(value[key], result, key, root);
+ const errorCode = valueType.deserializeWithVerify(value[key], target, key, root);
if (errorCode) {
return errorCode;
}
}
- targetObject[targetKey] = result;
}
getAsJsonSchemaUncached() {
diff --git a/src/js/savegame/serializer_internal.js b/src/js/savegame/serializer_internal.js
index 8df6f6e4..5d0c3bfc 100644
--- a/src/js/savegame/serializer_internal.js
+++ b/src/js/savegame/serializer_internal.js
@@ -1,6 +1,10 @@
-import { gComponentRegistry } from "../core/global_registries";
+import { createLogger } from "../core/logging";
+import { Vector } from "../core/vector";
+import { getBuildingDataFromCode } from "../game/building_codes";
import { Entity } from "../game/entity";
-import { enumLayer, GameRoot } from "../game/root";
+import { GameRoot } from "../game/root";
+
+const logger = createLogger("serializer_internal");
// Internal serializer methods
export class SerializerInternal {
@@ -37,19 +41,29 @@ export class SerializerInternal {
* @param {Entity} payload
*/
deserializeEntity(root, payload) {
- const entity = new Entity(root);
- this.deserializeComponents(entity, payload.components);
- entity.layer = payload.layer;
+ const staticData = payload.components.StaticMapEntity;
+ assert(staticData, "entity has no static data");
- if (!enumLayer[payload.layer]) {
- assert(false, "Invalid layer: " + payload.layer);
- }
+ const code = staticData.code;
+ const data = getBuildingDataFromCode(code);
+
+ const metaBuilding = data.metaInstance;
+
+ const entity = metaBuilding.createEntity({
+ root,
+ origin: Vector.fromSerializedObject(staticData.origin),
+ rotation: staticData.rotation,
+ originalRotation: staticData.originalRotation,
+ rotationVariant: data.rotationVariant,
+ variant: data.variant,
+ });
+
+ entity.uid = payload.uid;
+
+ this.deserializeComponents(entity, payload.components);
root.entityMgr.registerEntity(entity, payload.uid);
-
- if (entity.components.StaticMapEntity) {
- root.map.placeStaticEntity(entity);
- }
+ root.map.placeStaticEntity(entity);
}
/////// COMPONENTS ////
@@ -62,10 +76,12 @@ export class SerializerInternal {
*/
deserializeComponents(entity, data) {
for (const componentId in data) {
- const componentClass = gComponentRegistry.findById(componentId);
- const componentHandle = new componentClass({});
- entity.addComponent(componentHandle);
- const errorStatus = componentHandle.deserialize(data[componentId]);
+ if (!entity.components[componentId]) {
+ logger.warn("Entity no longer has component:", componentId);
+ continue;
+ }
+
+ const errorStatus = entity.components[componentId].deserialize(data[componentId]);
if (errorStatus) {
return errorStatus;
}
diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js
index 927f02f6..3d39e826 100644
--- a/src/js/states/main_menu.js
+++ b/src/js/states/main_menu.js
@@ -1,11 +1,10 @@
import { GameState } from "../core/game_state";
import { cachebust } from "../core/cachebust";
-import { globalConfig, IS_DEBUG, IS_DEMO, THIRDPARTY_URLS } from "../core/config";
+import { globalConfig, IS_DEMO, THIRDPARTY_URLS } from "../core/config";
import {
makeDiv,
makeButtonElement,
formatSecondsToTimeAgo,
- generateFileDownload,
waitNextFrame,
isSupportedBrowser,
makeButton,
@@ -14,9 +13,29 @@ import {
import { ReadWriteProxy } from "../core/read_write_proxy";
import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs";
import { T } from "../translations";
-import { PlatformWrapperImplBrowser } from "../platform/browser/wrapper";
import { getApplicationSettingById } from "../profile/application_settings";
-import { EnumSetting } from "../profile/setting_types";
+
+/**
+ * @typedef {import("../savegame/savegame_typedefs").SavegameMetadata} SavegameMetadata
+ * @typedef {import("../profile/setting_types").EnumSetting} EnumSetting
+ */
+
+/**
+ * Generates a file download
+ * @param {string} filename
+ * @param {string} text
+ */
+function generateFileDownload(filename, text) {
+ var element = document.createElement("a");
+ element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(text));
+ element.setAttribute("download", filename);
+
+ element.style.display = "none";
+ document.body.appendChild(element);
+
+ element.click();
+ document.body.removeChild(element);
+}
export class MainMenuState extends GameState {
constructor() {
@@ -128,7 +147,6 @@ export class MainMenuState extends GameState {
const closeLoader = this.dialogs.showLoadingDialog();
const reader = new FileReader();
reader.addEventListener("load", event => {
- // @ts-ignore
const contents = event.target.result;
let realContent;
@@ -394,7 +412,7 @@ export class MainMenuState extends GameState {
}
/**
- * @param {object} game
+ * @param {SavegameMetadata} game
*/
resumeGame(game) {
this.app.analytics.trackUiClick("resume_game");
@@ -419,7 +437,7 @@ export class MainMenuState extends GameState {
}
/**
- * @param {object} game
+ * @param {SavegameMetadata} game
*/
deleteGame(game) {
this.app.analytics.trackUiClick("delete_game");
@@ -447,7 +465,7 @@ export class MainMenuState extends GameState {
}
/**
- * @param {object} game
+ * @param {SavegameMetadata} game
*/
downloadGame(game) {
this.app.analytics.trackUiClick("download_game");
diff --git a/src/js/states/preload.js b/src/js/states/preload.js
index f1551893..0f47e8d6 100644
--- a/src/js/states/preload.js
+++ b/src/js/states/preload.js
@@ -1,6 +1,6 @@
import { GameState } from "../core/game_state";
import { createLogger } from "../core/logging";
-import { findNiceValue, waitNextFrame } from "../core/utils";
+import { findNiceValue } from "../core/utils";
import { cachebust } from "../core/cachebust";
import { PlatformWrapperImplBrowser } from "../platform/browser/wrapper";
import { T, autoDetectLanguageId, updateApplicationLanguage } from "../translations";
@@ -228,11 +228,7 @@ export class PreloadState extends GameState {
this.statusBar.style.width = percentage + "%";
this.statusBarText.innerText = findNiceValue(percentage) + "%";
- if (G_IS_DEV) {
- return Promise.resolve();
- }
return Promise.resolve();
- // return waitNextFrame();
}
showFailMessage(text) {
@@ -279,11 +275,6 @@ export class PreloadState extends GameState {
if (confirm("Are you sure you want to reset the app? This will delete all your savegames")) {
this.resetApp();
}
- // const signals = this.dialogs.showWarning(T.preload.reset_app_warning.title, T.preload.reset_app_warning.desc, [
- // "delete:bad:timeout",
- // "cancel:good",
- // ]);
- // signals.delete.add(this.resetApp, this);
}
resetApp() {
diff --git a/src/js/webworkers/background_animation_frame_emittter.worker.js b/src/js/webworkers/background_animation_frame_emittter.worker.js
index 5469f7aa..3941e0dd 100644
--- a/src/js/webworkers/background_animation_frame_emittter.worker.js
+++ b/src/js/webworkers/background_animation_frame_emittter.worker.js
@@ -9,7 +9,8 @@ function tick() {
const delta = now - lastTick;
lastTick = now;
- postMessage({ delta });
+ // @ts-ignore
+ self.postMessage({ delta });
}
setInterval(tick, desiredMsDelay);
diff --git a/src/js/webworkers/compression.worker.js b/src/js/webworkers/compression.worker.js
index 5820a4a1..1e567c05 100644
--- a/src/js/webworkers/compression.worker.js
+++ b/src/js/webworkers/compression.worker.js
@@ -1,6 +1,7 @@
-import { compressX64 } from "../core/lzstring";
import { globalConfig } from "../core/config";
-import { sha1 } from "../core/sensitive_utils.encrypt";
+import { compressX64 } from "../core/lzstring";
+import { computeCrc } from "../core/sensitive_utils.encrypt";
+import { compressObject } from "../savegame/savegame_compressor";
function accessNestedPropertyReverse(obj, keys) {
let result = obj;
@@ -12,19 +13,27 @@ function accessNestedPropertyReverse(obj, keys) {
const salt = accessNestedPropertyReverse(globalConfig, ["file", "info"]);
-onmessage = function ({ data: { jobId, job, data } }) {
+self.addEventListener("message", event => {
+ // @ts-ignore
+ const { jobId, job, data } = event.data;
const result = performJob(job, data);
- postMessage({ jobId, result });
-};
+
+ // @ts-ignore
+ self.postMessage({ jobId, result });
+});
function performJob(job, data) {
switch (job) {
case "compressX64": {
return compressX64(data);
}
- case "compressFile": {
- const checksum = sha1(data.text + salt);
- return data.compressionPrefix + compressX64(checksum + data.text);
+
+ case "compressObject": {
+ const optimized = compressObject(data.obj);
+ const stringified = JSON.stringify(optimized);
+
+ const checksum = computeCrc(stringified + salt);
+ return data.compressionPrefix + compressX64(checksum + stringified);
}
default:
throw new Error("Webworker: Unknown job: " + job);
diff --git a/translations/base-ar.yaml b/translations/base-ar.yaml
index 31c5c2c1..17d822d9 100644
--- a/translations/base-ar.yaml
+++ b/translations/base-ar.yaml
@@ -19,9 +19,13 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
- shortText: shapez.io is a game about building factories to automate the creation and combination of increasingly complex shapes within an infinite map.
+ shortText: shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map.
+
+ # This is the text shown above the Discord link
+ discordLink: Official Discord - Chat with me!
# This is the long description for the steam page - It is contained here so you can help to translate it, and I will regulary update the store page.
# NOTICE:
@@ -31,15 +35,16 @@ steamPage:
[img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img]
shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map.
- Upon delivering the requested shapes you will progress within the game and unlock upgrades to speed up your factory.
- As the demand for shapes increases, you will have to scale up your factory to meet the demand - Don't forget about resources though, you will have to expand across the [b]infinite map[/b]!
+ Upon delivering the requested shapes you'll progress within the game and unlock upgrades to speed up your factory.
- Soon you will have to mix colors and paint your shapes with them - Combine red, green and blue color resources to produce different colors and paint shapes with it to satisfy the demand.
+ As the demand for shapes increases, you'll have to scale up your factory to meet the demand - Don't forget about resources though, you'll have to expand across the [b]infinite map[/b]!
- This game features 18 progressive levels (Which should keep you busy for hours already!) but I'm constantly adding new content - There is a lot planned!
+ Soon you'll have to mix colors and paint your shapes with them - Combine red, green and blue color resources to produce different colors and paint shapes with them to satisfy the demand.
- Purchasing the game gives you access to the standalone version which has additional features and you'll also receive access to newly developed features.
+ This game features 18 progressive levels (Which should already keep you busy for hours!) but I'm constantly adding new content - There's a lot planned!
+
+ Purchasing the game gives you access to the standalone version which has additional features, and you'll also receive access to newly developed features.
[b]Standalone Advantages[/b]
@@ -55,7 +60,7 @@ steamPage:
[b]Future Updates[/b]
- I am updating the game very often and trying to push an update at least every week!
+ I am updating the game often and trying to push an update at least once every week!
[list]
[*] Different maps and challenges (e.g. maps with obstacles)
@@ -82,8 +87,6 @@ steamPage:
[*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Help translate[/url]
[/list]
- discordLink: Official Discord - Chat with me!
-
global:
loading: Loading
error: Error
@@ -138,11 +141,15 @@ demoBanners:
mainMenu:
play: Play
+ continue: Continue
+ newGame: New Game
changelog: Changelog
+ subreddit: Reddit
importSavegame: Import
openSourceHint: This game is open source!
discordLink: Official Discord Server
helpTranslate: Help translate!
+ madeBy: Made by
# This is shown when using firefox and other browsers which are not supported.
browserWarning: >-
@@ -151,11 +158,6 @@ mainMenu:
savegameLevel: Level
savegameLevelUnknown: Unknown Level
- continue: Continue
- newGame: New Game
- madeBy: Made by
- subreddit: Reddit
-
dialogs:
buttons:
ok: OK
@@ -165,7 +167,7 @@ dialogs:
restart: Restart
reset: Reset
getStandalone: Get Standalone
- deleteGame: I know what I do
+ deleteGame: I know what I am doing
viewUpdate: View Update
showUpgrades: Show Upgrades
showKeybindings: Show Keybindings
@@ -214,11 +216,11 @@ dialogs:
featureRestriction:
title: Demo Version
- desc: You tried to access a feature () which is not available in the demo. Consider to get the standalone for the full experience!
+ desc: You tried to access a feature () which is not available in the demo. Consider getting the standalone version for the full experience!
oneSavegameLimit:
title: Limited savegames
- desc: You can only have one savegame at a time in the demo version. Please remove the existing one or get the standalone!
+ desc: You can only have one savegame at a time in the demo version. Please remove the existing one or get the standalone version!
updateSummary:
title: New update!
@@ -236,6 +238,16 @@ dialogs:
desc: >-
You are deleting a lot of buildings ( to be exact)! Are you sure you want to do this?
+ massCutConfirm:
+ title: Confirm cut
+ desc: >-
+ You are cutting a lot of buildings ( to be exact)! Are you sure you want to do this?
+
+ massCutInsufficientConfirm:
+ title: Confirm cut
+ desc: >-
+ You can not afford to paste this area! Are you sure you want to cut it?
+
blueprintsNotUnlocked:
title: Not unlocked yet
desc: >-
@@ -252,26 +264,15 @@ dialogs:
createMarker:
title: New Marker
- desc: Give it a meaningful name, you can also include a short key of a shape (Which you can generate here)
titleEdit: Edit Marker
+ desc: Give it a meaningful name, you can also include a short key of a shape (Which you can generate here)
markerDemoLimit:
desc: You can only create two custom markers in the demo. Get the standalone for unlimited markers!
- massCutConfirm:
- title: Confirm cut
- desc: >-
- You are cutting a lot of buildings ( to be exact)! Are you sure you
- want to do this?
exportScreenshotWarning:
title: Export screenshot
- desc: >-
- You requested to export your base as a screenshot. Please note that this can
- be quite slow for a big base and even crash your game!
-
- massCutInsufficientConfirm:
- title: Confirm cut
- desc: You can not afford to paste this area! Are you sure you want to cut it?
+ desc: You requested to export your base as a screenshot. Please note that this can be quite slow for a big base and even crash your game!
ingame:
# This is shown in the top left corner and displays useful keybindings in
@@ -283,20 +284,32 @@ ingame:
rotateBuilding: Rotate building
placeMultiple: Place multiple
reverseOrientation: Reverse orientation
- disableAutoOrientation: Disable auto orientation
+ disableAutoOrientation: Disable auto-orientation
toggleHud: Toggle HUD
placeBuilding: Place building
- createMarker: Create Marker
- delete: Destroy
+ createMarker: Create marker
+ delete: Delete
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
- clearSelection: Clear Selection
+ clearSelection: Clear selection
pipette: Pipette
switchLayers: Switch layers
+ # Names of the colors, used for the color blind mode
+ colors:
+ red: Red
+ green: Green
+ blue: Blue
+ yellow: Yellow
+ purple: Purple
+ cyan: Cyan
+ white: White
+ black: Black
+ uncolored: Gray
+
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
buildingPlacement:
@@ -391,6 +404,12 @@ ingame:
description: Left-click a marker to jump to it, right-click to delete it.
Press to create a marker from the current view, or right-click to create a marker at the selected location.
creationSuccessNotification: Marker has been created.
+ # Shape viewer
+ shapeViewer:
+ title: Layers
+ empty: Empty
+ copyKey: Copy Key
+
# Interactive tutorial
interactiveTutorial:
title: Tutorial
@@ -402,21 +421,6 @@ ingame:
1_3_expand: >-
This is NOT an idle game! Build more extractors and belts to finish the goal quicker.
Tip: Hold SHIFT to place multiple extractors, and use R to rotate them.
- colors:
- red: Red
- green: Green
- blue: Blue
- yellow: Yellow
- purple: Purple
- cyan: Cyan
- white: White
- uncolored: No color
- black: Black
- shapeViewer:
- title: Layers
- empty: Empty
- copyKey: Copy Key
-
# All shop upgrades
shopUpgrades:
belt:
@@ -444,7 +448,13 @@ buildings:
name: &belt Conveyor Belt
description: Transports items, hold and drag to place multiple.
- miner: # Internal name for the Extractor
+ wire:
+ default:
+ name: &wire Energy Wire
+ description: Allows you to transport energy.
+
+ # Internal name for the Extractor
+ miner:
default:
name: &miner Extractor
description: Place over a shape or color to extract it.
@@ -453,16 +463,18 @@ buildings:
name: Extractor (Chain)
description: Place over a shape or color to extract it. Can be chained.
- underground_belt: # Internal name for the Tunnel
+ # Internal name for the Tunnel
+ underground_belt:
default:
name: &underground_belt Tunnel
- description: Allows to tunnel resources under buildings and belts.
+ description: Allows you to tunnel resources under buildings and belts.
tier2:
name: Tunnel Tier II
- description: Allows to tunnel resources under buildings and belts.
+ description: Allows you to tunnel resources under buildings and belts.
- splitter: # Internal name for the Balancer
+ # Internal name for the Balancer
+ splitter:
default:
name: &splitter Balancer
description: Multifunctional - Evenly distributes all inputs onto all outputs.
@@ -478,18 +490,23 @@ buildings:
cutter:
default:
name: &cutter Cutter
- description: Cuts shapes from top to bottom and outputs both halfs. If you use only one part, be sure to destroy the other part or it will stall!
+ description: Cuts shapes from top to bottom and outputs both halves. If you use only one part, be sure to destroy the other part or it will stall!
quad:
name: Cutter (Quad)
description: Cuts shapes into four parts. If you use only one part, be sure to destroy the other parts or it will stall!
+ advanced_processor:
+ default:
+ name: &advanced_processor Color Inverter
+ description: Accepts a color or shape and inverts it.
+
rotater:
default:
name: &rotater Rotate
description: Rotates shapes clockwise by 90 degrees.
ccw:
name: Rotate (CCW)
- description: Rotates shapes counter clockwise by 90 degrees.
+ description: Rotates shapes counter-clockwise by 90 degrees.
fl:
name: Rotate (180)
description: Rotates shapes by 180 degrees.
@@ -508,15 +525,17 @@ buildings:
default:
name: &painter Painter
description: &painter_desc Colors the whole shape on the left input with the color from the top input.
+
+ mirrored:
+ name: *painter
+ description: *painter_desc
+
double:
name: Painter (Double)
description: Colors the shapes on the left inputs with the color from the top input.
quad:
name: Painter (Quad)
- description: Allows to color each quadrant of the shape with a different color.
- mirrored:
- name: *painter
- description: *painter_desc
+ description: Allows you to color each quadrant of the shape with a different color.
trash:
default:
@@ -526,24 +545,22 @@ buildings:
storage:
name: Storage
description: Stores excess items, up to a given capacity. Can be used as an overflow gate.
- wire:
- default:
- name: Energy Wire
- description: Allows you to transport energy.
- advanced_processor:
- default:
- name: Color Inverter
- description: Accepts a color or shape and inverts it.
+
energy_generator:
deliver: Deliver
+
+ # This will be shown before the amount, so for example 'For 123 Energy'
toGenerateEnergy: For
+
default:
- name: Energy Generator
+ name: &energy_generator Energy Generator
description: Generates energy by consuming shapes.
+
wire_crossings:
default:
- name: Wire Splitter
+ name: &wire_crossings Wire Splitter
description: Splits a energy wire into two.
+
merger:
name: Wire Merger
description: Merges two energy wires into one.
@@ -561,7 +578,7 @@ storyRewards:
reward_painter:
title: Painting
desc: >-
- The painter has been unlocked - Extract some color veins (just as you do with shapes) and combine it with a shape in the painter to color them!
PS: If you are colorblind, there is a color blind mode in the settings!
+ The painter has been unlocked - Extract some color veins (just as you do with shapes) and combine it with a shape in the painter to color them!
PS: If you are colorblind, there is a colorblind mode in the settings!
reward_mixer:
title: Color Mixing
@@ -581,7 +598,7 @@ storyRewards:
reward_rotater_ccw:
title: CCW Rotating
- desc: You have unlocked a variant of the rotater - It allows to rotate counter clockwise! To build it, select the rotater and press 'T' to cycle its variants!
+ desc: You have unlocked a variant of the rotater - It allows you to rotate shapes counter-clockwise! To build it, select the rotater and press 'T' to cycle through its variants!
reward_miner_chainable:
title: Chaining Extractor
@@ -594,7 +611,7 @@ storyRewards:
reward_splitter_compact:
title: Compact Balancer
desc: >-
- You have unlocked a compact variant of the balancer - It accepts two inputs and merges them into one!
+ You have unlocked a compact variant of the balancer - It accepts two inputs and merges them into one belt!
reward_cutter_quad:
title: Quad Cutting
@@ -606,11 +623,11 @@ storyRewards:
reward_painter_quad:
title: Quad Painting
- desc: You have unlocked a variant of the painter - It allows to paint each part of the shape individually!
+ desc: You have unlocked a variant of the painter - It allows you to paint each part of the shape individually!
reward_storage:
title: Storage Buffer
- desc: You have unlocked a variant of the trash - It allows to store items up to a given capacity!
+ desc: You have unlocked a variant of the trash - It allows you to store items up to a given capacity!
reward_freeplay:
title: Freeplay
@@ -648,7 +665,7 @@ settings:
uiScale:
title: Interface scale
description: >-
- Changes the size of the user interface. The interface will still scale based on your device resolution, but this setting controls the amount of scale.
+ Changes the size of the user interface. The interface will still scale based on your device's resolution, but this setting controls the amount of scaling.
scales:
super_small: Super small
small: Small
@@ -656,6 +673,19 @@ settings:
large: Large
huge: Huge
+ autosaveInterval:
+ title: Autosave Interval
+ description: >-
+ Controls how often the game saves automatically. You can also disable it entirely here.
+
+ intervals:
+ one_minute: 1 Minute
+ two_minutes: 2 Minutes
+ five_minutes: 5 Minutes
+ ten_minutes: 10 Minutes
+ twenty_minutes: 20 Minutes
+ disabled: Disabled
+
scrollWheelSensitivity:
title: Zoom sensitivity
description: >-
@@ -667,10 +697,27 @@ settings:
fast: Fast
super_fast: Super fast
+ movementSpeed:
+ title: Movement speed
+ description: >-
+ Changes how fast the view moves when using the keyboard.
+ speeds:
+ super_slow: Super slow
+ slow: Slow
+ regular: Regular
+ fast: Fast
+ super_fast: Super Fast
+ extremely_fast: Extremely Fast
+
language:
title: Language
description: >-
- Change the language. All translations are user contributed and might be incomplete!
+ Change the language. All translations are user-contributed and might be incomplete!
+
+ enableColorBlindHelper:
+ title: Color Blind Mode
+ description: >-
+ Enables various tools which allow you to play the game if you are color blind.
fullscreen:
title: Fullscreen
@@ -708,63 +755,32 @@ settings:
offerHints:
title: Hints & Tutorials
description: >-
- Whether to offer hints and tutorials while playing. Also hides certain UI elements onto a given level to make it easier to get into the game.
+ Whether to offer hints and tutorials while playing. Also hides certain UI elements up to a given level to make it easier to get into the game.
- movementSpeed:
- title: Movement speed
- description: Changes how fast the view moves when using the keyboard.
- speeds:
- super_slow: Super slow
- slow: Slow
- regular: Regular
- fast: Fast
- super_fast: Super Fast
- extremely_fast: Extremely Fast
enableTunnelSmartplace:
title: Smart Tunnels
description: >-
- When enabled, placing tunnels will automatically remove unnecessary belts.
- This also enables to drag tunnels and excess tunnels will get removed.
+ When enabled, placing tunnels will automatically remove unnecessary belts. This also enables you to drag tunnels and excess tunnels will get removed.
+
vignette:
title: Vignette
description: >-
- Enables the vignette which darkens the screen corners and makes text easier
- to read.
+ Enables the vignette, which darkens the screen corners and makes text easier to read.
- autosaveInterval:
- title: Autosave Interval
+ rotationByBuilding:
+ title: Rotation by building type
description: >-
- Controls how often the game saves automatically. You can also disable it
- entirely here.
- intervals:
- one_minute: 1 Minute
- two_minutes: 2 Minutes
- five_minutes: 5 Minutes
- ten_minutes: 10 Minutes
- twenty_minutes: 20 Minutes
- disabled: Disabled
+ Each building type remembers the rotation you last set it to individually. This may be more comfortable if you frequently switch between placing different building types.
compactBuildingInfo:
title: Compact Building Infos
description: >-
- Shortens info boxes for buildings by only showing their ratios. Otherwise a
- description and image is shown.
+ Shortens info boxes for buildings by only showing their ratios. Otherwise a description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
- Disable the warning dialogs brought up when cutting/deleting more than 100
- entities.
-
- enableColorBlindHelper:
- title: Color Blind Mode
- description: Enables various tools which allow to play the game if you are color blind.
- rotationByBuilding:
- title: Rotation by building type
- description: >-
- Each building type remembers the rotation you last set it to individually.
- This may be more comfortable if you frequently switch between placing
- different building types.
+ Disables the warning dialogs brought up when cutting/deleting more than 100 entities.
keybindings:
title: Keybindings
@@ -789,6 +805,7 @@ keybindings:
mapMoveRight: Move Right
mapMoveDown: Move Down
mapMoveLeft: Move Left
+ mapMoveFaster: Move Faster
centerMap: Center Map
mapZoomIn: Zoom in
@@ -797,66 +814,59 @@ keybindings:
menuOpenShop: Upgrades
menuOpenStats: Statistics
+ menuClose: Close Menu
toggleHud: Toggle HUD
toggleFPSInfo: Toggle FPS and Debug Info
+ switchLayers: Switch layers
+ exportScreenshot: Export whole Base as Image
belt: *belt
splitter: *splitter
underground_belt: *underground_belt
miner: *miner
cutter: *cutter
+ advanced_processor: *advanced_processor
rotater: *rotater
stacker: *stacker
mixer: *mixer
+ energy_generator: *energy_generator
painter: *painter
trash: *trash
+ wire: *wire
+ pipette: Pipette
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
cycleBuildingVariants: Cycle Variants
- confirmMassDelete: Confirm Mass Delete
+ confirmMassDelete: Delete area
+ pasteLastBlueprint: Paste last blueprint
cycleBuildings: Cycle Buildings
+ lockBeltDirection: Enable belt planner
+ switchDirectionLockSide: >-
+ Planner: Switch side
massSelectStart: Hold and drag to start
massSelectSelectMultiple: Select multiple areas
massSelectCopy: Copy area
+ massSelectCut: Cut area
placementDisableAutoOrientation: Disable automatic orientation
placeMultiple: Stay in placement mode
placeInverse: Invert automatic belt orientation
- pasteLastBlueprint: Paste last blueprint
- massSelectCut: Cut area
- exportScreenshot: Export whole Base as Image
- mapMoveFaster: Move Faster
- lockBeltDirection: Enable belt planner
- switchDirectionLockSide: "Planner: Switch side"
- pipette: Pipette
- menuClose: Close Menu
- switchLayers: Switch layers
- advanced_processor: Color Inverter
- energy_generator: Energy Generator
- wire: Energy Wire
about:
title: About this Game
body: >-
- This game is open source and developed by Tobias Springer (this is me).
+ This game is open source and developed by Tobias Springer (this is me).
- If you want to contribute, check out shapez.io on github.
+ If you want to contribute, check out shapez.io on GitHub.
- This game wouldn't have been possible without the great Discord community
- around my games - You should really join the Discord server!
+ This game wouldn't have been possible without the great Discord community around my games - You should really join the Discord server!
- The soundtrack was made by Peppsen - He's awesome.
+ The soundtrack was made by Peppsen - He's awesome.
- Finally, huge thanks to my best friend Niklas - Without our
- factorio sessions this game would never have existed.
+ Finally, huge thanks to my best friend Niklas - Without our Factorio sessions, this game would never have existed.
changelog:
title: Changelog
diff --git a/translations/base-cat.yaml b/translations/base-cat.yaml
index 4871f0ce..79623047 100644
--- a/translations/base-cat.yaml
+++ b/translations/base-cat.yaml
@@ -19,10 +19,14 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io és un joc que té com a objectiu construir i automatitzar fàbriques per tal de produir figures cada cop més complexes en un mapa infinit.
+ # This is the text shown above the Discord link
+ discordLink: Official Discord - Chat with me!
+
# This is the long description for the steam page - It is contained here so you can help to translate it, and I will regulary update the store page.
# NOTICE:
# - Do not translate the first line (This is the gif image at the start of the store)
@@ -31,15 +35,16 @@ steamPage:
[img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img]
shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map.
- Upon delivering the requested shapes you will progress within the game and unlock upgrades to speed up your factory.
- As the demand for shapes increases, you will have to scale up your factory to meet the demand - Don't forget about resources though, you will have to expand across the [b]infinite map[/b]!
+ Upon delivering the requested shapes you'll progress within the game and unlock upgrades to speed up your factory.
- Soon you will have to mix colors and paint your shapes with them - Combine red, green and blue color resources to produce different colors and paint shapes with it to satisfy the demand.
+ As the demand for shapes increases, you'll have to scale up your factory to meet the demand - Don't forget about resources though, you'll have to expand across the [b]infinite map[/b]!
- This game features 18 progressive levels (Which should keep you busy for hours already!) but I'm constantly adding new content - There is a lot planned!
+ Soon you'll have to mix colors and paint your shapes with them - Combine red, green and blue color resources to produce different colors and paint shapes with them to satisfy the demand.
- Purchasing the game gives you access to the standalone version which has additional features and you'll also receive access to newly developed features.
+ This game features 18 progressive levels (Which should already keep you busy for hours!) but I'm constantly adding new content - There's a lot planned!
+
+ Purchasing the game gives you access to the standalone version which has additional features, and you'll also receive access to newly developed features.
[b]Standalone Advantages[/b]
@@ -55,7 +60,7 @@ steamPage:
[b]Future Updates[/b]
- I am updating the game very often and trying to push an update at least every week!
+ I am updating the game often and trying to push an update at least once every week!
[list]
[*] Different maps and challenges (e.g. maps with obstacles)
@@ -82,8 +87,6 @@ steamPage:
[*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Help translate[/url]
[/list]
- discordLink: Official Discord - Chat with me!
-
global:
loading: Carregant
error: Error
@@ -239,6 +242,11 @@ dialogs:
desc: >-
Estàs esborrant molts edificis de cop ( per ser exactes)! Estàs segur que vols seguir?
+ massCutInsufficientConfirm:
+ title: Confirm cut
+ desc: >-
+ You can not afford to paste this area! Are you sure you want to cut it?
+
blueprintsNotUnlocked:
title: Encara no s'ha desbloquejat
desc: >-
@@ -265,9 +273,6 @@ dialogs:
exportScreenshotWarning:
title: Export screenshot
desc: Has demanat exportar la teva/teua base com una captura de pantalla. Tin en conte que aquest procés pot ser molt lent i inclús crashear el teu joc!
- massCutInsufficientConfirm:
- title: Confirm cut
- desc: You can not afford to paste this area! Are you sure you want to cut it?
ingame:
# This is shown in the top left corner and displays useful keybindings in
@@ -302,8 +307,8 @@ ingame:
purple: Morat
cyan: Cian
white: Blanc
- uncolored: Sense color
black: Black
+ uncolored: Sense color
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@@ -315,6 +320,7 @@ ingame:
# Shows the hotkey in the ui, e.g. "Hotkey: Q"
hotkeyLabel: >-
Hotkey:
+
infoTexts:
speed: Velocitat
range: Distància
@@ -411,8 +417,10 @@ ingame:
1_1_extractor: Col·loca un extractor damunt d'una figura circular per extraure-la!
1_2_conveyor: >-
Connecta l'extractor a la cinta transportadora cap al teu nexe!
Pista: Pots clicar i arrossegar la cinta transportadora amb el teu ratolí!
+
1_3_expand: >-
Aquest NO és un joc d'espera! Contrueix més extractors i cintes per a completar l'objectiu més ràpidament.
Pista: Manté pressionat SHIFT per a col·locar més extractors, i utilitza R per a rotar-los.
+
# All shop upgrades
shopUpgrades:
belt:
@@ -445,7 +453,8 @@ buildings:
name: &wire Cable
description: Permet transportar energia.
- miner: # Internal name for the Extractor
+ # Internal name for the Extractor
+ miner:
default:
name: &miner Extractor
description: Posa-ho damunt d'una font de figures o colors per extraure'ls.
@@ -454,7 +463,8 @@ buildings:
name: Extractor (Cadena)
description: Posa-ho damunt d'una font de figures o colors per extraure'ls. Pot ser encadenat!
- underground_belt: # Internal name for the Tunnel
+ # Internal name for the Tunnel
+ underground_belt:
default:
name: &underground_belt Túnel
description: Permet transportar recursos per sota d'edificis i cintes.
@@ -463,7 +473,8 @@ buildings:
name: Túnel de Nivell II
description: Permet transportar recursos per sota d'edificis i cintes.
- splitter: # Internal name for the Balancer
+ # Internal name for the Balancer
+ splitter:
default:
name: &splitter Distribuïdor
description: Multifuncional - Distribueix les entrades i sortides equitativament.
@@ -544,10 +555,12 @@ buildings:
default:
name: &energy_generator Generador d'energia
description: Genera energia consumint figures. Cada generador requereix una figura diferent.
+
wire_crossings:
default:
- name: Wire Splitter
+ name: &wire_crossings Wire Splitter
description: Splits a energy wire into two.
+
merger:
name: Wire Merger
description: Merges two energy wires into one.
@@ -599,6 +612,7 @@ storyRewards:
title: Distribuïdor compacte
desc: >-
Has desbloquejat una variant compacta del distribuïdor - Acepta dues entrades i les fusiona en una sola!
+
reward_cutter_quad:
title: Cisalla quàdruple
desc: Has desbloquejat una variant de la cisalla - Et permet tallar figures en quatre parts en lloc de sols en dos!
@@ -663,6 +677,7 @@ settings:
title: Interval de guardat automàtic
description: >-
Controla el temps entre guardats automàtics que fa el joc, pots deshabilitar-ho des d'aquí
+
intervals:
one_minute: 1 Minut
two_minutes: 2 Minuts
@@ -697,23 +712,28 @@ settings:
language:
title: Language
description: >-
- Change the language. All translations are user contributed and might be incomplete!
+ Change the language. All translations are user-contributed and might be incomplete!
+
enableColorBlindHelper:
title: Color Blind Mode
description: >-
- Enables various tools which allow to play the game if you are color blind.
+ Enables various tools which allow you to play the game if you are color blind.
+
fullscreen:
title: Fullscreen
description: >-
It is recommended to play the game in fullscreen to get the best experience. Only available in the standalone.
+
soundsMuted:
title: Mute Sounds
description: >-
If enabled, mutes all sound effects.
+
musicMuted:
title: Mute Music
description: >-
If enabled, mutes all music.
+
theme:
title: Game theme
description: >-
@@ -726,38 +746,47 @@ settings:
title: Simulation Target
description: >-
If you have a 144hz monitor, change the refresh rate here so the game will properly simulate at higher refresh rates. This might actually decrease the FPS if your computer is too slow.
+
alwaysMultiplace:
title: Multiplace
description: >-
If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently.
+
offerHints:
title: Hints & Tutorials
description: >-
- Whether to offer hints and tutorials while playing. Also hides certain UI elements onto a given level to make it easier to get into the game.
+ Whether to offer hints and tutorials while playing. Also hides certain UI elements up to a given level to make it easier to get into the game.
+
enableTunnelSmartplace:
title: Smart Tunnels
description: >-
- When enabled, placing tunnels will automatically remove unnecessary belts. This also enables to drag tunnels and excess tunnels will get removed.
+ When enabled, placing tunnels will automatically remove unnecessary belts. This also enables you to drag tunnels and excess tunnels will get removed.
+
vignette:
title: Vignette
description: >-
- Enables the vignette which darkens the screen corners and makes text easier to read.
+ Enables the vignette, which darkens the screen corners and makes text easier to read.
+
rotationByBuilding:
title: Rotation by building type
description: >-
Each building type remembers the rotation you last set it to individually. This may be more comfortable if you frequently switch between placing different building types.
+
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a description and image is shown.
+
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
- Disable the warning dialogs brought up when cutting/deleting more than 100 entities.
+ Disables the warning dialogs brought up when cutting/deleting more than 100 entities.
+
keybindings:
title: Keybindings
hint: >-
Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options.
+
resetKeybindings: Reset Keybindings
categoryLabels:
@@ -785,6 +814,7 @@ keybindings:
menuOpenShop: Upgrades
menuOpenStats: Statistics
+ menuClose: Close Menu
toggleHud: Toggle HUD
toggleFPSInfo: Toggle FPS and Debug Info
@@ -815,6 +845,7 @@ keybindings:
lockBeltDirection: Enable belt planner
switchDirectionLockSide: >-
Planner: Switch side
+
massSelectStart: Hold and drag to start
massSelectSelectMultiple: Select multiple areas
massSelectCopy: Copy area
@@ -823,16 +854,20 @@ keybindings:
placementDisableAutoOrientation: Disable automatic orientation
placeMultiple: Stay in placement mode
placeInverse: Invert automatic belt orientation
- menuClose: Close Menu
about:
title: About this Game
body: >-
This game is open source and developed by Tobias Springer (this is me).
- If you want to contribute, check out shapez.io on github.
+
+ If you want to contribute, check out shapez.io on GitHub.
+
This game wouldn't have been possible without the great Discord community around my games - You should really join the Discord server!
+
The soundtrack was made by Peppsen - He's awesome.
- Finally, huge thanks to my best friend Niklas - Without our factorio sessions this game would never have existed.
+
+ Finally, huge thanks to my best friend Niklas - Without our Factorio sessions, this game would never have existed.
+
changelog:
title: Changelog
diff --git a/translations/base-cz.yaml b/translations/base-cz.yaml
index e3752560..51d6096c 100644
--- a/translations/base-cz.yaml
+++ b/translations/base-cz.yaml
@@ -1,5 +1,6 @@
# Czech translation
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io je hra o stavbě továren pro automatizaci výroby a kombinování čím dál složitějších tvarů na nekonečné mapě.
diff --git a/translations/base-da.yaml b/translations/base-da.yaml
index b7a5360e..b337515e 100644
--- a/translations/base-da.yaml
+++ b/translations/base-da.yaml
@@ -19,9 +19,13 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
- shortText: shapez.io is a game about building factories to automate the creation and combination of increasingly complex shapes within an infinite map.
+ shortText: shapez.io handler om at bygge fabrikker på en grænseløs spilleflade for automatisk at skabe og kombinere figurer, der i stigende grad bliver mere komplicerede.
+
+ # This is the text shown above the Discord link
+ discordLink: Officiel Discord - Snak lidt med mig!
# This is the long description for the steam page - It is contained here so you can help to translate it, and I will regulary update the store page.
# NOTICE:
@@ -30,97 +34,96 @@ steamPage:
longText: >-
[img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img]
- shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map.
- Upon delivering the requested shapes you will progress within the game and unlock upgrades to speed up your factory.
+ shapez.io handler om at bygge fabrikker over en grænseløs spilleflade for automatisk at skabe og kombinere figurer, der i stigende grad bliver mere komplicerede.
- As the demand for shapes increases, you will have to scale up your factory to meet the demand - Don't forget about resources though, you will have to expand across the [b]infinite map[/b]!
+ Når efterspurgte figurer bliver afleveret, vil du gøre fremskridt i spillet og modtage opgraderinger, der gør din fabrik hurtigere.
- Soon you will have to mix colors and paint your shapes with them - Combine red, green and blue color resources to produce different colors and paint shapes with it to satisfy the demand.
+ Som efterspørgslen på figurer stiger, må du opskalere din fabrik for at holde trit - Glem dog ikke resurserne, du vil blive nødt til at udvide over hele den [b]uendelige flade[/b]!
- This game features 18 progressive levels (Which should keep you busy for hours already!) but I'm constantly adding new content - There is a lot planned!
+ Der går ikke lang tid før du må mikse farver og male dine figurer med dem - Kombiner rød, grøn og blå farveresurser for at producere forskellige farver og mal derefter figurer med dem for at møde efterspørgslen.
- Purchasing the game gives you access to the standalone version which has additional features and you'll also receive access to newly developed features.
+ Dette spil indeholder 18 fremadskridende levels (Som allerede burde holde dig beskæftiget i timevis!) men jeg tilføjer hele tiden nyt - Der er en hel masse planlagt!
- [b]Standalone Advantages[/b]
+ Hvis du køber spillet, får du adgang til den selvstændige version, der har endnu flere ting, og du får også adgang til nyudviklet indhold.
+
+ [b]Fordele for køb[/b]
[list]
- [*] Dark Mode
- [*] Unlimited Waypoints
- [*] Unlimited Savegames
- [*] Additional settings
- [*] Coming soon: Wires & Energy! Aiming for (roughly) end of July 2020.
- [*] Coming soon: More Levels
- [*] Allows me to further develop shapez.io ❤️
+ [*] Mørk Tilstand
+ [*] Uendelige Markører
+ [*] Uendelige Gem
+ [*] Yderligere Indstillinger
+ [*] Kommer snart: Ledninger & Energi! Går efter at udgive (omkring) enden af juli 2020.
+ [*] Kommer snart: Flere levels
+ [*] Støtter mig i yderligere at udvikle shapez.io ❤️
[/list]
- [b]Future Updates[/b]
+ [b]Fremtidige Opdateringer[/b]
- I am updating the game very often and trying to push an update at least every week!
+ Jeg opdaterer spillet meget ofte og prøver at få frigivet en opdatering mindst hver uge!
[list]
- [*] Different maps and challenges (e.g. maps with obstacles)
- [*] Puzzles (Deliver the requested shape with a restricted area / set of buildings)
- [*] A story mode where buildings have a cost
- [*] Configurable map generator (Configure resource/shape size/density, seed and more)
- [*] Additional types of shapes
- [*] Performance improvements (The game already runs pretty well!)
- [*] And much more!
+ [*] Forskellige spilleflader og udfordringer (f.eks. flader med forhindringer)
+ [*] Hjernevridere (Aflever den efterspurgte figur med et afgrænset areal / mængde bygninger)
+ [*] En 'story mode' hvor bygninger har en pris
+ [*] En spillefladeskaber med forskellige indstillinger (Konfigurer resurse/figur størrelse/tæthed, seed m.m.)
+ [*] Flere typer af figurer
+ [*] Forbedringer til hvor godt spillet kører (Det kører allerede rimelig godt!)
+ [*] Og meget mere!
[/list]
- [b]This game is open source![/b]
+ [b]Dette spil er open source![/b]
- Anybody can contribute, I'm actively involved in the community and attempt to review all suggestions and take feedback into consideration where possible.
- Be sure to check out my trello board for the full roadmap!
+ Enhver kan kontribuere, jeg er aktivt involveret i fælleskabet og prøver at gennemgå alle forslag og tage feedback i betragtning når det er muligt.
+ Husk at tjekke mit trello board for den fulde køreplan!
- [b]Links[/b]
+ [b]Link[/b]
[list]
- [*] [url=https://discord.com/invite/HN7EVzV]Official Discord[/url]
- [*] [url=https://trello.com/b/ISQncpJP/shapezio]Roadmap[/url]
+ [*] [url=https://discord.com/invite/HN7EVzV]Officiel Discord[/url]
+ [*] [url=https://trello.com/b/ISQncpJP/shapezio]Køreplan[/url]
[*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url]
- [*] [url=https://github.com/tobspr/shapez.io]Source code (GitHub)[/url]
- [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Help translate[/url]
+ [*] [url=https://github.com/tobspr/shapez.io]Kildekode (GitHub)[/url]
+ [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Hjælp med at oversætte[/url]
[/list]
- discordLink: Official Discord - Chat with me!
-
global:
- loading: Loading
- error: Error
+ loading: Indlæser
+ error: Fejl
# How big numbers are rendered, e.g. "10,000"
- thousandsDivider: ","
+ thousandsDivider: "."
# What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4"
- decimalSeparator: "."
+ decimalSeparator: ","
# The suffix for large numbers, e.g. 1.3k, 400.2M, etc.
suffix:
thousands: k
- millions: M
- billions: B
- trillions: T
+ millions: mio
+ billions: mia
+ trillions: bio
# Shown for infinitely big numbers
- infinite: inf
+ infinite: uendelig
time:
# Used for formatting past time dates
- oneSecondAgo: one second ago
- xSecondsAgo: seconds ago
- oneMinuteAgo: one minute ago
- xMinutesAgo: minutes ago
- oneHourAgo: one hour ago
- xHoursAgo: hours ago
- oneDayAgo: one day ago
- xDaysAgo: days ago
+ oneSecondAgo: et sekund siden
+ xSecondsAgo: sekunder siden
+ oneMinuteAgo: et minut siden
+ xMinutesAgo: minutter siden
+ oneHourAgo: en time siden
+ xHoursAgo: timer siden
+ oneDayAgo: en dag siden
+ xDaysAgo: dage siden
# Short formats for times, e.g. '5h 23m'
secondsShort: s
minutesAndSecondsShort: m s
- hoursAndMinutesShort: h m
+ hoursAndMinutesShort: t m
- xMinutes: minutes
+ xMinutes: minutter
keys:
tab: TAB
@@ -128,683 +131,686 @@ global:
alt: ALT
escape: ESC
shift: SHIFT
- space: SPACE
+ space: MELLEMRUM
demoBanners:
# This is the "advertisement" shown in the main menu and other various places
title: Demo Version
intro: >-
- Get the standalone to unlock all features!
+ Køb spillet for at få den fulde oplevelse!
mainMenu:
- play: Play
- continue: Continue
- newGame: New Game
+ play: Spil
+ continue: Fortsæt
+ newGame: Nyt Spil
changelog: Changelog
subreddit: Reddit
- importSavegame: Import
- openSourceHint: This game is open source!
- discordLink: Official Discord Server
- helpTranslate: Help translate!
- madeBy: Made by
+ importSavegame: Importer
+ openSourceHint: Dette spil er open source!
+ discordLink: Officiel Discord Server
+ helpTranslate: Hjælp med at oversætte!
+ madeBy: Lavet af
# This is shown when using firefox and other browsers which are not supported.
browserWarning: >-
- Sorry, but the game is known to run slow on your browser! Get the standalone version or download chrome for the full experience.
+ Undskyld, men spillet er kendt for at køre langsomt på denne browser! Køb spillet eller download chrome for den fulde oplevelse.
savegameLevel: Level
- savegameLevelUnknown: Unknown Level
+ savegameLevelUnknown: Ukendt Level
dialogs:
buttons:
ok: OK
- delete: Delete
- cancel: Cancel
- later: Later
- restart: Restart
- reset: Reset
- getStandalone: Get Standalone
- deleteGame: I know what I do
- viewUpdate: View Update
- showUpgrades: Show Upgrades
- showKeybindings: Show Keybindings
+ delete: Slet
+ cancel: Fortryd
+ later: Senere
+ restart: Genstart
+ reset: Nulstil
+ getStandalone: Køb spillet
+ deleteGame: Jeg ved hvad jeg laver
+ viewUpdate: Se Opdatering
+ showUpgrades: Vis Opgraderinger
+ showKeybindings: Vis Keybindings
importSavegameError:
- title: Import Error
+ title: Import Fejl
text: >-
- Failed to import your savegame:
+ Importering af gem fejlede:
importSavegameSuccess:
- title: Savegame Imported
+ title: Gem Importeret
text: >-
- Your savegame has been successfully imported.
+ Dit gem blev importet.
gameLoadFailure:
- title: Game is broken
+ title: Spillet er i stykker
text: >-
- Failed to load your savegame:
+ Det lykkedes ikke at åbne dit gem:
confirmSavegameDelete:
- title: Confirm deletion
+ title: Bekræft sletning
text: >-
- Are you sure you want to delete the game?
+ Er du sikker på du vil slette dit gem?
savegameDeletionError:
- title: Failed to delete
+ title: Sletning fejlede
text: >-
- Failed to delete the savegame:
+ Det lykkedes ikke at slette dit gem:
restartRequired:
- title: Restart required
+ title: Genstart er nødvendig
text: >-
You need to restart the game to apply the settings.
editKeybinding:
- title: Change Keybinding
- desc: Press the key or mouse button you want to assign, or escape to cancel.
+ title: Ændr Keybinding
+ desc: Tryk på knappen du vil bruge, eller escape for at fortryde.
resetKeybindingsConfirmation:
- title: Reset keybindings
- desc: This will reset all keybindings to their default values. Please confirm.
+ title: Nulstil keybindings
+ desc: Dette vil nulstille alle keybindings til deres standarder. Vær sød at bekræfte.
keybindingsResetOk:
- title: Keybindings reset
- desc: The keybindings have been reset to their respective defaults!
+ title: Keybindings nulstillet
+ desc: Keybindings er nulstillet til deres standarder!
featureRestriction:
- title: Demo Version
- desc: You tried to access a feature () which is not available in the demo. Consider to get the standalone for the full experience!
+ title: Demoversion
+ desc: Du prøvede at bruge en funktion () der ikke er tilgængelig i demoen. Overvej at købe spillet for den fulde oplevelse!
oneSavegameLimit:
- title: Limited savegames
- desc: You can only have one savegame at a time in the demo version. Please remove the existing one or get the standalone!
+ title: Begrænset mængde gem
+ desc: Du kan kun have et gem af gangen in demoversionen. Vær sød at slette det nuværende gem eller at købe spillet!
updateSummary:
- title: New update!
+ title: Ny opdatering!
desc: >-
- Here are the changes since you last played:
+ Dette har ændret sig siden sidst du spillede:
upgradesIntroduction:
- title: Unlock Upgrades
+ title: Få Opgraderinger
desc: >-
- All shapes you produce can be used to unlock upgrades - Don't destroy your old factories!
- The upgrades tab can be found on the top right corner of the screen.
+ Alle figurer du producere kan blive brugt til at få opgraderinger - Ødelæg ikke dine gamle fabrikker!
+ Opgraderingeringsvinduet kan findes i det øverste højre hjørne af skærmen.
massDeleteConfirm:
- title: Confirm delete
+ title: Bekræft sletning
desc: >-
- You are deleting a lot of buildings ( to be exact)! Are you sure you want to do this?
+ Du er ved at slette mange bygninger ( helt præcis)! Er du sikker på at det er det du vil gøre?
massCutConfirm:
- title: Confirm cut
+ title: Bekræft klip
desc: >-
- You are cutting a lot of buildings ( to be exact)! Are you sure you want to do this?
+ Du er ved at klippe mange bygninger ( helt præcis)! Er du sikker på at det er det du vil gøre?
blueprintsNotUnlocked:
- title: Not unlocked yet
+ title: Ikke tilgængeligt endnu
desc: >-
- Complete level 12 to unlock Blueprints!
+ Klar level 12 for at bruge arbejdstegninger!
keybindingsIntroduction:
- title: Useful keybindings
+ title: Brugbare keybindings
desc: >-
- This game has a lot of keybindings which make it easier to build big factories.
- Here are a few, but be sure to check out the keybindings!
- CTRL
+ Drag: Select an area.
- SHIFT
: Hold to place multiple of one building.
- ALT
: Invert orientation of placed belts.
+ Dette spil har mange keybindings, som gør det lettere at bygge store fabrikker.
+ Her er et par, men husk at tjekke keybindings!
+ CTRL
+ Træk: Vælg et område.
+ SHIFT
: Hold for at sætte flere af en bygning.
+ ALT
: Vend retningen af nedsatte transportbånd.
createMarker:
- title: New Marker
- desc: Give it a meaningful name, you can also include a short key of a shape (Which you can generate here)
- titleEdit: Edit Marker
+ title: Ny Markør
+ desc: Giv det et betydningsfuldt navn. du kan også inkludere en kort kode der repræsenterer en figur (Som du kan lave her)
+ titleEdit: Rediger Markør
markerDemoLimit:
- desc: You can only create two custom markers in the demo. Get the standalone for unlimited markers!
+ desc: Du kan kun lave to markører i demoen. Køb spillet for uendelige markører!
exportScreenshotWarning:
- title: Export screenshot
- desc: You requested to export your base as a screenshot. Please note that this can be quite slow for a big base and even crash your game!
+ title: Eksporter skærmbillede
+ desc: Du bad om at eksportere din fabrik som et skærmbillede. Bemærk at dette kan være rimelig langsomt for en stor base og kan endda lukke dit spil!
massCutInsufficientConfirm:
- title: Confirm cut
- desc: You can not afford to paste this area! Are you sure you want to cut it?
+ title: Bekræft klip
+ desc: Du har ikke råd til at sætte dette område ind igen! Er du sikker på du vil klippe det?
ingame:
# This is shown in the top left corner and displays useful keybindings in
# every situation
keybindingsOverlay:
- moveMap: Move
- selectBuildings: Select area
- stopPlacement: Stop placement
- rotateBuilding: Rotate building
- placeMultiple: Place multiple
- reverseOrientation: Reverse orientation
- disableAutoOrientation: Disable auto orientation
- toggleHud: Toggle HUD
- placeBuilding: Place building
- createMarker: Create Marker
- delete: Delete
- pasteLastBlueprint: Paste last blueprint
- lockBeltDirection: Enable belt planner
- plannerSwitchSide: Flip planner side
- cutSelection: Cut
- copySelection: Copy
- clearSelection: Clear Selection
+ moveMap: Bevæg dig
+ selectBuildings: Marker område
+ stopPlacement: Stop placering
+ rotateBuilding: Roter bygning
+ placeMultiple: Sæt flere
+ reverseOrientation: Omvend retning
+ disableAutoOrientation: Slå automatisk retning fra
+ toggleHud: Slå HUD til/fra
+ placeBuilding: Placer bygning
+ createMarker: Lav Markør
+ delete: Slet
+ pasteLastBlueprint: Sæt sidste arbejdstegning ind
+ lockBeltDirection: Aktiver bælteplanlægger
+ plannerSwitchSide: Flip planlægsningsside
+ cutSelection: Klip
+ copySelection: Kopier
+ clearSelection: Ryd Selektion
pipette: Pipette
- switchLayers: Switch Layers
+ switchLayers: Skift Lag
# Names of the colors, used for the color blind mode
colors:
- red: Red
- green: Green
- blue: Blue
- yellow: Yellow
- purple: Purple
+ red: Rød
+ green: Grøn
+ blue: Blå
+ yellow: Gul
+ purple: Lilla
cyan: Cyan
- white: White
- uncolored: No color
- black: Black
+ white: Hvid
+ uncolored: Ingen farve
+ black: Sort
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
buildingPlacement:
# Buildings can have different variants which are unlocked at later levels,
# and this is the hint shown when there are multiple variants available.
- cycleBuildingVariants: Press to cycle variants.
+ cycleBuildingVariants: Tryk for at vælge type.
# Shows the hotkey in the ui, e.g. "Hotkey: Q"
hotkeyLabel: >-
Hotkey:
infoTexts:
- speed: Speed
- range: Range
- storage: Storage
- oneItemPerSecond: 1 item / second
- itemsPerSecond: items / s
+ speed: Fart
+ range: Rækkevidde
+ storage: Opbevaring
+ oneItemPerSecond: 1 genstand / sekund
+ itemsPerSecond: genstande / s
itemsPerSecondDouble: (x2)
- tiles: tiles
+ tiles: flader
# The notification when completing a level
levelCompleteNotification:
# is replaced by the actual level, so this gets 'Level 03' for example.
- levelTitle: Level
- completed: Completed
- unlockText: Unlocked !
- buttonNextLevel: Next Level
+ levelTitle: Niveau
+ completed: Klaret
+ unlockText: er nu tilgængelig!
+ buttonNextLevel: Næste Niveau
# Notifications on the lower right
notifications:
- newUpgrade: A new upgrade is available!
- gameSaved: Your game has been saved.
+ newUpgrade: En ny opgradering er tilgængelig!
+ gameSaved: Dit spil er gemt.
# The "Upgrades" window
shop:
- title: Upgrades
- buttonUnlock: Upgrade
+ title: Opgraderinger
+ buttonUnlock: Opgrader
# Gets replaced to e.g. "Tier IX"
- tier: Tier
+ tier: Trin
# The roman number for each tier
tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X]
- maximumLevel: MAXIMUM LEVEL (Speed x)
+ maximumLevel: STØRSTE NIVEAU (Speed x)
# The "Statistics" window
statistics:
- title: Statistics
+ title: Statistikker
dataSources:
stored:
- title: Stored
- description: Displaying amount of stored shapes in your central building.
+ title: Opbevaret
+ description: Viser mængden af opbevarede figurer i din centrale bygning.
produced:
- title: Produced
- description: Displaying all shapes your whole factory produces, including intermediate products.
+ title: Produceret
+ description: Viser alle de figurer hele din fabrik producere, inklusiv produkter brugt til videre produktion.
delivered:
- title: Delivered
- description: Displaying shapes which are delivered to your central building.
- noShapesProduced: No shapes have been produced so far.
+ title: Afleveret
+ description: Viser figurer som er afleveret til din centrale bygning.
+ noShapesProduced: Ingen figurer er blevet produceret indtil videre.
# Displays the shapes per minute, e.g. '523 / m'
shapesPerMinute: / m
# Settings menu, when you press "ESC"
settingsMenu:
- playtime: Playtime
+ playtime: Spilletid
- buildingsPlaced: Buildings
- beltsPlaced: Belts
+ buildingsPlaced: Bygninger
+ beltsPlaced: Bælter
buttons:
- continue: Continue
- settings: Settings
- menu: Return to menu
+ continue: Fortsæt
+ settings: Indstillinger
+ menu: Til menu
# Bottom left tutorial hints
tutorialHints:
- title: Need help?
- showHint: Show hint
- hideHint: Close
+ title: Har du brug for hjælp?
+ showHint: Vis hint
+ hideHint: Luk
# When placing a blueprint
blueprintPlacer:
- cost: Cost
+ cost: Pris
# Map markers
waypoints:
- waypoints: Markers
+ waypoints: Markører
hub: HUB
- description: Left-click a marker to jump to it, right-click to delete it.
Press to create a marker from the current view, or right-click to create a marker at the selected location.
- creationSuccessNotification: Marker has been created.
+ description: Venstreklik en markør for at hoppe til den, højreklik for at slette den.
Tryk for at lave en markør på det nuværende sted, eller højreklik for at lave en markør på den valgte lokation.
+ creationSuccessNotification: Markør er sat.
# Shape viewer
shapeViewer:
- title: Layers
- empty: Empty
- copyKey: Copy Key
+ title: Lag
+ empty: Tom
+ copyKey: Kopier Kode
# Interactive tutorial
interactiveTutorial:
title: Tutorial
hints:
- 1_1_extractor: Place an extractor on top of a circle shape to extract it!
+ 1_1_extractor: Sæt en udvinder på toppen af encirkelfigur for at begynde produktion af den!
1_2_conveyor: >-
- Connect the extractor with a conveyor belt to your hub!
Tip: Click and drag the belt with your mouse!
+ Forbind udvinderen med et transportbælte til din hub!
Tip: Tryk og træk bæltet med din mus!
1_3_expand: >-
- This is NOT an idle game! Build more extractors and belts to finish the goal quicker.
Tip: Hold SHIFT to place multiple extractors, and use R to rotate them.
+ Dette er IKKE et idle game! Byg flere udvindere og bælter for at færdiggøre målet hurtigere.
Tip: Hold SHIFT for at sætte flere udvindere, og tryk R for at rotere dem.
# All shop upgrades
shopUpgrades:
belt:
- name: Belts, Distributor & Tunnels
- description: Speed x → x
+ name: Bælter, Fordelere & Tuneller
+ description: Fart x → x
miner:
- name: Extraction
- description: Speed x → x
+ name: Udvinding
+ description: Fart x → x
processors:
- name: Cutting, Rotating & Stacking
- description: Speed x → x
+ name: Klipning, Rotering & Stabling
+ description: Fart x → x
painting:
- name: Mixing & Painting
- description: Speed x → x
+ name: Blanding & Maling
+ description: Fart x → x
# Buildings and their name / description
buildings:
hub:
- deliver: Deliver
- toUnlock: to unlock
+ deliver: Aflever
+ toUnlock: for at få adgang til
levelShortcut: LVL
belt:
default:
- name: &belt Conveyor Belt
- description: Transports items, hold and drag to place multiple.
+ name: &belt Transportbælte
+ description: Transportere varer, hold og træk for at sætte flere.
- miner: # Internal name for the Extractor
+ # Internal name for the Extractor
+ miner:
default:
- name: &miner Extractor
- description: Place over a shape or color to extract it.
+ name: &miner Udvinder
+ description: Placer over en figur eller farve for at udvinde den.
chainable:
- name: Extractor (Chain)
- description: Place over a shape or color to extract it. Can be chained.
+ name: Udvinder (Kæde)
+ description: Placer over en figur eller farve for at udvinde den. Kan sættes i kæder.
- underground_belt: # Internal name for the Tunnel
+ # Internal name for the Tunnel
+ underground_belt:
default:
name: &underground_belt Tunnel
- description: Allows to tunnel resources under buildings and belts.
+ description: Laver tunneller under bygninger and bælter.
tier2:
- name: Tunnel Tier II
- description: Allows to tunnel resources under buildings and belts.
+ name: Tunnel Trin II
+ description: Laver tunneller under bygninger and bælter.
- splitter: # Internal name for the Balancer
+ # Internal name for the Balancer
+ splitter:
default:
- name: &splitter Balancer
- description: Multifunctional - Evenly distributes all inputs onto all outputs.
+ name: &splitter Spalter
+ description: Flere funktioner - Fordeler alle modtagne varer jævnt.
compact:
- name: Merger (compact)
- description: Merges two conveyor belts into one.
+ name: Sammenlægger (kompakt)
+ description: Sammenlægger to bælter til en.
compact-inverse:
- name: Merger (compact)
- description: Merges two conveyor belts into one.
+ name: Sammenlægger (kompakt)
+ description: Sammenlægger to bælter til en.
cutter:
default:
- name: &cutter Cutter
- description: Cuts shapes from top to bottom and outputs both halfs. If you use only one part, be sure to destroy the other part or it will stall!
+ name: &cutter Klipper
+ description: Klipper figurer fra top til bund og udsender begge halvdele. Hvis du kun bruger den ene halvdel så husk at ødelæg den anden del eller maskinen går i stå!
quad:
- name: Cutter (Quad)
- description: Cuts shapes into four parts. If you use only one part, be sure to destroy the other parts or it will stall!
+ name: Klipper (firdeler)
+ description: Klipper figurer om til fire dele. Hvis du kun bruger nogle af dem så husk at ødelæg de andre dele eller maskinen går i stå!
rotater:
default:
- name: &rotater Rotate
- description: Rotates shapes clockwise by 90 degrees.
+ name: &rotater Drejer
+ description: Drejer figurer med uret med 90 grader.
ccw:
- name: Rotate (CCW)
- description: Rotates shapes counter clockwise by 90 degrees.
+ name: Drejer (mod uret)
+ description: Drejer figurer mod uret med 90 grader.
fl:
- name: Rotate (180)
- description: Rotates shapes by 180 degrees.
+ name: Drejer (180)
+ description: Drejer figurer med 180 grader.
stacker:
default:
- name: &stacker Stacker
- description: Stacks both items. If they can not be merged, the right item is placed above the left item.
+ name: &stacker Stabler
+ description: Stabler begge figurer. Hvis de ikke kan sammensmeltes, så er den højre figur sat oven på den venstre.
mixer:
default:
- name: &mixer Color Mixer
- description: Mixes two colors using additive blending.
+ name: &mixer Farveblander
+ description: Blander to farver med additiv blanding.
painter:
default:
- name: &painter Painter
- description: &painter_desc Colors the whole shape on the left input with the color from the top input.
+ name: &painter Maler
+ description: &painter_desc Farver hele figuren fra venstre side med farven fra toppen.
mirrored:
name: *painter
description: *painter_desc
double:
- name: Painter (Double)
- description: Colors the shapes on the left inputs with the color from the top input.
+ name: Maler (Dobbelt)
+ description: Farver figurerne fra venstre side med farven fra toppen.
quad:
- name: Painter (Quad)
- description: Allows to color each quadrant of the shape with a different color.
+ name: Maler (Quad)
+ description: Lader dig farve hver fjerdel af figuren med forskellige farver.
trash:
default:
- name: &trash Trash
- description: Accepts inputs from all sides and destroys them. Forever.
+ name: &trash Skrald
+ description: Tillader input fra alle sider og ødelææger dem. For evigt.
storage:
- name: Storage
- description: Stores excess items, up to a given capacity. Can be used as an overflow gate.
+ name: Opbevaring
+ description: Opbevarer ekstra varer, til en given kapicitet. Kan bruges til at håndtere overproduktion.
energy_generator:
- deliver: Deliver
- toGenerateEnergy: For energy
+ deliver: Aflever
+ toGenerateEnergy: For energi
default:
- name: &energy_generator Energy Generator
- description: Generates energy by consuming shapes. Each energy generator requires a different shapes.
+ name: &energy_generator Energigenerator
+ description: Genererer energi ved at optage figurer. Hver energigenerator kræver forskellige figurer.
wire:
default:
- name: Energy Wire
- description: Allows you to transport energy.
+ name: Energiledning
+ description: Lader dig transportere energi.
advanced_processor:
default:
- name: Color Inverter
- description: Accepts a color or shape and inverts it.
+ name: Farveomvender
+ description: Tager imod en farve giver den modsatte.
wire_crossings:
default:
- name: Wire Splitter
- description: Splits a energy wire into two.
+ name: Ledningsspalter
+ description: Spalter en energiledning i to.
merger:
- name: Wire Merger
- description: Merges two energy wires into one.
+ name: Ledningssammenlægger
+ description: Sammenlægger to energiledninger til en.
storyRewards:
# Those are the rewards gained from completing the store
reward_cutter_and_trash:
- title: Cutting Shapes
- desc: You just unlocked the cutter - it cuts shapes half from top to bottom regardless of its orientation!
Be sure to get rid of the waste, or otherwise it will stall - For this purpose I gave you a trash, which destroys everything you put into it!
+ title: Klippe Figurer
+ desc: Du har lige fået adgang til klipperen - den klipper figurer i to fra top til bund uanset hvordan den vender!
Sørg for at ødelægge alt du ikke har brug for, ellers går den i stå - Til dette har jeg givet dig skraldespanden, som ødelægger alt du putter i den!
reward_rotater:
- title: Rotating
- desc: The rotater has been unlocked! It rotates shapes clockwise by 90 degrees.
+ title: Rotation
+ desc: Drejeren er nu tilgængelig! Den drejer figurer med uret med 90 grader.
reward_painter:
- title: Painting
+ title: Maling
desc: >-
- The painter has been unlocked - Extract some color veins (just as you do with shapes) and combine it with a shape in the painter to color them!
PS: If you are colorblind, there is a color blind mode in the settings!
+ Maleren er nu tilgængelig - Få noget farve med udvinderen (som du også gør med figurer) og kombiner det med en farve i maleren for at farve dem!
PS: Hvis du er farveblind, så er der en farveblindstilstand i indstillingerne!
reward_mixer:
- title: Color Mixing
- desc: The mixer has been unlocked - Combine two colors using additive blending with this building!
+ title: Farveblanding
+ desc: Farveblanderen er nu tilgængelig - Kombiner to farver ved brug af (strong>additiv blanding med denne bygning!
reward_stacker:
- title: Combiner
- desc: You can now combine shapes with the combiner! Both inputs are combined, and if they can be put next to each other, they will be fused. If not, the right input is stacked on top of the left input!
+ title: Stabler
+ desc: Du kan du stable figurer med stableren! Begge input er stablet, hvis de kan sættes ved siden af hinanden, sammensmeltes de. Hvis ikke er det højre input stablet ovenpå det venstre!
reward_splitter:
- title: Splitter/Merger
- desc: The multifunctional balancer has been unlocked - It can be used to build bigger factories by splitting and merging items onto multiple belts!
+ title: Spalter/Sammenlægger
+ desc: Den flerfunktionelle spalter er nu tilgængelig - Den kan blive brugt til at bygge større fabrikker ved at spalte og sammenlægge varer på flere bælter!
reward_tunnel:
title: Tunnel
- desc: The tunnel has been unlocked - You can now tunnel items through belts and buildings with it!
+ desc: Tunnellen er nu tilgængelig - Du kan nu lave tuneller under bælter og bygninger!
reward_rotater_ccw:
- title: CCW Rotating
- desc: You have unlocked a variant of the rotater - It allows to rotate counter clockwise! To build it, select the rotater and press 'T' to cycle its variants!
+ title: Rotation mod uret
+ desc: Du har fået adgang til en variant af drejeren - Den lader dig dreje ting mod uret! For at bygge den skal du vælge drejeren og trykke 'T'!
reward_miner_chainable:
- title: Chaining Extractor
- desc: You have unlocked the chaining extractor! It can forward its resources to other extractors so you can more efficiently extract resources!
+ title: Kædeudvinder
+ desc: Kædeudvinder er nu tilgængelig! Den kan videregive sine resurser til andre udvindere, så du kan udvinde resurser mere effektivt!
reward_underground_belt_tier_2:
- title: Tunnel Tier II
- desc: You have unlocked a new variant of the tunnel - It has a bigger range, and you can also mix-n-match those tunnels now!
+ title: Tunnel Trin II
+ desc: Du har fået adgang til en variant af tunnellen - Den har en større rækkevidde, og du kan også bruge begge typer tunneller på den samme strækning!
reward_splitter_compact:
- title: Compact Balancer
+ title: Kompakt Spalter
desc: >-
- You have unlocked a compact variant of the balancer - It accepts two inputs and merges them into one!
+ Du har fået adgang til en kompakt variant af spalteren - Den tager to inputs og sammenlægger dem til en!
reward_cutter_quad:
- title: Quad Cutting
- desc: You have unlocked a variant of the cutter - It allows you to cut shapes in four parts instead of just two!
+ title: Quad Klipining
+ desc: Du har fået adgang til en variant af klipperen - Den lader dig klippe figurer i fire dele i stedet for bare to!
reward_painter_double:
- title: Double Painting
- desc: You have unlocked a variant of the painter - It works as the regular painter but processes two shapes at once consuming just one color instead of two!
+ title: Dobbelt Maling
+ desc: Du har fået adgang til en variant af maleren - Den virker som en normal maler, men maler to figurer samtidig og bruger kun en farve i stedet for to.
reward_painter_quad:
- title: Quad Painting
- desc: You have unlocked a variant of the painter - It allows to paint each part of the shape individually!
+ title: Quad Maling
+ desc: Du har fået adgang til en variant af maleren - Den lader dig male hver del af en figur for sig!
reward_storage:
- title: Storage Buffer
- desc: You have unlocked a variant of the trash - It allows to store items up to a given capacity!
+ title: Opbevaringsbuffer
+ desc: Du har fået adgang til en variant af skraldespanden - Den lader dig opbevarer varer til en hvis kapacitet!
reward_freeplay:
- title: Freeplay
- desc: You did it! You unlocked the free-play mode! This means that shapes are now randomly generated! (No worries, more content is planned for the standalone!)
+ title: Frit spil
+ desc: Du klarede det! Du har fået adgang til frit spil! Dette betyder at figurer nu er tilfældigt genereret! (Vær ikke bekymret, mere indhold er planlagt for den købte version!)
reward_blueprints:
- title: Blueprints
- desc: You can now copy and paste parts of your factory! Select an area (Hold CTRL, then drag with your mouse), and press 'C' to copy it.
Pasting it is not free, you need to produce blueprint shapes to afford it! (Those you just delivered).
+ title: Arbejdstegninger
+ desc: Du kan nu kopiere og indsætte dele af din fabrik! Vælg et område (Hold CTRL, og træk med musen), og tryk 'C' for at kopiere det.
At sætte det ind er ikke gratis, du skal producere arbejdstegning figurer for at have råd til det! (Dem du lige har leveret).
# Special reward, which is shown when there is no reward actually
no_reward:
- title: Next level
+ title: Næste level
desc: >-
- This level gave you no reward, but the next one will!
PS: Better don't destroy your existing factory - You need all those shapes later again to unlock upgrades!
+ Dette level gav dig ingen belønninger, men det vil det næste!
PS: Du må hellere lade være med at ødelægge din fabrik - Du får brug for alle de figurer senere igen for at få opgraderinger!
no_reward_freeplay:
- title: Next level
+ title: Næste level
desc: >-
- Congratulations! By the way, more content is planned for the standalone!
+ Tillykke! Forresten er mere indhold planlagt for den købte version!
settings:
- title: Settings
+ title: Indstillinger
categories:
- general: General
- userInterface: User Interface
- advanced: Advanced
+ general: Generelt
+ userInterface: Brugerflade
+ advanced: Advanceret
versionBadges:
- dev: Development
- staging: Staging
- prod: Production
- buildDate: Built
+ dev: Udvikling
+ staging: Iscenesættelse
+ prod: Produktion
+ buildDate: Bygget
labels:
uiScale:
- title: Interface scale
+ title: Grænseflade størrelse
description: >-
- Changes the size of the user interface. The interface will still scale based on your device resolution, but this setting controls the amount of scale.
+ Ændrer størrelsen på brugerfladen. Den vil stadig skalere baseret på opløsningen af din skærm, men denne indstilling bestemmer hvor meget den skalere.
scales:
- super_small: Super small
- small: Small
- regular: Regular
- large: Large
- huge: Huge
+ super_small: Meget lille
+ small: Lille
+ regular: Normal
+ large: Store
+ huge: Kæmpe
autosaveInterval:
- title: Autosave Interval
+ title: Autogem Interval
description: >-
- Controls how often the game saves automatically. You can also disable it entirely here.
+ Kontrollere hvor ofte spillet gemmer automatisk. Du kan også slå det helt fra her.
intervals:
- one_minute: 1 Minute
- two_minutes: 2 Minutes
- five_minutes: 5 Minutes
- ten_minutes: 10 Minutes
- twenty_minutes: 20 Minutes
- disabled: Disabled
+ one_minute: 1 Minut
+ two_minutes: 2 Minuter
+ five_minutes: 5 Minuter
+ ten_minutes: 10 Minuter
+ twenty_minutes: 20 Minuter
+ disabled: Slået fra
scrollWheelSensitivity:
- title: Zoom sensitivity
+ title: Zoom følsomhed
description: >-
- Changes how sensitive the zoom is (Either mouse wheel or trackpad).
+ Ændrer hvor følsomt zoomet er (Enten mussehjulet eller trackpad).
sensitivity:
- super_slow: Super slow
- slow: Slow
- regular: Regular
- fast: Fast
- super_fast: Super fast
+ super_slow: Meget langsom
+ slow: Langsom
+ regular: Normal
+ fast: Hurtig
+ super_fast: Meget hurtig
movementSpeed:
- title: Movement speed
+ title: Bevægelseshastighed
description: >-
- Changes how fast the view moves when using the keyboard.
+ Ændrer hvor hurtigt du kan bevæge dit overblik når du bruger tastaturet.
speeds:
- super_slow: Super slow
- slow: Slow
- regular: Regular
- fast: Fast
- super_fast: Super Fast
- extremely_fast: Extremely Fast
+ super_slow: Meget langsom
+ slow: Langsom
+ regular: Normal
+ fast: Hurtig
+ super_fast: Meget hurtig
+ extremely_fast: Ekstremt hurtig
language:
- title: Language
+ title: Sprog
description: >-
- Change the language. All translations are user contributed and might be incomplete!
+ Ændrer sproget. All oversættelser er lavet af fælleskabet og kan være ufuldstændige!
enableColorBlindHelper:
- title: Color Blind Mode
+ title: Farveblindstilstand
description: >-
- Enables various tools which allow to play the game if you are color blind.
+ Aktivere forskellige redskaber der lader dig spille, selv hvis du er farveblind.
fullscreen:
- title: Fullscreen
+ title: Fuld skærm
description: >-
- It is recommended to play the game in fullscreen to get the best experience. Only available in the standalone.
+ Det er forslået at spille i fuld skærm for den bedste oplevelse. Kun tilgængelig i den købte version.
soundsMuted:
- title: Mute Sounds
+ title: Slå lydeffekterne fra
description: >-
- If enabled, mutes all sound effects.
+ Aktiver for at slå alle lydeffekter fra.
musicMuted:
- title: Mute Music
+ title: Slå musik fra
description: >-
- If enabled, mutes all music.
+ Aktiver for at slå al musik fra.
theme:
- title: Game theme
+ title: Spiltilstand
description: >-
- Choose the game theme (light / dark).
+ Vælg spiltilstand (lys / mørk).
themes:
- dark: Dark
- light: Light
+ dark: Mørk
+ light: Lys
refreshRate:
- title: Simulation Target
+ title: Simulationsmål
description: >-
- If you have a 144hz monitor, change the refresh rate here so the game will properly simulate at higher refresh rates. This might actually decrease the FPS if your computer is too slow.
+ Hvis du har en 144hz skærm ændr opdateringshastigheden her så spillet vil simulere den højere opdateringshastighed korrekt. Dette kan faktisk sænke din FPS hvis din computer er for langsom.
alwaysMultiplace:
- title: Multiplace
+ title: Multiplacer
description: >-
- If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently.
+ Aktiver for at alle bygninger fortsætter med at være valgt efter placering, indtil du vælger den fra. Dette svarer til altid at holde SHIFT nede.
offerHints:
- title: Hints & Tutorials
+ title: Hints & Vejledning
description: >-
- Whether to offer hints and tutorials while playing. Also hides certain UI elements onto a given level to make it easier to get into the game.
+ Om spillet skal tilbyde hints og vejledning imens du spiller. Skjuler også visse dele af brugerfladen indtil et givent level for at gøre det nemmere at lære spillet at kende.
enableTunnelSmartplace:
- title: Smart Tunnels
+ title: Smarte Tunneller
description: >-
- When enabled, placing tunnels will automatically remove unnecessary belts. This also enables to drag tunnels and excess tunnels will get removed.
+ Aktiver for at placering af tunneller automatisk fjerner unødige bælter. Dette gør igså at du kan trække tunneller så overskydende tunneller fjernes.
vignette:
title: Vignette
description: >-
- Enables the vignette which darkens the screen corners and makes text easier to read.
+ Aktivere vignette hvilket mørkner kanterne af skærmen og gør teksten nemmere at læse.
rotationByBuilding:
- title: Rotation by building type
+ title: Rotation baseret på bygningstype
description: >-
- Each building type remembers the rotation you last set it to individually. This may be more comfortable if you frequently switch between placing different building types.
+ Hver bygningstype husker den rotation du sidst satte den til. Dette kan være komfortabelt hvis du ofte skifter mellem at placere forskellige bygninger.
compactBuildingInfo:
- title: Compact Building Infos
+ title: Kompakt Bygningsinfo
description: >-
- Shortens info boxes for buildings by only showing their ratios. Otherwise a description and image is shown.
+ Forkorter infobokse til bygninger ved kun at vise deres ratioer. Ellers er en beskrivelse og et billede også vist.
disableCutDeleteWarnings:
- title: Disable Cut/Delete Warnings
+ title: Slå klip/slet advarsler fra
description: >-
- Disable the warning dialogs brought up when cutting/deleting more than 100 entities.
+ Slå advarselsboksene, der dukker op når mere end 100 ting slettes, fra.
keybindings:
title: Keybindings
hint: >-
- Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options.
+ Tip: Husk at bruge CTRL, SHIFT og ALT! De byder på forskellige placeringsmuligheder.
- resetKeybindings: Reset Keybindings
+ resetKeybindings: Nulstil Keybindings
categoryLabels:
- general: Application
- ingame: Game
- navigation: Navigating
- placement: Placement
- massSelect: Mass Select
- buildings: Building Shortcuts
- placementModifiers: Placement Modifiers
+ general: Applikation
+ ingame: Spil
+ navigation: Navigation
+ placement: Placering
+ massSelect: Massemarkering
+ buildings: Bygningsgenveje
+ placementModifiers: Placeringsmodifikationer
mappings:
- confirm: Confirm
- back: Back
- mapMoveUp: Move Up
- mapMoveRight: Move Right
- mapMoveDown: Move Down
- mapMoveLeft: Move Left
- mapMoveFaster: Move Faster
- centerMap: Center Map
+ confirm: Bekræft
+ back: Tilbage
+ mapMoveUp: Bevæg dig op
+ mapMoveRight: Bevæg dig til højre
+ mapMoveDown: Bevæg dig ned
+ mapMoveLeft: Bevæg dig til venstre
+ mapMoveFaster: Bevæg dig hurtigere
+ centerMap: Centrer kortet
- mapZoomIn: Zoom in
- mapZoomOut: Zoom out
- createMarker: Create Marker
+ mapZoomIn: Zoom ind
+ mapZoomOut: Zoom ud
+ createMarker: Lav Markør
- menuOpenShop: Upgrades
- menuOpenStats: Statistics
+ menuOpenShop: Opgraderinger
+ menuOpenStats: Statistikker
- toggleHud: Toggle HUD
- toggleFPSInfo: Toggle FPS and Debug Info
- switchLayers: Switch layers
- exportScreenshot: Export whole Base as Image
+ toggleHud: Slå HUD til/fra
+ toggleFPSInfo: Slå FPS og Debug Info til/fra
+ switchLayers: Skift lag
+ exportScreenshot: Eksporter hele basen som et billede
belt: *belt
splitter: *splitter
underground_belt: *underground_belt
@@ -818,51 +824,51 @@ keybindings:
trash: *trash
pipette: Pipette
- rotateWhilePlacing: Rotate
+ rotateWhilePlacing: Roter
rotateInverseModifier: >-
- Modifier: Rotate CCW instead
- cycleBuildingVariants: Cycle Variants
- confirmMassDelete: Delete area
- pasteLastBlueprint: Paste last blueprint
- cycleBuildings: Cycle Buildings
- lockBeltDirection: Enable belt planner
+ Modifier: Roter mod uret i stedet
+ cycleBuildingVariants: Gennemgå Varianter
+ confirmMassDelete: Slet område
+ pasteLastBlueprint: Sæt sidste arbejdstegning ind
+ cycleBuildings: Gennemgå bygninger
+ lockBeltDirection: Slå bælteplanlægger til
switchDirectionLockSide: >-
- Planner: Switch side
+ Planner: Skift side
- massSelectStart: Hold and drag to start
- massSelectSelectMultiple: Select multiple areas
- massSelectCopy: Copy area
- massSelectCut: Cut area
+ massSelectStart: Hold og træk for at starte
+ massSelectSelectMultiple: Vælg flere områder
+ massSelectCopy: Kopier område
+ massSelectCut: Klip område
- placementDisableAutoOrientation: Disable automatic orientation
- placeMultiple: Stay in placement mode
- placeInverse: Invert automatic belt orientation
- menuClose: Close Menu
- advanced_processor: Color Inverter
- wire: Energy Wire
+ placementDisableAutoOrientation: Slå automatisk orientering fra
+ placeMultiple: Bliv i placeringstilstand
+ placeInverse: Spejlvend automatisk bælteorientering
+ menuClose: Luk Menu
+ advanced_processor: Farveomvender
+ wire: Energiledning
about:
- title: About this Game
+ title: Om dette spil
body: >-
- This game is open source and developed by Tobias Springer (this is me).
+ Dette spil er open source og er udviklet af Tobias Springer (dette er mig).
- If you want to contribute, check out shapez.io on github.
+ Hvis du vil kontribuere, tjek shapez.io på github.
- This game wouldn't have been possible without the great Discord community around my games - You should really join the Discord server!
+ Dette spil ville ikke have været muligt uden det fremragende Discord-fælleskab omkring mine spil - Du burde virkelig deltage på Discordserveren!
- The soundtrack was made by Peppsen - He's awesome.
+ Lydsporet er lavet af Peppsen - Han er fantastisk.
- Finally, huge thanks to my best friend Niklas - Without our factorio sessions this game would never have existed.
+ Endelig, tusind tak til min bedste ven Niklas - Uden vi havde spillet factorio sammen ville dette spil aldrig have eksisteret.
changelog:
title: Changelog
demo:
features:
- restoringGames: Restoring savegames
- importingGames: Importing savegames
- oneGameLimit: Limited to one savegame
- customizeKeybindings: Customizing Keybindings
- exportingBase: Exporting whole Base as Image
+ restoringGames: Genopretter gem
+ importingGames: Importerer gem
+ oneGameLimit: Afgrænset til et gem
+ customizeKeybindings: Tilpasser Keybindings
+ exportingBase: Eksportere hele basen som et billede
- settingNotAvailable: Not available in the demo.
+ settingNotAvailable: Ikke tilgængelig i demoen.
diff --git a/translations/base-de.yaml b/translations/base-de.yaml
index 5f9b060c..62c823da 100644
--- a/translations/base-de.yaml
+++ b/translations/base-de.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: In shapez.io nutzt du die vorhandenen Ressourcen, um mit deinen Maschinen durch Kombination immer komplexere Formen zu erschaffen.
@@ -33,57 +34,58 @@ steamPage:
longText: >-
[img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img]
- shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map.
- Upon delivering the requested shapes you will progress within the game and unlock upgrades to speed up your factory.
+ In shapez.io musst du Maschinen geschickt verbinden, damit Formen automatisiert erstellt, bearbeitet und kombiniert werden.
- As the demand for shapes increases, you will have to scale up your factory to meet the demand - Don't forget about resources though, you will have to expand across the [b]infinite map[/b]!
+ Liefere die gewünschten, stetig komplexer werdenden Formen an dein Hauptgebäude, um im Spiel voranzukommen. Schalte mit ihnen außerdem Upgrades frei, die deine Maschinen und somit auch deine Fabriken beschleunigen!
- Soon you will have to mix colors and paint your shapes with them - Combine red, green and blue color resources to produce different colors and paint shapes with it to satisfy the demand.
+ Da die Nachfrage sowohl in der Komplexität, als auch der Menge steigt, wirst du deine Fabriken erweitern müssen. Vergiss nicht, dass du die dafür benötigten Ressourcen beschaffen musst und expandiere auf der [b]unendlichen Karte[/b]!
- This game features 18 progressive levels (Which should keep you busy for hours already!) but I'm constantly adding new content - There is a lot planned!
+ Bald wirst du Farben mischen und deine Formen damit bemalen lassen. Staple dann deine fertigen Formen aufeinander und lasse so die wildesten Kreationen entstehen.
- Purchasing the game gives you access to the standalone version which has additional features and you'll also receive access to newly developed features.
+ Nutze dein gesammeltes Wissen über die Maschinen und lasse deine Fabriken die gewünschten Formen der 18 verschiedenen Level abliefern. Schalte mit jedem Level neue Arbeitsschritte oder Gebäude frei. Das sollte dich schon für Stunden beschäftigt halten! Danach werden im Freispielmodus zufällige Formen generiert, die du ebenfalls abliefern kannst. Ich füge regelmäßig neue Funktionen hinzu und davon sind eine ganze Menge geplant!
- [b]Standalone Advantages[/b]
+ Wenn du das Spiel erwirbst, erhälst du Zugriff auf die zusätzlichen Features der Standalone-Version. Das bedeutet, du kannst unter anderem die neuesten Updates zuerst spielen!
+
+ [b]Vorteile der Standalone[/b]
[list]
- [*] Dark Mode
- [*] Unlimited Waypoints
- [*] Unlimited Savegames
- [*] Additional settings
- [*] Coming soon: Wires & Energy! Aiming for (roughly) end of July 2020.
- [*] Coming soon: More Levels
- [*] Allows me to further develop shapez.io ❤️
+ [*] Dark-Mode
+ [*] Unbegrenzte Wegpunkte
+ [*] Unbegrenzte Anzahl von Spielständen
+ [*] Weitere Einstellungen
+ [*] Es kommen: Mehr Levels
+ [*] Es kommen: Kabel & Energie! Voraussichtlich gegen Ende Juli 2020.
+ [*] Unterstütze die Entwicklung von shapez.io ❤️
[/list]
- [b]Future Updates[/b]
+ [b]Geplante Funktionen[/b]
- I am updating the game very often and trying to push an update at least every week!
+ Ich bin aktiv mit der Entwicklung beschäftigt und versuche jede Woche ein Update oder den aktuellen Stand der Entwicklung zu veröffentlichen.
[list]
- [*] Different maps and challenges (e.g. maps with obstacles)
- [*] Puzzles (Deliver the requested shape with a restricted area / set of buildings)
- [*] A story mode where buildings have a cost
- [*] Configurable map generator (Configure resource/shape size/density, seed and more)
- [*] Additional types of shapes
- [*] Performance improvements (The game already runs pretty well!)
- [*] And much more!
+ [*] Verschiedene Karten und Herausforderungen (z.B. Karten mit Hindernissen)
+ [*] Puzzle (Liefere die gewünschten Formen mit begrenztem Platz / limitierten Gebäuden)
+ [*] Story-Modus mit Gebäudekosten
+ [*] Einstellbare Kartengenerierung (Ändere die Grösse/Anzahl/Dichte der Ressourcenflecken, den Seed und mehr)
+ [*] Mehr Formentypen
+ [*] Performanceverbesserungen (Das Spiel läuft bereits ganz gut!)
+ [*] Und vieles mehr!
[/list]
- [b]This game is open source![/b]
+ [b] Dieses Spiel ist Open Source[/b]
- Anybody can contribute, I'm actively involved in the community and attempt to review all suggestions and take feedback into consideration where possible.
- Be sure to check out my trello board for the full roadmap!
-
- [b]Links[/b]
+ Jeder kann dazu beitragen! Ich bin aktiv in die Community involviert, versuche alle Vorschläge zu lesen und beziehe so viel Feedback wie möglich mit in die Entwicklung ein.
+ Die komplette Roadmap gibt es auf dem Trello-Board zum Nachlesen!
+ [b]Links [/b]
[list]
- [*] [url=https://discord.com/invite/HN7EVzV]Official Discord[/url]
+ [*] [url=https://discord.com/invite/HN7EVzV]Offizieller Discord[/url]
[*] [url=https://trello.com/b/ISQncpJP/shapezio]Roadmap[/url]
[*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url]
- [*] [url=https://github.com/tobspr/shapez.io]Source code (GitHub)[/url]
- [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Help translate[/url]
+ [*] [url=https://github.com/tobspr/shapez.io]Quelltext (GitHub)[/url]
+ [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Hilf beim Übersetzen[/url]
[/list]
+
global:
loading: Laden
error: Fehler
@@ -268,8 +270,8 @@ dialogs:
Hier kannst du ein Bildschirmfoto von deiner ganzen Fabrik erstellen. Für extrem große Fabriken kann das jedoch sehr lange dauern und ggf. zum Spielabsturz führen!
massCutInsufficientConfirm:
- title: Confirm cut
- desc: You can not afford to paste this area! Are you sure you want to cut it?
+ title: Ausschneiden bestätigen
+ desc: Du hast aktuell nicht genug Blaupausenformen, um die Auswahl einzufügen! Möchtest du sie trotzdem ausschneiden?
ingame:
# This is shown in the top left corner and displays useful keybindings in
@@ -293,7 +295,7 @@ ingame:
copySelection: Kopieren
clearSelection: Auswahl aufheben
pipette: Pipette
- switchLayers: Switch layers
+ switchLayers: Ebenen wechseln
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@@ -409,11 +411,11 @@ ingame:
cyan: Cyan
white: Weiß
uncolored: Farblos
- black: Black
+ black: Schwarz
shapeViewer:
title: Ebenen
empty: Leer
- copyKey: Copy Key
+ copyKey: Schlüssel kopieren
# All shop upgrades
shopUpgrades:
@@ -485,8 +487,8 @@ buildings:
name: Rotierer (CCW)
description: Rotiert Formen gegen den Uhrzeigersinn um 90 Grad.
fl:
- name: Rotate (180)
- description: Rotates shapes by 180 degrees.
+ name: Rotierer (180)
+ description: Rotiert Formen um 180 Grad.
stacker:
default:
@@ -530,25 +532,25 @@ buildings:
levelShortcut: LVL
wire:
default:
- name: Energy Wire
- description: Allows you to transport energy.
+ name: Energiekabel
+ description: Transportiert Energie.
advanced_processor:
default:
- name: Color Inverter
- description: Accepts a color or shape and inverts it.
+ name: Farbinvertierer
+ description: Akzeptiert Farben und Formen und invertiert sie.
energy_generator:
- deliver: Deliver
- toGenerateEnergy: For
+ deliver: Liefere
+ toGenerateEnergy: für
default:
- name: Energy Generator
- description: Generates energy by consuming shapes.
+ name: Energiegenerator
+ description: Generiert Energie, indem die Formen verbraucht werden.
wire_crossings:
default:
- name: Wire Splitter
- description: Splits a energy wire into two.
+ name: Kabelverteiler
+ description: Teilt ein Energiekabel in zwei Ausgänge.
merger:
- name: Wire Merger
- description: Merges two energy wires into one.
+ name: Kabelverbinder
+ description: Verbindet zwei Energiekabel zu einem.
storyRewards:
# Those are the rewards gained from completing the store
@@ -636,9 +638,9 @@ storyRewards:
settings:
title: Einstellungen
categories:
- general: General
- userInterface: User Interface
- advanced: Advanced
+ general: Allgemein
+ userInterface: Benutzeroberfläche
+ advanced: Erweitert
versionBadges:
dev: Entwicklung
@@ -833,11 +835,11 @@ keybindings:
lockBeltDirection: Bandplaner aktivieren
switchDirectionLockSide: "Planer: Seite wechseln"
pipette: Pipette
- menuClose: Close Menu
- switchLayers: Switch layers
- advanced_processor: Color Inverter
- energy_generator: Energy Generator
- wire: Energy Wire
+ menuClose: Menü schließen
+ switchLayers: Ebenen wechseln
+ advanced_processor: Farbnivertierer
+ energy_generator: Energiegenerator
+ wire: Energiekabel
about:
title: Über dieses Spiel
diff --git a/translations/base-el.yaml b/translations/base-el.yaml
index f42ea24f..a8c8b241 100644
--- a/translations/base-el.yaml
+++ b/translations/base-el.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io is a game about building factories to automate the creation and combination of increasingly complex shapes within an infinite map.
diff --git a/translations/base-en.yaml b/translations/base-en.yaml
index 38196d52..76c4106a 100644
--- a/translations/base-en.yaml
+++ b/translations/base-en.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map.
@@ -447,12 +448,8 @@ buildings:
name: &belt Conveyor Belt
description: Transports items, hold and drag to place multiple.
- wire:
- default:
- name: &wire Energy Wire
- description: Allows you to transport energy.
-
- miner: # Internal name for the Extractor
+ # Internal name for the Extractor
+ miner:
default:
name: &miner Extractor
description: Place over a shape or color to extract it.
@@ -461,7 +458,8 @@ buildings:
name: Extractor (Chain)
description: Place over a shape or color to extract it. Can be chained.
- underground_belt: # Internal name for the Tunnel
+ # Internal name for the Tunnel
+ underground_belt:
default:
name: &underground_belt Tunnel
description: Allows you to tunnel resources under buildings and belts.
@@ -470,7 +468,8 @@ buildings:
name: Tunnel Tier II
description: Allows you to tunnel resources under buildings and belts.
- splitter: # Internal name for the Balancer
+ # Internal name for the Balancer
+ splitter:
default:
name: &splitter Balancer
description: Multifunctional - Evenly distributes all inputs onto all outputs.
@@ -491,11 +490,6 @@ buildings:
name: Cutter (Quad)
description: Cuts shapes into four parts. If you use only one part, be sure to destroy the other parts or it will stall!
- advanced_processor:
- default:
- name: &advanced_processor Color Inverter
- description: Accepts a color or shape and inverts it.
-
rotater:
default:
name: &rotater Rotate
@@ -529,6 +523,7 @@ buildings:
double:
name: Painter (Double)
description: Colors the shapes on the left inputs with the color from the top input.
+
quad:
name: Painter (Quad)
description: Allows you to color each quadrant of the shape with a different color.
@@ -542,25 +537,6 @@ buildings:
name: Storage
description: Stores excess items, up to a given capacity. Can be used as an overflow gate.
- energy_generator:
- deliver: Deliver
-
- # This will be shown before the amount, so for example 'For 123 Energy'
- toGenerateEnergy: For
-
- default:
- name: &energy_generator Energy Generator
- description: Generates energy by consuming shapes.
-
- wire_crossings:
- default:
- name: &wire_crossings Wire Splitter
- description: Splits a energy wire into two.
-
- merger:
- name: Wire Merger
- description: Merges two energy wires into one.
-
storyRewards:
# Those are the rewards gained from completing the store
reward_cutter_and_trash:
@@ -637,7 +613,7 @@ storyRewards:
no_reward:
title: Next level
desc: >-
- This level gave you no reward, but the next one will!
PS: Better don't destroy your existing factory - You need all those shapes later again to unlock upgrades!
+ This level gave you no reward, but the next one will!
PS: Better not destroy your existing factory - You'll need all those shapes later to unlock upgrades!
no_reward_freeplay:
title: Next level
@@ -821,14 +797,11 @@ keybindings:
underground_belt: *underground_belt
miner: *miner
cutter: *cutter
- advanced_processor: *advanced_processor
rotater: *rotater
stacker: *stacker
mixer: *mixer
- energy_generator: *energy_generator
painter: *painter
trash: *trash
- wire: *wire
pipette: Pipette
rotateWhilePlacing: Rotate
diff --git a/translations/base-es.yaml b/translations/base-es.yaml
index f5dbd619..765970d6 100644
--- a/translations/base-es.yaml
+++ b/translations/base-es.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io es un juego sobre construir fábricas para automatizar la creación y combinación de figuras cada vez más complejas en un mapa infinito.
diff --git a/translations/base-fi.yaml b/translations/base-fi.yaml
index 7014c733..5acc58cf 100644
--- a/translations/base-fi.yaml
+++ b/translations/base-fi.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io on peli tehtaiden rakentamisesta, joiden avulla automatisoidaan yhä monimutkaisempien muotojen luonti and yhdisteleminen loputtomassa maailmassa.
diff --git a/translations/base-fr.yaml b/translations/base-fr.yaml
index f880e1c0..fe460760 100644
--- a/translations/base-fr.yaml
+++ b/translations/base-fr.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io est un jeu qui consiste à construire des usines pour automatiser la création et la combinaison de formes de plus en plus complexes sur une carte infinie.
@@ -33,13 +34,13 @@ steamPage:
shapez.io est un jeu dans lequel vous devrez construire des usines pour automatiser la création et la combinaison de formes de plus en plus complexes sur une carte infinie.
Lors de la livraison des formes requises vous progresserez et débloquerez des améliorations pour accélerer votre usine.
- Au vu de l'augmantation des demandes de formes, vous devrez agrandir votre usine pour répondre à la forte demande - Mais n'oubliez pas les ressources, vous drevrez vous étendre au milieu de cette [b]carte infinie[/b] !
+ Au vu de l'augmentation des demandes de formes, vous devrez agrandir votre usine pour répondre à la forte demande - Mais n'oubliez pas les ressources, vous drevrez vous étendre au milieu de cette [b]carte infinie[/b] !
Bientôt vous devrez mixer les couleurs et peindre vos formes avec - Combinez les ressources de couleurs rouge, verte et bleue pour produire différentes couleurs et peindre les formes avec pour satisfaire la demande.
- Ce jeu propose 18 niveaux progressifs (qui devraient déjà vous occuper des heures!) mais j'ajoute constamment de nouveau contenus - Il y en a beaucoup de prévus !
+ Ce jeu propose 18 niveaux progressifs (qui devraient déjà vous occuper quelques heures !) mais j'ajoute constamment de nouveau contenus - Il y en a beaucoup de prévus !
- Acheter le jeu vous donne accès à la version complète qui a des fonctionnalitées additionnelles et vous recevrez aussi un accès à des fonctionnalitées fraîchement développées.
+ Acheter le jeu vous donne accès à la version complète qui a des fonctionnalités additionnelles et vous recevrez aussi un accès à des fonctionnalités fraîchement développées.
[b]Avantages de la version complète (standalone)[/b]
@@ -59,11 +60,11 @@ steamPage:
[list]
[*] Différentes cartes et challenges (e.g. carte avec obstacles)
- [*] Puzzles (Délivrer la forme requise avec une zone limitée/jeu de batîments)
- [*] Un mode histoire où les batîments ont un coût
- [*] Générateur de carte configurable (configuration des ressources/formes taille/densitée, graine et plus)
+ [*] Puzzles (Délivrer la forme requise avec une zone limitée/jeu de bâtiments)
+ [*] Un mode histoire où les bâtiments ont un coût
+ [*] Générateur de carte configurable (configuration des ressources/formes/taille/densitée, seed et plus)
[*] Plus de formes
- [*] Amélioration des performances (Le jeu tourne déjà plutot bien!)
+ [*] Amélioration des performances (Le jeu tourne déjà plutot bien !)
[*] Et bien plus !
[/list]
@@ -127,7 +128,7 @@ global:
control: CTRL
alt: ALT
escape: ESC
- shift: SHIFT
+ shift: MAJ
space: ESPACE
demoBanners:
@@ -140,13 +141,13 @@ mainMenu:
play: Jouer
changelog: Historique
importSavegame: Importer
- openSourceHint: Ce jeu est open source!
+ openSourceHint: Ce jeu est open source !
discordLink: Serveur Discord officiel
- helpTranslate: Contribuez à la traduction!
+ helpTranslate: Contribuez à la traduction !
# This is shown when using firefox and other browsers which are not supported.
browserWarning: >-
- Désolé, mais ce jeu est connu pour tourner lentement sur votre navigateur web ! Procurez-vous la version complète ou téléchargez Chrome pour une meilleure expérience.
+ Désolé, ce jeu est connu pour tourner lentement sur votre navigateur web ! Procurez-vous la version complète ou téléchargez Chrome pour une meilleure expérience.
savegameLevel: Niveau
savegameLevelUnknown: Niveau inconnu
@@ -234,12 +235,12 @@ dialogs:
massDeleteConfirm:
title: Confirmation de suppression
desc: >-
- Vous allez supprimer pas mal de bâtiments ( pour être exact) ! Êtes vous certains de vouloir faire cela ?
+ Vous allez supprimer pas mal de bâtiments ( pour être exact) ! Êtes vous certains de vouloir faire ça ?
massCutConfirm:
title: Confirmer la coupure
desc: >-
- Vous vous apprêtez à couper beaucoup de bâtiments ( pour être précis) ! Êtes-vous certains de vouloir faire cela ?
+ Vous vous apprêtez à couper beaucoup de bâtiments ( pour être précis) ! Êtes-vous certains de vouloir faire ça ?
blueprintsNotUnlocked:
title: Pas encore débloqué
@@ -351,10 +352,10 @@ ingame:
description: Affiche le nombre de formes stockées dans votre bâtiment central.
produced:
title: Produit
- description: Affiche tous les formes que votre usine entière produit, en incluant les formes intermédiaires.
+ description: Affiche tous les formes que votre usine produit, en incluant les formes intermédiaires.
delivered:
title: Délivré
- description: Affiche les formes qui ont été livrées dans votre centre.
+ description: Affiche les formes qui ont été livrées dans votre bâtiment central.
noShapesProduced: Aucune forme n'a été produite jusqu'à présent.
# Displays the shapes per minute, e.g. '523 / m'
@@ -398,7 +399,7 @@ ingame:
Connectez l'extracteur avec un convoyeur vers votre centre !
Astuce: Cliquez et faites glisser le convoyeur avec votre souris !
1_3_expand: >-
- Ceci n'est PAS un jeu incrémental et inactif ! Construisez plus d'extracteurs et de convoyeurs pour atteindre plus vite votre votre but.
Astuce: Gardez SHIFT enfoncé pour placer plusieurs extracteurs, et utilisez R pour les faire pivoter.
+ Ceci n'est PAS un jeu incrémental et inactif ! Construisez plus d'extracteurs et de convoyeurs pour atteindre plus vite votre votre but.
Astuce: Gardez MAJ enfoncé pour placer plusieurs extracteurs, et utilisez R pour les faire pivoter.
colors:
red: Rouge
@@ -707,9 +708,9 @@ settings:
Affiche ou non le bouton 'Afficher un indice' dans le coin inférieur gauche.
language:
- title: Langage
+ title: Langue
description: >-
- Change le langage. Toutes les traductions sont des contributions des utilisateurs et pourraient être partiellement incomplètes !
+ Change la langue. Toutes les traductions sont des contributions des utilisateurs et pourraient être partiellement incomplètes !
movementSpeed:
title: Vitesse de déplacement
diff --git a/translations/base-hr.yaml b/translations/base-hr.yaml
index f870aa1a..5a221561 100644
--- a/translations/base-hr.yaml
+++ b/translations/base-hr.yaml
@@ -47,6 +47,7 @@
# + Rotator = Obrtač (jer mi Okretač zvuči nekako krivo)
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io je igra o izradi tvornica za automatizaciju stvaranja i spajanja sve složenijih oblika unutar beskonačno velike mape.
diff --git a/translations/base-hu.yaml b/translations/base-hu.yaml
index b1c1f456..bc5b727e 100644
--- a/translations/base-hu.yaml
+++ b/translations/base-hu.yaml
@@ -19,9 +19,13 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
- shortText: shapez.io is a game about building factories to automate the creation and combination of increasingly complex shapes within an infinite map.
+ shortText: A shapez.io-ban gyárak építésével kell automatizálni az egyre összetettebb alakzatok gyártását és kombinálását egy végtelen méretű térképen.
+
+ # This is the text shown above the Discord link
+ discordLink: Hivatalos Discord - Beszélgessünk!
# This is the long description for the steam page - It is contained here so you can help to translate it, and I will regulary update the store page.
# NOTICE:
@@ -30,79 +34,78 @@ steamPage:
longText: >-
[img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img]
- shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map.
- Upon delivering the requested shapes you will progress within the game and unlock upgrades to speed up your factory.
+ A shapez.io egy olyan játék, amelyben gyárak építésével kell automatizálni az egyre összetettebb alakzatok gyártását és összeillesztését, mindezt egy végtelenül növekvő térképen.
- As the demand for shapes increases, you will have to scale up your factory to meet the demand - Don't forget about resources though, you will have to expand across the [b]infinite map[/b]!
+ A kívánt alakzatok kézbesítése lehetővé teszi a játékban való előrehaladást, és a gyártási folyamatot felgyorsító fejlesztések feloldását.
- Soon you will have to mix colors and paint your shapes with them - Combine red, green and blue color resources to produce different colors and paint shapes with it to satisfy the demand.
+ Ahogy egyre több és több alakzatot kell kézbesíteni, úgy a gyártási folyamatot is fel kell skálázni - Ne feledkezz meg az erőforrásokról sem, egy [b]végtelen méretű térképen[/b] terjeszkedhetsz!
- This game features 18 progressive levels (Which should keep you busy for hours already!) but I'm constantly adding new content - There is a lot planned!
+ Előbb vagy utóbb színeket kell majd összekeverned és lefesteni az alakzatokat - Keverd össze a piros, töld és kék színeket, hogy új árnyalatokat hozz létre, és fesd le az alakzatokat velük, hogy teljesíteni tudd az elvárásokat.
- Purchasing the game gives you access to the standalone version which has additional features and you'll also receive access to newly developed features.
+ A játékban 18 fokozatosan erősödő szint található (ami már így is órákra le tud kötni!), de folyamatosan adok új tartalmakat hozzá - Nagyon sok tervem van!
- [b]Standalone Advantages[/b]
+ A játék megvásárlásával Tiéd lehet a teljes (önálló) verzió, amely még többet tartalmaz, és azonnal hozzáférsz a legfrissebb tartalmakhoz.
+
+ [b]Az Önálló Játék Előnyei[/b]
[list]
- [*] Dark Mode
- [*] Unlimited Waypoints
- [*] Unlimited Savegames
- [*] Additional settings
- [*] Coming soon: Wires & Energy! Aiming for (roughly) end of July 2020.
- [*] Coming soon: More Levels
- [*] Allows me to further develop shapez.io ❤️
+ [*] Éjszakai Mód
+ [*] Végtelen Útpontok
+ [*] Végtelen Játék Mentés
+ [*] Kiegészítő Beállítások
+ [*] Hamarosan: Vezetékek és Energia! A cél (nagyjából) 2020 Július vége.
+ [*] Hamarosan: További Szintek
+ [*] Lehetővé teszi, hogy tovább fejleszzem a shapez.io-t ❤️
[/list]
- [b]Future Updates[/b]
+ [b]Tervezett Frissítések[/b]
- I am updating the game very often and trying to push an update at least every week!
+ Nagyon gyakran frissítem a játékot, igyekszem minden héten egy új frissítést kiadni!
[list]
- [*] Different maps and challenges (e.g. maps with obstacles)
- [*] Puzzles (Deliver the requested shape with a restricted area / set of buildings)
- [*] A story mode where buildings have a cost
- [*] Configurable map generator (Configure resource/shape size/density, seed and more)
- [*] Additional types of shapes
- [*] Performance improvements (The game already runs pretty well!)
- [*] And much more!
+ [*] Különböző térképek és kihívások (pl. pályák akadályokkal)
+ [*] Fejtörők (Juttasd a célba a kívánt alakzatot egy korlátozott méretű területen / korlátozott darab épülettel)
+ [*] Sztori-mód, ahol az épületek pénzbe kerülnek
+ [*] Testreszabható térképgenerátor (Beállítható forrás/alakzat/sűrűség, seed és mások)
+ [*] További alakzattípusok
+ [*] Teljesítménybeli javítások (A játék már most nagyon jól fut!)
+ [*] És még sok más!
[/list]
- [b]This game is open source![/b]
+ [b]A játék nyílt forráskódú![/b]
- Anybody can contribute, I'm actively involved in the community and attempt to review all suggestions and take feedback into consideration where possible.
- Be sure to check out my trello board for the full roadmap!
+ Bárki közreműködhet. Aktív részese vagyok a közösségnek, és igyekszem minden javaslatot és visszajelzéset figyelembe venni.
+ Mindenképpen látogass el a Trello-mra a teljes ütemtervért!
- [b]Links[/b]
+ [b]Linkek[/b]
[list]
- [*] [url=https://discord.com/invite/HN7EVzV]Official Discord[/url]
- [*] [url=https://trello.com/b/ISQncpJP/shapezio]Roadmap[/url]
+ [*] [url=https://discord.com/invite/HN7EVzV]Hivatalos Discord[/url]
+ [*] [url=https://trello.com/b/ISQncpJP/shapezio]Ütemterv[/url]
[*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url]
- [*] [url=https://github.com/tobspr/shapez.io]Source code (GitHub)[/url]
- [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Help translate[/url]
+ [*] [url=https://github.com/tobspr/shapez.io]Forráskód (GitHub)[/url]
+ [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Segíts lefordítani[/url]
[/list]
- discordLink: Official Discord - Chat with me!
-
global:
loading: Betöltés
error: Hiba
# How big numbers are rendered, e.g. "10,000"
- thousandsDivider: ","
+ thousandsDivider: "."
# What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4"
- decimalSeparator: "."
+ decimalSeparator: ","
# The suffix for large numbers, e.g. 1.3k, 400.2M, etc.
suffix:
- thousands: E
+ thousands: e
millions: M
- billions: Mlrd
- trillions: T
+ billions: Mrd
+ trillions: Tr
# Shown for infinitely big numbers
- infinite: inf
+ infinite: végtelen
time:
# Used for formatting past time dates
@@ -132,48 +135,47 @@ global:
demoBanners:
# This is the "advertisement" shown in the main menu and other various places
- title: Demó verzi
+ title: Demó verzió
intro: >-
- Get the standalone to unlock all features!
+ Vásárold meg az önálló verziót a teljes játékélményért!
mainMenu:
play: Játék
- changelog: Changelog
+ continue: Folytatás
+ newGame: Új Játék
+ changelog: Változások
+ subreddit: Reddit
importSavegame: Importálás
openSourceHint: Ez a játék nyílt forráskódú!
discordLink: Hivatalos Discord Szerver
- helpTranslate: Segíts a fordításban!
+ helpTranslate: Segíts fordítani!
+ madeBy: Készítette
# This is shown when using firefox and other browsers which are not supported.
browserWarning: >-
- Sorry, but the game is known to run slow on your browser! Get the standalone version or download chrome for the full experience.
+ Elnézést, de a játék ezen a böngészőn problémásan fut. Vásárold meg az Önálló Verziót, vagy töltsd le a Chrome-ot a teljes játékélményért.
savegameLevel: . szint
savegameLevelUnknown: Ismeretlen szint
- continue: Continue
- newGame: New Game
- madeBy: Made by
- subreddit: Reddit
-
dialogs:
buttons:
ok: OK
delete: Törlés
- cancel: Megszakítás
+ cancel: Mégse
later: Később
restart: Újrakezdés
reset: Visszaállítás
- getStandalone: Get Standalone
- deleteGame: Tudom mit csinálok
- viewUpdate: View Update
- showUpgrades: Show Upgrades
- showKeybindings: Show Keybindings
+ getStandalone: Teljes Verzió
+ deleteGame: Játék Törlése
+ viewUpdate: Frissítés Megtekintése
+ showUpgrades: Fejlesztések
+ showKeybindings: Irányítás
importSavegameError:
title: Importálás Hiba
text: >-
- Failed to import your savegame: Nem sikerült importálni a mentésed.
+ Nem sikerült importálni a mentésed:
importSavegameSuccess:
title: Mentés Importálva
@@ -181,19 +183,19 @@ dialogs:
A mentésed sikeresen importálva lett.
gameLoadFailure:
- title: Game is broken
+ title: A játék elromlott
text: >-
- Failed to load your savegame: Nem sikerült betölteni a mentésed
+ Nem sikerült betölteni a mentésed:
confirmSavegameDelete:
- title: Confirm deletion
+ title: Törlés megerősítése
text: >-
Biztos, hogy ki akarod törölni?
savegameDeletionError:
title: Sikertelen törlés
text: >-
- Failed to delete the savegame: Nem sikerült törölni a mentésed.
+ Nem sikerült törölni a mentésed:
restartRequired:
title: Újraindítás szükséges
@@ -201,135 +203,146 @@ dialogs:
Újra kell indítanod a játékot, hogy életbe lépjenek a módosítások.
editKeybinding:
- title: Change Keybinding
- desc: Press the key or mouse button you want to assign, or escape to cancel.
+ title: Gyorsbillentyű módosítása
+ desc: Nyomd meg a billentyűt vagy egérgombot, amit használni szeretnél, vagy nyomj ESC-et, ha mégse.
resetKeybindingsConfirmation:
- title: Reset keybindings
- desc: This will reset all keybindings to their default values. Please confirm.
+ title: Gyorsbillentyűk visszaállítása
+ desc: Ez minden gyorsbillentyűt visszaállít az eredeti állapotára. Biztos vagy benne?
keybindingsResetOk:
- title: Keybindings reset
- desc: The keybindings have been reset to their respective defaults!
+ title: Gyorsbillentyűk visszaállítva
+ desc: A gyorsbillentyűk az eredeti értékekre visszaállítva!
featureRestriction:
- title: Demo Version
- desc: You tried to access a feature () which is not available in the demo. Consider to get the standalone for the full experience!
+ title: Demó Verzió
+ desc: Egy olyan funkciót próbáltál elérni (), amely nem elérhető a Demóban. Vásárold meg an Önálló verziót a teljes játékélményért!
oneSavegameLimit:
- title: Limited savegames
- desc: You can only have one savegame at a time in the demo version. Please remove the existing one or get the standalone!
+ title: Egy Játékmentés
+ desc: A Demó verzióban egyszerre csak egy játékmentésed lehet. Töröld a meglévő mentésedet, vagy vásárold meg az Önálló verziót!
updateSummary:
title: Új frissítés!
desc: >-
- Here are the changes since you last played:
+ Íme a változások a legutóbbi játékod óta:
upgradesIntroduction:
- title: Unlock Upgrades
+ title: Szerezz Fejlesztéseket
desc: >-
- All shapes you produce can be used to unlock upgrades - Don't destroy your old factories!
- The upgrades tab can be found on the top right corner of the screen.
+ Minden legyártott alakzatot felhasználhatsz a fejlesztésekhez - Ne töröld ki a régi gyáraidat!
+ A Fejlesztések lap a képernyő jobb felső sarkában található.
massDeleteConfirm:
- title: Confirm delete
+ title: Törlés megerősítése
desc: >-
- You are deleting a lot of buildings ( to be exact)! Are you sure you want to do this?
+ Egy csomó épületet akarsz egyszerre törölni (egészen pontosan -t)! Biztos, hogy ezt szeretnéd?
+
+ massCutConfirm:
+ title: Biztosan kivágod?
+ desc: >-
+ Egy csomó épületet akarsz egyszerre kivágni (egészen pontosan -t)! Biztos, hogy ezt szeretnéd?
+
+ massCutInsufficientConfirm:
+ title: Kivágás megerősítése
+ desc: Nincs elég Tervrajzod ennek a beillsztéséhez! Egészen biztos, hogy kivágod?
blueprintsNotUnlocked:
title: Még nincs feloldva
desc: >-
- Blueprints have not been unlocked yet! Complete more levels to unlock them.
+ A Tervrajzokat a 12-es szinten fogod feloldani.
keybindingsIntroduction:
- title: Useful keybindings
+ title: Hasznos billentyűk
desc: >-
- This game has a lot of keybindings which make it easier to build big factories.
- Here are a few, but be sure to check out the keybindings!
- CTRL
+ Drag: Select area to copy / delete.
- SHIFT
: Hold to place multiple of one building.
- ALT
: Invert orientation of placed belts.
+ A játék sok hasznos gyorsbillentyűt tartalmaz, amelyek megkönnyítik a gyárépítést.
+ Íme, néhány, de feltétlenül nézd meg a gyorsbillentyűket!
+ CTRL
+ Húzás: Terület kijelölése másolás/törléshez.
+ SHIFT
: Egyszerre több épületet rak le.
+ ALT
: Megfordítja a futószalagok irányát lehelyezéskor.
createMarker:
- title: New Marker
- desc: Give it a meaningful name, you can also include a short key of a shape (Which you can generate here)
- titleEdit: Edit Marker
+ title: Új Jelölő
+ desc: Adj neki egy nevet, vagy egy alakzat gyorskódját (amit itt tudsz legenerálni)
+ titleEdit: Jelölő Szerkesztése
markerDemoLimit:
- desc: You can only create two custom markers in the demo. Get the standalone for unlimited markers!
- massCutConfirm:
- title: Confirm cut
- desc: >-
- You are cutting a lot of buildings ( to be exact)! Are you sure you
- want to do this?
+ desc: A Demó verzióban csak két Jelölőd lehet. Vásárold meg az Önálló verziót, hogy feloldd ezt a korlátozást!
exportScreenshotWarning:
- title: Export screenshot
+ title: Képernyőkép exportálása
desc: >-
- You requested to export your base as a screenshot. Please note that this can
- be quite slow for a big base and even crash your game!
-
- massCutInsufficientConfirm:
- title: Confirm cut
- desc: You can not afford to paste this area! Are you sure you want to cut it?
+ A teljes bázisod képének lementését választottad. Vedd figyelembe, hogy ez nagy méretű bázisoknál igen lassú lehet, de akár a játék összeomlását is okozhatja!
ingame:
# This is shown in the top left corner and displays useful keybindings in
# every situation
keybindingsOverlay:
- moveMap: Move
+ moveMap: Mozgatás
selectBuildings: Terület kijelölése
- stopPlacement: Stop placement
+ stopPlacement: Lehelyezés megszakítása
rotateBuilding: Épület forgatása
- placeMultiple: Place multiple
- reverseOrientation: Reverse orientation
- disableAutoOrientation: Disable auto orientation
- toggleHud: Toggle HUD
- placeBuilding: Place building
- createMarker: Create Marker
- delete: Destroy
- pasteLastBlueprint: Paste last blueprint
- lockBeltDirection: Enable belt planner
- plannerSwitchSide: Flip planner side
- cutSelection: Cut
- copySelection: Copy
- clearSelection: Clear Selection
- pipette: Pipette
- switchLayers: Switch layers
+ placeMultiple: Több lehelyezése
+ reverseOrientation: Irány megfordítása
+ disableAutoOrientation: Automatikus iránykeresés kikapcsolása
+ toggleHud: Kezelőfelület ki/bekapcsolása
+ placeBuilding: Épület lehelyezése
+ createMarker: Jelölő készítése
+ delete: Törlés
+ pasteLastBlueprint: Legutóbb használt Tervrajz beillesztése
+ lockBeltDirection: Futószalag-tervező engedélyezése
+ plannerSwitchSide: Tervező oldal váltás
+ cutSelection: Kivágás
+ copySelection: Másolás
+ clearSelection: Kijelölés megszüntetése
+ pipette: Pipetta
+ switchLayers: Réteg váltás
+
+ # Names of the colors, used for the color blind mode
+ colors:
+ red: Piros
+ green: Zöld
+ blue: Kék
+ yellow: Sárga
+ purple: Lila
+ cyan: Világoskék
+ white: Fehér
+ black: Fekete
+ uncolored: Színezetlen
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
buildingPlacement:
# Buildings can have different variants which are unlocked at later levels,
# and this is the hint shown when there are multiple variants available.
- cycleBuildingVariants: Nyomd meg a -t, hogy válts a variációk között.
+ cycleBuildingVariants: Nyomd meg a -t, a variációk váltogatásához.
# Shows the hotkey in the ui, e.g. "Hotkey: Q"
hotkeyLabel: >-
- Hotkey:
+ Gyorsbillentyű:
infoTexts:
- speed: Gyorsaság
- range: Range
- storage: Storage
+ speed: Sebesség
+ range: Távolság
+ storage: Kapacitás
oneItemPerSecond: 1 tárgy / mp
itemsPerSecond: tárgy / mp
itemsPerSecondDouble: (x2)
- tiles: tiles
+ tiles: csempe
# The notification when completing a level
levelCompleteNotification:
# is replaced by the actual level, so this gets 'Level 03' for example.
- levelTitle: . szint
- completed: Completed
- unlockText: Feloldva !
+ levelTitle: . Szint
+ completed: Teljesítve
+ unlockText: Feloldva!
buttonNextLevel: Következő Szint
# Notifications on the lower right
notifications:
newUpgrade: Egy új fejlesztés elérhető!
- gameSaved: A játékod el lett mentve.
+ gameSaved: A játékállás mentve.
# The "Upgrades" window
shop:
@@ -337,12 +350,12 @@ ingame:
buttonUnlock: Fejlesztés
# Gets replaced to e.g. "Tier IX"
- tier: Tier
+ tier: . Szint
# The roman number for each tier
tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X]
- maximumLevel: MAXIMUM LEVEL (Speed x)
+ maximumLevel: LEGMAGASABB SZINT (x Sebesség)
# The "Statistics" window
statistics:
@@ -350,14 +363,14 @@ ingame:
dataSources:
stored:
title: Tárolva
- description: Displaying amount of stored shapes in your central building.
+ description: Az összes tárolt alakzatod a központi épületben.
produced:
title: Gyártva
- description: Displaying all shapes your whole factory produces, including intermediate products.
+ description: Az összes eddig legyártott alakzatod, beleértve a köztes alakzatokat is.
delivered:
- title: Delivered
- description: Displaying shapes which are delivered to your central building.
- noShapesProduced: No shapes have been produced so far.
+ title: Beszállítva
+ description: Az összes alakzat, amely jelenleg kézbesítés alatt van a központba.
+ noShapesProduced: Még nem gyártottál egy alazkatot sem.
# Displays the shapes per minute, e.g. '523 / m'
shapesPerMinute: / p
@@ -366,8 +379,8 @@ ingame:
settingsMenu:
playtime: Játékidő
- buildingsPlaced: Épület
- beltsPlaced: Futószalag
+ buildingsPlaced: Épületek száma
+ beltsPlaced: Futószalagok hossza
buttons:
continue: Folytatás
@@ -386,163 +399,169 @@ ingame:
# Map markers
waypoints:
- waypoints: Markers
- hub: HUB
- description: Left-click a marker to jump to it, right-click to delete it.
Press to create a marker from the current view, or right-click to create a marker at the selected location.
- creationSuccessNotification: Marker has been created.
+ waypoints: Jelölők
+ hub: KÖZPONT
+ description: Bal klikk egy jelölőre az odaugráshoz, jobb klikk a törléshez.
Nyomj -t egy jelölő készítéséhez a jelenlegi nézetből, vagy jobb klikk egy jelölő készítéséhez a kiválasztott helyre.
+ creationSuccessNotification: Jelölő létrehozva.
+
+ # Shape viewer
+ shapeViewer:
+ title: Rétegek
+ empty: Üres
+ copyKey: Gyorskód másolása
# Interactive tutorial
interactiveTutorial:
- title: Tutorial
+ title: Oktatás
hints:
- 1_1_extractor: Place an extractor on top of a circle shape to extract it!
+ 1_1_extractor: Helyezz egy bányát egy kör alakzat tetejére a kibányászásához!
1_2_conveyor: >-
- Connect the extractor with a conveyor belt to your hub!
Tip: Click and drag the belt with your mouse!
+ Kösd össze a bányát egy futószalag segítségével a Központi épülettel!
Tipp: Kattints és húzd a futószalagot az egérrel!
1_3_expand: >-
- This is NOT an idle game! Build more extractors and belts to finish the goal quicker.
Tip: Hold SHIFT to place multiple extractors, and use R to rotate them.
-
- colors:
- red: Red
- green: Green
- blue: Blue
- yellow: Yellow
- purple: Purple
- cyan: Cyan
- white: White
- uncolored: No color
- black: Black
- shapeViewer:
- title: Layers
- empty: Empty
- copyKey: Copy Key
+ Ez NEM egy tétlen játék! Építs több bányát és futószalagot, hogy hamarabb elérd a célt.
Tipp: Tartsd lenyomva a SHIFT-et, hogy egyszerre több bányát helyezz le, és nyomj R-t a forgatáshoz.
# All shop upgrades
shopUpgrades:
belt:
- name: Belts, Distributor & Tunnels
- description: Speed x → x
+ name: Futószalagok, Elosztók & Alagutak
+ description: x → x Sebesség
miner:
- name: Extraction
- description: Speed x → x
+ name: Bányászat
+ description: x → x Sebesség
processors:
- name: Cutting, Rotating & Stacking
- description: Speed x → x
+ name: Vágás, Forgatás & Összeillesztés
+ description: x → x Sebesség
painting:
- name: Mixing & Painting
- description: Speed x → x
+ name: Keverés & Festés
+ description: x → x Sebesség
# Buildings and their name / description
buildings:
- belt:
- default:
- name: &belt Conveyor Belt
- description: Transports items, hold and drag to place multiple.
-
- miner: # Internal name for the Extractor
- default:
- name: &miner Extractor
- description: Place over a shape or color to extract it.
-
- chainable:
- name: Extractor (Chain)
- description: Place over a shape or color to extract it. Can be chained.
-
- underground_belt: # Internal name for the Tunnel
- default:
- name: &underground_belt Tunnel
- description: Allows to tunnel resources under buildings and belts.
-
- tier2:
- name: Tunnel Tier II
- description: Allows to tunnel resources under buildings and belts.
-
- splitter: # Internal name for the Balancer
- default:
- name: &splitter Balancer
- description: Multifunctional - Evenly distributes all inputs onto all outputs.
-
- compact:
- name: Merger (compact)
- description: Merges two conveyor belts into one.
-
- compact-inverse:
- name: Merger (compact)
- description: Merges two conveyor belts into one.
-
- cutter:
- default:
- name: &cutter Cutter
- description: Cuts shapes from top to bottom and outputs both halfs. If you use only one part, be sure to destroy the other part or it will stall!
- quad:
- name: Cutter (Quad)
- description: Cuts shapes into four parts. If you use only one part, be sure to destroy the other part or it will stall!
-
- rotater:
- default:
- name: &rotater Rotate
- description: Rotates shapes clockwise by 90 degrees.
- ccw:
- name: Rotate (CCW)
- description: Rotates shapes counter clockwise by 90 degrees.
- fl:
- name: Rotate (180)
- description: Rotates shapes by 180 degrees.
-
- stacker:
- default:
- name: &stacker Stacker
- description: Stacks both items. If they can not be merged, the right item is placed above the left item.
-
- mixer:
- default:
- name: &mixer Color Mixer
- description: Mixes two colors using additive blending.
-
- painter:
- default:
- name: &painter Painter
- description: &painter_desc Colors the whole shape on the left input with the color from the right input.
- double:
- name: Painter (Double)
- description: Colors the shapes on the left inputs with the color from the top input.
- quad:
- name: Painter (Quad)
- description: Allows to color each quadrant of the shape with a different color.
- mirrored:
- name: *painter
- description: *painter_desc
-
- trash:
- default:
- name: &trash Trash
- description: Accepts inputs from all sides and destroys them. Forever.
-
- storage:
- name: Storage
- description: Stores excess items, up to a given capacity. Can be used as an overflow gate.
hub:
deliver: Deliver
toUnlock: to unlock
levelShortcut: LVL
+
+ belt:
+ default:
+ name: &belt Futószalag
+ description: Elemeket szállít, tartsd nyomva az egérgombot egyszerre több lerakásához.
+
wire:
default:
- name: Energy Wire
+ name: &wire Energy Wire
description: Allows you to transport energy.
+
+ # Internal name for the Extractor
+ miner:
+ default:
+ name: &miner Bányász
+ description: Tedd egy alakzatra vagy színre a kibányászásához.
+
+ chainable:
+ name: Bányász (összekapcsolható)
+ description: Tedd egy alakzatra vagy színre a kibányászásához. Több egymáshoz kapcsolható.
+
+ # Internal name for the Tunnel
+ underground_belt:
+ default:
+ name: &underground_belt Alagút
+ description: Segítségével futószalagok és épületek alatt átvezethetők az elemek.
+
+ tier2:
+ name: Alagút II
+ description: Segítségével futószalagok és épületek alatt átvezethetők az elemek.
+
+ # Internal name for the Balancer
+ splitter:
+ default:
+ name: &splitter Elosztó
+ description: Többfunkciós - Egyenletesen szétosztja a bementeket a kimenetekre.
+
+ compact:
+ name: Egyesítő (kompakt)
+ description: Két futószalagot egyesít.
+
+ compact-inverse:
+ name: Egyesítő (kompakt)
+ description: Két futószalagot egyesít.
+
+ cutter:
+ default:
+ name: &cutter Vágó
+ description: Függőlegesen félbevágja az alakzatokat. Ha csak az egyik felet akarod használni, ne felejtsd el a másikat kukába küldeni, különben eldugítja!
+ quad:
+ name: Vágó (negyedelő)
+ description: Négyfelé vágja az alakzatokat. Cuts shapes into four parts. Ha csak az egyik felet akarod használni, ne felejtsd el a többit a kukába küldeni, különben eldugítja!
+
advanced_processor:
default:
- name: Color Inverter
+ name: &advanced_processor Color Inverter
description: Accepts a color or shape and inverts it.
+
+ rotater:
+ default:
+ name: &rotater Forgató
+ description: Elforgatja az alakzatot óramutató irányában 90 fokkal.
+ ccw:
+ name: Forgató (fordított)
+ description: Elforgatja az alakzatot óramutatóval ellentétesen 90 fokkal.
+ fl:
+ name: Forgató (180)
+ description: Elforgatja az alakzatot 180 fokkal.
+
+ stacker:
+ default:
+ name: &stacker Egyesítő
+ description: Egyesít két elemet. Ha nem lehet összeilleszteni őket, a jobboldali elem a baloldali tetejére kerül.
+
+ mixer:
+ default:
+ name: &mixer Színkeverő
+ description: Összekever két színt összeadó színkeveréssel.
+
+ painter:
+ default:
+ name: &painter Festő
+ description: &painter_desc Beszínezi az alakzatot a baloldali bemeneten a jobboldali bemeneten érkező színnel.
+
+ mirrored:
+ name: *painter
+ description: *painter_desc
+
+ double:
+ name: Festő (Dupla)
+ description: Beszínezi az alakzatokat a baloldali bemeneteken a fenti bemeneten érkező színnel.
+
+ quad:
+ name: Festő (Négyszeres)
+ description: Az alakzat négy negyedét különböző színekkel lehet vele színezni.
+
+ trash:
+ default:
+ name: &trash Kuka
+ description: Bármelyik irányból lehet hozzá csatlakozni, és megsemmisíti a beleküldött elemeket. Örökre.
+
+ storage:
+ name: Tároló
+ description: Tárolja a fölös elemeket egy bizonyos kapacitásig.
+
energy_generator:
deliver: Deliver
+
+ # This will be shown before the amount, so for example 'For 123 Energy'
toGenerateEnergy: For
+
default:
- name: Energy Generator
+ name: &energy_generator Energy Generator
description: Generates energy by consuming shapes.
+
wire_crossings:
default:
- name: Wire Splitter
+ name: &wire_crossings Wire Splitter
description: Splits a energy wire into two.
+
merger:
name: Wire Merger
description: Merges two energy wires into one.
diff --git a/translations/base-ind.yaml b/translations/base-ind.yaml
index 781e55a9..3f7ee113 100644
--- a/translations/base-ind.yaml
+++ b/translations/base-ind.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map.
diff --git a/translations/base-it.yaml b/translations/base-it.yaml
index c8431c68..df45601e 100644
--- a/translations/base-it.yaml
+++ b/translations/base-it.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: In shapez.io potrai costruire delle fabbriche per automatizzare la creazione e la combinazione di forme sempre più complesse, in una mappa infinita.
diff --git a/translations/base-ja.yaml b/translations/base-ja.yaml
index edfc7219..cdb56104 100644
--- a/translations/base-ja.yaml
+++ b/translations/base-ja.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.ioは無限のマップ内で様々な"形"を資源とし、段々と複雑になっていく形の作成や合成の自動化を目指して工場を構築するゲームです。
@@ -411,7 +412,7 @@ ingame:
cyan: シアン
white: 白
uncolored: 無色
- black: Black
+ black: 黒
shapeViewer:
title: レイヤー
empty: 空
@@ -491,8 +492,8 @@ buildings:
name: 回転機 (逆)
description: 形を反時計回り方向に90度回転します。
fl:
- name: Rotate (180)
- description: Rotates shapes by 180 degrees.
+ name: 回転機 (180)
+ description: 形を180度回転します。
stacker:
default:
@@ -533,20 +534,20 @@ buildings:
advanced_processor:
default:
name: Color Inverter
- description: Accepts a color or shape and inverts it.
+ description: 入力された色や形の色を反転します。
energy_generator:
deliver: Deliver
toGenerateEnergy: For
default:
- name: Energy Generator
- description: Generates energy by consuming shapes.
+ name: エネルギー発電機
+ description: 入力された形を使って、エネルギーを発電します。
wire_crossings:
default:
- name: Wire Splitter
- description: Splits a energy wire into two.
+ name: ワイヤー分配機
+ description: 1つのワイヤーを2つのワイヤーに分配します。
merger:
- name: Wire Merger
- description: Merges two energy wires into one.
+ name: ワイヤー合流機
+ description: 2つのワイヤーを1つのワイヤーに合流します。
storyRewards:
# Those are the rewards gained from completing the store
diff --git a/translations/base-kor.yaml b/translations/base-kor.yaml
index 899507e1..26f85da9 100644
--- a/translations/base-kor.yaml
+++ b/translations/base-kor.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io는 무한한 공간에서 점점 더 복잡한 도형의 생산과 조합을 자동화하는 공장을 짓는 게임입니다.
diff --git a/translations/base-lt.yaml b/translations/base-lt.yaml
index 122dd3cc..79a450bf 100644
--- a/translations/base-lt.yaml
+++ b/translations/base-lt.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io is a game about building factories to automate the creation and combination of increasingly complex shapes within an infinite map.
diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml
index 8b29e557..2f061268 100644
--- a/translations/base-nl.yaml
+++ b/translations/base-nl.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io is een spel dat draait om het bouwen van fabrieken voor het produceren en automatiseren van steeds complexere vormen in een oneindig groot speelveld.
diff --git a/translations/base-no.yaml b/translations/base-no.yaml
index 0d91bcd4..90568fdd 100644
--- a/translations/base-no.yaml
+++ b/translations/base-no.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io er et spill som handler om å bygge fabrikker for å automatisere produksjon og kombinasjon av former med økende kompleksitet på et uendelig ekspanderende brett.
diff --git a/translations/base-pl.yaml b/translations/base-pl.yaml
index b09895f6..ae930721 100644
--- a/translations/base-pl.yaml
+++ b/translations/base-pl.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io to gra polegająca na budowaniu fabryki automatyzującej tworzenie i łączenie ze sobą coraz bardziej skomplikowanych kształtów na mapie, która nie ma końca.
diff --git a/translations/base-pt-BR.yaml b/translations/base-pt-BR.yaml
index 14af1915..bf269558 100644
--- a/translations/base-pt-BR.yaml
+++ b/translations/base-pt-BR.yaml
@@ -19,10 +19,14 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io é um jogo sobre construir fábricas, automatizando a criação e combinação de formas cada vez mais complexas num mapa infinito.
+ # This is the text shown above the Discord link
+ discordLink: Discord Oficial - Converse comigo!
+
# This is the long description for the steam page - It is contained here so you can help to translate it, and I will regulary update the store page.
# NOTICE:
# - Do not translate the first line (This is the gif image at the start of the store)
@@ -31,6 +35,7 @@ steamPage:
[img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img]
shapez.io é um jogo sobre construir fábricas, automatizando a criação e combinação de formas cada vez mais complexas num mapa infinito.
+
Após a entrega das formas requisitadas você progredirá no jogo e desbloqueará melhorias para acelerar sua fábrica.
Conforme sua demanda por formas aumenta, você irá que aumentar sua fábrica para alcançar-la - Mas não se esqueça dos recursos, você precisará expandir pelo [b]mapa infinito[/b]!
@@ -82,8 +87,6 @@ steamPage:
[*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Ajude a traduzir[/url]
[/list]
- discordLink: Discord Oficial - Converse comigo!
-
global:
loading: Carregando
error: Erro
@@ -134,14 +137,19 @@ demoBanners:
# This is the "advertisement" shown in the main menu and other various places
title: Versão Demo
intro: >-
- Pegue a versão completa para desbloquear todas os recursos
+ Pegue a versão completa para desbloquear todas os recursos!
mainMenu:
play: Jogar
+ continue: Continuar
+ newGame: Novo jogo
changelog: Changelog
+ subreddit: Reddit
importSavegame: Importar
openSourceHint: Esse jogo tem código aberto!
discordLink: Discord oficial
+ helpTranslate: Ajude a traduzir!
+ madeBy: Feito por
# This is shown when using firefox and other browsers which are not supported.
browserWarning: >-
@@ -150,12 +158,6 @@ mainMenu:
savegameLevel: Nível
savegameLevelUnknown: Nível desconhecido
- helpTranslate: Ajude a traduzir!
- continue: Continuar
- newGame: Novo jogo
- madeBy: Feito por
- subreddit: Reddit
-
dialogs:
buttons:
ok: OK
@@ -163,11 +165,11 @@ dialogs:
cancel: Cancelar
later: Voltar
restart: Reiniciar
- reset: Reset
+ reset: Resetar
getStandalone: Obter versão completa
deleteGame: Sei o que estou fazendo
viewUpdate: Atualizações
- showUpgrades: Ver melhorias
+ showUpgrades: Melhorias
showKeybindings: Controles
importSavegameError:
@@ -198,7 +200,7 @@ dialogs:
restartRequired:
title: Ação necessária
text: >-
- Voce precisa reiniciar o jogo para aplicar as mudanças.
+ Você precisa reiniciar o jogo para aplicar as mudanças.
editKeybinding:
title: Alterar tecla
@@ -228,7 +230,7 @@ dialogs:
upgradesIntroduction:
title: Desbloquear melhorias
desc: >-
- Todas as formas que você produz podem ser usadas para desbloquear melhorias - Não destrua suas antigas fábricas!!
+ Todas as formas que você produz podem ser usadas para desbloquear melhorias - Não destrua suas antigas fábricas!!
O guia de melhorias pode ser encontrado no canto superior direito da tela.
massDeleteConfirm:
@@ -236,6 +238,16 @@ dialogs:
desc: >-
Você está deletando vários objetos ( para ser exato)! Você quer continuar?
+ massCutConfirm:
+ title: Confirmar corte
+ desc: >-
+ Você está cortando vários objetos ( para ser exato)! Você quer continuar?
+
+ massCutInsufficientConfirm:
+ title: Confirmar Corte
+ desc: >-
+ You can not afford to paste this area! Are you sure you want to cut it?
+
blueprintsNotUnlocked:
title: Não desbloqueado ainda
desc: >-
@@ -245,42 +257,31 @@ dialogs:
title: Teclas úteis
desc: >-
Este jogo possui muitas combinações de teclas que facilitam a construção de grandes fábricas
- Aqui estão algumas, certifique-se de verificar as combinações de teclas !
+ Aqui estão algumas, certifique-se de verificar as combinações de teclas!
CTRL
+ Arrastar: Seleciona área para copiar/deletar.
SHIFT
: Mantenha pressionado para colocar várias construções.
ALT
: Inverte as posições.
createMarker:
title: Nova Marcação
- desc: Dê um nome com significado, também pode adicionar um pequeno código de uma forma. (Pode ser gerado aqui)
titleEdit: Editar Marcador
+ desc: Dê um nome com significado, também pode adicionar um pequeno código de uma forma. (Pode ser gerado aqui)
markerDemoLimit:
- desc: >-
- Você só pode criar dois marcadores na versão demo. Adquira a versão completa para marcadores ilimitados!
-
- massCutConfirm:
- title: Confirmar corte
- desc: >-
- Você está cortando vários objetos ( para ser exato)! Você quer continuar?
+ desc: Você só pode criar dois marcadores na versão demo. Adquira a versão completa para marcadores ilimitados!
exportScreenshotWarning:
title: Exportar captura de tela
- desc: >-
- Você está prestes a exportar uma captura de tela da sua base. Note que isso pode ser bastante lento para uma base grande, e até mesmo pode travar o jogo!
-
- massCutInsufficientConfirm:
- title: Confirmar Corte
- desc: You can not afford to paste this area! Are you sure you want to cut it?
+ desc: Você está prestes a exportar uma captura de tela da sua base. Note que isso pode ser bastante lento para uma base grande, e até mesmo pode travar o jogo!
ingame:
# This is shown in the top left corner and displays useful keybindings in
# every situation
keybindingsOverlay:
moveMap: Mover
-
+ selectBuildings: Selecionar área
stopPlacement: Parar
- rotateBuilding: Rotação
+ rotateBuilding: Rotacionar
placeMultiple: Colocar vários
reverseOrientation: Inverter orientação
disableAutoOrientation: Desligar orientação automática
@@ -288,17 +289,27 @@ ingame:
placeBuilding: Construir objeto
createMarker: Criar marcador
delete: Destruir
- selectBuildings: Selecionar área
pasteLastBlueprint: Colar último projeto
-
lockBeltDirection: Ativar Planejador de Esteiras
- plannerSwitchSide: Flip planner side
+ plannerSwitchSide: Girar Planejador
cutSelection: Cortar
copySelection: Copiar
clearSelection: Limpar Seleção
pipette: Conta-Gotas
switchLayers: Trocar Camadas
+ # Names of the colors, used for the color blind mode
+ colors:
+ red: Vermelho
+ green: Verde
+ blue: Azul
+ yellow: Amarelo
+ purple: Roxo
+ cyan: Ciano
+ white: Branco
+ black: Preto
+ uncolored: Sem cor
+
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
buildingPlacement:
@@ -324,7 +335,7 @@ ingame:
levelCompleteNotification:
# is replaced by the actual level, so this gets 'Level 03' for example.
levelTitle: Nível
- completed: Completado
+ completed: Concluído
unlockText: Desbloqueado !
buttonNextLevel: Próximo Nível
@@ -336,13 +347,14 @@ ingame:
# The "Upgrades" window
shop:
title: Melhorias
- buttonUnlock: Comprar
+ buttonUnlock: Melhorar
# Gets replaced to e.g. "Tier IX"
tier: Nível
# The roman number for each tier
tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X]
+
maximumLevel: NÍVEL MÁXIMO (Velocidade x)
# The "Statistics" window
@@ -389,60 +401,58 @@ ingame:
waypoints:
waypoints: Marcadores
hub: HUB
- description: Clique com o botão esquerdo do mouse em um marcador para pular, clique com o botão direito do mouse para excluí-lo.
Pressione para criar um marcador a partir da exibição atual ou clique com o botão direito do mouse para criar um marcador no local selecionado.
+ description: Clique com o botão esquerdo do mouse em um marcador para pular, clique com o botão direito do mouse para excluí-lo.
Pressione para criar um marcador a partir da exibição atual ou clique com o botão direito do mouse para criar um marcador no local selecionado.
creationSuccessNotification: Marcador criado.
- # Interactive tutorial
- interactiveTutorial:
- title: Tutorial
- hints:
- 1_1_extractor: Coloque um extrator em cima de uma fonte de círculo para extraí-lo!
- 1_2_conveyor: >-
- Conecte o extrator com uma esteira transportadora até a sua base!
Dica, clique e arraste a esteira com o mouse!
-
- 1_3_expand: >-
- Este NÃO é um jogo inativo! Construa mais extratores e esteiras para concluir o objetivo mais rapidamente.
Dica, segure SHIFT para colocar vários extratores e use R para girá-los.
-
- colors:
- red: Vermelho
- green: Verde
- blue: Azul
- yellow: Amarelo
- purple: Roxo
- cyan: Ciano
- white: Branco
- black: Preto
- uncolored: Sem cor
+ # Shape viewer
shapeViewer:
title: Camadas
empty: Vazio
copyKey: Copiar Chave
+ # Interactive tutorial
+ interactiveTutorial:
+ title: Tutorial
+ hints:
+ 1_1_extractor: Coloque um extrator em cima de uma fonte de círculo para extraí-lo!
+ 1_2_conveyor: >-
+ Conecte o extrator com uma esteira transportadora até a sua base!
Dica, clique e arraste a esteira com o mouse!
+
+ 1_3_expand: >-
+ Este NÃO é um jogo inativo! Construa mais extratores e esteiras para concluir o objetivo mais rapidamente.
Dica, segure SHIFT para colocar vários extratores e use R para girá-los.
+
# All shop upgrades
shopUpgrades:
belt:
name: Esteiras, Distribuidores e Túneis
description: Velocidade x → x
-
miner:
name: Extração
description: Velocidade x → x
-
processors:
- name: Corte, Rotação & Montagem
+ name: Corte, Rotação e Montagem
description: Velocidade x → x
-
painting:
- name: Mistura & Pintura
+ name: Mistura e Pintura
description: Velocidade x → x
# Buildings and their name / description
buildings:
+ hub:
+ deliver: Entregue
+ toUnlock: para desbloquear
+ levelShortcut: LVL
+
belt:
default:
name: &belt Esteira Transportadora
description: Transporta itens; mantenha pressionado e arraste para colocar vários.
+ wire:
+ default:
+ name: &wire Fio de Energia
+ description: Permite transportar energia.
+
miner: # Internal name for the Extractor
default:
name: &miner Extrator
@@ -477,10 +487,15 @@ buildings:
cutter:
default:
name: &cutter Cortador
- description: Corta as formas verticalmente e produz as duas metades. Se você usar apenas uma parte, não se esqueça de destruir a outra parte, ou ela irá parar a produção!
+ description: Corta as formas verticalmente e produz as duas metades. Se você usar apenas uma parte, não se esqueça de destruir a outra parte, ou ela irá parar a produção!
quad:
name: Cortador (Quádruplo)
- description: Corta as formas em quatro partes. Se você usar apenas uma parte, não se esqueça de destruir as outras, ou ela irá parar a produção!
+ description: Corta as formas em quatro partes. Se você usar apenas uma parte, não se esqueça de destruir as outras, ou ela irá parar a produção!
+
+ advanced_processor:
+ default:
+ name: &advanced_processor Inversor de Cor
+ description: Aceita uma cor ou forma e a inverte.
rotater:
default:
@@ -490,8 +505,8 @@ buildings:
name: Rotacionador (Anti-horário)
description: Gira as formas no sentido anti-horário em 90 graus.
fl:
- name: Rotate (180)
- description: Rotates shapes by 180 degrees.
+ name: Rotacionador (180)
+ description: Gira as formas em 180 graus.
stacker:
default:
@@ -507,16 +522,18 @@ buildings:
default:
name: &painter Pintor
description: &painter_desc Colore a forma inteira na entrada esquerda com a cor da entrada direita.
- double:
- name: Pintor (Duplo)
- description: Colore as duas formas na entrada esquerda com a cor da entrada direita.
- quad:
- name: Pintor (Quádruplo)
- description: Permite colorir cada quadrante da forma com uma cor diferente.
+
mirrored:
name: *painter
description: *painter_desc
+ double:
+ name: Pintor (Duplo)
+ description: Colore as formas na entrada esquerda com a cor da entrada superior.
+ quad:
+ name: Pintor (Quádruplo)
+ description: Permite colorir cada quadrante da forma com uma cor diferente.
+
trash:
default:
name: &trash Lixo
@@ -525,29 +542,22 @@ buildings:
storage:
name: Estoque
description: Armazena itens em excesso, até uma determinada capacidade. Pode ser usado como uma porta de transbordamento.
- hub:
- deliver: Entregue
- toUnlock: para desbloquear
- levelShortcut: LVL
- wire:
- default:
- name: &wire Fio de Energia
- description: Permite transportar energia.
- advanced_processor:
- default:
- name: &advanced_processor Inversor de Cor
- description: Aceita uma cor ou forma e a inverte.
energy_generator:
deliver: Entregar
+
+ # This will be shown before the amount, so for example 'For 123 Energy'
toGenerateEnergy: Para
+
default:
name: &energy_generator Gerador de Energia
description: Consome formas para gerar energia.
+
wire_crossings:
default:
name: &wire_crossings Divisor de Fios
description: Divide um fio de energia em dois.
+
merger:
name: Misturador de Fios
description: Une dois fios de energia em um.
@@ -556,11 +566,11 @@ storyRewards:
# Those are the rewards gained from completing the store
reward_cutter_and_trash:
title: Cortando formas
- desc: Voce desbloqueou cortador - corte de formas pela metade verticalmente independentemente de sua orientação!
Certifique-se de se livrar do lixo, ou então ele irá parar a produção - Para esse propósito, eu lhe dei uma lixeira, que destrói tudo o que você coloca nela!
+ desc: Você desbloqueou cortador - corte de formas pela metade verticalmente independentemente de sua orientação!
Certifique-se de se livrar do lixo, ou então ele irá parar a produção - Para esse propósito, eu lhe dei uma lixeira, que destrói tudo o que você coloca nela!
reward_rotater:
title: Rotação
- desc: O rotacionador foi desbloqueado! Gira as formas no sentido horário em 90 graus.
+ desc: O rotacionador foi desbloqueado! Gira as formas no sentido horário em 90 graus.
reward_painter:
title: Pintura
@@ -569,11 +579,11 @@ storyRewards:
reward_mixer:
title: Misturando cores
- desc: O misturador foi desbloqueado - combine duas cores usando mistura aditiva com esta construção!
+ desc: O misturador foi desbloqueado - combine duas cores usando mistura aditiva com esta construção!
reward_stacker:
title: Empilhador
- desc: Agora você pode combinar formas com o empilhador! Ambas as entradas são combinadas e, se puderem ser colocadas próximas uma da outra, serão fundidas . Caso contrário, a entrada direita é empilhada em cima da entrada esquerda!
+ desc: Agora você pode combinar formas com o empilhador! Ambas as entradas são combinadas e, se puderem ser colocadas próximas uma da outra, serão fundidas. Caso contrário, a entrada direita é empilhada em cima da entrada esquerda!
reward_splitter:
title: Distribuidor
@@ -597,7 +607,8 @@ storyRewards:
reward_splitter_compact:
title: Distribuidor compacto
- desc: Você desbloqueou uma variante compacta do Distribuidor - ele aceita duas entradas e as une em uma!
+ desc: >-
+ Você desbloqueou uma variante compacta do Distribuidor - ele aceita duas entradas e as une em uma!
reward_cutter_quad:
title: Cortador quádruplo
@@ -605,7 +616,7 @@ storyRewards:
reward_painter_double:
title: Pintura dupla
- desc: Você desbloqueou uma variante do pintor - funciona como o pintor regular, mas processa duas formas ao mesmo tempo , consumindo apenas uma cor em vez de duas!
+ desc: Você desbloqueou uma variante do pintor - funciona como o pintor regular, mas processa duas formas ao mesmo tempo, consumindo apenas uma cor em vez de duas!
reward_painter_quad:
title: Pintura quádrupla
@@ -637,9 +648,9 @@ storyRewards:
settings:
title: opções
categories:
- general: General
- userInterface: User Interface
- advanced: Advanced
+ general: Geral
+ userInterface: Interface de Usuário
+ advanced: Avançado
versionBadges:
dev: Desenvolvedor
@@ -653,23 +664,58 @@ settings:
description: >-
Altera o tamanho da fonte do usuário. A interface ainda será dimensionada com base na resolução do dispositivo, mas essa configuração controla a escala do texto.
scales:
- super_small: Super pequeno
+ super_small: Super Pequeno
small: Pequeno
regular: Normal
large: Grande
huge: Gigante
+ autosaveInterval:
+ title: Intervalo de gravação automática
+ description: >-
+ Controla a frequência com que o jogo salva automaticamente. Você também pode desativá-lo totalmente aqui.
+
+ intervals:
+ one_minute: 1 Minuto
+ two_minutes: 2 Minutos
+ five_minutes: 5 Minutos
+ ten_minutes: 10 Minutos
+ twenty_minutes: 20 Minutos
+ disabled: Desativado
+
scrollWheelSensitivity:
title: Sensibilidade do zoom
description: >-
Altera a sensibilidade do zoom (roda do mouse ou touchpad).
sensitivity:
- super_slow: Super lento
+ super_slow: Super Lento
slow: Lento
regular: Normal
fast: Rápido
super_fast: Super Rápido
+ movementSpeed:
+ title: Velocidade da câmera
+ description: >-
+ Altera a velocidade com que a câmera se move com o teclado.
+ speeds:
+ super_slow: Super Lento
+ slow: Lento
+ regular: Normal
+ fast: Rápido
+ super_fast: Super Rápido
+ extremely_fast: Extremamente Rápido
+
+ language:
+ title: Idioma
+ description: >-
+ Altera o idioma. Todas as traduções são contribuições de usuários e podem estar incompletas!
+
+ enableColorBlindHelper:
+ title: Modo daltônico.
+ description: >-
+ Permite várias ferramentas que permitem jogar se você é daltônico.
+
fullscreen:
title: Tela Cheia
description: >-
@@ -678,7 +724,7 @@ settings:
soundsMuted:
title: Som
description: >-
- Se ligado o jogo fica mudo
+ Se ligado, o jogo fica mudo.
musicMuted:
title: Música
@@ -689,7 +735,6 @@ settings:
title: Tema
description: >-
Escolha o tema entre (Claro / Escuro).
-
themes:
dark: Escuro
light: Claro
@@ -709,63 +754,30 @@ settings:
description: >-
Se ativado, oferece dicas e tutoriais enquanto se joga. Além disso, esconde certos elementos da interface até certo ponto, para facilitar o começo do jogo.
- language:
- title: Idioma
- description: >-
- Altera o idioma. Todas as traduções são contribuições de usuários e podem estar incompletas!
-
- movementSpeed:
- title: Velocidade da câmera
- description: Altera a velocidade com que a câmera se move com o teclado.
- speeds:
- super_slow: Super Lento
- slow: Lento
- regular: Normal
- fast: Rápido
- super_fast: Super Rápido
- extremely_fast: Extremamente Rápido
enableTunnelSmartplace:
title: Túneis inteligentes
description: >-
- Quando colocados, irão remover automaticamente esteiras desnecessárias.
- Isso também permite arrastar túneis e túneis em excesso serão removidos.
+ Quando colocados, irão remover automaticamente esteiras desnecessárias. Isso também permite arrastar túneis e túneis em excesso serão removidos.
+
vignette:
- title: Vignette
+ title: Vinheta
description: >-
- Permite o modo vinheta que escurece os cantos da tela e facilita a
- leitura do texto.
+ Permite o modo vinheta que escurece os cantos da tela e facilita a leitura do texto.
- autosaveInterval:
- title: Intervalo de gravação automática
- description: >-
- Controla a frequência com que o jogo salva automaticamente.
- Você também pode desativá-lo totalmente aqui.
- intervals:
- one_minute: 1 Minuto
- two_minutes: 2 Minutos
- five_minutes: 5 Minutos
- ten_minutes: 10 Minutos
- twenty_minutes: 20 Minutos
- disabled: Desativado
- compactBuildingInfo:
- title: Informações compactas sobre construções
- description: >-
- Reduz as caixas de informações dos construções, mostrando apenas suas proporções.
- Caso contrário, uma descrição e imagem são mostradas.
- disableCutDeleteWarnings:
- title: Desativar avisos de recorte / exclusão
- description: >-
- Desative as caixas de diálogo de aviso exibidas ao cortar / excluir
- mais de 100 entidades.
-
- enableColorBlindHelper:
- title: Modo daltônico.
- description: Permite várias ferramentas que permitem jogar se você é daltônico.
rotationByBuilding:
title: Rotação por tipo de construção
description: >-
- Cada tipo de construção lembra a rotação que você definiu pela última vez individualmente.
- Isso pode ser mais confortável se você alternar frequentemente entre a colocação de diferentes tipos de construção.
+ Cada tipo de construção lembra a rotação que você definiu pela última vez individualmente. Isso pode ser mais confortável se você alternar frequentemente entre a colocação de diferentes tipos de construção.
+
+ compactBuildingInfo:
+ title: Informações compactas sobre construções
+ description: >-
+ Reduz as caixas de informações dos construções, mostrando apenas suas proporções. Caso contrário, uma descrição e imagem são mostradas.
+
+ disableCutDeleteWarnings:
+ title: Desativar avisos de recorte / exclusão
+ description: >-
+ Desative as caixas de diálogo de aviso exibidas ao cortar / excluir mais de 100 entidades.
keybindings:
title: Controles
@@ -790,6 +802,7 @@ keybindings:
mapMoveRight: Mover para direita
mapMoveDown: Mover para baixo
mapMoveLeft: Mover para a esquerda
+ mapMoveFaster: Mover mais rápido
centerMap: Centralizar mapa
mapZoomIn: Aproximar
@@ -798,12 +811,12 @@ keybindings:
menuOpenShop: Melhorias
menuOpenStats: Estatísticas
+ menuClose: Fechar Menu
toggleHud: Ocultar Interface
toggleFPSInfo: Mostrar FPS e Debug Info
switchLayers: Alternar Camadas
- exportScreenshot: Exportar Base inteira como Imagem
-
+ exportScreenshot: Exportar Base Inteira como Imagem
belt: *belt
splitter: *splitter
underground_belt: *underground_belt
@@ -824,41 +837,33 @@ keybindings:
Modifier: Rotação anti-horária
cycleBuildingVariants: Variações
confirmMassDelete: Confirmar exclusão em massa
+ pasteLastBlueprint: Colar último projeto
cycleBuildings: Trocar de construção
+ lockBeltDirection: Ativar planejador de correia
+ switchDirectionLockSide: >-
+ Planejador: Mudar de lado
massSelectStart: Segure e arraste para começar
massSelectSelectMultiple: Selecionar mais áreas
massSelectCopy: Copiar área
+ massSelectCut: Cortar área
placementDisableAutoOrientation: Desligar orientação automática
placeMultiple: Permanecer no modo de construção
placeInverse: Inverter orientação de esteira
- pasteLastBlueprint: Colar último projeto
- massSelectCut: Cortar área
- mapMoveFaster: Mover mais rápido
- lockBeltDirection: Ativar planejador de correia
- switchDirectionLockSide: "Planejador: Mudar de lado"
- menuClose: Fechar Menu
about:
title: Sobre o jogo
body: >-
- Esse jogo tem código aberto e é desenvolvido por Tobias Springer (esse sou eu).
+ Esse jogo tem código aberto e é desenvolvido por Tobias Springer (esse sou eu).
- Se quiser contribuir, confira shapez.io no github.
+ Se quiser contribuir, confira shapez.io no github.
- O jogo não seria possível sem a comunidade incrível do Discord sobre
- os meus jogos - Junte-se à comunidade no servidor do Discord!
+ O jogo não seria possível sem a comunidade incrível do Discord sobre os meus jogos - Junte-se à comunidade no servidor do Discord!
- A trilha sonora foi feita por Peppsen - Ele é demais.
+ A trilha sonora foi feita por Peppsen - Ele é demais.
- Finalmente, agradeço muito ao meu melhor amigo
- Niklas - Sem nossas sessões de Factorio,
- esse jogo nunca teria existido.
+ Finalmente, agradeço muito ao meu melhor amigo Niklas - Sem nossas sessões de Factorio, esse jogo nunca teria existido.
changelog:
title: Alterações
diff --git a/translations/base-pt-PT.yaml b/translations/base-pt-PT.yaml
index 8b6db461..4f16e0a9 100644
--- a/translations/base-pt-PT.yaml
+++ b/translations/base-pt-PT.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io é um jogo cujo objetivo é construir fábricas para automatizar a criação e fusão de formas geométricas cada vez mais complexas num mapa infinito.
diff --git a/translations/base-ro.yaml b/translations/base-ro.yaml
index 0f9e2714..15d3ff4b 100644
--- a/translations/base-ro.yaml
+++ b/translations/base-ro.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io este un joc despre construirea fabricilor pentru a automatiza crearea și combinarea a din ce in ce mai complexe forme într-o hartă infinită.
diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml
index 61f1ebf3..7dddc198 100644
--- a/translations/base-ru.yaml
+++ b/translations/base-ru.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io — это игра о строительстве фабрик для автоматизации создания и объединения все более сложных фигур на бесконечной карте.
@@ -488,8 +489,8 @@ buildings:
name: Вращатель (Обр.)
description: Поворачивает фигуры против часовой стрелки на 90 градусов.
fl:
- name: Rotate (180)
- description: Rotates shapes by 180 degrees.
+ name: Вращатель (180)
+ description: Вращает фигуры на 180 градусов.
stacker:
default:
@@ -635,9 +636,9 @@ storyRewards:
settings:
title: Настройки
categories:
- general: General
- userInterface: User Interface
- advanced: Advanced
+ general: Основные
+ userInterface: Интерфейс
+ advanced: Продвинутые
versionBadges:
dev: Разработчик
diff --git a/translations/base-sl.yaml b/translations/base-sl.yaml
index 7b451dc8..ad084b9d 100644
--- a/translations/base-sl.yaml
+++ b/translations/base-sl.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io je igra grajenja tovarne katere cilj je avtomatiziranje kreiranja in procesiranja vse bolj zapletenih oblik na neskončni ravnini.
diff --git a/translations/base-sr.yaml b/translations/base-sr.yaml
index fb03f547..953c024a 100644
--- a/translations/base-sr.yaml
+++ b/translations/base-sr.yaml
@@ -36,6 +36,7 @@
# + Merger = Spajač
# + Rotator = Obrtač
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io je igra o pravljenju fabrika za automatizaciju stvaranja i spajanja sve složenijih oblika na beskonačno velikoj mapi.
diff --git a/translations/base-sv.yaml b/translations/base-sv.yaml
index a2609184..ab302368 100644
--- a/translations/base-sv.yaml
+++ b/translations/base-sv.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io är ett spel som går ut på att automatisera skapandet av former med ökande komplexitet inom den oändligt stora världen.
diff --git a/translations/base-tr.yaml b/translations/base-tr.yaml
index ef79d218..b0b7d095 100644
--- a/translations/base-tr.yaml
+++ b/translations/base-tr.yaml
@@ -19,6 +19,7 @@
# the basic structure so the game also detects it.
#
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io is a game about building factories to automate the creation and combination of increasingly complex shapes within an infinite map.
diff --git a/translations/base-uk.yaml b/translations/base-uk.yaml
index 92aba8d8..bd83b42d 100644
--- a/translations/base-uk.yaml
+++ b/translations/base-uk.yaml
@@ -1,6 +1,10 @@
#
# GAME TRANSLATIONS
#
+# Translators:
+#
+# Prosta4ok_ua 07.07.2020 — 04.08.2020
+#
# Contributing:
#
# If you want to contribute, please make a pull request on this respository
@@ -23,8 +27,12 @@
# upgrade поліпшення
# marker позначка
# area ділянка
-# hub
+# hub центр
+# range дальність
+# storage сховище
+# shape форма
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io — це гра про будування фабрик для автоматизації створення та обробки все більш складних форм на нескінченно розширюваній мапі.
@@ -39,14 +47,14 @@ steamPage:
longText: >-
[img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img]
- shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map.
- Upon delivering the requested shapes you will progress within the game and unlock upgrades to speed up your factory.
+ shapez.io — це гра про будування фабрик для автоматизації створення та обробки все більш складних форм на нескінченно розширюваній мапі.
+ Після доставки потрібних форм ви просунетеся в грі та розблокуєте поліпшення, щоб пришвидшити свою фабрику.
- As the demand for shapes increases, you will have to scale up your factory to meet the demand - Don't forget about resources though, you will have to expand across the [b]infinite map[/b]!
+ Коли попит на форми зростає, вам доведеться збільшити масштаб своєї фабрики, щоб задовольнити попит. Однак не забувайте про ресурси, вам доведеться розширюватися на [b]нескінченній мапі[/b]!
- Soon you will have to mix colors and paint your shapes with them - Combine red, green and blue color resources to produce different colors and paint shapes with it to satisfy the demand.
+ Незабаром ви зможете змішути кольори і з їхньою допомогою фарбувати свої форми. Поєднуйте червоний, зелений та синій ресурси кольорів, щоб виготовити різноманітні кольори і пофарувати форми як вам заманеться.
- This game features 18 progressive levels (Which should keep you busy for hours already!) but I'm constantly adding new content - There is a lot planned!
+ У цій грі є 18 передових рівнів, які повинні утримувати вас годинами. Але не турбуйтеся, я постійно додаю новий вміст — ще багато чого заплановано!
Купуючи гру, ви отримуєте доступ до окремої версії, яка має додаткові функції, а також ви отримаєте доступ до нещодавно розроблених функцій.
@@ -59,7 +67,7 @@ steamPage:
[*] Додаткові налаштування
[*] Незабаром: дроти й енергія! Гадаю, оновлення вийде у кінці липня 2020 року.
[*] Незабаром: більше рівнів.
- [*] Allows me to further develop shapez.io ❤️
+ [*] Дозволяє мені розвиватися далі shapez.io ❤️
[/list]
[img]{STEAM_APP_IMAGE}/extras/header_future_updates.png[/img]
@@ -68,7 +76,7 @@ steamPage:
[list]
[*] Різноманітні мапи та випробування (наприклад, мапи з перешкодами)
- [*] Пазли (Надайте потрібну форму з обмеженою площею/набором будівель)
+ [*] Пазли (надайте потрібну форму з обмеженою площею/набором будівель)
[*] Режим історії, де будівлі матимуть вартість
[*] Генератор мап, який можна налаштувати (ресурс/розмір/щільність форми, зерно та багато іншого)
[*] Додаткові типи форм
@@ -152,7 +160,7 @@ mainMenu:
importSavegame: Імпортувати
openSourceHint: Ця гра з відкритим вихідним кодом!
discordLink: Офіційний Discord сервер
- helpTranslate: Допоможіть перекласти!
+ helpTranslate: Допоможіть з перекладом!
madeBy: Зробив
# This is shown when using firefox and other browsers which are not supported.
@@ -229,12 +237,12 @@ dialogs:
updateSummary:
title: Нове оновлення!
desc: >-
- Ось зміни з вашої останньої гри
+ Ось зміни з вашої останньої гри:
upgradesIntroduction:
title: Розблокування поліпшень
desc: >-
- Усі форми, що ви виробляєте, можуть використовуватися для розблокування поліпшення - Не зруйновуйте ваші старі заводи!
+ Усі форми, що ви виробляєте, можуть використовуватися для розблокування поліпшення - Не зруйнуйте свої старі фабрики!
Вкладку з поліпшеннями можна знайти в правому верхньому куті екрана.
massDeleteConfirm:
@@ -255,21 +263,21 @@ dialogs:
blueprintsNotUnlocked:
title: Ще не розблоковано
desc: >-
- Досягніть 13-го рівня, щоб розблокувати Blueprints!
+ Досягніть 13-го рівня, щоб розблокувати креслення!
keybindingsIntroduction:
title: Корисні гарячі клавіши
desc: >-
- Гра має багато гарічих клавіш, що полегшує будівництво великих заводів.
- Here are a few, but be sure to check out the keybindings!
- CTRL
+ Drag: Select an area.
- SHIFT
: Hold to place multiple of one building.
- ALT
: Invert orientation of placed belts.
+ Гра має багато гарячих клавіш, що полегшують будівництво великих фабрик.
+ Ось декілька, але обов’язково ознайомтеся з прив’язками клавіш!
+ CTRL
+ тягніть: виділити зону.
+ SHIFT
: тримайте, щоб розмістити декілька одного будинку.
+ ALT
: змінити орієнтацію розміщеної конвеєрної стрічки.
createMarker:
title: Нова позначка
- desc: Дайте йому змістовну назву, you can also include a short key of a shape (Which you can generate here)
titleEdit: Редагувати позначку
+ desc: Дайте їй змістовну назву. Ви також можете додати короткий ключ форми, що можно згенерувати тут.
markerDemoLimit:
desc: Ви можете створити тільки 2 позначки в демоверсії. Отримайте окрему версії для створення необмеженної кількості позначок.
@@ -284,21 +292,21 @@ ingame:
keybindingsOverlay:
moveMap: Рухатися
selectBuildings: Виділити будівлі
- stopPlacement: Stop placement
+ stopPlacement: Зупинити розміщення
rotateBuilding: Повернути будівлю
- placeMultiple: Place multiple
- reverseOrientation: Reverse orientation
- disableAutoOrientation: Disable auto-orientation
- toggleHud: Toggle HUD
- placeBuilding: Place building
+ placeMultiple: Розмістити декілька
+ reverseOrientation: Змінити орієнтацію
+ disableAutoOrientation: Вимкнути автоматичну орієнтацію
+ toggleHud: Перемкнути інтерфейс
+ placeBuilding: Розмістити будівлю
createMarker: Створити позначку
delete: Видалити
- pasteLastBlueprint: Paste last blueprint
- lockBeltDirection: Enable belt planner
- plannerSwitchSide: Flip planner side
+ pasteLastBlueprint: Вставити останнє креслення
+ lockBeltDirection: Увімкнути стрічковий планувальник
+ plannerSwitchSide: Змінити сторону планувальника
cutSelection: Вирізати
copySelection: Скопіювати
- clearSelection: Clear selection
+ clearSelection: Очистити виділене
pipette: Піпетка
switchLayers: Змінити шари
@@ -319,7 +327,7 @@ ingame:
buildingPlacement:
# Buildings can have different variants which are unlocked at later levels,
# and this is the hint shown when there are multiple variants available.
- cycleBuildingVariants: Press to cycle variants.
+ cycleBuildingVariants: Натисніть для циклу варіантів.
# Shows the hotkey in the ui, e.g. "Hotkey: Q"
hotkeyLabel: >-
@@ -327,7 +335,7 @@ ingame:
infoTexts:
speed: Швидкість
- range: Range
+ range: Дальність
storage: Сховище
oneItemPerSecond: 1 предмет за сек.
itemsPerSecond: предмет. за сек
@@ -354,7 +362,7 @@ ingame:
buttonUnlock: Поліпшення
# Gets replaced to e.g. "Tier IX"
- tier: Клас
+ tier: Ранг
# The roman number for each tier
tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X]
@@ -367,14 +375,14 @@ ingame:
dataSources:
stored:
title: Зберігається
- description: Displaying amount of stored shapes in your central building.
+ description: Відображає кількість збережених фігур у вашому центрі.
produced:
title: Виробляється
- description: Displaying all shapes your whole factory produces, including intermediate products.
+ description: Відображає всі форми вашої цілої фабрики, що виробляються, включаючи проміжні продукти.
delivered:
title: Доставлено
- description: Displaying shapes which are delivered to your central building.
- noShapesProduced: No shapes have been produced so far.
+ description: Відображає форми, що доставляються до центру.
+ noShapesProduced: Жодної форми поки не випускається.
# Displays the shapes per minute, e.g. '523 / m'
shapesPerMinute: за хв.
@@ -405,14 +413,14 @@ ingame:
waypoints:
waypoints: Позначки
hub: Центр
- description: Left-click a marker to jump to it, right-click to delete it.
Press to create a marker from the current view, or right-click to create a marker at the selected location.
- creationSuccessNotification: Marker has been created.
+ description: ЛКМ на позначку, щоб перейти до неї, ПКМ для видалення
Натисніть для створення позначки з поточного виду або ПКМ, щоб створити позначку в обраному місці.
+ creationSuccessNotification: Позначку створено.
# Shape viewer
shapeViewer:
title: Шари
empty: Пустий
- copyKey: Copy Key
+ copyKey: Копіювати ключ
# Interactive tutorial
interactiveTutorial:
@@ -449,78 +457,81 @@ buildings:
belt:
default:
- name: &belt Conveyor Belt
- description: Transports items, hold and drag to place multiple.
+ name: &belt Конвеєрна стрічка
+ description: Транспортує предмети, утримуйте і перетягуйте для розміщення декількох.
wire:
default:
- name: &wire Wire
- description: Allows you to transport energy
+ name: &wire Дріт
+ description: Дозволяє передавати енергію
- miner: # Internal name for the Extractor
+ # Internal name for the Extractor
+ miner:
default:
- name: &miner Extractor
- description: Place over a shape or color to extract it.
+ name: &miner Екстрактор
+ description: Розмістіть над формою чи кольором, який хочете видобути.
chainable:
- name: Extractor (Chain)
- description: Place over a shape or color to extract it. Can be chained.
+ name: Екстрактор (Ланц.)
+ description: Розмістіть над формою чи кольором, який хочете видобути. Можна об’єднати в ланцюг.
- underground_belt: # Internal name for the Tunnel
+ # Internal name for the Tunnel
+ underground_belt:
default:
- name: &underground_belt Tunnel
- description: Allows you to tunnel resources under buildings and belts.
+ name: &underground_belt Тунель
+ description: Дозволяє транспортувати ресурси під будівлями та стрічками.
tier2:
- name: Tunnel Tier II
- description: Allows you to tunnel resources under buildings and belts.
+ name: Тунель, ранг II
+ description: Дозволяє транспортувати ресурси під будівлями та стрічками.
- splitter: # Internal name for the Balancer
+ # Internal name for the Balancer
+ splitter:
default:
- name: &splitter Balancer
+ name: &splitter Розподілювач
description: Multifunctional - Evenly distributes all inputs onto all outputs.
compact:
- name: Merger (compact)
- description: Merges two conveyor belts into one.
+ name: З’єднувач
+ description: Об’єднує дві конвеєрні стрічки в одну. Займає усього на всього одну клітину.
compact-inverse:
- name: Merger (compact)
- description: Merges two conveyor belts into one.
+ name: З’єднувач
+ description: Об’єднує дві конвеєрні стрічки в одну. Займає усього на всього одну клітину.
cutter:
default:
- name: &cutter Cutter
- description: Cuts shapes from top to bottom and outputs both halves. If you use only one part, be sure to destroy the other part or it will stall!
+ name: &cutter Різчик
+ description: Розрізає форми зверху вниз і виводить обидві половинки. Якщо ви використовуєте лише одну частину, не забудьте знищити іншу частину, інакше вона застрягне в механізмі!
quad:
- name: Cutter (Quad)
- description: Cuts shapes into four parts. If you use only one part, be sure to destroy the other parts or it will stall!
+ name: Різчик (4 вих.)
+ description: Розрізає форми на 4 частини. Якщо ви використовуєте лише одну частину, не забудьте знищити інші, інакше вони застрягнуть в механізмі!
advanced_processor:
default:
- name: &advanced_processor Advanced Processor
- description: Advanced shape processing
+ name: &advanced_processor Передовий процесор
+ description: Покращена обробка форм.
rotater:
default:
- name: &rotater Rotate
- description: Rotates shapes clockwise by 90 degrees.
+ name: &rotater Обертач
+ description: Обертає форми за годинниковою стрілкою на 90 градусів.
ccw:
- name: Rotate (CCW)
- description: Rotates shapes counter-clockwise by 90 degrees.
+ name: Обертач (-90)
+ description: Обертає форми проти годинникової стрілки на 90 градусів.
fl:
- name: Rotate (180)
- description: Rotates shapes by 180 degrees.
+ name: Обертач (180)
+ description: Обертає форми на 180 градусів.
stacker:
default:
- name: &stacker Stacker
+ name: &stacker Укладальник
description: Stacks both items. If they can not be merged, the right item is placed above the left item.
mixer:
default:
- name: &mixer Color Mixer
- description: Mixes two colors using additive blending.
+ name: &mixer Змішувач кольо8рів
+ description: Змішує два кольори за допомогою добавки.
painter:
default:
@@ -591,7 +602,7 @@ storyRewards:
reward_splitter:
title: Splitter/Merger
- desc: Багатофункціональний балансир було розблоковано. Його можна використовувати для створення великих заводів, розділяючи та об’єднуючи предмети на кілька стрічок!
+ desc: Багатофункціональний балансир було розблоковано. Його можна використовувати для створення великих фабрик, розділяючи та об’єднуючи предмети на кілька стрічок!
reward_tunnel:
title: Tunnel
@@ -642,7 +653,7 @@ storyRewards:
no_reward:
title: Наступний рівень
desc: >-
- Цей рівень не дав нагороди, але в наступному... щось буде.
До речі, краще не руйнуйте свій поточний завод. Вам знадобляться всі ті форми пізніше, щоб розблокувати поліпшення!
+ Цей рівень не дав нагороди, але в наступному... щось буде.
До речі, краще не руйнуйте свою поточну фабрику. Вам знадобляться всі ті форми пізніше, щоб розблокувати поліпшення!
no_reward_freeplay:
title: Наступний рівень
diff --git a/translations/base-zh-CN.yaml b/translations/base-zh-CN.yaml
index 3aad1244..225619e0 100644
--- a/translations/base-zh-CN.yaml
+++ b/translations/base-zh-CN.yaml
@@ -176,7 +176,7 @@ mainMenu:
# This is shown when using firefox and other browsers which are not supported.
browserWarning: >-
- 很抱歉, 本游戏在当前浏览器上可能运行缓慢! 使用chrome或者获取独立版以得到更好的体验。
+ 很抱歉, 本游戏在当前浏览器上可能运行缓慢! 使用 Chrome 或者获取独立版以得到更好的体验。
savegameLevel: 第关
savegameLevelUnknown:
@@ -232,7 +232,7 @@ dialogs:
editKeybinding:
title: 更改按键设置
- desc: 请按下你想要使用的按键,或者按下ESC键来取消设置。
+ desc: 请按下你想要使用的按键,或者按下 ESC 键来取消设置。
resetKeybindingsConfirmation:
title: 重置所有按键
@@ -244,11 +244,11 @@ dialogs:
featureRestriction:
title: 演示版
- desc: 你尝试使用了 功能。该功能在演示版中不可用。请考虑购买独立版以获得更好的体验。
+ desc: 你尝试使用了功能。该功能在演示版中不可用。请考虑购买独立版以获得更好的体验。
oneSavegameLimit:
title: 存档数量限制
- desc: 演示版中只能保存一份存档。 请删除旧存档或者获取独立版!
+ desc: 演示版中只能保存一份存档。请删除旧存档或者获取独立版!
updateSummary:
title: 更新啦!
@@ -314,7 +314,7 @@ ingame:
placeMultiple: 放置多个
reverseOrientation: 反向放置
disableAutoOrientation: 关闭自动定向
- toggleHud: 开关HUD
+ toggleHud: 开关 HUD
placeBuilding: 放置建筑
createMarker: 创建地图标记
delete: 销毁
@@ -332,7 +332,7 @@ ingame:
buildingPlacement:
# Buildings can have different variants which are unlocked at later levels,
# and this is the hint shown when there are multiple variants available.
- cycleBuildingVariants: 按键以选择建筑变体.
+ cycleBuildingVariants: 按 键以选择建筑变体.
# Shows the hotkey in the ui, e.g. "Hotkey: Q"
hotkeyLabel: >-
@@ -391,7 +391,7 @@ ingame:
noShapesProduced: 你还没有生产任何图形。
# Displays the shapes per minute, e.g. '523 / m'
- shapesPerMinute: 个/分钟
+ shapesPerMinute: 个 / 分钟
# Settings menu, when you press "ESC"
settingsMenu:
@@ -419,7 +419,7 @@ ingame:
waypoints:
waypoints: 地图标记
hub: 基地
- description: 左键跳转到地图标记,右键删除地图标记。
按在当前地点创建地图标记,或者在选定位置上右键创建地图标记.
+ description: 左键跳转到地图标记,右键删除地图标记。
按 在当前地点创建地图标记,或者在选定位置上右键创建地图标记.
creationSuccessNotification: 成功创建地图标记。
# Interactive tutorial
@@ -432,7 +432,7 @@ ingame:
1_3_expand: >-
这不是一个挂机游戏!建造更多的开采机和传送带来更快地完成目标。
- 提示:按住SHIFT键来放置多个开采机,用R键旋转它们。
+ 提示:按住 SHIFT 键来放置多个开采机,用 R 键旋转它们。
colors:
red: 红色
@@ -505,10 +505,10 @@ buildings:
cutter:
default:
name: &cutter 切割机
- description: 将图形从上到下切开并输出。 如果你只需要其中一半,记得把另一半销毁掉,否则切割机会停止工作!
+ description: 将图形从上到下切开并输出。如果你只需要其中一半,记得把另一半销毁掉,否则切割机会停止工作!
quad:
name: 切割机(四向)
- description: 将输入的图形切成四块。 如果你只需要其中一块,记得把其他的销毁掉,否则切割机会停止工作!
+ description: 将输入的图形切成四块。如果你只需要其中一块,记得把其他的销毁掉,否则切割机会停止工作!
rotater:
default:
@@ -592,7 +592,7 @@ storyRewards:
reward_painter:
title: 上色
desc: >-
- 恭喜!你解锁了上色机。 开采一些颜色 (就像你开采图形一样) 将其在上色机中与图形结合来将图形上色!
PS: 如果你患有色盲,可以在设置中启用色盲模式!
+ 恭喜!你解锁了上色机。开采一些颜色 (就像你开采图形一样) 将其在上色机中与图形结合来将图形上色!
PS:如果你患有色盲,可以在设置中启用色盲模式!
reward_mixer:
title: 混合颜色
@@ -612,7 +612,7 @@ storyRewards:
reward_rotater_ccw:
title: 逆时针旋转
- desc: 恭喜!你解锁了旋转机的逆时针变体。这个变体可以逆时针旋转图形。选择旋转机然后按“T”键来选取这个变体。
+ desc: 恭喜!你解锁了旋转机的逆时针变体。这个变体可以逆时针旋转图形。选择旋转机然后按"T"键来选取这个变体。
reward_miner_chainable:
title: 链式开采机
@@ -648,13 +648,13 @@ storyRewards:
reward_blueprints:
title: 蓝图
- desc: 你现在可以复制粘贴你的工厂的一部分了!按住CTRL键并拖动鼠标来选择一块区域,然后按C键复制。
粘贴并不是免费的,你需要使用蓝图图形来粘贴你的蓝图。蓝图图形是你刚刚交付的图形。
+ desc: 你现在可以复制粘贴你的工厂的一部分了!按住 CTRL 键并拖动鼠标来选择一块区域,然后按C键复制。
粘贴并不是免费的,你需要使用蓝图图形来粘贴你的蓝图。蓝图图形是你刚刚交付的图形。
# Special reward, which is shown when there is no reward actually
no_reward:
title: 下一关
desc: >-
- 这一关没有奖励,但是下一关有!
PS: 你生产过的所有图形都会被用来升级建筑。
+ 这一关没有奖励,但是下一关有!
PS:你生产过的所有图形都会被用来升级建筑。
no_reward_freeplay:
title: 下一关
@@ -729,21 +729,21 @@ settings:
refreshRate:
title: 模拟频率、刷新频率
description: >-
- 如果你的显示器是144hz的,请在这里更改刷新频率,这样游戏可以正确地根据你的屏幕进行模拟。但是如果你的电脑性能不佳,提高刷新频率可能降低帧数。
+ 如果你的显示器是 144Hz 的,请在这里更改刷新频率,这样游戏可以正确地根据你的屏幕进行模拟。但是如果你的电脑性能不佳,提高刷新频率可能降低帧数。
# description: >-
# If you have a 144hz monitor, change the refresh rate here so the game will properly simulate at higher refresh rates. This might actually decrease the FPS if your computer is too slow.
alwaysMultiplace:
title: 多重放置
description: >-
- 开启这个选项之后放下建筑将不会取消建筑选择。等同于一直按下SHIFT键。
+ 开启这个选项之后放下建筑将不会取消建筑选择。等同于一直按下 SHIFT 键。
# description: >-
# If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently.
offerHints:
title: 提示与教程
description: >-
- 是否显示提示、教程以及一些其他的帮助理解游戏的UI元素。
+ 是否显示提示、教程以及一些其他的帮助理解游戏的 UI 元素。
# description: >-
# Whether to offer hints and tutorials while playing. Also hides certain UI elements onto a given level to make it easier to get into the game.
@@ -799,7 +799,7 @@ settings:
keybindings:
title: 按键设置
hint: >-
- 提示:使用CTRL、SHIFT、ALT! 这些建在放置建筑时有不同的效果。
+ 提示:使用 CTRL、SHIFT、ALT!这些建在放置建筑时有不同的效果。
# hint: >-
# Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options.
@@ -881,20 +881,20 @@ about:
title: 关于游戏
# title: About this Game
body: >-
- 本游戏由Tobias Springer(我)开发,并且已经开源。
- 如果你想参与开发,请查看shapez.io on github。
- 这个游戏的开发少不了热情的Discord社区。请加入我们的Discord 服务器!
- 本游戏的音乐由Peppsen制作——他是个很棒的伙伴。
+ 本游戏的音乐由 Peppsen 制作——他是个很棒的伙伴。
- 最后,我想感谢我最好的朋友Niklas——如果没有与他的异星工厂(factorio)的游戏体验,shapez.io将不会存在。
+ 最后,我想感谢我最好的朋友 Niklas ——如果没有与他的异星工厂(factorio)的游戏体验,shapez.io将不会存在。
changelog:
title: 版本日志
diff --git a/translations/base-zh-TW.yaml b/translations/base-zh-TW.yaml
index 6225a73b..65aef6fa 100644
--- a/translations/base-zh-TW.yaml
+++ b/translations/base-zh-TW.yaml
@@ -45,6 +45,7 @@
# Painter:上色機
# Trash:垃圾桶
+---
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io 是一款在一個無邊際的地圖上建造工廠、自動化生產與組合愈加複雜圖形的遊戲。
diff --git a/yarn.lock b/yarn.lock
index dff261d2..a67c83c2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -703,14 +703,6 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
-"@babel/runtime@7.0.0-beta.42":
- version "7.0.0-beta.42"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.42.tgz#352e40c92e0460d3e82f49bd7e79f6cda76f919f"
- integrity sha512-iOGRzUoONLOtmCvjUsZv3mZzgCT6ljHQY5fr1qG1QIiJQwtM7zbPWGGpa3QWETq+UqwWyJnoi5XZDZRwZDFciQ==
- dependencies:
- core-js "^2.5.3"
- regenerator-runtime "^0.11.1"
-
"@babel/runtime@^7.8.4":
version "7.9.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06"
@@ -1257,13 +1249,6 @@ accepts@~1.3.7:
mime-types "~2.1.24"
negotiator "0.6.2"
-acorn-jsx@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
- integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
- dependencies:
- acorn "^3.0.4"
-
acorn-jsx@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
@@ -1274,16 +1259,6 @@ acorn-walk@^7.1.1:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e"
integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==
-acorn@^3.0.4:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
- integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
-
-acorn@^5.5.0:
- version "5.7.4"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
- integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
-
acorn@^6.4.1:
version "6.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
@@ -1344,11 +1319,6 @@ amdefine@>=0.0.4:
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
-ansi-escapes@^1.1.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
- integrity sha1-06ioOzGapneTZisT52HHkRQiMG4=
-
ansi-escapes@^4.2.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
@@ -1361,11 +1331,6 @@ ansi-regex@^2.0.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-ansi-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
- integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-
ansi-regex@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
@@ -1456,11 +1421,6 @@ arr-union@^3.1.0:
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-array-differ@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
- integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=
-
array-find-index@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
@@ -1471,28 +1431,11 @@ array-flatten@1.1.1:
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
-array-union@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
- integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
- dependencies:
- array-uniq "^1.0.1"
-
-array-uniq@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
- integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
-
array-unique@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
-arrify@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
- integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
-
asn1.js@^4.0.0:
version "4.10.1"
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
@@ -1615,23 +1558,6 @@ babel-plugin-dynamic-import-node@^2.3.0:
dependencies:
object.assign "^4.1.0"
-babel-polyfill@6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
- integrity sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=
- dependencies:
- babel-runtime "^6.22.0"
- core-js "^2.4.0"
- regenerator-runtime "^0.10.0"
-
-babel-runtime@^6.22.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
- integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
- dependencies:
- core-js "^2.4.0"
- regenerator-runtime "^0.11.0"
-
babel-runtime@^7.0.0-beta.3:
version "7.0.0-beta.3"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-7.0.0-beta.3.tgz#7c750de5514452c27612172506b49085a4a630f2"
@@ -1951,6 +1877,14 @@ buffer@^4.3.0:
ieee754 "^1.1.4"
isarray "^1.0.0"
+buffer@^5.1.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
+ integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+
buffer@^5.2.0, buffer@^5.2.1:
version "5.5.0"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce"
@@ -2135,7 +2069,16 @@ caw@^2.0.0, caw@^2.0.1:
tunnel-agent "^0.6.0"
url-to-options "^1.0.1"
-chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.3:
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^1.0.0, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
@@ -2146,24 +2089,6 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chalk@2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
- integrity sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
chalk@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
@@ -2180,26 +2105,11 @@ chalk@^4.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chance@1.0.13:
- version "1.0.13"
- resolved "https://registry.yarnpkg.com/chance/-/chance-1.0.13.tgz#666bec2db42b3084456a3e4f4c28a82db5ccb7e6"
- integrity sha512-9cpcgmAIQiXC0eMgQuMZgXuHR2Y+gKUyGQnalqSAg5LlUJyJFsZeKyuHVSGhj+bx18ppH+Jo3VOayNeXR/7p9Q==
-
-chardet@^0.4.0:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
- integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
-
chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-charenc@~0.0.1:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
- integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
-
check-types@^8.0.3:
version "8.0.3"
resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
@@ -2279,13 +2189,6 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
-class-validator@0.8.5:
- version "0.8.5"
- resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.8.5.tgz#484785acda98f68549c3a84dc1bb2f77b736dc58"
- integrity sha512-84yezRo44aP4oGhvPmqj6obAFQF1NzUyfR0+f8jubzdAspO5pmjpHhBBlPf335epUskzXAFe5uo4Qf+c7SI+DA==
- dependencies:
- validator "9.2.0"
-
clean-css@4.2.x:
version "4.2.3"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78"
@@ -2293,13 +2196,6 @@ clean-css@4.2.x:
dependencies:
source-map "~0.6.0"
-cli-cursor@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
- integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
- dependencies:
- restore-cursor "^2.0.0"
-
cli-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
@@ -2404,11 +2300,6 @@ colors@^1.3.3:
resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
-commander@2.15.1:
- version "2.15.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
- integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
-
commander@2.17.x:
version "2.17.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
@@ -2538,7 +2429,7 @@ core-js@3:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
-core-js@^2.4.0, core-js@^2.5.3, core-js@^2.5.7:
+core-js@^2.4.0, core-js@^2.5.7:
version "2.6.11"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
@@ -2558,6 +2449,13 @@ cosmiconfig@^5.0.0:
js-yaml "^3.13.1"
parse-json "^4.0.0"
+crc@^3.8.0:
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6"
+ integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==
+ dependencies:
+ buffer "^5.1.0"
+
create-ecdh@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
@@ -2618,11 +2516,6 @@ cross-spawn@^7.0.2:
shebang-command "^2.0.0"
which "^2.0.1"
-crypt@~0.0.1:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
- integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
-
crypto-browserify@^3.11.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
@@ -2931,7 +2824,7 @@ decompress@^4.0.0, decompress@^4.2.0:
pify "^2.3.0"
strip-dirs "^2.0.0"
-deep-is@^0.1.3, deep-is@~0.1.3:
+deep-is@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
@@ -3168,13 +3061,6 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-encoding@^0.1.11:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
- integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
- dependencies:
- iconv-lite "~0.4.13"
-
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@@ -3263,18 +3149,6 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-escodegen-wallaby@1.6.18:
- version "1.6.18"
- resolved "https://registry.yarnpkg.com/escodegen-wallaby/-/escodegen-wallaby-1.6.18.tgz#95a41e2fdc88687466e43550c7bf136386fd4363"
- integrity sha512-3UvR14JRNh8VfKJixTDHWmhPNKAJiVZS807KUjECBk6f05WMe8ZeWL1gbrswNYhDiAUeDBQccyTWR91fayx3og==
- dependencies:
- esprima "^2.7.1"
- estraverse "^1.9.1"
- esutils "^2.0.2"
- optionator "^0.8.1"
- optionalDependencies:
- source-map "~0.2.0"
-
eslint-config-prettier@6.11.0:
version "6.11.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1"
@@ -3359,14 +3233,6 @@ eslint@7.1.0:
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
-espree@3.5.4:
- version "3.5.4"
- resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
- integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
- dependencies:
- acorn "^5.5.0"
- acorn-jsx "^3.0.0"
-
espree@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/espree/-/espree-7.0.0.tgz#8a7a60f218e69f120a842dc24c5a88aa7748a74e"
@@ -3376,11 +3242,6 @@ espree@^7.0.0:
acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.1.0"
-esprima@^2.7.1:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
- integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
-
esprima@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -3405,16 +3266,6 @@ esrecurse@^4.1.0, esrecurse@^4.2.1:
dependencies:
estraverse "^4.1.0"
-estraverse@4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
- integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
-
-estraverse@^1.9.1:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
- integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=
-
estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
@@ -3585,15 +3436,6 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
assign-symbols "^1.0.0"
is-extendable "^1.0.1"
-external-editor@^2.0.1:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
- integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
- dependencies:
- chardet "^0.4.0"
- iconv-lite "^0.4.17"
- tmp "^0.0.33"
-
external-editor@^3.0.3:
version "3.1.0"
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
@@ -3632,7 +3474,7 @@ fast-json-stable-stringify@^2.0.0:
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
+fast-levenshtein@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
@@ -3674,13 +3516,6 @@ figures@^1.3.5:
escape-string-regexp "^1.0.5"
object-assign "^4.1.0"
-figures@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
- integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
- dependencies:
- escape-string-regexp "^1.0.5"
-
figures@^3.0.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
@@ -4364,7 +4199,7 @@ https-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
-iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@~0.4.13:
+iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -4490,25 +4325,6 @@ ini@^1.3.4, ini@^1.3.5:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-inquirer@3.0.6:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347"
- integrity sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=
- dependencies:
- ansi-escapes "^1.1.0"
- chalk "^1.0.0"
- cli-cursor "^2.1.0"
- cli-width "^2.0.0"
- external-editor "^2.0.1"
- figures "^2.0.0"
- lodash "^4.3.0"
- mute-stream "0.0.7"
- run-async "^2.2.0"
- rx "^4.1.0"
- string-width "^2.0.0"
- strip-ansi "^3.0.0"
- through "^2.3.6"
-
inquirer@^7.0.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29"
@@ -4548,11 +4364,6 @@ invariant@^2.2.2, invariant@^2.2.4:
dependencies:
loose-envify "^1.0.0"
-inversify@4.11.1:
- version "4.11.1"
- resolved "https://registry.yarnpkg.com/inversify/-/inversify-4.11.1.tgz#9a10635d1fd347da11da96475b3608babd5945a6"
- integrity sha512-9bs/36crPdTSOCcoomHMb96s+B8W0+2c9dHFP/Srv9ZQaPnUvsMgzmMHfgVECqfHVUIW+M5S7SYOjoig8khWuQ==
-
invert-kv@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
@@ -4606,7 +4417,7 @@ is-binary-path@~2.1.0:
dependencies:
binary-extensions "^2.0.0"
-is-buffer@^1.1.5, is-buffer@~1.1.1:
+is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
@@ -4770,11 +4581,6 @@ is-png@^2.0.0:
resolved "https://registry.yarnpkg.com/is-png/-/is-png-2.0.0.tgz#ee8cbc9e9b050425cedeeb4a6fb74a649b0a4a8d"
integrity sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==
-is-promise@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
- integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
-
is-regex@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
@@ -4792,7 +4598,7 @@ is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0:
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
-is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
+is-stream@^1.0.0, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
@@ -4861,31 +4667,6 @@ isurl@^1.0.0-alpha5:
has-to-string-tag-x "^1.2.0"
is-object "^1.0.1"
-javascript-obfuscator@^0.15.0:
- version "0.15.0"
- resolved "https://registry.yarnpkg.com/javascript-obfuscator/-/javascript-obfuscator-0.15.0.tgz#e2b348c3a6895ef9195e3088f05747cff7a914f1"
- integrity sha512-d4mzMLkwZarZE9ZDFXQapNba4iHEj6ARveU4qCz7j/T/TlrHJVbyhVRcZigIuiQqgotTWGub5vMCa2/ep+hA+w==
- dependencies:
- "@babel/runtime" "7.0.0-beta.42"
- chalk "2.3.2"
- chance "1.0.13"
- class-validator "0.8.5"
- commander "2.15.1"
- escodegen-wallaby "1.6.18"
- espree "3.5.4"
- estraverse "4.2.0"
- inversify "4.11.1"
- js-string-escape "1.0.1"
- md5 "2.2.1"
- mkdirp "0.5.1"
- multimatch "2.1.0"
- opencollective "1.0.3"
- pjson "1.0.9"
- reflect-metadata "0.1.12"
- source-map-support "0.5.4"
- string-template "1.0.0"
- tslib "1.9.0"
-
jimp@^0.6.1:
version "0.6.8"
resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.6.8.tgz#63074984337cc469cd4030946e503e7c02a18b5c"
@@ -4907,11 +4688,6 @@ js-base64@^2.1.9:
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.2.tgz#313b6274dda718f714d00b3330bbae6e38e90209"
integrity sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==
-js-string-escape@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef"
- integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=
-
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -5045,14 +4821,6 @@ levn@^0.4.1:
prelude-ls "^1.2.1"
type-check "~0.4.0"
-levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
- dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
-
load-bmfont@^1.3.1, load-bmfont@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b"
@@ -5164,7 +4932,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.3.0:
+lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
@@ -5313,15 +5081,6 @@ md5.js@^1.3.4:
inherits "^2.0.1"
safe-buffer "^5.1.2"
-md5@2.2.1, md5@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
- integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=
- dependencies:
- charenc "~0.0.1"
- crypt "~0.0.1"
- is-buffer "~1.1.1"
-
mdn-data@2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
@@ -5437,11 +5196,6 @@ mime@^2.4.0:
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
-mimic-fn@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
- integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
-
mimic-fn@^2.0.0, mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
@@ -5469,7 +5223,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
-minimatch@^3.0.0, minimatch@^3.0.4:
+minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@@ -5481,11 +5235,6 @@ minimist@0.0.8:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-minimist@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
- integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-
minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
@@ -5565,21 +5314,6 @@ ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-multimatch@2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
- integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=
- dependencies:
- array-differ "^1.0.0"
- array-union "^1.0.1"
- arrify "^1.0.0"
- minimatch "^3.0.0"
-
-mute-stream@0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
- integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
-
mute-stream@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
@@ -5634,22 +5368,6 @@ no-case@^2.2.0:
dependencies:
lower-case "^1.1.1"
-node-fetch@1.6.3:
- version "1.6.3"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
- integrity sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=
- dependencies:
- encoding "^0.1.11"
- is-stream "^1.0.1"
-
-node-fetch@^1.6.3:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
- integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
- dependencies:
- encoding "^0.1.11"
- is-stream "^1.0.1"
-
node-libs-browser@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
@@ -5752,15 +5470,6 @@ num2fraction@^1.2.2:
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
-obfuscator-loader@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/obfuscator-loader/-/obfuscator-loader-1.1.2.tgz#6e8460066296fc642a68c945e64906e3c964cb0f"
- integrity sha512-5PKsa4Vzq8uLJG0GT9BvC9ZxCr44wyV0c9wi782RYWh44GdFMSqlnUldgqSV+HQkFH3MWNc34AlSVSEhg7I26w==
- dependencies:
- esprima "^4.0.0"
- javascript-obfuscator "^0.15.0"
- loader-utils "^1.1.0"
-
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -5846,21 +5555,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"
-onesky-fetch@^0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/onesky-fetch/-/onesky-fetch-0.0.7.tgz#96fce1a258a80683d6a37840958bae2f6fdb2809"
- integrity sha1-lvzholioBoPWo3hAlYuuL2/bKAk=
- dependencies:
- md5 "^2.2.1"
- node-fetch "^1.6.3"
-
-onetime@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
- integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
- dependencies:
- mimic-fn "^1.0.0"
-
onetime@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
@@ -5868,43 +5562,11 @@ onetime@^5.1.0:
dependencies:
mimic-fn "^2.1.0"
-opencollective@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1"
- integrity sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=
- dependencies:
- babel-polyfill "6.23.0"
- chalk "1.1.3"
- inquirer "3.0.6"
- minimist "1.2.0"
- node-fetch "1.6.3"
- opn "4.0.2"
-
opener@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
-opn@4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
- integrity sha1-erwi5kTf9jsKltWrfyeQwPAavJU=
- dependencies:
- object-assign "^4.0.1"
- pinkie-promise "^2.0.0"
-
-optionator@^0.8.1:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
- integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
- dependencies:
- deep-is "~0.1.3"
- fast-levenshtein "~2.0.6"
- levn "~0.3.0"
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
- word-wrap "~1.2.3"
-
optionator@^0.9.1:
version "0.9.1"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
@@ -6284,11 +5946,6 @@ pixelmatch@^4.0.2:
dependencies:
pngjs "^3.0.0"
-pjson@1.0.9:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/pjson/-/pjson-1.0.9.tgz#8a9520ce76a4739f8fee91679dad6b065b1c7938"
- integrity sha512-4hRJH3YzkUpOlShRzhyxAmThSNnAaIlWZCAb27hd0pVUAXNUAHAO7XZbsPPvsCYwBFEScTmCCL6DGE8NyZ8BdQ==
-
pkg-dir@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
@@ -6993,11 +6650,6 @@ prelude-ls@^1.2.1:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
-prelude-ls@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
- integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
-
prepend-http@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
@@ -7281,11 +6933,6 @@ redent@^1.0.0:
indent-string "^2.1.0"
strip-indent "^1.0.1"
-reflect-metadata@0.1.12:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.12.tgz#311bf0c6b63cd782f228a81abe146a2bfa9c56f2"
- integrity sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==
-
regenerate-unicode-properties@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
@@ -7298,12 +6945,7 @@ regenerate@^1.4.0:
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
-regenerator-runtime@^0.10.0:
- version "0.10.5"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
- integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=
-
-regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1:
+regenerator-runtime@^0.11.0:
version "0.11.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
@@ -7439,14 +7081,6 @@ responselike@1.0.2:
dependencies:
lowercase-keys "^1.0.0"
-restore-cursor@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
- integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
- dependencies:
- onetime "^2.0.0"
- signal-exit "^3.0.2"
-
restore-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
@@ -7492,13 +7126,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
hash-base "^3.0.0"
inherits "^2.0.1"
-run-async@^2.2.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8"
- integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==
- dependencies:
- is-promise "^2.1.0"
-
run-async@^2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
@@ -7516,11 +7143,6 @@ rusha@^0.8.13:
resolved "https://registry.yarnpkg.com/rusha/-/rusha-0.8.13.tgz#9a084e7b860b17bff3015b92c67a6a336191513a"
integrity sha1-mghOe4YLF7/zAVuSxnpqM2GRUTo=
-rx@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
- integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=
-
rxjs@^6.5.3:
version "6.5.5"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
@@ -7813,13 +7435,6 @@ source-map-resolve@^0.5.0:
source-map-url "^0.4.0"
urix "^0.1.0"
-source-map-support@0.5.4:
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.4.tgz#54456efa89caa9270af7cd624cc2f123e51fbae8"
- integrity sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==
- dependencies:
- source-map "^0.6.0"
-
source-map-support@~0.5.12:
version "0.5.19"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
@@ -7850,13 +7465,6 @@ source-map@~0.1.38:
dependencies:
amdefine ">=0.0.4"
-source-map@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
- integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50=
- dependencies:
- amdefine ">=0.0.4"
-
spdx-correct@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
@@ -7883,13 +7491,6 @@ spdx-license-ids@^3.0.0:
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
-speed-measure-webpack-plugin@^1.3.1:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz#6ff894fc83e8a6310dde3af863a0329cd79da4f5"
- integrity sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ==
- dependencies:
- chalk "^2.0.1"
-
split-on-first@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
@@ -8000,19 +7601,6 @@ string-replace-webpack-plugin@^0.1.3:
file-loader "^0.8.1"
style-loader "^0.8.3"
-string-template@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/string-template/-/string-template-1.0.0.tgz#9e9f2233dc00f218718ec379a28a5673ecca8b96"
- integrity sha1-np8iM9wA8hhxjsN5oopWc+zKi5Y=
-
-string-width@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
- integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^4.0.0"
-
string-width@^3.0.0, string-width@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
@@ -8086,13 +7674,6 @@ strip-ansi@^3.0.0:
dependencies:
ansi-regex "^2.0.0"
-strip-ansi@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
- integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
- dependencies:
- ansi-regex "^3.0.0"
-
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
@@ -8419,11 +8000,6 @@ tryer@^1.0.1:
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
-tslib@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8"
- integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==
-
tslib@^1.8.1, tslib@^1.9.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
@@ -8455,13 +8031,6 @@ type-check@^0.4.0, type-check@~0.4.0:
dependencies:
prelude-ls "^1.2.1"
-type-check@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
- integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
- dependencies:
- prelude-ls "~1.1.2"
-
type-fest@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
@@ -8720,11 +8289,6 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
-validator@9.2.0:
- version "9.2.0"
- resolved "https://registry.yarnpkg.com/validator/-/validator-9.2.0.tgz#ad216eed5f37cac31a6fe00ceab1f6b88bded03e"
- integrity sha512-6Ij4Eo0KM4LkR0d0IegOwluG5453uqT5QyF5SV5Ezvm8/zmkKI/L4eoraafZGlZPC9guLkwKzgypcw8VGWWnGA==
-
vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
@@ -8881,7 +8445,7 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
-word-wrap@^1.2.3, word-wrap@~1.2.3:
+word-wrap@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==