diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1da72dae..e6063e3e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,3 +44,10 @@ jobs: uses: ibiqlik/action-yamllint@v1.0.0 with: file_or_dir: translations/*.yaml + + - name: TSLint + run: | + cd gulp + yarn gulp translations.fullBuild + cd .. + yarn tslint diff --git a/README.md b/README.md index 6d4b357e..89cb9bbb 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ If you want to add a new feature or in generally contribute I recommend to get i ### Code -The game is based on a custom engine which itself is based on the YORG.io 3 game egine (Actually it shares almost the same core). +The game is based on a custom engine which itself is based on the YORG.io 3 game engine (Actually it shares almost the same core). The code within the engine is relatively clean with some code for the actual game on top being hacky. This project is based on ES5. Some ES2015 features are used but most of them are too slow, especially when polyfilled. For example, `Array.prototype.forEach` is only used within non-critical loops since its slower than a plain for loop. 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 97f52260..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,21 +40,18 @@ "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", "rusha": "^0.8.13", "serialize-error": "^3.0.0", - "sloc": "^0.2.1", "strictdom": "^1.0.1", "string-replace-webpack-plugin": "^0.1.3", "terser-webpack-plugin": "^1.1.0", "through2": "^3.0.1", "uglify-template-string-loader": "^1.1.0", "unused-files-webpack-plugin": "^3.4.0", - "webpack": "^4.31.0", - "webpack-bundle-analyzer": "^3.0.3", + "webpack": "^4.43.0", "webpack-cli": "^3.1.0", "webpack-deep-scope-plugin": "^1.6.0", "webpack-plugin-replace": "^1.1.1", @@ -77,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", @@ -86,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", @@ -105,16 +97,14 @@ "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.1.0", + "webpack-stream": "^5.2.1", "yaml-loader": "^0.6.0" } } 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 26923796..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: [ 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 88d85386..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" @@ -1163,150 +1148,149 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== dependencies: - "@webassemblyjs/wast-printer" "1.8.5" + "@webassemblyjs/wast-printer" "1.9.0" -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" + "@webassemblyjs/ast" "1.9.0" -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" -"@webassemblyjs/ieee754@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/helper-wasm-section" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-opt" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - "@webassemblyjs/wast-printer" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" -"@webassemblyjs/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wasm-opt@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" -"@webassemblyjs/wasm-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wast-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/floating-point-hex-parser" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-code-frame" "1.8.5" - "@webassemblyjs/helper-fsm" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -1329,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== @@ -1352,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== @@ -1374,16 +1351,21 @@ 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== -acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7, acorn@^6.2.1: +acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7: version "6.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== +acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" @@ -1449,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== @@ -1681,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" @@ -1720,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= @@ -1752,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" @@ -1900,13 +1865,6 @@ async@~1.0.0: resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" integrity sha1-+PwEyjoTeErenhZBr5hXjPvWR6k= -async@~2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" - integrity sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw= - dependencies: - lodash "^4.14.0" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1998,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" @@ -2100,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" @@ -2227,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" @@ -2737,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== @@ -2786,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" @@ -2794,37 +2691,12 @@ 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.0.2: +chokidar@^2.0.0, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -2843,7 +2715,7 @@ chokidar@^2.0.0, chokidar@^2.0.2: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.4.1: +chokidar@^3.4.0, chokidar@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== @@ -2908,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" @@ -2944,13 +2801,6 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= - dependencies: - colors "1.0.3" - cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -3020,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= @@ -3115,7 +2965,7 @@ color@^3.0.0: color-convert "^1.9.1" color-string "^1.5.2" -colors@1.0.3, colors@1.0.x: +colors@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= @@ -3132,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== @@ -3159,13 +3004,6 @@ commander@~2.8.1: dependencies: graceful-readlink ">= 1.0.0" -commander@~2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= - dependencies: - graceful-readlink ">= 1.0.0" - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -3290,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" @@ -3309,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" @@ -3362,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== @@ -3372,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== @@ -3465,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" @@ -3585,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" @@ -3600,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" @@ -4141,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" @@ -4216,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" @@ -4312,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" @@ -4551,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" @@ -4698,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== @@ -4706,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" @@ -4723,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" @@ -4752,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" @@ -4905,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" @@ -4983,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" @@ -5206,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" @@ -5241,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== @@ -5460,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" @@ -5979,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" @@ -6136,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" @@ -6229,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" @@ -6472,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" @@ -6643,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" @@ -6714,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" @@ -6779,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== @@ -7009,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" @@ -7096,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" @@ -7116,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" @@ -7177,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== @@ -7429,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= @@ -7542,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" @@ -7621,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== @@ -7637,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" @@ -7978,7 +7503,7 @@ loader-runner@^2.4.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3, loader-utils@^1.0.0, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@1.2.3, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -7997,7 +7522,7 @@ loader-utils@^0.2.5, loader-utils@~0.2.2, loader-utils@~0.2.3, loader-utils@~0.2 json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.4.0: +loader-utils@^1.0.0, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -8131,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" @@ -8200,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" @@ -8240,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" @@ -8341,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.14.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== @@ -8468,11 +7973,6 @@ make-iterator@^1.0.0: dependencies: kind-of "^6.0.2" -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== - map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" @@ -8529,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" @@ -8586,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" @@ -8611,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" @@ -8735,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== @@ -8767,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" @@ -8782,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" @@ -8886,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" @@ -8991,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" @@ -9253,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" @@ -9412,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" @@ -9444,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" @@ -9842,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" @@ -9938,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" @@ -10034,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" @@ -10876,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" @@ -10981,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" @@ -11024,7 +10409,7 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -11052,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" @@ -11102,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" @@ -11204,7 +10569,7 @@ readable-stream@^3.0.2, readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.1.0, readdirp@^2.2.1: +readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== @@ -11254,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" @@ -11271,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" @@ -11650,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= @@ -11880,6 +11230,13 @@ serialize-javascript@^1.7.0: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + serve-index@1.9.1, serve-index@^1.1.4: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -11903,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== @@ -12021,16 +11378,6 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -sloc@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/sloc/-/sloc-0.2.1.tgz#42ad891e76838c1a22bbd8483468e9d74c7f531e" - integrity sha512-8XJnwCFR4DatLz1s0nGFe6IJPJ+5pjRFhoBuBKq8SLgFI40eD7ak6jOXpzeG0tmIpyOc1zCs9bjKAxMFm1451A== - dependencies: - async "~2.1.4" - cli-table "^0.3.1" - commander "~2.9.0" - readdirp "^2.1.0" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -12173,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" @@ -12225,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" @@ -12263,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" @@ -12461,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" @@ -12839,7 +12152,7 @@ ternary-stream@^3.0.0: merge-stream "^2.0.0" through2 "^3.0.1" -terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.4.1: +terser-webpack-plugin@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== @@ -12854,6 +12167,21 @@ terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.4.1: webpack-sources "^1.4.0" worker-farm "^1.7.0" +terser-webpack-plugin@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^3.1.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + terser@^4.0.0, terser@^4.1.2: version "4.3.1" resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.1.tgz#09820bcb3398299c4b48d9a86aefc65127d0ed65" @@ -13159,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" @@ -13216,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" @@ -13548,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" @@ -13715,39 +13005,29 @@ watch@^0.11.0: resolved "https://registry.yarnpkg.com/watch/-/watch-0.11.0.tgz#e8dba091b7456799a3af57978b986e77e1320406" integrity sha1-6NugkbdFZ5mjr1eXi5hud+EyBAY= -watchpack@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" + integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== dependencies: - chokidar "^2.0.2" graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.0" + watchpack-chokidar2 "^2.0.0" webidl-conversions@^4.0.2: version "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" @@ -13785,7 +13065,7 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack-stream@^5.1.0: +webpack-stream@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/webpack-stream/-/webpack-stream-5.2.1.tgz#35c992161399fe8cad9c10d4a5c258f022629b39" integrity sha512-WvyVU0K1/VB1NZ7JfsaemVdG0PXAQUqbjUNW4A58th4pULvKMQxG+y33HXTL02JvD56ko2Cub+E2NyPwrLBT/A== @@ -13807,16 +13087,16 @@ webpack-strip-block@^0.2.0: dependencies: loader-utils "^1.1.0" -webpack@^4.26.1, webpack@^4.31.0: - version "4.40.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.40.2.tgz#d21433d250f900bf0facbabe8f50d585b2dc30a7" - integrity sha512-5nIvteTDCUws2DVvP9Qe+JPla7kWPPIDFZv55To7IycHWZ+Z5qBdaBYPyuXWdhggTufZkQwfIK+5rKQTVovm2A== +webpack@^4.26.1, webpack@^4.43.0: + version "4.43.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" + integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.1" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" @@ -13827,13 +13107,13 @@ webpack@^4.26.1, webpack@^4.31.0: loader-utils "^1.2.3" memory-fs "^0.4.1" micromatch "^3.1.10" - mkdirp "^0.5.1" + mkdirp "^0.5.3" neo-async "^2.6.1" node-libs-browser "^2.2.1" schema-utils "^1.0.0" tapable "^1.1.3" - terser-webpack-plugin "^1.4.1" - watchpack "^1.6.0" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.1" webpack-sources "^1.4.1" websocket-driver@>=0.3.6: @@ -13990,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 4317a8a1..ddfb992d 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", @@ -46,20 +46,18 @@ "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", "rusha": "^0.8.13", "serialize-error": "^3.0.0", - "sloc": "^0.2.1", "strictdom": "^1.0.1", "string-replace-webpack-plugin": "^0.1.3", "terser-webpack-plugin": "^1.1.0", "typescript": "3.9.3", "uglify-template-string-loader": "^1.1.0", "unused-files-webpack-plugin": "^3.4.0", - "webpack": "^4.31.0", + "webpack": "^4.43.0", "webpack-bundle-analyzer": "^3.0.3", "webpack-cli": "^3.1.0", "webpack-deep-scope-plugin": "^1.6.0", @@ -87,16 +85,14 @@ "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", - "webpack-stream": "^5.1.0" + "yarn": "^1.22.4" } } diff --git a/res/ui/building_icons/advanced_processor.png b/res/ui/building_icons/advanced_processor.png index c1423b09..fe7cc8f2 100644 Binary files a/res/ui/building_icons/advanced_processor.png and b/res/ui/building_icons/advanced_processor.png differ diff --git a/res/ui/building_icons/belt.png b/res/ui/building_icons/belt.png index f9ed2542..628480fb 100644 Binary files a/res/ui/building_icons/belt.png and b/res/ui/building_icons/belt.png differ diff --git a/res/ui/building_icons/cutter.png b/res/ui/building_icons/cutter.png index ab69cfbd..6d0fc4d1 100644 Binary files a/res/ui/building_icons/cutter.png and b/res/ui/building_icons/cutter.png differ diff --git a/res/ui/building_icons/energy_generator.png b/res/ui/building_icons/energy_generator.png index ab724a7b..fc419cde 100644 Binary files a/res/ui/building_icons/energy_generator.png and b/res/ui/building_icons/energy_generator.png differ diff --git a/res/ui/building_icons/miner.png b/res/ui/building_icons/miner.png index 6bf727ec..fc7050ea 100644 Binary files a/res/ui/building_icons/miner.png and b/res/ui/building_icons/miner.png differ diff --git a/res/ui/building_icons/mixer.png b/res/ui/building_icons/mixer.png index 62e15780..87409438 100644 Binary files a/res/ui/building_icons/mixer.png and b/res/ui/building_icons/mixer.png differ diff --git a/res/ui/building_icons/painter.png b/res/ui/building_icons/painter.png index 60a1c784..4aa888b6 100644 Binary files a/res/ui/building_icons/painter.png and b/res/ui/building_icons/painter.png differ diff --git a/res/ui/building_icons/rotater.png b/res/ui/building_icons/rotater.png index fe0b2186..3fb355d6 100644 Binary files a/res/ui/building_icons/rotater.png and b/res/ui/building_icons/rotater.png differ diff --git a/res/ui/building_icons/splitter.png b/res/ui/building_icons/splitter.png index 29ea7123..fb889bab 100644 Binary files a/res/ui/building_icons/splitter.png and b/res/ui/building_icons/splitter.png differ diff --git a/res/ui/building_icons/stacker.png b/res/ui/building_icons/stacker.png index 3098ae3e..5a4dda42 100644 Binary files a/res/ui/building_icons/stacker.png and b/res/ui/building_icons/stacker.png differ diff --git a/res/ui/building_icons/trash.png b/res/ui/building_icons/trash.png index 8f094f2e..b6a34ae6 100644 Binary files a/res/ui/building_icons/trash.png and b/res/ui/building_icons/trash.png differ diff --git a/res/ui/building_icons/underground_belt.png b/res/ui/building_icons/underground_belt.png index 240e08a6..b52f4d8e 100644 Binary files a/res/ui/building_icons/underground_belt.png and b/res/ui/building_icons/underground_belt.png differ diff --git a/res/ui/building_icons/wire.png b/res/ui/building_icons/wire.png index e6ccb3a6..6bae2537 100644 Binary files a/res/ui/building_icons/wire.png and b/res/ui/building_icons/wire.png differ diff --git a/res/ui/building_icons/wire_crossings.png b/res/ui/building_icons/wire_crossings.png index 29ea7123..2ef869dc 100644 Binary files a/res/ui/building_icons/wire_crossings.png and b/res/ui/building_icons/wire_crossings.png differ diff --git a/res_built/atlas/atlas0_10.json b/res_built/atlas/atlas0_10.json index 86f1f8a3..044fb143 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":333,"y":26,"w":13,"h":13}, + "frame": {"x":85,"y":167,"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":350,"y":26,"w":13,"h":13}, + "frame": {"x":91,"y":258,"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":470,"y":103,"w":13,"h":13}, + "frame": {"x":107,"y":332,"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":504,"y":94,"w":13,"h":13}, + "frame": {"x":42,"y":434,"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":504,"y":111,"w":13,"h":13}, + "frame": {"x":45,"y":467,"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":516,"y":60,"w":13,"h":13}, + "frame": {"x":45,"y":484,"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":516,"y":77,"w":13,"h":13}, + "frame": {"x":45,"y":501,"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":526,"y":39,"w":13,"h":13}, + "frame": {"x":45,"y":518,"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":527,"y":22,"w":13,"h":13}, + "frame": {"x":59,"y":399,"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":530,"y":3,"w":13,"h":13}, + "frame": {"x":59,"y":416,"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":367,"y":26,"w":13,"h":13}, + "frame": {"x":91,"y":275,"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":384,"y":26,"w":13,"h":13}, + "frame": {"x":91,"y":292,"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":401,"y":26,"w":13,"h":13}, + "frame": {"x":108,"y":264,"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":396,"y":112,"w":13,"h":13}, + "frame": {"x":108,"y":281,"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":413,"y":112,"w":13,"h":13}, + "frame": {"x":108,"y":298,"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":430,"y":112,"w":13,"h":13}, + "frame": {"x":91,"y":309,"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":418,"y":49,"w":13,"h":13}, + "frame": {"x":90,"y":326,"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":435,"y":49,"w":13,"h":13}, + "frame": {"x":90,"y":343,"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":452,"y":49,"w":13,"h":13}, + "frame": {"x":90,"y":360,"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":465,"y":86,"w":13,"h":13}, + "frame": {"x":108,"y":315,"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":482,"y":65,"w":13,"h":13}, + "frame": {"x":107,"y":349,"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":492,"y":43,"w":13,"h":13}, + "frame": {"x":107,"y":366,"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":482,"y":82,"w":13,"h":13}, + "frame": {"x":90,"y":377,"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":487,"y":99,"w":13,"h":13}, + "frame": {"x":107,"y":383,"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":499,"y":60,"w":13,"h":13}, + "frame": {"x":52,"y":382,"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":509,"y":43,"w":13,"h":13}, + "frame": {"x":69,"y":380,"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":510,"y":22,"w":13,"h":13}, + "frame": {"x":42,"y":400,"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":499,"y":77,"w":13,"h":13}, + "frame": {"x":42,"y":417,"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":521,"y":94,"w":13,"h":13}, + "frame": {"x":59,"y":433,"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":521,"y":111,"w":13,"h":13}, + "frame": {"x":76,"y":397,"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":561,"y":20,"w":13,"h":13}, + "frame": {"x":59,"y":450,"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":572,"y":88,"w":13,"h":13}, + "frame": {"x":79,"y":512,"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":572,"y":105,"w":13,"h":13}, + "frame": {"x":96,"y":493,"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":584,"y":54,"w":13,"h":13}, + "frame": {"x":96,"y":510,"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":594,"y":37,"w":13,"h":13}, + "frame": {"x":79,"y":529,"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":595,"y":20,"w":13,"h":13}, + "frame": {"x":96,"y":527,"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":598,"y":3,"w":13,"h":13}, + "frame": {"x":96,"y":544,"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":584,"y":71,"w":13,"h":13}, + "frame": {"x":43,"y":628,"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":533,"y":56,"w":13,"h":13}, + "frame": {"x":76,"y":414,"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":543,"y":39,"w":13,"h":13}, + "frame": {"x":76,"y":431,"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":544,"y":20,"w":13,"h":13}, + "frame": {"x":93,"y":408,"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":547,"y":3,"w":13,"h":13}, + "frame": {"x":110,"y":400,"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":533,"y":73,"w":13,"h":13}, + "frame": {"x":110,"y":417,"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":538,"y":90,"w":13,"h":13}, + "frame": {"x":93,"y":425,"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":538,"y":107,"w":13,"h":13}, + "frame": {"x":110,"y":434,"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":550,"y":56,"w":13,"h":13}, + "frame": {"x":93,"y":442,"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":550,"y":73,"w":13,"h":13}, + "frame": {"x":110,"y":451,"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":560,"y":37,"w":13,"h":13}, + "frame": {"x":76,"y":448,"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":564,"y":3,"w":13,"h":13}, + "frame": {"x":93,"y":459,"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":555,"y":90,"w":13,"h":13}, + "frame": {"x":110,"y":468,"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":555,"y":107,"w":13,"h":13}, + "frame": {"x":62,"y":467,"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":567,"y":54,"w":13,"h":13}, + "frame": {"x":62,"y":484,"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":577,"y":37,"w":13,"h":13}, + "frame": {"x":62,"y":501,"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":578,"y":20,"w":13,"h":13}, + "frame": {"x":62,"y":518,"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":581,"y":3,"w":13,"h":13}, + "frame": {"x":79,"y":478,"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":567,"y":71,"w":13,"h":13}, + "frame": {"x":79,"y":495,"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":589,"y":88,"w":13,"h":13}, + "frame": {"x":43,"y":645,"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":589,"y":105,"w":13,"h":13}, + "frame": {"x":43,"y":662,"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":632,"y":3,"w":13,"h":13}, + "frame": {"x":61,"y":603,"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":640,"y":88,"w":13,"h":13}, + "frame": {"x":95,"y":612,"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":640,"y":105,"w":13,"h":13}, + "frame": {"x":61,"y":620,"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":652,"y":54,"w":13,"h":13}, + "frame": {"x":60,"y":637,"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":662,"y":37,"w":13,"h":13}, + "frame": {"x":60,"y":654,"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":663,"y":20,"w":13,"h":13}, + "frame": {"x":60,"y":671,"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":666,"y":3,"w":13,"h":13}, + "frame": {"x":78,"y":631,"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":652,"y":71,"w":13,"h":13}, + "frame": {"x":95,"y":629,"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":601,"y":54,"w":13,"h":13}, + "frame": {"x":43,"y":679,"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":611,"y":37,"w":13,"h":13}, + "frame": {"x":44,"y":536,"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":612,"y":20,"w":13,"h":13}, + "frame": {"x":44,"y":553,"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":615,"y":3,"w":13,"h":13}, + "frame": {"x":44,"y":570,"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":601,"y":71,"w":13,"h":13}, + "frame": {"x":44,"y":587,"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":606,"y":88,"w":13,"h":13}, + "frame": {"x":44,"y":604,"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":606,"y":105,"w":13,"h":13}, + "frame": {"x":61,"y":535,"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":618,"y":54,"w":13,"h":13}, + "frame": {"x":61,"y":552,"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":628,"y":37,"w":13,"h":13}, + "frame": {"x":61,"y":569,"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":629,"y":20,"w":13,"h":13}, + "frame": {"x":61,"y":586,"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":618,"y":71,"w":13,"h":13}, + "frame": {"x":78,"y":546,"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":623,"y":88,"w":13,"h":13}, + "frame": {"x":78,"y":563,"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":623,"y":105,"w":13,"h":13}, + "frame": {"x":78,"y":580,"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":635,"y":54,"w":13,"h":13}, + "frame": {"x":78,"y":597,"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":645,"y":37,"w":13,"h":13}, + "frame": {"x":95,"y":561,"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":646,"y":20,"w":13,"h":13}, + "frame": {"x":95,"y":578,"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":649,"y":3,"w":13,"h":13}, + "frame": {"x":95,"y":595,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -666,7 +666,7 @@ }, "sprites/belt/right_27.png": { - "frame": {"x":635,"y":71,"w":13,"h":13}, + "frame": {"x":78,"y":614,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -674,7 +674,7 @@ }, "sprites/blueprints/advanced_processor.png": { - "frame": {"x":84,"y":82,"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}, @@ -682,7 +682,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":657,"y":88,"w":13,"h":13}, + "frame": {"x":77,"y":648,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -690,7 +690,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":669,"y":54,"w":13,"h":13}, + "frame": {"x":77,"y":665,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -698,7 +698,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":669,"y":71,"w":13,"h":13}, + "frame": {"x":77,"y":682,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -706,7 +706,7 @@ }, "sprites/blueprints/cutter-quad.png": { - "frame": {"x":82,"y":3,"w":76,"h":19}, + "frame": {"x":3,"y":129,"w":76,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":76,"h":19}, @@ -714,7 +714,7 @@ }, "sprites/blueprints/cutter.png": { - "frame": {"x":287,"y":80,"w":36,"h":19}, + "frame": {"x":3,"y":628,"w":36,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":36,"h":19}, @@ -722,7 +722,7 @@ }, "sprites/blueprints/energy_generator.png": { - "frame": {"x":168,"y":82,"w":37,"h":37}, + "frame": {"x":3,"y":301,"w":37,"h":37}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":37,"h":37}, @@ -730,7 +730,7 @@ }, "sprites/blueprints/miner-chainable.png": { - "frame": {"x":369,"y":3,"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}, @@ -738,7 +738,7 @@ }, "sprites/blueprints/miner.png": { - "frame": {"x":327,"y":90,"w":19,"h":19}, + "frame": {"x":45,"y":221,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -746,7 +746,7 @@ }, "sprites/blueprints/mixer.png": { - "frame": {"x":250,"y":44,"w":37,"h":19}, + "frame": {"x":3,"y":536,"w":37,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":37,"h":19}, @@ -754,7 +754,7 @@ }, "sprites/blueprints/painter-double.png": { - "frame": {"x":162,"y":3,"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}, @@ -762,7 +762,7 @@ }, "sprites/blueprints/painter-mirrored.png": { - "frame": {"x":82,"y":49,"w":38,"h":19}, + "frame": {"x":82,"y":45,"w":38,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":38,"h":19}, @@ -778,7 +778,7 @@ }, "sprites/blueprints/painter.png": { - "frame": {"x":124,"y":49,"w":38,"h":19}, + "frame": {"x":3,"y":467,"w":38,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":38,"h":19}, @@ -786,7 +786,7 @@ }, "sprites/blueprints/rotater-ccw.png": { - "frame": {"x":350,"y":90,"w":19,"h":19}, + "frame": {"x":45,"y":244,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -794,7 +794,7 @@ }, "sprites/blueprints/rotater-fl.png": { - "frame": {"x":367,"y":67,"w":19,"h":19}, + "frame": {"x":45,"y":267,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -802,7 +802,7 @@ }, "sprites/blueprints/rotater.png": { - "frame": {"x":373,"y":90,"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}, @@ -810,7 +810,7 @@ }, "sprites/blueprints/splitter-compact-inverse.png": { - "frame": {"x":372,"y":43,"w":19,"h":19}, + "frame": {"x":68,"y":221,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -818,7 +818,7 @@ }, "sprites/blueprints/splitter-compact.png": { - "frame": {"x":392,"y":3,"w":19,"h":19}, + "frame": {"x":68,"y":244,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -826,7 +826,7 @@ }, "sprites/blueprints/splitter.png": { - "frame": {"x":287,"y":103,"w":36,"h":19}, + "frame": {"x":3,"y":651,"w":36,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":36,"h":19}, @@ -834,7 +834,7 @@ }, "sprites/blueprints/stacker.png": { - "frame": {"x":287,"y":3,"w":37,"h":19}, + "frame": {"x":3,"y":559,"w":37,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":37,"h":19}, @@ -842,7 +842,7 @@ }, "sprites/blueprints/trash-storage.png": { - "frame": {"x":209,"y":81,"w":35,"h":38}, + "frame": {"x":3,"y":383,"w":35,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":35,"h":38}, @@ -850,7 +850,7 @@ }, "sprites/blueprints/trash.png": { - "frame": {"x":390,"y":66,"w":19,"h":19}, + "frame": {"x":68,"y":267,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -858,7 +858,7 @@ }, "sprites/blueprints/underground_belt_entry-tier2.png": { - "frame": {"x":461,"y":3,"w":19,"h":18}, + "frame": {"x":67,"y":336,"w":19,"h":18}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":1,"w":19,"h":18}, @@ -866,7 +866,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":464,"y":25,"w":19,"h":16}, + "frame": {"x":84,"y":127,"w":19,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":3,"w":19,"h":16}, @@ -874,7 +874,7 @@ }, "sprites/blueprints/underground_belt_exit-tier2.png": { - "frame": {"x":484,"y":3,"w":19,"h":16}, + "frame": {"x":83,"y":147,"w":19,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":16}, @@ -882,7 +882,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":442,"y":88,"w":19,"h":16}, + "frame": {"x":102,"y":173,"w":19,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":16}, @@ -890,23 +890,23 @@ }, "sprites/blueprints/wire_crossings-merger.png": { - "frame": {"x":507,"y":3,"w":19,"h":15}, + "frame": {"x":84,"y":81,"w":14,"h":19}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":19,"h":15}, + "spriteSourceSize": {"x":5,"y":0,"w":14,"h":19}, "sourceSize": {"w":19,"h":19} }, "sprites/blueprints/wire_crossings.png": { - "frame": {"x":287,"y":26,"w":19,"h":14}, + "frame": {"x":107,"y":104,"w":14,"h":19}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":5,"w":19,"h":14}, + "spriteSourceSize": {"x":5,"y":0,"w":14,"h":19}, "sourceSize": {"w":19,"h":19} }, "sprites/blueprints/wire_left.png": { - "frame": {"x":216,"y":68,"w":10,"h":9}, + "frame": {"x":79,"y":465,"w":10,"h":9}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":10,"h":9}, @@ -914,7 +914,7 @@ }, "sprites/blueprints/wire_right.png": { - "frame": {"x":230,"y":68,"w":9,"h":9}, + "frame": {"x":114,"y":225,"w":9,"h":9}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":9,"h":9}, @@ -922,7 +922,7 @@ }, "sprites/blueprints/wire_top.png": { - "frame": {"x":679,"y":37,"w":6,"h":13}, + "frame": {"x":42,"y":383,"w":6,"h":13}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":6,"h":13}, @@ -930,7 +930,7 @@ }, "sprites/buildings/advanced_processor.png": { - "frame": {"x":126,"y":82,"w":38,"h":38}, + "frame": {"x":3,"y":217,"w":38,"h":38}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":38,"h":38}, @@ -938,7 +938,7 @@ }, "sprites/buildings/belt_left.png": { - "frame": {"x":674,"y":88,"w":13,"h":13}, + "frame": {"x":95,"y":646,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -946,7 +946,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":657,"y":105,"w":13,"h":13}, + "frame": {"x":94,"y":663,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -954,7 +954,7 @@ }, "sprites/buildings/belt_top.png": { - "frame": {"x":333,"y":26,"w":13,"h":13}, + "frame": {"x":85,"y":167,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -962,7 +962,7 @@ }, "sprites/buildings/cutter-quad.png": { - "frame": {"x":82,"y":26,"w":76,"h":19}, + "frame": {"x":3,"y":152,"w":76,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":76,"h":19}, @@ -970,7 +970,7 @@ }, "sprites/buildings/cutter.png": { - "frame": {"x":327,"y":67,"w":36,"h":19}, + "frame": {"x":3,"y":674,"w":36,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":36,"h":19}, @@ -978,7 +978,7 @@ }, "sprites/buildings/energy_generator.png": { - "frame": {"x":246,"y":3,"w":37,"h":37}, + "frame": {"x":3,"y":342,"w":37,"h":37}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":37,"h":37}, @@ -994,7 +994,7 @@ }, "sprites/buildings/miner-chainable.png": { - "frame": {"x":395,"y":43,"w":19,"h":19}, + "frame": {"x":104,"y":68,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -1002,7 +1002,7 @@ }, "sprites/buildings/miner.png": { - "frame": {"x":415,"y":3,"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}, @@ -1010,7 +1010,7 @@ }, "sprites/buildings/mixer.png": { - "frame": {"x":291,"y":44,"w":37,"h":19}, + "frame": {"x":3,"y":582,"w":37,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":37,"h":19}, @@ -1018,7 +1018,7 @@ }, "sprites/buildings/painter-double.png": { - "frame": {"x":204,"y":3,"w":38,"h":38}, + "frame": {"x":3,"y":259,"w":38,"h":38}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":38,"h":38}, @@ -1026,7 +1026,7 @@ }, "sprites/buildings/painter-mirrored.png": { - "frame": {"x":166,"y":45,"w":38,"h":19}, + "frame": {"x":3,"y":490,"w":38,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":38,"h":19}, @@ -1042,7 +1042,7 @@ }, "sprites/buildings/painter.png": { - "frame": {"x":208,"y":45,"w":38,"h":19}, + "frame": {"x":3,"y":513,"w":38,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":38,"h":19}, @@ -1050,7 +1050,7 @@ }, "sprites/buildings/rotater-ccw.png": { - "frame": {"x":396,"y":89,"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}, @@ -1058,7 +1058,7 @@ }, "sprites/buildings/rotater-fl.png": { - "frame": {"x":413,"y":66,"w":19,"h":19}, + "frame": {"x":68,"y":290,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -1066,7 +1066,7 @@ }, "sprites/buildings/rotater.png": { - "frame": {"x":419,"y":89,"w":19,"h":19}, + "frame": {"x":44,"y":313,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -1074,7 +1074,7 @@ }, "sprites/buildings/splitter-compact-inverse.png": { - "frame": {"x":418,"y":26,"w":19,"h":19}, + "frame": {"x":44,"y":336,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -1082,7 +1082,7 @@ }, "sprites/buildings/splitter-compact.png": { - "frame": {"x":438,"y":3,"w":19,"h":19}, + "frame": {"x":67,"y":313,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -1090,7 +1090,7 @@ }, "sprites/buildings/splitter.png": { - "frame": {"x":332,"y":44,"w":36,"h":19}, + "frame": {"x":45,"y":175,"w":36,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":36,"h":19}, @@ -1098,7 +1098,7 @@ }, "sprites/buildings/stacker.png": { - "frame": {"x":328,"y":3,"w":37,"h":19}, + "frame": {"x":3,"y":605,"w":37,"h":19}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":37,"h":19}, @@ -1106,7 +1106,7 @@ }, "sprites/buildings/trash-storage.png": { - "frame": {"x":248,"y":81,"w":35,"h":38}, + "frame": {"x":3,"y":425,"w":35,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":35,"h":38}, @@ -1114,7 +1114,7 @@ }, "sprites/buildings/trash.png": { - "frame": {"x":441,"y":26,"w":19,"h":19}, + "frame": {"x":44,"y":359,"w":19,"h":19}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":19}, @@ -1122,7 +1122,7 @@ }, "sprites/buildings/underground_belt_entry-tier2.png": { - "frame": {"x":436,"y":66,"w":19,"h":18}, + "frame": {"x":67,"y":358,"w":19,"h":18}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":1,"w":19,"h":18}, @@ -1130,7 +1130,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":459,"y":66,"w":19,"h":16}, + "frame": {"x":91,"y":198,"w":19,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":3,"w":19,"h":16}, @@ -1138,7 +1138,7 @@ }, "sprites/buildings/underground_belt_exit-tier2.png": { - "frame": {"x":469,"y":45,"w":19,"h":16}, + "frame": {"x":91,"y":218,"w":19,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":16}, @@ -1146,7 +1146,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":487,"y":23,"w":19,"h":16}, + "frame": {"x":91,"y":238,"w":19,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":19,"h":16}, @@ -1154,23 +1154,23 @@ }, "sprites/buildings/wire_crossings-merger.png": { - "frame": {"x":447,"y":108,"w":19,"h":15}, + "frame": {"x":107,"y":127,"w":14,"h":19}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":19,"h":15}, + "spriteSourceSize": {"x":5,"y":0,"w":14,"h":19}, "sourceSize": {"w":19,"h":19} }, "sprites/buildings/wire_crossings.png": { - "frame": {"x":310,"y":26,"w":19,"h":14}, + "frame": {"x":106,"y":150,"w":14,"h":19}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":5,"w":19,"h":14}, + "spriteSourceSize": {"x":5,"y":0,"w":14,"h":19}, "sourceSize": {"w":19,"h":19} }, "sprites/buildings/wire_left.png": { - "frame": {"x":243,"y":68,"w":9,"h":9}, + "frame": {"x":114,"y":238,"w":9,"h":9}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":9,"h":9}, @@ -1178,7 +1178,7 @@ }, "sprites/buildings/wire_right.png": { - "frame": {"x":284,"y":67,"w":9,"h":9}, + "frame": {"x":114,"y":251,"w":9,"h":9}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":9,"h":9}, @@ -1186,7 +1186,7 @@ }, "sprites/buildings/wire_top.png": { - "frame": {"x":680,"y":20,"w":5,"h":13}, + "frame": {"x":96,"y":476,"w":5,"h":13}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":5,"h":13}, @@ -1194,7 +1194,7 @@ }, "sprites/debug/acceptor_slot.png": { - "frame": {"x":82,"y":72,"w":6,"h":6}, + "frame": {"x":112,"y":577,"w":6,"h":6}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6}, @@ -1202,7 +1202,7 @@ }, "sprites/debug/ejector_slot.png": { - "frame": {"x":92,"y":72,"w":6,"h":6}, + "frame": {"x":112,"y":587,"w":6,"h":6}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6}, @@ -1210,7 +1210,7 @@ }, "sprites/map_overview/belt_forward.png": { - "frame": {"x":306,"y":67,"w":3,"h":3}, + "frame": {"x":44,"y":621,"w":3,"h":3}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":3,"h":3}, @@ -1218,7 +1218,7 @@ }, "sprites/map_overview/belt_left.png": { - "frame": {"x":313,"y":67,"w":3,"h":3}, + "frame": {"x":51,"y":621,"w":3,"h":3}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":3,"h":3}, @@ -1226,7 +1226,7 @@ }, "sprites/map_overview/belt_right.png": { - "frame": {"x":320,"y":67,"w":3,"h":3}, + "frame": {"x":70,"y":688,"w":3,"h":3}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":3,"h":3}, @@ -1234,7 +1234,7 @@ }, "sprites/misc/deletion_marker.png": { - "frame": {"x":256,"y":67,"w":10,"h":10}, + "frame": {"x":85,"y":184,"w":10,"h":10}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":10,"h":10}, @@ -1242,7 +1242,7 @@ }, "sprites/misc/energy_generator_overlay.png": { - "frame": {"x":172,"y":68,"w":18,"h":9}, + "frame": {"x":82,"y":68,"w":18,"h":9}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":17,"y":27,"w":18,"h":9}, @@ -1250,7 +1250,7 @@ }, "sprites/misc/hub_direction_indicator.png": { - "frame": {"x":383,"y":113,"w":3,"h":3}, + "frame": {"x":111,"y":666,"w":3,"h":3}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":3,"h":3}, @@ -1258,7 +1258,7 @@ }, "sprites/misc/lock_direction_indicator.png": { - "frame": {"x":297,"y":67,"w":5,"h":5}, + "frame": {"x":112,"y":657,"w":5,"h":5}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":5,"h":5}, @@ -1266,7 +1266,7 @@ }, "sprites/misc/slot_bad_arrow.png": { - "frame": {"x":256,"y":67,"w":10,"h":10}, + "frame": {"x":85,"y":184,"w":10,"h":10}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":10,"h":10}, @@ -1274,7 +1274,7 @@ }, "sprites/misc/slot_good_arrow.png": { - "frame": {"x":270,"y":67,"w":10,"h":10}, + "frame": {"x":93,"y":394,"w":10,"h":10}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":10,"h":10}, @@ -1282,7 +1282,7 @@ }, "sprites/misc/storage_overlay.png": { - "frame": {"x":194,"y":68,"w":18,"h":9}, + "frame": {"x":102,"y":91,"w":18,"h":9}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":18,"h":9}, @@ -1290,7 +1290,7 @@ }, "sprites/misc/waypoint.png": { - "frame": {"x":383,"y":120,"w":3,"h":3}, + "frame": {"x":111,"y":673,"w":3,"h":3}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":3,"h":3}, @@ -1298,7 +1298,7 @@ }, "sprites/misc/wires_overlay_tile.png": { - "frame": {"x":674,"y":105,"w":13,"h":13}, + "frame": {"x":94,"y":680,"w":13,"h":13}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, @@ -1306,7 +1306,7 @@ }, "sprites/wires/battery_empty.png": { - "frame": {"x":102,"y":72,"w":6,"h":6}, + "frame": {"x":112,"y":597,"w":6,"h":6}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6}, @@ -1314,7 +1314,7 @@ }, "sprites/wires/battery_full.png": { - "frame": {"x":112,"y":72,"w":6,"h":6}, + "frame": {"x":112,"y":607,"w":6,"h":6}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6}, @@ -1322,7 +1322,7 @@ }, "sprites/wires/battery_low.png": { - "frame": {"x":122,"y":72,"w":6,"h":6}, + "frame": {"x":112,"y":617,"w":6,"h":6}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6}, @@ -1330,7 +1330,7 @@ }, "sprites/wires/battery_medium.png": { - "frame": {"x":132,"y":72,"w":6,"h":6}, + "frame": {"x":112,"y":627,"w":6,"h":6}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6}, @@ -1338,7 +1338,7 @@ }, "sprites/wires/negative_energy.png": { - "frame": {"x":142,"y":72,"w":6,"h":6}, + "frame": {"x":112,"y":637,"w":6,"h":6}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6}, @@ -1346,7 +1346,7 @@ }, "sprites/wires/pin_negative_accept.png": { - "frame": {"x":327,"y":113,"w":11,"h":12}, + "frame": {"x":42,"y":451,"w":11,"h":12}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":11,"h":12}, @@ -1354,7 +1354,7 @@ }, "sprites/wires/pin_negative_eject.png": { - "frame": {"x":357,"y":113,"w":9,"h":12}, + "frame": {"x":114,"y":193,"w":9,"h":12}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":9,"h":12}, @@ -1362,7 +1362,7 @@ }, "sprites/wires/pin_positive_accept.png": { - "frame": {"x":370,"y":113,"w":9,"h":12}, + "frame": {"x":114,"y":209,"w":9,"h":12}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":9,"h":12}, @@ -1370,7 +1370,7 @@ }, "sprites/wires/pin_positive_eject.png": { - "frame": {"x":342,"y":113,"w":11,"h":12}, + "frame": {"x":112,"y":561,"w":11,"h":12}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":11,"h":12}, @@ -1378,7 +1378,7 @@ }, "sprites/wires/positive_energy.png": { - "frame": {"x":152,"y":72,"w":6,"h":6}, + "frame": {"x":112,"y":647,"w":6,"h":6}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6}, @@ -1386,7 +1386,7 @@ }, "sprites/wires/waste_piled.png": { - "frame": {"x":162,"y":72,"w":6,"h":6}, + "frame": {"x":60,"y":688,"w":6,"h":6}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":6,"h":6}, @@ -1397,8 +1397,8 @@ "version": "1.0", "image": "atlas0_10.png", "format": "RGBA8888", - "size": {"w":690,"h":128}, + "size": {"w":126,"h":698}, "scale": "0.1", - "smartupdate": "$TexturePacker:SmartUpdate:bf30498b7e1d76f2f7b9d1274acdd7cd:7220449b6cf5c4e08c60eab73ea85805:f159918d23e5952766c6d23ab52278c6$" + "smartupdate": "$TexturePacker:SmartUpdate:dfc84e4381978113df4ad0cd8a5aace9:4e9bd6f6c82aaaa8a4a583cab68dc719:f159918d23e5952766c6d23ab52278c6$" } } diff --git a/res_built/atlas/atlas0_10.png b/res_built/atlas/atlas0_10.png index 42bf1607..2fdd0720 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 7f8ef65f..b5980771 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":1945,"y":1001,"w":100,"h":126}, + "frame": {"x":1515,"y":1539,"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":1253,"y":1365,"w":100,"h":126}, + "frame": {"x":1436,"y":1712,"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":1597,"y":1494,"w":100,"h":126}, + "frame": {"x":1671,"y":969,"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":1719,"y":1624,"w":100,"h":126}, + "frame": {"x":1644,"y":1627,"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":1719,"y":1754,"w":100,"h":126}, + "frame": {"x":1644,"y":1757,"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":1805,"y":1494,"w":100,"h":126}, + "frame": {"x":1748,"y":1619,"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":1823,"y":1624,"w":100,"h":126}, + "frame": {"x":1748,"y":1749,"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":1823,"y":1754,"w":100,"h":126}, + "frame": {"x":1775,"y":1205,"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":1909,"y":1482,"w":100,"h":126}, + "frame": {"x":1879,"y":1205,"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":1927,"y":1612,"w":100,"h":126}, + "frame": {"x":1827,"y":1335,"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":1285,"y":1495,"w":100,"h":126}, + "frame": {"x":1194,"y":1863,"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":1303,"y":1625,"w":100,"h":126}, + "frame": {"x":1540,"y":1669,"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":1303,"y":1755,"w":100,"h":126}, + "frame": {"x":1332,"y":1842,"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":1273,"y":1096,"w":100,"h":126}, + "frame": {"x":1436,"y":1842,"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":1357,"y":1365,"w":100,"h":126}, + "frame": {"x":1540,"y":1799,"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":1461,"y":1364,"w":100,"h":126}, + "frame": {"x":2532,"y":589,"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":1565,"y":1364,"w":100,"h":126}, + "frame": {"x":2533,"y":719,"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":1669,"y":1364,"w":100,"h":126}, + "frame": {"x":2533,"y":849,"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":1389,"y":1495,"w":100,"h":126}, + "frame": {"x":1463,"y":978,"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":1493,"y":1494,"w":100,"h":126}, + "frame": {"x":1567,"y":977,"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":1407,"y":1625,"w":100,"h":126}, + "frame": {"x":1567,"y":1107,"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":1407,"y":1755,"w":100,"h":126}, + "frame": {"x":1671,"y":1099,"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":1511,"y":1624,"w":100,"h":126}, + "frame": {"x":1567,"y":1237,"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":1511,"y":1754,"w":100,"h":126}, + "frame": {"x":1671,"y":1229,"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":1615,"y":1624,"w":100,"h":126}, + "frame": {"x":1619,"y":1367,"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":1615,"y":1754,"w":100,"h":126}, + "frame": {"x":1619,"y":1497,"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":1701,"y":1494,"w":100,"h":126}, + "frame": {"x":1723,"y":1359,"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":1773,"y":1364,"w":100,"h":126}, + "frame": {"x":1723,"y":1489,"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":1377,"y":1130,"w":113,"h":113}, + "frame": {"x":1077,"y":1920,"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":1494,"y":1130,"w":113,"h":113}, + "frame": {"x":1842,"y":971,"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":1927,"y":1742,"w":113,"h":113}, + "frame": {"x":1959,"y":971,"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":1533,"y":2001,"w":113,"h":113}, + "frame": {"x":2310,"y":976,"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":1650,"y":2001,"w":113,"h":113}, + "frame": {"x":2334,"y":1210,"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":1767,"y":2001,"w":113,"h":113}, + "frame": {"x":2393,"y":1093,"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":1884,"y":1976,"w":113,"h":113}, + "frame": {"x":2451,"y":1210,"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":1884,"y":2093,"w":113,"h":113}, + "frame": {"x":2048,"y":1327,"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":1306,"y":2002,"w":113,"h":113}, + "frame": {"x":2165,"y":1327,"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":1306,"y":2119,"w":113,"h":113}, + "frame": {"x":2282,"y":1327,"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":1611,"y":1130,"w":113,"h":113}, + "frame": {"x":1842,"y":1088,"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":1728,"y":1130,"w":113,"h":113}, + "frame": {"x":1827,"y":1465,"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":1929,"y":1131,"w":113,"h":113}, + "frame": {"x":1852,"y":1582,"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":1271,"y":1248,"w":113,"h":113}, + "frame": {"x":1852,"y":1699,"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":1388,"y":1247,"w":113,"h":113}, + "frame": {"x":1852,"y":1816,"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":1505,"y":1247,"w":113,"h":113}, + "frame": {"x":1931,"y":1335,"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":1622,"y":1247,"w":113,"h":113}, + "frame": {"x":1944,"y":1452,"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":1739,"y":1247,"w":113,"h":113}, + "frame": {"x":1969,"y":1569,"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":1923,"y":1248,"w":113,"h":113}, + "frame": {"x":1969,"y":1686,"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":1877,"y":1365,"w":113,"h":113}, + "frame": {"x":1969,"y":1803,"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":1927,"y":1859,"w":113,"h":113}, + "frame": {"x":1959,"y":1088,"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":1115,"y":1870,"w":113,"h":113}, + "frame": {"x":1983,"y":1205,"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":1299,"y":1885,"w":113,"h":113}, + "frame": {"x":2076,"y":976,"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":1416,"y":1885,"w":113,"h":113}, + "frame": {"x":2193,"y":976,"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":1533,"y":1884,"w":113,"h":113}, + "frame": {"x":2159,"y":1093,"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":1650,"y":1884,"w":113,"h":113}, + "frame": {"x":2100,"y":1210,"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":1767,"y":1884,"w":113,"h":113}, + "frame": {"x":2217,"y":1210,"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":922,"y":1889,"w":113,"h":113}, + "frame": {"x":2276,"y":1093,"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":1423,"y":2118,"w":113,"h":113}, + "frame": {"x":2399,"y":1327,"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":1540,"y":2118,"w":113,"h":113}, + "frame": {"x":2061,"y":1444,"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":1540,"y":2352,"w":113,"h":113}, + "frame": {"x":2320,"y":1678,"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":1306,"y":2587,"w":113,"h":113}, + "frame": {"x":2554,"y":1795,"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":1423,"y":2586,"w":113,"h":113}, + "frame": {"x":2510,"y":979,"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":1540,"y":2586,"w":113,"h":113}, + "frame": {"x":1644,"y":1887,"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":1657,"y":2586,"w":113,"h":113}, + "frame": {"x":1969,"y":1920,"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":1774,"y":2561,"w":113,"h":113}, + "frame": {"x":2086,"y":1912,"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":1891,"y":2561,"w":113,"h":113}, + "frame": {"x":2203,"y":1912,"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":1104,"y":1987,"w":113,"h":113}, + "frame": {"x":2320,"y":1912,"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":1657,"y":2118,"w":113,"h":113}, + "frame": {"x":2178,"y":1444,"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":1423,"y":2235,"w":113,"h":113}, + "frame": {"x":2295,"y":1444,"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":1540,"y":2235,"w":113,"h":113}, + "frame": {"x":2086,"y":1561,"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":1657,"y":2235,"w":113,"h":113}, + "frame": {"x":2086,"y":1678,"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":1306,"y":2236,"w":113,"h":113}, + "frame": {"x":2203,"y":1561,"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":1774,"y":2210,"w":113,"h":113}, + "frame": {"x":2086,"y":1795,"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":1891,"y":2210,"w":113,"h":113}, + "frame": {"x":2203,"y":1678,"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":1774,"y":2327,"w":113,"h":113}, + "frame": {"x":2203,"y":1795,"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":1891,"y":2327,"w":113,"h":113}, + "frame": {"x":2412,"y":1444,"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":1423,"y":2352,"w":113,"h":113}, + "frame": {"x":2320,"y":1561,"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":1657,"y":2352,"w":113,"h":113}, + "frame": {"x":2320,"y":1795,"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":1306,"y":2353,"w":113,"h":113}, + "frame": {"x":2437,"y":1561,"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":1306,"y":2470,"w":113,"h":113}, + "frame": {"x":2437,"y":1678,"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":1423,"y":2469,"w":113,"h":113}, + "frame": {"x":2437,"y":1795,"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":1540,"y":2469,"w":113,"h":113}, + "frame": {"x":2516,"y":1327,"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":1657,"y":2469,"w":113,"h":113}, + "frame": {"x":2529,"y":1444,"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":1774,"y":2444,"w":113,"h":113}, + "frame": {"x":2554,"y":1561,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":13,"w":113,"h":113}, @@ -666,7 +666,7 @@ }, "sprites/belt/right_27.png": { - "frame": {"x":1891,"y":2444,"w":113,"h":113}, + "frame": {"x":2554,"y":1678,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":13,"w":113,"h":113}, @@ -674,7 +674,7 @@ }, "sprites/blueprints/advanced_processor.png": { - "frame": {"x":3,"y":1702,"w":374,"h":358}, + "frame": {"x":3,"y":1316,"w":374,"h":358}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":10,"y":12,"w":374,"h":358}, @@ -682,7 +682,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":1873,"y":135,"w":114,"h":114}, + "frame": {"x":2607,"y":3,"w":114,"h":114}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":12,"w":114,"h":114}, @@ -690,7 +690,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":1871,"y":253,"w":114,"h":114}, + "frame": {"x":959,"y":1920,"w":114,"h":114}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":12,"y":12,"w":114,"h":114}, @@ -698,7 +698,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":1283,"y":957,"w":102,"h":126}, + "frame": {"x":1330,"y":1712,"w":102,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":12,"y":0,"w":102,"h":126}, @@ -706,7 +706,7 @@ }, "sprites/blueprints/cutter-quad.png": { - "frame": {"x":735,"y":395,"w":730,"h":191}, + "frame": {"x":1485,"y":3,"w":730,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":23,"y":0,"w":730,"h":191}, @@ -714,7 +714,7 @@ }, "sprites/blueprints/cutter.png": { - "frame": {"x":381,"y":1707,"w":341,"h":191}, + "frame": {"x":1485,"y":198,"w":341,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":23,"y":0,"w":341,"h":191}, @@ -722,7 +722,7 @@ }, "sprites/blueprints/energy_generator.png": { - "frame": {"x":735,"y":590,"w":348,"h":364}, + "frame": {"x":381,"y":1319,"w":348,"h":364}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":20,"y":20,"w":348,"h":364}, @@ -730,7 +730,7 @@ }, "sprites/blueprints/miner-chainable.png": { - "frame": {"x":956,"y":2290,"w":182,"h":190}, + "frame": {"x":2163,"y":588,"w":182,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":182,"h":190}, @@ -738,7 +738,7 @@ }, "sprites/blueprints/miner.png": { - "frame": {"x":1786,"y":785,"w":182,"h":190}, + "frame": {"x":2128,"y":782,"w":182,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":182,"h":190}, @@ -746,7 +746,7 @@ }, "sprites/blueprints/mixer.png": { - "frame": {"x":3,"y":2424,"w":347,"h":191}, + "frame": {"x":1123,"y":783,"w":347,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":18,"y":0,"w":347,"h":191}, @@ -754,7 +754,7 @@ }, "sprites/blueprints/painter-double.png": { - "frame": {"x":3,"y":931,"w":384,"h":382}, + "frame": {"x":735,"y":395,"w":384,"h":382}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":384,"h":382}, @@ -762,7 +762,7 @@ }, "sprites/blueprints/painter-mirrored.png": { - "frame": {"x":1485,"y":3,"w":384,"h":192}, + "frame": {"x":2219,"y":3,"w":384,"h":192}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":384,"h":192}, @@ -778,7 +778,7 @@ }, "sprites/blueprints/painter.png": { - "frame": {"x":1483,"y":199,"w":384,"h":192}, + "frame": {"x":380,"y":1687,"w":384,"h":192}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":384,"h":192}, @@ -786,7 +786,7 @@ }, "sprites/blueprints/rotater-ccw.png": { - "frame": {"x":922,"y":1694,"w":189,"h":191}, + "frame": {"x":2218,"y":393,"w":189,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":189,"h":191}, @@ -794,15 +794,15 @@ }, "sprites/blueprints/rotater-fl.png": { - "frame": {"x":550,"y":2460,"w":189,"h":191}, + "frame": {"x":1458,"y":587,"w":189,"h":191}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":189,"h":191}, + "spriteSourceSize": {"x":0,"y":0,"w":189,"h":191}, "sourceSize": {"w":192,"h":192} }, "sprites/blueprints/rotater.png": { - "frame": {"x":763,"y":2290,"w":189,"h":191}, + "frame": {"x":1474,"y":782,"w":189,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":189,"h":191}, @@ -810,7 +810,7 @@ }, "sprites/blueprints/splitter-compact-inverse.png": { - "frame": {"x":1857,"y":395,"w":188,"h":182}, + "frame": {"x":1783,"y":589,"w":188,"h":182}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":188,"h":182}, @@ -818,7 +818,7 @@ }, "sprites/blueprints/splitter-compact.png": { - "frame": {"x":1117,"y":2484,"w":185,"h":182}, + "frame": {"x":2547,"y":393,"w":185,"h":182}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":4,"w":185,"h":182}, @@ -826,7 +826,7 @@ }, "sprites/blueprints/splitter.png": { - "frame": {"x":724,"y":1347,"w":340,"h":191}, + "frame": {"x":1830,"y":198,"w":340,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":23,"y":0,"w":340,"h":191}, @@ -834,7 +834,7 @@ }, "sprites/blueprints/stacker.png": { - "frame": {"x":726,"y":958,"w":347,"h":191}, + "frame": {"x":1112,"y":978,"w":347,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":18,"y":0,"w":347,"h":191}, @@ -842,7 +842,7 @@ }, "sprites/blueprints/trash-storage.png": { - "frame": {"x":391,"y":931,"w":331,"h":384}, + "frame": {"x":1123,"y":395,"w":331,"h":384}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":29,"y":0,"w":331,"h":384}, @@ -850,7 +850,7 @@ }, "sprites/blueprints/trash.png": { - "frame": {"x":726,"y":1694,"w":192,"h":192}, + "frame": {"x":1826,"y":393,"w":192,"h":192}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":192,"h":192}, @@ -858,7 +858,7 @@ }, "sprites/blueprints/underground_belt_entry-tier2.png": { - "frame": {"x":576,"y":2290,"w":183,"h":166}, + "frame": {"x":1432,"y":1369,"w":183,"h":166}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":26,"w":183,"h":166}, @@ -866,7 +866,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":913,"y":1542,"w":182,"h":148}, + "frame": {"x":569,"y":1883,"w":182,"h":148}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":44,"w":182,"h":148}, @@ -874,7 +874,7 @@ }, "sprites/blueprints/underground_belt_exit-tier2.png": { - "frame": {"x":724,"y":1542,"w":185,"h":148}, + "frame": {"x":380,"y":1883,"w":185,"h":148}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":185,"h":148}, @@ -882,7 +882,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":1099,"y":1534,"w":182,"h":148}, + "frame": {"x":959,"y":1768,"w":182,"h":148}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":182,"h":148}, @@ -890,23 +890,23 @@ }, "sprites/blueprints/wire_crossings-merger.png": { - "frame": {"x":380,"y":2290,"w":192,"h":136}, + "frame": {"x":2411,"y":393,"w":132,"h":192}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":192,"h":136}, + "spriteSourceSize": {"x":60,"y":0,"w":132,"h":192}, "sourceSize": {"w":192,"h":192} }, "sprites/blueprints/wire_crossings.png": { - "frame": {"x":1077,"y":1096,"w":192,"h":131}, + "frame": {"x":1857,"y":775,"w":132,"h":192}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":61,"w":192,"h":131}, + "spriteSourceSize": {"x":60,"y":0,"w":132,"h":192}, "sourceSize": {"w":192,"h":192} }, "sprites/blueprints/wire_left.png": { - "frame": {"x":423,"y":2625,"w":79,"h":79}, + "frame": {"x":2427,"y":974,"w":79,"h":79}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":47,"w":79,"h":79}, @@ -914,7 +914,7 @@ }, "sprites/blueprints/wire_right.png": { - "frame": {"x":340,"y":2625,"w":79,"h":80}, + "frame": {"x":2076,"y":1093,"w":79,"h":80}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":47,"y":46,"w":79,"h":80}, @@ -922,7 +922,7 @@ }, "sprites/blueprints/wire_top.png": { - "frame": {"x":2005,"y":3,"w":32,"h":126}, + "frame": {"x":2497,"y":782,"w":32,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":47,"y":0,"w":32,"h":126}, @@ -930,7 +930,7 @@ }, "sprites/buildings/advanced_processor.png": { - "frame": {"x":3,"y":2064,"w":373,"h":356}, + "frame": {"x":3,"y":1678,"w":373,"h":356}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":13,"w":373,"h":356}, @@ -938,7 +938,7 @@ }, "sprites/buildings/belt_left.png": { - "frame": {"x":1104,"y":2104,"w":113,"h":113}, + "frame": {"x":2437,"y":1912,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":13,"w":113,"h":113}, @@ -946,7 +946,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":1142,"y":2221,"w":113,"h":113}, + "frame": {"x":2554,"y":1912,"w":113,"h":113}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":13,"w":113,"h":113}, @@ -954,7 +954,7 @@ }, "sprites/buildings/belt_top.png": { - "frame": {"x":1945,"y":1001,"w":100,"h":126}, + "frame": {"x":1515,"y":1539,"w":100,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":100,"h":126}, @@ -970,7 +970,7 @@ }, "sprites/buildings/cutter.png": { - "frame": {"x":381,"y":1902,"w":339,"h":190}, + "frame": {"x":2174,"y":199,"w":339,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":24,"y":0,"w":339,"h":190}, @@ -978,7 +978,7 @@ }, "sprites/buildings/energy_generator.png": { - "frame": {"x":1087,"y":590,"w":346,"h":363}, + "frame": {"x":733,"y":1171,"w":346,"h":363}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":21,"y":21,"w":346,"h":363}, @@ -994,7 +994,7 @@ }, "sprites/buildings/miner-chainable.png": { - "frame": {"x":934,"y":2485,"w":179,"h":188}, + "frame": {"x":2314,"y":782,"w":179,"h":188}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":1,"w":179,"h":188}, @@ -1002,7 +1002,7 @@ }, "sprites/buildings/miner.png": { - "frame": {"x":1825,"y":590,"w":179,"h":189}, + "frame": {"x":2349,"y":589,"w":179,"h":189}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":0,"w":179,"h":189}, @@ -1010,7 +1010,7 @@ }, "sprites/buildings/mixer.png": { - "frame": {"x":1437,"y":785,"w":345,"h":190}, + "frame": {"x":1083,"y":1173,"w":345,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":19,"y":0,"w":345,"h":190}, @@ -1018,7 +1018,7 @@ }, "sprites/buildings/painter-double.png": { - "frame": {"x":3,"y":1317,"w":384,"h":381}, + "frame": {"x":3,"y":931,"w":384,"h":381}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":384,"h":381}, @@ -1026,7 +1026,7 @@ }, "sprites/buildings/painter-mirrored.png": { - "frame": {"x":1469,"y":395,"w":384,"h":191}, + "frame": {"x":735,"y":781,"w":384,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":384,"h":191}, @@ -1042,7 +1042,7 @@ }, "sprites/buildings/painter.png": { - "frame": {"x":1437,"y":590,"w":384,"h":191}, + "frame": {"x":724,"y":976,"w":384,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":384,"h":191}, @@ -1050,7 +1050,7 @@ }, "sprites/buildings/rotater-ccw.png": { - "frame": {"x":723,"y":2096,"w":187,"h":190}, + "frame": {"x":2517,"y":199,"w":187,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":187,"h":190}, @@ -1058,7 +1058,7 @@ }, "sprites/buildings/rotater-fl.png": { - "frame": {"x":914,"y":2096,"w":186,"h":190}, + "frame": {"x":1667,"y":775,"w":186,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":186,"h":190}, @@ -1066,7 +1066,7 @@ }, "sprites/buildings/rotater.png": { - "frame": {"x":724,"y":1902,"w":187,"h":190}, + "frame": {"x":768,"y":1628,"w":187,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":187,"h":190}, @@ -1074,7 +1074,7 @@ }, "sprites/buildings/splitter-compact-inverse.png": { - "frame": {"x":743,"y":2485,"w":187,"h":180}, + "frame": {"x":768,"y":1822,"w":187,"h":180}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":5,"w":187,"h":180}, @@ -1082,7 +1082,7 @@ }, "sprites/buildings/splitter-compact.png": { - "frame": {"x":1115,"y":1686,"w":184,"h":180}, + "frame": {"x":1975,"y":589,"w":184,"h":180}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":5,"w":184,"h":180}, @@ -1090,7 +1090,7 @@ }, "sprites/buildings/splitter.png": { - "frame": {"x":380,"y":2096,"w":339,"h":190}, + "frame": {"x":1483,"y":393,"w":339,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":24,"y":0,"w":339,"h":190}, @@ -1098,7 +1098,7 @@ }, "sprites/buildings/stacker.png": { - "frame": {"x":726,"y":1153,"w":345,"h":190}, + "frame": {"x":1083,"y":1367,"w":345,"h":190}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":19,"y":0,"w":345,"h":190}, @@ -1106,7 +1106,7 @@ }, "sprites/buildings/trash-storage.png": { - "frame": {"x":391,"y":1319,"w":329,"h":384}, + "frame": {"x":391,"y":931,"w":329,"h":384}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":30,"y":0,"w":329,"h":384}, @@ -1114,7 +1114,7 @@ }, "sprites/buildings/trash.png": { - "frame": {"x":354,"y":2430,"w":192,"h":191}, + "frame": {"x":2022,"y":393,"w":192,"h":191}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":1,"w":192,"h":191}, @@ -1122,7 +1122,7 @@ }, "sprites/buildings/underground_belt_entry-tier2.png": { - "frame": {"x":1068,"y":1365,"w":181,"h":165}, + "frame": {"x":959,"y":1599,"w":181,"h":165}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":27,"w":181,"h":165}, @@ -1130,7 +1130,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":1575,"y":979,"w":181,"h":147}, + "frame": {"x":1145,"y":1712,"w":181,"h":147}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":45,"w":181,"h":147}, @@ -1138,7 +1138,7 @@ }, "sprites/buildings/underground_belt_exit-tier2.png": { - "frame": {"x":1389,"y":979,"w":182,"h":147}, + "frame": {"x":1144,"y":1561,"w":182,"h":147}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":0,"w":182,"h":147}, @@ -1146,7 +1146,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":1760,"y":979,"w":181,"h":147}, + "frame": {"x":1330,"y":1561,"w":181,"h":147}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":0,"w":181,"h":147}, @@ -1154,23 +1154,23 @@ }, "sprites/buildings/wire_crossings-merger.png": { - "frame": {"x":1087,"y":957,"w":192,"h":135}, + "frame": {"x":1993,"y":773,"w":131,"h":192}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":192,"h":135}, + "spriteSourceSize": {"x":61,"y":0,"w":131,"h":192}, "sourceSize": {"w":192,"h":192} }, "sprites/buildings/wire_crossings.png": { - "frame": {"x":1075,"y":1231,"w":192,"h":130}, + "frame": {"x":1432,"y":1173,"w":131,"h":192}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":62,"w":192,"h":130}, + "spriteSourceSize": {"x":61,"y":0,"w":131,"h":192}, "sourceSize": {"w":192,"h":192} }, "sprites/buildings/wire_left.png": { - "frame": {"x":1001,"y":2006,"w":78,"h":78}, + "frame": {"x":2510,"y":1096,"w":78,"h":78}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":48,"w":78,"h":78}, @@ -1178,7 +1178,7 @@ }, "sprites/buildings/wire_right.png": { - "frame": {"x":1423,"y":2002,"w":78,"h":78}, + "frame": {"x":2627,"y":983,"w":78,"h":78}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":48,"y":48,"w":78,"h":78}, @@ -1186,7 +1186,7 @@ }, "sprites/buildings/wire_top.png": { - "frame": {"x":2008,"y":581,"w":30,"h":126}, + "frame": {"x":1298,"y":1863,"w":30,"h":126}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":48,"y":0,"w":30,"h":126}, @@ -1194,7 +1194,7 @@ }, "sprites/debug/acceptor_slot.png": { - "frame": {"x":1039,"y":1889,"w":50,"h":64}, + "frame": {"x":2607,"y":121,"w":50,"h":64}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":0,"w":50,"h":64}, @@ -1202,7 +1202,7 @@ }, "sprites/debug/ejector_slot.png": { - "frame": {"x":1774,"y":2118,"w":50,"h":64}, + "frame": {"x":2661,"y":121,"w":50,"h":64}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":0,"w":50,"h":64}, @@ -1210,7 +1210,7 @@ }, "sprites/map_overview/belt_forward.png": { - "frame": {"x":1505,"y":2002,"w":24,"h":32}, + "frame": {"x":2427,"y":1057,"w":24,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":24,"h":32}, @@ -1218,7 +1218,7 @@ }, "sprites/map_overview/belt_left.png": { - "frame": {"x":1253,"y":1495,"w":28,"h":28}, + "frame": {"x":2510,"y":1178,"w":28,"h":28}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":28,"h":28}, @@ -1226,7 +1226,7 @@ }, "sprites/map_overview/belt_right.png": { - "frame": {"x":2008,"y":711,"w":28,"h":28}, + "frame": {"x":2542,"y":1178,"w":28,"h":28}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":4,"w":28,"h":28}, @@ -1234,7 +1234,7 @@ }, "sprites/misc/deletion_marker.png": { - "frame": {"x":915,"y":2006,"w":82,"h":82}, + "frame": {"x":2637,"y":897,"w":82,"h":82}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":7,"w":82,"h":82}, @@ -1242,7 +1242,7 @@ }, "sprites/misc/energy_generator_overlay.png": { - "frame": {"x":183,"y":2619,"w":153,"h":57}, + "frame": {"x":913,"y":1538,"w":153,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":183,"y":290,"w":153,"h":57}, @@ -1250,7 +1250,7 @@ }, "sprites/misc/hub_direction_indicator.png": { - "frame": {"x":1884,"y":1884,"w":32,"h":32}, + "frame": {"x":2497,"y":912,"w":32,"h":32}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":32,"h":32}, @@ -1258,7 +1258,7 @@ }, "sprites/misc/lock_direction_indicator.png": { - "frame": {"x":1423,"y":2084,"w":48,"h":30}, + "frame": {"x":1256,"y":1993,"w":48,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":48,"h":30}, @@ -1266,7 +1266,7 @@ }, "sprites/misc/slot_bad_arrow.png": { - "frame": {"x":915,"y":2006,"w":82,"h":82}, + "frame": {"x":2637,"y":897,"w":82,"h":82}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":7,"w":82,"h":82}, @@ -1274,7 +1274,7 @@ }, "sprites/misc/slot_good_arrow.png": { - "frame": {"x":1845,"y":1130,"w":80,"h":96}, + "frame": {"x":2637,"y":797,"w":80,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":0,"w":80,"h":96}, @@ -1282,7 +1282,7 @@ }, "sprites/misc/storage_overlay.png": { - "frame": {"x":3,"y":2619,"w":176,"h":86}, + "frame": {"x":733,"y":1538,"w":176,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":4,"w":176,"h":86}, @@ -1290,7 +1290,7 @@ }, "sprites/misc/waypoint.png": { - "frame": {"x":1505,"y":2038,"w":24,"h":32}, + "frame": {"x":2455,"y":1057,"w":24,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":24,"h":32}, @@ -1298,7 +1298,7 @@ }, "sprites/misc/wires_overlay_tile.png": { - "frame": {"x":1873,"y":3,"w":128,"h":128}, + "frame": {"x":1651,"y":587,"w":128,"h":128}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, @@ -1306,7 +1306,7 @@ }, "sprites/wires/battery_empty.png": { - "frame": {"x":506,"y":2625,"w":38,"h":60}, + "frame": {"x":1525,"y":1108,"w":38,"h":60}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":2,"w":38,"h":60}, @@ -1314,7 +1314,7 @@ }, "sprites/wires/battery_full.png": { - "frame": {"x":1142,"y":2397,"w":58,"h":38}, + "frame": {"x":1651,"y":719,"w":58,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":14,"w":58,"h":38}, @@ -1322,7 +1322,7 @@ }, "sprites/wires/battery_low.png": { - "frame": {"x":1142,"y":2439,"w":58,"h":38}, + "frame": {"x":1194,"y":1993,"w":58,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":14,"w":58,"h":38}, @@ -1330,7 +1330,7 @@ }, "sprites/wires/battery_medium.png": { - "frame": {"x":1204,"y":2338,"w":58,"h":38}, + "frame": {"x":1540,"y":1929,"w":58,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":14,"w":58,"h":38}, @@ -1338,7 +1338,7 @@ }, "sprites/wires/negative_energy.png": { - "frame": {"x":1994,"y":1365,"w":42,"h":42}, + "frame": {"x":1145,"y":1863,"w":42,"h":42}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":11,"w":42,"h":42}, @@ -1346,7 +1346,7 @@ }, "sprites/wires/pin_negative_accept.png": { - "frame": {"x":1972,"y":783,"w":73,"h":105}, + "frame": {"x":2636,"y":579,"w":73,"h":105}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":27,"y":0,"w":73,"h":105}, @@ -1354,7 +1354,7 @@ }, "sprites/wires/pin_negative_eject.png": { - "frame": {"x":1856,"y":1230,"w":63,"h":100}, + "frame": {"x":1775,"y":969,"w":63,"h":100}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":32,"y":0,"w":63,"h":100}, @@ -1362,7 +1362,7 @@ }, "sprites/wires/pin_positive_accept.png": { - "frame": {"x":1232,"y":1870,"w":63,"h":100}, + "frame": {"x":1775,"y":1073,"w":63,"h":100}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":32,"y":0,"w":63,"h":100}, @@ -1370,7 +1370,7 @@ }, "sprites/wires/pin_positive_eject.png": { - "frame": {"x":1972,"y":892,"w":73,"h":105}, + "frame": {"x":2637,"y":688,"w":73,"h":105}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":27,"y":0,"w":73,"h":105}, @@ -1378,7 +1378,7 @@ }, "sprites/wires/positive_energy.png": { - "frame": {"x":1828,"y":2118,"w":42,"h":42}, + "frame": {"x":1713,"y":719,"w":42,"h":42}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":11,"w":42,"h":42}, @@ -1386,7 +1386,7 @@ }, "sprites/wires/waste_piled.png": { - "frame": {"x":1142,"y":2338,"w":58,"h":55}, + "frame": {"x":1463,"y":1108,"w":58,"h":55}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":4,"w":58,"h":55}, @@ -1397,8 +1397,8 @@ "version": "1.0", "image": "atlas0_100.png", "format": "RGBA8888", - "size": {"w":2048,"h":2708}, + "size": {"w":2735,"h":2037}, "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:bf30498b7e1d76f2f7b9d1274acdd7cd:7220449b6cf5c4e08c60eab73ea85805:f159918d23e5952766c6d23ab52278c6$" + "smartupdate": "$TexturePacker:SmartUpdate:dfc84e4381978113df4ad0cd8a5aace9:4e9bd6f6c82aaaa8a4a583cab68dc719:f159918d23e5952766c6d23ab52278c6$" } } diff --git a/res_built/atlas/atlas0_100.png b/res_built/atlas/atlas0_100.png index e268ec93..a072216d 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 188c39ab..dee62306 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":144,"y":597,"w":28,"h":32}, + "frame": {"x":452,"y":459,"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":144,"y":633,"w":28,"h":32}, + "frame": {"x":452,"y":495,"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":212,"y":763,"w":28,"h":32}, + "frame": {"x":246,"y":697,"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":378,"y":541,"w":28,"h":32}, + "frame": {"x":382,"y":624,"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":378,"y":577,"w":28,"h":32}, + "frame": {"x":350,"y":628,"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":378,"y":613,"w":28,"h":32}, + "frame": {"x":318,"y":640,"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":378,"y":649,"w":28,"h":32}, + "frame": {"x":382,"y":660,"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":378,"y":685,"w":28,"h":32}, + "frame": {"x":350,"y":664,"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":378,"y":721,"w":28,"h":32}, + "frame": {"x":346,"y":802,"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":757,"w":28,"h":32}, + "frame": {"x":378,"y":802,"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":144,"y":669,"w":28,"h":32}, + "frame": {"x":148,"y":723,"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":454,"y":363,"w":28,"h":32}, + "frame": {"x":148,"y":759,"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":733,"w":28,"h":32}, + "frame": {"x":148,"y":795,"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":148,"y":769,"w":28,"h":32}, + "frame": {"x":218,"y":536,"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":561,"w":28,"h":32}, + "frame": {"x":180,"y":712,"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":212,"y":553,"w":28,"h":32}, + "frame": {"x":180,"y":748,"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":212,"y":589,"w":28,"h":32}, + "frame": {"x":180,"y":784,"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":180,"y":733,"w":28,"h":32}, + "frame": {"x":218,"y":572,"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":180,"y":769,"w":28,"h":32}, + "frame": {"x":246,"y":625,"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":212,"y":727,"w":28,"h":32}, + "frame": {"x":246,"y":661,"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":212,"y":799,"w":28,"h":32}, + "frame": {"x":246,"y":733,"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":346,"y":546,"w":28,"h":32}, + "frame": {"x":246,"y":769,"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":346,"y":582,"w":28,"h":32}, + "frame": {"x":318,"y":568,"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":346,"y":618,"w":28,"h":32}, + "frame": {"x":350,"y":556,"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":346,"y":654,"w":28,"h":32}, + "frame": {"x":382,"y":552,"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":346,"y":690,"w":28,"h":32}, + "frame": {"x":318,"y":604,"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":346,"y":726,"w":28,"h":32}, + "frame": {"x":350,"y":592,"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":346,"y":762,"w":28,"h":32}, + "frame": {"x":382,"y":588,"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":245,"y":509,"w":30,"h":30}, + "frame": {"x":452,"y":531,"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":454,"y":399,"w":30,"h":30}, + "frame": {"x":343,"y":522,"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":312,"y":546,"w":30,"h":30}, + "frame": {"x":178,"y":610,"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":312,"y":614,"w":30,"h":30}, + "frame": {"x":212,"y":744,"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":278,"y":648,"w":30,"h":30}, + "frame": {"x":212,"y":778,"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":312,"y":648,"w":30,"h":30}, + "frame": {"x":284,"y":543,"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":244,"y":679,"w":30,"h":30}, + "frame": {"x":250,"y":591,"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":278,"y":682,"w":30,"h":30}, + "frame": {"x":284,"y":577,"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":312,"y":682,"w":30,"h":30}, + "frame": {"x":414,"y":545,"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":210,"y":693,"w":30,"h":30}, + "frame": {"x":284,"y":611,"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":453,"y":433,"w":30,"h":30}, + "frame": {"x":150,"y":485,"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":453,"y":467,"w":30,"h":30}, + "frame": {"x":150,"y":519,"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":176,"y":597,"w":30,"h":30}, + "frame": {"x":144,"y":553,"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":176,"y":631,"w":30,"h":30}, + "frame": {"x":144,"y":587,"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":176,"y":665,"w":30,"h":30}, + "frame": {"x":144,"y":621,"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":244,"y":543,"w":30,"h":30}, + "frame": {"x":144,"y":655,"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":293,"y":512,"w":30,"h":30}, + "frame": {"x":144,"y":689,"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":327,"y":512,"w":30,"h":30}, + "frame": {"x":184,"y":508,"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":361,"y":507,"w":30,"h":30}, + "frame": {"x":184,"y":542,"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":278,"y":546,"w":30,"h":30}, + "frame": {"x":178,"y":576,"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":244,"y":577,"w":30,"h":30}, + "frame": {"x":178,"y":644,"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":278,"y":580,"w":30,"h":30}, + "frame": {"x":178,"y":678,"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":312,"y":580,"w":30,"h":30}, + "frame": {"x":250,"y":523,"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":210,"y":625,"w":30,"h":30}, + "frame": {"x":250,"y":557,"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":244,"y":611,"w":30,"h":30}, + "frame": {"x":212,"y":608,"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":210,"y":659,"w":30,"h":30}, + "frame": {"x":212,"y":642,"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":244,"y":645,"w":30,"h":30}, + "frame": {"x":212,"y":676,"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":278,"y":614,"w":30,"h":30}, + "frame": {"x":212,"y":710,"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":176,"y":699,"w":30,"h":30}, + "frame": {"x":414,"y":579,"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":244,"y":713,"w":30,"h":30}, + "frame": {"x":448,"y":565,"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":429,"y":503,"w":30,"h":30}, + "frame": {"x":312,"y":778,"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":444,"y":537,"w":30,"h":30}, + "frame": {"x":414,"y":715,"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":444,"y":571,"w":30,"h":30}, + "frame": {"x":448,"y":701,"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":444,"y":605,"w":30,"h":30}, + "frame": {"x":380,"y":766,"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":444,"y":639,"w":30,"h":30}, + "frame": {"x":414,"y":749,"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":444,"y":673,"w":30,"h":30}, + "frame": {"x":448,"y":735,"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":444,"y":707,"w":30,"h":30}, + "frame": {"x":414,"y":783,"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":444,"y":741,"w":30,"h":30}, + "frame": {"x":448,"y":769,"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":244,"y":747,"w":30,"h":30}, + "frame": {"x":278,"y":645,"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":716,"w":30,"h":30}, + "frame": {"x":278,"y":679,"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":312,"y":716,"w":30,"h":30}, + "frame": {"x":278,"y":713,"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":750,"w":30,"h":30}, + "frame": {"x":278,"y":747,"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":312,"y":750,"w":30,"h":30}, + "frame": {"x":278,"y":781,"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":244,"y":781,"w":30,"h":30}, + "frame": {"x":448,"y":599,"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":278,"y":784,"w":30,"h":30}, + "frame": {"x":414,"y":613,"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":784,"w":30,"h":30}, + "frame": {"x":312,"y":676,"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":346,"y":798,"w":30,"h":30}, + "frame": {"x":312,"y":710,"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":395,"y":507,"w":30,"h":30}, + "frame": {"x":312,"y":744,"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":410,"y":541,"w":30,"h":30}, + "frame": {"x":448,"y":633,"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":410,"y":575,"w":30,"h":30}, + "frame": {"x":414,"y":647,"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":410,"y":609,"w":30,"h":30}, + "frame": {"x":346,"y":700,"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":410,"y":643,"w":30,"h":30}, + "frame": {"x":346,"y":734,"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":410,"y":677,"w":30,"h":30}, + "frame": {"x":346,"y":768,"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":410,"y":711,"w":30,"h":30}, + "frame": {"x":414,"y":681,"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":410,"y":745,"w":30,"h":30}, + "frame": {"x":448,"y":667,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":30,"h":30}, @@ -666,7 +666,7 @@ }, "sprites/belt/right_27.png": { - "frame": {"x":412,"y":779,"w":30,"h":30}, + "frame": {"x":380,"y":732,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":30,"h":30}, @@ -682,7 +682,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":446,"y":775,"w":30,"h":30}, + "frame": {"x":448,"y":803,"w":30,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":30,"h":30}, @@ -698,7 +698,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":380,"y":793,"w":28,"h":32}, + "frame": {"x":382,"y":696,"w":28,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":28,"h":32}, @@ -730,7 +730,7 @@ }, "sprites/blueprints/miner-chainable.png": { - "frame": {"x":352,"y":367,"w":47,"h":48}, + "frame": {"x":248,"y":419,"w":47,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, @@ -738,7 +738,7 @@ }, "sprites/blueprints/miner.png": { - "frame": {"x":378,"y":315,"w":47,"h":48}, + "frame": {"x":299,"y":419,"w":47,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, @@ -818,7 +818,7 @@ }, "sprites/blueprints/splitter-compact.png": { - "frame": {"x":248,"y":419,"w":47,"h":47}, + "frame": {"x":299,"y":471,"w":47,"h":47}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, @@ -874,7 +874,7 @@ }, "sprites/blueprints/underground_belt_exit-tier2.png": { - "frame": {"x":401,"y":419,"w":48,"h":38}, + "frame": {"x":144,"y":443,"w":48,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":38}, @@ -882,7 +882,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":144,"y":443,"w":48,"h":38}, + "frame": {"x":196,"y":466,"w":48,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":48,"h":38}, @@ -890,23 +890,23 @@ }, "sprites/blueprints/wire_crossings-merger.png": { - "frame": {"x":196,"y":466,"w":48,"h":35}, + "frame": {"x":352,"y":367,"w":34,"h":48}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":35}, + "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48}, "sourceSize": {"w":48,"h":48} }, "sprites/blueprints/wire_crossings.png": { - "frame": {"x":144,"y":485,"w":48,"h":34}, + "frame": {"x":378,"y":315,"w":34,"h":48}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":48,"h":34}, + "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48}, "sourceSize": {"w":48,"h":48} }, "sprites/blueprints/wire_left.png": { - "frame": {"x":412,"y":813,"w":21,"h":21}, + "frame": {"x":466,"y":373,"w":21,"h":21}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":11,"w":21,"h":21}, @@ -914,7 +914,7 @@ }, "sprites/blueprints/wire_right.png": { - "frame": {"x":437,"y":813,"w":21,"h":21}, + "frame": {"x":466,"y":398,"w":21,"h":21}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":11,"w":21,"h":21}, @@ -922,7 +922,7 @@ }, "sprites/blueprints/wire_top.png": { - "frame": {"x":279,"y":509,"w":10,"h":32}, + "frame": {"x":472,"y":259,"w":10,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":0,"w":10,"h":32}, @@ -954,7 +954,7 @@ }, "sprites/buildings/belt_top.png": { - "frame": {"x":144,"y":597,"w":28,"h":32}, + "frame": {"x":452,"y":459,"w":28,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":28,"h":32}, @@ -994,7 +994,7 @@ }, "sprites/buildings/miner-chainable.png": { - "frame": {"x":429,"y":311,"w":47,"h":48}, + "frame": {"x":350,"y":419,"w":47,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, @@ -1002,7 +1002,7 @@ }, "sprites/buildings/miner.png": { - "frame": {"x":403,"y":367,"w":47,"h":48}, + "frame": {"x":248,"y":471,"w":47,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, @@ -1082,7 +1082,7 @@ }, "sprites/buildings/splitter-compact.png": { - "frame": {"x":299,"y":419,"w":47,"h":47}, + "frame": {"x":350,"y":471,"w":47,"h":47}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, @@ -1122,7 +1122,7 @@ }, "sprites/buildings/underground_belt_entry-tier2.png": { - "frame": {"x":350,"y":419,"w":47,"h":42}, + "frame": {"x":416,"y":311,"w":47,"h":42}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":6,"w":47,"h":42}, @@ -1130,7 +1130,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":300,"y":470,"w":47,"h":38}, + "frame": {"x":401,"y":419,"w":47,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":10,"w":47,"h":38}, @@ -1138,7 +1138,7 @@ }, "sprites/buildings/underground_belt_exit-tier2.png": { - "frame": {"x":351,"y":465,"w":47,"h":38}, + "frame": {"x":401,"y":461,"w":47,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":38}, @@ -1146,7 +1146,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":402,"y":461,"w":47,"h":38}, + "frame": {"x":401,"y":503,"w":47,"h":38}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":47,"h":38}, @@ -1154,23 +1154,23 @@ }, "sprites/buildings/wire_crossings-merger.png": { - "frame": {"x":248,"y":470,"w":48,"h":35}, + "frame": {"x":390,"y":367,"w":34,"h":48}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":35}, + "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48}, "sourceSize": {"w":48,"h":48} }, "sprites/buildings/wire_crossings.png": { - "frame": {"x":144,"y":523,"w":48,"h":34}, + "frame": {"x":428,"y":357,"w":34,"h":48}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":48,"h":34}, + "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48}, "sourceSize": {"w":48,"h":48} }, "sprites/buildings/wire_left.png": { - "frame": {"x":101,"y":472,"w":21,"h":21}, + "frame": {"x":318,"y":543,"w":21,"h":21}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":11,"w":21,"h":21}, @@ -1178,7 +1178,7 @@ }, "sprites/buildings/wire_right.png": { - "frame": {"x":101,"y":497,"w":21,"h":21}, + "frame": {"x":238,"y":812,"w":21,"h":21}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":11,"w":21,"h":21}, @@ -1186,7 +1186,7 @@ }, "sprites/buildings/wire_top.png": { - "frame": {"x":472,"y":259,"w":10,"h":32}, + "frame": {"x":101,"y":472,"w":10,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":0,"w":10,"h":32}, @@ -1194,7 +1194,7 @@ }, "sprites/debug/acceptor_slot.png": { - "frame": {"x":264,"y":818,"w":14,"h":16}, + "frame": {"x":430,"y":817,"w":14,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":14,"h":16}, @@ -1202,7 +1202,7 @@ }, "sprites/debug/ejector_slot.png": { - "frame": {"x":282,"y":818,"w":14,"h":16}, + "frame": {"x":123,"y":442,"w":14,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":14,"h":16}, @@ -1210,7 +1210,7 @@ }, "sprites/map_overview/belt_forward.png": { - "frame": {"x":379,"y":107,"w":8,"h":8}, + "frame": {"x":184,"y":485,"w":8,"h":8}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":8,"h":8}, @@ -1218,7 +1218,7 @@ }, "sprites/map_overview/belt_left.png": { - "frame": {"x":379,"y":119,"w":8,"h":8}, + "frame": {"x":200,"y":820,"w":8,"h":8}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":8,"h":8}, @@ -1226,7 +1226,7 @@ }, "sprites/map_overview/belt_right.png": { - "frame": {"x":379,"y":131,"w":8,"h":8}, + "frame": {"x":379,"y":107,"w":8,"h":8}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":8,"h":8}, @@ -1234,7 +1234,7 @@ }, "sprites/misc/deletion_marker.png": { - "frame": {"x":462,"y":809,"w":22,"h":22}, + "frame": {"x":212,"y":812,"w":22,"h":22}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":22,"h":22}, @@ -1242,7 +1242,7 @@ }, "sprites/misc/energy_generator_overlay.png": { - "frame": {"x":196,"y":532,"w":40,"h":17}, + "frame": {"x":299,"y":522,"w":40,"h":17}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":45,"y":71,"w":40,"h":17}, @@ -1250,7 +1250,7 @@ }, "sprites/misc/hub_direction_indicator.png": { - "frame": {"x":379,"y":143,"w":8,"h":8}, + "frame": {"x":379,"y":119,"w":8,"h":8}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":8,"h":8}, @@ -1258,7 +1258,7 @@ }, "sprites/misc/lock_direction_indicator.png": { - "frame": {"x":123,"y":458,"w":12,"h":10}, + "frame": {"x":115,"y":494,"w":12,"h":10}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":1,"w":12,"h":10}, @@ -1266,7 +1266,7 @@ }, "sprites/misc/slot_bad_arrow.png": { - "frame": {"x":462,"y":809,"w":22,"h":22}, + "frame": {"x":212,"y":812,"w":22,"h":22}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":22,"h":22}, @@ -1274,7 +1274,7 @@ }, "sprites/misc/slot_good_arrow.png": { - "frame": {"x":144,"y":705,"w":22,"h":24}, + "frame": {"x":218,"y":508,"w":22,"h":24}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":22,"h":24}, @@ -1282,7 +1282,7 @@ }, "sprites/misc/storage_overlay.png": { - "frame": {"x":196,"y":505,"w":45,"h":23}, + "frame": {"x":101,"y":508,"w":45,"h":23}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":45,"h":23}, @@ -1290,7 +1290,7 @@ }, "sprites/misc/waypoint.png": { - "frame": {"x":101,"y":522,"w":8,"h":8}, + "frame": {"x":379,"y":131,"w":8,"h":8}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":8,"h":8}, @@ -1298,7 +1298,7 @@ }, "sprites/misc/wires_overlay_tile.png": { - "frame": {"x":144,"y":561,"w":32,"h":32}, + "frame": {"x":452,"y":423,"w":32,"h":32}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":32,"h":32}, @@ -1306,7 +1306,7 @@ }, "sprites/wires/battery_empty.png": { - "frame": {"x":196,"y":805,"w":12,"h":16}, + "frame": {"x":263,"y":815,"w":12,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":12,"h":16}, @@ -1314,7 +1314,7 @@ }, "sprites/wires/battery_full.png": { - "frame": {"x":300,"y":818,"w":16,"h":12}, + "frame": {"x":180,"y":820,"w":16,"h":12}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":16,"h":12}, @@ -1322,7 +1322,7 @@ }, "sprites/wires/battery_low.png": { - "frame": {"x":320,"y":818,"w":16,"h":12}, + "frame": {"x":123,"y":462,"w":16,"h":12}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":16,"h":12}, @@ -1330,7 +1330,7 @@ }, "sprites/wires/battery_medium.png": { - "frame": {"x":123,"y":442,"w":16,"h":12}, + "frame": {"x":115,"y":478,"w":16,"h":12}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":16,"h":12}, @@ -1346,7 +1346,7 @@ }, "sprites/wires/pin_negative_accept.png": { - "frame": {"x":148,"y":805,"w":20,"h":27}, + "frame": {"x":467,"y":311,"w":20,"h":27}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":20,"h":27}, @@ -1354,7 +1354,7 @@ }, "sprites/wires/pin_negative_eject.png": { - "frame": {"x":463,"y":501,"w":18,"h":26}, + "frame": {"x":377,"y":522,"w":18,"h":26}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":7,"y":0,"w":18,"h":26}, @@ -1370,7 +1370,7 @@ }, "sprites/wires/pin_positive_eject.png": { - "frame": {"x":172,"y":805,"w":20,"h":27}, + "frame": {"x":467,"y":342,"w":20,"h":27}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":20,"h":27}, @@ -1378,7 +1378,7 @@ }, "sprites/wires/positive_energy.png": { - "frame": {"x":126,"y":472,"w":12,"h":12}, + "frame": {"x":279,"y":815,"w":12,"h":12}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":12,"h":12}, @@ -1386,7 +1386,7 @@ }, "sprites/wires/waste_piled.png": { - "frame": {"x":244,"y":815,"w":16,"h":16}, + "frame": {"x":410,"y":817,"w":16,"h":16}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, @@ -1399,6 +1399,6 @@ "format": "RGBA8888", "size": {"w":490,"h":837}, "scale": "0.25", - "smartupdate": "$TexturePacker:SmartUpdate:bf30498b7e1d76f2f7b9d1274acdd7cd:7220449b6cf5c4e08c60eab73ea85805:f159918d23e5952766c6d23ab52278c6$" + "smartupdate": "$TexturePacker:SmartUpdate:dfc84e4381978113df4ad0cd8a5aace9:4e9bd6f6c82aaaa8a4a583cab68dc719:f159918d23e5952766c6d23ab52278c6$" } } diff --git a/res_built/atlas/atlas0_25.png b/res_built/atlas/atlas0_25.png index eed32078..c58d7738 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 f991e46a..07a7a7fc 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":737,"y":599,"w":51,"h":63}, + "frame": {"x":949,"y":270,"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":1264,"y":502,"w":51,"h":63}, + "frame": {"x":849,"y":469,"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":669,"y":816,"w":51,"h":63}, + "frame": {"x":958,"y":731,"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":1310,"y":636,"w":51,"h":63}, + "frame": {"x":850,"y":859,"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":1365,"y":632,"w":51,"h":63}, + "frame": {"x":905,"y":859,"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":1420,"y":565,"w":51,"h":63}, + "frame": {"x":853,"y":926,"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":1420,"y":632,"w":51,"h":63}, + "frame": {"x":908,"y":926,"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":908,"y":627,"w":51,"h":63}, + "frame": {"x":893,"y":1054,"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":963,"y":627,"w":51,"h":63}, + "frame": {"x":948,"y":1048,"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":908,"y":694,"w":51,"h":63}, + "frame": {"x":850,"y":1126,"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":1319,"y":498,"w":51,"h":63}, + "frame": {"x":848,"y":703,"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":1374,"y":498,"w":51,"h":63}, + "frame": {"x":467,"y":1057,"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":1429,"y":491,"w":51,"h":63}, + "frame": {"x":908,"y":408,"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":550,"y":869,"w":51,"h":63}, + "frame": {"x":910,"y":536,"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":605,"y":868,"w":51,"h":63}, + "frame": {"x":965,"y":469,"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":1466,"y":270,"w":51,"h":63}, + "frame": {"x":965,"y":536,"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":1023,"y":566,"w":51,"h":63}, + "frame": {"x":848,"y":770,"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":1078,"y":561,"w":51,"h":63}, + "frame": {"x":903,"y":664,"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":1133,"y":561,"w":51,"h":63}, + "frame": {"x":903,"y":731,"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":669,"y":749,"w":51,"h":63}, + "frame": {"x":958,"y":664,"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":660,"y":883,"w":51,"h":63}, + "frame": {"x":964,"y":798,"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":715,"y":883,"w":51,"h":63}, + "frame": {"x":740,"y":803,"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":853,"y":626,"w":51,"h":63}, + "frame": {"x":740,"y":870,"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":853,"y":693,"w":51,"h":63}, + "frame": {"x":795,"y":859,"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":724,"y":793,"w":51,"h":63}, + "frame": {"x":728,"y":1059,"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":853,"y":760,"w":51,"h":63}, + "frame": {"x":798,"y":926,"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":1310,"y":569,"w":51,"h":63}, + "frame": {"x":783,"y":1059,"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":1365,"y":565,"w":51,"h":63}, + "frame": {"x":838,"y":1059,"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":573,"y":729,"w":57,"h":57}, + "frame": {"x":827,"y":286,"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":792,"y":586,"w":57,"h":57}, + "frame": {"x":888,"y":286,"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":731,"y":732,"w":57,"h":57}, + "frame": {"x":903,"y":798,"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":908,"y":761,"w":57,"h":57}, + "frame": {"x":789,"y":1126,"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":1024,"y":694,"w":57,"h":57}, + "frame": {"x":905,"y":1121,"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":969,"y":755,"w":57,"h":57}, + "frame": {"x":905,"y":1182,"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":1030,"y":755,"w":57,"h":57}, + "frame": {"x":372,"y":1261,"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":1085,"y":689,"w":57,"h":57}, + "frame": {"x":372,"y":1322,"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":1091,"y":750,"w":57,"h":57}, + "frame": {"x":433,"y":1260,"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":1146,"y":685,"w":57,"h":57}, + "frame": {"x":433,"y":1321,"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":1100,"y":500,"w":57,"h":57}, + "frame": {"x":873,"y":347,"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":1203,"y":502,"w":57,"h":57}, + "frame": {"x":847,"y":408,"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":1460,"y":337,"w":57,"h":57}, + "frame": {"x":849,"y":536,"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":864,"y":565,"w":57,"h":57}, + "frame": {"x":831,"y":597,"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":962,"y":566,"w":57,"h":57}, + "frame": {"x":522,"y":1077,"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":1188,"y":563,"w":57,"h":57}, + "frame": {"x":904,"y":475,"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":1249,"y":569,"w":57,"h":57}, + "frame": {"x":934,"y":347,"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":792,"y":647,"w":57,"h":57}, + "frame": {"x":963,"y":408,"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":731,"y":671,"w":57,"h":57}, + "frame": {"x":892,"y":603,"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":792,"y":708,"w":57,"h":57}, + "frame": {"x":953,"y":603,"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":792,"y":769,"w":57,"h":57}, + "frame": {"x":737,"y":937,"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":779,"y":830,"w":57,"h":57}, + "frame": {"x":731,"y":998,"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":840,"y":830,"w":57,"h":57}, + "frame": {"x":792,"y":998,"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":1188,"y":624,"w":57,"h":57}, + "frame": {"x":960,"y":865,"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":1249,"y":630,"w":57,"h":57}, + "frame": {"x":963,"y":926,"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":1018,"y":633,"w":57,"h":57}, + "frame": {"x":963,"y":987,"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":963,"y":694,"w":57,"h":57}, + "frame": {"x":853,"y":993,"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":1079,"y":628,"w":57,"h":57}, + "frame": {"x":728,"y":1126,"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":1152,"y":746,"w":57,"h":57}, + "frame": {"x":469,"y":1187,"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":1241,"y":691,"w":57,"h":57}, + "frame": {"x":494,"y":1248,"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":1091,"y":811,"w":57,"h":57}, + "frame": {"x":774,"y":1187,"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":1396,"y":886,"w":57,"h":57}, + "frame": {"x":921,"y":1243,"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":1457,"y":882,"w":57,"h":57}, + "frame": {"x":921,"y":1304,"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":969,"y":816,"w":57,"h":57}, + "frame": {"x":494,"y":1370,"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":1030,"y":816,"w":57,"h":57}, + "frame": {"x":555,"y":1370,"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":1091,"y":872,"w":57,"h":57}, + "frame": {"x":616,"y":1370,"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":908,"y":822,"w":57,"h":57}, + "frame": {"x":677,"y":1370,"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":969,"y":877,"w":57,"h":57}, + "frame": {"x":738,"y":1370,"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":1302,"y":703,"w":57,"h":57}, + "frame": {"x":494,"y":1309,"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":1213,"y":752,"w":57,"h":57}, + "frame": {"x":530,"y":1187,"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":1274,"y":764,"w":57,"h":57}, + "frame": {"x":555,"y":1248,"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":1335,"y":764,"w":57,"h":57}, + "frame": {"x":555,"y":1309,"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":1363,"y":703,"w":57,"h":57}, + "frame": {"x":591,"y":1187,"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":1424,"y":699,"w":57,"h":57}, + "frame": {"x":616,"y":1248,"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":1396,"y":764,"w":57,"h":57}, + "frame": {"x":616,"y":1309,"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":1457,"y":760,"w":57,"h":57}, + "frame": {"x":652,"y":1187,"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":1152,"y":807,"w":57,"h":57}, + "frame": {"x":713,"y":1187,"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":1213,"y":813,"w":57,"h":57}, + "frame": {"x":677,"y":1248,"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":1274,"y":825,"w":57,"h":57}, + "frame": {"x":677,"y":1309,"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":1335,"y":825,"w":57,"h":57}, + "frame": {"x":738,"y":1248,"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":1396,"y":825,"w":57,"h":57}, + "frame": {"x":738,"y":1309,"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":1457,"y":821,"w":57,"h":57}, + "frame": {"x":835,"y":1193,"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":1152,"y":868,"w":57,"h":57}, + "frame": {"x":799,"y":1254,"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":1213,"y":874,"w":57,"h":57}, + "frame": {"x":799,"y":1315,"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":1274,"y":886,"w":57,"h":57}, + "frame": {"x":860,"y":1254,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":57,"h":57}, @@ -666,7 +666,7 @@ }, "sprites/belt/right_27.png": { - "frame": {"x":1335,"y":886,"w":57,"h":57}, + "frame": {"x":860,"y":1315,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":57,"h":57}, @@ -682,7 +682,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":294,"y":857,"w":58,"h":58}, + "frame": {"x":765,"y":278,"w":58,"h":58}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":5,"w":58,"h":58}, @@ -690,7 +690,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":573,"y":667,"w":58,"h":58}, + "frame": {"x":765,"y":340,"w":58,"h":58}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":5,"w":58,"h":58}, @@ -698,7 +698,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":1466,"y":203,"w":53,"h":63}, + "frame": {"x":944,"y":203,"w":53,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":53,"h":63}, @@ -714,7 +714,7 @@ }, "sprites/blueprints/cutter.png": { - "frame": {"x":1109,"y":303,"w":172,"h":96}, + "frame": {"x":194,"y":861,"w":172,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":0,"w":172,"h":96}, @@ -722,7 +722,7 @@ }, "sprites/blueprints/energy_generator.png": { - "frame": {"x":195,"y":670,"w":175,"h":183}, + "frame": {"x":199,"y":474,"w":175,"h":183}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":175,"h":183}, @@ -730,7 +730,7 @@ }, "sprites/blueprints/miner-chainable.png": { - "frame": {"x":723,"y":399,"w":92,"h":96}, + "frame": {"x":373,"y":1160,"w":92,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":92,"h":96}, @@ -738,7 +738,7 @@ }, "sprites/blueprints/miner.png": { - "frame": {"x":819,"y":386,"w":92,"h":96}, + "frame": {"x":735,"y":603,"w":92,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":92,"h":96}, @@ -746,7 +746,7 @@ }, "sprites/blueprints/mixer.png": { - "frame": {"x":1143,"y":103,"w":175,"h":96}, + "frame": {"x":556,"y":603,"w":175,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":0,"w":175,"h":96}, @@ -754,7 +754,7 @@ }, "sprites/blueprints/painter-double.png": { - "frame": {"x":373,"y":203,"w":192,"h":192}, + "frame": {"x":751,"y":3,"w":192,"h":192}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":192,"h":192}, @@ -762,7 +762,7 @@ }, "sprites/blueprints/painter-mirrored.png": { - "frame": {"x":751,"y":103,"w":192,"h":96}, + "frame": {"x":373,"y":303,"w":192,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":192,"h":96}, @@ -778,7 +778,7 @@ }, "sprites/blueprints/painter.png": { - "frame": {"x":1121,"y":3,"w":192,"h":96}, + "frame": {"x":569,"y":303,"w":192,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":192,"h":96}, @@ -786,7 +786,7 @@ }, "sprites/blueprints/rotater-ccw.png": { - "frame": {"x":369,"y":499,"w":96,"h":96}, + "frame": {"x":553,"y":703,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -794,15 +794,15 @@ }, "sprites/blueprints/rotater-fl.png": { - "frame": {"x":469,"y":499,"w":96,"h":96}, + "frame": {"x":274,"y":1161,"w":95,"h":96}, "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, + "trimmed": true, + "spriteSourceSize": {"x":0,"y":0,"w":95,"h":96}, "sourceSize": {"w":96,"h":96} }, "sprites/blueprints/rotater.png": { - "frame": {"x":569,"y":499,"w":96,"h":96}, + "frame": {"x":653,"y":703,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -810,7 +810,7 @@ }, "sprites/blueprints/splitter-compact-inverse.png": { - "frame": {"x":915,"y":389,"w":95,"h":93}, + "frame": {"x":641,"y":803,"w":95,"h":93}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":1,"w":95,"h":93}, @@ -818,7 +818,7 @@ }, "sprites/blueprints/splitter-compact.png": { - "frame": {"x":1109,"y":403,"w":93,"h":93}, + "frame": {"x":349,"y":1063,"w":93,"h":93}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":1,"w":93,"h":93}, @@ -826,7 +826,7 @@ }, "sprites/blueprints/splitter.png": { - "frame": {"x":1285,"y":303,"w":171,"h":96}, + "frame": {"x":194,"y":961,"w":171,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":0,"w":171,"h":96}, @@ -834,7 +834,7 @@ }, "sprites/blueprints/stacker.png": { - "frame": {"x":1109,"y":203,"w":175,"h":96}, + "frame": {"x":199,"y":661,"w":175,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":0,"w":175,"h":96}, @@ -842,7 +842,7 @@ }, "sprites/blueprints/trash-storage.png": { - "frame": {"x":569,"y":203,"w":167,"h":192}, + "frame": {"x":3,"y":1037,"w":167,"h":192}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":167,"h":192}, @@ -850,7 +850,7 @@ }, "sprites/blueprints/trash.png": { - "frame": {"x":374,"y":669,"w":96,"h":96}, + "frame": {"x":174,"y":1161,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -858,7 +858,7 @@ }, "sprites/blueprints/underground_belt_entry-tier2.png": { - "frame": {"x":1398,"y":403,"w":93,"h":84}, + "frame": {"x":752,"y":502,"w":93,"h":84}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":12,"w":93,"h":84}, @@ -866,7 +866,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":356,"y":869,"w":93,"h":75}, + "frame": {"x":535,"y":998,"w":93,"h":75}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":21,"w":93,"h":75}, @@ -874,7 +874,7 @@ }, "sprites/blueprints/underground_belt_exit-tier2.png": { - "frame": {"x":864,"y":486,"w":94,"h":75}, + "frame": {"x":369,"y":984,"w":94,"h":75}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":94,"h":75}, @@ -882,7 +882,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":453,"y":869,"w":93,"h":75}, + "frame": {"x":751,"y":199,"w":93,"h":75}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":93,"h":75}, @@ -890,23 +890,23 @@ }, "sprites/blueprints/wire_crossings-merger.png": { - "frame": {"x":194,"y":857,"w":96,"h":69}, + "frame": {"x":947,"y":3,"w":66,"h":96}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":69}, + "spriteSourceSize": {"x":30,"y":0,"w":66,"h":96}, "sourceSize": {"w":96,"h":96} }, "sprites/blueprints/wire_crossings.png": { - "frame": {"x":369,"y":599,"w":96,"h":66}, + "frame": {"x":472,"y":789,"w":66,"h":96}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":30,"w":96,"h":66}, + "spriteSourceSize": {"x":30,"y":0,"w":66,"h":96}, "sourceSize": {"w":96,"h":96} }, "sprites/blueprints/wire_left.png": { - "frame": {"x":1475,"y":563,"w":40,"h":40}, + "frame": {"x":921,"y":1365,"w":40,"h":40}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":23,"w":40,"h":40}, @@ -914,7 +914,7 @@ }, "sprites/blueprints/wire_right.png": { - "frame": {"x":1140,"y":628,"w":40,"h":41}, + "frame": {"x":831,"y":658,"w":40,"h":41}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":23,"y":22,"w":40,"h":41}, @@ -922,7 +922,7 @@ }, "sprites/blueprints/wire_top.png": { - "frame": {"x":1495,"y":398,"w":17,"h":63}, + "frame": {"x":446,"y":1063,"w":17,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":23,"y":0,"w":17,"h":63}, @@ -930,7 +930,7 @@ }, "sprites/buildings/advanced_processor.png": { - "frame": {"x":740,"y":203,"w":187,"h":179}, + "frame": {"x":3,"y":854,"w":187,"h":179}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":6,"w":187,"h":179}, @@ -938,7 +938,7 @@ }, "sprites/buildings/belt_left.png": { - "frame": {"x":1030,"y":877,"w":57,"h":57}, + "frame": {"x":799,"y":1376,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":6,"w":57,"h":57}, @@ -946,7 +946,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":901,"y":883,"w":57,"h":57}, + "frame": {"x":860,"y":1376,"w":57,"h":57}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":6,"w":57,"h":57}, @@ -954,7 +954,7 @@ }, "sprites/buildings/belt_top.png": { - "frame": {"x":737,"y":599,"w":51,"h":63}, + "frame": {"x":949,"y":270,"w":51,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":51,"h":63}, @@ -962,7 +962,7 @@ }, "sprites/buildings/cutter-quad.png": { - "frame": {"x":751,"y":3,"w":366,"h":96}, + "frame": {"x":373,"y":203,"w":366,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":0,"w":366,"h":96}, @@ -970,7 +970,7 @@ }, "sprites/buildings/cutter.png": { - "frame": {"x":373,"y":399,"w":171,"h":96}, + "frame": {"x":174,"y":1061,"w":171,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":0,"w":171,"h":96}, @@ -978,7 +978,7 @@ }, "sprites/buildings/energy_generator.png": { - "frame": {"x":931,"y":203,"w":174,"h":182}, + "frame": {"x":378,"y":403,"w":174,"h":182}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":10,"y":10,"w":174,"h":182}, @@ -994,7 +994,7 @@ }, "sprites/buildings/miner-chainable.png": { - "frame": {"x":1014,"y":389,"w":91,"h":95}, + "frame": {"x":753,"y":703,"w":91,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":91,"h":95}, @@ -1002,7 +1002,7 @@ }, "sprites/buildings/miner.png": { - "frame": {"x":1206,"y":403,"w":91,"h":95}, + "frame": {"x":752,"y":403,"w":91,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":91,"h":95}, @@ -1010,7 +1010,7 @@ }, "sprites/buildings/mixer.png": { - "frame": {"x":1322,"y":103,"w":174,"h":96}, + "frame": {"x":378,"y":589,"w":174,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":174,"h":96}, @@ -1026,7 +1026,7 @@ }, "sprites/buildings/painter-mirrored.png": { - "frame": {"x":947,"y":103,"w":192,"h":96}, + "frame": {"x":556,"y":403,"w":192,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":192,"h":96}, @@ -1042,7 +1042,7 @@ }, "sprites/buildings/painter.png": { - "frame": {"x":1317,"y":3,"w":192,"h":96}, + "frame": {"x":556,"y":503,"w":192,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":192,"h":96}, @@ -1050,7 +1050,7 @@ }, "sprites/buildings/rotater-ccw.png": { - "frame": {"x":474,"y":669,"w":95,"h":96}, + "frame": {"x":273,"y":1261,"w":95,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, @@ -1058,7 +1058,7 @@ }, "sprites/buildings/rotater-fl.png": { - "frame": {"x":474,"y":769,"w":95,"h":96}, + "frame": {"x":373,"y":789,"w":95,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":0,"w":95,"h":96}, @@ -1066,7 +1066,7 @@ }, "sprites/buildings/rotater.png": { - "frame": {"x":669,"y":499,"w":95,"h":96}, + "frame": {"x":542,"y":803,"w":95,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, @@ -1074,7 +1074,7 @@ }, "sprites/buildings/splitter-compact-inverse.png": { - "frame": {"x":3,"y":854,"w":94,"h":91}, + "frame": {"x":370,"y":889,"w":94,"h":91}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":94,"h":91}, @@ -1082,7 +1082,7 @@ }, "sprites/buildings/splitter-compact.png": { - "frame": {"x":1301,"y":403,"w":93,"h":91}, + "frame": {"x":538,"y":903,"w":93,"h":91}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":2,"w":93,"h":91}, @@ -1090,7 +1090,7 @@ }, "sprites/buildings/splitter.png": { - "frame": {"x":548,"y":399,"w":171,"h":96}, + "frame": {"x":378,"y":689,"w":171,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":11,"y":0,"w":171,"h":96}, @@ -1098,7 +1098,7 @@ }, "sprites/buildings/stacker.png": { - "frame": {"x":1288,"y":203,"w":174,"h":96}, + "frame": {"x":195,"y":761,"w":174,"h":96}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":174,"h":96}, @@ -1106,7 +1106,7 @@ }, "sprites/buildings/trash-storage.png": { - "frame": {"x":199,"y":474,"w":166,"h":192}, + "frame": {"x":3,"y":1233,"w":166,"h":192}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":166,"h":192}, @@ -1114,7 +1114,7 @@ }, "sprites/buildings/trash.png": { - "frame": {"x":374,"y":769,"w":96,"h":96}, + "frame": {"x":173,"y":1261,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -1122,7 +1122,7 @@ }, "sprites/buildings/underground_belt_entry-tier2.png": { - "frame": {"x":768,"y":499,"w":92,"h":83}, + "frame": {"x":848,"y":199,"w":92,"h":83}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":13,"w":92,"h":83}, @@ -1130,7 +1130,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":635,"y":671,"w":92,"h":74}, + "frame": {"x":641,"y":900,"w":92,"h":74}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":22,"w":92,"h":74}, @@ -1138,7 +1138,7 @@ }, "sprites/buildings/underground_belt_exit-tier2.png": { - "frame": {"x":573,"y":790,"w":92,"h":74}, + "frame": {"x":635,"y":978,"w":92,"h":74}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":92,"h":74}, @@ -1146,7 +1146,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":962,"y":488,"w":92,"h":74}, + "frame": {"x":632,"y":1056,"w":92,"h":74}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":92,"h":74}, @@ -1154,23 +1154,23 @@ }, "sprites/buildings/wire_crossings-merger.png": { - "frame": {"x":637,"y":599,"w":96,"h":68}, + "frame": {"x":947,"y":103,"w":66,"h":96}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":68}, + "spriteSourceSize": {"x":30,"y":0,"w":66,"h":96}, "sourceSize": {"w":96,"h":96} }, "sprites/buildings/wire_crossings.png": { - "frame": {"x":469,"y":599,"w":96,"h":66}, + "frame": {"x":468,"y":889,"w":66,"h":96}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":30,"w":96,"h":66}, + "spriteSourceSize": {"x":30,"y":0,"w":66,"h":96}, "sourceSize": {"w":96,"h":96} }, "sprites/buildings/wire_left.png": { - "frame": {"x":1475,"y":607,"w":40,"h":40}, + "frame": {"x":965,"y":1365,"w":40,"h":40}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":23,"w":40,"h":40}, @@ -1178,7 +1178,7 @@ }, "sprites/buildings/wire_right.png": { - "frame": {"x":1475,"y":651,"w":40,"h":40}, + "frame": {"x":372,"y":1383,"w":40,"h":40}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":23,"y":23,"w":40,"h":40}, @@ -1186,7 +1186,7 @@ }, "sprites/buildings/wire_top.png": { - "frame": {"x":1500,"y":103,"w":17,"h":63}, + "frame": {"x":1001,"y":203,"w":17,"h":63}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":23,"y":0,"w":17,"h":63}, @@ -1194,7 +1194,7 @@ }, "sprites/debug/acceptor_slot.png": { - "frame": {"x":634,"y":749,"w":26,"h":32}, + "frame": {"x":416,"y":1383,"w":26,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":26,"h":32}, @@ -1202,7 +1202,7 @@ }, "sprites/debug/ejector_slot.png": { - "frame": {"x":1484,"y":527,"w":26,"h":32}, + "frame": {"x":266,"y":1395,"w":26,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":26,"h":32}, @@ -1210,7 +1210,7 @@ }, "sprites/map_overview/belt_forward.png": { - "frame": {"x":1500,"y":170,"w":14,"h":16}, + "frame": {"x":446,"y":1130,"w":14,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":14,"h":16}, @@ -1218,7 +1218,7 @@ }, "sprites/map_overview/belt_left.png": { - "frame": {"x":724,"y":860,"w":15,"h":15}, + "frame": {"x":875,"y":684,"w":15,"h":15}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":1,"w":15,"h":15}, @@ -1226,7 +1226,7 @@ }, "sprites/map_overview/belt_right.png": { - "frame": {"x":743,"y":860,"w":15,"h":15}, + "frame": {"x":416,"y":1419,"w":15,"h":15}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":15,"h":15}, @@ -1234,7 +1234,7 @@ }, "sprites/misc/deletion_marker.png": { - "frame": {"x":853,"y":891,"w":42,"h":42}, + "frame": {"x":914,"y":993,"w":42,"h":42}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":3,"w":42,"h":42}, @@ -1242,7 +1242,7 @@ }, "sprites/misc/energy_generator_overlay.png": { - "frame": {"x":101,"y":902,"w":78,"h":30}, + "frame": {"x":266,"y":1361,"w":78,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":91,"y":144,"w":78,"h":30}, @@ -1250,7 +1250,7 @@ }, "sprites/misc/hub_direction_indicator.png": { - "frame": {"x":1058,"y":545,"w":16,"h":16}, + "frame": {"x":174,"y":1037,"w":16,"h":16}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, @@ -1258,7 +1258,7 @@ }, "sprites/misc/lock_direction_indicator.png": { - "frame": {"x":1495,"y":465,"w":24,"h":16}, + "frame": {"x":875,"y":664,"w":24,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":4,"w":24,"h":16}, @@ -1266,7 +1266,7 @@ }, "sprites/misc/slot_bad_arrow.png": { - "frame": {"x":853,"y":891,"w":42,"h":42}, + "frame": {"x":914,"y":993,"w":42,"h":42}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":3,"w":42,"h":42}, @@ -1274,7 +1274,7 @@ }, "sprites/misc/slot_good_arrow.png": { - "frame": {"x":770,"y":891,"w":42,"h":48}, + "frame": {"x":827,"y":347,"w":42,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":3,"y":0,"w":42,"h":48}, @@ -1282,7 +1282,7 @@ }, "sprites/misc/storage_overlay.png": { - "frame": {"x":101,"y":854,"w":89,"h":44}, + "frame": {"x":173,"y":1361,"w":89,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":89,"h":44}, @@ -1290,7 +1290,7 @@ }, "sprites/misc/waypoint.png": { - "frame": {"x":183,"y":930,"w":14,"h":16}, + "frame": {"x":1004,"y":270,"w":14,"h":16}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":14,"h":16}, @@ -1298,7 +1298,7 @@ }, "sprites/misc/wires_overlay_tile.png": { - "frame": {"x":569,"y":599,"w":64,"h":64}, + "frame": {"x":467,"y":989,"w":64,"h":64}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":64,"h":64}, @@ -1306,7 +1306,7 @@ }, "sprites/wires/battery_empty.png": { - "frame": {"x":1484,"y":491,"w":20,"h":32}, + "frame": {"x":348,"y":1361,"w":20,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":6,"y":0,"w":20,"h":32}, @@ -1314,7 +1314,7 @@ }, "sprites/wires/battery_full.png": { - "frame": {"x":1207,"y":718,"w":30,"h":21}, + "frame": {"x":921,"y":1409,"w":30,"h":21}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":6,"w":30,"h":21}, @@ -1322,7 +1322,7 @@ }, "sprites/wires/battery_low.png": { - "frame": {"x":1485,"y":695,"w":30,"h":21}, + "frame": {"x":955,"y":1409,"w":30,"h":21}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":6,"w":30,"h":21}, @@ -1330,7 +1330,7 @@ }, "sprites/wires/battery_medium.png": { - "frame": {"x":1485,"y":720,"w":30,"h":21}, + "frame": {"x":173,"y":1409,"w":30,"h":21}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":6,"w":30,"h":21}, @@ -1338,7 +1338,7 @@ }, "sprites/wires/negative_energy.png": { - "frame": {"x":294,"y":919,"w":22,"h":22}, + "frame": {"x":207,"y":1409,"w":22,"h":22}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":5,"w":22,"h":22}, @@ -1346,7 +1346,7 @@ }, "sprites/wires/pin_negative_accept.png": { - "frame": {"x":1058,"y":488,"w":38,"h":53}, + "frame": {"x":583,"y":1077,"w":38,"h":53}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":38,"h":53}, @@ -1354,7 +1354,7 @@ }, "sprites/wires/pin_negative_eject.png": { - "frame": {"x":925,"y":565,"w":33,"h":51}, + "frame": {"x":966,"y":1115,"w":33,"h":51}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":15,"y":0,"w":33,"h":51}, @@ -1362,7 +1362,7 @@ }, "sprites/wires/pin_positive_accept.png": { - "frame": {"x":816,"y":891,"w":33,"h":51}, + "frame": {"x":966,"y":1170,"w":33,"h":51}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":15,"y":0,"w":33,"h":51}, @@ -1370,7 +1370,7 @@ }, "sprites/wires/pin_positive_eject.png": { - "frame": {"x":1161,"y":500,"w":38,"h":53}, + "frame": {"x":795,"y":802,"w":38,"h":53}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":38,"h":53}, @@ -1378,7 +1378,7 @@ }, "sprites/wires/positive_energy.png": { - "frame": {"x":320,"y":919,"w":22,"h":22}, + "frame": {"x":233,"y":1409,"w":22,"h":22}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":5,"w":22,"h":22}, @@ -1386,7 +1386,7 @@ }, "sprites/wires/waste_piled.png": { - "frame": {"x":1207,"y":685,"w":30,"h":29}, + "frame": {"x":446,"y":1382,"w":30,"h":29}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":1,"w":30,"h":29}, @@ -1397,8 +1397,8 @@ "version": "1.0", "image": "atlas0_50.png", "format": "RGBA8888", - "size": {"w":1522,"h":949}, + "size": {"w":1023,"h":1437}, "scale": "0.5", - "smartupdate": "$TexturePacker:SmartUpdate:bf30498b7e1d76f2f7b9d1274acdd7cd:7220449b6cf5c4e08c60eab73ea85805:f159918d23e5952766c6d23ab52278c6$" + "smartupdate": "$TexturePacker:SmartUpdate:dfc84e4381978113df4ad0cd8a5aace9:4e9bd6f6c82aaaa8a4a583cab68dc719:f159918d23e5952766c6d23ab52278c6$" } } diff --git a/res_built/atlas/atlas0_50.png b/res_built/atlas/atlas0_50.png index f5a7db1d..020e7ecf 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 34827276..e03e4e6b 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":1358,"y":675,"w":77,"h":95}, + "frame": {"x":1103,"y":739,"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":1676,"y":102,"w":77,"h":95}, + "frame": {"x":1184,"y":737,"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":990,"y":1181,"w":77,"h":95}, + "frame": {"x":1468,"y":1511,"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":1164,"y":1568,"w":77,"h":95}, + "frame": {"x":1661,"y":1220,"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":1245,"y":1576,"w":77,"h":95}, + "frame": {"x":1580,"y":1301,"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":1314,"y":1180,"w":77,"h":95}, + "frame": {"x":1661,"y":1319,"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":1317,"y":1279,"w":77,"h":95}, + "frame": {"x":1549,"y":1400,"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":1326,"y":1378,"w":77,"h":95}, + "frame": {"x":1549,"y":1499,"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":1326,"y":1477,"w":77,"h":95}, + "frame": {"x":1558,"y":1598,"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":1326,"y":1576,"w":77,"h":95}, + "frame": {"x":1630,"y":1418,"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":1678,"y":443,"w":77,"h":95}, + "frame": {"x":1355,"y":683,"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":1358,"y":774,"w":77,"h":95}, + "frame": {"x":1445,"y":759,"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":984,"y":1329,"w":77,"h":95}, + "frame": {"x":1445,"y":858,"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":984,"y":1428,"w":77,"h":95}, + "frame": {"x":1184,"y":836,"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":985,"y":1617,"w":77,"h":95}, + "frame": {"x":1177,"y":935,"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":1066,"y":1617,"w":77,"h":95}, + "frame": {"x":1238,"y":1180,"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":1096,"y":725,"w":77,"h":95}, + "frame": {"x":1238,"y":1279,"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":1177,"y":713,"w":77,"h":95}, + "frame": {"x":843,"y":1478,"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":1177,"y":812,"w":77,"h":95}, + "frame": {"x":847,"y":1330,"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":1191,"y":991,"w":77,"h":95}, + "frame": {"x":1468,"y":1412,"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":1071,"y":1181,"w":77,"h":95}, + "frame": {"x":1588,"y":1004,"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":1152,"y":1181,"w":77,"h":95}, + "frame": {"x":1669,"y":1022,"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":1155,"y":1280,"w":77,"h":95}, + "frame": {"x":1499,"y":1074,"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":1233,"y":1180,"w":77,"h":95}, + "frame": {"x":1499,"y":1173,"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":1236,"y":1279,"w":77,"h":95}, + "frame": {"x":1499,"y":1272,"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":1245,"y":1378,"w":77,"h":95}, + "frame": {"x":1580,"y":1103,"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":1164,"y":1469,"w":77,"h":95}, + "frame": {"x":1580,"y":1202,"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":1245,"y":1477,"w":77,"h":95}, + "frame": {"x":1661,"y":1121,"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":1439,"y":840,"w":86,"h":86}, + "frame": {"x":1672,"y":554,"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":1559,"y":655,"w":86,"h":86}, + "frame": {"x":1535,"y":624,"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":1348,"y":873,"w":86,"h":86}, + "frame": {"x":1706,"y":842,"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":1155,"y":1379,"w":86,"h":86}, + "frame": {"x":1304,"y":1052,"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":1074,"y":1526,"w":86,"h":86}, + "frame": {"x":1394,"y":1052,"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":1230,"y":1090,"w":86,"h":86}, + "frame": {"x":1319,"y":1142,"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":1336,"y":963,"w":86,"h":86}, + "frame": {"x":1409,"y":1142,"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":1336,"y":1053,"w":86,"h":86}, + "frame": {"x":1319,"y":1232,"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":1426,"y":1020,"w":86,"h":86}, + "frame": {"x":1409,"y":1232,"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":1426,"y":1110,"w":86,"h":86}, + "frame": {"x":1319,"y":1322,"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":1649,"y":655,"w":86,"h":86}, + "frame": {"x":1625,"y":644,"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":1559,"y":745,"w":86,"h":86}, + "frame": {"x":1265,"y":683,"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":1649,"y":745,"w":86,"h":86}, + "frame": {"x":1265,"y":773,"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":1559,"y":835,"w":86,"h":86}, + "frame": {"x":1436,"y":669,"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":1649,"y":835,"w":86,"h":86}, + "frame": {"x":1355,"y":782,"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":984,"y":1527,"w":86,"h":86}, + "frame": {"x":1526,"y":714,"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":985,"y":1716,"w":86,"h":86}, + "frame": {"x":1616,"y":734,"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":1075,"y":1716,"w":86,"h":86}, + "frame": {"x":1526,"y":804,"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":1258,"y":775,"w":86,"h":86}, + "frame": {"x":1616,"y":824,"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":1258,"y":865,"w":86,"h":86}, + "frame": {"x":1706,"y":752,"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":1438,"y":930,"w":86,"h":86}, + "frame": {"x":1526,"y":894,"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":1101,"y":911,"w":86,"h":86}, + "frame": {"x":1616,"y":914,"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":1101,"y":1001,"w":86,"h":86}, + "frame": {"x":1706,"y":932,"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":960,"y":1091,"w":86,"h":86}, + "frame": {"x":1265,"y":863,"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":1050,"y":1091,"w":86,"h":86}, + "frame": {"x":1355,"y":872,"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":1140,"y":1091,"w":86,"h":86}, + "frame": {"x":1258,"y":953,"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":1065,"y":1280,"w":86,"h":86}, + "frame": {"x":1348,"y":962,"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":1065,"y":1370,"w":86,"h":86}, + "frame": {"x":1214,"y":1043,"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":1516,"y":1020,"w":86,"h":86}, + "frame": {"x":1409,"y":1322,"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":1516,"y":1110,"w":86,"h":86}, + "frame": {"x":928,"y":1328,"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":1497,"y":1290,"w":86,"h":86}, + "frame": {"x":1015,"y":1688,"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":1587,"y":1560,"w":86,"h":86}, + "frame": {"x":1105,"y":1687,"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":1407,"y":1650,"w":86,"h":86}, + "frame": {"x":1198,"y":1558,"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":1497,"y":1650,"w":86,"h":86}, + "frame": {"x":1195,"y":1648,"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":1587,"y":1650,"w":86,"h":86}, + "frame": {"x":1288,"y":1592,"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":1165,"y":1740,"w":86,"h":86}, + "frame": {"x":1378,"y":1592,"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":1255,"y":1675,"w":86,"h":86}, + "frame": {"x":1285,"y":1682,"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":1345,"y":1740,"w":86,"h":86}, + "frame": {"x":1375,"y":1682,"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":1528,"y":930,"w":86,"h":86}, + "frame": {"x":1018,"y":1328,"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":1618,"y":925,"w":86,"h":86}, + "frame": {"x":1108,"y":1327,"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":1606,"y":1020,"w":86,"h":86}, + "frame": {"x":928,"y":1418,"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":1606,"y":1110,"w":86,"h":86}, + "frame": {"x":1018,"y":1418,"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":1398,"y":1200,"w":86,"h":86}, + "frame": {"x":1108,"y":1417,"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":1488,"y":1200,"w":86,"h":86}, + "frame": {"x":924,"y":1508,"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":1578,"y":1200,"w":86,"h":86}, + "frame": {"x":1014,"y":1508,"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":1668,"y":1200,"w":86,"h":86}, + "frame": {"x":925,"y":1598,"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":1407,"y":1290,"w":86,"h":86}, + "frame": {"x":1015,"y":1598,"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":1407,"y":1380,"w":86,"h":86}, + "frame": {"x":925,"y":1688,"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":1407,"y":1470,"w":86,"h":86}, + "frame": {"x":1198,"y":1378,"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":1497,"y":1380,"w":86,"h":86}, + "frame": {"x":1198,"y":1468,"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":1587,"y":1290,"w":86,"h":86}, + "frame": {"x":1288,"y":1412,"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":1407,"y":1560,"w":86,"h":86}, + "frame": {"x":1378,"y":1412,"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":1497,"y":1470,"w":86,"h":86}, + "frame": {"x":1288,"y":1502,"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":1587,"y":1380,"w":86,"h":86}, + "frame": {"x":1378,"y":1502,"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":1497,"y":1560,"w":86,"h":86}, + "frame": {"x":1108,"y":1507,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":86,"h":86}, @@ -666,7 +666,7 @@ }, "sprites/belt/right_27.png": { - "frame": {"x":1587,"y":1470,"w":86,"h":86}, + "frame": {"x":1105,"y":1597,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":86,"h":86}, @@ -682,7 +682,7 @@ }, "sprites/blueprints/belt_left.png": { - "frame": {"x":1439,"y":658,"w":87,"h":87}, + "frame": {"x":3,"y":1688,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":8,"w":87,"h":87}, @@ -690,7 +690,7 @@ }, "sprites/blueprints/belt_right.png": { - "frame": {"x":1439,"y":749,"w":87,"h":87}, + "frame": {"x":94,"y":1688,"w":87,"h":87}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":8,"w":87,"h":87}, @@ -698,7 +698,7 @@ }, "sprites/blueprints/belt_top.png": { - "frame": {"x":1671,"y":3,"w":79,"h":95}, + "frame": {"x":1715,"y":653,"w":79,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":0,"w":79,"h":95}, @@ -714,7 +714,7 @@ }, "sprites/blueprints/cutter.png": { - "frame": {"x":553,"y":885,"w":256,"h":144}, + "frame": {"x":554,"y":886,"w":256,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":17,"y":0,"w":256,"h":144}, @@ -722,7 +722,7 @@ }, "sprites/blueprints/energy_generator.png": { - "frame": {"x":847,"y":299,"w":262,"h":274}, + "frame": {"x":288,"y":996,"w":262,"h":274}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":14,"w":262,"h":274}, @@ -730,7 +730,7 @@ }, "sprites/blueprints/miner-chainable.png": { - "frame": {"x":956,"y":738,"w":136,"h":143}, + "frame": {"x":1671,"y":3,"w":136,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":143}, @@ -738,7 +738,7 @@ }, "sprites/blueprints/miner.png": { - "frame": {"x":961,"y":885,"w":136,"h":143}, + "frame": {"x":1098,"y":1180,"w":136,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":143}, @@ -746,7 +746,7 @@ }, "sprites/blueprints/mixer.png": { - "frame": {"x":1411,"y":150,"w":261,"h":144}, + "frame": {"x":3,"y":1540,"w":261,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":261,"h":144}, @@ -778,7 +778,7 @@ }, "sprites/blueprints/painter.png": { - "frame": {"x":287,"y":1273,"w":288,"h":144}, + "frame": {"x":1411,"y":150,"w":288,"h":144}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":288,"h":144}, @@ -786,7 +786,7 @@ }, "sprites/blueprints/rotater-ccw.png": { - "frame": {"x":813,"y":1033,"w":143,"h":144}, + "frame": {"x":702,"y":1182,"w":143,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":144}, @@ -794,15 +794,15 @@ }, "sprites/blueprints/rotater-fl.png": { - "frame": {"x":968,"y":577,"w":143,"h":144}, + "frame": {"x":849,"y":1180,"w":142,"h":144}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":143,"h":144}, + "spriteSourceSize": {"x":0,"y":0,"w":142,"h":144}, "sourceSize": {"w":144,"h":144} }, "sprites/blueprints/rotater.png": { - "frame": {"x":843,"y":1181,"w":143,"h":144}, + "frame": {"x":700,"y":1330,"w":143,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":143,"h":144}, @@ -810,7 +810,7 @@ }, "sprites/blueprints/splitter-compact-inverse.png": { - "frame": {"x":839,"y":1623,"w":142,"h":138}, + "frame": {"x":552,"y":1478,"w":142,"h":138}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":142,"h":138}, @@ -818,7 +818,7 @@ }, "sprites/blueprints/splitter-compact.png": { - "frame": {"x":1393,"y":298,"w":139,"h":138}, + "frame": {"x":1241,"y":298,"w":139,"h":138}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":2,"w":139,"h":138}, @@ -826,7 +826,7 @@ }, "sprites/blueprints/splitter.png": { - "frame": {"x":553,"y":1033,"w":256,"h":144}, + "frame": {"x":554,"y":1034,"w":256,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":17,"y":0,"w":256,"h":144}, @@ -834,7 +834,7 @@ }, "sprites/blueprints/stacker.png": { - "frame": {"x":555,"y":590,"w":261,"h":144}, + "frame": {"x":847,"y":591,"w":261,"h":144}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":13,"y":0,"w":261,"h":144}, @@ -842,7 +842,7 @@ }, "sprites/blueprints/trash-storage.png": { - "frame": {"x":3,"y":1540,"w":250,"h":288}, + "frame": {"x":847,"y":299,"w":250,"h":288}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":21,"y":0,"w":250,"h":288}, @@ -850,7 +850,7 @@ }, "sprites/blueprints/trash.png": { - "frame": {"x":820,"y":590,"w":144,"h":144}, + "frame": {"x":554,"y":1182,"w":144,"h":144}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, @@ -858,7 +858,7 @@ }, "sprites/blueprints/underground_belt_entry-tier2.png": { - "frame": {"x":697,"y":1622,"w":138,"h":125}, + "frame": {"x":1101,"y":445,"w":138,"h":125}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":19,"w":138,"h":125}, @@ -866,7 +866,7 @@ }, "sprites/blueprints/underground_belt_entry.png": { - "frame": {"x":400,"y":1717,"w":138,"h":112}, + "frame": {"x":1527,"y":438,"w":138,"h":112}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":32,"w":138,"h":112}, @@ -874,7 +874,7 @@ }, "sprites/blueprints/underground_belt_exit-tier2.png": { - "frame": {"x":257,"y":1717,"w":139,"h":112}, + "frame": {"x":1384,"y":438,"w":139,"h":112}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":139,"h":112}, @@ -882,7 +882,7 @@ }, "sprites/blueprints/underground_belt_exit.png": { - "frame": {"x":1254,"y":444,"w":138,"h":112}, + "frame": {"x":1669,"y":438,"w":138,"h":112}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":4,"y":0,"w":138,"h":112}, @@ -890,23 +890,23 @@ }, "sprites/blueprints/wire_crossings-merger.png": { - "frame": {"x":549,"y":1622,"w":144,"h":103}, + "frame": {"x":1703,"y":150,"w":99,"h":144}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":103}, + "spriteSourceSize": {"x":45,"y":0,"w":99,"h":144}, "sourceSize": {"w":144,"h":144} }, "sprites/blueprints/wire_crossings.png": { - "frame": {"x":1399,"y":555,"w":144,"h":99}, + "frame": {"x":995,"y":1180,"w":99,"h":144}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":45,"w":144,"h":99}, + "spriteSourceSize": {"x":45,"y":0,"w":99,"h":144}, "sourceSize": {"w":144,"h":144} }, "sprites/blueprints/wire_left.png": { - "frame": {"x":1272,"y":1020,"w":60,"h":60}, + "frame": {"x":441,"y":1698,"w":60,"h":60}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":35,"w":60,"h":60}, @@ -914,7 +914,7 @@ }, "sprites/blueprints/wire_right.png": { - "frame": {"x":1272,"y":955,"w":60,"h":61}, + "frame": {"x":377,"y":1698,"w":60,"h":61}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":35,"y":34,"w":60,"h":61}, @@ -922,7 +922,7 @@ }, "sprites/blueprints/wire_top.png": { - "frame": {"x":1530,"y":658,"w":25,"h":95}, + "frame": {"x":1772,"y":298,"w":25,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":35,"y":0,"w":25,"h":95}, @@ -938,7 +938,7 @@ }, "sprites/buildings/belt_left.png": { - "frame": {"x":1435,"y":1740,"w":86,"h":86}, + "frame": {"x":1468,"y":1610,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":9,"w":86,"h":86}, @@ -946,7 +946,7 @@ }, "sprites/buildings/belt_right.png": { - "frame": {"x":1525,"y":1740,"w":86,"h":86}, + "frame": {"x":1498,"y":984,"w":86,"h":86}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":9,"w":86,"h":86}, @@ -954,7 +954,7 @@ }, "sprites/buildings/belt_top.png": { - "frame": {"x":1358,"y":675,"w":77,"h":95}, + "frame": {"x":1103,"y":739,"w":77,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":0,"w":77,"h":95}, @@ -970,7 +970,7 @@ }, "sprites/buildings/cutter.png": { - "frame": {"x":579,"y":1328,"w":256,"h":143}, + "frame": {"x":814,"y":886,"w":256,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":17,"y":0,"w":256,"h":143}, @@ -978,7 +978,7 @@ }, "sprites/buildings/energy_generator.png": { - "frame": {"x":288,"y":996,"w":261,"h":273}, + "frame": {"x":287,"y":1274,"w":261,"h":273}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":15,"y":15,"w":261,"h":273}, @@ -994,7 +994,7 @@ }, "sprites/buildings/miner-chainable.png": { - "frame": {"x":1113,"y":299,"w":136,"h":142}, + "frame": {"x":1074,"y":1034,"w":136,"h":142}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":142}, @@ -1002,7 +1002,7 @@ }, "sprites/buildings/miner.png": { - "frame": {"x":1253,"y":298,"w":136,"h":142}, + "frame": {"x":1101,"y":299,"w":136,"h":142}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":136,"h":142}, @@ -1010,7 +1010,7 @@ }, "sprites/buildings/mixer.png": { - "frame": {"x":547,"y":738,"w":260,"h":143}, + "frame": {"x":839,"y":739,"w":260,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":260,"h":143}, @@ -1026,7 +1026,7 @@ }, "sprites/buildings/painter-mirrored.png": { - "frame": {"x":287,"y":1421,"w":288,"h":144}, + "frame": {"x":555,"y":590,"w":288,"h":144}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":288,"h":144}, @@ -1042,7 +1042,7 @@ }, "sprites/buildings/painter.png": { - "frame": {"x":257,"y":1569,"w":288,"h":144}, + "frame": {"x":547,"y":738,"w":288,"h":144}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":288,"h":144}, @@ -1050,7 +1050,7 @@ }, "sprites/buildings/rotater-ccw.png": { - "frame": {"x":811,"y":738,"w":141,"h":143}, + "frame": {"x":698,"y":1478,"w":141,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":141,"h":143}, @@ -1058,7 +1058,7 @@ }, "sprites/buildings/rotater-fl.png": { - "frame": {"x":839,"y":1329,"w":141,"h":143}, + "frame": {"x":532,"y":1620,"w":141,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":1,"y":0,"w":141,"h":143}, @@ -1066,7 +1066,7 @@ }, "sprites/buildings/rotater.png": { - "frame": {"x":839,"y":1476,"w":141,"h":143}, + "frame": {"x":677,"y":1625,"w":141,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":141,"h":143}, @@ -1074,7 +1074,7 @@ }, "sprites/buildings/splitter-compact-inverse.png": { - "frame": {"x":1536,"y":298,"w":141,"h":136}, + "frame": {"x":1384,"y":298,"w":141,"h":136}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":3,"w":141,"h":136}, @@ -1082,7 +1082,7 @@ }, "sprites/buildings/splitter-compact.png": { - "frame": {"x":1115,"y":573,"w":139,"h":136}, + "frame": {"x":1529,"y":298,"w":139,"h":136}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":3,"w":139,"h":136}, @@ -1090,7 +1090,7 @@ }, "sprites/buildings/splitter.png": { - "frame": {"x":579,"y":1475,"w":256,"h":143}, + "frame": {"x":814,"y":1033,"w":256,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":17,"y":0,"w":256,"h":143}, @@ -1098,7 +1098,7 @@ }, "sprites/buildings/stacker.png": { - "frame": {"x":579,"y":1181,"w":260,"h":143}, + "frame": {"x":268,"y":1551,"w":260,"h":143}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":14,"y":0,"w":260,"h":143}, @@ -1114,7 +1114,7 @@ }, "sprites/buildings/trash.png": { - "frame": {"x":813,"y":885,"w":144,"h":144}, + "frame": {"x":552,"y":1330,"w":144,"h":144}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, @@ -1122,7 +1122,7 @@ }, "sprites/buildings/underground_belt_entry-tier2.png": { - "frame": {"x":1113,"y":445,"w":137,"h":124}, + "frame": {"x":1243,"y":440,"w":137,"h":124}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":20,"w":137,"h":124}, @@ -1130,7 +1130,7 @@ }, "sprites/buildings/underground_belt_entry.png": { - "frame": {"x":1396,"y":440,"w":137,"h":111}, + "frame": {"x":1112,"y":574,"w":137,"h":111}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":33,"w":137,"h":111}, @@ -1138,7 +1138,7 @@ }, "sprites/buildings/underground_belt_exit-tier2.png": { - "frame": {"x":1537,"y":438,"w":137,"h":111}, + "frame": {"x":1253,"y":568,"w":137,"h":111}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":137,"h":111}, @@ -1146,7 +1146,7 @@ }, "sprites/buildings/underground_belt_exit.png": { - "frame": {"x":1258,"y":560,"w":137,"h":111}, + "frame": {"x":1394,"y":554,"w":137,"h":111}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":137,"h":111}, @@ -1154,23 +1154,23 @@ }, "sprites/buildings/wire_crossings-merger.png": { - "frame": {"x":542,"y":1729,"w":144,"h":102}, + "frame": {"x":1074,"y":886,"w":99,"h":144}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":102}, + "spriteSourceSize": {"x":45,"y":0,"w":99,"h":144}, "sourceSize": {"w":144,"h":144} }, "sprites/buildings/wire_crossings.png": { - "frame": {"x":1547,"y":553,"w":144,"h":98}, + "frame": {"x":822,"y":1625,"w":99,"h":144}, "rotated": false, "trimmed": true, - "spriteSourceSize": {"x":0,"y":46,"w":144,"h":98}, + "spriteSourceSize": {"x":45,"y":0,"w":99,"h":144}, "sourceSize": {"w":144,"h":144} }, "sprites/buildings/wire_left.png": { - "frame": {"x":1696,"y":1015,"w":60,"h":60}, + "frame": {"x":1465,"y":1700,"w":60,"h":60}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":35,"w":60,"h":60}, @@ -1178,7 +1178,7 @@ }, "sprites/buildings/wire_right.png": { - "frame": {"x":1696,"y":1079,"w":60,"h":60}, + "frame": {"x":1529,"y":1700,"w":60,"h":60}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":35,"y":35,"w":60,"h":60}, @@ -1186,7 +1186,7 @@ }, "sprites/buildings/wire_top.png": { - "frame": {"x":1530,"y":757,"w":25,"h":95}, + "frame": {"x":1762,"y":554,"w":25,"h":95}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":35,"y":0,"w":25,"h":95}, @@ -1194,7 +1194,7 @@ }, "sprites/debug/acceptor_slot.png": { - "frame": {"x":1696,"y":1143,"w":38,"h":48}, + "frame": {"x":1639,"y":1597,"w":38,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":38,"h":48}, @@ -1202,7 +1202,7 @@ }, "sprites/debug/ejector_slot.png": { - "frame": {"x":1708,"y":925,"w":38,"h":48}, + "frame": {"x":1593,"y":1697,"w":38,"h":48}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":38,"h":48}, @@ -1210,7 +1210,7 @@ }, "sprites/map_overview/belt_forward.png": { - "frame": {"x":1736,"y":201,"w":20,"h":24}, + "frame": {"x":1499,"y":1371,"w":20,"h":24}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":20,"h":24}, @@ -1218,7 +1218,7 @@ }, "sprites/map_overview/belt_left.png": { - "frame": {"x":553,"y":1181,"w":22,"h":22}, + "frame": {"x":505,"y":1698,"w":22,"h":22}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":2,"w":22,"h":22}, @@ -1226,7 +1226,7 @@ }, "sprites/map_overview/belt_right.png": { - "frame": {"x":553,"y":1207,"w":22,"h":22}, + "frame": {"x":1195,"y":1738,"w":22,"h":22}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":22,"h":22}, @@ -1234,7 +1234,7 @@ }, "sprites/misc/deletion_marker.png": { - "frame": {"x":1065,"y":1460,"w":62,"h":62}, + "frame": {"x":311,"y":1698,"w":62,"h":62}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":5,"w":62,"h":62}, @@ -1242,7 +1242,7 @@ }, "sprites/misc/energy_generator_overlay.png": { - "frame": {"x":827,"y":1765,"w":116,"h":44}, + "frame": {"x":1112,"y":689,"w":116,"h":44}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":137,"y":217,"w":116,"h":44}, @@ -1250,7 +1250,7 @@ }, "sprites/misc/hub_direction_indicator.png": { - "frame": {"x":1244,"y":955,"w":24,"h":24}, + "frame": {"x":1288,"y":1378,"w":24,"h":24}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":24,"h":24}, @@ -1258,7 +1258,7 @@ }, "sprites/misc/lock_direction_indicator.png": { - "frame": {"x":1695,"y":622,"w":36,"h":24}, + "frame": {"x":1198,"y":1327,"w":36,"h":24}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":0,"y":6,"w":36,"h":24}, @@ -1266,7 +1266,7 @@ }, "sprites/misc/slot_bad_arrow.png": { - "frame": {"x":1065,"y":1460,"w":62,"h":62}, + "frame": {"x":311,"y":1698,"w":62,"h":62}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":5,"w":62,"h":62}, @@ -1274,7 +1274,7 @@ }, "sprites/misc/slot_good_arrow.png": { - "frame": {"x":1681,"y":367,"w":62,"h":72}, + "frame": {"x":245,"y":1698,"w":62,"h":72}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":5,"y":0,"w":62,"h":72}, @@ -1282,7 +1282,7 @@ }, "sprites/misc/storage_overlay.png": { - "frame": {"x":690,"y":1751,"w":133,"h":66}, + "frame": {"x":1535,"y":554,"w":133,"h":66}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":133,"h":66}, @@ -1290,7 +1290,7 @@ }, "sprites/misc/waypoint.png": { - "frame": {"x":1736,"y":229,"w":20,"h":24}, + "frame": {"x":1683,"y":1517,"w":20,"h":24}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":0,"w":20,"h":24}, @@ -1298,7 +1298,7 @@ }, "sprites/misc/wires_overlay_tile.png": { - "frame": {"x":1258,"y":675,"w":96,"h":96}, + "frame": {"x":1672,"y":298,"w":96,"h":96}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, @@ -1306,7 +1306,7 @@ }, "sprites/wires/battery_empty.png": { - "frame": {"x":1131,"y":1469,"w":29,"h":46}, + "frame": {"x":1711,"y":1418,"w":29,"h":46}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":9,"y":1,"w":29,"h":46}, @@ -1314,7 +1314,7 @@ }, "sprites/wires/battery_full.png": { - "frame": {"x":990,"y":1280,"w":44,"h":30}, + "frame": {"x":1672,"y":398,"w":44,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":10,"w":44,"h":30}, @@ -1322,7 +1322,7 @@ }, "sprites/wires/battery_low.png": { - "frame": {"x":1708,"y":977,"w":44,"h":30}, + "frame": {"x":1103,"y":838,"w":44,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":10,"w":44,"h":30}, @@ -1330,7 +1330,7 @@ }, "sprites/wires/battery_medium.png": { - "frame": {"x":1677,"y":1290,"w":44,"h":30}, + "frame": {"x":847,"y":1429,"w":44,"h":30}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":10,"w":44,"h":30}, @@ -1338,7 +1338,7 @@ }, "sprites/wires/negative_energy.png": { - "frame": {"x":947,"y":1765,"w":32,"h":32}, + "frame": {"x":1262,"y":1133,"w":32,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":8,"w":32,"h":32}, @@ -1346,7 +1346,7 @@ }, "sprites/wires/pin_negative_accept.png": { - "frame": {"x":1676,"y":201,"w":56,"h":79}, + "frame": {"x":185,"y":1688,"w":56,"h":79}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":20,"y":0,"w":56,"h":79}, @@ -1354,7 +1354,7 @@ }, "sprites/wires/pin_negative_eject.png": { - "frame": {"x":1695,"y":542,"w":49,"h":76}, + "frame": {"x":1750,"y":1022,"w":49,"h":76}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":23,"y":0,"w":49,"h":76}, @@ -1362,7 +1362,7 @@ }, "sprites/wires/pin_positive_accept.png": { - "frame": {"x":1191,"y":911,"w":49,"h":76}, + "frame": {"x":1630,"y":1517,"w":49,"h":76}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":23,"y":0,"w":49,"h":76}, @@ -1370,7 +1370,7 @@ }, "sprites/wires/pin_positive_eject.png": { - "frame": {"x":1681,"y":284,"w":56,"h":79}, + "frame": {"x":1438,"y":962,"w":56,"h":79}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":20,"y":0,"w":56,"h":79}, @@ -1378,7 +1378,7 @@ }, "sprites/wires/positive_energy.png": { - "frame": {"x":1677,"y":1324,"w":32,"h":32}, + "frame": {"x":843,"y":1577,"w":32,"h":32}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":8,"y":8,"w":32,"h":32}, @@ -1386,7 +1386,7 @@ }, "sprites/wires/waste_piled.png": { - "frame": {"x":1096,"y":824,"w":44,"h":43}, + "frame": {"x":1214,"y":1133,"w":44,"h":43}, "rotated": false, "trimmed": true, "spriteSourceSize": {"x":2,"y":2,"w":44,"h":43}, @@ -1397,8 +1397,8 @@ "version": "1.0", "image": "atlas0_75.png", "format": "RGBA8888", - "size": {"w":1759,"h":1834}, + "size": {"w":1810,"h":1778}, "scale": "0.75", - "smartupdate": "$TexturePacker:SmartUpdate:bf30498b7e1d76f2f7b9d1274acdd7cd:7220449b6cf5c4e08c60eab73ea85805:f159918d23e5952766c6d23ab52278c6$" + "smartupdate": "$TexturePacker:SmartUpdate:dfc84e4381978113df4ad0cd8a5aace9:4e9bd6f6c82aaaa8a4a583cab68dc719:f159918d23e5952766c6d23ab52278c6$" } } diff --git a/res_built/atlas/atlas0_75.png b/res_built/atlas/atlas0_75.png index 066c604b..d865f650 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 87eacd70..8b4691d0 100644 --- a/res_raw/atlas.tps +++ b/res_raw/atlas.tps @@ -449,6 +449,7 @@ sprites/blueprints/miner-chainable.png sprites/blueprints/miner.png sprites/blueprints/rotater-ccw.png + sprites/blueprints/rotater-fl.png sprites/blueprints/rotater.png sprites/blueprints/splitter-compact-inverse.png sprites/blueprints/splitter-compact.png @@ -459,6 +460,7 @@ sprites/blueprints/underground_belt_exit.png sprites/buildings/miner-chainable.png sprites/buildings/rotater-ccw.png + sprites/buildings/rotater-fl.png sprites/buildings/splitter-compact-inverse.png sprites/buildings/splitter-compact.png sprites/buildings/underground_belt_entry-tier2.png @@ -566,21 +568,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 diff --git a/res_raw/sprites/blueprints/rotater-fl.png b/res_raw/sprites/blueprints/rotater-fl.png index ca5876a3..25a66453 100644 Binary files a/res_raw/sprites/blueprints/rotater-fl.png and b/res_raw/sprites/blueprints/rotater-fl.png differ diff --git a/res_raw/sprites/blueprints/wire_crossings-merger.png b/res_raw/sprites/blueprints/wire_crossings-merger.png index 82d9862c..f58ae10e 100644 Binary files a/res_raw/sprites/blueprints/wire_crossings-merger.png and b/res_raw/sprites/blueprints/wire_crossings-merger.png differ diff --git a/res_raw/sprites/blueprints/wire_crossings.png b/res_raw/sprites/blueprints/wire_crossings.png index 113af179..a1d44678 100644 Binary files a/res_raw/sprites/blueprints/wire_crossings.png and b/res_raw/sprites/blueprints/wire_crossings.png differ diff --git a/res_raw/sprites/buildings/wire_crossings-merger.png b/res_raw/sprites/buildings/wire_crossings-merger.png index 42cef3f8..ee0db056 100644 Binary files a/res_raw/sprites/buildings/wire_crossings-merger.png and b/res_raw/sprites/buildings/wire_crossings-merger.png differ diff --git a/res_raw/sprites/buildings/wire_crossings.png b/res_raw/sprites/buildings/wire_crossings.png index 814349ba..243fe45d 100644 Binary files a/res_raw/sprites/buildings/wire_crossings.png and b/res_raw/sprites/buildings/wire_crossings.png differ diff --git a/res_raw/sprites/misc/lock_direction_indicator.png b/res_raw/sprites/misc/lock_direction_indicator.png deleted file mode 100644 index fe693ba2..00000000 Binary files a/res_raw/sprites/misc/lock_direction_indicator.png and /dev/null differ diff --git a/src/css/common.scss b/src/css/common.scss index b2078fa2..5f599716 100644 --- a/src/css/common.scss +++ b/src/css/common.scss @@ -73,6 +73,9 @@ body { scrollbar-face-color: #888; scrollbar-track-color: rgba(255, 255, 255, 0.1); + // Firefox + scrollbar-color: #cdd0d4 rgba(#000, 0.05); + overflow: hidden; @include Text; @@ -369,7 +372,7 @@ canvas { } .pressed { - transform: scale(0.95) !important; + transform: scale(0.98) !important; animation: none !important; } diff --git a/src/css/ingame_hud/buildings_toolbar.scss b/src/css/ingame_hud/buildings_toolbar.scss index 65923db8..d394106d 100644 --- a/src/css/ingame_hud/buildings_toolbar.scss +++ b/src/css/ingame_hud/buildings_toolbar.scss @@ -29,7 +29,6 @@ .buildings { display: grid; grid-auto-flow: column; - @include S(margin-bottom, 2px); .building { color: $accentColorDark; @@ -43,7 +42,7 @@ @include S(width, 35px); @include S(height, 40px); - background: center center / 70% no-repeat; + background: center center / 65% no-repeat; &:not(.unlocked) { @include S(width, 20px); diff --git a/src/css/ingame_hud/dialogs.scss b/src/css/ingame_hud/dialogs.scss index d72265e7..9c9ce7a4 100644 --- a/src/css/ingame_hud/dialogs.scss +++ b/src/css/ingame_hud/dialogs.scss @@ -55,6 +55,7 @@ .dialogInner { opacity: 1; } + backdrop-filter: blur(D(3px)); } .dialogInner { diff --git a/src/css/states/about.scss b/src/css/states/about.scss index aeac1e38..02025e03 100644 --- a/src/css/states/about.scss +++ b/src/css/states/about.scss @@ -1,6 +1,23 @@ #state_AboutState { > .container .content { + @include S(max-width, 600px); @include PlainText; + padding: 0; + background: transparent; + } + + .head { + @include S(padding, 20px); + + img { + display: block; + margin: 0 auto; + @include S(max-width, 200px); + } + } + + .text { + @include S(margin, 10px); } a { diff --git a/src/css/states/changelog.scss b/src/css/states/changelog.scss index 109f1d36..1daa5f04 100644 --- a/src/css/states/changelog.scss +++ b/src/css/states/changelog.scss @@ -1,5 +1,6 @@ #state_ChangelogState { .content { + @include S(max-width, 800px); display: flex; flex-direction: column; } diff --git a/src/css/states/main_menu.scss b/src/css/states/main_menu.scss index 07a47c2e..d61bc9d0 100644 --- a/src/css/states/main_menu.scss +++ b/src/css/states/main_menu.scss @@ -55,7 +55,7 @@ opacity: 0; display: none; transform: translate(50%, 50%); - filter: blur(10px); + filter: blur(D(3px)); $opacity: 0.2; &.loaded { @@ -178,6 +178,10 @@ transform: translateX(50%) rotate(-7deg) scale(1.1); } } + + @include DarkThemeOverride { + color: $colorBlueBright; + } } } @@ -201,33 +205,6 @@ flex-grow: 1; @include S(margin-bottom, 10px); } - - .contest { - flex-grow: 1; - background: rgb(32, 187, 166); - @include S(padding, 15px); - - h3 { - @include Heading; - color: #fff; - font-weight: bold; - text-transform: uppercase; - @include S(margin-bottom, 5px); - } - p { - color: #fff; - @include Text; - strong { - font-weight: bold; - } - @include S(margin-bottom, 5px); - } - - button { - background: #fff; - color: #333538; - } - } } .mainContainer { diff --git a/src/css/states/settings.scss b/src/css/states/settings.scss index f06c9b31..5a35a9a2 100644 --- a/src/css/states/settings.scss +++ b/src/css/states/settings.scss @@ -1,113 +1,188 @@ #state_SettingsState { - .content { - .versionbar { - @include S(margin-top, 20px); - @include SuperSmallText; - display: grid; - align-items: center; - grid-template-columns: 1fr auto; - .buildVersion { - display: flex; - flex-direction: column; - color: #aaadaf; + $colorCategoryButton: #eee; + $colorCategoryButtonSelected: #5f748b; + + .container .content { + display: flex; + overflow-y: scroll; + + .categoryContainer { + width: 100%; + + .category { + display: none; + + &.active { + display: block; + } + + .setting { + @include S(padding, 10px); + background: #eeeff5; + @include S(border-radius, $globalBorderRadius); + @include S(margin-bottom, 5px); + + label { + text-transform: uppercase; + @include Text; + } + + .desc { + @include S(margin-top, 5px); + @include SuperSmallText; + color: #aaadb2; + } + + > .row { + display: grid; + align-items: center; + grid-template-columns: 1fr auto; + } + + &.disabled { + // opacity: 0.3; + pointer-events: none; + * { + pointer-events: none !important; + cursor: default !important; + } + position: relative; + .standaloneOnlyHint { + @include PlainText; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + pointer-events: all; + display: flex; + align-items: center; + justify-content: center; + background: rgba(#fff, 0.5); + text-transform: uppercase; + color: $colorRedBright; + } + } + + .value.enum { + background: #fff; + @include PlainText; + display: flex; + align-items: flex-start; + pointer-events: all; + cursor: pointer; + justify-content: center; + @include S(min-width, 100px); + @include S(border-radius, $globalBorderRadius); + @include S(padding, 4px); + @include S(padding-right, 15px); + + background: #fff uiResource("icons/enum_selector.png") calc(100% - #{D(5px)}) + calc(50% + #{D(1px)}) / #{D(15px)} no-repeat; + + transition: background-color 0.12s ease-in-out; + &:hover { + background-color: #fafafa; + } + } + } } } - button.about { - background-color: $colorGreenBright; - } + .sidebar { + display: flex; + flex-direction: column; + @include S(min-width, 210px); + @include S(max-width, 320px); + width: 30%; + height: 100%; + position: sticky; + top: 0; + @include S(margin-left, 20px); + @include S(margin-right, 32px); - .setting { - @include S(padding, 10px); - background: #eeeff5; - @include S(border-radius, $globalBorderRadius); - @include S(margin-bottom, 5px); - - label { - text-transform: uppercase; - @include Text; + .other { + margin-top: auto; } - .desc { - @include S(margin-top, 5px); + button { + @include S(margin-top, 4px); + width: calc(100% - #{D(20px)}); + text-align: start; + + &::after { + content: unset; + } + } + + button.categoryButton, + button.about { + background-color: $colorCategoryButton; + color: #777a7f; + + &.active { + background-color: $colorCategoryButtonSelected; + color: #fff; + + &:hover { + opacity: 1; + } + } + + &.pressed { + transform: none !important; + } + } + + .versionbar { + @include S(margin-top, 20px); @include SuperSmallText; - color: #aaadb2; - } - - > .row { display: grid; align-items: center; grid-template-columns: 1fr auto; - } - - &.disabled { - // opacity: 0.3; - pointer-events: none; - * { - pointer-events: none !important; - cursor: default !important; - } - position: relative; - .standaloneOnlyHint { - @include PlainText; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - pointer-events: all; + .buildVersion { display: flex; - align-items: center; - justify-content: center; - background: rgba(#fff, 0.5); - text-transform: uppercase; - color: $colorRedBright; - } - } - - .value.enum { - background: #fff; - @include PlainText; - display: flex; - align-items: flex-start; - pointer-events: all; - cursor: pointer; - justify-content: center; - @include S(min-width, 100px); - @include S(border-radius, $globalBorderRadius); - @include S(padding, 4px); - @include S(padding-right, 15px); - - background: #fff uiResource("icons/enum_selector.png") calc(100% - #{D(5px)}) - calc(50% + #{D(1px)}) / #{D(15px)} no-repeat; - - transition: background-color 0.12s ease-in-out; - &:hover { - background-color: #fafafa; + flex-direction: column; + color: #aaadaf; } } } } @include DarkThemeOverride { - .content { - .setting { - background: darken($darkModeGameBackground, 10); + .container .content { + .sidebar { + button.categoryButton, + button.about { + background-color: #3f3f47; - .value.enum { - // dirty but works - filter: invert(0.85); - color: #222; - } - - .value.checkbox { - background-color: #74767b; - - &.checked { + &.active { background-color: $colorBlueBright; } } } + + .categoryContainer { + .category { + .setting { + background: darken($darkModeGameBackground, 10); + + .value.enum { + // dirty but works + filter: invert(0.78) sepia(40%) hue-rotate(190deg); + color: #222; + } + + .value.checkbox { + background-color: #74767b; + + &.checked { + background-color: $colorBlueBright; + } + } + } + } + } } } } diff --git a/src/css/textual_game_state.scss b/src/css/textual_game_state.scss index a8d7a31f..54c5dbb3 100644 --- a/src/css/textual_game_state.scss +++ b/src/css/textual_game_state.scss @@ -1,24 +1,18 @@ .gameState.textualState { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - $padding: 15px; - - .headerBar, - > .container .content { - @include S(width, 500px); - } + display: grid; + grid-template-rows: auto 1fr; + box-sizing: border-box; + @include S(padding, 32px); + height: 100vh; .headerBar { display: flex; - align-items: center; - justify-content: flex-start; h1 { - display: flex; - pointer-events: all; + display: grid; + grid-template-columns: auto 1fr; align-items: center; + pointer-events: all; cursor: pointer; @include SuperHeading; text-transform: uppercase; @@ -39,11 +33,17 @@ } > .container { + display: flex; + justify-content: center; + width: 100%; + overflow-y: auto; + > .content { + width: 100%; background: #fff; @include S(border-radius, $globalBorderRadius); @include S(padding, 10px); - height: calc(80vh - #{D(60px)}); + height: 100%; overflow-y: auto; box-sizing: border-box; pointer-events: all; diff --git a/src/js/application.js b/src/js/application.js index 1726bd2d..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 @@ -385,7 +387,7 @@ export class Application { } const scale = this.getEffectiveUiScale(); - waitNextFrame().then(() => document.documentElement.style.setProperty("--ui-scale", scale)); + waitNextFrame().then(() => document.documentElement.style.setProperty("--ui-scale", `${scale}`)); window.focus(); } } diff --git a/src/js/changelog.js b/src/js/changelog.js index ad91eee9..e908d062 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -4,8 +4,10 @@ export const CHANGELOG = [ date: "unreleased", entries: [ "WIRES", + "Reworked menu UI design (by dengr1605)", "Allow holding ALT in belt planner to reverse direction (by jakobhellermann)", "Clear cursor when trying to pipette the same building twice (by hexy)", + "Fixed level 18 stacker bug: If you experienced it already, you know it, if not, I don't want to spoiler (by hexy)", "Added keybinding to close menus (by isaisstillalive / Sandwichs-del)", "Fix rare crash regarding the buildings toolbar (by isaisstillalive)", "Fixed some phrases (by EnderDoom77)", @@ -24,7 +26,7 @@ export const CHANGELOG = [ version: "1.1.19", date: "02.07.2020", entries: [ - "There are now notifications every 15 minutes in the demo version to buy the full version (For further details and the reason, check the #surveys channel in the discord)", + "There are now notifications every 15 minutes in the demo version to buy the full version (For further details and the reason, check the #surveys channel in the Discord)", "I'm still working on the wires update, I hope to release it mid july!", ], }, @@ -151,7 +153,7 @@ export const CHANGELOG = [ version: "1.1.10", date: "12.06.2020", entries: [ - "There are now linux builds on steam! Please report any issues in the discord!", + "There are now linux builds on steam! Please report any issues in the Discord!", "Steam cloud saves are now available!", "Added and update more translations (Big thank you to all translators!)", "Prevent invalid connection if existing underground tunnel entrance exists (by jaysc)", @@ -221,7 +223,7 @@ export const CHANGELOG = [ entries: [ "The official trailer is now ready! Check it out here!", "The steam page is now live!", - "Experimental linux builds are now available! Please give me feedback on them in the discord", + "Experimental linux builds are now available! Please give me feedback on them in the Discord", "Allow hovering pinned shapes to enlarge them", "Allow deselecting blueprints with right click and 'Q'", "Move default key for deleting from 'X' to 'DEL'", diff --git a/src/js/core/animation_frame.js b/src/js/core/animation_frame.js index 0e921174..eeefb4b0 100644 --- a/src/js/core/animation_frame.js +++ b/src/js/core/animation_frame.js @@ -14,12 +14,11 @@ export class AnimationFrame { this.frameEmitted = new Signal(); this.bgFrameEmitted = new Signal(); - this.lastTime = null; - this.bgLastTime = null; + this.lastTime = performance.now(); + this.bgLastTime = performance.now(); this.boundMethod = this.handleAnimationFrame.bind(this); - /** @type {Worker} */ this.backgroundWorker = new BackgroundAnimationFrameEmitterWorker(); this.backgroundWorker.addEventListener("error", err => { logger.error("Error in background fps worker:", err); @@ -27,22 +26,16 @@ export class AnimationFrame { this.backgroundWorker.addEventListener("message", this.handleBackgroundTick.bind(this)); } - /** - * - * @param {MessageEvent} event - */ - handleBackgroundTick(event) { + handleBackgroundTick() { const time = performance.now(); - if (!this.bgLastTime) { - // First update, first delta is always 16ms - this.bgFrameEmitted.dispatch(1000 / 60); - } else { - let dt = time - this.bgLastTime; - if (dt > maxDtMs) { - dt = resetDtMs; - } - this.bgFrameEmitted.dispatch(dt); + + let dt = time - this.bgLastTime; + + if (dt > maxDtMs) { + dt = resetDtMs; } + + this.bgFrameEmitted.dispatch(dt); this.bgLastTime = time; } @@ -52,18 +45,15 @@ export class AnimationFrame { } handleAnimationFrame(time) { - if (!this.lastTime) { - // First update, first delta is always 16ms - this.frameEmitted.dispatch(1000 / 60); - } else { - let dt = time - this.lastTime; - if (dt > maxDtMs) { - // warn(this, "Clamping", dt, "to", resetDtMs); - dt = resetDtMs; - } - this.frameEmitted.dispatch(dt); + let dt = time - this.lastTime; + + if (dt > maxDtMs) { + dt = resetDtMs; } + + this.frameEmitted.dispatch(dt); this.lastTime = time; + window.requestAnimationFrame(this.boundMethod); } } diff --git a/src/js/core/async_compression.js b/src/js/core/async_compression.js index b11f8fd5..d682ad7f 100644 --- a/src/js/core/async_compression.js +++ b/src/js/core/async_compression.js @@ -1,7 +1,9 @@ // @ts-ignore import CompressionWorker from "../webworkers/compression.worker"; + import { createLogger } from "./logging"; -import { compressX64 } from "./lzstring"; +import { round2Digits } from "./utils"; + const logger = createLogger("async_compression"); export let compressionPrefix = String.fromCodePoint(1); @@ -35,7 +37,6 @@ if (!checkCryptPrefix(compressionPrefix)) { class AsynCompression { constructor() { - /** @type {Worker} */ this.worker = new CompressionWorker(); this.currentJobId = 1000; @@ -52,7 +53,7 @@ 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"); const resolver = jobData.resolver; delete this.currentJobs[jobId]; resolver(result); @@ -76,6 +77,7 @@ class AsynCompression { * @param {string} text */ compressFileAsync(text) { + logger.log("Compressing", text.length, "bytes async"); return this.internalQueueJob("compressFile", { text, compressionPrefix, @@ -100,6 +102,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 ff99d23c..b3a7671b 100644 --- a/src/js/core/background_resources_loader.js +++ b/src/js/core/background_resources_loader.js @@ -7,6 +7,7 @@ import { createLogger } from "./logging"; import { Signal } from "./signal"; import { SOUNDS, MUSIC } from "../platform/sound"; import { AtlasDefinition, atlasFiles } from "./atlas_definitions"; +import { initBuildingCodesAfterResourcesLoaded } from "../game/meta_building_registry"; const logger = createLogger("background_loader"); @@ -114,8 +115,8 @@ export class BackgroundResourcesLoader { }) .then(() => { logger.log("⏰ Finish load: bare game"); - Loader.createAtlasLinks(); this.bareGameReady = true; + initBuildingCodesAfterResourcesLoaded(); this.signalBareGameLoaded.dispatch(); this.internalStartLoadingAdditionalGameAssets(); }); 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 5474467a..3444057a 100644 --- a/src/js/core/read_write_proxy.js +++ b/src/js/core/read_write_proxy.js @@ -8,7 +8,7 @@ import { FILE_NOT_FOUND } from "../platform/storage"; import { accessNestedPropertyReverse } from "./utils"; import { IS_DEBUG, globalConfig } from "./config"; import { ExplainedResult } from "./explained_result"; -import { decompressX64, compressX64 } from ".//lzstring"; +import { decompressX64, compressX64 } from "./lzstring"; import { asyncCompressor, compressionPrefix } from "./async_compression"; import { compressObject, decompressObject } from "../savegame/savegame_compressor"; 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 710de478..0a8906e7 100644 --- a/src/js/core/sensitive_utils.encrypt.js +++ b/src/js/core/sensitive_utils.encrypt.js @@ -1,19 +1,12 @@ -import { globalConfig } from "./config"; -import { decompressX64, compressX64 } from "./lzstring"; +import { createHash } from "rusha"; -const Rusha = require("rusha"); - -const encryptKey = globalConfig.info.sgSalt; - -export function decodeHashedString(s) { - return decompressX64(s); -} +import { decompressX64 } from "./lzstring"; export function sha1(str) { - return Rusha.createHash().update(str).digest("hex"); + return createHash().update(str).digest("hex"); } // Window.location.host export function getNameOfProvider() { - return window[decodeHashedString("DYewxghgLgliB2Q")][decodeHashedString("BYewzgLgdghgtgUyA")]; + return window[decompressX64("DYewxghgLgliB2Q")][decompressX64("BYewzgLgdghgtgUyA")]; } diff --git a/src/js/core/sprites.js b/src/js/core/sprites.js index 26cd65b2..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 = {}; @@ -158,7 +157,9 @@ export class AtlasSprite extends BaseSprite { const scale = parameters.desiredAtlasScale; const link = this.linksByResolution[scale]; - assert(link, "Link not known: " + scale + " (having " + Object.keys(this.linksByResolution) + ")"); + if (!link) { + assert(false, `Link not known: ${scale} (having ${Object.keys(this.linksByResolution)})`); + } const scaleW = w / link.w; const scaleH = h / link.h; @@ -195,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/belt_path.js b/src/js/game/belt_path.js index 0b6da48c..09e73636 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"; +import { GameRoot } from "./root"; const logger = createLogger("belt_path"); @@ -125,14 +125,6 @@ export class BeltPath extends BasicSerializableObject { return globalConfig.beltItemSpacingByLayer[this.layer]; } - /** - * Returns the layer of the this path - * @returns {enumLayer} - */ - getLayer() { - return this.entityPath[0].layer; - } - /** * Tries to accept the item * @param {BaseItem} item @@ -167,7 +159,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 +178,85 @@ export class BeltPath extends BasicSerializableObject { } /** - * Updates all ejectors on the path, so that only the last ejector + * Recomputes the layer of the path and the target acceptor */ onPathChanged() { - this.ejectorComp = this.entityPath[this.entityPath.length - 1].components.ItemEjector; - this.ejectorSlot = this.ejectorComp.slots[0]; + this.layer = this.entityPath[0].layer; + 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 + // Since there can be cross layer dependencies, check on all layers + const targetEntities = this.root.map.getLayersContentsMultipleXY( + ejectSlotTargetWsTile.x, + ejectSlotTargetWsTile.y + ); + + for (let i = 0; i < targetEntities.length; ++i) { + const targetEntity = targetEntities[i]; + + 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 + continue; + } + + const ejectingDirection = targetStaticComp.worldDirectionToLocal(ejectSlotWsDirection); + const matchingSlot = targetAcceptorComp.findMatchingSlot( + targetStaticComp.worldToLocalTile(ejectSlotTargetWsTile), + ejectingDirection, + lastEntity.layer + ); + + if (!matchingSlot) { + // No matching slot found + continue; + } + + return { + entity: targetEntity, + slot: matchingSlot.index, + direction: enumInvertedDirections[ejectingDirection], + }; + } } // Following code will be compiled out outside of dev versions @@ -251,11 +301,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 +328,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,14 +401,6 @@ 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(); @@ -970,7 +993,7 @@ export class BeltPath extends BasicSerializableObject { beltSpeed *= 100; } - let minimumDistance = this.ejectorSlot.item ? this.getItemSpacing() : 0; + let minimumDistance = 0; // Try to reduce spacing let remainingAmount = beltSpeed; @@ -994,11 +1017,28 @@ export class BeltPath extends BasicSerializableObject { minimumDistance = this.getItemSpacing(); } + // 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) { + // Pass over the item + if ( + this.root.systemMgr.systems.itemEjector.tryPassOverItem( + lastItem[_item], + this.acceptorTarget.entity, + this.acceptorTarget.slot + ) + ) { this.items.pop(); + + // Also trigger animation + const targetAcceptorComp = this.acceptorTarget.entity.components.ItemAcceptor; + if (targetAcceptorComp) { + targetAcceptorComp.onItemAccepted( + this.acceptorTarget.slot, + this.acceptorTarget.direction, + lastItem[_item] + ); + } } } @@ -1134,7 +1174,7 @@ export class BeltPath extends BasicSerializableObject { const beltLength = beltComp.getEffectiveLengthTiles(this.layer); // 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( diff --git a/src/js/game/blueprint.js b/src/js/game/blueprint.js index 4e322eb0..e1ac2dec 100644 --- a/src/js/game/blueprint.js +++ b/src/js/game/blueprint.js @@ -81,10 +81,6 @@ export class Blueprint { for (let i = 0; i < this.entities.length; ++i) { const entity = this.entities[i]; const staticComp = entity.components.StaticMapEntity; - if (!staticComp.blueprintSpriteKey) { - logger.warn("Blueprint entity without sprite!"); - return; - } const newPos = staticComp.origin.add(tile); const rect = staticComp.getTileSpaceBounds(); @@ -98,7 +94,7 @@ export class Blueprint { staticComp.drawSpriteOnFullEntityBounds( parameters, - Loader.getSprite(staticComp.blueprintSpriteKey), + staticComp.getBlueprintSprite(), 0, true, newPos diff --git a/src/js/game/building_codes.js b/src/js/game/building_codes.js new file mode 100644 index 00000000..370660bc --- /dev/null +++ b/src/js/game/building_codes.js @@ -0,0 +1,79 @@ +/* typehints:start */ +import { MetaBuilding } from "./meta_building"; +import { AtlasSprite } from "../core/sprites"; +/* typehints:end */ + +/** + * @typedef {{ + * metaClass: typeof MetaBuilding, + * metaInstance?: MetaBuilding, + * variant?: string, + * rotationVariant?: number, + * sprite?: AtlasSprite, + * blueprintSprite?: AtlasSprite, + * silhouetteColor?: string + * }} BuildingVariantIdentifier + */ + +/** + * Stores a lookup table for all building variants (for better performance) + * @type {Object} + */ +export const gBuildingVariants = { + // Set later +}; + +/** + * Registers a new variant + * @param {number} id + * @param {typeof MetaBuilding} meta + * @param {string} variant + * @param {number} rotationVariant + */ +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, + }; +} + +/** + * + * @param {number} code + * @returns {BuildingVariantIdentifier} + */ +export function getBuildingDataFromCode(code) { + assert(gBuildingVariants[code], "Invalid building code: " + code); + return gBuildingVariants[code]; +} + +/** + * Finds the code for a given variant + * @param {MetaBuilding} metaBuilding + * @param {string} variant + * @param {number} rotationVariant + */ +export function getCodeFromBuildingData(metaBuilding, variant, rotationVariant) { + for (const key in gBuildingVariants) { + const data = gBuildingVariants[key]; + if ( + data.metaInstance.getId() === metaBuilding.getId() && + data.variant === variant && + data.rotationVariant === rotationVariant + ) { + return +key; + } + } + assertAlways( + false, + "Building not found by data: " + metaBuilding.getId() + " / " + variant + " / " + rotationVariant + ); + return 0; +} diff --git a/src/js/game/buildings/belt_base.js b/src/js/game/buildings/belt_base.js index b8e92150..796b27b5 100644 --- a/src/js/game/buildings/belt_base.js +++ b/src/js/game/buildings/belt_base.js @@ -1,4 +1,3 @@ -import { Loader } from "../../core/loader"; import { formatItemsPerSecond } from "../../core/utils"; import { enumAngleToDirection, enumDirection, Vector } from "../../core/vector"; import { SOUNDS } from "../../platform/sound"; @@ -40,6 +39,10 @@ export class MetaBeltBaseBuilding extends MetaBuilding { return SOUNDS.placeBelt; } + getSprite() { + return null; + } + /** * Creates the entity at the given location * @param {Entity} entity @@ -50,34 +53,8 @@ export class MetaBeltBaseBuilding extends MetaBuilding { direction: enumDirection.top, // updated later }) ); - // Make this entity replaceabel + // Make this entity replaceable 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, - }) - ); } /** @@ -87,8 +64,6 @@ export class MetaBeltBaseBuilding extends MetaBuilding { */ updateVariants(entity, rotationVariant) { entity.components.Belt.direction = arrayBeltVariantToRotation[rotationVariant]; - entity.components.ItemEjector.slots[0].direction = arrayBeltVariantToRotation[rotationVariant]; - entity.components.StaticMapEntity.spriteKey = null; } /** diff --git a/src/js/game/buildings/energy_generator.js b/src/js/game/buildings/energy_generator.js index 1d7ac18b..a63b4b3f 100644 --- a/src/js/game/buildings/energy_generator.js +++ b/src/js/game/buildings/energy_generator.js @@ -77,7 +77,6 @@ export class MetaEnergyGenerator extends MetaBuilding { layer: enumLayer.wires, }, ], - instantEject: true, }) ); diff --git a/src/js/game/buildings/hub.js b/src/js/game/buildings/hub.js index 61a61f27..07ca4360 100644 --- a/src/js/game/buildings/hub.js +++ b/src/js/game/buildings/hub.js @@ -6,6 +6,7 @@ import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/it 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() { @@ -28,6 +29,11 @@ export class MetaHubBuilding extends MetaBuilding { return null; } + getSprite() { + // We render it ourself + return null; + } + /** * Creates the entity at the given location * @param {Entity} entity @@ -41,10 +47,20 @@ export class MetaHubBuilding extends MetaBuilding { }) ); - // We render the sprite ourself - entity.components.StaticMapEntity.spriteKey = null; - 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..17fccf46 100644 --- a/src/js/game/buildings/miner.js +++ b/src/js/game/buildings/miner.js @@ -6,7 +6,7 @@ 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" }; 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 99004b99..2c4f6a1d 100644 --- a/src/js/game/buildings/underground_belt.js +++ b/src/js/game/buildings/underground_belt.js @@ -71,6 +71,10 @@ export class MetaUndergroundBeltBuilding extends MetaBuilding { return super.getAvailableVariants(root); } + /** + * @param {number} rotationVariant + * @param {string} variant + */ getPreviewSprite(rotationVariant, variant) { let suffix = ""; if (variant !== defaultBuildingVariant) { @@ -87,6 +91,10 @@ export class MetaUndergroundBeltBuilding extends MetaBuilding { } } + /** + * @param {number} rotationVariant + * @param {string} variant + */ getBlueprintSprite(rotationVariant, variant) { let suffix = ""; if (variant !== defaultBuildingVariant) { @@ -103,6 +111,14 @@ export class MetaUndergroundBeltBuilding extends MetaBuilding { } } + /** + * @param {number} rotationVariant + * @param {string} variant + */ + getSprite(rotationVariant, variant) { + return this.getPreviewSprite(rotationVariant, variant); + } + /** * @param {GameRoot} root */ @@ -201,10 +217,6 @@ export class MetaUndergroundBeltBuilding extends MetaBuilding { */ updateVariants(entity, rotationVariant, variant) { entity.components.UndergroundBelt.tier = enumUndergroundBeltVariantToTier[variant]; - entity.components.StaticMapEntity.spriteKey = this.getPreviewSprite( - rotationVariant, - variant - ).spriteName; switch (arrayUndergroundRotationVariantToMode[rotationVariant]) { case enumUndergroundBeltMode.sender: { diff --git a/src/js/game/buildings/wire_crossings.js b/src/js/game/buildings/wire_crossings.js index 111d7ce4..82c057d2 100644 --- a/src/js/game/buildings/wire_crossings.js +++ b/src/js/game/buildings/wire_crossings.js @@ -65,7 +65,6 @@ export class MetaWireCrossingsBuilding extends MetaBuilding { entity.addComponent( new ItemEjectorComponent({ slots: [], // set later - instantEject: true, }) ); } @@ -88,7 +87,7 @@ export class MetaWireCrossingsBuilding extends MetaBuilding { ]); entity.components.ItemEjector.setSlots([ - { pos: new Vector(0, 0), direction: enumDirection.left, layer: enumLayer.wires }, + { pos: new Vector(0, 0), direction: enumDirection.top, layer: enumLayer.wires }, { pos: new Vector(0, 0), direction: enumDirection.right, layer: enumLayer.wires }, ]); @@ -98,7 +97,7 @@ export class MetaWireCrossingsBuilding extends MetaBuilding { entity.components.ItemAcceptor.setSlots([ { pos: new Vector(0, 0), - directions: [enumDirection.left], + directions: [enumDirection.top], layer: enumLayer.wires, }, { @@ -109,7 +108,7 @@ export class MetaWireCrossingsBuilding extends MetaBuilding { ]); entity.components.ItemEjector.setSlots([ - { pos: new Vector(0, 0), direction: enumDirection.top, layer: enumLayer.wires }, + { pos: new Vector(0, 0), direction: enumDirection.bottom, layer: enumLayer.wires }, ]); break; } 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..ea0e43e8 100644 --- a/src/js/game/component_registry.js +++ b/src/js/game/component_registry.js @@ -13,6 +13,7 @@ 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); @@ -29,6 +30,7 @@ export function initComponentRegistry() { 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..f2e990f0 100644 --- a/src/js/game/components/belt.js +++ b/src/js/game/components/belt.js @@ -7,6 +7,40 @@ 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], + layer: enumLayer.regular, +}; + +/** @type {Object} */ +export const FAKE_BELT_EJECTOR_SLOT_BY_DIRECTION = { + [enumDirection.top]: { + pos: new Vector(0, 0), + direction: enumDirection.top, + item: null, + layer: enumLayer.regular, + progress: 0, + }, + + [enumDirection.right]: { + pos: new Vector(0, 0), + direction: enumDirection.right, + item: null, + layer: enumLayer.regular, + progress: 0, + }, + + [enumDirection.left]: { + pos: new Vector(0, 0), + direction: enumDirection.left, + item: null, + layer: enumLayer.regular, + progress: 0, + }, +}; + export class BeltComponent extends Component { static getId() { return "Belt"; @@ -56,6 +90,27 @@ export class BeltComponent extends Component { 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} + */ + getFakeEjectorSlots() { + 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) diff --git a/src/js/game/components/belt_underlays.js b/src/js/game/components/belt_underlays.js new file mode 100644 index 00000000..cdc3473f --- /dev/null +++ b/src/js/game/components/belt_underlays.js @@ -0,0 +1,44 @@ +import { Component } from "../component"; +import { types } from "../../savegame/serialization"; +import { enumDirection, Vector } from "../../core/vector"; + +export class BeltUnderlaysComponent extends Component { + static getId() { + return "BeltUnderlays"; + } + + static getSchema() { + return { + underlays: types.array( + types.structured({ + pos: types.vector, + direction: types.enum(enumDirection), + }) + ), + }; + } + + 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/hub.js b/src/js/game/components/hub.js index f9c13dc3..e038cf3e 100644 --- a/src/js/game/components/hub.js +++ b/src/js/game/components/hub.js @@ -6,27 +6,4 @@ 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..fd38651f 100644 --- a/src/js/game/components/item_acceptor.js +++ b/src/js/game/components/item_acceptor.js @@ -39,16 +39,6 @@ export class ItemAcceptorComponent extends Component { 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), }) @@ -68,20 +58,8 @@ export class ItemAcceptorComponent extends Component { }); } - 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 +67,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); } @@ -164,14 +135,12 @@ 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, + }); } /** diff --git a/src/js/game/components/item_ejector.js b/src/js/game/components/item_ejector.js index ee661078..acb6b604 100644 --- a/src/js/game/components/item_ejector.js +++ b/src/js/game/components/item_ejector.js @@ -5,6 +5,7 @@ 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 {{ @@ -14,6 +15,7 @@ import { enumLayer } from "../root"; * layer: enumLayer, * progress: number?, * cachedDestSlot?: import("./item_acceptor").ItemAcceptorLocatedSlot, + * cachedBeltPath?: BeltPath, * cachedTargetEntity?: Entity * }} ItemEjectorSlot */ @@ -24,10 +26,8 @@ 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, @@ -55,7 +55,6 @@ export class ItemEjectorComponent extends Component { return new ItemEjectorComponent({ slots: slotsCopy, - instantEject: this.instantEject, }); } @@ -63,19 +62,12 @@ export class ItemEjectorComponent extends Component { * * @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 */ - 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 */ @@ -162,7 +154,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/static_map_entity.js b/src/js/game/components/static_map_entity.js index 3f0794a4..6494aba1 100644 --- a/src/js/game/components/static_map_entity.js +++ b/src/js/game/components/static_map_entity.js @@ -5,6 +5,7 @@ import { AtlasSprite } from "../../core/sprites"; import { enumDirection, Vector } from "../../core/vector"; import { types } from "../../savegame/serialization"; import { Component } from "../component"; +import { getBuildingDataFromCode } from "../building_codes"; export class StaticMapEntityComponent extends Component { static getId() { @@ -17,21 +18,43 @@ export class StaticMapEntityComponent extends Component { tileSize: types.tileVector, rotation: types.float, originalRotation: types.float, - spriteKey: types.nullable(types.string), - blueprintSpriteKey: types.string, - silhouetteColor: types.nullable(types.string), + + // See building_codes.js + code: types.uint, }; } + /** + * Returns the sprite + * @returns {AtlasSprite} + */ + getSprite() { + return getBuildingDataFromCode(this.code).sprite; + } + + /** + * Returns the blueprint sprite + * @returns {AtlasSprite} + */ + getBlueprintSprite() { + return getBuildingDataFromCode(this.code).blueprintSprite; + } + + /** + * Returns the silhouette color + * @returns {string} + */ + getSilhouetteColor() { + return getBuildingDataFromCode(this.code).silhouetteColor; + } + duplicateWithoutContents() { return new StaticMapEntityComponent({ origin: this.origin.copy(), tileSize: this.tileSize.copy(), rotation: this.rotation, originalRotation: this.originalRotation, - spriteKey: this.spriteKey, - silhouetteColor: this.silhouetteColor, - blueprintSpriteKey: this.blueprintSpriteKey, + code: this.code, }); } @@ -42,18 +65,14 @@ export class StaticMapEntityComponent extends Component { * @param {Vector=} param0.tileSize Size of the entity in tiles * @param {number=} param0.rotation Rotation in degrees. Must be multiple of 90 * @param {number=} param0.originalRotation Original Rotation in degrees. Must be multiple of 90 - * @param {string=} param0.spriteKey Optional sprite - * @param {string} param0.blueprintSpriteKey Blueprint sprite, required - * @param {string=} param0.silhouetteColor Optional silhouette color override + * @param {number=} param0.code Building code */ constructor({ origin = new Vector(), tileSize = new Vector(1, 1), rotation = 0, originalRotation = 0, - spriteKey = null, - silhouetteColor = null, - blueprintSpriteKey = null, + code = 0, }) { super(); assert( @@ -63,11 +82,9 @@ export class StaticMapEntityComponent extends Component { this.origin = origin; this.tileSize = tileSize; - this.spriteKey = spriteKey; this.rotation = rotation; + this.code = code; this.originalRotation = originalRotation; - this.silhouetteColor = silhouetteColor; - this.blueprintSpriteKey = blueprintSpriteKey; } /** diff --git a/src/js/game/components/wired_pins.js b/src/js/game/components/wired_pins.js index 0d331a68..17314639 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 {{ diff --git a/src/js/game/core.js b/src/js/game/core.js index 960a83e3..e48c01e7 100644 --- a/src/js/game/core.js +++ b/src/js/game/core.js @@ -398,7 +398,7 @@ export class GameCore { if (!this.root.camera.getIsMapOverlayActive()) { // Underlays for splitters / balancers - systems.itemAcceptor.drawUnderlays(params, enumLayer.regular); + systems.beltUnderlays.drawUnderlays(params, enumLayer.regular); // Belt items systems.belt.drawLayerBeltItems(params, enumLayer.regular); 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_components.js b/src/js/game/entity_components.js index 24430dd2..f670b227 100644 --- a/src/js/game/entity_components.js +++ b/src/js/game/entity_components.js @@ -13,6 +13,7 @@ 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"; /* typehints:end */ /** @@ -65,6 +66,9 @@ export class EntityComponentStorage { /** @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..bfdb1407 100644 --- a/src/js/game/game_system_manager.js +++ b/src/js/game/game_system_manager.js @@ -16,6 +16,7 @@ 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"); @@ -68,6 +69,9 @@ export class GameSystemManager { /** @type {EnergyConsumerSystem} */ energyConsumer: null, + /** @type {BeltUnderlaysSystem} */ + beltUnderlays: null, + /* typehints:end */ }; this.systemUpdateOrder = []; @@ -110,6 +114,8 @@ export class GameSystemManager { 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 // then would be invalid diff --git a/src/js/game/hub_goals.js b/src/js/game/hub_goals.js index 36f8f107..cd319059 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; diff --git a/src/js/game/hud/parts/building_placer.js b/src/js/game/hud/parts/building_placer.js index d3a3c7ac..ce6e116b 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 { @@ -18,6 +18,7 @@ import { DynamicDomAttach } from "../dynamic_dom_attach"; import { HUDBuildingPlacerLogic } from "./building_placer_logic"; import { makeOffscreenBuffer } from "../../../core/buffer_utils"; import { enumLayer } from "../../root"; +import { getCodeFromBuildingData } from "../../building_codes"; export class HUDBuildingPlacer extends HUDBuildingPlacerLogic { /** @@ -84,9 +85,8 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic { label: "lock-direction-indicator", }); - // Loader.getSprite("sprites/misc/lock_direction_indicator.png").draw(context, 0, 0, 48, 48); - context.fillStyle = THEME.map.directionLock[enumLayer.wires].color; - context.strokeStyle = THEME.map.directionLock[enumLayer.wires].color; + context.fillStyle = THEME.map.directionLock[layer].color; + context.strokeStyle = THEME.map.directionLock[layer].color; context.lineWidth = 2; const padding = 5; @@ -313,12 +313,16 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic { staticComp.rotation = rotation; staticComp.tileSize = metaBuilding.getDimensions(this.currentVariant.get()); metaBuilding.updateVariants(this.fakeEntity, rotationVariant, this.currentVariant.get()); + staticComp.code = getCodeFromBuildingData( + this.currentMetaBuilding.get(), + this.currentVariant.get(), + rotationVariant + ); const canBuild = this.root.logic.checkCanPlaceEntity(this.fakeEntity); // 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(); diff --git a/src/js/game/hud/parts/building_placer_logic.js b/src/js/game/hud/parts/building_placer_logic.js index 563ce144..97a635a6 100644 --- a/src/js/game/hud/parts/building_placer_logic.js +++ b/src/js/game/hud/parts/building_placer_logic.js @@ -13,6 +13,7 @@ import { SOUNDS } from "../../../platform/sound"; import { MetaMinerBuilding, enumMinerVariants } from "../../buildings/miner"; import { enumHubGoalRewards } from "../../tutorial_goals"; import { enumLayer } from "../../root"; +import { getBuildingDataFromCode, getCodeFromBuildingData } from "../../building_codes"; /** * Contains all logic for the building placer - this doesn't include the rendering @@ -338,109 +339,27 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { } // Try to extract the building - const extracted = this.hack_reconstructMetaBuildingAndVariantFromBuilding(contents); + const buildingCode = contents.components.StaticMapEntity.code; + const extracted = getBuildingDataFromCode(buildingCode); // If the building we are picking is the same as the one we have, clear the cursor. if ( - !extracted || - (extracted.metaBuilding === this.currentMetaBuilding.get() && - extracted.variant === this.currentVariant.get()) + this.currentMetaBuilding.get() && + extracted.metaInstance.getId() === this.currentMetaBuilding.get().getId() && + extracted.variant === this.currentVariant.get() ) { this.currentMetaBuilding.set(null); return; } - this.currentMetaBuilding.set(extracted.metaBuilding); + this.currentMetaBuilding.set(extracted.metaInstance); this.currentVariant.set(extracted.variant); this.currentBaseRotation = contents.components.StaticMapEntity.rotation; } /** - * HACK! - * - * This attempts to reconstruct the meta building and its variant from a given entity - * @param {Entity} entity - * @returns {{ metaBuilding: MetaBuilding, variant: string }} + * Switches the side for the direction lock manually */ - hack_reconstructMetaBuildingAndVariantFromBuilding(entity) { - if (entity.components.Hub) { - // Hub is not copyable - return null; - } - - const matches = []; - const metaBuildings = gMetaBuildingRegistry.entries; - for (let i = 0; i < metaBuildings.length; ++i) { - const metaBuilding = metaBuildings[i]; - const availableVariants = metaBuilding.getAvailableVariants(this.root); - checkVariant: for (let k = 0; k < availableVariants.length; ++k) { - const variant = availableVariants[k]; - let unplaced = metaBuilding.createEntity({ - root: this.root, - variant, - origin: new Vector(0, 0), - rotation: 0, - originalRotation: 0, - rotationVariant: 0, - }); - - // Compare if both entities share the same components - for (let component in entity.components) { - if ((entity.components[component] == null) !== (unplaced.components[component] == null)) { - continue checkVariant; - } - } - - // Check for same item processor - if ( - entity.components.ItemProcessor && - entity.components.ItemProcessor.type != unplaced.components.ItemProcessor.type - ) { - continue checkVariant; - } - - // Check for underground belt - if ( - entity.components.UndergroundBelt && - entity.components.UndergroundBelt.tier != unplaced.components.UndergroundBelt.tier - ) { - continue checkVariant; - } - - // Check for same sprite key - except for underground belts - // since the sprite may vary here - if ( - !entity.components.UndergroundBelt && - entity.components.StaticMapEntity.spriteKey != - unplaced.components.StaticMapEntity.spriteKey - ) { - continue checkVariant; - } - - if (metaBuilding.id === "wire" && entity.layer !== enumLayer.wires) { - continue checkVariant; - } - - if (metaBuilding.id === "belt" && entity.layer !== enumLayer.regular) { - continue checkVariant; - } - matches.push({ metaBuilding, variant }); - } - } - - if (matches.length == 1) { - const staticEntity = entity.components.StaticMapEntity; - const key = staticEntity.spriteKey || staticEntity.blueprintSpriteKey; - assert( - key && - key.includes(matches[0].metaBuilding.id) && - (matches[0].variant === defaultBuildingVariant || key.includes(matches[0].variant)) - ); - return matches[0]; - } - return null; - } - switchDirectionLockSide() { this.currentDirectionLockSide = 1 - this.currentDirectionLockSide; } @@ -673,7 +592,7 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { origin: new Vector(0, 0), rotation: 0, tileSize: metaBuilding.getDimensions(this.currentVariant.get()).copy(), - blueprintSpriteKey: "", + code: getCodeFromBuildingData(metaBuilding, variant, 0), }) ); metaBuilding.updateVariants(this.fakeEntity, 0, this.currentVariant.get()); diff --git a/src/js/game/hud/parts/debug_info.js b/src/js/game/hud/parts/debug_info.js index cdd00540..100a19ef 100644 --- a/src/js/game/hud/parts/debug_info.js +++ b/src/js/game/hud/parts/debug_info.js @@ -88,8 +88,8 @@ export class HUDDebugInfo extends BaseHUDPart { const mouseTile = this.root.camera.screenToWorld(mousePos).toTileSpace(); const cameraTile = this.root.camera.center.toTileSpace(); - this.trackedMousePosition.set(`Pos: ${mouseTile.x} / ${mouseTile.y}`); - this.trackedCameraPosition.set(`Center: ${cameraTile.x} / ${cameraTile.y}`); + this.trackedMousePosition.set(`Mouse: ${mouseTile.x} / ${mouseTile.y}`); + this.trackedCameraPosition.set(`Camera: ${cameraTile.x} / ${cameraTile.y}`); } /** diff --git a/src/js/game/hud/parts/entity_debugger.js b/src/js/game/hud/parts/entity_debugger.js index 9fe1bd7c..80f15eea 100644 --- a/src/js/game/hud/parts/entity_debugger.js +++ b/src/js/game/hud/parts/entity_debugger.js @@ -15,7 +15,9 @@ export class HUDEntityDebugger extends BaseHUDPart { ` ); + /** @type {HTMLElement} */ this.mousePosElem = this.element.querySelector(".mousePos"); + /** @type {HTMLElement} */ this.chunkPosElem = this.element.querySelector(".chunkPos"); this.entityInfoElem = this.element.querySelector(".entityInfo"); } 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 c70d6afc..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) { @@ -23,7 +21,7 @@ export class HUDSettingsMenu extends BaseHUDPart { ${T.ingame.settingsMenu.beltsPlaced} ${T.ingame.settingsMenu.buildingsPlaced} ${T.ingame.settingsMenu.playtime} - + ` ); @@ -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,20 +91,25 @@ 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); - this.statsElement.querySelector(".playtime").innerText = T.global.time.xMinutes.replace( - "", - "" + totalMinutesPlayed - ); - this.statsElement.querySelector(".buildingsPlaced").innerText = formatBigNumberFull( + /** @type {HTMLElement} */ + const playtimeElement = this.statsElement.querySelector(".playtime"); + /** @type {HTMLElement} */ + const buildingsPlacedElement = this.statsElement.querySelector(".buildingsPlaced"); + /** @type {HTMLElement} */ + const beltsPlacedElement = this.statsElement.querySelector(".beltsPlaced"); + + playtimeElement.innerText = T.global.time.xMinutes.replace("", `${totalMinutesPlayed}`); + + buildingsPlacedElement.innerText = formatBigNumberFull( this.root.entityMgr.getAllWithComponent(StaticMapEntityComponent).length - this.root.entityMgr.getAllWithComponent(BeltComponent).length ); - this.statsElement.querySelector(".beltsPlaced").innerText = formatBigNumberFull( + + beltsPlacedElement.innerText = formatBigNumberFull( this.root.entityMgr.getAllWithComponent(BeltComponent).length ); } 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/logic.js b/src/js/game/logic.js index 403fa15b..f703691e 100644 --- a/src/js/game/logic.js +++ b/src/js/game/logic.js @@ -198,50 +198,66 @@ export class GameLogic { for (let i = 0; i < entities.length; ++i) { const entity = entities[i]; + 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.getFakeEjectorSlots(); + const fakeAcceptorSlot = beltComp.getFakeAcceptorSlot(); + ejectorSlots.push(fakeEjectorSlot); + acceptorSlots.push(fakeAcceptorSlot); + } + + for (let ejectorSlot = 0; ejectorSlot < ejectorSlots.length; ++ejectorSlot) { + const slot = ejectorSlots[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, + }); } } - 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]; + if (slot.layer !== layer) { + continue; + } - 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..491939f4 100644 --- a/src/js/game/map_chunk_view.js +++ b/src/js/game/map_chunk_view.js @@ -1,15 +1,6 @@ import { MapChunk } from "./map_chunk"; import { GameRoot } from "./root"; -import { globalConfig } from "../core/config"; 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 { THEME } from "./theme"; - -const logger = createLogger("chunk"); -const chunkSizePixels = globalConfig.mapChunkSize * globalConfig.tileSize; export class MapChunkView extends MapChunk { /** diff --git a/src/js/game/meta_building.js b/src/js/game/meta_building.js index 514474c9..722dca13 100644 --- a/src/js/game/meta_building.js +++ b/src/js/game/meta_building.js @@ -5,6 +5,7 @@ import { SOUNDS } from "../platform/sound"; import { StaticMapEntityComponent } from "./components/static_map_entity"; import { Entity } from "./entity"; import { enumLayer, GameRoot } from "./root"; +import { getCodeFromBuildingData } from "./building_codes"; export const defaultBuildingVariant = "default"; @@ -157,20 +158,13 @@ export class MetaBuilding { createEntity({ root, origin, rotation, originalRotation, rotationVariant, variant }) { const entity = new Entity(root); entity.layer = this.getLayer(); - const blueprintSprite = this.getBlueprintSprite(rotationVariant, variant); entity.addComponent( new StaticMapEntityComponent({ - spriteKey: - "sprites/buildings/" + - this.id + - (variant === defaultBuildingVariant ? "" : "-" + variant) + - ".png", origin: new Vector(origin.x, origin.y), rotation, originalRotation, tileSize: this.getDimensions(variant).copy(), - silhouetteColor: this.getSilhouetteColor(), - blueprintSpriteKey: blueprintSprite ? blueprintSprite.spriteName : "", + code: getCodeFromBuildingData(this, variant, rotationVariant), }) ); this.setupEntityComponents(entity, root); @@ -178,6 +172,21 @@ export class MetaBuilding { return entity; } + /** + * Returns the sprite for a given variant + * @param {number} rotationVariant + * @param {string} variant + * @returns {AtlasSprite} + */ + getSprite(rotationVariant, variant) { + return Loader.getSprite( + "sprites/buildings/" + + this.id + + (variant === defaultBuildingVariant ? "" : "-" + variant) + + ".png" + ); + } + /** * Should compute the optimal rotation variant on the given tile * @param {object} param0 diff --git a/src/js/game/meta_building_registry.js b/src/js/game/meta_building_registry.js index 4e1fdd81..20ca6f41 100644 --- a/src/js/game/meta_building_registry.js +++ b/src/js/game/meta_building_registry.js @@ -1,20 +1,25 @@ import { gMetaBuildingRegistry } from "../core/global_registries"; -import { MetaBeltBaseBuilding } from "./buildings/belt_base"; -import { MetaCutterBuilding } from "./buildings/cutter"; -import { MetaMinerBuilding } from "./buildings/miner"; -import { MetaMixerBuilding } from "./buildings/mixer"; -import { MetaPainterBuilding } from "./buildings/painter"; -import { MetaRotaterBuilding } from "./buildings/rotater"; -import { MetaSplitterBuilding } from "./buildings/splitter"; -import { MetaStackerBuilding } from "./buildings/stacker"; -import { MetaTrashBuilding } from "./buildings/trash"; -import { MetaUndergroundBeltBuilding } from "./buildings/underground_belt"; -import { MetaHubBuilding } from "./buildings/hub"; -import { MetaEnergyGenerator } from "./buildings/energy_generator"; -import { MetaWireBaseBuilding } from "./buildings/wire_base"; +import { createLogger } from "../core/logging"; import { MetaAdvancedProcessorBuilding } from "./buildings/advanced_processor"; import { MetaBeltBuilding } from "./buildings/belt"; -import { MetaWireCrossingsBuilding } from "./buildings/wire_crossings"; +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"; +import { enumPainterVariants, MetaPainterBuilding } from "./buildings/painter"; +import { enumRotaterVariants, MetaRotaterBuilding } from "./buildings/rotater"; +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"; + +const logger = createLogger("building_registry"); export function initMetaBuildingRegistry() { gMetaBuildingRegistry.register(MetaSplitterBuilding); @@ -32,4 +37,106 @@ export function initMetaBuildingRegistry() { gMetaBuildingRegistry.register(MetaWireBaseBuilding); gMetaBuildingRegistry.register(MetaAdvancedProcessorBuilding); gMetaBuildingRegistry.register(MetaWireCrossingsBuilding); + + // Belt + registerBuildingVariant(1, MetaBeltBaseBuilding, defaultBuildingVariant, 0); + registerBuildingVariant(2, MetaBeltBaseBuilding, defaultBuildingVariant, 1); + registerBuildingVariant(3, MetaBeltBaseBuilding, defaultBuildingVariant, 2); + + // Splitter + registerBuildingVariant(4, MetaSplitterBuilding); + registerBuildingVariant(5, MetaSplitterBuilding, enumSplitterVariants.compact); + registerBuildingVariant(6, MetaSplitterBuilding, enumSplitterVariants.compactInverse); + + // Miner + registerBuildingVariant(7, MetaMinerBuilding); + registerBuildingVariant(8, MetaMinerBuilding, enumMinerVariants.chainable); + + // Cutter + registerBuildingVariant(9, MetaCutterBuilding); + registerBuildingVariant(10, MetaCutterBuilding, enumCutterVariants.quad); + + // Rotater + registerBuildingVariant(11, MetaRotaterBuilding); + registerBuildingVariant(12, MetaRotaterBuilding, enumRotaterVariants.ccw); + registerBuildingVariant(13, MetaRotaterBuilding, enumRotaterVariants.fl); + + // Stacker + registerBuildingVariant(14, MetaStackerBuilding); + + // Mixer + registerBuildingVariant(15, MetaMixerBuilding); + + // Painter + registerBuildingVariant(16, MetaPainterBuilding); + registerBuildingVariant(17, MetaPainterBuilding, enumPainterVariants.mirrored); + registerBuildingVariant(18, MetaPainterBuilding, enumPainterVariants.double); + registerBuildingVariant(19, MetaPainterBuilding, enumPainterVariants.quad); + + // Trash + registerBuildingVariant(20, MetaTrashBuilding); + registerBuildingVariant(21, MetaTrashBuilding, enumTrashVariants.storage); + + // Underground belt + registerBuildingVariant(22, MetaUndergroundBeltBuilding, defaultBuildingVariant, 0); + registerBuildingVariant(23, MetaUndergroundBeltBuilding, defaultBuildingVariant, 1); + registerBuildingVariant(24, MetaUndergroundBeltBuilding, enumUndergroundBeltVariants.tier2, 0); + registerBuildingVariant(25, MetaUndergroundBeltBuilding, enumUndergroundBeltVariants.tier2, 1); + + // 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( + gBuildingVariants[key].metaClass + ); + } + + for (const key in gBuildingVariants) { + const variant = gBuildingVariants[key]; + assert(variant.metaClass, "Variant has no meta: " + key); + + if (typeof variant.rotationVariant === "undefined") { + variant.rotationVariant = 0; + } + if (typeof variant.variant === "undefined") { + variant.variant = defaultBuildingVariant; + } + } + + logger.log("Registered", gMetaBuildingRegistry.getNumEntries(), "buildings"); + logger.log("Registered", Object.keys(gBuildingVariants).length, "building codes"); +} + +/** + * Once all sprites are loaded, propagates the cache + */ +export function initBuildingCodesAfterResourcesLoaded() { + logger.log("Propagating sprite cache"); + for (const key in gBuildingVariants) { + const variant = gBuildingVariants[key]; + + variant.sprite = variant.metaInstance.getSprite(variant.rotationVariant, variant.variant); + variant.blueprintSprite = variant.metaInstance.getBlueprintSprite( + variant.rotationVariant, + variant.variant + ); + variant.silhouetteColor = variant.metaInstance.getSilhouetteColor(); + } } diff --git a/src/js/game/shape_definition.js b/src/js/game/shape_definition.js index cb58b05d..f6117a52 100644 --- a/src/js/game/shape_definition.js +++ b/src/js/game/shape_definition.js @@ -513,57 +513,70 @@ export class ShapeDefinition extends BasicSerializableObject { * @param {ShapeDefinition} definition */ cloneAndStackWith(definition) { - const newLayers = this.internalCloneLayers(); - if (this.isEntirelyEmpty() || definition.isEntirelyEmpty()) { assert(false, "Can not stack entirely empty definition"); } - // Put layer for layer on top - for (let i = 0; i < definition.layers.length; ++i) { - const layerToAdd = definition.layers[i]; + const bottomShapeLayers = this.layers; + const bottomShapeHighestLayerByQuad = [-1, -1, -1, -1]; - // On which layer we can merge this upper layer - let mergeOnLayerIndex = null; - - // Go from top to bottom and check if there is anything intercepting it - for (let k = newLayers.length - 1; k >= 0; --k) { - const lowerLayer = newLayers[k]; - - let canMerge = true; - for (let quadrantIndex = 0; quadrantIndex < 4; ++quadrantIndex) { - const upperItem = layerToAdd[quadrantIndex]; - const lowerItem = lowerLayer[quadrantIndex]; - - if (upperItem && lowerItem) { - // so, we can't merge it because two items conflict - canMerge = false; - break; - } + for (let layer = bottomShapeLayers.length - 1; layer >= 0; --layer) { + const shapeLayer = bottomShapeLayers[layer]; + for (let quad = 0; quad < 4; ++quad) { + const shapeQuad = shapeLayer[quad]; + if (shapeQuad !== null && bottomShapeHighestLayerByQuad[quad] < layer) { + bottomShapeHighestLayerByQuad[quad] = layer; } - - // If we can merge it, store it - since we go from top to bottom - // we can simply override it - if (canMerge) { - mergeOnLayerIndex = k; - } - } - - if (mergeOnLayerIndex !== null) { - // Simply merge using an OR mask - for (let quadrantIndex = 0; quadrantIndex < 4; ++quadrantIndex) { - newLayers[mergeOnLayerIndex][quadrantIndex] = - newLayers[mergeOnLayerIndex][quadrantIndex] || layerToAdd[quadrantIndex]; - } - } else { - // Add new layer - newLayers.push(layerToAdd); } } - newLayers.splice(4); + const topShapeLayers = definition.layers; + const topShapeLowestLayerByQuad = [4, 4, 4, 4]; - return new ShapeDefinition({ layers: newLayers }); + for (let layer = 0; layer < topShapeLayers.length; ++layer) { + const shapeLayer = topShapeLayers[layer]; + for (let quad = 0; quad < 4; ++quad) { + const shapeQuad = shapeLayer[quad]; + if (shapeQuad !== null && topShapeLowestLayerByQuad[quad] > layer) { + topShapeLowestLayerByQuad[quad] = layer; + } + } + } + + /** + * We want to find the number `layerToMergeAt` such that when the top shape is placed at that + * layer, the smallest gap between shapes is only 1. Instead of doing a guess-and-check method to + * find the appropriate layer, we just calculate all the gaps assuming a merge at layer 0, even + * though they go negative, and calculating the number to add to it so the minimum gap is 1 (ends + * up being 1 - minimum). + */ + const gapsBetweenShapes = []; + for (let quad = 0; quad < 4; ++quad) { + gapsBetweenShapes.push(topShapeLowestLayerByQuad[quad] - bottomShapeHighestLayerByQuad[quad]); + } + const smallestGapBetweenShapes = Math.min(...gapsBetweenShapes); + // Can't merge at a layer lower than 0 + const layerToMergeAt = Math.max(1 - smallestGapBetweenShapes, 0); + + const mergedLayers = this.internalCloneLayers(); + for (let layer = mergedLayers.length; layer < layerToMergeAt + topShapeLayers.length; ++layer) { + mergedLayers.push([null, null, null, null]); + } + + for (let layer = 0; layer < topShapeLayers.length; ++layer) { + const layerMergingAt = layerToMergeAt + layer; + const bottomShapeLayer = mergedLayers[layerMergingAt]; + const topShapeLayer = topShapeLayers[layer]; + for (let quad = 0; quad < 4; quad++) { + assert(!(bottomShapeLayer[quad] && topShapeLayer[quad]), "Shape merge: Sub shape got lost"); + bottomShapeLayer[quad] = bottomShapeLayer[quad] || topShapeLayer[quad]; + } + } + + // Limit to 4 layers at max + mergedLayers.splice(4); + + return new ShapeDefinition({ layers: mergedLayers }); } /** diff --git a/src/js/game/systems/belt.js b/src/js/game/systems/belt.js index db538a56..08832e16 100644 --- a/src/js/game/systems/belt.js +++ b/src/js/game/systems/belt.js @@ -137,6 +137,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 +192,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(); } @@ -361,24 +371,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 +401,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; } } } diff --git a/src/js/game/systems/belt_underlays.js b/src/js/game/systems/belt_underlays.js new file mode 100644 index 00000000..28d6b71d --- /dev/null +++ b/src/js/game/systems/belt_underlays.js @@ -0,0 +1,75 @@ +import { GameSystemWithFilter } from "../game_system_with_filter"; +import { BeltUnderlaysComponent } from "../components/belt_underlays"; +import { BELT_ANIM_COUNT } from "./belt"; +import { Loader } from "../../core/loader"; +import { enumLayer } from "../root"; +import { Entity } from "../entity"; +import { enumDirectionToAngle } from "../../core/vector"; +import { globalConfig } from "../../core/config"; +import { drawRotatedSprite } from "../../core/draw_utils"; + +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 + * @param {enumLayer} layer + */ + drawUnderlays(parameters, layer) { + this.forEachMatchingEntityOnScreen(parameters, this.drawEntityUnderlays.bind(this, layer)); + } + + /** + * @param {enumLayer} layer + * @param {import("../../core/draw_utils").DrawParameters} parameters + * @param {Entity} entity + */ + drawEntityUnderlays(layer, parameters, entity) { + const staticComp = entity.components.StaticMapEntity; + const underlayComp = entity.components.BeltUnderlays; + + if (entity.layer !== layer) { + // Not our layer + return; + } + + if (!staticComp.shouldBeDrawn(parameters)) { + return; + } + + // Limit speed to avoid belts going backwards + const speedMultiplier = Math.min(this.root.hubGoals.getBeltBaseSpeed(layer), 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.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/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..06d4df16 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() { @@ -59,15 +50,6 @@ export class ItemAcceptorSystem extends GameSystemWithFilter { this.forEachMatchingEntityOnScreen(parameters, this.drawEntityRegularLayer.bind(this, layer)); } - /** - * 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 @@ -105,48 +87,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..c0c53f04 100644 --- a/src/js/game/systems/item_ejector.js +++ b/src/js/game/systems/item_ejector.js @@ -2,8 +2,8 @@ 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, enumItemTypeToLayer } from "../base_item"; import { ItemEjectorComponent } from "../components/item_ejector"; import { Entity } from "../entity"; import { GameSystemWithFilter } from "../game_system_with_filter"; @@ -120,15 +120,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 +144,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; @@ -164,13 +175,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 +203,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 +212,6 @@ export class ItemEjectorSystem extends GameSystemWithFilter { continue; } - const destSlot = sourceSlot.cachedDestSlot; const targetEntity = sourceSlot.cachedTargetEntity; // Advance items on the slot @@ -229,18 +228,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; + } } } } diff --git a/src/js/game/systems/item_processor.js b/src/js/game/systems/item_processor.js index 5bebfed7..582ea8fe 100644 --- a/src/js/game/systems/item_processor.js +++ b/src/js/game/systems/item_processor.js @@ -348,7 +348,7 @@ export class ItemProcessorSystem extends GameSystemWithFilter { for (let i = 0; i < items.length; ++i) { const shapeItem = /** @type {ShapeItem} */ (items[i].item); - hubComponent.queueShapeDefinition(shapeItem.definition); + this.root.hubGoals.handleDefinitionDelivered(shapeItem.definition); } break; diff --git a/src/js/game/systems/static_map_entity.js b/src/js/game/systems/static_map_entity.js index a212dcf6..886291a6 100644 --- a/src/js/game/systems/static_map_entity.js +++ b/src/js/game/systems/static_map_entity.js @@ -44,7 +44,7 @@ export class StaticMapEntitySystem extends GameSystem { const staticComp = entity.components.StaticMapEntity; if (drawOutlinesOnly) { const rect = staticComp.getTileSpaceBounds(); - parameters.context.fillStyle = staticComp.silhouetteColor || "#aaa"; + parameters.context.fillStyle = staticComp.getSilhouetteColor() || "#aaa"; const beltComp = entity.components.Belt; if (beltComp) { const sprite = this.beltOverviewSprites[beltComp.direction]; @@ -58,9 +58,8 @@ export class StaticMapEntitySystem extends GameSystem { ); } } else { - const spriteKey = staticComp.spriteKey; - if (spriteKey) { - const sprite = Loader.getSprite(spriteKey); + const sprite = staticComp.getSprite(); + if (sprite) { staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 2, false); } } @@ -91,9 +90,8 @@ export class StaticMapEntitySystem extends GameSystem { drawnUids.add(entity.uid); const staticComp = entity.components.StaticMapEntity; - const spriteKey = staticComp.spriteKey; - if (spriteKey) { - const sprite = Loader.getSprite(spriteKey); + const sprite = staticComp.getSprite(); + if (sprite) { staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 2, false); } } diff --git a/src/js/game/systems/wired_pins.js b/src/js/game/systems/wired_pins.js index 853568ef..d64ee9ae 100644 --- a/src/js/game/systems/wired_pins.js +++ b/src/js/game/systems/wired_pins.js @@ -22,6 +22,8 @@ export class WiredPinsSystem extends GameSystemWithFilter { [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); diff --git a/src/js/globals.d.ts b/src/js/globals.d.ts index bc99d55e..3f842e7e 100644 --- a/src/js/globals.d.ts +++ b/src/js/globals.d.ts @@ -36,11 +36,6 @@ declare interface CanvasRenderingContext2D { webkitImageSmoothingEnabled: boolean; } -declare interface HTMLCanvasElement { - opaque: boolean; - webkitOpaque: boolean; -} - // Just for compatibility with the shared code declare interface Logger { log(...args); @@ -127,13 +122,6 @@ declare interface NodeRequire { context(src: string, flag: boolean, regexp: RegExp): WebpackContext; } -// HTML Element -declare interface Element { - style: any; - innerText: string; - innerHTML: string; -} - declare interface Object { entries(obj: object): Array<[string, any]>; } @@ -143,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; } @@ -168,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; } @@ -202,3 +192,11 @@ declare interface TypedSignal> { removeAll(); } + +declare module "worker-loader?inline=true&fallback=false!*" { + class WebpackWorker extends Worker { + constructor(); + } + + export default WebpackWorker; +} diff --git a/src/js/languages.js b/src/js/languages.js index cac22bcf..c46c3e88 100644 --- a/src/js/languages.js +++ b/src/js/languages.js @@ -81,6 +81,13 @@ export const LANGUAGES = { region: "", }, + "tr": { + name: "Türkçe", + data: require("./built-temp/base-tr.json"), + code: "tr", + region: "", + }, + "zh-CN": { // simplified name: "中文简体", diff --git a/src/js/platform/ad_providers/adinplay.js b/src/js/platform/ad_providers/adinplay.js index 00a08fcb..3897ec04 100644 --- a/src/js/platform/ad_providers/adinplay.js +++ b/src/js/platform/ad_providers/adinplay.js @@ -102,7 +102,10 @@ export class AdinplayAdProvider extends AdProviderInterface { // Add the player const videoElement = this.adContainerMainElement.querySelector(".videoInner"); - this.adContainerMainElement.querySelector(".adInner").style.maxWidth = w + "px"; + /** @type {HTMLElement} */ + const adInnerElement = this.adContainerMainElement.querySelector(".adInner"); + + adInnerElement.style.maxWidth = w + "px"; const self = this; window.aiptag.cmd.player.push(function () { 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/profile/application_settings.js b/src/js/profile/application_settings.js index 708c4d7b..2167c77c 100644 --- a/src/js/profile/application_settings.js +++ b/src/js/profile/application_settings.js @@ -13,8 +13,14 @@ import { LANGUAGES } from "../languages"; const logger = createLogger("application_settings"); -const categoryGame = "game"; -const categoryApp = "app"; +/** + * @enum {string} + */ +export const enumCategories = { + general: "general", + userInterface: "userInterface", + advanced: "advanced", +}; export const uiScales = [ { @@ -122,7 +128,7 @@ export const allApplicationSettings = [ options: Object.keys(LANGUAGES), valueGetter: key => key, textGetter: key => LANGUAGES[key].name, - category: categoryApp, + category: enumCategories.general, restartRequired: true, changeCb: (app, id) => null, magicValue: "auto-detect", @@ -132,7 +138,7 @@ export const allApplicationSettings = [ options: uiScales.sort((a, b) => a.size - b.size), valueGetter: scale => scale.id, textGetter: scale => T.settings.labels.uiScale.scales[scale.id], - category: categoryApp, + category: enumCategories.userInterface, restartRequired: false, changeCb: /** @@ -143,7 +149,7 @@ export const allApplicationSettings = [ new BoolSetting( "fullscreen", - categoryApp, + enumCategories.general, /** * @param {Application} app */ @@ -157,7 +163,7 @@ export const allApplicationSettings = [ new BoolSetting( "soundsMuted", - categoryApp, + enumCategories.general, /** * @param {Application} app */ @@ -165,7 +171,7 @@ export const allApplicationSettings = [ ), new BoolSetting( "musicMuted", - categoryApp, + enumCategories.general, /** * @param {Application} app */ @@ -174,7 +180,7 @@ export const allApplicationSettings = [ new BoolSetting( "enableColorBlindHelper", - categoryApp, + enumCategories.general, /** * @param {Application} app */ @@ -182,13 +188,13 @@ export const allApplicationSettings = [ ), // GAME - new BoolSetting("offerHints", categoryGame, (app, value) => {}), + new BoolSetting("offerHints", enumCategories.userInterface, (app, value) => {}), new EnumSetting("theme", { options: Object.keys(THEMES), valueGetter: theme => theme, textGetter: theme => T.settings.labels.theme.themes[theme], - category: categoryGame, + category: enumCategories.userInterface, restartRequired: false, changeCb: /** @@ -205,7 +211,7 @@ export const allApplicationSettings = [ options: autosaveIntervals, valueGetter: interval => interval.id, textGetter: interval => T.settings.labels.autosaveInterval.intervals[interval.id], - category: categoryGame, + category: enumCategories.advanced, restartRequired: false, changeCb: /** @@ -215,10 +221,10 @@ 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: categoryGame, + category: enumCategories.advanced, restartRequired: false, changeCb: (app, id) => {}, enabled: !IS_DEMO, @@ -228,7 +234,7 @@ export const allApplicationSettings = [ options: scrollWheelSensitivities.sort((a, b) => a.scale - b.scale), valueGetter: scale => scale.id, textGetter: scale => T.settings.labels.scrollWheelSensitivity.sensitivity[scale.id], - category: categoryGame, + category: enumCategories.advanced, restartRequired: false, changeCb: /** @@ -241,17 +247,17 @@ export const allApplicationSettings = [ options: movementSpeeds.sort((a, b) => a.multiplier - b.multiplier), valueGetter: multiplier => multiplier.id, textGetter: multiplier => T.settings.labels.movementSpeed.speeds[multiplier.id], - category: categoryGame, + category: enumCategories.advanced, restartRequired: false, changeCb: (app, id) => {}, }), - new BoolSetting("alwaysMultiplace", categoryGame, (app, value) => {}), - new BoolSetting("enableTunnelSmartplace", categoryGame, (app, value) => {}), - new BoolSetting("vignette", categoryGame, (app, value) => {}), - new BoolSetting("compactBuildingInfo", categoryGame, (app, value) => {}), - new BoolSetting("disableCutDeleteWarnings", categoryGame, (app, value) => {}), - new BoolSetting("rotationByBuilding", categoryGame, (app, value) => {}), + new BoolSetting("alwaysMultiplace", enumCategories.advanced, (app, value) => {}), + new BoolSetting("enableTunnelSmartplace", enumCategories.advanced, (app, value) => {}), + new BoolSetting("vignette", enumCategories.userInterface, (app, value) => {}), + new BoolSetting("compactBuildingInfo", enumCategories.userInterface, (app, value) => {}), + new BoolSetting("disableCutDeleteWarnings", enumCategories.advanced, (app, value) => {}), + new BoolSetting("rotationByBuilding", enumCategories.advanced, (app, value) => {}), ]; export function getApplicationSettingById(id) { diff --git a/src/js/profile/setting_types.js b/src/js/profile/setting_types.js index 1255f961..9e361f66 100644 --- a/src/js/profile/setting_types.js +++ b/src/js/profile/setting_types.js @@ -40,7 +40,7 @@ export class BaseSetting { /** * @param {Application} app - * @param {Element} element + * @param {HTMLElement} element * @param {any} dialogs */ bind(app, element, dialogs) { @@ -188,7 +188,7 @@ export class BoolSetting extends BaseSetting { return `
${this.enabled ? "" : `${T.demo.settingNotAvailable}`} - +
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 4962171e..30c28879 100644 --- a/src/js/savegame/savegame_compressor.js +++ b/src/js/savegame/savegame_compressor.js @@ -44,16 +44,18 @@ function decompressInt(s) { } // Sanity -for (let i = 0; i < 10000; ++i) { - if (decompressInt(compressInt(i)) !== i) { - throw new Error( - "Bad compression for: " + - i + - " compressed: " + - compressInt(i) + - " decompressed: " + - decompressInt(compressInt(i)) - ); +if (G_IS_DEV) { + for (let i = 0; i < 10000; ++i) { + if (decompressInt(compressInt(i)) !== i) { + throw new Error( + "Bad compression for: " + + i + + " compressed: " + + compressInt(i) + + " decompressed: " + + decompressInt(compressInt(i)) + ); + } } } 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..0f9b4542 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(); } /** diff --git a/src/js/states/about.js b/src/js/states/about.js index 900adc5a..db06d8de 100644 --- a/src/js/states/about.js +++ b/src/js/states/about.js @@ -1,9 +1,7 @@ import { TextualGameState } from "../core/textual_game_state"; -import { SOUNDS } from "../platform/sound"; import { T } from "../translations"; -import { KEYMAPPINGS, getStringForKeyCode } from "../game/key_action_mapper"; -import { Dialog } from "../core/modal_dialog_elements"; import { THIRDPARTY_URLS } from "../core/config"; +import { cachebust } from "../core/cachebust"; export class AboutState extends TextualGameState { constructor() { @@ -15,9 +13,16 @@ export class AboutState extends TextualGameState { } getMainContentHTML() { - return T.about.body - .replace("", THIRDPARTY_URLS.github) - .replace("", THIRDPARTY_URLS.discord); + return ` +
+ shapez.io Logo +
+
+ ${T.about.body + .replace("", THIRDPARTY_URLS.github) + .replace("", THIRDPARTY_URLS.discord)} +
+ `; } onEnter() { diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index cf7a05ac..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() { @@ -46,7 +65,7 @@ export class MainMenuState extends GameState { : "" }
- + @@ -92,10 +111,10 @@ export class MainMenuState extends GameState { ${T.mainMenu.subreddit} ${T.changelog.title} - + ${T.mainMenu.helpTranslate}
- +
${T.mainMenu.madeBy.replace( "", 'Tobias Springer' @@ -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; @@ -218,11 +236,6 @@ export class MainMenuState extends GameState { this.trackClicks(qs(".languageChoose"), this.onLanguageChooseClicked); this.trackClicks(qs(".helpTranslate"), this.onTranslationHelpLinkClicked); - const contestButton = qs(".participateContest"); - if (contestButton) { - this.trackClicks(contestButton, this.onContestClicked); - } - if (G_IS_STANDALONE) { this.trackClicks(qs(".exitAppButton"), this.onExitAppButtonClicked); } @@ -312,15 +325,6 @@ export class MainMenuState extends GameState { this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.reddit); } - onContestClicked() { - this.app.analytics.trackUiClick("contest_click"); - - this.dialogs.showInfo( - T.mainMenu.contests.contest_01_03062020.title, - T.mainMenu.contests.contest_01_03062020.longDesc - ); - } - onLanguageChooseClicked() { this.app.analytics.trackUiClick("choose_language"); const setting = /** @type {EnumSetting} */ (getApplicationSettingById("language")); @@ -408,7 +412,7 @@ export class MainMenuState extends GameState { } /** - * @param {object} game + * @param {SavegameMetadata} game */ resumeGame(game) { this.app.analytics.trackUiClick("resume_game"); @@ -433,7 +437,7 @@ export class MainMenuState extends GameState { } /** - * @param {object} game + * @param {SavegameMetadata} game */ deleteGame(game) { this.app.analytics.trackUiClick("delete_game"); @@ -461,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 eee57f05..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"; @@ -37,7 +37,7 @@ export class PreloadState extends GameState { return false; } - onEnter(payload) { + onEnter() { this.htmlElement.classList.add("prefab_LoadingState"); const elementsToRemove = ["#loadingPreload", "#fontPreload"]; @@ -52,9 +52,13 @@ export class PreloadState extends GameState { const dialogsElement = document.body.querySelector(".modalDialogParent"); this.dialogs.initializeToElement(dialogsElement); + /** @type {HTMLElement} */ this.statusText = this.htmlElement.querySelector(".loadingStatus > .desc"); + /** @type {HTMLElement} */ this.statusBar = this.htmlElement.querySelector(".loadingStatus > .bar > .inner"); + /** @type {HTMLElement} */ this.statusBarText = this.htmlElement.querySelector(".loadingStatus > .bar > .status"); + this.currentStatus = "booting"; this.currentIndex = 0; @@ -224,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) { @@ -251,12 +251,12 @@ export class PreloadState extends GameState { ${this.currentStatus} failed:
${text}
- +
Please send me an email with steps to reproduce and what you did before this happened:
- +
Build ${G_BUILD_VERSION} @ ${G_BUILD_COMMIT_HASH} @@ -275,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/states/settings.js b/src/js/states/settings.js index 4dce1fa3..5e22492a 100644 --- a/src/js/states/settings.js +++ b/src/js/states/settings.js @@ -1,6 +1,6 @@ import { TextualGameState } from "../core/textual_game_state"; import { formatSecondsToTimeAgo } from "../core/utils"; -import { allApplicationSettings } from "../profile/application_settings"; +import { allApplicationSettings, enumCategories } from "../profile/application_settings"; import { T } from "../translations"; export class SettingsState extends TextualGameState { @@ -15,50 +15,65 @@ export class SettingsState extends TextualGameState { getMainContentHTML() { return ` - ") + .join(""); } renderBuildText() { @@ -90,10 +105,33 @@ export class SettingsState extends TextualGameState { } this.initSettings(); + this.initCategoryButtons(); + + this.htmlElement.querySelector(".category").classList.add("active"); + this.htmlElement.querySelector(".categoryButton").classList.add("active"); + } + + setActiveCategory(category) { + const previousCategory = this.htmlElement.querySelector(".category.active"); + const previousCategoryButton = this.htmlElement.querySelector(".categoryButton.active"); + + if (previousCategory.getAttribute("data-category") == category) { + return; + } + + previousCategory.classList.remove("active"); + previousCategoryButton.classList.remove("active"); + + const newCategory = this.htmlElement.querySelector("[data-category='" + category + "']"); + const newCategoryButton = this.htmlElement.querySelector("[data-category-btn='" + category + "']"); + + newCategory.classList.add("active"); + newCategoryButton.classList.add("active"); } initSettings() { allApplicationSettings.forEach(setting => { + /** @type {HTMLElement} */ const element = this.htmlElement.querySelector("[data-setting='" + setting.id + "']"); setting.bind(this.app, element, this.dialogs); setting.syncValueToElement(); @@ -107,6 +145,20 @@ export class SettingsState extends TextualGameState { }); } + initCategoryButtons() { + Object.keys(enumCategories).forEach(key => { + const category = enumCategories[key]; + const button = this.htmlElement.querySelector("[data-category-btn='" + category + "']"); + this.trackClicks( + button, + () => { + this.setActiveCategory(category); + }, + { preventDefault: false } + ); + }); + } + onAboutClicked() { this.moveToStateAddGoBack("AboutState"); } diff --git a/src/js/tsconfig.json b/src/js/tsconfig.json index 5184bc42..8a151000 100644 --- a/src/js/tsconfig.json +++ b/src/js/tsconfig.json @@ -3,7 +3,7 @@ /* Basic Options */ "target": "es6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, - // "lib": [], /* Specify library files to be included in the compilation. */ + "lib": ["DOM","ES2018"], /* Specify library files to be included in the compilation. */ "allowJs": true /* Allow javascript files to be compiled. */, "checkJs": true /* Report errors in .js files. */, // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ @@ -54,5 +54,6 @@ // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ "resolveJsonModule": true - } + }, + "exclude": ["webworkers"] } diff --git a/src/js/webworkers/background_animation_frame_emittter.worker.js b/src/js/webworkers/background_animation_frame_emittter.worker.js index c927b2d3..5469f7aa 100644 --- a/src/js/webworkers/background_animation_frame_emittter.worker.js +++ b/src/js/webworkers/background_animation_frame_emittter.worker.js @@ -1,15 +1,14 @@ // We clamp high deltas so 30 fps is fairly ok -var bgFps = 30; -var desiredMsDelay = 1000 / bgFps; +const bgFps = 30; +const desiredMsDelay = 1000 / bgFps; -let lastTick = 0; +let lastTick = performance.now(); function tick() { - var now = performance.now(); - var delta = now - lastTick; + const now = performance.now(); + const delta = now - lastTick; lastTick = now; - // @ts-ignore postMessage({ delta }); } diff --git a/src/js/webworkers/compression.worker.js b/src/js/webworkers/compression.worker.js index 0bcb0ea6..ef40f254 100644 --- a/src/js/webworkers/compression.worker.js +++ b/src/js/webworkers/compression.worker.js @@ -12,16 +12,12 @@ function accessNestedPropertyReverse(obj, keys) { const salt = accessNestedPropertyReverse(globalConfig, ["file", "info"]); -onmessage = function (event) { +self.addEventListener("message", event => { + // @ts-ignore const { jobId, job, data } = event.data; const result = performJob(job, data); - - // @ts-ignore - postMessage({ - jobId, - result, - }); -}; + self.postMessage({ jobId, result }); +}); function performJob(job, data) { switch (job) { diff --git a/src/js/webworkers/tsconfig.json b/src/js/webworkers/tsconfig.json new file mode 100644 index 00000000..dce06856 --- /dev/null +++ b/src/js/webworkers/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "lib": ["ES2018","WebWorker"] + }, + "exclude": [], + "extends": "../tsconfig", + "include": ["*.worker.js"] +} diff --git a/translations/README.md b/translations/README.md index a2420f1c..7695f022 100644 --- a/translations/README.md +++ b/translations/README.md @@ -59,7 +59,7 @@ If you want to edit an existing translation (Fixing typos, Updating it to a newe ## Adding a new language -Please DM me on discord (tobspr#5407), so I can add the language template for you. +Please DM me on Discord (tobspr#5407), so I can add the language template for you. Please use the following template: diff --git a/translations/base-ar.yaml b/translations/base-ar.yaml index 443a8b38..17d822d9 100644 --- a/translations/base-ar.yaml +++ b/translations/base-ar.yaml @@ -15,13 +15,17 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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,26 @@ 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. stacker: default: @@ -505,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: @@ -523,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. @@ -558,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 @@ -578,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 @@ -591,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 @@ -603,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 @@ -631,8 +651,9 @@ storyRewards: settings: title: Settings categories: - game: Game - app: Application + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Development @@ -644,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 @@ -652,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: >- @@ -663,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 @@ -704,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 @@ -785,6 +805,7 @@ keybindings: mapMoveRight: Move Right mapMoveDown: Move Down mapMoveLeft: Move Left + mapMoveFaster: Move Faster centerMap: Center Map mapZoomIn: Zoom in @@ -793,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 4ce91039..79623047 100644 --- a/translations/base-cat.yaml +++ b/translations/base-cat.yaml @@ -15,14 +15,18 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. @@ -496,6 +507,9 @@ buildings: ccw: name: Rotador (Antihorari) description: Rota formes en sentit antihorari 90 graus. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -541,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. @@ -596,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! @@ -634,8 +651,9 @@ storyRewards: settings: title: Opcions categories: - game: Joc - app: Aplicació + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Desenvolupament @@ -659,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 @@ -693,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: >- @@ -722,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: @@ -781,6 +814,7 @@ keybindings: menuOpenShop: Upgrades menuOpenStats: Statistics + menuClose: Close Menu toggleHud: Toggle HUD toggleFPSInfo: Toggle FPS and Debug Info @@ -811,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 @@ -819,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.

- This game wouldn't have been possible without the great discord community around my games - You should really join the discord server!

+ + 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 7c6c5810..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ě. @@ -471,6 +472,9 @@ buildings: ccw: name: Rotor (opačný) description: Otáčí tvary o 90 stupňů proti směru hodinových ručiček + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -612,8 +616,9 @@ storyRewards: settings: title: Nastavení categories: - game: Hra - app: Aplikace + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Vývojová verze @@ -823,9 +828,9 @@ about: Pokud se chceš na hře podílet, podívej se na shapez.io na githubu.

- Tato hra by nebyla ani možná bez skvělé discord komunity + Tato hra by nebyla ani možná bez skvělé Discord komunity okolo Tobiasových her - Vážně by ses měl přijít mrknout na discord server!

+ target="_blank">Discord server!

Soundtrack udělal Peppsen - Je úžasnej.

diff --git a/translations/base-da.yaml b/translations/base-da.yaml index dc11535e..b337515e 100644 --- a/translations/base-da.yaml +++ b/translations/base-da.yaml @@ -15,13 +15,17 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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,679 +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: 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: - game: Game - app: Application + 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 @@ -814,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 418ac40d..62c823da 100644 --- a/translations/base-de.yaml +++ b/translations/base-de.yaml @@ -15,15 +15,16 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. - # This is the text shown above the discord link + # This is the text shown above the Discord link discordLink: Offizieller Discord - Hier kannst du mit mir schreiben! # 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. @@ -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: @@ -484,6 +486,9 @@ buildings: ccw: name: Rotierer (CCW) description: Rotiert Formen gegen den Uhrzeigersinn um 90 Grad. + fl: + name: Rotierer (180) + description: Rotiert Formen um 180 Grad. stacker: default: @@ -527,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 @@ -633,8 +638,9 @@ storyRewards: settings: title: Einstellungen categories: - game: Spiel - app: Applikation + general: Allgemein + userInterface: Benutzeroberfläche + advanced: Erweitert versionBadges: dev: Entwicklung @@ -829,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 9d3a5780..a8c8b241 100644 --- a/translations/base-el.yaml +++ b/translations/base-el.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. @@ -485,6 +486,9 @@ buildings: ccw: name: Rotate (CCW) description: Rotates shapes counter clockwise by 90 degrees. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -631,8 +635,9 @@ storyRewards: settings: title: Settings categories: - game: Game - app: Application + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Development @@ -844,7 +849,7 @@ about: If you want to contribute, check out shapez.io on github.

- This game wouldn't have been possible without the great discord community + This game wouldn't have been possible without the great Discord community around my games - You should really join the discord server!

diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 74f8d150..2c916da2 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -15,15 +15,16 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. - # This is the text shown above the discord link + # 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. @@ -452,7 +453,8 @@ buildings: 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 +463,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 +473,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. @@ -529,6 +533,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. @@ -637,7 +642,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 @@ -647,8 +652,9 @@ storyRewards: settings: title: Settings categories: - game: Game - app: Application + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Development @@ -855,13 +861,13 @@ about: 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!

+ 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-es.yaml b/translations/base-es.yaml index f5efacfa..765970d6 100644 --- a/translations/base-es.yaml +++ b/translations/base-es.yaml @@ -15,15 +15,16 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. - # This is the text shown above the discord link + # This is the text shown above the Discord link discordLink: Discord oficial - ¡Chatea conmigo! # 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. @@ -502,6 +503,9 @@ buildings: ccw: name: Rotador (Inverso) description: Rota las figuras en sentido antihorario 90 grados. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -642,8 +646,9 @@ storyRewards: settings: title: Opciones categories: - game: Juego - app: Aplicación + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Desarrollo diff --git a/translations/base-fi.yaml b/translations/base-fi.yaml index 784e48eb..5acc58cf 100644 --- a/translations/base-fi.yaml +++ b/translations/base-fi.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. @@ -499,6 +500,9 @@ buildings: ccw: name: Rotate (Vastapäivään) description: Kääntää muotoja 90 astetta vastapäivään. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -638,8 +642,9 @@ storyRewards: settings: title: Asetukset categories: - game: Peli - app: Sovellus + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Kehitys @@ -848,7 +853,7 @@ about: Jos haluat osallistua, tarkista shapez.io githubissa.

- Tämä peli ei olisi ollut mahdollinen ilman suurta discord yhteisöä pelini ympärillä - Sinun kannattaisi liittyä discord palvelimelleni!

+ Tämä peli ei olisi ollut mahdollinen ilman suurta Discord yhteisöä pelini ympärillä - Sinun kannattaisi liittyä Discord palvelimelleni!

Ääniraidan on tehnyt Peppsen - Hän on mahtava.

diff --git a/translations/base-fr.yaml b/translations/base-fr.yaml index 338f0494..8eb4f0ef 100644 --- a/translations/base-fr.yaml +++ b/translations/base-fr.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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 @@ -181,7 +182,7 @@ dialogs: Votre sauvegarde a été importée avec succès. gameLoadFailure: - title: Le jeu est cassé + title: La sauvegarde est corrompue text: >- Impossible de charger votre sauvegarde: @@ -202,7 +203,7 @@ dialogs: editKeybinding: title: Changer les contrôles - desc: Appuyez sur la touche que vous voulez assigner, ou Echap pour annuler. + desc: Appuyez sur la touche que vous voulez assigner, ou Échap pour annuler. resetKeybindingsConfirmation: title: Réinitialiser les contrôles @@ -234,13 +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é @@ -250,7 +250,7 @@ dialogs: keybindingsIntroduction: title: Raccourcis utiles desc: >- - Le jeu a plein de raccourcis facilitant la construction de grandes usines. + Le jeu a de nombreux raccourcis facilitant la construction de grandes usines. En voici quelques uns, n'hésitez pas à aller découvrir les raccourcis !

CTRL + Glisser: Sélectionne une zone à copier / effacer.
SHIFT: Laissez appuyé pour placer plusieurs fois le même bâtiment.
@@ -259,7 +259,7 @@ dialogs: createMarker: title: Nouvelle balise desc: Donnez-lui un nom, vous pouvez aussi inclure le raccourci d'une forme (Que vous pouvez générer ici) - titleEdit: Edit Marker + titleEdit: Éditer cette balise markerDemoLimit: desc: Vous ne pouvez créer que deux balises dans la démo. Achetez la version complète pour en faire autant que vous voulez ! @@ -352,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' @@ -399,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 @@ -487,6 +487,9 @@ buildings: ccw: name: Pivoteur inversé description: Fait pivoter une forme de 90 degrés vers la gauche. + fl: + name: Pivoteur (180) + description: Fait pivoter les formes de 90 degrés. stacker: default: @@ -618,8 +621,6 @@ storyRewards: title: Patrons desc: Vous pouvez maintenant copier et coller des parties de votre usines ! Sélectionnez une zone (Appuyez sur CTRL, et sélectionnez avec votre souris), et appuyez sur 'C' pour la copier.

Coller n'est pas gratuit, vous devez produire des formes de patrons pour vous le payer (les mêmes que celles que vous venez de livrer). - # Question from the translator: Should shortcuts be hardcoded in this message ? - # Special reward, which is shown when there is no reward actually no_reward: title: Niveau suivant @@ -634,8 +635,9 @@ storyRewards: settings: title: Options categories: - game: Jeu - app: Application + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Développement @@ -706,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 @@ -840,9 +842,9 @@ about: Si vous souhaitez contribuer, allez voir shapez.io sur github.

- Ce jeu n'aurait pu être réalisé sans la précieuse communauté discord autour de + Ce jeu n'aurait pu être réalisé sans la précieuse communauté Discord autour de mes jeux - Vous devriez vraiment envisager de joindre le serveur discord !

+ target="_blank">serveur Discord !

La bande son a été créée par Peppsen - Il est impressionnant !

diff --git a/translations/base-hr.yaml b/translations/base-hr.yaml index 1866cd1a..5a221561 100644 --- a/translations/base-hr.yaml +++ b/translations/base-hr.yaml @@ -15,7 +15,7 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # the basic structure so the game also detects it. # @@ -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. @@ -533,6 +534,9 @@ buildings: ccw: name: Obrtač (↺) description: Okreće oblike za 90 stupnjeva u smjeru suprotnom od kazaljke na satu. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -672,8 +676,9 @@ storyRewards: settings: title: Postavke categories: - game: Igra - app: Aplikacija + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Development @@ -883,7 +888,7 @@ about: 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.

diff --git a/translations/base-hu.yaml b/translations/base-hu.yaml index f047d783..bc5b727e 100644 --- a/translations/base-hu.yaml +++ b/translations/base-hu.yaml @@ -15,13 +15,17 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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,160 +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. - - 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. @@ -630,8 +652,9 @@ storyRewards: settings: title: Beállítások categories: - game: Game - app: Application + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Development @@ -841,9 +864,9 @@ about: If you want to contribute, check out shapez.io on github.

- This game wouldn't have been possible without the great discord community + This game wouldn't have been possible without the great Discord community around my games - You should really join the discord server!

+ target="_blank">Discord server!

The soundtrack was made by Peppsen - He's awesome.

diff --git a/translations/base-ind.yaml b/translations/base-ind.yaml index 846076b3..46f72e0f 100644 --- a/translations/base-ind.yaml +++ b/translations/base-ind.yaml @@ -15,17 +15,18 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # the basic structure so the game also detects it. # +--- steamPage: # This is the short text appearing on the steam page shortText: shapez.io adalah permainan membangun pabrik-pabrik dengan tujuan untuk mengautomatiskan pembentukan dan pemrosesan bentuk-bentuk yang bertambah semakin kompleks di dalam area permainan yang meluas secara tak terhingga. + # This is the text shown above the discord link discordLink: Tautan Resmi Discord – Obrol dengan saya! - # 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) @@ -503,6 +504,9 @@ buildings: ccw: name: Pemutar (Berlawanan Arah Jarum Jam) description: Memutar bentuk berlawanan arah jarum jam sebesar 90 derajat. + fl: + name: Pemutar (180) + description: Memutar bentuk sebesar 180 derajat. stacker: default: @@ -642,8 +646,9 @@ storyRewards: settings: title: Pengaturan categories: - game: Permainan - app: Aplikasi + general: Umum + userInterface: Antarmuka Pengguna + advanced: Tingkat Tinggi versionBadges: dev: Pengembangan diff --git a/translations/base-it.yaml b/translations/base-it.yaml index 430169f5..df45601e 100644 --- a/translations/base-it.yaml +++ b/translations/base-it.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. @@ -485,6 +486,9 @@ buildings: ccw: name: Rotate (CCW) description: Rotates shapes counter clockwise by 90 degrees. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -631,8 +635,9 @@ storyRewards: settings: title: Impostazioni categories: - game: Gioco - app: Applicazione + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Sviluppo @@ -842,9 +847,9 @@ about: If you want to contribute, check out shapez.io on github.

- This game wouldn't have been possible without the great discord community + This game wouldn't have been possible without the great Discord community around my games - You should really join the discord server!

+ target="_blank">Discord server!

The soundtrack was made by Peppsen - He's awesome.

diff --git a/translations/base-ja.yaml b/translations/base-ja.yaml index d8bac714..cdb56104 100644 --- a/translations/base-ja.yaml +++ b/translations/base-ja.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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: 空 @@ -490,6 +491,9 @@ buildings: ccw: name: 回転機 (逆) description: 形を反時計回り方向に90度回転します。 + fl: + name: 回転機 (180) + description: 形を180度回転します。 stacker: default: @@ -530,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 @@ -631,8 +635,9 @@ storyRewards: settings: title: 設定 categories: - game: ゲーム - app: アプリケーション + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Development @@ -836,7 +841,7 @@ about: 開発に参加したい場合は以下をチェックしてみてください。shapez.io on github.

- このゲームはdiscordでの素晴らしいコミュニティなしには実現しませんでした。 - このサーバにも是非参加してください! discord server!

+ このゲームはdiscordでの素晴らしいコミュニティなしには実現しませんでした。 - このサーバにも是非参加してください! Discord server!

サウンドトラックはPeppsenにより製作されました。 - 彼は素晴らしいです

diff --git a/translations/base-kor.yaml b/translations/base-kor.yaml index e8f4b044..26f85da9 100644 --- a/translations/base-kor.yaml +++ b/translations/base-kor.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # the basic structure so the game also detects it. # +--- steamPage: # This is the short text appearing on the steam page shortText: shapez.io는 무한한 공간에서 점점 더 복잡한 도형의 생산과 조합을 자동화하는 공장을 짓는 게임입니다. @@ -489,6 +490,9 @@ buildings: ccw: name: 회전기 (반시계방향) description: 도형을 반시계방향으로 90도 회전시킨다. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -630,8 +634,9 @@ storyRewards: settings: title: 설정 categories: - game: 게임 - app: 앱 + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: 개발 diff --git a/translations/base-lt.yaml b/translations/base-lt.yaml index f0732574..79a450bf 100644 --- a/translations/base-lt.yaml +++ b/translations/base-lt.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. @@ -490,6 +491,9 @@ buildings: ccw: name: Rotate (CCW) description: Rotates shapes counter clockwise by 90 degrees. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -631,8 +635,9 @@ storyRewards: settings: title: Settings categories: - game: Game - app: Application + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Development @@ -841,9 +846,9 @@ about: If you want to contribute, check out shapez.io on github.

- This game wouldn't have been possible without the great discord community + This game wouldn't have been possible without the great Discord community around my games - You should really join the discord server!

+ target="_blank">Discord server!

The soundtrack was made by Peppsen - He's awesome.

diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml index ba50d3b7..2f061268 100644 --- a/translations/base-nl.yaml +++ b/translations/base-nl.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. @@ -141,7 +142,7 @@ mainMenu: changelog: Changelog importSavegame: Importeren openSourceHint: Dit spel is open source! - discordLink: Officiële discord-server (Engelstalig) + discordLink: Officiële Discord-server (Engelstalig) helpTranslate: Help met vertalen! # This is shown when using firefox and other browsers which are not supported. @@ -483,6 +484,9 @@ buildings: ccw: name: Roteerder (andersom) description: Draait vormen 90 graden tegen de klok in. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -629,8 +633,9 @@ storyRewards: settings: title: Opties categories: - game: Spel - app: Applicatie + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Ontwikkeling @@ -839,9 +844,9 @@ about: Als je ook bij wil dragen, ga dan naar shapez.io op github.

- Dit spel was niet mogelijk geweest zonder de geweldige discord community + Dit spel was niet mogelijk geweest zonder de geweldige Discord community rondom mijn spellen - Je zou eens lid moeten worden van de discord server (engelstalig)!

+ target="_blank">Discord server (engelstalig)!

De muziek is gemaakt door Peppsen - Hij is geweldig.

diff --git a/translations/base-no.yaml b/translations/base-no.yaml index 58a93884..90568fdd 100644 --- a/translations/base-no.yaml +++ b/translations/base-no.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. @@ -487,6 +488,9 @@ buildings: ccw: name: Roter (Mot klokken) description: Roter objekter mot klokken, 90 grader. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -628,8 +632,9 @@ storyRewards: settings: title: Instillinger categories: - game: Spill - app: Applikasjon + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Utvikling @@ -838,7 +843,7 @@ about: Hvis du ønsker å bidra, sjekk ut shapez.io på github.

- Spillet ville ikke vært mulig uten det fantastidke discord samfunnet rundt spillet mitt - Du burde virkelig bli med på discord serveren!

+ Spillet ville ikke vært mulig uten det fantastidke Discord samfunnet rundt spillet mitt - Du burde virkelig bli med på Discord serveren!

Lydsporet er laget av Peppsen - Han er rå.

diff --git a/translations/base-pl.yaml b/translations/base-pl.yaml index 08701773..ae930721 100644 --- a/translations/base-pl.yaml +++ b/translations/base-pl.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. @@ -499,6 +500,9 @@ buildings: ccw: name: Obracacz (Przeciwny kierunek) description: Obraca kształt przeciwnie do ruchu wskazówek zegara o 90 stopni. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -652,8 +656,9 @@ storyRewards: settings: title: Ustawienia categories: - game: Gra - app: Aplikacja + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Wersja Rozwojowa diff --git a/translations/base-pt-BR.yaml b/translations/base-pt-BR.yaml index 4e9ecccb..bf269558 100644 --- a/translations/base-pt-BR.yaml +++ b/translations/base-pt-BR.yaml @@ -15,14 +15,18 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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: @@ -489,6 +504,9 @@ buildings: ccw: name: Rotacionador (Anti-horário) description: Gira as formas no sentido anti-horário em 90 graus. + fl: + name: Rotacionador (180) + description: Gira as formas em 180 graus. stacker: default: @@ -504,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 @@ -522,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. @@ -553,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 @@ -566,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 @@ -594,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 @@ -602,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 @@ -634,8 +648,9 @@ storyRewards: settings: title: opções categories: - game: Jogo - app: Aplicação + general: Geral + userInterface: Interface de Usuário + advanced: Avançado versionBadges: dev: Desenvolvedor @@ -649,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: >- @@ -674,7 +724,7 @@ settings: soundsMuted: title: Som description: >- - Se ligado o jogo fica mudo + Se ligado, o jogo fica mudo. musicMuted: title: Música @@ -685,7 +735,6 @@ settings: title: Tema description: >- Escolha o tema entre (Claro / Escuro). - themes: dark: Escuro light: Claro @@ -705,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 @@ -786,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 @@ -794,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 @@ -820,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 c16cbdf6..4f16e0a9 100644 --- a/translations/base-pt-PT.yaml +++ b/translations/base-pt-PT.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. @@ -31,15 +32,15 @@ steamPage: [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] shapez.io é um jogo cujo objetivo é construir fábricas para automatizar a criação e fusão de formas geométricas num mapa infinito. - Ao entregar as formas pedidas, progredirás no jogo e desbloquearás melhorias para acelerar a produção da tua fábrica. + Ao entregar as formas pedidas, irás progredir no jogo e irás desbloquear melhorias para acelerar a produção da tua fábrica. Uma vez que a procura aumenta a cada nível, terás de aumentar a tua fábrica para fazer face às necessidades - Para isso, terás de explorar o [b]mapa infinito[/b] para encontrar todos os recursos! - Rapidamente precisarás de misturar cores e pintar as formas com elas - Combina os recursos de cores vermelha, verde e azul para produzir ainda mais cores e usá-las para pintar as formas geométricas com o intuito de satisfazer a procura. + Rapidamente irás precisar de misturar cores e pintar as formas com elas - Combina os recursos de cores vermelha, verde e azul para produzires mais cores e usá-las para pintar as formas geométricas com o intuito de satisfazer a procura. Este jogo conta com 18 níveis (Que deverão manter-te ocupado durante horas!) mas estou constantemente a adicionar novos conteúdos - Há muitas coisas planeadas! - Ao comprar o jogo, terás acesso à versão completa, que contém funcionalidades adicionais, e também a conteúdos desenvolvidos recentemente. + Ao comprares o jogo, terás acesso à versão completa, que contém funcionalidades adicionais, e também a conteúdos desenvolvidos recentemente. [b]Vantagens do jogo completo[/b] @@ -484,6 +485,9 @@ buildings: ccw: name: Rodar (CCW) description: Roda as formas 90º no sentido contrário ao dos ponteiros do relógio. + fl: + name: Rodar (180) + description: Roda as formas 180º. stacker: default: @@ -533,14 +537,14 @@ buildings: deliver: Entrega toGenerateEnergy: Para default: - name: Gerador + name: Gerador de energia description: Gera energia consumindo formas. wire_crossings: default: - name: Repartidor + name: Repartidor de fios description: Divide um fio elétrico em dois. merger: - name: Conector de junção + name: Conector de fios description: Junta dois fios elétricos num só. storyRewards: @@ -629,8 +633,9 @@ storyRewards: settings: title: Definições categories: - game: Jogo - app: Aplicação + general: Geral + userInterface: Interface de Utilizador + advanced: Avançado versionBadges: dev: Desenvolvimento @@ -828,7 +833,7 @@ keybindings: menuClose: Fechar Menu switchLayers: Troca de camadas advanced_processor: Inversor de Cor - energy_generator: Gerador + energy_generator: Gerador de energia wire: Fio Elétrico about: title: Sobre o jogo @@ -839,9 +844,9 @@ about: Se quiseres contribuir, dá uma olhadela em shapez.io no github.

- Este Jogo não seria possível sem a excelente comunidade do discord + Este Jogo não seria possível sem a excelente comunidade do Discord em torno dos meus jogos - Devias mesmo juntar-te ao servidor no discord!

+ target="_blank">servidor no Discord!

A banda sonora foi feita por Peppsen - Ele é Fantástico.

diff --git a/translations/base-ro.yaml b/translations/base-ro.yaml index 491551bb..15d3ff4b 100644 --- a/translations/base-ro.yaml +++ b/translations/base-ro.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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ă. @@ -483,6 +484,9 @@ buildings: ccw: name: Rotate (CCW) description: Rotește formele în inversul sensului acelor de ceasornic la 90 de grade. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -628,8 +632,9 @@ storyRewards: settings: title: Setări categories: - game: Joc - app: Aplicație + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Dezvoltare @@ -833,9 +838,9 @@ about: Dacă vrei să contribui, verifică shapez.io pe github.

- Acest joc nu ar fi fost posibil fără minunata comunitate de pe discord + Acest joc nu ar fi fost posibil fără minunata comunitate de pe Discord pe lângă jocurile mele - Chiar ar trebui să te alături server-ului de discord!

+ target="_blank">server-ului de Discord!

Coloana sonoră a fost făcută de Peppsen - Este uimitor.

diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index 92f191e2..7dddc198 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # the basic structure so the game also detects it. # +--- steamPage: # This is the short text appearing on the steam page shortText: shapez.io — это игра о строительстве фабрик для автоматизации создания и объединения все более сложных фигур на бесконечной карте. @@ -487,6 +488,9 @@ buildings: ccw: name: Вращатель (Обр.) description: Поворачивает фигуры против часовой стрелки на 90 градусов. + fl: + name: Вращатель (180) + description: Вращает фигуры на 180 градусов. stacker: default: @@ -632,8 +636,9 @@ storyRewards: settings: title: Настройки categories: - game: Игровые - app: Основные + general: Основные + userInterface: Интерфейс + advanced: Продвинутые versionBadges: dev: Разработчик diff --git a/translations/base-sl.yaml b/translations/base-sl.yaml index 8b71bcdd..ad084b9d 100644 --- a/translations/base-sl.yaml +++ b/translations/base-sl.yaml @@ -15,15 +15,16 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. - # This is the text shown above the discord link + # This is the text shown above the Discord link discordLink: Uradni Discord - Pridruži se klepetu! # 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. @@ -501,6 +502,9 @@ buildings: ccw: name: Rotate (CCW) description: Rotates shapes counter-clockwise by 90 degrees. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -640,8 +644,9 @@ storyRewards: settings: title: Settings categories: - game: Game - app: Application + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Development @@ -850,7 +855,7 @@ about: 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.

diff --git a/translations/base-sr.yaml b/translations/base-sr.yaml index 15a62d62..953c024a 100644 --- a/translations/base-sr.yaml +++ b/translations/base-sr.yaml @@ -15,7 +15,7 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # the basic structure so the game also detects it. # # @@ -36,11 +36,12 @@ # + 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. - # This is the text shown above the discord link + # This is the text shown above the Discord link discordLink: Oficijalni Discord server # TODO # 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. @@ -521,6 +522,9 @@ buildings: ccw: name: Obrtač (↺) description: Okreće oblike za 90 stepeni u smeru suprotnom od kazaljke na satu. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -662,8 +666,9 @@ storyRewards: settings: title: Podešavanja categories: - game: Igra - app: Aplikacija + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Razvoj @@ -872,7 +877,7 @@ about: Ako želite da doprinesete razvoju, bacite pogled na shapez.io github.

- Bez odlične discord zajednice ova igra, kao ni druge, ne bi postojala - Pridružite se discord serveru!

+ Bez odlične Discord zajednice ova igra, kao ni druge, ne bi postojala - Pridružite se Discord serveru!

Peppsen je komponovao muziku za igru - On je super.

diff --git a/translations/base-sv.yaml b/translations/base-sv.yaml index b0fa1c52..ab302368 100644 --- a/translations/base-sv.yaml +++ b/translations/base-sv.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. @@ -118,7 +119,7 @@ global: # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s - hoursAndMinutesShort: t s + hoursAndMinutesShort: t m xMinutes: minuter @@ -138,15 +139,15 @@ demoBanners: mainMenu: play: Spela - changelog: Changelog + changelog: Ändringslogg importSavegame: Importera - openSourceHint: Detta spel är open source! + openSourceHint: Detta spelet har öppen kod! discordLink: Officiell Discord Server helpTranslate: Hjälp till att översätta! # This is shown when using firefox and other browsers which are not supported. browserWarning: >- - Förlåt, men det är känt att spelet spelar långsamt på din browser! Skaffa den fristående versionen eller ladda ner chrome för den fulla upplevelsen. + Förlåt, men det är känt att spelet spelar långsamt på din browser! Skaffa den fristående versionen eller ladda ner Chrome för en bättre upplevelse. savegameLevel: Nivå savegameLevelUnknown: Okänd Nivå @@ -202,7 +203,7 @@ dialogs: editKeybinding: title: Ändra snabbtangenter - desc: Tryck ned tangenten eller musknappen du vill tillsätta, eller escape för att avbryta. + desc: Tryck ned tangenten eller musknappen du vill använda, eller escape för att avbryta. resetKeybindingsConfirmation: title: Återställ snabbtangenter @@ -218,34 +219,34 @@ dialogs: oneSavegameLimit: title: Begränsad mängd sparfiler - desc: Du kan bara ha en sparfil åt gången i demoversionen. Var snäll och ta bort det existerande eller skaffa den fristående versionen! + desc: Du kan bara ha en sparfil åt gången i demoversionen. Var snäll och ta bort den nuvarande eller skaffa den fristående versionen! updateSummary: title: Ny uppdatering! desc: >- - Här är ändringarna sen du sist spelade: + Här är ändringarna sen du senast spelade: upgradesIntroduction: title: Lås upp Uppgraderingar desc: >- - Alla former du producerar kan användas för att låsa upp uppgraderingar - Förstör inte dina gamla fabriker! + Alla former du producerar kan användas för att låsa upp uppgraderingar - Förstör inte dina gamla fabriker! Uppgraderingsmenyn finns i det övre högra hörnet på skärmen. massDeleteConfirm: title: Bekräfta borttagning desc: >- - Du tar nu bort ganska många byggnader ( för att vara exakt)! Är du säker på att du vill göra detta? + Du tar bort ganska många byggnader ( för att vara exakt)! Är du säker på att du vill göra detta? blueprintsNotUnlocked: title: Inte upplåst än desc: >- - Ritningar är inte än upplåsta! Klara fler nivåer för att låsa upp dem. + Nå level 12 för att låsa upp Ritningar. keybindingsIntroduction: title: Användbara tangentbindningar desc: >- Detta spel använder en stor mängd tangentbindningar som gör det lättare att bygga stora fabriker. - Här är några men se till att kolla in tangentbindningarna!

+ Här är några, men se till att kolla in tangentbindningarna!

CTRL + Dra: Välj en yta att kopiera / radera.
SHIFT: Håll ned för att placera flera av samma byggnad.
ALT: Invertera orientationen av placerade rullband.
@@ -253,10 +254,10 @@ dialogs: createMarker: title: Ny Markör desc: Ge den ett meningsfullt namn, du kan också inkludera en kort kod av en form (Vilket du kan generera här ) - titleEdit: Edit Marker + titleEdit: Ändra Markör markerDemoLimit: - desc: Du kan endast skapa två markörer i demoversionen. Skaffa den fristående versionen för ett oändligt antal! + desc: Du kan endast ha två markörer i demoversionen. Skaffa den fristående versionen för ett obegränsat antal! massCutConfirm: title: Bekräfta Klipp desc: >- @@ -267,11 +268,11 @@ dialogs: title: Exportera skärmdump desc: >- Du efterfrågade att exportera din fabrik som en skärmdump. - Vänligen notera att detta kan ta ett tag för en stor bas och i vissa fall till och med krascha ditt spel + Vänligen notera att detta kan ta ett tag för en stor bas och i vissa fall till och med krascha ditt spel! massCutInsufficientConfirm: - title: Confirm cut - desc: You can not afford to paste this area! Are you sure you want to cut it? + title: Bekräfta Klipp + desc: Du har inte råd att placera detta område! Är du säker att du vill klippa det? ingame: # This is shown in the top left corner and displays useful keybindings in @@ -284,10 +285,10 @@ ingame: placeMultiple: Placera flera reverseOrientation: Vänd orientation disableAutoOrientation: Stäng av automatisk orientation - toggleHud: Toggle HUD + toggleHud: Växla HUD placeBuilding: Placera Byggnad createMarker: Skapa Markör - delete: Förstör + delete: Ta bort pasteLastBlueprint: Klistra in ritning lockBeltDirection: Aktivera rullbandsplanerare plannerSwitchSide: Vänd planerarsidan @@ -295,7 +296,7 @@ ingame: copySelection: Kopiera clearSelection: Rensa vald pipette: Pipett - switchLayers: Switch layers + switchLayers: Byt lager # Everything related to placing buildings (I.e. as soon as you selected a building # from the toolbar) @@ -485,6 +486,9 @@ buildings: ccw: name: Roterare (CCW) description: Roterar former 90 motsols. + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -630,8 +634,9 @@ storyRewards: settings: title: Inställningar categories: - game: Spelinställningar - app: Applikation + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: Utveckling @@ -842,7 +847,7 @@ about: Spelet hade inte varit möjligt utan den fantastiska discordgemenskapen runt mina spel - Du borde gå med i den discord server!

+ target="_blank">Discord server!

Musiken skapades av Peppsen - Han är grym!

diff --git a/translations/base-tr.yaml b/translations/base-tr.yaml index a7afbc0b..b0b7d095 100644 --- a/translations/base-tr.yaml +++ b/translations/base-tr.yaml @@ -15,10 +15,11 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # 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. @@ -31,7 +32,7 @@ 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. + Upon delivering the requested shapes you will progress within the game and unlock upgrades to Hız 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]! @@ -85,7 +86,7 @@ steamPage: discordLink: Official Discord - Chat with me! global: - loading: yükleniyor + loading: Yüklenİyor error: Hata # How big numbers are rendered, e.g. "10,000" @@ -116,9 +117,9 @@ global: xDaysAgo: gün önce # Short formats for times, e.g. '5h 23m' - secondsShort: s - minutesAndSecondsShort: d s - hoursAndMinutesShort: S m + secondsShort: sn + minutesAndSecondsShort: dk sn + hoursAndMinutesShort: sa dk xMinutes: dakika @@ -132,585 +133,589 @@ global: demoBanners: # This is the "advertisement" shown in the main menu and other various places - title: Demo Version + title: Deneme Sürümü intro: >- - Get the standalone to unlock all features! + Bütün özellikleri açmak için tam sürümü satın alın! mainMenu: play: Oyna - changelog: Changelog - importSavegame: Yükle + changelog: Değİşİklİk Günlüğü + importSavegame: Kayıt Yükle openSourceHint: Bu oyun açık kaynak kodlu! - discordLink: Resmi Discord Sunucusu - helpTranslate: Çeviriye yardım et! + discordLink: Resmİ Discord Sunucusu + helpTranslate: Çevİrİye yardım et! # 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. + Üzgünüz, bu oyunun tarayıcınızda yavaş çalıştığı biliniyor! Tam sürümü satın alın veya iyi performans için Chrome tarayıcısını kullanın. savegameLevel: Seviye savegameLevelUnknown: Bilinmeyen seviye continue: Devam et - newGame: Yeni Oyun - madeBy: Made by + newGame: YENİ OYUN + madeBy: tarafından yapıldı subreddit: Reddit dialogs: buttons: ok: OK - delete: Sil + delete: SİL cancel: İptal later: Sonra restart: Yeniden başla reset: Sıfırla - getStandalone: Tam versiyona eriş + getStandalone: Tam sürüme eriş deleteGame: Ne yaptığımi biliyorum - viewUpdate: View Update - showUpgrades: Show Upgrades - showKeybindings: Show Keybindings + viewUpdate: Güncellemeleri Görüntüle + showUpgrades: Geliştirmeleri Göster + showKeybindings: Tuş Kısayollarını Göster importSavegameError: - title: Import Error + title: Kayıt yükleme hatası text: >- - Failed to import your savegame: + Oyun kaydı yükleme başarısız: importSavegameSuccess: - title: Savegame Imported + title: Oyun Kaydı Yüklendi text: >- - Kayıtlı oyun başarıyla yüklendi. + Oyun kaydı başarıyla yüklendi. gameLoadFailure: - title: Game is broken + title: Oyun bozuk text: >- - Failed to load your savegame: + Oyun yükleme başarısız: confirmSavegameDelete: - title: Confirm deletion + title: Silme işlemini onayla text: >- Oyunu silmek istediğinizden emin misiniz? savegameDeletionError: - title: Failed to delete + title: Silme başarısız text: >- - Failed to delete the savegame: + Oyun kaydını silme başarısız: restartRequired: - title: Restart required + title: Yeniden başlatma gerekiyor text: >- - You need to restart the game to apply the settings. + Değişiklikleri uygulamak için oyunu yeniden başlatılmalı. editKeybinding: - title: Change Keybinding - desc: Press the key or mouse button you want to assign, or escape to cancel. + title: Tuş Atamasını Değiştir + desc: Atamak isteğiniz tuşa veya fare butonun basın, veya iptal etmek için Esc tuşuna basın. resetKeybindingsConfirmation: - title: Reset keybindings - desc: This will reset all keybindings to their default values. Please confirm. + title: Tuş Atamasını Sıfırla + desc: Bu işlem bütün tuş atamalarını varsayılan durumuna sıfırlayacak. Lütfen onaylayın. keybindingsResetOk: - title: Keybindings reset - desc: The keybindings have been reset to their respective defaults! + title: Tuş Atamaları sıfırlandı + desc: Tuş atamaları varsayılan duruma sıfırlandı! 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: Deneme Sürümü + desc: Demoda olmayan bir özelliğe () erişmeye çalıştınız. Tam deneyim için tam versiyonu satın alın. 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: Sınırlı Oyun Kaydı + desc: Deneme sürümünde sadece tek bir oyun kaydınız olabilir. Lütfen varolanı silin veya tam sürümü satın alın! updateSummary: - title: New update! + title: Yeni güncelleme! desc: >- - Here are the changes since you last played: + Son oynadığınızdan bu yana gelen değişikler: upgradesIntroduction: - title: Unlock Upgrades + title: Geliştirmeleri Aç 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. + Ürettiğiniz her şekil geliştirmeler için kullanılabilir - Eski fabrikalarınızı silmeyin! + Güncellemeler sekmesini ekranınızın sağ üst köşesinde bulabilirsiniz. massDeleteConfirm: - title: Confirm delete + title: Silmeyi onayla desc: >- - You are deleting a lot of buildings ( to be exact)! Are you sure you want to do this? + Çok fazla yapı siliyorsunuz (tam olarak adet)! Bunu yapmak istediğinize emin misiniz? blueprintsNotUnlocked: - title: Not unlocked yet + title: Henüz açılmadı desc: >- - Complete level 12 to unlock Blueprints! + Taslakları açmak için 12. seviyeyi tamamlamalısınız! keybindingsIntroduction: - title: Useful keybindings + title: Kullanışlı tuş atamaları 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 delete.
- SHIFT: Hold to place multiple of one building.
- ALT: Invert orientation of placed belts.
+ Bu oyunda büyük fabrikalar inşa etmeyi kolaylaştıran çok fazla tuş ataması var. + Bunlardan bazıları şunlar, ama emin olmak için tuş atamalarını kontrol edin!

+ CTRL + Sürükle: Silmek için alan seç.
+ SHIFT: Çoklu yapı inşa etmek için basılı tutun
+ ALT: Yerleştirilen taşıma bantlarının yönünü ters çevirir.
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: Yeni Konum İşareti + desc: İşarete anlamlı bir isim verin, aynı zamanda (buradan oluşturabileceğiniz) bir şeklin sembolünü ekleyebilirsiniz. + titleEdit: Konum İşaretini Düzenle markerDemoLimit: - desc: You can only create two custom markers in the demo. Get the standalone for unlimited markers! + desc: Deneme sürümünde sadece iki adet yer imi oluşturabilirsiniz. Sınırsız yer imi için tam sürümü alın! massCutConfirm: - title: Confirm cut + title: Kesmeyi onayla desc: >- - You are cutting a lot of buildings ( to be exact)! Are you sure you - want to do this? + Çok fazla yapı kesiyorsunuz (tam olarak adet)! Bunu yapmak istediğinize emin misiniz? exportScreenshotWarning: - title: Export screenshot + title: Ekran görüntüsünü dışa aktar 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! + Fabrikanızın ekran görüntüsünü dışarı aktarmak istiyorsunuz. Lütfen dikkat edin, + büyük bir fabrika için bu işlem oldukça yavaş olabilir ve hatta oyununuz kapanabilir. massCutInsufficientConfirm: - title: Confirm cut - desc: You can not afford to paste this area! Are you sure you want to cut it? + title: Kesmeyi onayla + desc: Seçili yapıları yapıştırmak için yeterli kaynağınız yok! Kesmek istediğinize emin misiniz? + 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: Destroy - pasteLastBlueprint: Paste last blueprint - lockBeltDirection: Enable belt planner + moveMap: Hareket Et + selectBuildings: Alan seç + stopPlacement: Yerleştİrmeyİ durdur + rotateBuilding: Yapıyı döndür + placeMultiple: Çoklu yerleştİr + reverseOrientation: Yönünü ters çevİr + disableAutoOrientation: Otomatik yönü devre dışı bırak + toggleHud: Kullanıcı arayüzünü aç/kapa + placeBuilding: Yapı yerleştİr + createMarker: Yer İmi oluştur + delete: SİL + pasteLastBlueprint: Son taslağı yapıştır + lockBeltDirection: Taşıma bandı planlayıcısını kullan plannerSwitchSide: Flip planner side - cutSelection: Cut - copySelection: Copy - clearSelection: Clear Selection - pipette: Pipette - switchLayers: Switch layers + cutSelection: Kes + copySelection: Kopyala + clearSelection: Seçİmİ temİzle + pipette: Pİpet + switchLayers: Katman değİştİr # 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: Yapının farklı türlerine geçmek için tuşuna bas. # Shows the hotkey in the ui, e.g. "Hotkey: Q" hotkeyLabel: >- - Hotkey: + Kısayol: infoTexts: - speed: Speed - range: Range - storage: Storage - oneItemPerSecond: 1 item / second - itemsPerSecond: items / s + Hız: Hız + range: Menzil + storage: Depo + oneItemPerSecond: 1 eşya / saniye + itemsPerSecond: eşya / sn itemsPerSecondDouble: (x2) - tiles: tiles + tiles: karo # 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: SEVİYE + completed: Tamamlandı + unlockText: Açıldı ! + buttonNextLevel: Sonrakİ Sevİye # Notifications on the lower right notifications: - newUpgrade: A new upgrade is available! - gameSaved: Your game has been saved. + newUpgrade: Yeni geliştirme mevcut! + gameSaved: Oyun kaydedildi. # The "Upgrades" window shop: - title: Upgrades - buttonUnlock: Upgrade + title: Geliştirmeler + buttonUnlock: Geliştir # Gets replaced to e.g. "Tier IX" - tier: Tier + tier: Aşama # The roman number for each tier tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: MAXIMUM LEVEL (Speed x) + maximumLevel: SON SEVİYE (Hız x) # The "Statistics" window statistics: - title: Statistics + title: İstatistikler dataSources: stored: - title: Stored - description: Displaying amount of stored shapes in your central building. + title: Mevcut + description: Merkez yapınızda bulunan şekillerin miktarını gösterir. + produced: - title: Produced - description: Displaying all shapes your whole factory produces, including intermediate products. + title: Üretilen + description: Fabrikanızın ürettiği bütün şekilleri gösterir, ara ürünler dahil. delivered: - title: Delivered - description: Displaying shapes which are delivered to your central building. - noShapesProduced: No shapes have been produced so far. + title: Teslim Edilen + description: Merkez binanıza giden bütün şekilleri gösterir. + noShapesProduced: Henüz hiçbir şekil üretilmedi. # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m + shapesPerMinute: / dk # Settings menu, when you press "ESC" settingsMenu: playtime: Oynama zamani buildingsPlaced: Yapılar - beltsPlaced: Belts + beltsPlaced: Taşıma bantları buttons: - continue: Continue - settings: Settings - menu: Return to menu + continue: Devam + settings: Ayarlar + menu: Ana Menüye Dön # Bottom left tutorial hints tutorialHints: - title: Need help? - showHint: Show hint - hideHint: Close + title: Yardım? + showHint: İpucu Göster + hideHint: Kapat # When placing a blueprint blueprintPlacer: - cost: Cost + cost: Bedel # 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: Yer İmi + hub: MERKEZ + description: Sol-tık ile Yer İmlerine git, sağ-tık ile yer imini sil.

Mevcut konumdan yer imi oluşturmak için 'a bas, sağ-tık ile mevcut konumda yer imi oluştur. + creationSuccessNotification: Yer İmi oluşturuldu. # Interactive tutorial interactiveTutorial: - title: Tutorial + title: Eğİtİm hints: - 1_1_extractor: Place an extractor on top of a circle shape to extract it! + 1_1_extractor: Daire üretmek için daire şekli üzerine bir üretici yerleştir! 1_2_conveyor: >- - Connect the extractor with a conveyor belt to your hub!

Tip: Click and drag the belt with your mouse! - + Üreticiyi taşıma bandı ile merkezine bağla!

İpucu: Taşıma bandı nı seç ve taşıma bandını farenin sol tuşu ile tıkla ve sürükle! 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. + Bu bir boşta kalma oyunu (idle game) değil! Hedefe ulaşmak için daha fazla üretici ve taşıma bandı yerleştir.

İpucu: Birden fazla üretici yerleştirmek için SHIFT tuşuna basılı tut, ve R tuşuyla taşıma bandının yönünü döndür. colors: red: Kırmızı - green: Yesil + green: Yeşil blue: Mavi yellow: Sarı purple: Mor - cyan: Cyan + cyan: Turkuaz white: Beyaz uncolored: Renksiz - black: Black + black: Siyah shapeViewer: - title: Layers - empty: Bos - copyKey: Copy Key + title: Katmanlar + empty: Boş + copyKey: Şekil Kodunu Kopyala # All shop upgrades shopUpgrades: belt: - name: Belts, Distributor & Tunnels - description: Speed x → x + name: Taşıma Bandı, Dağıtıcılar & Tüneller + description: Hız x → x miner: - name: Extraction - description: Speed x → x + name: Üretme + description: Hız x → x processors: - name: Cutting, Rotating & Stacking - description: Speed x → x + name: Kesme, Döndürme & Kaynaştırıcı + description: Hız x → x painting: - name: Mixing & Painting - description: Speed x → x + name: Karıştırma & Boyama + description: Hız x → x # Buildings and their name / description buildings: hub: - deliver: Deliver - toUnlock: to unlock - levelShortcut: LVL + deliver: "Teslİm et" + toUnlock: "Açılacak" + levelShortcut: SVY belt: default: - name: &belt Conveyor Belt - description: Transports items, hold and drag to place multiple. + name: &belt Taşıma Bandı + description: Eşyaları taşır, basılı birden fazla yerleştirmek için tutup sürükle. miner: # Internal name for the Extractor default: - name: &miner Extractor - description: Place over a shape or color to extract it. + name: &miner Üretİcİ + description: Bir şekli veya rengi üretmek için üzerlerini yerleştir. chainable: - name: Extractor (Chain) + name: Üretİcİ (Zİncİrleme) 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. + name: &underground_belt Tünel + description: Yapıların ve taşıma bantlarının altından kaynak aktarımı sağlar. tier2: - name: Tunnel Tier II - description: Allows to tunnel resources under buildings and belts. + name: Tünel Aşama II + description: Yapıların, taşıma bantlarının ve normal tünellerin altından kaynak aktarımı sağlar. splitter: # Internal name for the Balancer default: - name: &splitter Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: &splitter Dengeleyici + description: Çok işlevli - bütün girdileri eşit olarak bütün çıkışlara dağıtır. compact: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Bİrleştİrİcİ (tekİl) + description: İki taşıma bandını bir çıktı verecek şekilde birleştirir. compact-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Birleştİrİcİ (tekİl) + description: İki taşıma bandını bir çıktı verecek şekilde birleştirir. 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 Kesİcİ + description: Şekilleri yukarıdan aşağıya böler ve iki yarım parçayı çıktı olarak verir. Eğer sadece bir çıktıyı kullanıyorsanız diğer çıkan parçayı yok etmeyi unutmayın, yoksa kesim durur! 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! + name: Kesİcİ (Dörtlü) + description: Şekilleri dört parçaya böler. Eğer sadece bir çıktıyı kullanıyorsanız diğer çıkan parçaları yok etmeyi unutmayın, yoksa kesim durur! rotater: default: - name: &rotater Rotate - description: Rotates shapes clockwise by 90 degrees. + name: &rotater Döndürücü + description: Şekilleri saat yönünde 90 derece döndürür. ccw: - name: Rotate (CCW) - description: Rotates shapes counter clockwise by 90 degrees. + name: Döndürücü (Saat Yönünün Tersİ) + description: Şekilleri saat yönünün tersinde 90 derece döndürür. + fl: + name: Döndürücü (180) + description: Şekilleri 180 derece döndürür. 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 Kaynaştırıcı + description: İki eşyayı kaynaştırır. Eğer eşyalar kaynaştırılamazsa sağdaki eşya soldaki eşyanın üzerine kaynaştırılır. mixer: default: - name: &mixer Color Mixer - description: Mixes two colors using additive blending. + name: &mixer Renk Karıştırıcısı + description: Mixes two colors using additive blending. İki rengi eklemeli renk metoduyla birleştirir. painter: default: - name: &painter Painter - description: &painter_desc Colors the whole shape on the left input with the color from the right input. + name: &painter Boyayıcı + description: &painter_desc Sol girdideki bütün şekli sağ girdideki renk ile boyar. double: - name: Painter (Double) - description: Colors the shapes on the left inputs with the color from the top input. + name: Boyayıcı (Çİft) + description: Sol girdideki şekilleri yukarı girdideki renk ile boyar. quad: - name: Painter (Quad) - description: Allows to color each quadrant of the shape with a different color. + name: Boyayıcı (Dörtlü) + description: Şeklin her çeyreğinin farklı bir renkle boyanmasını sağlar. mirrored: name: *painter description: *painter_desc trash: default: - name: &trash Trash - description: Accepts inputs from all sides and destroys them. Forever. + name: &trash Çöp + description: Her yönden giren girdileri yok eder. Tamamen. storage: - name: Storage - description: Stores excess items, up to a given capacity. Can be used as an overflow gate. + name: Depo + description: Belirli bir sınıra kadar fazla eşyaları depolar. Taşırma kapısı olarak kullanıla bilir. wire: default: - name: Energy Wire - description: Allows you to transport energy. + name: Enerji Kablosu + description: Enerji aktarmayı sağlar. advanced_processor: default: - name: Color Inverter - description: Accepts a color or shape and inverts it. + name: Renk Ters Dönüştürücü + description: Bir rengi veya şeklin rengini ters dönüştürür. energy_generator: - deliver: Deliver - toGenerateEnergy: For + deliver: Teslİm et + toGenerateEnergy: İçİn default: - name: Energy Generator - description: Generates energy by consuming shapes. + name: Enerjİ Üretİcİ + description: Şekilleri tüketerek enerji üretir. wire_crossings: default: - name: Wire Splitter - description: Splits a energy wire into two. + name: Kablo Çoklayıcı + description: Bir kablo çıkışını ikiye çoğaltır. merger: - name: Wire Merger - description: Merges two energy wires into one. + name: Kablo Bİrleştİrİcİ + description: İki enerji kablosunu birleştirir 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: Şekİllerİ Kesmek + desc: Az önce kesici açıldı - kesici şekilleri yukarıdan aşağıya ikiye böler konumu ne olursa olsun!

Kullanılmayan çıktılardan kurtulmayı unutma, yoksa kesim durur. Bu sepeble size, herşeyi yok eden bir çöp verdim! reward_rotater: - title: Rotating - desc: The rotater has been unlocked! It rotates shapes clockwise by 90 degrees. + title: Döndürme + desc: Döndürücü açıldı! Döndürücü şekilleri saat yönüne 90 derece döndürür. reward_painter: - title: Painting + title: Boyama 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! + Boyayıcı açıldı - Biraz renk üretin (tıpkı şekiller gibi) ve şekil boyamak için rengi boyayıcıda bir şekille birleştirin!

NOT: Renkleri daha kolay ayırt etmek için ayarlardan renk körü modunu kullanabilirsiniz! reward_mixer: - title: Color Mixing - desc: The mixer has been unlocked - Combine two colors using additive blending with this building! + title: Renk Karıştırma + desc: Karıştırıcı açıldı - Bu yapıyla iki rengi eklemeli renk metodu ile karıştırın! 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: Kaynaştırıcı + desc: Artık kaynaştırıcı ile şekilleri birleştirebilirsiniz! İki şekil eğer yanyana koyulabilirse şekiller birleştirilir, yoksa sol girişteki şeklin üzerine kaynaştırılır! 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: Ayırıcı/Bİrleştİrİcİ + desc: Çok fonksiyonlu dengeleyici açıldı - Eşyaları birden fazla taşıma bandı üzerinde ayırarak ve birleştirerek daha büyük fabrikalar kurabilmek için kullanılabilir!

reward_tunnel: - title: Tunnel - desc: The tunnel has been unlocked - You can now pipe items through belts and buildings with it! + title: Tünel + desc: Tünel açıldı - Artık eşyaları taşıma bantları ve yapılar altından geçirebilirsiniz! 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: Saat yönünün tersİnde Döndürme + desc: Döndürücünün farklı bir türünü açtın - Şekiller artık saat yönünün tersinde döndürülebilir! İnşa etmek için döndürücüyü seç ve türler arası geçiş yapmak için 'T' tuşuna bas! 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: Zincirleme Üretİm + desc: Zincirleme üretici açıldı! Zincirleme üretici kendi kaynaklarını diğer üreticilere aktarabilir. Böylece daha etkili üretim sağlayabilirsin! 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: Tünel Aşama 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! Tünelin başka bir türünü açtın - Bu tünelin menzili daha yüksek ve tünel türlerini artık içiçe kullanabilirsin! reward_splitter_compact: - title: Compact Balancer + title: Tekİl Dengeleyİcİ desc: >- - You have unlocked a compact variant of the balancer - It accepts two inputs and merges them into one! + Dengeleyecinin daha küçük bir türünü açtın - İki taşıma bandından gelen eşyaları tek hatta birleştirir! 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: Çeyreğİnİ Kesme + desc: Kesicinin yeni bir türünü açtın - Bu tür şekilleri iki parça yerine dört parçaya ayırabilir! 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: Çİfte Boyama + desc: Boyayıcının başka bir türünü açtın - Sıradan bir boyayıcı gibi çalışır, fakat iki şekli birden boyayarak iki boya yerine sadece bir boya harcar! 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: Dörtlü Boyama + desc: Boyayıcının başka bir türünü açtın - Şeklin her parçasının bağımsız olarak boyanmasını sağlar! 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: Depo Sağlayıcı + desc: Çöpün farklı bir türünü açtın - Bu tür belirli bir sınıra kadar eşyaları depolamanı sağlar! 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: Özgür Mod + desc: Başardın! Özgür mod açıldı! Merkeze istenilen şekiller artık rastgele oluşturulacak! (Merak etme, yeni içerikler planlanıyor!) - 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). + reward_blueprints: # 'Taslaklar' yerine 'planlar' da kullanılabilir. + title: Taslaklar + desc: Fabrikanın bölümlerini artık kopyalayıp yapıştırabilirsin! Bir alan seç (CTRL tuşuna bas ve fareyi sol-tık tuşuna basarak sürükle), ve kopyalamak için 'C' tuşuna bas.

Kopyaladığın taslağı bedel karşılığı yapıştırabilmek için taslak şekilleri üretmelisin! (Az önce teslim ettiğin şekiller). # Special reward, which is shown when there is no reward actually no_reward: - title: Next level + title: Sonrakİ Sevİye 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! + Bu seviyede ödül yok, ama sonrakinde var!

NOT: En iyisi eski fabrikalarını yok etme - Ürettiğin bütün
şekillere geliştirmeleri açmak için- - Congratulations! By the way, more content is planned for the standalone! + Tebrikler! Bu arada, yeni içerikler planlanıyor! settings: - title: Settings + title: Ayarlar categories: - game: Game - app: Application + general: Genel + userInterface: Kullanıcı Arayüzü + advanced: Gelİşmİş - versionBadges: - dev: Development - staging: Staging - prod: Production - buildDate: Built + versionBadges: # Development, Staging, Production + dev: Geliştirme + staging: Yükseltme + prod: Üretim + buildDate: derlendi labels: uiScale: - title: Interface scale + title: Arayüz Ölçeğİ 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. + Kullanıcı arayüzünün boyutunu değiştirir. Arayüz cihazınızın çözünürlüğüne göre ölçeklendirilir, ama ölçeğin miktarı burada ayarlanabilir. scales: - super_small: Super small - small: Small - regular: Regular - large: Large - huge: Huge + super_small: Çok Küçük + small: Küçük + regular: Normal + large: Büyük + huge: Çok Büyük scrollWheelSensitivity: - title: Zoom sensitivity + title: Yakınlaştırma Hassasİyeti description: >- - Changes how sensitive the zoom is (Either mouse wheel or trackpad). + Yakınlaştırmanın ne kadar hassas olduğunu ayarlar (Fare tekerleği veya dokunmatik farketmez). sensitivity: - super_slow: Super slow - slow: Slow - regular: Regular - fast: Fast - super_fast: Super fast + super_slow: Çok Yavaş + slow: Yavaş + regular: Normal + fast: Hızlı + super_fast: Çok Hızlı language: - title: Language + title: Dİl description: >- - Change the language. All translations are user contributed and might be incomplete! + Dili değiştirir. Bütün çevirmeler kullanıcı katkılarıyla oluşturulmuştur ve tam olmayabilir! fullscreen: - title: Fullscreen + title: Tam Ekran description: >- - It is recommended to play the game in fullscreen to get the best experience. Only available in the standalone. + En iyi oyun tecrübesi için oyunun tam ekranda oynanması tavsiye edilir. Sadece tam sürümde mevcut. soundsMuted: - title: Mute Sounds + title: Ses Efektlerİnİ Sustur description: >- - If enabled, mutes all sound effects. + Aktif edildiğinde bütün ses efektleri susturulur. musicMuted: - title: Mute Music + title: Müzİğİ Sustur description: >- - If enabled, mutes all music. + Aktif edildiğinde bütün müzikler susturulur. theme: - title: Game theme + title: Renk Teması description: >- - Choose the game theme (light / dark). + Renk temasını seçin (aydınlık / karanlık). themes: - dark: Dark - light: Light + dark: Karanlık + light: Aydınlık refreshRate: - title: Simulation Target + title: Sİmülasyon Hızı 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. + Eğer mönitörünüzün yenileme hızı (Hz) yüksekse oyunun akıcı bir şekilde çalışması için yenileme hızını buradan değiştirin. Eğer bilgisayarınız yavaşsa bu ayar oyunun gösterdiği kare hızını (FPS) düşürebilir. alwaysMultiplace: - title: Multiplace + title: Çoklu Yerleştirme description: >- - If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently. + Aktif edildiğinde bir yapı seçilip yerleştirildiğinde, yapıyı yerleştirmeye siz iptal edene kadar devam edebilirsiniz. Bu özellik SHIFT tuşuna sürekli basılı tutup yapı yerleştirmeyle aynıdır. offerHints: - title: Hints & Tutorials + title: İpuçları ve Eğİtİmler 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. + İpuçları ve eğitimleri açar. Ayrıca bazı arayüz elemanlarını oyunun daha kolay öğrenilebilmesi için gizler. - movementSpeed: - title: Movement speed + movementHız: + title: Hareket hızı description: Changes how fast the view moves when using the keyboard. - speeds: + Hızs: super_slow: Super slow slow: Slow regular: Regular @@ -723,78 +728,73 @@ settings: When enabled, placing tunnels will automatically remove unnecessary belts. This also enables to drag tunnels and excess tunnels will get removed. vignette: - title: Vignette + title: Gölgelendİrme description: >- - Enables the vignette which darkens the screen corners and makes text easier - to read. + Gölgelendirmeyi açar. Gölgelendirme ekranın köşelerini karartır ve yazıları daha kolay okuyabilmeinizi sağlar. autosaveInterval: - title: Autosave Interval + title: Otomatik Kayıt Sıklığı description: >- - Controls how often the game saves automatically. You can also disable it - entirely here. + Oyunun hangi sıklıkta kaydedileceğini belirler. Ayrıca otomatik kayıt tamamen kapatılabilir. 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 Dakika + two_minutes: 2 Dakika + five_minutes: 5 Dakika + ten_minutes: 10 Dakika + twenty_minutes: 20 Dakika + disabled: Devredışı compactBuildingInfo: - title: Compact Building Infos + title: Derlİ Toplu Yapı Bilgileri description: >- - Shortens info boxes for buildings by only showing their ratios. Otherwise a - description and image is shown. + Yapıların bilgi kutularını sadece oranlarını göstecek şekilde kısaltır. Aksi taktirde yapının açıklaması ve resmi gösterilir. disableCutDeleteWarnings: - title: Disable Cut/Delete Warnings + title: Kes/Sİl Uyarılarını Devredışı Bırak description: >- - Disable the warning dialogs brought up when cutting/deleting more than 100 - entities. + 100 birimden fazla parçayı kesme/silme işlemlerinde beliren uyarı pencerelerini devredışı bırakır. enableColorBlindHelper: - title: Color Blind Mode - description: Enables various tools which allow to play the game if you are color blind. + title: Renk Körü Modu + description: Eğer renkleri seçemiyorsanız oyunu ayarlamak için çeşitli araç gereçleri aktif eder. 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. + Her yapı türü en son kullanıldığı yönü hatırlar. + Yerleştirdiğiniz yapıları sıklıkla değiştiriyorsanız bu ayar oynanyışınızı rahatlatabilir. keybindings: - title: Keybindings + title: Tuş Atamaları hint: >- - Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options. + İpucu: CTRL, SHIFT ve ALT tuşlarından yararlanın! Farklı yerleştirme seçeneklerini kullanmanızı sağlarlar. - resetKeybindings: Reset Keyinbindings + resetKeybindings: Tuş Atamalarını Sıfırla categoryLabels: - general: Application - ingame: Game - navigation: Navigating - placement: Placement - massSelect: Mass Select - buildings: Building Shortcuts - placementModifiers: Placement Modifiers + general: Uygulama + ingame: Oyun + navigation: Hareket + placement: Yerleştİrme + massSelect: Çoklu Seçim + buildings: Yapı Kısayolları + placementModifiers: Yerleştİrme Özellİklerİ mappings: - confirm: Confirm - back: Back - mapMoveUp: Move Up - mapMoveRight: Move Right - mapMoveDown: Move Down - mapMoveLeft: Move Left - centerMap: Center Map + confirm: Kabul + back: Geri + mapMoveUp: Yukarı Git + mapMoveRight: Sağa Git + mapMoveDown: Aşagı Git + mapMoveLeft: Sola Git + centerMap: Haritayı Ortala - mapZoomIn: Zoom in - mapZoomOut: Zoom out - createMarker: Create Marker + mapZoomIn: Yakınlaş + mapZoomOut: Uzaklaş + createMarker: Yer İmi Oluştur - menuOpenShop: Upgrades - menuOpenStats: Statistics + menuOpenShop: Geliştirmeler + menuOpenStats: İstatistikler - toggleHud: Toggle HUD - toggleFPSInfo: Toggle FPS and Debug Info + toggleHud: Arayüzü Aç/Kapat + toggleFPSInfo: FPS ve Debug Bilgisini Aç/Kapat belt: *belt splitter: *splitter underground_belt: *underground_belt @@ -806,35 +806,35 @@ keybindings: painter: *painter trash: *trash - rotateWhilePlacing: Rotate + rotateWhilePlacing: Döndür rotateInverseModifier: >- - Modifier: Rotate CCW instead - cycleBuildingVariants: Cycle Variants - confirmMassDelete: Confirm Mass Delete - cycleBuildings: Cycle Buildings + Basılı Tut: Saat yönünün tersinde döndür + cycleBuildingVariants: Yapı türünü değiştir + confirmMassDelete: Çoklu Silme + cycleBuildings: Yapıyı değiştir - massSelectStart: Hold and drag to start - massSelectSelectMultiple: Select multiple areas - massSelectCopy: Copy area + massSelectStart: Basılı tutup seçme + massSelectSelectMultiple: Birden fazla alanı seçme + massSelectCopy: Alanı kopyala - 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 + placementDisableAutoOrientation: Otomatik Yönü devredışı bırak + placeMultiple: Yerleştirme modunda kal + placeInverse: Taşıma bandı yönünü ters çevir + pasteLastBlueprint: Son taslağı yapıştır + massSelectCut: Alanı yapıştır + exportScreenshot: Bütün merkezi resim olarak dışarı aktar + mapMoveFaster: Hızlı Hareket + lockBeltDirection: Taşıma bandı planlayıcısını akfitleştir + switchDirectionLockSide: "Planlayıcı: Taraf değiştir" + pipette: Pipet + menuClose: Menüyü Kapat + switchLayers: Katman değiştir + advanced_processor: Renk Ters Çevirici + energy_generator: Enerji Üretici + wire: Enerji Kablosu about: - title: About this Game + title: Oyun Hakkında body: >- This game is open source and developed by Tobias Springer (this is me).

@@ -842,9 +842,9 @@ about: If you want to contribute, check out shapez.io on github.

- This game wouldn't have been possible without the great discord community + This game wouldn't have been possible without the great Discord community around my games - You should really join the discord server!

+ target="_blank">Discord server!

The soundtrack was made by Peppsen - He's awesome.

@@ -854,14 +854,14 @@ about: factorio sessions this game would never have existed. changelog: - title: Changelog + title: Değİşİklİk Günlüğü demo: features: - restoringGames: Restoring savegames - importingGames: Importing savegames - oneGameLimit: Limited to one savegame - customizeKeybindings: Customizing Keybindings - exportingBase: Exporting whole Base as Image + restoringGames: Oyun kayıtlarını yükleme + importingGames: Oyun kayıtlarını indirme + oneGameLimit: Bir oyun kaydıyla sınırlı + customizeKeybindings: Tuş Atamalarını Değiştirme + exportingBase: Bütün merkezi resim olarak dışa aktarma - settingNotAvailable: Not available in the demo. + settingNotAvailable: Demo sürümünde mevcut değil diff --git a/translations/base-uk.yaml b/translations/base-uk.yaml index 6a562ade..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 @@ -15,16 +19,26 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # the basic structure so the game also detects it. -# +# Ґлосарій: +# map мапа +# keybinds гарячі клавіши +# upgrade поліпшення +# marker позначка +# area ділянка +# hub центр +# range дальність +# storage сховище +# shape форма +--- 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. + shortText: shapez.io — це гра про будування фабрик для автоматизації створення та обробки все більш складних форм на нескінченно розширюваній мапі. - # This is the text shown above the discord link - discordLink: Official Discord - Chat with me! + # This is the text shown above the Discord link + discordLink: Офіційний Discord сервер — поговори зі мною! # 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: @@ -33,95 +47,95 @@ 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 передових рівнів, які повинні утримувати вас годинами. Але не турбуйтеся, я постійно додаю новий вміст — ще багато чого заплановано! - Purchasing the game gives you access to the standalone version which has additional features and you'll also receive access to newly developed features. + Купуючи гру, ви отримуєте доступ до окремої версії, яка має додаткові функції, а також ви отримаєте доступ до нещодавно розроблених функцій. [img]{STEAM_APP_IMAGE}/extras/header_standalone_advantages.png[/img] [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 ❤️ + [*] Темний режим + [*] Необмежені позначки + [*] Необмежені збереження + [*] Додаткові налаштування + [*] Незабаром: дроти й енергія! Гадаю, оновлення вийде у кінці липня 2020 року. + [*] Незабаром: більше рівнів. + [*] Дозволяє мені розвиватися далі shapez.io ❤️ [/list] [img]{STEAM_APP_IMAGE}/extras/header_future_updates.png[/img] - I am updating the game very often and trying to push an update at least every week! + Я оновлюю гру надпрочуд часто і намагаюся випускати оновлення щотижня! [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! + [*] Різноманітні мапи та випробування (наприклад, мапи з перешкодами) + [*] Пазли (надайте потрібну форму з обмеженою площею/набором будівель) + [*] Режим історії, де будівлі матимуть вартість + [*] Генератор мап, який можна налаштувати (ресурс/розмір/щільність форми, зерно та багато іншого) + [*] Додаткові типи форм + [*] Поліпшення продуктивності (Гра вже працює досить добре!) + [*] Та багато чого іншого! [/list] [img]{STEAM_APP_IMAGE}/extras/header_open_source.png[/img] - 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! + Будь-хто може зробити внесок, я активно беру участь у спільноті і намагаюся оцінити всі пропозиції і відгуки, та взяти до уваги, де це можливо. + Не забудьте перевірити мою дошку Trello заради повної дорожньої карти! [img]{STEAM_APP_IMAGE}/extras/header_links.png[/img] [list] - [*] [url=https://discord.com/invite/HN7EVzV]Official 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://discord.com/invite/HN7EVzV]Офіційний Discord[/url] + [*] [url=https://trello.com/b/ISQncpJP/shapezio]Дорожня карта[/url] + [*] [url=https://www.reddit.com/r/shapezio]Спільнота на Reddit[/url] + [*] [url=https://github.com/tobspr/shapez.io]Вихідний код на GitHub[/url] + [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Допоможіть з перекладом[/url] [/list] global: - loading: Loading - error: Error + loading: Завантаження + error: Помилка # 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 + thousands: тис. + millions: млн + billions: млрд + trillions: трлн # Shown for infinitely big numbers - infinite: inf + infinite: неск. 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: одну секунду тому + xSecondsAgo: секунд тому + oneMinuteAgo: 1 хвилину тому + xMinutesAgo: хвилин тому + oneHourAgo: одну годину тому + xHoursAgo: годин тому + oneDayAgo: один день тому + xDaysAgo: днів тому # Short formats for times, e.g. '5h 23m' - secondsShort: s - minutesAndSecondsShort: m s - hoursAndMinutesShort: h m + secondsShort: сек. + minutesAndSecondsShort: хв. сек. + hoursAndMinutesShort: год. хв. - xMinutes: minutes + xMinutes: хв. keys: tab: TAB @@ -133,385 +147,391 @@ global: demoBanners: # This is the "advertisement" shown in the main menu and other various places - title: Demo Version + title: Демоверсія intro: >- - Get the standalone to unlock all features! + Завантажте окрему версію, щоб розблокувати всі функції! mainMenu: - play: Play - continue: Continue - newGame: New Game - changelog: Changelog + play: Грати + continue: Продовжити + newGame: Нова гра + changelog: Змінопис subreddit: Reddit - importSavegame: Import - openSourceHint: This game is open source! - discordLink: Official Discord Server - helpTranslate: Help translate! - madeBy: Made by + importSavegame: Імпортувати + openSourceHint: Ця гра з відкритим вихідним кодом! + discordLink: Офіційний Discord сервер + helpTranslate: Допоможіть з перекладом! + madeBy: Зробив # 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. + Вибачте, але гра, як відомо, працює повільно у вашому браузері! Завантажте окрему версію чи хром, щоб отримати більше задоволення від гри. - savegameLevel: Level - savegameLevelUnknown: Unknown Level + savegameLevel: Рівень + savegameLevelUnknown: Невідомий рівень dialogs: buttons: - ok: OK - delete: Delete - cancel: Cancel - later: Later - restart: Restart - reset: Reset - getStandalone: Get Standalone - deleteGame: I know what I am doing - viewUpdate: View Update - showUpgrades: Show Upgrades - showKeybindings: Show Keybindings + ok: Гаразд + delete: Видалити + cancel: Скасувати + later: Пізніше + restart: Перезавантажити + reset: Скинути + getStandalone: Завантажити гру + deleteGame: Я знаю, що роблю + viewUpdate: Переглянути оновлення + showUpgrades: Показати поліпшення + showKeybindings: Показати прив’язки клавіш importSavegameError: - title: Import Error + title: Помилка при імпортуванні text: >- - Failed to import your savegame: + Не вдалося імпортувати вашу збережену гру: importSavegameSuccess: - title: Savegame Imported + title: Збереження імпортовано text: >- - Your savegame has been successfully imported. + Вашу збережену гру успішно імпортовано. gameLoadFailure: - title: Game is broken + title: Гра поламана text: >- - Failed to load your savegame: + Не вдалося завантажити вашу збережену гру. confirmSavegameDelete: - title: Confirm deletion + title: Підтвердження text: >- - Are you sure you want to delete the game? + Ви справді хочете видалити гру? savegameDeletionError: - title: Failed to delete + title: Виникла помилка при видаленні text: >- - Failed to delete the savegame: + Не вдалося видалити збережену гру. restartRequired: - title: Restart required + title: Потрібне перезавантаження 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: Зміна гарячої клавіши + desc: Натисніть клавішу, яку ви хочете призначити, або escape для скасування. resetKeybindingsConfirmation: - title: Reset keybindings - desc: This will reset all keybindings to their default values. Please confirm. + title: Скинути гарячу клавіші + desc: Це скине всі прив'язки клавіш до їхніх значень за замовчуванням. Будь ласка, підтвердіть. keybindingsResetOk: - title: Keybindings reset - desc: The keybindings have been reset to their respective defaults! + title: Скинути гарячі клавіші + desc: Гарячі клавіши скинемуться до їхніх початкових значень! featureRestriction: - title: Demo Version - desc: You tried to access a feature () which is not available in the demo. Consider getting the standalone version for the full experience! + title: Демоверсія + desc: Ви спробували отримати доступ до функції (), яка недоступна в демонстраційній версії. Подумайте про отримання окремої версії, щоб насолодитися грою сповна! 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 version! + title: Обмежені збереження + desc: Ви можете мати лише одне збереження одночасно в демоверсії. Будь ласка, видаліть збереження чи завантажте окрему версію гри! updateSummary: - title: New update! + title: Нове оновлення! desc: >- - Here are the changes since you last played: + Ось зміни з вашої останньої гри: upgradesIntroduction: - title: Unlock Upgrades + title: Розблокування поліпшень 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. + Усі форми, що ви виробляєте, можуть використовуватися для розблокування поліпшення - Не зруйнуйте свої старі фабрики! + Вкладку з поліпшеннями можна знайти в правому верхньому куті екрана. massDeleteConfirm: - title: Confirm delete + title: Підтвердження видалення desc: >- - You are deleting a lot of buildings ( to be exact)! Are you sure you want to do this? + Ви видаляєте багато будівль (, якщо бути точним)! Ви справді хочете зробити це? massCutConfirm: - title: Confirm cut + title: Підтвердження вирізання desc: >- - You are cutting a lot of buildings ( to be exact)! Are you sure you want to do this? + Ви вирізаєте багато будівль(, якщо бути точним)! Ви справді хочете зробити це? massCutInsufficientConfirm: - title: Confirm cut + title: Підтвердити вирізання desc: >- - You can not afford to paste this area! Are you sure you want to cut it? + Ви не можете дозволити собі вставити цю область! Ви справді хочете вирізати це? blueprintsNotUnlocked: - title: Not unlocked yet + title: Ще не розблоковано desc: >- - Complete level 12 to unlock Blueprints! + Досягніть 13-го рівня, щоб розблокувати креслення! keybindingsIntroduction: - title: Useful keybindings + title: Корисні гарячі клавіши 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.
+ Гра має багато гарячих клавіш, що полегшують будівництво великих фабрик. + Ось декілька, але обов’язково ознайомтеся з прив’язками клавіш!

+ CTRL + тягніть: виділити зону.
+ SHIFT: тримайте, щоб розмістити декілька одного будинку.
+ ALT: змінити орієнтацію розміщеної конвеєрної стрічки.
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: Нова позначка + titleEdit: Редагувати позначку + desc: Дайте їй змістовну назву. Ви також можете додати короткий ключ форми, що можно згенерувати тут. markerDemoLimit: - desc: You can only create two custom markers in the demo. Get the standalone for unlimited markers! + desc: Ви можете створити тільки 2 позначки в демоверсії. Отримайте окрему версії для створення необмеженної кількості позначок. 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: Експортувати зняток + desc: Ви просили експортувати свою базу як знімок екрана. Зверніть увагу, що для великої бази це може бути досить повільним процесом і може навіть зруйнувати вашу гру! 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 - pipette: Pipette - switchLayers: Switch layers + moveMap: Рухатися + selectBuildings: Виділити будівлі + stopPlacement: Зупинити розміщення + rotateBuilding: Повернути будівлю + placeMultiple: Розмістити декілька + reverseOrientation: Змінити орієнтацію + disableAutoOrientation: Вимкнути автоматичну орієнтацію + toggleHud: Перемкнути інтерфейс + placeBuilding: Розмістити будівлю + createMarker: Створити позначку + delete: Видалити + pasteLastBlueprint: Вставити останнє креслення + lockBeltDirection: Увімкнути стрічковий планувальник + plannerSwitchSide: Змінити сторону планувальника + cutSelection: Вирізати + copySelection: Скопіювати + clearSelection: Очистити виділене + pipette: Піпетка + switchLayers: Змінити шари # 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: No color + red: Червоний + green: Зелений + blue: Синій + yellow: Жовтий + purple: Фіолетовий + cyan: Блакитний + white: Білий + black: Чорний + uncolored: Без кольору # 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: Натисніть для циклу варіантів. # 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: Швидкість + range: Дальність + storage: Сховище + oneItemPerSecond: 1 предмет за сек. + itemsPerSecond: предмет. за сек itemsPerSecondDouble: (x2) - tiles: tiles + tiles: плиток # 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: Рівень + completed: Завершено + unlockText: Розблоковано «»! + buttonNextLevel: Наступний рівень # Notifications on the lower right notifications: - newUpgrade: A new upgrade is available! - gameSaved: Your game has been saved. + newUpgrade: Нове оновлення розблоковано! + gameSaved: Вашу гру збережено. # The "Upgrades" window shop: - title: Upgrades - buttonUnlock: Upgrade + title: Поліпшення + buttonUnlock: Поліпшення # Gets replaced to e.g. "Tier IX" - tier: Tier + tier: Ранг # The roman number for each tier tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: MAXIMUM LEVEL (Speed x) + maximumLevel: МАКСИМАЛЬНИЙ РІВЕНЬ (Швидкість х) # The "Statistics" window statistics: - title: Statistics + title: Статистика dataSources: stored: - title: Stored - description: Displaying amount of stored shapes in your central building. + title: Зберігається + description: Відображає кількість збережених фігур у вашому центрі. produced: - title: Produced - description: Displaying all shapes your whole factory produces, including intermediate products. + title: Виробляється + description: Відображає всі форми вашої цілої фабрики, що виробляються, включаючи проміжні продукти. delivered: - title: Delivered - description: Displaying shapes which are delivered to your central building. - noShapesProduced: No shapes have been produced so far. + title: Доставлено + description: Відображає форми, що доставляються до центру. + noShapesProduced: Жодної форми поки не випускається. # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m + shapesPerMinute: за хв. # Settings menu, when you press "ESC" settingsMenu: - playtime: Playtime + playtime: У грі - buildingsPlaced: Buildings - beltsPlaced: Belts + buildingsPlaced: Будівлі + beltsPlaced: Стрічки buttons: - continue: Continue - settings: Settings - menu: Return to menu + continue: Продовжити + settings: Налаштування + menu: Повернутися до меню # Bottom left tutorial hints tutorialHints: - title: Need help? - showHint: Show hint - hideHint: Close + title: Потрібна допомога? + showHint: Показати підказку + hideHint: Закрити # When placing a blueprint blueprintPlacer: - cost: Cost + cost: Вартість # 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: Позначки + hub: Центр + description: ЛКМ на позначку, щоб перейти до неї, ПКМ для видалення

Натисніть для створення позначки з поточного виду або ПКМ, щоб створити позначку в обраному місці. + creationSuccessNotification: Позначку створено. # Shape viewer shapeViewer: - title: Layers - empty: Empty - copyKey: Copy Key + title: Шари + empty: Пустий + copyKey: Копіювати ключ # Interactive tutorial interactiveTutorial: - title: Tutorial + title: Навчання hints: - 1_1_extractor: Place an extractor on top of a circle shape to extract it! + 1_1_extractor: Розмістіть екстрактор поверх фігури кола, щоб отримати її! 1_2_conveyor: >- - Connect the extractor with a conveyor belt to your hub!

Tip: Click and drag the belt with your mouse! + З’єднайте екстрактор з вашим центром за допомогою конвеєрної стрічки!

Підказка: Натисніть і протягніть стрічку вашою мишею. 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. + У цій грі ВАМ НЕ ПОТРІБНО БЕЗДІЯТИ! Будуйте більше екстракторів і стрічок, щоб виконати свою мету швидше.

Підказка: Утримуйте SHIFT, щоб розмістити багато екстракторів, і використовуйте R, щоб обертати їх. # All shop upgrades shopUpgrades: belt: - name: Belts, Distributor & Tunnels - description: Speed x → x + name: Стрічки, розподілювачі і тунелі + description: Швидкість x → x miner: - name: Extraction - description: Speed x → x + name: Видобуток + description: Швидкість x → x processors: - name: Cutting, Rotating & Stacking - description: Speed x → x + name: Різання, обертання й укладання + description: Швидкість x → x painting: - name: Mixing & Painting - description: Speed x → x + name: Змішування і малювання + description: Швидкість x → x # Buildings and their name / description buildings: hub: - deliver: Deliver - toUnlock: to unlock - levelShortcut: LVL + deliver: Доставте, + toUnlock: щоб розблокувати + levelShortcut: РІВ 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: Обертач (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: @@ -560,8 +580,8 @@ buildings: 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: Різання фігур + desc: Ви тільки-но розблокували різця. Він розрізає фігури наполовину з вершини до низу незалежно від його орієнтації!

Обов’язково позбудьтесь відходів або він зупиниться. Для цього є сміттєбак, який знищує все, що входить в нього. reward_rotater: title: Rotating @@ -582,7 +602,7 @@ storyRewards: 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!

+ desc: Багатофункціональний балансир було розблоковано. Його можна використовувати для створення великих фабрик, розділяючи та об’єднуючи предмети на кілька стрічок!

reward_tunnel: title: Tunnel @@ -631,20 +651,21 @@ storyRewards: # Special reward, which is shown when there is no reward actually no_reward: - title: Next level + title: Наступний рівень 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! + Цей рівень не дав нагороди, але в наступному... щось буде.

До речі, краще не руйнуйте свою поточну фабрику. Вам знадобляться всі ті форми пізніше, щоб розблокувати поліпшення! no_reward_freeplay: - title: Next level + title: Наступний рівень desc: >- - Congratulations! By the way, more content is planned for the standalone! + Вітаємо! До речі, більше контенту планується в окремій версії! settings: - title: Settings + title: Налаштування categories: - game: Game - app: Application + general: Загальне + userInterface: Користувацький інтерфейс + advanced: Передове versionBadges: dev: Development @@ -654,102 +675,102 @@ settings: labels: uiScale: - title: Interface scale + title: Масштаб інтерфейсу description: >- - 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 - regular: Regular - large: Large - huge: Huge + super_small: Надзвичайно малий + small: Малий + regular: Звичайний + large: Великий + huge: Величезний autosaveInterval: - title: Autosave Interval + title: Проміжок між автозбереженнями 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 + one_minute: 1 хвилина + two_minutes: 2 хвилини + five_minutes: 5 хвилин + ten_minutes: 10 хвилин + twenty_minutes: 20 хвилин + disabled: Вимкнено scrollWheelSensitivity: - title: Zoom sensitivity + title: Чутливість масштабування description: >- - Changes how sensitive the zoom is (Either mouse wheel or trackpad). + Змінює наскільки чутливе масштабування (колесо миші або трекпад). sensitivity: - super_slow: Super slow - slow: Slow - regular: Regular - fast: Fast - super_fast: Super fast + super_slow: Надзвичайно повільна + slow: Повільна + regular: Звичайна + fast: Швидка + super_fast: Надзвичайно швидка movementSpeed: - title: Movement speed + title: Швидкість руху 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 + super_slow: Надзвичайно повільна + slow: Повільна + regular: Звичайна + fast: Швидка + super_fast: Надзвичайно швидка + extremely_fast: Екстремально швидка language: - title: Language + title: Мова description: >- - Change the language. All translations are user-contributed and might be incomplete! + Змініть мову. Усі переклади зроблені користувачами і можуть бути незавершеними! enableColorBlindHelper: - title: Color Blind Mode + title: Режим високої контрастності description: >- - Enables various tools which allow you to play the game if you are color blind. + Дозволяє використовувати різні інструменти, які дозволяють грати в гру, якщо ви є дальтоніком. fullscreen: - title: Fullscreen + title: Повноекранний режим description: >- - It is recommended to play the game in fullscreen to get the best experience. Only available in the standalone. + Щоб повністю насолодитися грою, рекомендується грати у повноекранному режимі. Не доступно тільки в демоверсії. soundsMuted: - title: Mute Sounds + title: Заглушити звуки description: >- - If enabled, mutes all sound effects. + Якщо увімкнено, то вимикає всі звукові ефекти. musicMuted: - title: Mute Music + title: Заглушити музику description: >- - If enabled, mutes all music. + Якщо увімкнено, то вимикає всю музику. theme: - title: Game theme + title: Тема гри description: >- - Choose the game theme (light / dark). + Оберіть тему гри (світлу чи темну). themes: - dark: Dark - light: Light + dark: Темна + light: Світла refreshRate: - title: Simulation Target + title: Частота оновлення 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. + Якщо ви маєте 144-герцовий монітор, то змініть частоту оновлення тут, щоб гра правильно працювала при більшій швидкості оновлення. Це може фактично знизити FPS, якщо ваш комп’ютер занадто повільний. alwaysMultiplace: - title: Multiplace + title: Мультирозміщення description: >- - If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently. + Якщо ввімкнено, всі будівлі залишатимуться вибраними після розміщення, доки ви не скасуєте це. Це еквівалентно постійному утримуванню SHIFT. offerHints: - title: Hints & Tutorials + title: Підказки & посібники description: >- - 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 + title: Розумні Tunnels description: >- When enabled, placing tunnels will automatically remove unnecessary belts. This also enables you to drag tunnels and excess tunnels will get removed. @@ -774,15 +795,15 @@ settings: Disables the warning dialogs brought up when cutting/deleting more than 100 entities. keybindings: - title: Keybindings + title: Гарячі клавіши hint: >- Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options. - resetKeybindings: Reset Keybindings + resetKeybindings: Скинути гарячі клавіші categoryLabels: - general: Application - ingame: Game + general: Застосунок + ingame: Гра navigation: Navigating placement: Placement massSelect: Mass Select @@ -790,8 +811,8 @@ keybindings: placementModifiers: Placement Modifiers mappings: - confirm: Confirm - back: Back + confirm: Підтвердити + back: Назад mapMoveUp: Move Up mapMoveRight: Move Right mapMoveDown: Move Down @@ -799,13 +820,13 @@ keybindings: mapMoveFaster: Move Faster centerMap: Center Map - mapZoomIn: Zoom in - mapZoomOut: Zoom out - createMarker: Create Marker + mapZoomIn: Приблизити + mapZoomOut: Віддалити + createMarker: Створити позначку - menuOpenShop: Upgrades - menuOpenStats: Statistics - menuClose: Close Menu + menuOpenShop: Поліпшення + menuOpenStats: Статистика + menuClose: Закрити меню toggleHud: Toggle HUD toggleFPSInfo: Toggle FPS and Debug Info @@ -825,12 +846,12 @@ keybindings: trash: *trash wire: *wire - pipette: Pipette - rotateWhilePlacing: Rotate + pipette: Pipetteї + rotateWhilePlacing: Повернути rotateInverseModifier: >- Modifier: Rotate CCW instead cycleBuildingVariants: Cycle Variants - confirmMassDelete: Delete area + confirmMassDelete: Видалити ділянку pasteLastBlueprint: Paste last blueprint cycleBuildings: Cycle Buildings lockBeltDirection: Enable belt planner @@ -838,36 +859,36 @@ keybindings: Planner: Switch side massSelectStart: Hold and drag to start - massSelectSelectMultiple: Select multiple areas - massSelectCopy: Copy area - massSelectCut: Cut area + massSelectSelectMultiple: + massSelectCopy: Копіювати ділянку + massSelectCut: Вирізати ділянку - placementDisableAutoOrientation: Disable automatic orientation + placementDisableAutoOrientation: Вимкнути автоматичну орієнтацію placeMultiple: Stay in placement mode placeInverse: Invert automatic belt orientation about: - title: About this Game + title: Про гру body: >- - This game is open source and developed by Tobias Springer (this is me).

+ Ця гра з відкритим вихідним кодом і розроблена Tobias Springer (це я).

- If you want to contribute, check out shapez.io on github.

+ Якщо ви хочете зробити внесок, то йдіть на github shapez.io.

- This game wouldn't have been possible without the great discord community around my games - You should really join the discord server!

+ Ця гра не була б можливою без великої Discord спільноти навколо моїх ігор. Гадаю, вам дійсно слід долучитися до серверу в discord!

- The soundtrack was made by Peppsen - He's awesome.

+ Звуковий трек був зроблений гравцем Peppsen — він просто приголомшливий.

- Finally, huge thanks to my best friend Niklas - Without our factorio sessions, this game would never have existed. + І нарешті, величезна подяка моєму найкращому другу Niklas, бо без наших сеансів у факторіо ця гра ніколи б не існувала. changelog: - title: Changelog + title: Змінопис demo: features: - restoringGames: Restoring savegames - importingGames: Importing savegames - oneGameLimit: Limited to one savegame - customizeKeybindings: Customizing Keybindings - exportingBase: Exporting whole Base as Image + restoringGames: Відновлення збережень + importingGames: Імпортування збережень + oneGameLimit: Обмежено одним збереженням + customizeKeybindings: Налаштування гарячих клавіш + exportingBase: Експортування цілої бази у вигляді зображення - settingNotAvailable: Not available in the demo. + settingNotAvailable: Недоступно в демоверсії. diff --git a/translations/base-zh-CN.yaml b/translations/base-zh-CN.yaml index 411bdde4..225619e0 100644 --- a/translations/base-zh-CN.yaml +++ b/translations/base-zh-CN.yaml @@ -15,7 +15,7 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # the basic structure so the game also detects it. # @@ -176,12 +176,11 @@ mainMenu: # This is shown when using firefox and other browsers which are not supported. browserWarning: >- - 很抱歉, 本游戏在当前浏览器上可能运行缓慢! 使用chrome或者获取独立版以得到更好的体验。 + 很抱歉, 本游戏在当前浏览器上可能运行缓慢! 使用 Chrome 或者获取独立版以得到更好的体验。 savegameLevel: 第关 savegameLevelUnknown: 未知关卡 - # contestOver: This contest has ended - Join the discord to get noticed about new contests! continue: 继续游戏 newGame: 新游戏 madeBy: 作者: @@ -233,7 +232,7 @@ dialogs: editKeybinding: title: 更改按键设置 - desc: 请按下你想要使用的按键,或者按下ESC键来取消设置。 + desc: 请按下你想要使用的按键,或者按下 ESC 键来取消设置。 resetKeybindingsConfirmation: title: 重置所有按键 @@ -245,11 +244,11 @@ dialogs: featureRestriction: title: 演示版 - desc: 你尝试使用了 功能。该功能在演示版中不可用。请考虑购买独立版以获得更好的体验。 + desc: 你尝试使用了功能。该功能在演示版中不可用。请考虑购买独立版以获得更好的体验。 oneSavegameLimit: title: 存档数量限制 - desc: 演示版中只能保存一份存档。 请删除旧存档或者获取独立版! + desc: 演示版中只能保存一份存档。请删除旧存档或者获取独立版! updateSummary: title: 更新啦! @@ -301,8 +300,8 @@ dialogs: 你将要导出你的工厂的截图。如果你的基地很大,截图过程将会很慢,且有可能导致游戏崩溃! massCutInsufficientConfirm: - title: Confirm cut - desc: You can not afford to paste this area! Are you sure you want to cut it? + title: 确认剪切 + desc: 你没有足够的图形来粘贴这个区域!你确定要剪切吗? ingame: # This is shown in the top left corner and displays useful keybindings in @@ -315,7 +314,7 @@ ingame: placeMultiple: 放置多个 reverseOrientation: 反向放置 disableAutoOrientation: 关闭自动定向 - toggleHud: 开关HUD + toggleHud: 开关 HUD placeBuilding: 放置建筑 createMarker: 创建地图标记 delete: 销毁 @@ -333,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: >- @@ -392,7 +391,7 @@ ingame: noShapesProduced: 你还没有生产任何图形。 # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: 个/分钟 + shapesPerMinute: 个 / 分钟 # Settings menu, when you press "ESC" settingsMenu: @@ -420,7 +419,7 @@ ingame: waypoints: waypoints: 地图标记 hub: 基地 - description: 左键跳转到地图标记,右键删除地图标记。

在当前地点创建地图标记,或者在选定位置上右键创建地图标记. + description: 左键跳转到地图标记,右键删除地图标记。

在当前地点创建地图标记,或者在选定位置上右键创建地图标记. creationSuccessNotification: 成功创建地图标记。 # Interactive tutorial @@ -433,7 +432,7 @@ ingame: 1_3_expand: >- 这不是一个挂机游戏!建造更多的开采机和传送带来更快地完成目标。

- 提示:按住SHIFT键来放置多个开采机,用R键旋转它们。 + 提示:按住 SHIFT 键来放置多个开采机,用 R 键旋转它们。 colors: red: 红色 @@ -444,11 +443,11 @@ ingame: cyan: 青色 white: 白色 uncolored: 无色 - black: Black + black: 黑色 shapeViewer: title: 层 # TODO: find better translation empty: 空 - copyKey: Copy Key + copyKey: 复制短代码 # All shop upgrades shopUpgrades: @@ -506,10 +505,10 @@ buildings: cutter: default: name: &cutter 切割机 - description: 将图形从上到下切开并输出。 如果你只需要其中一半,记得把另一半销毁掉,否则切割机会停止工作! + description: 将图形从上到下切开并输出。如果你只需要其中一半,记得把另一半销毁掉,否则切割机会停止工作! quad: name: 切割机(四向) - description: 将输入的图形切成四块。 如果你只需要其中一块,记得把其他的销毁掉,否则切割机会停止工作! + description: 将输入的图形切成四块。如果你只需要其中一块,记得把其他的销毁掉,否则切割机会停止工作! rotater: default: @@ -518,6 +517,9 @@ buildings: ccw: name: 旋转机(逆时针) description: 将图形逆时针旋转90度。 + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -527,7 +529,7 @@ buildings: mixer: default: name: &mixer 混色机 - description: 将两个颜色混合在一起。(加法混合) + description: 用加法混色将两个颜色混合起来 painter: default: @@ -590,11 +592,11 @@ storyRewards: reward_painter: title: 上色 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! + 恭喜!你解锁了上色机。开采一些颜色 (就像你开采图形一样) 将其在上色机中与图形结合来将图形上色!

PS:如果你患有色盲,可以在设置中启用色盲模式! reward_mixer: title: 混合颜色 - desc: The mixer has been unlocked - Combine two colors using additive blending with this building! + desc: 恭喜!你解锁了混色机。这个建筑使用加法混色将两种颜色混合起来。 reward_stacker: title: 堆叠 @@ -610,11 +612,11 @@ storyRewards: reward_rotater_ccw: title: 逆时针旋转 - desc: 恭喜!你解锁了旋转机逆时针变体。这个变体可以逆时针旋转图形。选择旋转机然后按“T”键来选取这个变体。 + desc: 恭喜!你解锁了旋转机逆时针变体。这个变体可以逆时针旋转图形。选择旋转机然后按"T"键来选取这个变体。 reward_miner_chainable: title: 链式开采机 - desc: You have unlocked the chaining extractor! It can forward its resources to other extractors so you can more efficiently extract resources! + desc: 你解锁了链式开采机! 它能够把资源传递给其他开采机,让你可以更高效率的开采资源! reward_underground_belt_tier_2: title: 二级隧道 @@ -622,7 +624,7 @@ storyRewards: reward_splitter_compact: title: 小型合流机 - desc: You have unlocked a compact variant of the balancer - It accepts two inputs and merges them into one! + desc: 恭喜!你解锁了平衡机的变体。它能够接受两个输入,合并成一个输出! reward_cutter_quad: title: 四向切割机 @@ -638,7 +640,7 @@ storyRewards: reward_storage: title: 仓库 - desc: You have unlocked a variant of the trash - It allows to store items up to a given capacity! + desc: 恭喜!你解锁了垃圾桶的变体。他可以存储一定数量的物品! reward_freeplay: title: 自由模式 @@ -646,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: 下一关 @@ -662,8 +664,9 @@ storyRewards: settings: title: 设置 categories: - game: 游戏内容 - app: 应用 + general: 通用 + userInterface: 用户界面 + advanced: 高级 versionBadges: dev: 开发版本 # Development @@ -726,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. @@ -789,16 +792,14 @@ settings: title: 色盲模式 description: 提供一些分辨颜色的工具。目前当鼠标移至颜色资源上方时,屏幕上方会显示颜色名称。 rotationByBuilding: - title: Rotation by building type + title: 记忆建筑方向 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. + 每一类建筑都会记住各自上一次的旋转方向。如果你经常在不同建筑类型之间切换,这个设置会让游戏更加舒适。 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. @@ -880,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 359106e8..65aef6fa 100644 --- a/translations/base-zh-TW.yaml +++ b/translations/base-zh-TW.yaml @@ -15,7 +15,7 @@ # # Adding a new language: # -# If you want to add a new language, ask me in the discord and I will setup +# If you want to add a new language, ask me in the Discord and I will setup # the basic structure so the game also detects it. # @@ -45,6 +45,7 @@ # Painter:上色機 # Trash:垃圾桶 +--- steamPage: # This is the short text appearing on the steam page shortText: shapez.io 是一款在一個無邊際的地圖上建造工廠、自動化生產與組合愈加複雜圖形的遊戲。 @@ -512,6 +513,9 @@ buildings: ccw: name: 旋轉機(逆時針) description: 將圖形逆時針旋轉90度。 + fl: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: @@ -657,8 +661,9 @@ storyRewards: settings: title: 設置 categories: - game: 遊戲內容 - app: 應用 + general: General + userInterface: User Interface + advanced: Advanced versionBadges: dev: 開發版本 # Development diff --git a/yarn.lock b/yarn.lock index 631026b8..17154c73 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,17 +1259,7 @@ 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.2.1: +acorn@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== @@ -1300,14 +1275,14 @@ ajv-errors@^1.0.0: integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + version "3.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.1.tgz#b83ca89c5d42d69031f424cad49aada0236c6957" + integrity sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA== -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.0: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== +ajv@^6.1.0: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -1324,6 +1299,16 @@ ajv@^6.10.0: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.10.2, ajv@^6.12.0: + version "6.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -1334,18 +1319,6 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -ansi-colors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" - integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== - dependencies: - ansi-wrap "^0.1.0" - -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" @@ -1353,23 +1326,11 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.11.0" -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= - dependencies: - ansi-wrap "0.1.0" - ansi-regex@^2.0.0: version "2.1.1" 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" @@ -1400,11 +1361,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" -ansi-wrap@0.1.0, ansi-wrap@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= - any-base@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" @@ -1418,6 +1374,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1457,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" @@ -1472,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" @@ -1565,13 +1507,6 @@ async@~0.2.10: resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= -async@~2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" - integrity sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw= - dependencies: - lodash "^4.14.0" - atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -1623,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" @@ -1744,6 +1662,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -1769,10 +1692,15 @@ bmp-js@^0.1.0: resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM= -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" + integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== body-parser@1.19.0: version "1.19.0" @@ -1819,6 +1747,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1855,7 +1790,7 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= @@ -1864,17 +1799,19 @@ browserify-rsa@^4.0.0: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + version "4.2.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" + integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.2" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" @@ -2124,7 +2061,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= @@ -2135,24 +2081,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" @@ -2169,26 +2097,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" @@ -2213,6 +2126,21 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" + integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -2253,13 +2181,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" @@ -2267,13 +2188,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" @@ -2281,13 +2195,6 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= - dependencies: - colors "1.0.3" - cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -2316,11 +2223,6 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= - clone-response@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -2328,25 +2230,6 @@ clone-response@1.0.2: dependencies: mimic-response "^1.0.0" -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - coa@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" @@ -2396,11 +2279,6 @@ color-string@^1.5.2: color-name "^1.0.0" simple-swizzle "^0.2.2" -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - color@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" @@ -2409,21 +2287,11 @@ color@^3.0.0: color-convert "^1.9.1" color-string "^1.5.2" -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - colors@^1.3.3: version "1.4.0" 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" @@ -2446,13 +2314,6 @@ commander@~2.8.1: dependencies: graceful-readlink ">= 1.0.0" -commander@~2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= - dependencies: - graceful-readlink ">= 1.0.0" - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -2560,7 +2421,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== @@ -2588,7 +2449,7 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -2599,7 +2460,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -2640,11 +2501,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" @@ -2953,7 +2809,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= @@ -3147,10 +3003,10 @@ electron-to-chromium@^1.3.390: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.403.tgz#c8bab4e2e72bf78bc28bad1cc355c061f9cc1918" integrity sha512-JaoxV4RzdBAZOnsF4dAlZ2ijJW72MbqO5lNfOBHUWiBQl3Rwe+mk2RCUMrRI3rSClLJ8HSNQNqcry12H+0ZjFw== -elliptic@^6.0.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" - integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== +elliptic@^6.0.0, elliptic@^6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -3190,13 +3046,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" @@ -3214,9 +3063,9 @@ enhanced-resolve@4.1.0: tapable "^1.0.0" enhanced-resolve@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== dependencies: graceful-fs "^4.1.2" memory-fs "^0.5.0" @@ -3285,18 +3134,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" @@ -3381,14 +3218,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" @@ -3398,11 +3227,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" @@ -3427,16 +3251,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" @@ -3607,15 +3421,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" @@ -3639,20 +3444,10 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -fancy-log@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.2.0" @@ -3664,7 +3459,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= @@ -3706,13 +3501,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" @@ -3798,6 +3586,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -3945,13 +3740,18 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.12" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" - integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q== + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: bindings "^1.5.0" nan "^2.12.1" +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4030,7 +3830,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0: +glob-parent@^5.0.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -4155,11 +3955,16 @@ got@^8.3.1: url-parse-lax "^3.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: +graceful-fs@^4.1.10: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -4251,12 +4056,13 @@ has@^1.0.0, has@^1.0.3: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -4378,7 +4184,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== @@ -4484,7 +4290,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4504,25 +4310,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" @@ -4562,11 +4349,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" @@ -4613,7 +4395,14 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.1.5, is-buffer@~1.1.1: +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +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== @@ -4721,7 +4510,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -4745,6 +4534,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" @@ -4772,11 +4566,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" @@ -4794,7 +4583,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= @@ -4863,31 +4652,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" @@ -4909,11 +4673,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" @@ -5047,14 +4806,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" @@ -5141,21 +4892,11 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash.clone@^4.3.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" - integrity sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y= - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.some@^4.2.2: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= - lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -5176,7 +4917,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.14.0, 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== @@ -5325,15 +5066,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" @@ -5449,11 +5181,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" @@ -5481,7 +5208,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== @@ -5493,11 +5220,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" @@ -5577,30 +5299,15 @@ 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" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== nanomatch@^1.2.9: version "1.2.13" @@ -5630,9 +5337,9 @@ negotiator@0.6.2: integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nice-try@^1.0.4: version "1.0.5" @@ -5646,22 +5353,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" @@ -5713,7 +5404,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -5764,15 +5455,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" @@ -5858,21 +5540,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" @@ -5880,43 +5547,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" @@ -6105,7 +5740,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0: +parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.5" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== @@ -6155,11 +5790,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-node-version@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -6237,9 +5867,9 @@ path-type@^1.0.0: pinkie-promise "^2.0.0" pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -6262,6 +5892,11 @@ phonegap-plugin-mobile-accessibility@^1.0.5: resolved "https://registry.yarnpkg.com/phonegap-plugin-mobile-accessibility/-/phonegap-plugin-mobile-accessibility-1.0.5.tgz#95a8754d127508bc6e1ae259a53ce765836eac03" integrity sha1-lah1TRJ1CLxuGuJZpTznZYNurAM= +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -6296,11 +5931,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" @@ -6315,16 +5945,6 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -plugin-error@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" - integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA== - dependencies: - ansi-colors "^1.0.1" - arr-diff "^4.0.0" - arr-union "^3.1.0" - extend-shallow "^3.0.2" - pngjs@^3.0.0, pngjs@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" @@ -7015,11 +6635,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" @@ -7047,7 +6662,7 @@ private@^0.1.8, private@~0.1.5: resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: +process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== @@ -7200,7 +6815,7 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -7260,7 +6875,16 @@ read-pkg@^1.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdirp@^2.1.0, readdirp@^2.2.1: +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== @@ -7269,6 +6893,13 @@ readdirp@^2.1.0, readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + recast@~0.11.12: version "0.11.23" resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" @@ -7287,11 +6918,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" @@ -7304,12 +6930,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== @@ -7391,11 +7012,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -replace-ext@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -7450,14 +7066,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" @@ -7503,13 +7111,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" @@ -7527,11 +7128,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" @@ -7544,10 +7140,10 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex@^1.1.0: version "1.1.0" @@ -7662,6 +7258,13 @@ serialize-javascript@^2.1.2: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -7750,16 +7353,6 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -sloc@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/sloc/-/sloc-0.2.1.tgz#42ad891e76838c1a22bbd8483468e9d74c7f531e" - integrity sha512-8XJnwCFR4DatLz1s0nGFe6IJPJ+5pjRFhoBuBKq8SLgFI40eD7ak6jOXpzeG0tmIpyOc1zCs9bjKAxMFm1451A== - dependencies: - async "~2.1.4" - cli-table "^0.3.1" - commander "~2.9.0" - readdirp "^2.1.0" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -7827,17 +7420,10 @@ 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.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -7864,13 +7450,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" @@ -7897,13 +7476,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" @@ -8014,19 +7586,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" @@ -8079,7 +7638,7 @@ string.prototype.trimstart@^1.0.0: define-properties "^1.1.3" es-abstract "^1.17.5" -string_decoder@^1.0.0: +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -8100,13 +7659,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" @@ -8194,7 +7746,7 @@ supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -8268,7 +7820,7 @@ tempfile@^2.0.0: temp-dir "^1.0.0" uuid "^3.0.1" -terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.4.3: +terser-webpack-plugin@^1.1.0: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== @@ -8283,10 +7835,25 @@ terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" +terser-webpack-plugin@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^3.1.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + terser@^4.1.2: - version "4.6.11" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.11.tgz#12ff99fdd62a26de2a82f508515407eb6ccd8a9f" - integrity sha512-76Ynm7OXUG5xhOpblhytE7X58oeNSmC8xnNhjWVo8CksHit0U0kO4hfNbPrrYwowLWFgM2n9L176VNx2QaHmtA== + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -8310,11 +7877,6 @@ through@^2.3.6, through@^2.3.8, through@~2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= - timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -8379,6 +7941,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -8416,21 +7985,11 @@ 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.8.1, tslib@^1.9.0: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== -tslib@^1.9.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" - integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== - tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -8457,13 +8016,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" @@ -8665,7 +8217,7 @@ utif@^2.0.1: dependencies: pako "^1.0.5" -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -8722,11 +8274,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" @@ -8737,18 +8284,6 @@ vendors@^1.0.0: resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== -vinyl@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" - integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -8761,14 +8296,23 @@ warning@^3.0.0: dependencies: loose-envify "^1.0.0" -watchpack@^1.6.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2" - integrity sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA== +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== dependencies: chokidar "^2.1.8" + +watchpack@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" + integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== + dependencies: graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.0" + watchpack-chokidar2 "^2.0.0" webpack-bundle-analyzer@^3.0.3: version "3.7.0" @@ -8826,21 +8370,6 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack-stream@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/webpack-stream/-/webpack-stream-5.2.1.tgz#35c992161399fe8cad9c10d4a5c258f022629b39" - integrity sha512-WvyVU0K1/VB1NZ7JfsaemVdG0PXAQUqbjUNW4A58th4pULvKMQxG+y33HXTL02JvD56ko2Cub+E2NyPwrLBT/A== - dependencies: - fancy-log "^1.3.3" - lodash.clone "^4.3.2" - lodash.some "^4.2.2" - memory-fs "^0.4.1" - plugin-error "^1.0.1" - supports-color "^5.5.0" - through "^2.3.8" - vinyl "^2.1.0" - webpack "^4.26.1" - webpack-strip-block@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/webpack-strip-block/-/webpack-strip-block-0.2.0.tgz#c60d4a703e0eeee8895e7f1abe9b5fe914681470" @@ -8848,16 +8377,16 @@ webpack-strip-block@^0.2.0: dependencies: loader-utils "^1.1.0" -webpack@^4.26.1, webpack@^4.31.0: - version "4.42.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.1.tgz#ae707baf091f5ca3ef9c38b884287cfe8f1983ef" - integrity sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg== +webpack@^4.43.0: + version "4.43.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" + integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0" "@webassemblyjs/wasm-edit" "1.9.0" "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.2.1" + acorn "^6.4.1" ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" @@ -8874,7 +8403,7 @@ webpack@^4.26.1, webpack@^4.31.0: schema-utils "^1.0.0" tapable "^1.1.3" terser-webpack-plugin "^1.4.3" - watchpack "^1.6.0" + watchpack "^1.6.1" webpack-sources "^1.4.1" whatwg-fetch@^3.0.0: @@ -8901,7 +8430,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== @@ -9066,6 +8595,11 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.1" +yarn@^1.22.4: + version "1.22.4" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.4.tgz#01c1197ca5b27f21edc8bc472cd4c8ce0e5a470e" + integrity sha512-oYM7hi/lIWm9bCoDMEWgffW8aiNZXCWeZ1/tGy0DWrN6vmzjCXIKu2Y21o8DYVBUtiktwKcNoxyGl/2iKLUNGA== + yauzl@^2.4.2: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"